git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v3 5/5] mingw_rmdir: set errno=ENOTEMPTY when appropriate

From
Erik Faye-Lund <kusmabite@gmail.com>
Date
Dec 14, 2010, 22:49 UTC
Message-ID
<AANLkTi=12WqYn5GJpqPYqKE_2L51Em7Ek5szTZYryHd9@mail.gmail.com>
In-Reply-To
<20101214222830.GF4084@sandbox>
On Tue, Dec 14, 2010 at 11:28 PM, Heiko Voigt <hvoigt@hvoigt.net> wrote:
Show 7 quoted lines
> From: Johannes Schindelin <johannes.schindelin@gmx.de>
>
> On Windows, EACCES overrules ENOTEMPTY when calling rmdir(). But if the
> directory is busy, we only want to retry deleting the directory if it
> is empty, so test specifically for that case and set ENOTEMPTY rather
> than EACCES.
>

Hmm... According to MSDN, rmdir(*) should already handle ENOTEMPTY. Isn't the problem rather the structure of that loop? Shouldn't it be sufficient to do something like this (note: untested, but the concept should work, no)?

---8<---
#undef rmdir
int mingw_rmdir(const char *pathname)
{
       int ret, tries;
       for (tries = 0; tries < ARRAY_SIZE(delay); ++tries) {
               if (!(ret = rmdir(pathname)) || errno == ENOTEMPTY ||
                   !is_file_in_use_error(GetLastError()))
                      return ret;
               /*
                * We assume that some other process had the source or
                * destination file open at the wrong moment and retry.
                * In order to give the other process a higher chance to
                * complete its operation, we give up our time slice now.
                * If we have to retry again, we do sleep a bit.
                */
               Sleep(delay[tries]);
       }
       while (is_file_in_use_error(GetLastError()) &&
              ask_user_yes_no("Deletion of directory '%s' failed. "
                       "Should I try again?", pathname))
              ret = rmdir(pathname);
       return ret;
}
---8<---
(*) http://msdn.microsoft.com/en-us/library/wt8es881(v=VS.80).aspx
Previous: Heiko VoigtNext: Johannes Schindelin
Message 18 of 34 in “make open/unlink failures user friendly on windows using retry/abort”
  1. 0/5 make open/unlink failures user friendly on windows using retry/abortHeiko Voigt, Dec 14, 2010
  2. 1/8 mingw: move unlink wrapper to mingw.cHeiko Voigt, Dec 14, 2010
  3. 2/8 mingw: work around irregular failures of unlink on windowsHeiko Voigt, Dec 14, 2010
  4. Erik Faye-LundDec 14, 2010
  5. Heiko VoigtDec 14, 2010
  6. 2/5 mingw: work around irregular failures of unlink on windowsHeiko Voigt, Dec 14, 2010
  7. 3/8 mingw: make failures to unlink or move raise a questionHeiko Voigt, Dec 14, 2010
  8. Erik Faye-LundDec 14, 2010
  9. Junio C HamanoDec 14, 2010
  10. Heiko VoigtDec 15, 2010
  11. Johannes SchindelinDec 15, 2010
  12. Junio C HamanoDec 15, 2010
  13. Heiko VoigtDec 15, 2010
  14. Erik Faye-LundDec 15, 2010
  15. Heiko VoigtDec 15, 2010
  16. 4/5 mingw: add fallback for rmdir in case directory is in useHeiko Voigt, Dec 14, 2010
  17. 5/5 mingw_rmdir: set errno=ENOTEMPTY when appropriateHeiko Voigt, Dec 14, 2010
  18. Erik Faye-LundDec 14, 2010
  19. Johannes SchindelinDec 15, 2010
  20. Erik Faye-LundDec 15, 2010
  21. Junio C HamanoDec 15, 2010
  22. 0/5 make open/unlink failures user friendly on windows using retry/abortHeiko Voigt, Feb 7, 2011
  23. 1/5 mingw: move unlink wrapper to mingw.cHeiko Voigt, Feb 7, 2011
  24. Johannes SchindelinFeb 17, 2011
  25. 2/5 mingw: work around irregular failures of unlink on windowsHeiko Voigt, Feb 7, 2011
  26. 3/5 mingw: make failures to unlink or move raise a questionHeiko Voigt, Feb 7, 2011
  27. 4/5 mingw: add fallback for rmdir in case directory is in useHeiko Voigt, Feb 7, 2011
  28. 5/5 mingw_rmdir: set errno=ENOTEMPTY when appropriateHeiko Voigt, Feb 7, 2011
  29. Erik Faye-LundFeb 7, 2011
  30. Heiko VoigtFeb 7, 2011
  31. Erik Faye-LundFeb 7, 2011
  32. Junio C HamanoFeb 7, 2011
  33. Erik Faye-LundFeb 7, 2011
  34. Junio C HamanoFeb 8, 2011

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.