gigaset: convert strcmp chain to table lookup
authorTilman Schmidt <tilman@imap.cc>
Sun, 25 Oct 2009 09:30:57 +0000 (09:30 +0000)
committerDavid S. Miller <davem@davemloft.net>
Thu, 29 Oct 2009 08:37:18 +0000 (01:37 -0700)
Replace the sequence of strcmp calls for interpreting ZSAU parameter
strings by a table of known strings and lookup loop to improve
readability.

Impact: readability improvement, no functional change
Signed-off-by: Tilman Schmidt <tilman@imap.cc>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/isdn/gigaset/ev-layer.c
drivers/isdn/gigaset/gigaset.h

index a9a397519bac508cdba88d10bf35c9dd95a492c5..ddeb0456d20285cda06e205b76a515630fb2eecf 100644 (file)
@@ -374,7 +374,11 @@ struct reply_t gigaset_tab_cid[] =
 };
 
 
-static const struct resp_type_t resp_type[] =
+static const struct resp_type_t {
+       unsigned char   *response;
+       int             resp_code;
+       int             type;
+} resp_type[] =
 {
        {"OK",          RSP_OK,         RT_NOTHING},
        {"ERROR",       RSP_ERROR,      RT_NOTHING},
@@ -402,6 +406,20 @@ static const struct resp_type_t resp_type[] =
        {NULL,          0,              0}
 };
 
+static const struct zsau_resp_t {
+       unsigned char   *str;
+       int             code;
+} zsau_resp[] =
+{
+       {"OUTGOING_CALL_PROCEEDING",    ZSAU_OUTGOING_CALL_PROCEEDING},
+       {"CALL_DELIVERED",              ZSAU_CALL_DELIVERED},
+       {"ACTIVE",                      ZSAU_ACTIVE},
+       {"DISCONNECT_IND",              ZSAU_DISCONNECT_IND},
+       {"NULL",                        ZSAU_NULL},
+       {"DISCONNECT_REQ",              ZSAU_DISCONNECT_REQ},
+       {NULL,                          ZSAU_UNKNOWN}
+};
+
 /*
  * Get integer from char-pointer
  */
@@ -480,6 +498,7 @@ void gigaset_handle_modem_response(struct cardstate *cs)
        int params;
        int i, j;
        const struct resp_type_t *rt;
+       const struct zsau_resp_t *zr;
        int curarg;
        unsigned long flags;
        unsigned next, tail, head;
@@ -606,25 +625,14 @@ void gigaset_handle_modem_response(struct cardstate *cs)
                                event->parameter = ZSAU_NONE;
                                break;
                        }
-                       if (!strcmp(argv[curarg], "OUTGOING_CALL_PROCEEDING"))
-                               event->parameter =
-                                       ZSAU_OUTGOING_CALL_PROCEEDING;
-                       else if (!strcmp(argv[curarg], "CALL_DELIVERED"))
-                               event->parameter = ZSAU_CALL_DELIVERED;
-                       else if (!strcmp(argv[curarg], "ACTIVE"))
-                               event->parameter = ZSAU_ACTIVE;
-                       else if (!strcmp(argv[curarg], "DISCONNECT_IND"))
-                               event->parameter = ZSAU_DISCONNECT_IND;
-                       else if (!strcmp(argv[curarg], "NULL"))
-                               event->parameter = ZSAU_NULL;
-                       else if (!strcmp(argv[curarg], "DISCONNECT_REQ"))
-                               event->parameter = ZSAU_DISCONNECT_REQ;
-                       else {
-                               event->parameter = ZSAU_UNKNOWN;
+                       for (zr = zsau_resp; zr->str; ++zr)
+                               if (!strcmp(argv[curarg], zr->str))
+                                       break;
+                       event->parameter = zr->code;
+                       if (!zr->str)
                                dev_warn(cs->dev,
                                        "%s: unknown parameter %s after ZSAU\n",
                                         __func__, argv[curarg]);
-                       }
                        ++curarg;
                        break;
                case RT_STRING:
index 3c74cd1640193c7d4d7717123b703027bcd46445..e963a6c2e86d85c8b9beddb38d4b7efc556e22ff 100644 (file)
@@ -357,12 +357,6 @@ struct at_state_t {
        struct bc_state         *bcs;
 };
 
-struct resp_type_t {
-       unsigned char   *response;
-       int             resp_code;      /* RSP_XXXX */
-       int             type;           /* RT_XXXX */
-};
-
 struct event_t {
        int type;
        void *ptr, *arg;