[pacman-dev] [PATCH 1/2] _alpm_lstat: only duplicate string if necessary

Dan McGee dan at archlinux.org
Thu Jun 9 15:13:41 EDT 2011


The vast majority of the time we will just be passing the same string
value on to the lstat() call. The only time we need to duplicate it is
if the path ends in '/'. In one run using a profiler, only 400 of the
200,000 calls (0.2%) required the string to be copied first.

Signed-off-by: Dan McGee <dan at archlinux.org>
---
 lib/libalpm/util.c |   15 ++++++++-------
 1 files changed, 8 insertions(+), 7 deletions(-)

diff --git a/lib/libalpm/util.c b/lib/libalpm/util.c
index 9a8f06d..357ce50 100644
--- a/lib/libalpm/util.c
+++ b/lib/libalpm/util.c
@@ -636,17 +636,18 @@ const char *_alpm_filecache_setup(pmhandle_t *handle)
 int _alpm_lstat(const char *path, struct stat *buf)
 {
 	int ret;
-	char *newpath = strdup(path);
-	size_t len = strlen(newpath);
+	size_t len = strlen(path);
 
 	/* strip the trailing slash if one exists */
-	if(len != 0 && newpath[len - 1] == '/') {
-			newpath[len - 1] = '\0';
+	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);
 	}
 
-	ret = lstat(newpath, buf);
-
-	FREE(newpath);
 	return ret;
 }
 
-- 
1.7.5.2



More information about the pacman-dev mailing list