[pacman-dev] [PATCH] Optimize string comparison on 1 character compare

Dan McGee dan at archlinux.org
Tue Nov 27 01:07:37 EST 2007


No need to do strcmp when we can check for direct equality, but is it worth
the optimization?

Signed-off-by: Dan McGee <dan at archlinux.org>
---
 lib/libalpm/be_files.c |    4 ++--
 lib/libalpm/util.c     |    2 +-
 src/pacman/sync.c      |    4 ++--
 src/pacman/util.c      |    2 +-
 src/util/testdb.c      |    2 +-
 5 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/lib/libalpm/be_files.c b/lib/libalpm/be_files.c
index 078136e..74932d2 100644
--- a/lib/libalpm/be_files.c
+++ b/lib/libalpm/be_files.c
@@ -170,7 +170,7 @@ pmpkg_t *_alpm_db_scan(pmdb_t *db, const char *target)
 			/* search for a specific package (by name only) */
 			rewinddir(db->handle);
 			while(!found && (ent = readdir(db->handle)) != NULL) {
-				if(!strcmp(ent->d_name, ".") || !strcmp(ent->d_name, "..")) {
+				if(*(ent->d_name) == '.' || !strcmp(ent->d_name, "..")) {
 					continue;
 				}
 				/* stat the entry, make sure it's a directory */
@@ -201,7 +201,7 @@ pmpkg_t *_alpm_db_scan(pmdb_t *db, const char *target)
 				if(ent == NULL) {
 					return(NULL);
 				}
-				if(!strcmp(ent->d_name, ".") || !strcmp(ent->d_name, "..")) {
+				if(*(ent->d_name) == '.' || !strcmp(ent->d_name, "..")) {
 					isdir = 0;
 					continue;
 				}
diff --git a/lib/libalpm/util.c b/lib/libalpm/util.c
index 2a42948..3ce1f04 100644
--- a/lib/libalpm/util.c
+++ b/lib/libalpm/util.c
@@ -463,7 +463,7 @@ int _alpm_rmrf(const char *path)
 			for(dp = readdir(dirp); dp != NULL; dp = readdir(dirp)) {
 				if(dp->d_ino) {
 					sprintf(name, "%s/%s", path, dp->d_name);
-					if(strcmp(dp->d_name, "..") && strcmp(dp->d_name, ".")) {
+					if(strcmp(dp->d_name, "..") && *(dp->d_name) != '.') {
 						errflag += _alpm_rmrf(name);
 					}
 				}
diff --git a/src/pacman/sync.c b/src/pacman/sync.c
index 58e616e..e9c16f5 100644
--- a/src/pacman/sync.c
+++ b/src/pacman/sync.c
@@ -61,7 +61,7 @@ static int sync_cleandb(const char *dbpath) {
 		int found = 0;
 		char *dname = ent->d_name;
 
-		if(!strcmp(dname, ".") || !strcmp(dname, "..")) {
+		if(*dname == '.' || !strcmp(dname, "..")) {
 			continue;
 		}
 		/* skip the local and sync directories */
@@ -145,7 +145,7 @@ static int sync_cleancache(int level)
 			char path[PATH_MAX];
 			pmpkg_t *localpkg = NULL, *dbpkg = NULL;
 
-			if(!strcmp(ent->d_name, ".") || !strcmp(ent->d_name, "..")) {
+			if(*(ent->d_name) == '.' || !strcmp(ent->d_name, "..")) {
 				continue;
 			}
 			/* build the full filepath */
diff --git a/src/pacman/util.c b/src/pacman/util.c
index a925be3..5025b3f 100644
--- a/src/pacman/util.c
+++ b/src/pacman/util.c
@@ -154,7 +154,7 @@ int rmrf(const char *path)
 			if(dp->d_ino) {
 				char name[PATH_MAX];
 				sprintf(name, "%s/%s", path, dp->d_name);
-				if(strcmp(dp->d_name, "..") && strcmp(dp->d_name, ".")) {
+				if(strcmp(dp->d_name, "..") && *(dp->d_name) != '.') {
 					errflag += rmrf(name);
 				}
 			}
diff --git a/src/util/testdb.c b/src/util/testdb.c
index 31b4ff0..c3f86d8 100644
--- a/src/util/testdb.c
+++ b/src/util/testdb.c
@@ -75,7 +75,7 @@ static int db_test(char *dbpath)
   }
 
   while ((ent = readdir(dir)) != NULL) {
-    if(!strcmp(ent->d_name, ".") || !strcmp(ent->d_name, "..")) {
+    if(*(ent->d_name) == '.' || !strcmp(ent->d_name, "..")) {
       continue;
     }
     /* check for desc, depends, and files */
-- 
1.5.3.6





More information about the pacman-dev mailing list