stack stk_new(void) {
stack s;
- s = mknew(struct stackTag);
+ s = snew(struct stackTag);
s->sp = 0;
s->size = 0;
s->data = NULL;
void stk_push(stack s, void *item) {
if (s->size <= s->sp) {
s->size = s->sp + 32;
- s->data = resize(s->data, s->size);
+ s->data = sresize(s->data, s->size, void *);
}
s->data[s->sp++] = item;
}
void rdadd(rdstring *rs, wchar_t c) {
if (rs->pos >= rs->size-1) {
rs->size = rs->pos + 128;
- rs->text = resize(rs->text, rs->size);
+ rs->text = sresize(rs->text, rs->size, wchar_t);
}
rs->text[rs->pos++] = c;
rs->text[rs->pos] = 0;
int len = ustrlen(p);
if (rs->pos >= rs->size - len) {
rs->size = rs->pos + len + 128;
- rs->text = resize(rs->text, rs->size);
+ rs->text = sresize(rs->text, rs->size, wchar_t);
}
ustrcpy(rs->text + rs->pos, p);
rs->pos += len;
}
wchar_t *rdtrim(rdstring *rs) {
- rs->text = resize(rs->text, rs->pos + 1);
+ rs->text = sresize(rs->text, rs->pos + 1, wchar_t);
return rs->text;
}
void rdaddc(rdstringc *rs, char c) {
if (rs->pos >= rs->size-1) {
rs->size = rs->pos + 128;
- rs->text = resize(rs->text, rs->size);
+ rs->text = sresize(rs->text, rs->size, char);
}
rs->text[rs->pos++] = c;
rs->text[rs->pos] = 0;
}
void rdaddsc(rdstringc *rs, char const *p) {
- int len = strlen(p);
+ rdaddsn(rs, p, strlen(p));
+}
+void rdaddsn(rdstringc *rs, char const *p, int len) {
if (rs->pos >= rs->size - len) {
rs->size = rs->pos + len + 128;
- rs->text = resize(rs->text, rs->size);
+ rs->text = sresize(rs->text, rs->size, char);
}
- strcpy(rs->text + rs->pos, p);
+ memcpy(rs->text + rs->pos, p, len);
rs->pos += len;
+ rs->text[rs->pos] = 0;
}
char *rdtrimc(rdstringc *rs) {
- rs->text = resize(rs->text, rs->pos + 1);
+ rs->text = sresize(rs->text, rs->pos + 1, char);
return rs->text;
}
} else {
wchar_t *ap = a->text, *bp = b->text;
while (*ap && *bp) {
- wchar_t ac = utolower(*ap), bc = utolower(*bp);
+ wchar_t ac = *ap, bc = *bp;
if (ac != bc)
return (ac < bc ? -1 : +1);
if (!*++ap && a->next && a->next->type == t && !a->next->alt)
}
}
+#ifdef HAS_WCSCOLL
+ {
+ wchar_t a[2], b[2];
+ int ret;
+
+ a[0] = pos[0].c;
+ b[0] = pos[1].c;
+ a[1] = b[1] = L'\0';
+
+ ret = wcscoll(a, b);
+ if (ret)
+ return ret;
+ }
+#else
if (pos[0].c < pos[1].c)
return -1;
else if (pos[0].c > pos[1].c)
return +1;
+#endif
if (!pos[0].c)
break; /* they're equal */
*/
i = 0;
while (i < nwords) {
- wrappedline *w = mknew(wrappedline);
+ wrappedline *w = snew(wrappedline);
*ptr = w;
ptr = &w->next;
w->next = NULL;
upos = ulen;
ulen += 2 + ustrlen(ustring);
- cfg->keyword = resize(cfg->keyword, ulen);
+ cfg->keyword = sresize(cfg->keyword, ulen, wchar_t);
ustrcpy(cfg->keyword+upos, ustring);
cfg->keyword[ulen-1] = L'\0';
pos = len;
len += 2 + strlen(string);
- cfg->origkeyword = resize(cfg->origkeyword, len);
+ cfg->origkeyword = sresize(cfg->origkeyword, len, char);
strcpy(cfg->origkeyword+pos, string);
cfg->origkeyword[len-1] = '\0';
{
paragraph *p;
- p = mknew(paragraph);
+ p = snew(paragraph);
memset(p, 0, sizeof(*p));
p->type = para_Config;
p->next = NULL;