RDMA: switch from 'pci_' to 'dma_' API
[linux-2.6-microblaze.git] / lib / test-string_helpers.c
index 10360d4..2185d71 100644 (file)
@@ -19,7 +19,7 @@ static __init bool test_string_check_buf(const char *name, unsigned int flags,
        if (q_real == q_test && !memcmp(out_test, out_real, q_test))
                return true;
 
-       pr_warn("Test '%s' failed: flags = %u\n", name, flags);
+       pr_warn("Test '%s' failed: flags = %#x\n", name, flags);
 
        print_hex_dump(KERN_WARNING, "Input: ", DUMP_PREFIX_NONE, 16, 1,
                       in, p, true);
@@ -136,7 +136,7 @@ static const struct test_string_2 escape0[] __initconst = {{
                .flags = ESCAPE_SPACE | ESCAPE_HEX,
        },{
                /* terminator */
-       }},
+       }}
 },{
        .in = "\\h\\\"\a\e\\",
        .s1 = {{
@@ -150,7 +150,7 @@ static const struct test_string_2 escape0[] __initconst = {{
                .flags = ESCAPE_SPECIAL | ESCAPE_HEX,
        },{
                /* terminator */
-       }},
+       }}
 },{
        .in = "\eb \\C\007\"\x90\r]",
        .s1 = {{
@@ -201,12 +201,26 @@ static const struct test_string_2 escape0[] __initconst = {{
                .flags = ESCAPE_NP | ESCAPE_HEX,
        },{
                /* terminator */
-       }},
+       }}
+},{
+       .in = "\007 \eb\"\x90\xCF\r",
+       .s1 = {{
+               .out = "\007 \eb\"\\220\\317\r",
+               .flags = ESCAPE_OCTAL | ESCAPE_NA,
+       },{
+               .out = "\007 \eb\"\\x90\\xcf\r",
+               .flags = ESCAPE_HEX | ESCAPE_NA,
+       },{
+               .out = "\007 \eb\"\x90\xCF\r",
+               .flags = ESCAPE_NA,
+       },{
+               /* terminator */
+       }}
 },{
        /* terminator */
 }};
 
-#define        TEST_STRING_2_DICT_1            "b\\ \t\r"
+#define        TEST_STRING_2_DICT_1            "b\\ \t\r\xCF"
 static const struct test_string_2 escape1[] __initconst = {{
        .in = "\f\\ \n\r\t\v",
        .s1 = {{
@@ -215,17 +229,41 @@ static const struct test_string_2 escape1[] __initconst = {{
        },{
                .out = "\f\\x5c\\x20\n\\x0d\\x09\v",
                .flags = ESCAPE_HEX,
+       },{
+               .out = "\f\\134\\040\n\\015\\011\v",
+               .flags = ESCAPE_ANY | ESCAPE_APPEND,
+       },{
+               .out = "\\014\\134\\040\\012\\015\\011\\013",
+               .flags = ESCAPE_OCTAL | ESCAPE_APPEND | ESCAPE_NAP,
+       },{
+               .out = "\\x0c\\x5c\\x20\\x0a\\x0d\\x09\\x0b",
+               .flags = ESCAPE_HEX | ESCAPE_APPEND | ESCAPE_NAP,
+       },{
+               .out = "\f\\134\\040\n\\015\\011\v",
+               .flags = ESCAPE_OCTAL | ESCAPE_APPEND | ESCAPE_NA,
+       },{
+               .out = "\f\\x5c\\x20\n\\x0d\\x09\v",
+               .flags = ESCAPE_HEX | ESCAPE_APPEND | ESCAPE_NA,
        },{
                /* terminator */
-       }},
+       }}
 },{
-       .in = "\\h\\\"\a\e\\",
+       .in = "\\h\\\"\a\xCF\e\\",
        .s1 = {{
-               .out = "\\134h\\134\"\a\e\\134",
+               .out = "\\134h\\134\"\a\\317\e\\134",
                .flags = ESCAPE_OCTAL,
+       },{
+               .out = "\\134h\\134\"\a\\317\e\\134",
+               .flags = ESCAPE_ANY | ESCAPE_APPEND,
+       },{
+               .out = "\\134h\\134\"\\007\\317\\033\\134",
+               .flags = ESCAPE_OCTAL | ESCAPE_APPEND | ESCAPE_NAP,
+       },{
+               .out = "\\134h\\134\"\a\\317\e\\134",
+               .flags = ESCAPE_OCTAL | ESCAPE_APPEND | ESCAPE_NA,
        },{
                /* terminator */
-       }},
+       }}
 },{
        .in = "\eb \\C\007\"\x90\r]",
        .s1 = {{
@@ -233,7 +271,89 @@ static const struct test_string_2 escape1[] __initconst = {{
                .flags = ESCAPE_OCTAL,
        },{
                /* terminator */
-       }},
+       }}
+},{
+       .in = "\007 \eb\"\x90\xCF\r",
+       .s1 = {{
+               .out = "\007 \eb\"\x90\xCF\r",
+               .flags = ESCAPE_NA,
+       },{
+               .out = "\007 \eb\"\x90\xCF\r",
+               .flags = ESCAPE_SPACE | ESCAPE_NA,
+       },{
+               .out = "\007 \eb\"\x90\xCF\r",
+               .flags = ESCAPE_SPECIAL | ESCAPE_NA,
+       },{
+               .out = "\007 \eb\"\x90\xCF\r",
+               .flags = ESCAPE_SPACE | ESCAPE_SPECIAL | ESCAPE_NA,
+       },{
+               .out = "\007 \eb\"\x90\\317\r",
+               .flags = ESCAPE_OCTAL | ESCAPE_NA,
+       },{
+               .out = "\007 \eb\"\x90\\317\r",
+               .flags = ESCAPE_SPACE | ESCAPE_OCTAL | ESCAPE_NA,
+       },{
+               .out = "\007 \eb\"\x90\\317\r",
+               .flags = ESCAPE_SPECIAL | ESCAPE_OCTAL | ESCAPE_NA,
+       },{
+               .out = "\007 \eb\"\x90\\317\r",
+               .flags = ESCAPE_ANY | ESCAPE_NA,
+       },{
+               .out = "\007 \eb\"\x90\\xcf\r",
+               .flags = ESCAPE_HEX | ESCAPE_NA,
+       },{
+               .out = "\007 \eb\"\x90\\xcf\r",
+               .flags = ESCAPE_SPACE | ESCAPE_HEX | ESCAPE_NA,
+       },{
+               .out = "\007 \eb\"\x90\\xcf\r",
+               .flags = ESCAPE_SPECIAL | ESCAPE_HEX | ESCAPE_NA,
+       },{
+               .out = "\007 \eb\"\x90\\xcf\r",
+               .flags = ESCAPE_SPACE | ESCAPE_SPECIAL | ESCAPE_HEX | ESCAPE_NA,
+       },{
+               /* terminator */
+       }}
+},{
+       .in = "\007 \eb\"\x90\xCF\r",
+       .s1 = {{
+               .out = "\007 \eb\"\x90\xCF\r",
+               .flags = ESCAPE_NAP,
+       },{
+               .out = "\007 \eb\"\x90\xCF\\r",
+               .flags = ESCAPE_SPACE | ESCAPE_NAP,
+       },{
+               .out = "\007 \eb\"\x90\xCF\r",
+               .flags = ESCAPE_SPECIAL | ESCAPE_NAP,
+       },{
+               .out = "\007 \eb\"\x90\xCF\\r",
+               .flags = ESCAPE_SPACE | ESCAPE_SPECIAL | ESCAPE_NAP,
+       },{
+               .out = "\007 \eb\"\x90\\317\\015",
+               .flags = ESCAPE_OCTAL | ESCAPE_NAP,
+       },{
+               .out = "\007 \eb\"\x90\\317\\r",
+               .flags = ESCAPE_SPACE | ESCAPE_OCTAL | ESCAPE_NAP,
+       },{
+               .out = "\007 \eb\"\x90\\317\\015",
+               .flags = ESCAPE_SPECIAL | ESCAPE_OCTAL | ESCAPE_NAP,
+       },{
+               .out = "\007 \eb\"\x90\\317\r",
+               .flags = ESCAPE_ANY | ESCAPE_NAP,
+       },{
+               .out = "\007 \eb\"\x90\\xcf\\x0d",
+               .flags = ESCAPE_HEX | ESCAPE_NAP,
+       },{
+               .out = "\007 \eb\"\x90\\xcf\\r",
+               .flags = ESCAPE_SPACE | ESCAPE_HEX | ESCAPE_NAP,
+       },{
+               .out = "\007 \eb\"\x90\\xcf\\x0d",
+               .flags = ESCAPE_SPECIAL | ESCAPE_HEX | ESCAPE_NAP,
+       },{
+               .out = "\007 \eb\"\x90\\xcf\\r",
+               .flags = ESCAPE_SPACE | ESCAPE_SPECIAL | ESCAPE_HEX | ESCAPE_NAP,
+       },{
+               /* terminator */
+       }}
 },{
        /* terminator */
 }};
@@ -290,7 +410,7 @@ test_string_escape_overflow(const char *in, int p, unsigned int flags, const cha
 
        q_real = string_escape_mem(in, p, NULL, 0, flags, esc);
        if (q_real != q_test)
-               pr_warn("Test '%s' failed: flags = %u, osz = 0, expected %d, got %d\n",
+               pr_warn("Test '%s' failed: flags = %#x, osz = 0, expected %d, got %d\n",
                        name, flags, q_test, q_real);
 }
 
@@ -315,8 +435,13 @@ static __init void test_string_escape(const char *name,
                /* NULL injection */
                if (flags & ESCAPE_NULL) {
                        in[p++] = '\0';
-                       out_test[q_test++] = '\\';
-                       out_test[q_test++] = '0';
+                       /* '\0' passes isascii() test */
+                       if (flags & ESCAPE_NA && !(flags & ESCAPE_APPEND && esc)) {
+                               out_test[q_test++] = '\0';
+                       } else {
+                               out_test[q_test++] = '\\';
+                               out_test[q_test++] = '0';
+                       }
                }
 
                /* Don't try strings that have no output */
@@ -459,17 +584,17 @@ static int __init test_string_helpers_init(void)
        unsigned int i;
 
        pr_info("Running tests...\n");
-       for (i = 0; i < UNESCAPE_ANY + 1; i++)
+       for (i = 0; i < UNESCAPE_ALL_MASK + 1; i++)
                test_string_unescape("unescape", i, false);
        test_string_unescape("unescape inplace",
                             get_random_int() % (UNESCAPE_ANY + 1), true);
 
        /* Without dictionary */
-       for (i = 0; i < (ESCAPE_ANY_NP | ESCAPE_HEX) + 1; i++)
+       for (i = 0; i < ESCAPE_ALL_MASK + 1; i++)
                test_string_escape("escape 0", escape0, i, TEST_STRING_2_DICT_0);
 
        /* With dictionary */
-       for (i = 0; i < (ESCAPE_ANY_NP | ESCAPE_HEX) + 1; i++)
+       for (i = 0; i < ESCAPE_ALL_MASK + 1; i++)
                test_string_escape("escape 1", escape1, i, TEST_STRING_2_DICT_1);
 
        /* Test string_get_size() */