added url_split()
[libav.git] / libav / utils.c
index e8e62e8..bae52c7 100644 (file)
@@ -1092,3 +1092,54 @@ void av_hex_dump(UINT8 *buf, int size)
     }
 }
 
+void url_split(char *proto, int proto_size,
+               char *hostname, int hostname_size,
+               int *port_ptr,
+               char *path, int path_size,
+               const char *url)
+{
+    const char *p;
+    char *q;
+    int port;
+
+    port = -1;
+
+    p = url;
+    q = proto;
+    while (*p != ':' && *p != '\0') {
+        if ((q - proto) < proto_size - 1)
+            *q++ = *p;
+        p++;
+    }
+    if (proto_size > 0)
+        *q = '\0';
+    if (*p == '\0') {
+        if (proto_size > 0)
+            proto[0] = '\0';
+        if (hostname_size > 0)
+            hostname[0] = '\0';
+        p = url;
+    } else {
+        p++;
+        if (*p == '/')
+            p++;
+        if (*p == '/')
+            p++;
+        q = hostname;
+        while (*p != ':' && *p != '/' && *p != '?' && *p != '\0') {
+            if ((q - hostname) < hostname_size - 1)
+                *q++ = *p;
+            p++;
+        }
+        if (hostname_size > 0)
+            *q = '\0';
+        if (*p == ':') {
+            p++;
+            port = strtoul(p, (char **)&p, 10);
+        }
+    }
+    if (port_ptr)
+        *port_ptr = port;
+    pstrcpy(path, path_size, p);
+}
+