delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2009/10/01/12:26:32

X-Recipient: archive-cygwin AT delorie DOT com
X-SWARE-Spam-Status: No, hits=-2.6 required=5.0 tests=BAYES_00,SPF_HELO_PASS,SPF_PASS
X-Spam-Check-By: sourceware.org
To: cygwin AT cygwin DOT com
From: Eric Blake <ebb9 AT byu DOT net>
Subject: rename oddity on 1.5
Date: Thu, 1 Oct 2009 16:25:52 +0000 (UTC)
Lines: 31
Message-ID: <loom.20091001T180744-655@post.gmane.org>
Mime-Version: 1.0
User-Agent: Loom/3.14 (http://gmane.org/)
X-IsSubscribed: yes
Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm
List-Id: <cygwin.cygwin.com>
List-Subscribe: <mailto:cygwin-subscribe AT cygwin DOT com>
List-Archive: <http://sourceware.org/ml/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-help AT cygwin DOT com>, <http://sourceware.org/ml/#faqs>
Sender: cygwin-owner AT cygwin DOT com
Mail-Followup-To: cygwin AT cygwin DOT com
Delivered-To: mailing list cygwin AT cygwin DOT com

I'm debating about doing one final coreutils drop for cygwin 1.5, since 
coreutils 6.10 is comparatively old compared to the upcoming 7.7.  In the 
process, I'm trying to write a wrapper for coreutils to work around various 
rename(2) bugs (my patch for coreutils already deals with bugs in Solaris 9 and 
10, and NetBSD 1.6).  For the good news, the testsuite for coreutils passes all 
rename(2) tests on a self-built cygwin 1.7 without needing any wrapper (self-
built, because cgf has not yet checked in his patch to fix a/.// detection).

But I'm running into a weird case on cygwin 1.5.  I've got two machines, both 
running Windows XP, but the same sequence of commands on the two machines gives 
different behavior.  Can anyone explain this, other than a possibility of BLODA?

$ mkdir a b
$ touch a/f
$ mv -T a b
$ rm b/f
$ rmdir b
$ ls

On one machine, this works as expected, but on the other, the rmdir action 
brings directory 'a' back into existence.  The problem looks like it only 
occurs when moving a non-empty directory to overwrite an empty one.

I can work around it - in the wrapper, call rmdir(dst) if destination exists 
and is a directory, prior to calling rename(src,dst).  But I'd like an 
explanation of why I need to do it, if anyone knows, since it means the rename 
operation is no longer atomic.

-- 
Eric Blake



--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019