[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[tyndur-devel] [PATCH 2/3] libc: io_split_filename() mit nicht-kanonischen Pfaden
! libc: io_split_filename() kommt jetzt auch mit Pfaden zurecht, die
mehrfache Schrägstriche, überflüssige Schrägstriche am Ende, ./ und
../ enthalten.
Das bedeutet unter anderem, dass 'cp -r apps/ tmp/' jetzt korrekt ein
neues Verzeichnis tmp/apps/ anlegt und rekursiv dorthin kopiert
(vorher wurde ein leerer Dateiname als Quelle erkannt, und deswegen
alles direkt nach tmp/ kopiert)
Signed-off-by: Kevin Wolf <kevin@xxxxxxxxxx>
---
src/modules/lib/lost_path.c | 14 ++++++++++++--
1 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/src/modules/lib/lost_path.c b/src/modules/lib/lost_path.c
index 10f052f..5272f87 100644
--- a/src/modules/lib/lost_path.c
+++ b/src/modules/lib/lost_path.c
@@ -475,8 +475,18 @@ char* io_split_filename(const char* path)
list_t* element_stack = list_create();
get_path_elements(path, element_stack, 0);
- // Das letzte Element des Pfads (erstes in der Liste) herausgreifen
+ // Dot und Dotdot Elemente eliminieren
+ eliminate_dot_elements(element_stack);
+
+ // Das letzte nichleere Element des Pfads (erstes in der Liste)
+ // herausgreifen
element = list_get_element_at(element_stack, 0);
+ while (element && !*element->text && element->left_sep == PATH_SEP) {
+ element = list_pop(element_stack);
+ free(element);
+ element = list_get_element_at(element_stack, 0);
+ }
+
if (element != NULL) {
char* result;
size_t length;
@@ -497,7 +507,7 @@ char* io_split_filename(const char* path)
return result;
} else {
list_destroy(element_stack);
- return NULL;
+ return strdup("");
}
}
--
1.7.7