libidav/utils.c

changeset 673
8e7e56cfc103
parent 641
b138d1241e68
child 696
ec1509240080
--- a/libidav/utils.c	Sat Oct 26 11:32:27 2019 +0200
+++ b/libidav/utils.c	Sat Oct 26 12:38:33 2019 +0200
@@ -273,36 +273,37 @@
     }
 }
 
-char* util_url_base(char *url) {
-    sstr_t u = sstr(url);
-    int len = u.length;
-    int slashcount = 0;
-    int slmax;
-    if(len > 7 && !strncasecmp(url, "http://", 7)) {
-        slmax = 3;
-    } else if(len > 8 && !strncasecmp(url, "https://", 8)) {
-        slmax = 3;
-    } else {
-        slmax = 1;
-    }
-    char c;
-    int i = 0;
-    for(i=0;i<len;i++) {
-        c = url[i];
-        if(c == '/') {
-            slashcount++;
-            if(slashcount == slmax) {
-                i++;
-                break;
+char* util_url_base_s(sstr_t url) {
+    size_t i = 0;
+    if(url.length > 0) {
+        int slmax;
+        if(sstrprefix(url, SC("http://"))) {
+            slmax = 3;
+        } else if(sstrprefix(url, SC("https://"))) {
+            slmax = 3;
+        } else {
+            slmax = 1;
+        }
+        int slashcount = 0;
+        for(i=0;i<url.length;i++) {
+            if(url.ptr[i] == '/') {
+                slashcount++;
+                if(slashcount == slmax) {
+                    i++;
+                    break;
+                }
             }
         }
-    } 
-    sstr_t server = sstrsubsl(u, 0, i);
-    server = sstrdup(server);
-    return server.ptr;
+    }
+    sstr_t server = sstrsubsl(url, 0, i);
+    return sstrdup(server).ptr;
 }
 
-char* util_url_path(char *url) { 
+char* util_url_base(char *url) {
+    return util_url_base_s(sstr(url));
+}
+
+char* util_url_path(char *url) {
     char *path = NULL;
     size_t len = strlen(url);
     int slashcount = 0;

mercurial