[PATCH] libbb: shrink is_suffixed_with()

Isaac Dunham ibid.ag at gmail.com
Wed Aug 26 17:18:33 UTC 2015


By my test (Debian Jessie, GCC 4.9.2, glibc shared build), the results are:
function                                             old     new   delta
is_suffixed_with                                      61      45     -16
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-16)             Total: -16 bytes
   text	   data	    bss	    dec	    hex	filename
 760460	   2092	   9080	 771632	  bc630	busybox_old
 760444	   2092	   9080	 771616	  bc620	busybox_unstripped
---
 libbb/compare_string_array.c | 15 +++++----------
 1 file changed, 5 insertions(+), 10 deletions(-)

diff --git a/libbb/compare_string_array.c b/libbb/compare_string_array.c
index 3dbd3eb..2a46e62 100644
--- a/libbb/compare_string_array.c
+++ b/libbb/compare_string_array.c
@@ -35,17 +35,12 @@ char* FAST_FUNC is_prefixed_with(const char *string, const char *key)
  */
 char* FAST_FUNC is_suffixed_with(const char *string, const char *key)
 {
-	size_t key_len = strlen(key);
-	ssize_t len_diff = strlen(string) - key_len;
+	char *ret;
 
-	if (len_diff >= 0) {
-		string += len_diff;
-		if (strcmp(string, key) == 0) {
-			return (char*)string;
-		}
-	}
-
-	return NULL;
+	ret = strstr(string, key);
+	if (ret && strcmp(ret, key))
+		ret = NULL;
+	return ret;
 }
 
 /* returns the array index of the string */
-- 
2.1.4



More information about the busybox mailing list