Go to the documentation of this file.
   36 #define PRINT_COMPONENT(comp) \ 
   37     len = uc.url_component_end_##comp - uc.comp; \ 
   38     if (len) printf("  "#comp": %.*s\n", len, uc.comp); 
   50 static void test(
const char *
base, 
const char *rel)
 
   52     char buf[200], buf2[200], buf_dos[200], buf_native[200];
 
   67     if (strcmp(buf, buf_dos))
 
   68         printf(
"%50s %-20sDOS %s\n", 
base, rel, buf_dos);
 
   69     if (HAVE_DOS_PATHS && strcmp(buf_dos, buf_native) ||
 
   70         !HAVE_DOS_PATHS && strcmp(buf, buf_native))
 
   71         printf(
"Native mismatch\n");
 
   76         if (strcmp(buf, buf2)) {
 
   77             printf(
"In-place handling of %s + %s failed\n", 
base, rel);
 
   83 static void test2(
const char *url)
 
   91     av_url_split(proto, 
sizeof(proto), auth, 
sizeof(auth), host, 
sizeof(host), &port, path, 
sizeof(path), url);
 
   92     printf(
"%-60s => %-15s %-15s %-15s %5d %s\n", url, proto, auth, host, port, path);
 
   97     printf(
"Testing ff_url_decompose:\n\n");
 
   98     test_decompose(
"http://user:pass@ffmpeg:8080/dir/file?query#fragment");
 
  108     printf(
"Testing ff_make_absolute_url:\n");
 
  110     test(
"/foo/bar", 
"baz");
 
  111     test(
"/foo/bar", 
"../baz");
 
  112     test(
"/foo/bar", 
"/baz");
 
  113     test(
"/foo/bar", 
"../../../baz");
 
  114     test(
"http://server/foo/", 
"baz");
 
  115     test(
"http://server/foo/bar", 
"baz");
 
  116     test(
"http://server/foo/", 
"../baz");
 
  117     test(
"http://server/foo/bar/123", 
"../../baz");
 
  118     test(
"http://server/foo/bar/123", 
"/baz");
 
  119     test(
"http://server/foo/bar/123", 
"https://other/url");
 
  120     test(
"http://server/foo/bar?param=value/with/slashes", 
"/baz");
 
  121     test(
"http://server/foo/bar?param&otherparam", 
"?someparam");
 
  122     test(
"http://server/foo/bar", 
"//other/url");
 
  123     test(
"http://server/foo/bar", 
"../../../../../other/url");
 
  124     test(
"http://server/foo/bar", 
"/../../../../../other/url");
 
  125     test(
"http://server/foo/bar", 
"/test/../../../../../other/url");
 
  126     test(
"http://server/foo/bar", 
"/test/../../test/../../../other/url");
 
  127     test(
"http://server/foo/bar", 
"file:../baz/qux");
 
  128     test(
"http://server/foo//bar/", 
"../../");
 
  129     test(
"file:../tmp/foo", 
"../bar/");
 
  130     test(
"file:../tmp/foo", 
"file:../bar/");
 
  131     test(
"http://server/foo/bar", 
"./");
 
  132     test(
"http://server/foo/bar", 
".dotfile");
 
  133     test(
"http://server/foo/bar", 
"..doubledotfile");
 
  134     test(
"http://server/foo/bar", 
"double..dotfile");
 
  135     test(
"http://server/foo/bar", 
"doubledotfile..");
 
  136     test(
"file1", 
"file2");
 
  137     test(
"dir/file1", 
"file2");
 
  138     test(
"dir/file1", 
"../file2");
 
  139     test(
"dir\\file1", 
"file2");
 
  140     test(
"\\\\srv\\shr\\file", 
"..\\..\\dummy");
 
  141     test(
"\\\\srv\\shr\\file", 
"dummy");
 
  142     test(
"\\\\srv\\shr\\file", 
"\\\\srv2\\shr2\\file2");
 
  143     test(
"\\\\srv\\shr\\file", 
"d:/file");
 
  144     test(
"C:\\dir\\a", 
"..\\file");
 
  145     test(
"C:\\dir\\a", 
"\\\\srv\\shr\\file");
 
  146     test(
"C:\\dir\\a", 
"d:\\file");
 
  147     test(
"http://a/b", 
"\\\\srv\\shr\\file");
 
  148     test(
"http://a/b", 
"//srv/shr/file");
 
  149     test(
"http://a/b", 
"d:\\file");
 
  150     test(
"http://a/b", 
"C:/file");
 
  153     test(
"http://a/b/c/d;p?q", 
"g:h");           
 
  154     test(
"http://a/b/c/d;p?q", 
"g");             
 
  155     test(
"http://a/b/c/d;p?q", 
"./g");           
 
  156     test(
"http://a/b/c/d;p?q", 
"g/");            
 
  157     test(
"http://a/b/c/d;p?q", 
"/g");            
 
  158     test(
"http://a/b/c/d;p?q", 
"//g");           
 
  159     test(
"http://a/b/c/d;p?q", 
"?y");            
 
  160     test(
"http://a/b/c/d;p?q", 
"g?y");           
 
  161     test(
"http://a/b/c/d;p?q", 
"#s");            
 
  162     test(
"http://a/b/c/d;p?q", 
"g#s");           
 
  163     test(
"http://a/b/c/d;p?q", 
"g?y#s");         
 
  164     test(
"http://a/b/c/d;p?q", 
";x");            
 
  165     test(
"http://a/b/c/d;p?q", 
"g;x");           
 
  166     test(
"http://a/b/c/d;p?q", 
"g;x?y#s");       
 
  167     test(
"http://a/b/c/d;p?q", 
"");              
 
  168     test(
"http://a/b/c/d;p?q", 
".");             
 
  169     test(
"http://a/b/c/d;p?q", 
"./");            
 
  170     test(
"http://a/b/c/d;p?q", 
"..");            
 
  171     test(
"http://a/b/c/d;p?q", 
"../");           
 
  172     test(
"http://a/b/c/d;p?q", 
"../g");          
 
  173     test(
"http://a/b/c/d;p?q", 
"../..");         
 
  174     test(
"http://a/b/c/d;p?q", 
"../../");        
 
  175     test(
"http://a/b/c/d;p?q", 
"../../g");       
 
  176     test(
"http://a/b/c/d;p?q", 
"../../../g");    
 
  177     test(
"http://a/b/c/d;p?q", 
"../../../../g"); 
 
  178     test(
"http://a/b/c/d;p?q", 
"/./g");          
 
  179     test(
"http://a/b/c/d;p?q", 
"/../g");         
 
  180     test(
"http://a/b/c/d;p?q", 
"g.");            
 
  181     test(
"http://a/b/c/d;p?q", 
".g");            
 
  182     test(
"http://a/b/c/d;p?q", 
"g..");           
 
  183     test(
"http://a/b/c/d;p?q", 
"..g");           
 
  184     test(
"http://a/b/c/d;p?q", 
"./../g");        
 
  185     test(
"http://a/b/c/d;p?q", 
"./g/.");         
 
  186     test(
"http://a/b/c/d;p?q", 
"g/./h");         
 
  187     test(
"http://a/b/c/d;p?q", 
"g/../h");        
 
  188     test(
"http://a/b/c/d;p?q", 
"g;x=1/./y");     
 
  189     test(
"http://a/b/c/d;p?q", 
"g;x=1/../y");    
 
  190     test(
"http://a/b/c/d;p?q", 
"g?y/./x");       
 
  191     test(
"http://a/b/c/d;p?q", 
"g?y/../x");      
 
  192     test(
"http://a/b/c/d;p?q", 
"g#s/./x");       
 
  193     test(
"http://a/b/c/d;p?q", 
"g#s/../x");      
 
  195     printf(
"\nTesting av_url_split:\n");
 
  197     test2(
"http://server/foo/");
 
  198     test2(
"http://example.com/foo/bar");
 
  199     test2(
"http://user:pass@localhost:8080/foo/bar/123");
 
  200     test2(
"http://server/foo/bar?param=value/with/slashes");
 
  201     test2(
"https://1l-lh.a.net/i/1LIVE_HDS@179577/master.m3u8");
 
  202     test2(
"ftp://u:p%2B%2F2@ftp.pbt.com/ExportHD.mpg");
 
  203     test2(
"https://key.dns.com?key_id=2&model_id=12345&&access_key=");
 
  204     test2(
"http://example.com#tag");
 
  
int ff_make_absolute_url2(char *buf, int size, const char *base, const char *rel, int handle_dos_paths)
Convert a relative url into an absolute url, given a base url.
static void test(const char *base, const char *rel)
#define PRINT_COMPONENT(comp)
#define av_err2str(errnum)
Convenience macro, the return value should be used only directly in function arguments but never stan...
printf("static const uint8_t my_array[100] = {\n")
void av_url_split(char *proto, int proto_size, char *authorization, int authorization_size, char *hostname, int hostname_size, int *port_ptr, char *path, int path_size, const char *url)
Split a URL string into components.
static void test_decompose(const char *url)
int ff_make_absolute_url(char *buf, int size, const char *base, const char *rel)
Convert a relative url into an absolute url, given a base url.
static void test2(const char *url)
int ff_url_decompose(URLComponents *uc, const char *url, const char *end)
Parse an URL to find the components.