version 1.46, 2006/04/02 17:18:58 |
version 1.47, 2009/06/02 17:57:30 |
|
|
int cc, rr; /* saved ttcol, ttrow */ |
int cc, rr; /* saved ttcol, ttrow */ |
char *ret; /* return value */ |
char *ret; /* return value */ |
|
|
|
static char emptyval[] = ""; /* XXX hackish way to return err msg*/ |
|
|
#ifndef NO_MACRO |
#ifndef NO_MACRO |
if (inmacro) { |
if (inmacro) { |
if (dynbuf) { |
if (dynbuf) { |
|
|
size_t newsize = epos + epos + 16; |
size_t newsize = epos + epos + 16; |
if ((newp = realloc(buf, newsize)) |
if ((newp = realloc(buf, newsize)) |
== NULL) |
== NULL) |
goto fail; |
goto memfail; |
buf = newp; |
buf = newp; |
nbuf = newsize; |
nbuf = newsize; |
} |
} |
|
if (!dynbuf && epos + 1 >= nbuf) { |
|
ewprintf("Line too long"); |
|
return (emptyval); |
|
} |
for (t = epos; t > cpos; t--) |
for (t = epos; t > cpos; t--) |
buf[t] = buf[t - 1]; |
buf[t] = buf[t - 1]; |
buf[cpos++] = (char)y; |
buf[cpos++] = (char)y; |
|
|
if (macrodef) { |
if (macrodef) { |
struct line *lp; |
struct line *lp; |
|
|
if ((lp = lalloc(cpos)) == NULL) { |
if ((lp = lalloc(cpos)) == NULL) |
static char falseval[] = ""; |
goto memfail; |
/* XXX hackish */ |
|
if (dynbuf && buf != NULL) |
|
free(buf); |
|
return (falseval); |
|
} |
|
lp->l_fp = maclcur->l_fp; |
lp->l_fp = maclcur->l_fp; |
maclcur->l_fp = lp; |
maclcur->l_fp = lp; |
lp->l_bp = maclcur; |
lp->l_bp = maclcur; |
|
|
void *newp; |
void *newp; |
size_t newsize = epos + epos + 16; |
size_t newsize = epos + epos + 16; |
if ((newp = realloc(buf, newsize)) == NULL) |
if ((newp = realloc(buf, newsize)) == NULL) |
goto fail; |
goto memfail; |
buf = newp; |
buf = newp; |
nbuf = newsize; |
nbuf = newsize; |
} |
} |
|
if (!dynbuf && epos + 1 >= nbuf) { |
|
ewprintf("Line too long"); |
|
return (emptyval); |
|
} |
for (i = epos; i > cpos; i--) |
for (i = epos; i > cpos; i--) |
buf[i] = buf[i - 1]; |
buf[i] = buf[i - 1]; |
buf[cpos++] = (char)c; |
buf[cpos++] = (char)c; |
|
|
} |
} |
} |
} |
return (ret); |
return (ret); |
fail: |
memfail: |
|
if (dynbuf && buf) |
|
free(buf); |
ewprintf("Out of memory"); |
ewprintf("Out of memory"); |
free(buf); |
return (emptyval); |
return (NULL); |
|
} |
} |
|
|
/* |
/* |