From 897e2b121a107f6d250d38ff4d1d0a4960885c94 Mon Sep 17 00:00:00 2001 From: Andrew Gregory Date: Thu, 4 Jul 2013 06:36:20 -0400 Subject: use full path when checking for mountpoints Signed-off-by: Andrew Gregory Signed-off-by: Allan McRae --- lib/libalpm/remove.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 'lib/libalpm/remove.c') diff --git a/lib/libalpm/remove.c b/lib/libalpm/remove.c index 0b4f80cd..7cb86ff6 100644 --- a/lib/libalpm/remove.c +++ b/lib/libalpm/remove.c @@ -267,6 +267,16 @@ int _alpm_remove_prepare(alpm_handle_t *handle, alpm_list_t **data) return 0; } +/** + * @brief Test if a directory is being used as a mountpoint. + * + * @param handle context handle + * @param directory path to test, must be absolute and include trailing '/' + * @param stbuf stat result for @a directory, may be NULL + * + * @return 0 if @a directory is not a mountpoint or on error, 1 if @a directory + * is a mountpoint + */ static int dir_is_mountpoint(alpm_handle_t *handle, const char *directory, const struct stat *stbuf) { @@ -317,13 +327,14 @@ static int can_remove_file(alpm_handle_t *handle, const alpm_file_t *file, return 1; } + snprintf(filepath, PATH_MAX, "%s%s", handle->root, file->name); + if(file->name[strlen(file->name) - 1] == '/' && - dir_is_mountpoint(handle, file->name, NULL)) { + dir_is_mountpoint(handle, filepath, NULL)) { /* we do not remove mountpoints */ return 1; } - snprintf(filepath, PATH_MAX, "%s%s", handle->root, file->name); /* If we fail write permissions due to a read-only filesystem, abort. * Assume all other possible failures are covered somewhere else */ if(_alpm_access(handle, NULL, filepath, W_OK) == -1) { -- cgit v1.2.3-24-g4f1b