From 4d8547d112dfd247bab13df4a6482e1d89cb5053 Mon Sep 17 00:00:00 2001 From: Shannon Booth Date: Sun, 16 Feb 2020 14:11:58 +1300 Subject: Userland: Use DirIterator in rm --- Userland/rm.cpp | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) (limited to 'Userland/rm.cpp') diff --git a/Userland/rm.cpp b/Userland/rm.cpp index 2b33d3d7d9..8c2a7c325f 100644 --- a/Userland/rm.cpp +++ b/Userland/rm.cpp @@ -28,6 +28,7 @@ #include #include #include +#include #include #include #include @@ -43,22 +44,18 @@ int remove(bool recursive, String path) } if (S_ISDIR(path_stat.st_mode) && recursive) { - DIR* derp = opendir(path.characters()); - if (!derp) { + auto di = Core::DirIterator(path, Core::DirIterator::SkipParentAndBaseDir); + if (di.has_error()) { + fprintf(stderr, "DirIterator: %s\n", di.error_string()); return 1; } - while (auto* de = readdir(derp)) { - if (strcmp(de->d_name, ".") != 0 && strcmp(de->d_name, "..") != 0) { - StringBuilder builder; - builder.append(path); - builder.append('/'); - builder.append(de->d_name); - int s = remove(true, builder.to_string()); - if (s != 0) - return s; - } + while (di.has_next()) { + int s = remove(true, di.next_full_path()); + if (s != 0) + return s; } + int s = rmdir(path.characters()); if (s < 0) { perror("rmdir"); -- cgit v1.2.3