Ignore:
Timestamp:
Dec 20, 2016, 4:07:32 PM (7 years ago)
Author:
Bruno Cornec
Message:

New 3?3 banch for incorporation of latest busybox 1.25. Changing minor version to handle potential incompatibilities.

Location:
branches/3.3
Files:
1 edited
1 copied

Legend:

Unmodified
Added
Removed
  • branches/3.3/mindi-busybox/libbb/compare_string_array.c

    r2725 r3621  
    55
    66#include "libbb.h"
     7
     8/*
     9 * Return NULL if string is not prefixed with key. Return pointer to the
     10 * first character in string after the prefix key. If key is an empty string,
     11 * return pointer to the beginning of string.
     12 */
     13char* FAST_FUNC is_prefixed_with(const char *string, const char *key)
     14{
     15#if 0   /* Two passes over key - probably slower */
     16    int len = strlen(key);
     17    if (strncmp(string, key, len) == 0)
     18        return string + len;
     19    return NULL;
     20#else   /* Open-coded */
     21    while (*key != '\0') {
     22        if (*key != *string)
     23            return NULL;
     24        key++;
     25        string++;
     26    }
     27    return (char*)string;
     28#endif
     29}
     30
     31/*
     32 * Return NULL if string is not suffixed with key. Return pointer to the
     33 * beginning of prefix key in string. If key is an empty string return pointer
     34 * to the end of string.
     35 */
     36char* FAST_FUNC is_suffixed_with(const char *string, const char *key)
     37{
     38    size_t key_len = strlen(key);
     39    ssize_t len_diff = strlen(string) - key_len;
     40
     41    if (len_diff >= 0) {
     42        string += len_diff;
     43        if (strcmp(string, key) == 0) {
     44            return (char*)string;
     45        }
     46    }
     47
     48    return NULL;
     49}
    750
    851/* returns the array index of the string */
     
    4083{
    4184    int i;
    42     int len = strlen(key);
    43     if (len) {
     85    if (key[0]) {
    4486        for (i = 0; string_array[i] != 0; i++) {
    45             if (strncmp(string_array[i], key, len) == 0) {
     87            if (is_prefixed_with(string_array[i], key)) {
    4688                return i;
    4789            }
     
    94136}
    95137#endif
     138
     139#if ENABLE_UNIT_TEST
     140
     141BBUNIT_DEFINE_TEST(is_prefixed_with)
     142{
     143    BBUNIT_ASSERT_STREQ(" bar", is_prefixed_with("foo bar", "foo"));
     144    BBUNIT_ASSERT_STREQ("bar", is_prefixed_with("foo bar", "foo "));
     145    BBUNIT_ASSERT_STREQ("", is_prefixed_with("foo", "foo"));
     146    BBUNIT_ASSERT_STREQ("foo", is_prefixed_with("foo", ""));
     147    BBUNIT_ASSERT_STREQ("", is_prefixed_with("", ""));
     148
     149    BBUNIT_ASSERT_NULL(is_prefixed_with("foo", "bar foo"));
     150    BBUNIT_ASSERT_NULL(is_prefixed_with("foo foo", "bar"));
     151    BBUNIT_ASSERT_NULL(is_prefixed_with("", "foo"));
     152
     153    BBUNIT_ENDTEST;
     154}
     155
     156BBUNIT_DEFINE_TEST(is_suffixed_with)
     157{
     158    BBUNIT_ASSERT_STREQ("bar", is_suffixed_with("foo bar", "bar"));
     159    BBUNIT_ASSERT_STREQ("foo", is_suffixed_with("foo", "foo"));
     160    BBUNIT_ASSERT_STREQ("", is_suffixed_with("foo", ""));
     161    BBUNIT_ASSERT_STREQ("", is_suffixed_with("", ""));
     162    BBUNIT_ASSERT_STREQ("foo", is_suffixed_with("barfoofoo", "foo"));
     163
     164    BBUNIT_ASSERT_NULL(is_suffixed_with("foo", "bar foo"));
     165    BBUNIT_ASSERT_NULL(is_suffixed_with("foo foo", "bar"));
     166    BBUNIT_ASSERT_NULL(is_suffixed_with("", "foo"));
     167
     168    BBUNIT_ENDTEST;
     169}
     170
     171#endif /* ENABLE_UNIT_TEST */
Note: See TracChangeset for help on using the changeset viewer.