Mailing-List: contact cygwin-help AT sourceware DOT cygnus DOT com; run by ezmlm List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT sources DOT redhat DOT com Delivered-To: mailing list cygwin AT sources DOT redhat DOT com Date: Sun, 9 Sep 2001 19:40:56 -0400 From: Christopher Faylor To: cygwin AT cygwin DOT com Subject: Re: 1.3.2 rmdir fails if CWD is in the directory to be deleted? Message-ID: <20010909194056.A11565@redhat.com> Reply-To: cygwin AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com References: <5 DOT 1 DOT 0 DOT 14 DOT 2 DOT 20010908074822 DOT 0292ce60 AT pop3 DOT cris DOT com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.3.21i On Sun, Sep 09, 2001 at 01:29:55PM +0100, James Youngman wrote: >Randall R Schulz writes: > >> You should try it. On many Unix systems it will work just >> fine. After the rmdir call, no call that uses a relative file name >> will work, however, since the directory must have been empty to be >> removed and in doing so the .. link would have been removed. >> >> This applies to "classic" implementations on the Unix file >> system. Chris has pointed out that IRIX does not behave this >> way. Since those details are not part of the API specifications, the >> implementers get to do what they please. > >The (POSIX)|(X/Open) spec currenly says (about rmdir()) :- > >(38292 ff.) > >> The rmdir( ) function shall remove a directory whose name is given >> by path. The directory shall be removed only if it is an empty >> directory. If the directory is the root directory or the current >> working directory of any process, it is unspecified whether the >> function succeeds, or whether it shall fail and set errno to >> [EBUSY]. If path names a symbolic link, then rmdir( ) shall fail >> and set errno to [ENOTDIR]. >> >> If the directory's link count becomes 0 and no process has the >> directory open, the space occupied by the directory shall be freed >> and the directory shall no longer be accessible. If one or more >> processes have the directory open when the last link is removed, the >> dot and dot-dot entries, if present, shall be removed before rmdir( >> ) returns and no new entries may be created in the directory, but >> the directory shall not be removed until all references to the >> directory are closed. If the directory is not an empty directory, >> rmdir( ) shall fail and set errno to [EEXIST] or [ENOTEMPTY]. > >My reading of this is that if you have a directory open by virtue of >it being your working directory, then it is valid for rmdir() to fail. >If however it is open via opendir(), then the rmdir() must succeed. Hmm. I read "open" as also being "open as the current working directory". In any event, cygwin/windows will fail for both of these situations, I think. cgf -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Bug reporting: http://cygwin.com/bugs.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/