fix dnd added empty file path to the playlist
[uwplayer.git] / application / utils.c
index 7d123e3..5d18fdb 100644 (file)
 #include <dirent.h>
 #include <errno.h>
 
-#include <ucx/string.h>
+#include <cx/string.h>
 
 
 char* util_concat_path(const char *url_base, const char *p) {
-    sstr_t base = sstr((char*)url_base);
-    sstr_t path;
+    cxstring base = cx_str(url_base);
+    cxstring path;
     if(p) {
-        path = sstr((char*)p);
+        path = cx_str(p);
     } else {
-        path = sstrn("", 0);
+        path = cx_strn("", 0);
     }
     
     int add_separator = 0;
@@ -53,22 +53,25 @@ char* util_concat_path(const char *url_base, const char *p) {
         }
     }
     
-    sstr_t url;
+    cxmutstr url;
     if(add_separator) {
-        url = sstrcat(3, base, sstr("/"), path);
+        url = cx_strcat(3, base, cx_strn("/", 1), path);
     } else {
-        url = sstrcat(2, base, path);
+        url = cx_strcat(2, base, path);
     }
     
     return url.ptr;
 }
 
-char* util_resource_name(char *url) {
-    sstr_t urlstr = sstr(url);
+const char* util_resource_name(const char *url) {
+    cxstring urlstr = cx_str(url);
+    if(urlstr.length == 0) {
+        return url;
+    }
     if(urlstr.ptr[urlstr.length-1] == '/') {
         urlstr.length--;
     }
-    sstr_t resname = sstrrchr(urlstr, '/');
+    cxstring resname = cx_strrchr(urlstr, '/');
     if(resname.length > 1) {
         return resname.ptr+1;
     } else {
@@ -77,7 +80,7 @@ char* util_resource_name(char *url) {
 }
 
 char* util_parent_path(const char *path) {
-    char *name = util_resource_name((char*)path);
+    const char *name = util_resource_name(path);
     size_t namelen = strlen(name);
     size_t pathlen = strlen(path);
     size_t parentlen = pathlen - namelen;
@@ -91,9 +94,16 @@ char* util_parent_path(const char *path) {
 
 typedef int (*cmpfnc)(const void *, const void *);
 
+int fcmp(const void *d1, const void *d2) {
+    const char **f1 = (const char **)d1;
+    const char **f2 = (const char **)d2;
+    int r = strcmp(*f1, *f2);
+    return r;
+}
+
 char* util_find_next_file(char *current_file) {
     char *current_folder = util_parent_path(current_file);
-    char *current_file_name = util_resource_name(current_file);
+    const char *current_file_name = util_resource_name(current_file);
     DIR *dir = opendir(current_folder);
     if(!dir) {
         fprintf(stderr, "Error: Cannot open directory '%s': %s\n", current_folder, strerror(errno));
@@ -143,9 +153,10 @@ char* util_find_next_file(char *current_file) {
     
     char *result = NULL;
     if(!abort) {
-        qsort(files, nfiles, sizeof(char*), (cmpfnc)strcmp);
+        qsort(files, nfiles, sizeof(char*), fcmp);
         // search array for current file and return the successor
         for(int i=0;i<nfiles;i++) {
+            char *c = files[i];
             if(!strcmp(files[i], current_file_name)) {
                 if(i + 1 < nfiles) {
                     result = util_concat_path(current_folder, files[i+1]);