cvs update -P does not work correctly on Windows XP

"Hans Bos (Xelion)" <[email protected]>
Newsgroups gmane.comp.version-control.cvs.bugs
Message-ID <[email protected]>
Hello,

I noticed that cvs on XP has problems removing directories on
a (NT) file server.
Because of this, cvs update -P doesn't work correctly.

I have looked at the code that removes directories.
Cvs performs an unlink in unlink_file_dir() and when it fails,
it looks at the error code (errno) to see if the file to be unlinked
is a directory.

The error code that is returned on XP (ENOTEMPTY) is not among
the codes that is checked.
When I added a check for ENONEMPTY, everything works ok.

Below is a "cvs diff -c windows-NT/filesubr.c" with my changes.

Greetings,
Hans Bos
-------------------------------------------------------------------------------

Index: windows-NT/filesubr.c
===================================================================
RCS file: /cvsroot/ccvs/windows-NT/filesubr.c,v
retrieving revision 1.37
diff -c -r1.37 filesubr.c
*** windows-NT/filesubr.c       28 Dec 2002 17:58:07 -0000      1.37
--- windows-NT/filesubr.c       2 May 2003 12:55:25 -0000
***************
*** 476,482 ****
      {
        /* under Windows NT, unlink returns EACCES if the path
           is a directory.  Under Windows 95, ENOENT.  */
!         if (errno == EISDIR || errno == EACCES || errno == ENOENT)
                  return deep_remove_dir (f);
          else
                /* The file wasn't a directory and some other
--- 476,483 ----
      {
        /* under Windows NT, unlink returns EACCES if the path
           is a directory.  Under Windows 95, ENOENT.  */
!         if (errno == EISDIR || errno == EACCES || errno == ENOENT
!           || errno == ENOTEMPTY)
                  return deep_remove_dir (f);
          else
                /* The file wasn't a directory and some other
***************
*** 529,535 ****
                   We aren't really trying to prevent race conditions here
                   (e.g. what if something changes between readdir and
                   unlink?)  */
!               if (errno == EISDIR || errno == EACCES || errno == ENOENT)
                {
                    if (deep_remove_dir (buf))
                    {
--- 530,537 ----
                   We aren't really trying to prevent race conditions here
                   (e.g. what if something changes between readdir and
                   unlink?)  */
!               if (errno == EISDIR || errno == EACCES || errno == ENOENT
!                   || errno == ENOTEMPTY)
                {
                    if (deep_remove_dir (buf))
                    {
-------------------------------------------------------------------------------
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.