Posted to tcl by hypnotoad at Mon Dec 08 16:01:35 GMT 2014view raw
- 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);
- }