commit - fa6e0e48ed35f3686bde7eed64adbe53a3df7384
commit + ff563a3de3ff9931c2702516c74c8aea8d5cf142
blob - 18d2e6e9a1b19b345fcc5feaabcd5e2c5dc6ca5e
blob + 34beeb2b7345dac2a513a297aab77a4a94811563
--- lib/got_lib_pack.h
+++ lib/got_lib_pack.h
struct got_object *, FILE *, FILE *, FILE *);
const struct got_error *got_packfile_extract_object_to_mem(uint8_t **, size_t *,
struct got_object *, struct got_pack *);
-const struct got_error *got_pack_get_packfile_size(size_t *, const char *);
struct got_pack *got_repo_get_cached_pack(struct got_repository *, const char *);
blob - 6779323106d7b5ee0bbd2c4fa38b3102384c0def
blob + 9f38ab305851d89c4ee68b2ae45ad8935d7a6d87
--- lib/pack.c
+++ lib/pack.c
}
const struct got_error *
-got_pack_get_packfile_size(size_t *size, const char *path)
-{
- struct stat sb;
- char *dot;
-
- *size = 0;
-
- dot = strrchr(path, '.');
- if (dot == NULL)
- return got_error(GOT_ERR_BAD_PATH);
-
- /* Path must point to a pack index or to a pack file. */
- if (strcmp(dot, GOT_PACKIDX_SUFFIX) == 0) {
- const struct got_error *err = NULL;
- char *path_pack;
- char base_path[PATH_MAX];
-
- /* Convert pack index path to pack file path. */
- if (strlcpy(base_path, path, PATH_MAX) > PATH_MAX)
- return got_error(GOT_ERR_NO_SPACE);
- dot = strrchr(base_path, '.');
- if (dot == NULL)
- return got_error(GOT_ERR_BAD_PATH);
- *dot = '\0';
- if (asprintf(&path_pack, "%s.pack", base_path) == -1)
- return got_error_from_errno("asprintf");
-
- if (stat(path_pack, &sb) != 0)
- err = got_error_from_errno("asprintf");
- free(path_pack);
- if (err)
- return err;
- } else if (strcmp(dot, GOT_PACKFILE_SUFFIX) == 0) {
- if (stat(path, &sb) != 0)
- return got_error_from_errno2("stat", path);
- } else
- return got_error(GOT_ERR_BAD_PATH);
-
- *size = sb.st_size;
- return 0;
-}
-
-const struct got_error *
got_packidx_init_hdr(struct got_packidx *p, int verify)
{
const struct got_error *err = NULL;
blob - 4a2efe86fcf1cf4a1e8a7b1cac198509adfa3a8c
blob + bff89f510415a95da98401388298562dac05a804
--- lib/repository.c
+++ lib/repository.c
{
const struct got_error *err = NULL;
struct got_pack *pack = NULL;
+ struct stat sb;
int i;
if (packp)
if (err)
goto done;
- err = got_pack_get_packfile_size(&pack->filesize, path_packfile);
- if (err)
+ if (fstat(pack->fd, &sb) != 0) {
+ err = got_error_from_errno("fstat");
goto done;
+ }
+ pack->filesize = sb.st_size;
pack->privsep_child = NULL;