1.1 --- a/src/stack.c Sat May 12 14:56:17 2018 +0200 1.2 +++ b/src/stack.c Sun May 13 17:34:06 2018 +0200 1.3 @@ -120,13 +120,15 @@ 1.4 return; 1.5 } 1.6 1.7 - size_t len = ucx_stack_topsize(stack); 1.8 - if (len > n) { 1.9 - len = n; 1.10 + if (dest) { 1.11 + size_t len = ucx_stack_topsize(stack); 1.12 + if (len > n) { 1.13 + len = n; 1.14 + } 1.15 + 1.16 + memcpy(dest, stack->top, len); 1.17 } 1.18 1.19 - memcpy(dest, stack->top, len); 1.20 - 1.21 ucx_stack_free(stack, stack->top); 1.22 } 1.23 1.24 @@ -142,3 +144,22 @@ 1.25 return 0; 1.26 } 1.27 } 1.28 + 1.29 +void *ucx_stack_push(UcxStack *stack, size_t n, const void *data) { 1.30 + void *space = ucx_stack_malloc(stack, n); 1.31 + if (space) { 1.32 + memcpy(space, data, n); 1.33 + } 1.34 + return space; 1.35 +} 1.36 + 1.37 +void *ucx_stack_pusharr(UcxStack *stack, 1.38 + size_t nelem, size_t elsize, const void *data) { 1.39 + 1.40 + // skip the memset by using malloc 1.41 + void *space = ucx_stack_malloc(stack, nelem*elsize); 1.42 + if (space) { 1.43 + memcpy(space, data, nelem*elsize); 1.44 + } 1.45 + return space; 1.46 +}