diff options
author | Guillem Jover <guillem@debian.org> | 2011-09-08 10:19:28 +0200 |
---|---|---|
committer | Guillem Jover <guillem@debian.org> | 2011-09-09 10:44:30 +0200 |
commit | 3518e4d159412c31c2de413b7bc358870b6c5c02 (patch) | |
tree | a61277b36303ce029cbad5cd870c06a2f84cfa37 /utils | |
parent | c922a8f681dc27135947ebdaff68fc3158614807 (diff) | |
download | dpkg-3518e4d159412c31c2de413b7bc358870b6c5c02.tar.gz |
u-a: Refactor alternative_path_classify from alternative_can_replace_path
Diffstat (limited to 'utils')
-rw-r--r-- | utils/update-alternatives.c | 32 |
1 files changed, 23 insertions, 9 deletions
diff --git a/utils/update-alternatives.c b/utils/update-alternatives.c index 03ceb6d26..e7516aaef 100644 --- a/utils/update-alternatives.c +++ b/utils/update-alternatives.c @@ -1646,25 +1646,39 @@ alternative_commit(struct alternative *a) alternative_commit_operations_free(a); } -static bool -alternative_can_replace_path(const char *linkname) +enum alternative_path_status { + ALT_PATH_SYMLINK, + ALT_PATH_MISSING, + ALT_PATH_OTHER, +}; + +static enum alternative_path_status +alternative_path_classify(const char *linkname) { struct stat st; - bool replace_link; - - if (opt_force) - return true; errno = 0; if (lstat(linkname, &st) == -1) { if (errno != ENOENT) syserr(_("cannot stat file '%s'"), linkname); - replace_link = true; + return ALT_PATH_MISSING; + } else if (S_ISLNK(st.st_mode)) { + return ALT_PATH_SYMLINK; } else { - replace_link = S_ISLNK(st.st_mode); + return ALT_PATH_OTHER; } +} - return replace_link; +static bool +alternative_can_replace_path(const char *linkname) +{ + if (opt_force) + return true; + + if (alternative_path_classify(linkname) == ALT_PATH_OTHER) + return false; + else + return true; } static void |