added generic ncopy

Mon, 25 Feb 2013 13:25:07 +0100

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Mon, 25 Feb 2013 13:25:07 +0100
changeset 86
55bf819cbc88
parent 85
0ef0df7aa2c2
child 87
bd444539cced

added generic ncopy

ucx/buffer.c file | annotate | diff | comparison | revisions
ucx/buffer.h file | annotate | diff | comparison | revisions
     1.1 --- a/ucx/buffer.c	Mon Feb 25 12:18:31 2013 +0100
     1.2 +++ b/ucx/buffer.c	Mon Feb 25 13:25:07 2013 +0100
     1.3 @@ -202,3 +202,31 @@
     1.4      free(buf);
     1.5      return ncp;
     1.6  }
     1.7 +
     1.8 +size_t ucx_buffer_generic_ncopy(void *s1, void *s2,
     1.9 +        read_func readfnc, write_func writefnc, size_t bufsize, size_t n) {
    1.10 +    if(n == 0) {
    1.11 +        return 0;
    1.12 +    }
    1.13 +    
    1.14 +    size_t ncp = 0;
    1.15 +    char *buf = (char*)malloc(bufsize);
    1.16 +    if(buf == NULL) {
    1.17 +        return 0;
    1.18 +    }
    1.19 +    
    1.20 +    size_t r;
    1.21 +    size_t rn = bufsize > n ? n : bufsize;
    1.22 +    while((r = readfnc(buf, 1, rn, s1)) != 0) {
    1.23 +        r = writefnc(buf, 1, r, s2);
    1.24 +        ncp += r;
    1.25 +        n -= r;
    1.26 +        rn = bufsize > n ? n : bufsize;
    1.27 +        if(r == 0 || n == 0) {
    1.28 +            break;
    1.29 +        }
    1.30 +    }
    1.31 +    
    1.32 +    free(buf);
    1.33 +    return ncp;
    1.34 +}
     2.1 --- a/ucx/buffer.h	Mon Feb 25 12:18:31 2013 +0100
     2.2 +++ b/ucx/buffer.h	Mon Feb 25 13:25:07 2013 +0100
     2.3 @@ -85,13 +85,19 @@
     2.4  size_t ucx_buffer_generic_copy(void *s1, void *s2, read_func r, write_func w,
     2.5          size_t bufsize);
     2.6  
     2.7 +size_t ucx_buffer_generic_ncopy(void *s1, void *s2, read_func r, write_func w,
     2.8 +        size_t bufsize, size_t n);
     2.9  
    2.10 -#define UCX_DEFAULT_BUFFER_SIZE 0x4000000
    2.11 +#define UCX_DEFAULT_BUFFER_SIZE 0x1000
    2.12  
    2.13  #define ucx_buffer_copy(s1,s2,r,w) \
    2.14      ucx_buffer_generic_copy(s1, s2, (read_func)r, (write_func)w, \
    2.15      UCX_DEFAULT_BUFFER_SIZE)
    2.16  
    2.17 +#define ucx_buffer_ncopy(s1,s2,r,w, n) \
    2.18 +    ucx_buffer_generic_ncopy(s1, s2, (read_func)r, (write_func)w, \
    2.19 +    UCX_DEFAULT_BUFFER_SIZE, n)
    2.20 +
    2.21  #ifdef	__cplusplus
    2.22  }
    2.23  #endif

mercurial