Skip to content

Commit 8c4d16b

Browse files
committed
Fixed removal of links on Unix-like OSes, updated tests against future regressions
1 parent 7f2a0c8 commit 8c4d16b

File tree

2 files changed

+9
-1
lines changed

2 files changed

+9
-1
lines changed

src/host/os_rmdir.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
* \author Copyright (c) 2002-2013 Jess Perkins and the Premake project
55
*/
66

7+
#include <sys/stat.h>
78
#include <stdlib.h>
89
#include "premake.h"
910

@@ -23,7 +24,12 @@ int os_rmdir(lua_State* L)
2324

2425
z = RemoveDirectoryW(wide_path);
2526
#else
26-
z = (0 == rmdir(path));
27+
struct stat buf;
28+
if (lstat(path, &buf) == 0 && S_ISLNK(buf.st_mode)) {
29+
z = (0 == unlink(path));
30+
} else {
31+
z = (0 == rmdir(path));
32+
}
2733
#endif
2834

2935
if (!z)

tests/base/test_os.lua

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,12 +70,14 @@
7070
test.istrue(os.linkdir("folder/subfolder", "folder/subfolder2"))
7171
test.istrue(os.islink("folder/subfolder2"))
7272
os.rmdir("folder/subfolder2")
73+
test.isfalse(os.islink("folder/subfolder2"))
7374
end
7475

7576
function suite.linkfile()
7677
test.istrue(os.linkfile("folder/ok.lua", "folder/ok2.lua"))
7778
test.istrue(os.islink("folder/ok2.lua"))
7879
os.remove("folder/ok2.lua")
80+
test.isfalse(os.islink("folder/ok2.lua"))
7981
end
8082

8183

0 commit comments

Comments
 (0)