X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fshared%2Finstall.c;h=6172c42d692099eaee52b177bb4883fa7187c37f;hp=9648c641d70e824952ad9354a1e9952cdfd945b6;hb=e9ba5ef666085dbd85bec4bbb942d4c555b1053e;hpb=0eb4b7f2e7ed1dda0511b440ec002c668de99fb9 diff --git a/src/shared/install.c b/src/shared/install.c index 9648c641d..6172c42d6 100644 --- a/src/shared/install.c +++ b/src/shared/install.c @@ -112,51 +112,6 @@ static int get_config_path(UnitFileScope scope, bool runtime, const char *root_d return 0; } -static int add_file_change( - UnitFileChange **changes, - unsigned *n_changes, - UnitFileChangeType type, - const char *path, - const char *source) { - - UnitFileChange *c; - unsigned i; - - assert(path); - assert(!changes == !n_changes); - - if (!changes) - return 0; - - c = realloc(*changes, (*n_changes + 1) * sizeof(UnitFileChange)); - if (!c) - return -ENOMEM; - - *changes = c; - i = *n_changes; - - c[i].type = type; - c[i].path = strdup(path); - if (!c[i].path) - return -ENOMEM; - - path_kill_slashes(c[i].path); - - if (source) { - c[i].source = strdup(source); - if (!c[i].source) { - free(c[i].path); - return -ENOMEM; - } - - path_kill_slashes(c[i].path); - } else - c[i].source = NULL; - - *n_changes = i+1; - return 0; -} - static int mark_symlink_for_removal( Set **remove_symlinks_to, const char *p) { @@ -309,7 +264,7 @@ static int remove_marked_symlinks_fd( path_kill_slashes(p); rmdir_parents(p, config_path); - add_file_change(changes, n_changes, UNIT_FILE_UNLINK, p, NULL); + unit_file_changes_add(changes, n_changes, UNIT_FILE_UNLINK, p, NULL); if (!set_get(remove_symlinks_to, p)) { @@ -596,7 +551,7 @@ int unit_file_mask( } if (symlink("/dev/null", path) >= 0) { - add_file_change(changes, n_changes, UNIT_FILE_SYMLINK, path, "/dev/null"); + unit_file_changes_add(changes, n_changes, UNIT_FILE_SYMLINK, path, "/dev/null"); continue; } @@ -607,8 +562,8 @@ int unit_file_mask( if (force) { if (symlink_atomic("/dev/null", path) >= 0) { - add_file_change(changes, n_changes, UNIT_FILE_UNLINK, path, NULL); - add_file_change(changes, n_changes, UNIT_FILE_SYMLINK, path, "/dev/null"); + unit_file_changes_add(changes, n_changes, UNIT_FILE_UNLINK, path, NULL); + unit_file_changes_add(changes, n_changes, UNIT_FILE_SYMLINK, path, "/dev/null"); continue; } } @@ -664,7 +619,7 @@ int unit_file_unmask( q = -errno; else { q = mark_symlink_for_removal(&remove_symlinks_to, path); - add_file_change(changes, n_changes, UNIT_FILE_UNLINK, path, NULL); + unit_file_changes_add(changes, n_changes, UNIT_FILE_UNLINK, path, NULL); } } @@ -746,7 +701,7 @@ int unit_file_link( return -ENOMEM; if (symlink(*i, path) >= 0) { - add_file_change(changes, n_changes, UNIT_FILE_SYMLINK, path, *i); + unit_file_changes_add(changes, n_changes, UNIT_FILE_SYMLINK, path, *i); continue; } @@ -765,8 +720,8 @@ int unit_file_link( if (force) { if (symlink_atomic(*i, path) >= 0) { - add_file_change(changes, n_changes, UNIT_FILE_UNLINK, path, NULL); - add_file_change(changes, n_changes, UNIT_FILE_SYMLINK, path, *i); + unit_file_changes_add(changes, n_changes, UNIT_FILE_UNLINK, path, NULL); + unit_file_changes_add(changes, n_changes, UNIT_FILE_SYMLINK, path, *i); continue; } } @@ -793,6 +748,51 @@ void unit_file_list_free(Hashmap *h) { hashmap_free(h); } +int unit_file_changes_add( + UnitFileChange **changes, + unsigned *n_changes, + UnitFileChangeType type, + const char *path, + const char *source) { + + UnitFileChange *c; + unsigned i; + + assert(path); + assert(!changes == !n_changes); + + if (!changes) + return 0; + + c = realloc(*changes, (*n_changes + 1) * sizeof(UnitFileChange)); + if (!c) + return -ENOMEM; + + *changes = c; + i = *n_changes; + + c[i].type = type; + c[i].path = strdup(path); + if (!c[i].path) + return -ENOMEM; + + path_kill_slashes(c[i].path); + + if (source) { + c[i].source = strdup(source); + if (!c[i].source) { + free(c[i].path); + return -ENOMEM; + } + + path_kill_slashes(c[i].path); + } else + c[i].source = NULL; + + *n_changes = i+1; + return 0; +} + void unit_file_changes_free(UnitFileChange *changes, unsigned n_changes) { unsigned i; @@ -809,7 +809,7 @@ void unit_file_changes_free(UnitFileChange *changes, unsigned n_changes) { free(changes); } -static void install_info_free(InstallInfo *i) { +static void install_info_free(UnitFileInstallInfo *i) { assert(i); free(i->name); @@ -823,7 +823,7 @@ static void install_info_free(InstallInfo *i) { } static void install_info_hashmap_free(OrderedHashmap *m) { - InstallInfo *i; + UnitFileInstallInfo *i; if (!m) return; @@ -847,7 +847,7 @@ static int install_info_add( InstallContext *c, const char *name, const char *path) { - InstallInfo *i = NULL; + UnitFileInstallInfo *i = NULL; int r; assert(c); @@ -867,7 +867,7 @@ static int install_info_add( if (r < 0) return r; - i = new0(InstallInfo, 1); + i = new0(UnitFileInstallInfo, 1); if (!i) return -ENOMEM; @@ -926,7 +926,7 @@ static int config_parse_also( size_t l; const char *word, *state; InstallContext *c = data; - InstallInfo *i = userdata; + UnitFileInstallInfo *i = userdata; assert(filename); assert(lvalue); @@ -967,7 +967,7 @@ static int config_parse_user( void *data, void *userdata) { - InstallInfo *i = data; + UnitFileInstallInfo *i = data; char *printed; int r; @@ -997,7 +997,7 @@ static int config_parse_default_instance( void *data, void *userdata) { - InstallInfo *i = data; + UnitFileInstallInfo *i = data; char *printed; int r; @@ -1022,7 +1022,7 @@ static int config_parse_default_instance( static int unit_file_load( InstallContext *c, - InstallInfo *info, + UnitFileInstallInfo *info, const char *path, const char *root_dir, bool allow_symlink, @@ -1082,7 +1082,7 @@ static int unit_file_load( static int unit_file_search( InstallContext *c, - InstallInfo *info, + UnitFileInstallInfo *info, const LookupPaths *paths, const char *root_dir, bool allow_symlink, @@ -1159,7 +1159,7 @@ static int unit_file_can_install( bool *also) { _cleanup_(install_context_done) InstallContext c = {}; - InstallInfo *i; + UnitFileInstallInfo *i; int r; assert(paths); @@ -1198,7 +1198,7 @@ static int create_symlink( mkdir_parents_label(new_path, 0755); if (symlink(old_path, new_path) >= 0) { - add_file_change(changes, n_changes, UNIT_FILE_SYMLINK, new_path, old_path); + unit_file_changes_add(changes, n_changes, UNIT_FILE_SYMLINK, new_path, old_path); return 0; } @@ -1219,14 +1219,14 @@ static int create_symlink( if (r < 0) return r; - add_file_change(changes, n_changes, UNIT_FILE_UNLINK, new_path, NULL); - add_file_change(changes, n_changes, UNIT_FILE_SYMLINK, new_path, old_path); + unit_file_changes_add(changes, n_changes, UNIT_FILE_UNLINK, new_path, NULL); + unit_file_changes_add(changes, n_changes, UNIT_FILE_SYMLINK, new_path, old_path); return 0; } static int install_info_symlink_alias( - InstallInfo *i, + UnitFileInstallInfo *i, const char *config_path, bool force, UnitFileChange **changes, @@ -1258,7 +1258,7 @@ static int install_info_symlink_alias( } static int install_info_symlink_wants( - InstallInfo *i, + UnitFileInstallInfo *i, const char *config_path, char **list, const char *suffix, @@ -1315,7 +1315,7 @@ static int install_info_symlink_wants( } static int install_info_symlink_link( - InstallInfo *i, + UnitFileInstallInfo *i, const LookupPaths *paths, const char *config_path, const char *root_dir, @@ -1343,7 +1343,7 @@ static int install_info_symlink_link( } static int install_info_apply( - InstallInfo *i, + UnitFileInstallInfo *i, const LookupPaths *paths, const char *config_path, const char *root_dir, @@ -1383,7 +1383,7 @@ static int install_context_apply( UnitFileChange **changes, unsigned *n_changes) { - InstallInfo *i; + UnitFileInstallInfo *i; int r, q; assert(c); @@ -1428,7 +1428,7 @@ static int install_context_mark_for_removal( const char *config_path, const char *root_dir) { - InstallInfo *i; + UnitFileInstallInfo *i; int r, q; assert(c); @@ -1513,7 +1513,7 @@ int unit_file_add_dependency( _cleanup_free_ char *config_path = NULL; char **i; int r; - InstallInfo *info; + UnitFileInstallInfo *info; assert(scope >= 0); assert(scope < _UNIT_FILE_SCOPE_MAX); @@ -1702,7 +1702,7 @@ int unit_file_set_default( _cleanup_free_ char *config_path = NULL; char *path; int r; - InstallInfo *i = NULL; + UnitFileInstallInfo *i = NULL; assert(scope >= 0); assert(scope < _UNIT_FILE_SCOPE_MAX);