Exemplo n.º 1
0
int
DohCmp(const DOH *obj1, const DOH *obj2) {
  DohBase *b1, *b2;
  DohObjInfo *b1info, *b2info;
  b1 = (DohBase *) obj1;
  b2 = (DohBase *) obj2;
  if ((!DohCheck(b1)) || (!DohCheck(b2))) {
    if ((b1 == 0) && (b2 == 0)) return 0;
    if (b1 && !b2) return 1;
    if (!b1 &&  b2) return -1;
    return strcmp((char *) DohData(b1),(char *) DohData(b2));
  }
  b1info = b1->type;
  b2info = b2->type;
  if ((b1info == b2info) && (b1info->doh_cmp)) 
    return (b1info->doh_cmp)(b1,b2);
  return 1;
}
Exemplo n.º 2
0
static int 
String_insert(DOH *so, int pos, DOH *str)
{
  String *s = (String *) ObjData(so);
  char *nstr;
  int   len;
  char *data;

  data = (char *) DohData(str);
  nstr = s->str;

  s->hashkey = -1;
  if (pos == DOH_END) {
    add(s, data);
    return 0;
  }

  if (pos < 0) pos = 0;
  else if (pos > s->len) pos = s->len;
  
  /* See if there is room to insert the new data */
  len = Len(str);  
  while (s->maxsize <= s->len+len) {
    s->str = (char *) DohRealloc(s->str,2*s->maxsize);
    assert(s->str);
    s->maxsize *= 2;
  }
  memmove(s->str+pos+len, s->str+pos, (s->len - pos));
  memcpy(s->str+pos,data,len);
  if (s->sp >= pos) {
    int i;
    
    for (i = 0; i < len; i++) {
      if (data[i] == '\n') s->line++;
    }
    s->sp+=len;
  }
  s->len += len;
  s->str[s->len] = 0;
  return 0;
}