Posted to tcl by hypnotoad at Fri Dec 05 19:48:52 GMT 2014view pretty
static constObj *irm_constant(const char *zName,int create) { int len,isNew=0; Tcl_HashEntry *pEntry; constObj *p; if(zName==NULL) { return NULL; } if(create) { pEntry=Tcl_CreateHashEntry(&constant_strings,zName,&isNew); } else { pEntry=Tcl_FindHashEntry(&constant_strings,zName); } if(isNew) { len = strlen(zName); p =(constObj*)IRM_Alloc(sizeof(*p)+len+1); p->string=p+1; strncpy(p->string, zName, len+1); p->tclobj=Tcl_NewStringObj(zName,len); Tcl_IncrRefCount(p->tclobj); Tcl_SetHashValue(pEntry,(ClientData)p); return p; } if(pEntry) { p=(constObj*)Tcl_GetHashValue(pEntry); return p; } return NULL; } int Irm_SameString(char *aPtr,char *bPtr) { if(aPtr==bPtr) { return 1; } if(!bPtr || !aPtr) { return 0; } if(strcmp(aPtr,bPtr)==0) { return 1; } return 0; } char *irm_constant_string(const char *zName) { constObj *p; p=irm_constant(zName,1); return p->string; } Tcl_Obj *irm_constant_tclobj(const char *zName) { constObj *p; p=irm_constant(zName,1); Tcl_IncrRefCount(p->tclobj); return p->tclobj; } Tcl_Obj *Irm_NewStringObj(const char *str) { /* if(!str) { return Tcl_NewObj(); } return Tcl_NewStringObj(str,-1); */ return irm_constant_tclobj(str); }