commit - 0adca11afbf75e5e1995e8a5106d0dd0914374e9
commit + 817c5a18db169317b90ca35d48c3c43c8f8ce537
blob - ac420c8b27bdfa56508ea4e25573f453564c686f
blob + ffb585aa6226197301c3981968e715c8af667099
--- lib/got_lib_pack.h
+++ lib/got_lib_pack.h
} __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
}
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;
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;
}