Index: runtime/bin/directory_macos.cc |
diff --git a/runtime/bin/directory_macos.cc b/runtime/bin/directory_macos.cc |
index c06ffa31fb799cbebf9df059b073ce51b1d39d87..b24b9c8d4b4b4d93a86c5d4d15ad4d66d0ba4ea7 100644 |
--- a/runtime/bin/directory_macos.cc |
+++ b/runtime/bin/directory_macos.cc |
@@ -259,7 +259,7 @@ static bool DeleteRecursively(PathBuffer* path) { |
struct stat st; |
if (NO_RETRY_EXPECTED(lstat(path->AsString(), &st)) == -1) { |
return false; |
- } else if (S_ISREG(st.st_mode) || S_ISLNK(st.st_mode)) { |
+ } else if (!S_ISDIR(st.st_mode)) { |
return (unlink(path->AsString()) == 0); |
} |
@@ -292,6 +292,10 @@ static bool DeleteRecursively(PathBuffer* path) { |
case DT_DIR: |
ok = DeleteDir(entry.d_name, path); |
break; |
+ case DT_BLK: |
+ case DT_CHR: |
+ case DT_FIFO: |
+ case DT_SOCK: |
case DT_REG: |
case DT_LNK: |
// Treat all links as files. This will delete the link which |
@@ -313,7 +317,7 @@ static bool DeleteRecursively(PathBuffer* path) { |
path->Reset(path_length); |
if (S_ISDIR(entry_info.st_mode)) { |
ok = DeleteDir(entry.d_name, path); |
- } else if (S_ISREG(entry_info.st_mode) || S_ISLNK(entry_info.st_mode)) { |
+ } else { |
// Treat links as files. This will delete the link which is |
// what we want no matter if the link target is a file or a |
// directory. |
@@ -322,6 +326,8 @@ static bool DeleteRecursively(PathBuffer* path) { |
break; |
} |
default: |
+ // We should have covered all the bases. If not, let's get an error. |
+ FATAL1("Unexpected d_type: %d\n", entry.d_type); |
break; |
} |
if (!ok) { |