]> git.sesse.net Git - ffmpeg/blobdiff - libavformat/tests/url.c
avformat/url: add ff_make_absolulte_url2 to be able to test windows path cases
[ffmpeg] / libavformat / tests / url.c
index 2eb597bb5efd42af2fe7ff87418ddbf389e58a4b..8644a3e8267d3a5a1134b17af6ddac02cf5d064f 100644 (file)
@@ -18,6 +18,7 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
+#include "config.h"
 #include "libavformat/url.h"
 #include "libavformat/avformat.h"
 
@@ -48,19 +49,30 @@ static void test_decompose(const char *url)
 
 static void test(const char *base, const char *rel)
 {
-    char buf[200], buf2[200];
+    char buf[200], buf2[200], buf_dos[200], buf_native[200];
     int ret;
 
-    ret = ff_make_absolute_url(buf, sizeof(buf), base, rel);
+    ret = ff_make_absolute_url2(buf, sizeof(buf), base, rel, 0);
     if (ret < 0) {
         printf("%50s %-20s => error %s\n", base, rel, av_err2str(ret));
         return;
     }
     printf("%50s %-20s => %s\n", base, rel, buf);
+    ret = ff_make_absolute_url2(buf_dos, sizeof(buf_dos), base, rel, 1);
+    if (ret < 0)
+        snprintf(buf_dos, sizeof(buf_dos), "error %s", av_err2str(ret));
+    ret = ff_make_absolute_url(buf_native, sizeof(buf_native), base, rel);
+    if (ret < 0)
+        snprintf(buf_native, sizeof(buf_native), "error %s", av_err2str(ret));
+    if (strcmp(buf, buf_dos))
+        printf("%50s %-20sDOS %s\n", base, rel, buf_dos);
+    if (HAVE_DOS_PATHS && strcmp(buf_dos, buf_native) ||
+        !HAVE_DOS_PATHS && strcmp(buf, buf_native))
+        printf("Native mismatch\n");
     if (base) {
         /* Test in-buffer replacement */
         snprintf(buf2, sizeof(buf2), "%s", base);
-        ff_make_absolute_url(buf2, sizeof(buf2), buf2, rel);
+        ff_make_absolute_url2(buf2, sizeof(buf2), buf2, rel, 0);
         if (strcmp(buf, buf2)) {
             printf("In-place handling of %s + %s failed\n", base, rel);
             exit(1);
@@ -121,6 +133,21 @@ int main(void)
     test("http://server/foo/bar", "..doubledotfile");
     test("http://server/foo/bar", "double..dotfile");
     test("http://server/foo/bar", "doubledotfile..");
+    test("file1", "file2");
+    test("dir/file1", "file2");
+    test("dir/file1", "../file2");
+    test("dir\\file1", "file2");
+    test("\\\\srv\\shr\\file", "..\\..\\dummy");
+    test("\\\\srv\\shr\\file", "dummy");
+    test("\\\\srv\\shr\\file", "\\\\srv2\\shr2\\file2");
+    test("\\\\srv\\shr\\file", "d:/file");
+    test("C:\\dir\\a", "..\\file");
+    test("C:\\dir\\a", "\\\\srv\\shr\\file");
+    test("C:\\dir\\a", "d:\\file");
+    test("http://a/b", "\\\\srv\\shr\\file");
+    test("http://a/b", "//srv/shr/file");
+    test("http://a/b", "d:\\file");
+    test("http://a/b", "C:/file");
 
     /* From https://tools.ietf.org/html/rfc3986#section-5.4 */
     test("http://a/b/c/d;p?q", "g:h");           // g:h