summaryrefslogtreecommitdiff
path: root/utils
diff options
context:
space:
mode:
authorGuillem Jover <guillem@debian.org>2011-09-08 10:19:28 +0200
committerGuillem Jover <guillem@debian.org>2011-09-09 10:44:30 +0200
commit3518e4d159412c31c2de413b7bc358870b6c5c02 (patch)
treea61277b36303ce029cbad5cd870c06a2f84cfa37 /utils
parentc922a8f681dc27135947ebdaff68fc3158614807 (diff)
downloaddpkg-3518e4d159412c31c2de413b7bc358870b6c5c02.tar.gz
u-a: Refactor alternative_path_classify from alternative_can_replace_path
Diffstat (limited to 'utils')
-rw-r--r--utils/update-alternatives.c32
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