[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Lost] [Patch] [2/3] io_split_filename()



Toni Kaufmann schrieb:
Ich würde mal sagen, ein paar list_destroy() wären nicht zuviel
verlangt. ;-)

Ach, das wird überbewertet. ;-) Neuer Versuch.
Index: lib/lost_path.c
===================================================================
--- lib/lost_path.c	(Revision 608)
+++ lib/lost_path.c	(Arbeitskopie)
@@ -459,3 +459,43 @@
     return new_path;
 }
 
+/**
+ * Trennt aus einem Pfad den Dateinamen (d.h. das letzte Pfadelement) heraus.
+ * Es wird keine Ueberpruefung vorgenommen, ob die Datei existiert.
+ *
+ * @param path Zu splittender Pfad
+ * @return Name der durch den Pfad angesprochenen Datei
+ */
+char* io_split_filename(const char* path)
+{
+    struct path_element* element;
+    
+    // Liste fuer die Elemente des Pfades erstellen
+    list_t* element_stack = list_create();
+    get_path_elements(path, element_stack, 0);
+    
+    // Das letzte Element des Pfads (erstes in der Liste) herausgreifen
+    element = list_get_element_at(element_stack, 0);
+    if (element != NULL) {
+        char* result;
+        size_t length;
+
+        // Den Ergebnisstring anlegen
+        length = strnlen(element->text, MAX_FILENAME_LEN);
+        if ((result = malloc(length + 1))) {
+            strncpy(result, element->text, length);
+            result[length] = '\0';
+        }
+
+        // Freigeben der Liste
+        while ((element = list_pop(element_stack))) {
+            free(element);
+        }
+        list_destroy(element_stack);
+
+        return result;
+    } else {
+        list_destroy(element_stack);
+        return NULL;
+    }
+}
Index: include/io.h
===================================================================
--- include/io.h	(Revision 608)
+++ include/io.h	(Arbeitskopie)
@@ -125,5 +125,6 @@
 #endif
 
 char* io_get_absolute_path(const char* path);
+char* io_split_filename(const char* path);
 
 #endif //ifndef _IO_H_