]> sigrok.org Git - libsigrok.git/commitdiff
input: vcd: avoid needless copying
authorWolfram Sang <redacted>
Sat, 9 Jan 2016 07:17:57 +0000 (08:17 +0100)
committerUwe Hermann <redacted>
Thu, 28 Jan 2016 18:03:53 +0000 (19:03 +0100)
Current code moves the identifier string one byte to the front to
overwrite the bit value, so 'tokens[i]' is a string to compare against
the desired value. This copying is unnecessary, just pass a properly
setup pointer.

Signed-off-by: Wolfram Sang <redacted>
src/input/vcd.c

index 6f84f659c05b32ef3252871413859ccfb1cc7d92..88e17f8b8ba4fb23c622edd81574d18fea64d8d5 100644 (file)
@@ -415,6 +415,8 @@ static void parse_contents(const struct sr_input *in, char *data)
                                /* Process next token */
                                continue;
                } else if (strchr("01xXzZ", tokens[i][0]) != NULL) {
+                       char *identifier;
+
                        /* A new 1-bit sample value */
                        bit = (tokens[i][0] == '1');
 
@@ -427,15 +429,14 @@ static void parse_contents(const struct sr_input *in, char *data)
                                        sr_dbg("Identifier missing!");
                                        break;
                                }
+                               identifier = tokens[i];
                        } else {
-                               for (j = 1; tokens[i][j]; j++)
-                                       tokens[i][j - 1] = tokens[i][j];
-                               tokens[i][j - 1] = '\0';
+                               identifier = tokens[i] + 1;
                        }
 
                        for (j = 0, l = inc->channels; j < inc->channelcount && l; j++, l = l->next) {
                                vcd_ch = l->data;
-                               if (g_strcmp0(tokens[i], vcd_ch->identifier) == 0) {
+                               if (g_strcmp0(identifier, vcd_ch->identifier) == 0) {
                                        /* Found our channel */
                                        size_t byte_idx = (j / 8);
                                        size_t bit_idx = j - 8 * byte_idx;
@@ -447,7 +448,7 @@ static void parse_contents(const struct sr_input *in, char *data)
                                }
                        }
                        if (j == inc->channelcount)
-                               sr_dbg("Did not find channel for identifier '%s'.", tokens[i]);
+                               sr_dbg("Did not find channel for identifier '%s'.", identifier);
                } else {
                        sr_warn("Skipping unknown token '%s'.", tokens[i]);
                }