ucx/utils.c

changeset 181
1e9012ad8215
parent 177
11ad03783baf
child 192
1e51558b9d09
     1.1 --- a/ucx/utils.c	Mon Jul 14 12:45:48 2014 +0200
     1.2 +++ b/ucx/utils.c	Mon Jul 14 13:20:03 2014 +0200
     1.3 @@ -54,18 +54,22 @@
     1.4          return 0;
     1.5      }
     1.6      
     1.7 +    char *lbuf;    
     1.8      size_t ncp = 0;
     1.9 -    if (!buf) {
    1.10 -        buf = (char*)malloc(bufsize);
    1.11 -        if(buf == NULL) {
    1.12 +    
    1.13 +    if(buf) {
    1.14 +        lbuf = buf;
    1.15 +    } else {
    1.16 +        lbuf = (char*)malloc(bufsize);
    1.17 +        if(lbuf == NULL) {
    1.18              return 0;
    1.19          }
    1.20      }
    1.21      
    1.22      size_t r;
    1.23      size_t rn = bufsize > n ? n : bufsize;
    1.24 -    while((r = readfnc(buf, 1, rn, src)) != 0) {
    1.25 -        r = writefnc(buf, 1, r, dest);
    1.26 +    while((r = readfnc(lbuf, 1, rn, src)) != 0) {
    1.27 +        r = writefnc(lbuf, 1, r, dest);
    1.28          ncp += r;
    1.29          n -= r;
    1.30          rn = bufsize > n ? n : bufsize;
    1.31 @@ -74,7 +78,10 @@
    1.32          }
    1.33      }
    1.34      
    1.35 -    free(buf);
    1.36 +    if (lbuf != buf) {
    1.37 +        free(lbuf);
    1.38 +    }
    1.39 +    
    1.40      return ncp;
    1.41  }
    1.42  

mercurial