version 1.11, 2007/05/06 01:12:25 |
version 1.12, 2007/05/07 02:23:13 |
|
|
{ |
{ |
char *r_end, *rp, **db_p; |
char *r_end, *rp, **db_p; |
int myfd, eof, foundit; |
int myfd, eof, foundit; |
char *record; |
char *record, *s; |
int tc_not_resolved; |
int tc_not_resolved; |
|
|
/* |
/* |
|
|
|
|
pos = rp - record; |
pos = rp - record; |
newsize = r_end - record + BFRAG; |
newsize = r_end - record + BFRAG; |
record = realloc(record, newsize); |
s = realloc(record, newsize); |
if (record == NULL) { |
if (s == NULL) { |
|
free(record); |
errno = ENOMEM; |
errno = ENOMEM; |
if (myfd) |
if (myfd) |
(void)close(fd); |
(void)close(fd); |
return (-2); |
return (-2); |
} |
} |
|
record = s; |
r_end = record + newsize; |
r_end = record + newsize; |
rp = record + pos; |
rp = record + pos; |
} |
} |
|
|
* references in it ... |
* references in it ... |
*/ |
*/ |
{ |
{ |
char *newicap, *s; |
char *newicap; |
int newilen; |
int newilen; |
u_int ilen; |
u_int ilen; |
int diff, iret, tclen; |
int diff, iret, tclen; |
|
|
* Find end of use=name and stomp on the trailing `,' |
* Find end of use=name and stomp on the trailing `,' |
* (if present) so we can use it to call ourselves. |
* (if present) so we can use it to call ourselves. |
*/ |
*/ |
s = tc; |
s = tc + strcspn(tc, ","); |
for (;;) |
if (*s == ',') { |
if (*s == '\0') |
*s = '\0'; |
break; |
++s; |
else |
} |
if (*s++ == ',') { |
|
*(s - 1) = '\0'; |
|
break; |
|
} |
|
tcstart = tc - 4; |
tcstart = tc - 4; |
tclen = s - tcstart; |
tclen = s - tcstart; |
tcend = s; |
tcend = s; |
|
|
} |
} |
} |
} |
/* not interested in name field of tc'ed record */ |
/* not interested in name field of tc'ed record */ |
s = newicap; |
s = newicap + strcspn(newicap, ","); |
for (;;) |
if (*s == ',') |
if (*s == '\0') |
++s; |
break; |
|
else |
|
if (*s++ == ',') |
|
break; |
|
newilen -= s - newicap; |
newilen -= s - newicap; |
newicap = s; |
newicap = s; |
|
|
|
|
newsize = r_end - record + diff + BFRAG; |
newsize = r_end - record + diff + BFRAG; |
tcpos = tcstart - record; |
tcpos = tcstart - record; |
tcposend = tcend - record; |
tcposend = tcend - record; |
record = realloc(record, newsize); |
s = realloc(record, newsize); |
if (record == NULL) { |
if (s == NULL) { |
|
free(record); |
errno = ENOMEM; |
errno = ENOMEM; |
if (myfd) |
if (myfd) |
(void)close(fd); |
(void)close(fd); |
free(icap); |
free(icap); |
return (-2); |
return (-2); |
} |
} |
|
record = s; |
r_end = record + newsize; |
r_end = record + newsize; |
rp = record + pos; |
rp = record + pos; |
tcstart = record + tcpos; |
tcstart = record + tcpos; |
|
|
if (myfd) |
if (myfd) |
(void)close(fd); |
(void)close(fd); |
*len = rp - record - 1; /* don't count NUL */ |
*len = rp - record - 1; /* don't count NUL */ |
if (r_end > rp) |
if (r_end > rp) { |
if ((record = |
if ((s = |
realloc(record, (size_t)(rp - record))) == NULL) { |
realloc(record, (size_t)(rp - record))) == NULL) { |
|
free(record); |
errno = ENOMEM; |
errno = ENOMEM; |
return (-2); |
return (-2); |
} |
} else |
|
record = s; |
|
} |
|
|
*cap = record; |
*cap = record; |
if (tc_not_resolved) |
if (tc_not_resolved) |