On 08/26/2015 07:18 PM, Isaac Dunham wrote:
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 */


Hi,
I think this will not work in case of:

haystack = provatesttest  needle = test

I suspect it will return NULL instead of last "test"

unless you traverse in a loop the whole string like:

char *my_ends_with(const char *str, const char *key)
{
        char *p;
        const char *s = str;
        
        while((p = strstr(s, key)) != NULL && *key != 0) {
        //      printf("p = %s s = %s\n", p, s);
                if (strcmp(p, key) == 0)
                        return p;
                s++;
        }
        return NULL;
}

Ciao,
Tito

_______________________________________________
busybox mailing list
[email protected]
http://lists.busybox.net/mailman/listinfo/busybox

Reply via email to