200 } |
200 } |
201 |
201 |
202 free(buf); |
202 free(buf); |
203 return ncp; |
203 return ncp; |
204 } |
204 } |
|
205 |
|
206 size_t ucx_buffer_generic_ncopy(void *s1, void *s2, |
|
207 read_func readfnc, write_func writefnc, size_t bufsize, size_t n) { |
|
208 if(n == 0) { |
|
209 return 0; |
|
210 } |
|
211 |
|
212 size_t ncp = 0; |
|
213 char *buf = (char*)malloc(bufsize); |
|
214 if(buf == NULL) { |
|
215 return 0; |
|
216 } |
|
217 |
|
218 size_t r; |
|
219 size_t rn = bufsize > n ? n : bufsize; |
|
220 while((r = readfnc(buf, 1, rn, s1)) != 0) { |
|
221 r = writefnc(buf, 1, r, s2); |
|
222 ncp += r; |
|
223 n -= r; |
|
224 rn = bufsize > n ? n : bufsize; |
|
225 if(r == 0 || n == 0) { |
|
226 break; |
|
227 } |
|
228 } |
|
229 |
|
230 free(buf); |
|
231 return ncp; |
|
232 } |