stack stack_copy(stack sh) { register unsigned int ix; stack result; if (NULL == sh) { return NULL; } result = stack_new(sh->destroy, sh->clone); if (NULL != sh->clone) { for (ix = 0; ix < sh->sz; ix++) { stack_push(result, sh->clone(sh->arr[ix])); } } else { for (ix = 0; ix < sh->sz; ix++) { stack_push(result, sh->arr[ix]); } } return result; }