ucx/buffer.c

changeset 86
55bf819cbc88
parent 84
7465c18765dc
child 95
ecfdc1c4a552
equal deleted inserted replaced
85:0ef0df7aa2c2 86:55bf819cbc88
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 }

mercurial