// Return 0 for OK, -1 for error, 1 for finished reading the file. static int get_next_set_of_hooks(struct hooks **hnew, struct sbuf *sb, struct fzp *spzp, char **path, uint64_t **fingerprints, size_t *len) { struct blk blk; while(1) { switch(sbuf_fill_from_file(sb, spzp, NULL, NULL)) { case -1: goto error; case 1: // Reached the end. if(hooks_alloc(hnew, path, fingerprints, len)) goto error; return 1; } if(sb->path.cmd==CMD_MANIFEST) { if(hooks_alloc(hnew, path, fingerprints, len)) break; *path=sb->path.buf; sb->path.buf=NULL; sbuf_free_content(sb); if(*hnew) return 0; } else if(sb->path.cmd==CMD_FINGERPRINT) { if(!(*fingerprints=(uint64_t *)realloc_w(*fingerprints, ((*len)+1)*sizeof(uint64_t), __func__))) goto error; if(blk_set_from_iobuf_fingerprint(&blk, &sb->path)) goto error; (*fingerprints)[(*len)++]=blk.fingerprint; sbuf_free_content(sb); } else { iobuf_log_unexpected(&sb->path, __func__); break; } } error: sbuf_free_content(sb); return -1; }
// Return 0 for OK, -1 for error, 1 for finished reading the file. static int get_next_set_of_hooks(struct hooks **hnew, struct sbuf *sb, struct fzp *spzp, char **path, char **fingerprints, struct conf **confs) { while(1) { switch(sbuf_fill(sb, NULL /* struct async */, spzp, NULL, NULL, confs)) { case -1: goto error; case 1: // Reached the end. if(hooks_alloc(hnew, path, fingerprints)) goto error; return 1; } if(sb->path.cmd==CMD_MANIFEST) { if(hooks_alloc(hnew, path, fingerprints)) break; free_w(fingerprints); free_w(path); *path=sb->path.buf; sb->path.buf=NULL; sbuf_free_content(sb); if(*hnew) return 0; } else if(sb->path.cmd==CMD_FINGERPRINT) { if(astrcat(fingerprints, sb->path.buf, __func__)) break; sbuf_free_content(sb); } else { iobuf_log_unexpected(&sb->path, __func__); break; } } error: return -1; }