+ string = silc_strdup("foobar");
+ SILC_LOG_DEBUG(("Replace %s", string));
+ silc_buffer_set(&bmatch, string, strlen(string));
+ if (!silc_subst(&bmatch, "s/foo/bar/"))
+ goto err;
+ silc_buffer_printf(&bmatch, TRUE);
+ if (!silc_buffer_memcmp(&bmatch, "barbar", 6))
+ goto err;
+ silc_buffer_purge(&bmatch);
+
+ string = silc_strdup("foobar foobar");
+ SILC_LOG_DEBUG(("Replace %s", string));
+ silc_buffer_set(&bmatch, string, strlen(string));
+ if (!silc_subst(&bmatch, "s/foo/bar/g"))
+ goto err;
+ silc_buffer_printf(&bmatch, TRUE);
+ if (!silc_buffer_memcmp(&bmatch, "barbar barbar", 13))
+ goto err;
+ silc_buffer_purge(&bmatch);
+
+ string = silc_strdup("foobar foobar");
+ SILC_LOG_DEBUG(("Replace %s", string));
+ silc_buffer_set(&bmatch, string, strlen(string));
+ if (!silc_subst(&bmatch, "s/foo/bar/"))
+ goto err;
+ silc_buffer_printf(&bmatch, TRUE);
+ if (!silc_buffer_memcmp(&bmatch, "barbar foobar", 13))
+ goto err;
+ silc_buffer_purge(&bmatch);
+
+ string = silc_strdup("foobar\nfoobar foobar\nfoobar");
+ SILC_LOG_DEBUG(("Replace %s", string));
+ silc_buffer_set(&bmatch, string, strlen(string));
+ if (!silc_subst(&bmatch, "s/foo/BARBAR/g"))
+ goto err;
+ silc_buffer_printf(&bmatch, TRUE);
+ if (!silc_buffer_memcmp(&bmatch, "BARBARbar\nBARBARbar BARBARbar\nBARBARbar",
+ 39))
+ goto err;
+ silc_buffer_purge(&bmatch);
+
+ string = silc_strdup("foobar\nfoobar foobar\nfoobar");
+ SILC_LOG_DEBUG(("Replace %s", string));
+ silc_buffer_set(&bmatch, string, strlen(string));
+ if (!silc_subst(&bmatch, "s/foo/BARBAR/"))
+ goto err;
+ silc_buffer_printf(&bmatch, TRUE);
+ if (!silc_buffer_memcmp(&bmatch, "BARBARbar\nBARBARbar foobar\nBARBARbar",
+ 36))
+ goto err;
+ silc_buffer_purge(&bmatch);
+
+ string = silc_strdup("foobar\nfoobar foobar\nfoobar");
+ SILC_LOG_DEBUG(("Replace %s", string));
+ silc_buffer_set(&bmatch, string, strlen(string));
+ if (!silc_subst(&bmatch, "s/foo//"))
+ goto err;
+ silc_buffer_printf(&bmatch, TRUE);
+ if (!silc_buffer_memcmp(&bmatch, "bar\nbar foobar\nbar",
+ 18))
+ goto err;
+ silc_buffer_purge(&bmatch);
+
+ string = silc_strdup("foobar\nfoobar foobar\nfoobar");
+ SILC_LOG_DEBUG(("Replace %s", string));
+ silc_buffer_set(&bmatch, string, strlen(string));
+ if (!silc_subst(&bmatch, "s/foo/B/g"))
+ goto err;
+ silc_buffer_printf(&bmatch, TRUE);
+ if (!silc_buffer_memcmp(&bmatch, "Bbar\nBbar Bbar\nBbar",
+ 19))
+ goto err;
+ silc_buffer_purge(&bmatch);
+
+ string = silc_strdup("foobar\nfoobar foobar\nfoobar");
+ SILC_LOG_DEBUG(("Replace %s", string));
+ silc_buffer_set(&bmatch, string, strlen(string));
+ if (!silc_subst(&bmatch, "s/foo/B/"))
+ goto err;
+ silc_buffer_printf(&bmatch, TRUE);
+ if (!silc_buffer_memcmp(&bmatch, "Bbar\nBbar foobar\nBbar",
+ 21))
+ goto err;
+ silc_buffer_purge(&bmatch);
+
+ string = silc_strdup("foobar\nBfoobar foobar\nBfoobar\nfoo");
+ SILC_LOG_DEBUG(("Replace %s", string));
+ silc_buffer_set(&bmatch, string, strlen(string));
+ if (!silc_subst(&bmatch, "/^B/s/foo/B/g"))
+ goto err;
+ silc_buffer_printf(&bmatch, TRUE);
+ if (!silc_buffer_memcmp(&bmatch, "foobar\nBBbar Bbar\nBBbar\nfoo",
+ 27))
+ goto err;
+ silc_buffer_purge(&bmatch);
+
+ string = silc_strdup("foobar\nfoobar baz foobar\nbazfoobar\nfoo");
+ SILC_LOG_DEBUG(("Replace %s", string));
+ silc_buffer_set(&bmatch, string, strlen(string));
+ if (!silc_subst(&bmatch, "/baz/s/foo/BARBAR/g"))
+ goto err;
+ silc_buffer_printf(&bmatch, TRUE);
+ if (!silc_buffer_memcmp(&bmatch,
+ "foobar\nBARBARbar baz BARBARbar\nbazBARBARbar\nfoo",
+ 47))
+ goto err;
+ silc_buffer_purge(&bmatch);
+
+ string = silc_strdup("foobar\nfoobar baz foobar\nbazfoobar\nfoo");
+ SILC_LOG_DEBUG(("Replace %s", string));
+ silc_buffer_set(&bmatch, string, strlen(string));
+ if (!silc_subst(&bmatch, "/baz/s/foo/BARBAR/"))
+ goto err;
+ silc_buffer_printf(&bmatch, TRUE);
+ if (!silc_buffer_memcmp(&bmatch,
+ "foobar\nBARBARbar baz foobar\nbazBARBARbar\nfoo",
+ 44))
+ goto err;
+ silc_buffer_purge(&bmatch);
+
+ string = silc_strdup("foobar\nfoobar baz foobar\nbazfoobar\nfoo");
+ SILC_LOG_DEBUG(("Replace %s", string));
+ silc_buffer_set(&bmatch, string, strlen(string));
+ if (!silc_subst(&bmatch, "/baz/!s/foo/BARBAR/"))
+ goto err;
+ silc_buffer_printf(&bmatch, TRUE);
+ if (!silc_buffer_memcmp(&bmatch,
+ "BARBARbar\nfoobar baz foobar\nbazfoobar\nBARBAR",
+ 44))
+ goto err;
+ silc_buffer_purge(&bmatch);
+
+ string = silc_strdup("foobar\nfoobar baz foobar\nbazfoobar\nfoo");
+ SILC_LOG_DEBUG(("Replace %s", string));
+ silc_buffer_set(&bmatch, string, strlen(string));
+ if (!silc_subst(&bmatch, "2s/foo/BARBAR/"))
+ goto err;
+ silc_buffer_printf(&bmatch, TRUE);
+ if (!silc_buffer_memcmp(&bmatch,
+ "foobar\nBARBARbar baz foobar\nbazfoobar\nfoo",
+ 41))
+ goto err;
+ silc_buffer_purge(&bmatch);
+
+ string = silc_strdup("foobar\nfoobar baz foobar\nbazfoobar\nfoo");
+ SILC_LOG_DEBUG(("Replace %s", string));
+ silc_buffer_set(&bmatch, string, strlen(string));
+ if (!silc_subst(&bmatch, "2s/foo/BARBAR/g"))
+ goto err;
+ silc_buffer_printf(&bmatch, TRUE);
+ if (!silc_buffer_memcmp(&bmatch,
+ "foobar\nBARBARbar baz BARBARbar\nbazfoobar\nfoo",
+ 44))
+ goto err;
+ silc_buffer_purge(&bmatch);
+
+ string = silc_strdup("foobar\nfoobar baz foobar\nbazfoobar\nfoo");
+ SILC_LOG_DEBUG(("Replace %s", string));
+ silc_buffer_set(&bmatch, string, strlen(string));
+ if (!silc_subst(&bmatch, "200s/foo/BARBAR/g"))
+ goto err;
+ silc_buffer_printf(&bmatch, TRUE);
+ if (!silc_buffer_memcmp(&bmatch,
+ "foobar\nfoobar baz foobar\nbazfoobar\nfoo",
+ 38))
+ goto err;
+ silc_buffer_purge(&bmatch);
+
+ string = silc_strdup("foobar\nfoobar baz foobar\nbazfoobar\nfoo");
+ SILC_LOG_DEBUG(("Replace %s", string));
+ silc_buffer_set(&bmatch, string, strlen(string));
+ if (!silc_subst(&bmatch, "2!s/foo/BARBAR/g"))
+ goto err;
+ silc_buffer_printf(&bmatch, TRUE);
+ if (!silc_buffer_memcmp(&bmatch,
+ "BARBARbar\nfoobar baz foobar\nbazBARBARbar\nBARBAR",
+ 47))
+ goto err;
+ silc_buffer_purge(&bmatch);
+
+ string = silc_strdup("foobar\nfoobar baz foobar\nbazfoobar\nfoo");
+ SILC_LOG_DEBUG(("Replace %s", string));
+ silc_buffer_set(&bmatch, string, strlen(string));
+ if (!silc_subst(&bmatch, "/xxx/s/foo/BARBAR/g"))
+ goto err;
+ silc_buffer_printf(&bmatch, TRUE);
+ if (!silc_buffer_memcmp(&bmatch,
+ "foobar\nfoobar baz foobar\nbazfoobar\nfoo",
+ 38))
+ goto err;
+ silc_buffer_purge(&bmatch);
+
+ string = silc_strdup("foobar\nfoobar baz foobar\nbazfoobar\nfoo");
+ SILC_LOG_DEBUG(("Replace %s", string));
+ silc_buffer_set(&bmatch, string, strlen(string));
+ if (!silc_subst(&bmatch, "!s/foo/BARBAR/g"))
+ goto err;
+ silc_buffer_printf(&bmatch, TRUE);
+ if (!silc_buffer_memcmp(&bmatch,
+ "foobar\nfoobar baz foobar\nbazfoobar\nfoo",
+ 38))
+ goto err;
+ silc_buffer_purge(&bmatch);
+
+ string = silc_strdup("foobar\nfoobar baz foobar\nbazfoobar\nfoo");
+ SILC_LOG_DEBUG(("Replace %s", string));
+ silc_buffer_set(&bmatch, string, strlen(string));
+ if (!silc_subst(&bmatch, "$s/foo/BARBAR/g"))
+ goto err;
+ silc_buffer_printf(&bmatch, TRUE);
+ if (!silc_buffer_memcmp(&bmatch,
+ "foobar\nfoobar baz foobar\nbazfoobar\nBARBAR",
+ 41))
+ goto err;
+ silc_buffer_purge(&bmatch);
+
+ string = silc_strdup("foobar\nfoobar baz foobar\nbazfoobar\nfoo");
+ SILC_LOG_DEBUG(("Replace %s", string));
+ silc_buffer_set(&bmatch, string, strlen(string));
+ if (!silc_subst(&bmatch, "$!s/foo/BARBAR/g"))
+ goto err;
+ silc_buffer_printf(&bmatch, TRUE);
+ if (!silc_buffer_memcmp(&bmatch,
+ "BARBARbar\nBARBARbar baz BARBARbar\nbazBARBARbar\nfoo",
+ 50))
+ goto err;
+ silc_buffer_purge(&bmatch);
+
+ string = silc_strdup("foobar\nfoobar /baz/ foobar\nbazfoobar\nfoo");
+ SILC_LOG_DEBUG(("Replace %s", string));
+ silc_buffer_set(&bmatch, string, strlen(string));
+ if (!silc_subst(&bmatch, "s/\\//BARBAR/g"))
+ goto err;
+ silc_buffer_printf(&bmatch, TRUE);
+ if (!silc_buffer_memcmp(&bmatch,
+ "foobar\nfoobar BARBARbazBARBAR foobar\nbazfoobar\nfoo",
+ 50))
+ goto err;
+ silc_buffer_purge(&bmatch);
+
+ string = silc_strdup("foobar\nfoobar /baz/ foobar\nbazfoobar\nfoo");
+ SILC_LOG_DEBUG(("Replace %s", string));
+ silc_buffer_set(&bmatch, string, strlen(string));
+ if (!silc_subst(&bmatch, "s/\\//\\/\\//g"))
+ goto err;
+ silc_buffer_printf(&bmatch, TRUE);
+ if (!silc_buffer_memcmp(&bmatch,
+ "foobar\nfoobar //baz// foobar\nbazfoobar\nfoo",
+ 42))
+ goto err;
+ silc_buffer_purge(&bmatch);
+
+ regex = ".{5}";
+ SILC_LOG_DEBUG(("Regex %s", regex));
+ string = "abcdefghijklmn";
+ SILC_LOG_DEBUG(("Match %s", string));
+ if (!silc_regex(string, regex, &bmatch, NULL))
+ goto err;
+ silc_buffer_printf(&bmatch, TRUE);
+
+ regex = ".....";
+ SILC_LOG_DEBUG(("Regex %s", regex));
+ string = "abcdefghijklmn";
+ SILC_LOG_DEBUG(("Match %s", string));
+ if (!silc_regex(string, regex, &bmatch, NULL))
+ goto err;
+ silc_buffer_printf(&bmatch, TRUE);
+
+ regex = "^a{0}$";
+ SILC_LOG_DEBUG(("Regex %s", regex));
+ string = "";
+ SILC_LOG_DEBUG(("Match %s", string));
+ if (!silc_regex(string, regex, &bmatch, NULL))
+ goto err;
+ silc_buffer_printf(&bmatch, TRUE);
+
+ regex = "^a{0,}$";
+ SILC_LOG_DEBUG(("Regex %s", regex));
+ string = "bbbb";
+ SILC_LOG_DEBUG(("Match %s", string));
+ if (!silc_regex(string, regex, &bmatch, NULL))
+ goto err;
+ silc_buffer_printf(&bmatch, TRUE);
+
+ regex = "^a{0,}$";
+ SILC_LOG_DEBUG(("Regex %s", regex));
+ string = "aaaaaaaaa";
+ SILC_LOG_DEBUG(("Match %s", string));
+ if (!silc_regex(string, regex, &bmatch, NULL))
+ goto err;
+ silc_buffer_printf(&bmatch, TRUE);
+
+ regex = "^a{0,0}$";
+ SILC_LOG_DEBUG(("Regex %s", regex));
+ string = "a";
+ SILC_LOG_DEBUG(("DO NOT Match %s", string));
+ if (silc_regex(string, regex, &bmatch, NULL))
+ goto err;
+
+ regex = "^a{3}$";
+ SILC_LOG_DEBUG(("Regex %s", regex));
+ string = "aaa";
+ SILC_LOG_DEBUG(("Match %s", string));
+ if (!silc_regex(string, regex, &bmatch, NULL))
+ goto err;
+ silc_buffer_printf(&bmatch, TRUE);
+
+ regex = "^a{3}$";
+ SILC_LOG_DEBUG(("Regex %s", regex));
+ string = "aaaa";
+ SILC_LOG_DEBUG(("DO NOT Match %s", string));
+ if (silc_regex(string, regex, &bmatch, NULL))
+ goto err;
+
+ regex = "^a{3,5}$";
+ SILC_LOG_DEBUG(("Regex %s", regex));
+ string = "aaa";
+ SILC_LOG_DEBUG(("Match %s", string));
+ if (!silc_regex(string, regex, &bmatch, NULL))
+ goto err;
+ silc_buffer_printf(&bmatch, TRUE);
+
+ regex = "^a{3,5}$";
+ SILC_LOG_DEBUG(("Regex %s", regex));
+ string = "aaaa";
+ SILC_LOG_DEBUG(("Match %s", string));
+ if (!silc_regex(string, regex, &bmatch, NULL))
+ goto err;
+ silc_buffer_printf(&bmatch, TRUE);
+
+ regex = "^a{3,5}$";
+ SILC_LOG_DEBUG(("Regex %s", regex));
+ string = "aaaaaa";
+ SILC_LOG_DEBUG(("DO NOT Match %s", string));
+ if (silc_regex(string, regex, &bmatch, NULL))
+ goto err;
+
+ regex = "^a{3,}$";
+ SILC_LOG_DEBUG(("Regex %s", regex));
+ string = "aaa";
+ SILC_LOG_DEBUG(("Match %s", string));
+ if (!silc_regex(string, regex, &bmatch, NULL))
+ goto err;
+ silc_buffer_printf(&bmatch, TRUE);
+
+ regex = "^a{3,}$";
+ SILC_LOG_DEBUG(("Regex %s", regex));
+ string = "aaaaaaaaaaaaa";
+ SILC_LOG_DEBUG(("Match %s", string));
+ if (!silc_regex(string, regex, &bmatch, NULL))
+ goto err;
+ silc_buffer_printf(&bmatch, TRUE);
+
+ regex = "^a{3,}$";
+ SILC_LOG_DEBUG(("Regex %s", regex));
+ string = "aa";
+ SILC_LOG_DEBUG(("DO NOT Match %s", string));
+ if (silc_regex(string, regex, &bmatch, NULL))
+ goto err;
+
+
+ regex = "a*b";
+ SILC_LOG_DEBUG(("Regex %s", regex));
+ string = "b";
+ SILC_LOG_DEBUG(("Match %s", string));
+ if (!silc_regex(string, regex, &bmatch, NULL))
+ goto err;
+ silc_buffer_printf(&bmatch, TRUE);
+
+ regex = "a*b";
+ SILC_LOG_DEBUG(("Regex %s", regex));
+ string = "ab";
+ SILC_LOG_DEBUG(("Match %s", string));
+ if (!silc_regex(string, regex, &bmatch, NULL))
+ goto err;
+ silc_buffer_printf(&bmatch, TRUE);
+
+ regex = "a*b";
+ SILC_LOG_DEBUG(("Regex %s", regex));
+ string = "aaaab";
+ SILC_LOG_DEBUG(("Match %s", string));
+ if (!silc_regex(string, regex, &bmatch, NULL))
+ goto err;
+ silc_buffer_printf(&bmatch, TRUE);
+
+
+ regex = "a+b";
+ SILC_LOG_DEBUG(("Regex %s", regex));
+ string = "ab";
+ SILC_LOG_DEBUG(("Match %s", string));
+ if (!silc_regex(string, regex, &bmatch, NULL))
+ goto err;
+ silc_buffer_printf(&bmatch, TRUE);
+
+ regex = "a+b";
+ SILC_LOG_DEBUG(("Regex %s", regex));
+ string = "aaaab";
+ SILC_LOG_DEBUG(("Match %s", string));
+ if (!silc_regex(string, regex, &bmatch, NULL))
+ goto err;
+ silc_buffer_printf(&bmatch, TRUE);
+
+ regex = "a+b";
+ SILC_LOG_DEBUG(("Regex %s", regex));
+ string = "b";
+ SILC_LOG_DEBUG(("DO NOT Match %s", string));
+ if (silc_regex(string, regex, &bmatch, NULL))
+ goto err;
+
+
+ regex = "ca?b";
+ SILC_LOG_DEBUG(("Regex %s", regex));
+ string = "cb";
+ SILC_LOG_DEBUG(("Match %s", string));
+ if (!silc_regex(string, regex, &bmatch, NULL))
+ goto err;
+ silc_buffer_printf(&bmatch, TRUE);
+
+ regex = "ca?b";
+ SILC_LOG_DEBUG(("Regex %s", regex));
+ string = "cab";
+ SILC_LOG_DEBUG(("Match %s", string));
+ if (!silc_regex(string, regex, &bmatch, NULL))
+ goto err;
+ silc_buffer_printf(&bmatch, TRUE);
+
+ regex = "ca?b";
+ SILC_LOG_DEBUG(("Regex %s", regex));
+ string = "caab";
+ SILC_LOG_DEBUG(("DO NOT Match %s", string));
+ if (silc_regex(string, regex, &bmatch, NULL))
+ goto err;
+