208 buffer->pos++; |
207 buffer->pos++; |
209 return c; |
208 return c; |
210 } |
209 } |
211 } |
210 } |
212 |
211 |
213 size_t ucx_buffer_generic_copy(void *s1, void *s2, |
212 size_t ucx_buffer_puts(UcxBuffer *buffer, char *str) { |
214 read_func readfnc, write_func writefnc, size_t bufsize) { |
213 return ucx_buffer_write((const void*)str, 1, strlen(str), buffer); |
215 size_t ncp = 0; |
214 } |
216 char *buf = (char*)malloc(bufsize); |
|
217 if(buf == NULL) { |
|
218 return 0; |
|
219 } |
|
220 |
|
221 size_t r; |
|
222 while((r = readfnc(buf, 1, bufsize, s1)) != 0) { |
|
223 r = writefnc(buf, 1, r, s2); |
|
224 ncp += r; |
|
225 if(r == 0) { |
|
226 break; |
|
227 } |
|
228 } |
|
229 |
|
230 free(buf); |
|
231 return ncp; |
|
232 } |
|
233 |
|
234 size_t ucx_buffer_generic_ncopy(void *s1, void *s2, |
|
235 read_func readfnc, write_func writefnc, size_t bufsize, size_t n) { |
|
236 if(n == 0) { |
|
237 return 0; |
|
238 } |
|
239 |
|
240 size_t ncp = 0; |
|
241 char *buf = (char*)malloc(bufsize); |
|
242 if(buf == NULL) { |
|
243 return 0; |
|
244 } |
|
245 |
|
246 size_t r; |
|
247 size_t rn = bufsize > n ? n : bufsize; |
|
248 while((r = readfnc(buf, 1, rn, s1)) != 0) { |
|
249 r = writefnc(buf, 1, r, s2); |
|
250 ncp += r; |
|
251 n -= r; |
|
252 rn = bufsize > n ? n : bufsize; |
|
253 if(r == 0 || n == 0) { |
|
254 break; |
|
255 } |
|
256 } |
|
257 |
|
258 free(buf); |
|
259 return ncp; |
|
260 } |
|