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