[pacman-dev] [PATCH 2/5] move _alpm_lstat into util-common
Andrew Gregory
andrew.gregory.8 at gmail.com
Thu Jun 26 12:52:56 EDT 2014
Signed-off-by: Andrew Gregory <andrew.gregory.8 at gmail.com>
---
lib/libalpm/add.c | 4 ++--
lib/libalpm/conflict.c | 2 +-
lib/libalpm/diskspace.c | 2 +-
lib/libalpm/remove.c | 2 +-
lib/libalpm/util.c | 25 -------------------------
lib/libalpm/util.h | 2 --
src/common/util-common.c | 25 +++++++++++++++++++++++++
src/common/util-common.h | 4 ++++
8 files changed, 34 insertions(+), 32 deletions(-)
diff --git a/lib/libalpm/add.c b/lib/libalpm/add.c
index 4f557a4..bbf2a51 100644
--- a/lib/libalpm/add.c
+++ b/lib/libalpm/add.c
@@ -209,7 +209,7 @@ static int extract_single_file(alpm_handle_t *handle, struct archive *archive,
* F/N | 3 | 4
* D | 5 | 6
*
- * 1,2- extract, no magic necessary. lstat (_alpm_lstat) will fail here.
+ * 1,2- extract, no magic necessary. lstat (llstat) will fail here.
* 3,4- conflict checks should have caught this. either overwrite
* or backup the file.
* 5- file replacing directory- don't allow it.
@@ -217,7 +217,7 @@ static int extract_single_file(alpm_handle_t *handle, struct archive *archive,
*/
struct stat lsbuf;
- if(_alpm_lstat(filename, &lsbuf) != 0) {
+ if(llstat(filename, &lsbuf) != 0) {
/* cases 1,2: file doesn't exist, skip all backup checks */
} else {
if(S_ISDIR(lsbuf.st_mode)) {
diff --git a/lib/libalpm/conflict.c b/lib/libalpm/conflict.c
index 2611aef..961e3a7 100644
--- a/lib/libalpm/conflict.c
+++ b/lib/libalpm/conflict.c
@@ -495,7 +495,7 @@ alpm_list_t *_alpm_db_find_fileconflicts(alpm_handle_t *handle,
relative_path = path + rootlen;
/* stat the file - if it exists, do some checks */
- if(_alpm_lstat(path, &lsbuf) != 0) {
+ if(llstat(path, &lsbuf) != 0) {
continue;
}
diff --git a/lib/libalpm/diskspace.c b/lib/libalpm/diskspace.c
index d07b188..606f2dc 100644
--- a/lib/libalpm/diskspace.c
+++ b/lib/libalpm/diskspace.c
@@ -235,7 +235,7 @@ static int calculate_removed_size(alpm_handle_t *handle,
const char *filename = file->name;
snprintf(path, PATH_MAX, "%s%s", handle->root, filename);
- _alpm_lstat(path, &st);
+ llstat(path, &st);
/* skip directories and symlinks to be consistent with libarchive that
* reports them to be zero size */
diff --git a/lib/libalpm/remove.c b/lib/libalpm/remove.c
index 5cbeeb9..dd061e5 100644
--- a/lib/libalpm/remove.c
+++ b/lib/libalpm/remove.c
@@ -457,7 +457,7 @@ static int unlink_file(alpm_handle_t *handle, alpm_pkg_t *oldpkg,
return 1;
}
- if(_alpm_lstat(file, &buf)) {
+ if(llstat(file, &buf)) {
_alpm_log(handle, ALPM_LOG_DEBUG, "file %s does not exist\n", file);
return 1;
}
diff --git a/lib/libalpm/util.c b/lib/libalpm/util.c
index d9f741b..6dab0de 100644
--- a/lib/libalpm/util.c
+++ b/lib/libalpm/util.c
@@ -742,31 +742,6 @@ const char *_alpm_filecache_setup(alpm_handle_t *handle)
return cachedir;
}
-/** lstat wrapper that treats /path/dirsymlink/ the same as /path/dirsymlink.
- * Linux lstat follows POSIX semantics and still performs a dereference on
- * the first, and for uses of lstat in libalpm this is not what we want.
- * @param path path to file to lstat
- * @param buf structure to fill with stat information
- * @return the return code from lstat
- */
-int _alpm_lstat(const char *path, struct stat *buf)
-{
- int ret;
- size_t len = strlen(path);
-
- /* strip the trailing slash if one exists */
- if(len != 0 && path[len - 1] == '/') {
- char *newpath = strdup(path);
- newpath[len - 1] = '\0';
- ret = lstat(newpath, buf);
- free(newpath);
- } else {
- ret = lstat(path, buf);
- }
-
- return ret;
-}
-
#ifdef HAVE_LIBSSL
/** Compute the MD5 message digest of a file.
* @param path file path of file to compute MD5 digest of
diff --git a/lib/libalpm/util.h b/lib/libalpm/util.h
index 20f63f6..6f47073 100644
--- a/lib/libalpm/util.h
+++ b/lib/libalpm/util.h
@@ -35,7 +35,6 @@
#include <stdarg.h>
#include <stddef.h> /* size_t */
#include <sys/types.h>
-#include <sys/stat.h> /* struct stat */
#include <math.h> /* fabs */
#include <float.h> /* DBL_EPSILON */
#include <fcntl.h> /* open, close */
@@ -128,7 +127,6 @@ int _alpm_ldconfig(alpm_handle_t *handle);
int _alpm_str_cmp(const void *s1, const void *s2);
char *_alpm_filecache_find(alpm_handle_t *handle, const char *filename);
const char *_alpm_filecache_setup(alpm_handle_t *handle);
-int _alpm_lstat(const char *path, struct stat *buf);
int _alpm_test_checksum(const char *filepath, const char *expected, alpm_pkgvalidation_t type);
int _alpm_archive_fgets(struct archive *a, struct archive_read_buffer *b);
int _alpm_splitname(const char *target, char **name, char **version,
diff --git a/src/common/util-common.c b/src/common/util-common.c
index c5097dd..e6f9519 100644
--- a/src/common/util-common.c
+++ b/src/common/util-common.c
@@ -73,6 +73,31 @@ char *mdirname(const char *path)
return strdup(".");
}
+/** lstat wrapper that treats /path/dirsymlink/ the same as /path/dirsymlink.
+ * Linux lstat follows POSIX semantics and still performs a dereference on
+ * the first, and for uses of lstat in libalpm this is not what we want.
+ * @param path path to file to lstat
+ * @param buf structure to fill with stat information
+ * @return the return code from lstat
+ */
+int llstat(const char *path, struct stat *buf)
+{
+ int ret;
+ size_t len = strlen(path);
+
+ /* strip the trailing slash if one exists */
+ if(len != 0 && path[len - 1] == '/') {
+ char *newpath = strdup(path);
+ newpath[len - 1] = '\0';
+ ret = lstat(newpath, buf);
+ free(newpath);
+ } else {
+ ret = lstat(path, buf);
+ }
+
+ return ret;
+}
+
#ifndef HAVE_STRNDUP
/* A quick and dirty implementation derived from glibc */
/** Determines the length of a fixed-size string.
diff --git a/src/common/util-common.h b/src/common/util-common.h
index e28c60d..5f04b00 100644
--- a/src/common/util-common.h
+++ b/src/common/util-common.h
@@ -20,9 +20,13 @@
#ifndef _PM_UTIL_COMMON_H
#define _PM_UTIL_COMMON_H
+#include <sys/stat.h> /* struct stat */
+
const char *mbasename(const char *path);
char *mdirname(const char *path);
+int llstat(const char *path, struct stat *buf);
+
#ifndef HAVE_STRNDUP
char *strndup(const char *s, size_t n);
#endif
--
2.0.0
More information about the pacman-dev
mailing list