commit 817c5a18db169317b90ca35d48c3c43c8f8ce537 from: Stefan Sperling date: Sun Sep 09 13:50:02 2018 UTC move packidx header initialization to a separate function commit - 0adca11afbf75e5e1995e8a5106d0dd0914374e9 commit + 817c5a18db169317b90ca35d48c3c43c8f8ce537 blob - ac420c8b27bdfa56508ea4e25573f453564c686f blob + ffb585aa6226197301c3981968e715c8af667099 --- lib/got_lib_pack.h +++ lib/got_lib_pack.h @@ -144,6 +144,7 @@ struct got_packfile_obj_data { } __attribute__((__packed__)); } __attribute__((__packed__)); +const struct got_error *got_packidx_init_hdr(struct got_packidx *, int); const struct got_error *got_packidx_open(struct got_packidx **, const char *, int); const struct got_error* got_packidx_close(struct got_packidx *); blob - 440b49e9e7985b8b90d68b74b93873747b06cd36 blob + e50ad5cee685e50dfd69627e821e2008f4918d94 --- lib/pack.c +++ lib/pack.c @@ -119,53 +119,17 @@ get_packfile_size(size_t *size, const char *path) } const struct got_error * -got_packidx_open(struct got_packidx **packidx, const char *path, int verify) +got_packidx_init_hdr(struct got_packidx *p, int verify) { - struct got_packidx *p; - struct got_packidx_v2_hdr *h; const struct got_error *err = NULL; - size_t nobj, len_fanout, len_ids, offset, remain; - ssize_t n; + struct got_packidx_v2_hdr *h; SHA1_CTX ctx; uint8_t sha1[SHA1_DIGEST_LENGTH]; + size_t nobj, len_fanout, len_ids, offset, remain; + ssize_t n; - *packidx = NULL; - SHA1Init(&ctx); - p = calloc(1, sizeof(*p)); - if (p == NULL) - return got_error_from_errno(); - - p->fd = open(path, O_RDONLY | O_NOFOLLOW, GOT_DEFAULT_FILE_MODE); - if (p->fd == -1) - return got_error_from_errno(); - - err = get_packfile_size(&p->len, path); - if (err) { - close(p->fd); - free(p); - return err; - } - if (p->len < sizeof(p->hdr)) { - err = got_error(GOT_ERR_BAD_PACKIDX); - close(p->fd); - free(p); - return err; - } - - p->path_packidx = strdup(path); - if (p->path_packidx == NULL) { - err = got_error_from_errno(); - goto done; - } - -#ifndef GOT_PACK_NO_MMAP - p->map = mmap(NULL, p->len, PROT_READ, MAP_PRIVATE, p->fd, 0); - if (p->map == MAP_FAILED) - p->map = NULL; /* fall back to read(2) */ -#endif - h = &p->hdr; offset = 0; remain = p->len; @@ -384,10 +348,57 @@ checksum: err = got_error(GOT_ERR_PACKIDX_CSUM); } done: + return err; +} + +const struct got_error * +got_packidx_open(struct got_packidx **packidx, const char *path, int verify) +{ + const struct got_error *err = NULL; + struct got_packidx *p; + + *packidx = NULL; + + p = calloc(1, sizeof(*p)); + if (p == NULL) + return got_error_from_errno(); + + p->fd = open(path, O_RDONLY | O_NOFOLLOW, GOT_DEFAULT_FILE_MODE); + if (p->fd == -1) + return got_error_from_errno(); + + err = get_packfile_size(&p->len, path); + if (err) { + close(p->fd); + free(p); + return err; + } + if (p->len < sizeof(p->hdr)) { + err = got_error(GOT_ERR_BAD_PACKIDX); + close(p->fd); + free(p); + return err; + } + + p->path_packidx = strdup(path); + if (p->path_packidx == NULL) { + err = got_error_from_errno(); + goto done; + } + +#ifndef GOT_PACK_NO_MMAP + p->map = mmap(NULL, p->len, PROT_READ, MAP_PRIVATE, p->fd, 0); + if (p->map == MAP_FAILED) + p->map = NULL; /* fall back to read(2) */ +#endif + + err = got_packidx_init_hdr(p, verify); +done: if (err) got_packidx_close(p); else *packidx = p; + return err; }