rename: compare_string_array -> index_in_str_array
authorDenis Vlasenko <vda.linux@googlemail.com>
Sun, 5 Nov 2006 18:05:09 +0000 (18:05 -0000)
committerDenis Vlasenko <vda.linux@googlemail.com>
Sun, 5 Nov 2006 18:05:09 +0000 (18:05 -0000)
introduce index_in_substr_array and use it in
iproute2

archival/dpkg.c
e2fsprogs/fsck.c
include/libbb.h
libbb/compare_string_array.c
miscutils/devfsd.c
networking/ip.c
networking/libiproute/ipaddress.c
networking/libiproute/iproute.c
networking/libiproute/utils.c
util-linux/mount.c

index 2b9c4b82d6b8088329a46748ef0e687a61687a5d..9024d41d237ecfdff522ebe464cac557f36957c9 100644 (file)
@@ -644,7 +644,7 @@ static unsigned int fill_package_struct(char *control_buffer)
                        goto fill_package_struct_cleanup; /* Oh no, the dreaded goto statement ! */
                }
 
-               field_num = compare_string_array(field_names, field_name);
+               field_num = index_in_str_array(field_names, field_name);
                switch (field_num) {
                        case 0: /* Package */
                                new_node->name = search_name_hashtable(field_value);
index 53657fb254167a723e23d08adff1b1f21c56f7dc..66b78b624d5d24dc375d96af2557257d22f655d9 100644 (file)
@@ -996,11 +996,11 @@ static int ignore(struct fs_info *fs)
        if (!fs_match(fs, &fs_type_compiled)) return 1;
 
        /* Are we ignoring this type? */
-       if(compare_string_array(ignored_types, fs->type) >= 0)
+       if (index_in_str_array(ignored_types, fs->type) >= 0)
                return 1;
 
        /* Do we really really want to check this fs? */
-       wanted = compare_string_array(really_wanted, fs->type) >= 0;
+       wanted = index_in_str_array(really_wanted, fs->type) >= 0;
 
        /* See if the <fsck.fs> program is available. */
        s = find_fsck(fs->type);
index 8c1d784344dc299dbc36bf2afcfb01db64abc3c5..ce4b9223ca573a00409ac7297f843a1b56b237fe 100644 (file)
@@ -477,7 +477,8 @@ extern void setup_environment(const char *shell, int loginshell, int changeenv,
 extern int correct_password(const struct passwd *pw);
 extern char *pw_encrypt(const char *clear, const char *salt);
 extern int obscure(const char *old, const char *newval, const struct passwd *pwdp);
-extern int compare_string_array(const char * const string_array[], const char *key);
+extern int index_in_str_array(const char * const string_array[], const char *key);
+extern int index_in_substr_array(const char * const string_array[], const char *key);
 extern void print_login_issue(const char *issue_file, const char *tty);
 extern void print_login_prompt(void);
 #ifdef BB_NOMMU
index cac93d9957c77598f3fe1034c0547b6d8224ac00..d15578ca3605200b3954c54b16fb8f42bd6ab2d1 100644 (file)
@@ -3,11 +3,11 @@
  * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
  */
 
-#include <string.h>
 #include "libbb.h"
 
-/* returns the array number of the string */
-int compare_string_array(const char * const string_array[], const char *key)
+/* returns the array index of the string */
+/* (index of first match is returned, or -1) */
+int index_in_str_array(const char * const string_array[], const char *key)
 {
        int i;
 
@@ -16,6 +16,22 @@ int compare_string_array(const char * const string_array[], const char *key)
                        return i;
                }
        }
-       return -i;
+       return -1;
 }
 
+/* returns the array index of the string, even if it matches only a beginning */
+/* (index of first match is returned, or -1) */
+int index_in_substr_array(const char * const string_array[], const char *key)
+{
+       int i;
+       int len = strlen(key);
+       if (!len)
+               return -1;
+
+       for (i = 0; string_array[i] != 0; i++) {
+               if (strncmp(string_array[i], key, len) == 0) {
+                       return i;
+               }
+       }
+       return -1;
+}
index 32973d6304db60d00e20edc79be3dda1b0e35f6e..de046e818cc96ae23d4e329bb149cb54c0acc684 100644 (file)
@@ -627,7 +627,7 @@ static void process_config_line (const char *line, unsigned long *event_mask)
                        when, name, what,
                        p[0], p[1], p[2], p[3], p[4], p[5], p[6]);
 
-       i = compare_string_array(options, when );
+       i = index_in_str_array(options, when );
 
        /*"CLEAR_CONFIG"*/
        if( i == 0)
@@ -673,7 +673,7 @@ static void process_config_line (const char *line, unsigned long *event_mask)
                goto process_config_line_err;
        }
 
-       i = compare_string_array(options, what );
+       i = index_in_str_array(options, what );
 
        switch(i)
        {
@@ -1313,8 +1313,8 @@ static const char *get_variable (const char *variable, void *info)
                /* Here on error we should do exit(RV_SYS_ERROR), instead we do exit(EXIT_FAILURE) */
                hostname[STRING_LENGTH - 1] = '\0';
 
-       /* compare_string_array returns i>=0  */
-       i=compare_string_array(field_names, variable);
+       /* index_in_str_array returns i>=0  */
+       i=index_in_str_array(field_names, variable);
 
        if ( i > 6 || i < 0 || (i > 1 && gv_info == NULL))
                        return (NULL);
index fe5714f166bbaba3c84a74244c7049315f448954..6363155978f39509cb7909fbd7999e8cb64d4261 100644 (file)
  * Rani Assaf <rani@magic.metawire.com> 980929:        resolve addresses
  */
 
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <syslog.h>
-#include <fcntl.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <string.h>
+#include "busybox.h"
 
 #include "libiproute/utils.h"
 #include "libiproute/ip_common.h"
 
-#include "busybox.h"
-
 int ip_main(int argc, char **argv)
 {
        int ret = EXIT_FAILURE;
@@ -57,5 +48,5 @@ int ip_main(int argc, char **argv)
        if (ret) {
                bb_show_usage();
        }
-       return(EXIT_SUCCESS);
+       return EXIT_SUCCESS;
 }
index fdbe6117c9dd7f7eb27eac495ad8485f5d7029df..fc6cf7beb06c4d1f939f4b5e852a63fd43df28b6 100644 (file)
@@ -441,7 +441,7 @@ int ipaddr_list_or_flush(int argc, char **argv, int flush)
        }
 
        while (argc > 0) {
-               const int option_num = compare_string_array(option, *argv);
+               const int option_num = index_in_str_array(option, *argv);
                switch (option_num) {
                        case 0: /* to */
                                NEXT_ARG();
@@ -653,7 +653,7 @@ static int ipaddr_modify(int cmd, int argc, char **argv)
        req.ifa.ifa_family = preferred_family;
 
        while (argc > 0) {
-               const int option_num = compare_string_array(option, *argv);
+               const int option_num = index_in_str_array(option, *argv);
                switch (option_num) {
                        case 0: /* peer */
                        case 1: /* remote */
@@ -800,25 +800,24 @@ static int ipaddr_modify(int cmd, int argc, char **argv)
 int do_ipaddr(int argc, char **argv)
 {
        static const char *const commands[] = {
-               "add", "del", "delete", "list", "show", "lst", "flush", 0
+               "add", "delete", "list", "show", "lst", "flush", 0
        };
 
        int command_num = 2;
 
        if (*argv) {
-               command_num = compare_string_array(commands, *argv);
+               command_num = index_in_substr_array(commands, *argv);
        }
        switch (command_num) {
                case 0: /* add */
                        return ipaddr_modify(RTM_NEWADDR, argc-1, argv+1);
-               case 1: /* del */
-               case 2: /* delete */
+               case 1: /* delete */
                        return ipaddr_modify(RTM_DELADDR, argc-1, argv+1);
-               case 3: /* list */
-               case 4: /* show */
-               case 5: /* lst */
+               case 2: /* list */
+               case 3: /* show */
+               case 4: /* lst */
                        return ipaddr_list_or_flush(argc-1, argv+1, 0);
-               case 6: /* flush */
+               case 5: /* flush */
                        return ipaddr_list_or_flush(argc-1, argv+1, 1);
        }
        bb_error_msg_and_die("unknown command %s", *argv);
index 3b2a677d9dfa687ae0066c0d7e1e2636950d2622..9c3b87040e3acf770b09a974e6fe07f3c47cb1d2 100644 (file)
@@ -670,7 +670,7 @@ static int iproute_get(int argc, char **argv)
        req.r.rtm_tos = 0;
 
        while (argc > 0) {
-               switch (compare_string_array(options, *argv)) {
+               switch (index_in_str_array(options, *argv)) {
                        case 0: /* from */
                        {
                                inet_prefix addr;
@@ -811,14 +811,16 @@ static int iproute_get(int argc, char **argv)
 int do_iproute(int argc, char **argv)
 {
        static const char * const ip_route_commands[] =
-               { "add", "append", "change", "chg", "delete", "del", "get",
+               { "add", "append", "change", "chg", "delete", "get",
                "list", "show", "prepend", "replace", "test", "flush", 0 };
-       int command_num = 7;
+       int command_num = 6;
        unsigned int flags = 0;
        int cmd = RTM_NEWROUTE;
 
+       /* "Standard" 'ip r a' treats 'a' as 'add', not 'append' */
+       /* It probably means that it is using "first match" rule */
        if (*argv) {
-               command_num = compare_string_array(ip_route_commands, *argv);
+               command_num = index_in_substr_array(ip_route_commands, *argv);
        }
        switch (command_num) {
                case 0: /* add*/
index 552f4bf77494feb77a82d75c19d48d2c64eb173d..f92179c40e03b6430eb7420d2fbbf7083e422ef0 100644 (file)
@@ -263,10 +263,7 @@ int matches(char *cmd, char *pattern)
 {
        int len = strlen(cmd);
 
-       if (len > strlen(pattern)) {
-               return -1;
-       }
-       return memcmp(pattern, cmd, len);
+       return strncmp(pattern, cmd, len);
 }
 
 int inet_addr_match(inet_prefix * a, inet_prefix * b, int bits)
index a9464baeee2f222fa4b90d8d59694eb7319e96b6..4069416d9ced7c39a4670a49f9649bd6048a91f4 100644 (file)
@@ -898,7 +898,7 @@ static int nfsmount(struct mntent *mp, int vfsflags, char *filteropts)
                        };
                        int val = xatoi_u(opteq + 1);
                        *opteq = '\0';
-                       switch (compare_string_array(options, opt)) {
+                       switch (index_in_str_array(options, opt)) {
                        case 0: // "rsize"
                                data.rsize = val;
                                break;
@@ -940,7 +940,7 @@ static int nfsmount(struct mntent *mp, int vfsflags, char *filteropts)
                                break;
                        case 12: // "mounthost"
                                mounthost = xstrndup(opteq+1,
-                                                 strcspn(opteq+1," \t\n\r,"));
+                                               strcspn(opteq+1," \t\n\r,"));
                                break;
                        case 13: // "mountprog"
                                mountprog = val;
@@ -996,7 +996,7 @@ static int nfsmount(struct mntent *mp, int vfsflags, char *filteropts)
                                val = 0;
                                opt += 2;
                        }
-                       switch (compare_string_array(options, opt)) {
+                       switch (index_in_str_array(options, opt)) {
                        case 0: // "bg"
                                bg = val;
                                break;