From 4a3c91466e0782885fe980b659a6f6ac4835fe8a Mon Sep 17 00:00:00 2001 From: Joshua Lock Date: Thu, 28 Jan 2016 10:24:56 +0000 Subject: [PATCH] Add option -S to take the state data dir as an argument The optional -S option expects a full path to a directory swupd-server should use instead of the default /var/lib/update. Signed-off-by: Joshua Lock Upstream-Status: Backport [v3.0+] --- include/swupd.h | 11 ++++++--- src/analyze_fs.c | 4 ++-- src/chroot.c | 13 ++++++----- src/globals.c | 53 +++++++++++++++++++++++++++++++++++++++++ src/main.c | 50 ++++++++++++++++++++++++++++++--------- src/make_fullfiles.c | 63 +++++++++++++++++++++++++++++++++++++++++++++---- src/make_packs.c | 66 ++++++++++++++++++++++++++++++++++++++++++++-------- src/pack.c | 65 +++++++++++++++++++++++++++------------------------ src/rename.c | 6 ++--- src/versions.c | 6 ++--- 10 files changed, 264 insertions(+), 73 deletions(-) diff --git a/include/swupd.h b/include/swupd.h index 00b88d4..522ac2e 100644 --- a/include/swupd.h +++ b/include/swupd.h @@ -16,9 +16,6 @@ #define SWUPD_DEFAULT_FORMAT 3 #define SWUPD_SERVER_STATE_DIR "/var/lib/update" -#define PACKSTAGE_DIR SWUPD_SERVER_STATE_DIR "/packstage" -#define IMAGE_DIR SWUPD_SERVER_STATE_DIR "/image" -#define STAGING_DIR SWUPD_SERVER_STATE_DIR "/www" #if SWUPD_WITH_SELINUX #define TAR_PERM_ATTR_ARGS "--preserve-permissions --xattrs --xattrs-include='*' --selinux" @@ -123,9 +120,17 @@ extern int newversion; extern int minversion; extern char *format_string; +extern char *state_dir; +extern char *packstage_dir; +extern char *image_dir; +extern char *staging_dir; + extern bool init_globals(void); extern void free_globals(void); extern bool set_format_string(char *); +extern bool set_state_dir(char *); +extern bool init_state_globals(void); +extern void free_state_globals(void); extern int file_sort_hash(gconstpointer a, gconstpointer b); extern int file_sort_filename(gconstpointer a, gconstpointer b); diff --git a/src/analyze_fs.c b/src/analyze_fs.c index 4d01ccf..f6cfa13 100644 --- a/src/analyze_fs.c +++ b/src/analyze_fs.c @@ -389,7 +389,7 @@ struct manifest *full_manifest_from_directory(int version) manifest = alloc_manifest(version, "full"); - string_or_die(&dir, "%s/%i/full", IMAGE_DIR, version); + string_or_die(&dir, "%s/%i/full", image_dir, version); threadpool = g_thread_pool_new(get_hash, dir, 12, FALSE, NULL); @@ -413,7 +413,7 @@ struct manifest *sub_manifest_from_directory(char *component, int version) manifest = alloc_manifest(version, component); - string_or_die(&dir, "%s/%i/%s", IMAGE_DIR, version, component); + string_or_die(&dir, "%s/%i/%s", image_dir, version, component); iterate_directory(manifest, dir, "", false); diff --git a/src/chroot.c b/src/chroot.c index d85b5f7..cb6a04a 100644 --- a/src/chroot.c +++ b/src/chroot.c @@ -41,14 +41,15 @@ void chroot_create_full(int newversion) struct stat buf; char *full_dir; - string_or_die(&full_dir, "%s/%i/full/", IMAGE_DIR, newversion); + string_or_die(&full_dir, "%s/%i/full/ ", image_dir, newversion); g_mkdir_with_parents(full_dir, S_IRWXU); /* start with base */ LOG(NULL, "Copying chroot os-core to full", ""); - string_or_die(&command, "rsync -aAX " IMAGE_DIR "/%i/os-core/ %s", newversion, full_dir); + string_or_die(&command, "rsync -aAX %s/%i/os-core/ %s", + image_dir, newversion, full_dir); ret = system(command); assert(ret==0); free(command); @@ -61,8 +62,8 @@ void chroot_create_full(int newversion) } LOG(NULL, "Overlaying bundle chroot onto full", "%s", group); - string_or_die(&command, "rsync -aAX --ignore-existing " IMAGE_DIR "/%i/%s/ %s", - newversion, group, full_dir); + string_or_die(&command, "rsync -aAX --ignore-existing %s/%i/%s/ %s", + image_dir, newversion, group, full_dir); ret = system(command); assert(ret==0); free(command); @@ -81,8 +82,8 @@ void chroot_create_full(int newversion) } LOG(NULL, "Recopy bundle chroot out of full", "%s", group); - string_or_die(&command, "rsync -aAX --existing %s " IMAGE_DIR "/%i/%s", - full_dir, newversion, group); + string_or_die(&command, "rsync -aAX --existing %s %s/%i/%s", + full_dir, image_dir, newversion, group); ret = system(command); assert(ret==0); free(command); diff --git a/src/globals.c b/src/globals.c index 32dc793..ff6a3fa 100644 --- a/src/globals.c +++ b/src/globals.c @@ -34,6 +34,11 @@ int newversion = -1; int minversion = 0; char *format_string = NULL; +char *state_dir = NULL; +char *packstage_dir = NULL; +char *image_dir = NULL; +char *staging_dir = NULL; + bool set_format_string(char *userinput) { int version; @@ -52,12 +57,36 @@ bool set_format_string(char *userinput) return true; } +bool set_state_dir(char *dir) +{ + if (dir == NULL || dir[0] == '\0') { + return false; + } + + /* TODO: more validation of input? */ + if (dir[0] != '/') { + printf("statedir must be a full path starting with '/', not '%c'\n", dir[0]); + return false; + } + + if (state_dir) { + free(state_dir); + } + string_or_die(&state_dir, "%s", dir); + + return true; +} + bool init_globals(void) { if (format_string == NULL) { string_or_die(&format_string, "%d", SWUPD_DEFAULT_FORMAT); } + if (!init_state_globals()) { + return false; + } + if (newversion == -1) { printf("Missing version parameter: No new version number specified\n"); return false; @@ -71,4 +100,28 @@ bool init_globals(void) void free_globals(void) { free(format_string); + free(state_dir); + free(packstage_dir); + free(image_dir); + free(staging_dir); +} + +bool init_state_globals(void) +{ + if (state_dir == NULL) { + string_or_die(&state_dir, "%s", SWUPD_SERVER_STATE_DIR); + } + string_or_die(&packstage_dir, "%s/%s", state_dir, "packstage"); + string_or_die(&image_dir, "%s/%s", state_dir, "image"); + string_or_die(&staging_dir, "%s/%s", state_dir, "www"); + + return true; +} + +void free_state_globals(void) +{ + free(state_dir); + free(packstage_dir); + free(image_dir); + free(staging_dir); } diff --git a/src/main.c b/src/main.c index ccfedfd..9366cd9 100644 --- a/src/main.c +++ b/src/main.c @@ -55,6 +55,7 @@ static const struct option prog_opts[] = { {"minversion", required_argument, 0, 'm'}, {"format", required_argument, 0, 'F'}, {"getformat", no_argument, 0, 'g'}, + {"statedir", required_argument, 0, 'S'}, {0, 0, 0, 0} }; @@ -70,6 +71,7 @@ static void print_help(const char *name) { printf(" -m, --minversion Optional minimum file version to write into manifests per file\n"); printf(" -F, --format Optional format string [ default:=%d ]\n", SWUPD_DEFAULT_FORMAT); printf(" -g, --getformat Print current format string and exit\n"); + printf(" -S, --statedir Optional directory to use for state [ default:=%s ]\n", SWUPD_SERVER_STATE_DIR); printf("\n"); } @@ -77,7 +79,7 @@ static bool parse_options(int argc, char **argv) { int opt; - while ((opt = getopt_long(argc, argv, "hvo:m:F:g", prog_opts, NULL)) != -1) { + while ((opt = getopt_long(argc, argv, "hvo:m:F:g:S:", prog_opts, NULL)) != -1) { switch (opt) { case '?': case 'h': @@ -107,6 +109,12 @@ static bool parse_options(int argc, char **argv) return false; } break; + case 'S': + if (!optarg || !set_state_dir(optarg)) { + printf("Invalid --statedir argument ''%s'\n\n", optarg); + return false; + } + break; case 'g': if (format_string == NULL) { printf("%d\n", SWUPD_DEFAULT_FORMAT); @@ -138,9 +146,14 @@ static void check_root(void) static void populate_dirs(int version) { char *newversiondir; - string_or_die(&newversiondir, "%s/%d", IMAGE_DIR, version); + + string_or_die(&newversiondir, "%s/%d", image_dir, version); if ((access(newversiondir, F_OK | R_OK) != 0) && (version == 0)) { + char *latestpath = NULL; + + string_or_die(&latestpath, "%s/latest.version", image_dir); + printf("** %s does not exist... creating and populating\n", newversiondir); if (mkdir(newversiondir, 0755) != 0) { printf("Failed to create directory\n"); @@ -151,14 +164,17 @@ static void populate_dirs(int version) } FILE *latestver; - latestver = fopen_exclusive(IMAGE_DIR "/latest.version"); + latestver = fopen_exclusive(latestpath); if (latestver == NULL) { - printf("Failed to create %s/latest.version\n", IMAGE_DIR); + printf("Failed to create %s\n", latestpath); + free(latestpath); return; } if (fwrite("0\n", 2, 1, latestver) != 1) { LOG(NULL, "Failed to write latestver", "errno: %d", errno); } + + free(latestpath); fclose(latestver); } /* groups don't exist in version 0 */ @@ -170,7 +186,7 @@ static void populate_dirs(int version) break; } - string_or_die(&newversiondir, "%s/%d/%s", IMAGE_DIR, version, group); + string_or_die(&newversiondir, "%s/%d/%s", image_dir, version, group); /* Create the bundle directory(s) as needed */ if (access(newversiondir, F_OK | R_OK) != 0) { @@ -186,13 +202,18 @@ static void populate_dirs(int version) static int check_build_env(void) { - if (access(SWUPD_SERVER_STATE_DIR "/temp", F_OK | R_OK) != 0) { - LOG(NULL, "/var/lib/update/temp does not exist...creating directory", ""); - if (mkdir(SWUPD_SERVER_STATE_DIR "/temp", 0755) != 0) { + char *temp_dir = NULL; + string_or_die(&temp_dir, "%s/%s", state_dir, "/temp"); + + if (access(temp_dir, F_OK | R_OK) != 0) { + LOG(NULL, "%s", "does not exist...creating directory", temp_dir); + if (mkdir(temp_dir, 0755) != 0) { printf("Failed to create build directory, EXITING\n"); + free(temp_dir); return -errno; } } + free(temp_dir); return 0; } @@ -217,6 +238,8 @@ int main(int argc, char **argv) int exit_status = EXIT_FAILURE; int ret; + char *file_path = NULL; + /* keep valgrind working well */ setenv("G_SLICE", "always-malloc", 0); @@ -240,12 +263,17 @@ int main(int argc, char **argv) } - if (!read_configuration_file(SWUPD_SERVER_STATE_DIR "/server.ini")) { - printf("Failed to read " SWUPD_SERVER_STATE_DIR "/server.ini configuration file!\n"); + string_or_die(&file_path, "%s/server.ini", state_dir); + if (!read_configuration_file(file_path)) { + printf("Failed to read %s configuration file!\n", state_dir); + free(file_path); goto exit; } + free(file_path); - read_group_file(SWUPD_SERVER_STATE_DIR "/groups.ini"); + string_or_die(&file_path, "%s/groups.ini", state_dir); + read_group_file(file_path); + free(file_path); read_current_version("latest.version"); printf("Last processed version is %i\n", current_version); diff --git a/src/make_fullfiles.c b/src/make_fullfiles.c index e755a33..bf97a1c 100644 --- a/src/make_fullfiles.c +++ b/src/make_fullfiles.c @@ -27,8 +27,52 @@ #include #include +#include + #include +static const struct option prog_opts[] = { + {"help", no_argument, 0, 'h'}, + {"statedir", required_argument, 0, 'S'}, + {0, 0, 0, 0} +}; + +static void usage(const char *name) +{ + printf("usage:\n"); + printf(" %s \n\n", name); + printf("Help options:\n"); + printf(" -h, --help Show help options\n"); + printf(" -S, --statedir Optional directory to use for state [ default:=%s ]\n", SWUPD_SERVER_STATE_DIR); + printf("\n"); +} + +static bool parse_options(int argc, char **argv) +{ + int opt; + + while ((opt = getopt_long(argc, argv, "hS:", prog_opts, NULL)) != -1) { + switch (opt) { + case '?': + case 'h': + usage(argv[0]); + return false; + case 'S': + if (!optarg || !set_state_dir(optarg)) { + printf("Invalid --statedir argument '%s'\n\n", optarg); + return false; + } + break; + } + } + + if (!init_state_globals()) { + return false; + } + + return true; +} + static void banner(void) { printf(PACKAGE_NAME " update creator -- fullfiles -- version " PACKAGE_VERSION "\n"); @@ -51,20 +95,29 @@ int main(int argc, char **argv) { struct manifest *manifest; int version; + char *file_path = NULL; /* keep valgrind working well */ setenv("G_SLICE", "always-malloc", 0); + if (!parse_options(argc, argv)) { + free_state_globals(); + return EXIT_FAILURE; + } banner(); check_root(); - read_configuration_file(SWUPD_SERVER_STATE_DIR "/server.ini"); + string_or_die(&file_path, "%s/server.ini", state_dir); + read_configuration_file(file_path); + free(file_path); - if (argc < 1) { - printf("Usage:\n\tswupd_make_fullfiles \n\n"); + if (argc - optind < 1) { + usage(argv[0]); + free_state_globals(); exit(EXIT_FAILURE); } - version = strtoull(argv[1], NULL, 10); + + version = strtoull(argv[optind++], NULL, 10); if (version < 0) { printf("Usage:\n\tswupd_make_fullfiles \n\n"); exit(EXIT_FAILURE); @@ -73,5 +126,7 @@ int main(int argc, char **argv) manifest = manifest_from_file(version, "full"); create_fullfiles(manifest); + free_state_globals(); + return EXIT_SUCCESS; } diff --git a/src/make_packs.c b/src/make_packs.c index 20fbd67..2b62b8a 100644 --- a/src/make_packs.c +++ b/src/make_packs.c @@ -33,6 +33,8 @@ #include +#include + #include static void banner(void) @@ -43,12 +45,47 @@ static void banner(void) printf("\n"); } -static void usage(void) +static const struct option prog_opts[] = { + {"help", no_argument, 0, 'h'}, + {"statedir", required_argument, 0, 'S'}, + {0, 0, 0, 0} +}; + +static void usage(const char *name) { printf("usage:\n"); - printf(" swupd_make_pack \n"); + printf(" %s \n\n", name); + printf("Help options:\n"); + printf(" -h, --help Show help options\n"); + printf(" -S, --statedir Optional directory to use for state [ default:=%s ]\n", SWUPD_SERVER_STATE_DIR); printf("\n"); - exit(EXIT_FAILURE); +} + +static bool parse_options(int argc, char **argv) +{ + int opt; + + while ((opt = getopt_long(argc, argv, "hS:", prog_opts, NULL)) != -1) { + switch (opt) { + case '?': + case 'h': + usage(argv[0]); + return false; + case 'S': + if (!optarg || !set_state_dir(optarg)) { + printf("Invalid --statedir argument ''%s'\n\n", optarg); + return false; + } + break; + } + } + + /* FIXME: *_state_globals() are ugly hacks */ + if (!init_state_globals()) { + return false; + } + + return true; } int main(int argc, char **argv) @@ -59,11 +96,17 @@ int main(int argc, char **argv) char *module; struct packdata *pack; int exit_status = EXIT_FAILURE; + char *file_path = NULL; + if (!parse_options(argc, argv)) { + free_state_globals(); + return EXIT_FAILURE; + } banner(); - if (argc != 4) { - usage(); + if (argc - optind != 3) { + usage(argv[0]); + exit(EXIT_FAILURE); } /* FIXME: should use "end_version" not "0" and a unique filename @@ -76,12 +119,13 @@ int main(int argc, char **argv) return exit_status; } - read_configuration_file(SWUPD_SERVER_STATE_DIR "/server.ini"); - + string_or_die(&file_path, "%s/server.ini", state_dir); + read_configuration_file(file_path); + free(file_path); - start_version = strtoull(argv[1], NULL, 10); - end_version = strtoull(argv[2], NULL, 10); - module = argv[3]; + start_version = strtoull(argv[optind++], NULL, 10); + end_version = strtoull(argv[optind++], NULL, 10); + module = argv[optind++]; if ((start_version < 0) || (end_version == 0) || @@ -108,5 +152,7 @@ int main(int argc, char **argv) printf("Pack creation %s (pack-%s %i to %li)\n", exit_status == EXIT_SUCCESS ? "complete" : "failed", module, start_version, end_version); + + free_state_globals(); return exit_status; } diff --git a/src/pack.c b/src/pack.c index f021af9..5bb99b8 100644 --- a/src/pack.c +++ b/src/pack.c @@ -46,21 +46,21 @@ static void empty_pack_stage(int full, int version, char *module) int ret; // clean any stale data (eg: re-run after a failure) - string_or_die(&cmd, "rm -rf " PACKSTAGE_DIR "/%s/%i/", module, version); + string_or_die(&cmd, "rm -rf %s/%s/%i/", packstage_dir, module, version); ret = system(cmd); if (ret) { - fprintf(stderr, "Failed to clean " PACKSTAGE_DIR "/%s/%i\n", - module, version); + fprintf(stderr, "Failed to clean %s/%s/%i\n", + packstage_dir, module, version); exit(EXIT_FAILURE); } free(cmd); if (!full) { // (re)create module/version/{delta,staged} - string_or_die(&path, PACKSTAGE_DIR "/%s/%i/delta", module, version); + string_or_die(&path, "%s/%s/%i/delta", packstage_dir, module, version); g_mkdir_with_parents(path, S_IRWXU | S_IRWXG); free(path); - string_or_die(&path, PACKSTAGE_DIR "/%s/%i/staged", module, version); + string_or_die(&path, "%s/%s/%i/staged", packstage_dir, module, version); g_mkdir_with_parents(path, S_IRWXU | S_IRWXG); free(path); } @@ -76,7 +76,7 @@ static void explode_pack_stage(int version, char *module) struct stat buf; char *path; - string_or_die(&path, PACKSTAGE_DIR "/%s/%i/staged", module, version); + string_or_die(&path, "%s/%s/%i/staged", packstage_dir, module, version); g_mkdir_with_parents(path, S_IRWXU | S_IRWXG); dir = opendir(path); if (!dir) { @@ -99,7 +99,8 @@ static void explode_pack_stage(int version, char *module) continue; } - string_or_die(&path, PACKSTAGE_DIR "/%s/%i/staged/%s", module, version, entry->d_name); + string_or_die(&path, "%s/%s/%i/staged/%s", + packstage_dir, module, version, entry->d_name); ret = stat(path, &buf); if (ret) { free(path); @@ -112,8 +113,8 @@ static void explode_pack_stage(int version, char *module) * the resulting pack is slightly smaller, and in addition, we're saving CPU * time on the client... */ - string_or_die(&tar, "tar --directory=" PACKSTAGE_DIR "/%s/%i/staged --warning=no-timestamp " - TAR_PERM_ATTR_ARGS " -axf %s", module, version, path); + string_or_die(&tar, "tar --directory=%s/%s/%i/staged --warning=no-timestamp " + TAR_PERM_ATTR_ARGS " -axf %s", packstage_dir, module, version, path); ret = system(tar); if (!ret) { unlink(path); @@ -162,8 +163,8 @@ static void make_pack_full_files(struct packdata *pack) if ((!file->peer || file->peer->is_deleted) && !file->is_deleted && !file->rename_peer) { char *from, *to; /* hardlink each file that is in but not in */ - string_or_die(&from, STAGING_DIR "/%i/files/%s.tar", file->last_change, file->hash); - string_or_die(&to, PACKSTAGE_DIR "/%s/%i/staged/%s.tar", pack->module, pack->from, file->hash); + string_or_die(&from, "%s/%i/files/%s.tar", staging_dir, file->last_change, file->hash); + string_or_die(&to, "%s/%s/%i/staged/%s.tar", packstage_dir, pack->module, pack->from, file->hash); ret = link(from, to); if (ret) { if (errno != EEXIST) { @@ -228,8 +229,8 @@ static GList *consolidate_packs_delta_files(GList *files, struct packdata *pack) continue; } - string_or_die(&from, STAGING_DIR "/%i/delta/%i-%i-%s", file->last_change, - file->peer->last_change, file->last_change, file->hash); + string_or_die(&from, "%s/%i/delta/%i-%i-%s", staging_dir, file->last_change, + file->peer->last_change, file->last_change, file->hash); ret = stat(from, &stat_delta); if (ret && !find_file_in_list(files, file)) { @@ -284,8 +285,8 @@ static int write_pack_signature(struct packdata *pack) char *filename = NULL; int ret = -1; - string_or_die(&filename, STAGING_DIR "/%i/pack-%s-from-%i.tar", - pack->to, pack->module, pack->from); + string_or_die(&filename, "%s/%i/pack-%s-from-%i.tar", + staging_dir, pack->to, pack->module, pack->from); if (!signature_sign(filename)) { fprintf(stderr, "Creating signature for '%s' failed\n", filename); goto exit; @@ -324,12 +325,14 @@ static int make_final_pack(struct packdata *pack) /* for each file changed since */ /* locate delta, check if the diff it's from is >= */ - string_or_die(&from, STAGING_DIR "/%i/delta/%i-%i-%s", file->last_change, - file->peer->last_change, file->last_change, file->hash); - string_or_die(&to, PACKSTAGE_DIR "/%s/%i/delta/%i-%i-%s", pack->module, pack->from, + string_or_die(&from, "%s/%i/delta/%i-%i-%s", staging_dir, file->last_change, file->peer->last_change, file->last_change, file->hash); - string_or_die(&tarfrom, STAGING_DIR "/%i/files/%s.tar", file->last_change, file->hash); - string_or_die(&tarto, PACKSTAGE_DIR "/%s/%i/staged/%s.tar", pack->module, pack->from, file->hash); + string_or_die(&to, "%s/%s/%i/delta/%i-%i-%s", packstage_dir, pack->module, + pack->from, file->peer->last_change, file->last_change, file->hash); + string_or_die(&tarfrom, "%s/%i/files/%s.tar", staging_dir, + file->last_change, file->hash); + string_or_die(&tarto, "%s/%s/%i/staged/%s.tar", packstage_dir, pack->module, + pack->from, file->hash); ret = stat(from, &stat_delta); if (ret) { @@ -388,8 +391,8 @@ static int make_final_pack(struct packdata *pack) char *from, *to; struct stat st; - string_or_die(&from, STAGING_DIR "/%i/Manifest-%s-delta-from-%i", - pack->to, pack->module, pack->from); + string_or_die(&from, "%s/%i/Manifest-%s-delta-from-%i", + staging_dir, pack->to, pack->module, pack->from); ret = stat(from, &st); if (ret) { @@ -398,8 +401,8 @@ static int make_final_pack(struct packdata *pack) } - string_or_die(&to, PACKSTAGE_DIR "/%s/%i/Manifest-%s-delta-from-%i", - pack->module, pack->from, pack->module, pack->from); + string_or_die(&to, "%s/%s/%i/Manifest-%s-delta-from-%i", + packstage_dir, pack->module, pack->from, pack->module, pack->from); ret = link(from, to); if (ret) { @@ -416,16 +419,16 @@ static int make_final_pack(struct packdata *pack) char *from, *to; struct stat st; - string_or_die(&from, STAGING_DIR "/%i/Manifest-%s-delta-from-%i", - pack->to, "MoM", pack->from); + string_or_die(&from, "%s/%i/Manifest-%s-delta-from-%i", + staging_dir, pack->to, "MoM", pack->from); ret = stat(from, &st); if (ret) { LOG(NULL, "Making extra manifest delta", "MoM: %i->%i", pack->from, pack->to); create_manifest_delta(pack->from, pack->to, "MoM"); } - string_or_die(&to, PACKSTAGE_DIR "/%s/%i/Manifest-%s-delta-from-%i", - pack->module, pack->from, "MoM", pack->from); + string_or_die(&to, "%s/%s/%i/Manifest-%s-delta-from-%i", + packstage_dir, pack->module, pack->from, "MoM", pack->from); ret = link(from, to); if (ret) { @@ -439,9 +442,9 @@ static int make_final_pack(struct packdata *pack) /* tar the staging directory up */ LOG(NULL, "starting tar for pack", "%s: %i to %i", pack->module, pack->from, pack->to); - string_or_die(&tar, "tar " TAR_PERM_ATTR_ARGS " --directory=" PACKSTAGE_DIR "/%s/%i/ " - "--numeric-owner -Jcf " STAGING_DIR "/%i/pack-%s-from-%i.tar delta staged", - pack->module, pack->from, pack->to, pack->module, pack->from); + string_or_die(&tar, "tar " TAR_PERM_ATTR_ARGS " --directory=%s/%s/%i/ " + "--numeric-owner -Jcf %s/%i/pack-%s-from-%i.tar delta staged", + packstage_dir, pack->module, pack->from, staging_dir, pack->to, pack->module, pack->from); ret = system(tar); free(tar); LOG(NULL, "finished tar for pack", "%s: %i to %i", pack->module, pack->from, pack->to); diff --git a/src/rename.c b/src/rename.c index 70f9006..5ea979c 100644 --- a/src/rename.c +++ b/src/rename.c @@ -153,7 +153,7 @@ static void precompute_file_data(struct manifest *manifest, struct file *file, i } if (manifest) { - string_or_die(&filename, "%s/%i/%s/%s", IMAGE_DIR, manifest->version, manifest->component, file->filename); + string_or_die(&filename, "%s/%i/%s/%s", image_dir, manifest->version, manifest->component, file->filename); } else if (old_rename) { item = g_list_first(last_versions_list); while (item) { @@ -161,13 +161,13 @@ static void precompute_file_data(struct manifest *manifest, struct file *file, i item = g_list_next(item); free(filename); - string_or_die(&filename, "%s/%i/full/%s", IMAGE_DIR, last_change, file->filename); + string_or_die(&filename, "%s/%i/full/%s", image_dir, last_change, file->filename); if (!lstat(filename, &buf)) { break; } } } else { - string_or_die(&filename, "%s/%i/full/%s", IMAGE_DIR, file->last_change, file->filename); + string_or_die(&filename, "%s/%i/full/%s", image_dir, file->last_change, file->filename); } /* make sure file->stat.st_size is valid */ diff --git a/src/versions.c b/src/versions.c index eb38acc..3dd1e63 100644 --- a/src/versions.c +++ b/src/versions.c @@ -213,10 +213,10 @@ GList *get_last_versions_list(int next_version, int max_versions) int idx, build_num, build_type, jump_point; int jump_point_found; - dir = opendir(STAGING_DIR); + dir = opendir(staging_dir); if (dir == NULL) { LOG(NULL, "Cannot open directory", "dir_path= %s, strerror= %s", - STAGING_DIR, strerror(errno)); + staging_dir, strerror(errno)); return NULL; } @@ -226,7 +226,7 @@ GList *get_last_versions_list(int next_version, int max_versions) } free(filename); - string_or_die(&filename, STAGING_DIR "/%s", entry.d_name); + string_or_die(&filename, "%s/%s", staging_dir, entry.d_name); if (lstat(filename, &stat)) { LOG(NULL, "lstat failed", "path= %s, strerror= %s", -- 2.5.0