return len;
 }
 
+/** Compare a string with a partial one of a given length. */
+static int
+strcmp_partial(const char *full, const char *partial, size_t partial_len)
+{
+       int r = strncmp(full, partial, partial_len);
+
+       if (r)
+               return r;
+       if (strlen(full) <= partial_len)
+               return 0;
+       return full[partial_len];
+}
+
 /**
  * Parse a prefix length and generate a bit-mask.
  *
        (void)ctx;
        (void)buf;
        (void)size;
-       if (strncmp(str, token->name, len))
+       if (strcmp_partial(token->name, str, len))
                return -1;
        return len;
 }
        if (ctx->curr != ACTION_RSS_QUEUE)
                return -1;
        i = ctx->objdata >> 16;
-       if (!strncmp(str, "end", len)) {
+       if (!strcmp_partial("end", str, len)) {
                ctx->objdata &= 0xffff;
                return len;
        }
                const struct parse_action_priv *priv;
 
                token = &token_list[next_action[i]];
-               if (strncmp(token->name, str, len))
+               if (strcmp_partial(token->name, str, len))
                        continue;
                priv = token->priv;
                if (!priv)
        if (!arg)
                return -1;
        for (i = 0; boolean_name[i]; ++i)
-               if (!strncmp(str, boolean_name[i], len))
+               if (!strcmp_partial(boolean_name[i], str, len))
                        break;
        /* Process token as integer. */
        if (boolean_name[i])