ucx/utils.c

changeset 140
15f871f50bfd
parent 103
08018864fb91
child 142
ee8cb27d8b8e
equal deleted inserted replaced
139:dddb9348ea42 140:15f871f50bfd
25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26 * POSSIBILITY OF SUCH DAMAGE. 26 * POSSIBILITY OF SUCH DAMAGE.
27 */ 27 */
28 28
29 #include "utils.h" 29 #include "utils.h"
30 #include "math.h" 30 #include <math.h>
31 31
32 /* COPY FUCNTIONS */ 32 /* COPY FUCNTIONS */
33 void* ucx_strcpy(void* s, void* data) { 33 void* ucx_strcpy(void* s, void* data) {
34 char *str = (char*) s; 34 char *str = (char*) s;
35 size_t n = 1+strlen(str); 35 size_t n = 1+strlen(str);
41 void* ucx_memcpy(void* m, void* n) { 41 void* ucx_memcpy(void* m, void* n) {
42 size_t k = *((size_t*)n); 42 size_t k = *((size_t*)n);
43 void *cpy = malloc(k); 43 void *cpy = malloc(k);
44 memcpy(cpy, m, k); 44 memcpy(cpy, m, k);
45 return cpy; 45 return cpy;
46 }
47
48 size_t ucx_stream_copy(void *src, void *dest, read_func readfnc,
49 write_func writefnc, char* buf, size_t bufsize, size_t n) {
50 if(n == 0 || bufsize == 0) {
51 return 0;
52 }
53
54 size_t ncp = 0;
55 if (!buf) {
56 buf = (char*)malloc(bufsize);
57 if(buf == NULL) {
58 return 0;
59 }
60 }
61
62 size_t r;
63 size_t rn = bufsize > n ? n : bufsize;
64 while((r = readfnc(buf, 1, rn, src)) != 0) {
65 r = writefnc(buf, 1, r, dest);
66 ncp += r;
67 n -= r;
68 rn = bufsize > n ? n : bufsize;
69 if(r == 0 || n == 0) {
70 break;
71 }
72 }
73
74 free(buf);
75 return ncp;
46 } 76 }
47 77
48 /* COMPARE FUNCTION */ 78 /* COMPARE FUNCTION */
49 79
50 int ucx_strcmp(void *s1, void *s2, void *data) { 80 int ucx_strcmp(void *s1, void *s2, void *data) {

mercurial