Mon, 25 Feb 2013 13:25:07 +0100
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