static void func(void *data, struct slice *slc) { // slice_print(slc); struct slice s; slice_copy(&s, slc); struct slice *ret = data; slice_append(ret, &s); }
static void recur(struct TreeNode *root, int sum, struct slice *slc, void (*func)(void *, struct slice *), void *data) { if (root==NULL) return; slice_append(slc, &root->val); int save = slc->pos; if (root->left==NULL && root->right==NULL) { if (sum==root->val) { func(data, slc); } else { slc->pos = save; } return; } sum -= root->val; recur(root->left, sum, slc, func, data); slc->pos = save; recur(root->right, sum, slc, func, data); }
char* read_file(char *file) { int fd = open(file, O_RDONLY); if (fd == 0) { return NULL; } char *ret = NULL; int size = 0; int cap = 0; while(1) { char buf[1024]; int n = read_all(fd, buf, 1024); if (n < 0) return NULL; ret = slice_append(ret, &size, &cap, buf, n); if (n < 1024) break; } return ret; }