-
- cpid = fork ();
- switch (cpid)
- {
- case -1: /* cannot fork */
- return -1; /* errno already set */
-
- case 0: /* child process */
- execl ("/bin/rmdir", "rmdir", dpath, (char *) 0);
- _exit (1);
-
- default: /* parent process */
-
- /* Wait for kid to finish. */
-
- while (wait (&status) != cpid)
- /* Do nothing. */ ;
-
- if (status)
- {
-
- /* /bin/rmdir failed. */
-
- errno = EIO;
- return -1;
- }
- return 0;
- }
+ result = rmdir (dir);
+ /* Work around mingw bug, where rmdir("file/") fails with EINVAL
+ instead of ENOTDIR. We've already filtered out trailing ., the
+ only reason allowed by POSIX for EINVAL. */
+ if (result == -1 && errno == EINVAL)
+ errno = ENOTDIR;
+ return result;