]> git.lizzy.rs Git - plan9front.git/blobdiff - sys/src/libbio/brdstr.c
ndb/dns: lookup *all* entries in dblookup(), v4 and v6 queries in parallel, remove...
[plan9front.git] / sys / src / libbio / brdstr.c
index d749795d2b24cd790b57452ffb7bc57b9b23c837..ec163db7f11f966bdbebba08a20b8a632aae815c 100644 (file)
@@ -3,13 +3,12 @@
 #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);
@@ -52,7 +51,8 @@ Brdstr(Biobufhdr *bp, int delim, int nulldelim)
        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;
        }
 
        /*
@@ -69,11 +69,11 @@ Brdstr(Biobufhdr *bp, int delim, int nulldelim)
        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
@@ -101,7 +101,8 @@ Brdstr(Biobufhdr *bp, int delim, int nulldelim)
                                }
                                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;
                }
@@ -114,4 +115,7 @@ Brdstr(Biobufhdr *bp, int delim, int nulldelim)
                bp->icount = 0;
                bp->gbuf = bp->ebuf;
        }
+out:
+       setmalloctag(p, getcallerpc(&bp));
+       return p;
 }