#include <bio.h>
static char*
-badd(char *p, int *np, char *data, int ndata, int delim, int nulldelim)
+badd(char *oldp, int *np, char *data, int ndata, int delim, int nulldelim)
{
int n;
- char *oldp;
+ char *p;
n = *np;
- oldp = p;
p = realloc(oldp, n+ndata+1);
if(p){
memmove(p+n, data, ndata);
if(ep) {
j = (ep - ip) + 1;
bp->icount += j;
- return badd(nil, &bp->rdline, ip, j, delim, nulldelim);
+ p = badd(nil, &bp->rdline, ip, j, delim, nulldelim);
+ goto out;
}
/*
for(;;){
ip = (char*)bp->bbuf + i;
while(i < bp->bsize) {
- j = read(bp->fid, ip, bp->bsize-i);
+ j = bp->iof(bp, ip, bp->bsize-i);
if(j < 0)
Berror(bp, "read error: %r");
if(j <= 0 && i == 0)
- return p;
+ goto out;
if(j <= 0 && i > 0){
/*
* end of file but no delim. pretend we got a delim
}
j = (ep - (char*)bp->bbuf) + 1;
bp->icount = j - i;
- return badd(p, &bp->rdline, ip, j, delim, nulldelim);
+ p = badd(p, &bp->rdline, ip, j, delim, nulldelim);
+ goto out;
}
ip += j;
}
bp->icount = 0;
bp->gbuf = bp->ebuf;
}
+out:
+ setmalloctag(p, getcallerpc(&bp));
+ return p;
}