bug-hurd
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

remove() vs. directories


From: Thomas Schwinge
Subject: remove() vs. directories
Date: Fri, 20 Nov 2009 21:13:21 +0100
User-agent: Mutt/1.5.18 (2008-05-17)

Hello!

| kfreebsd/local-sysdeps.diff: update -  remove() with POSIX conforming variant 
of unlink()
| 
| [...]
|  --- /dev/null
| ++++ b/ports/sysdeps/unix/bsd/bsd4.4/kfreebsd/remove.c
| +@@ -0,0 +1,40 @@
| ++/* ANSI C `remove' function to delete a file or directory.  POSIX.1 version.
| ++   Copyright (C) 1995,96,97,2002,2003 Free Software Foundation, Inc.
| ++   This file is part of the GNU C Library.
| ++
| ++   The GNU C Library is free software; you can redistribute it and/or
| ++   modify it under the terms of the GNU Lesser General Public
| ++   License as published by the Free Software Foundation; either
| ++   version 2.1 of the License, or (at your option) any later version.
| ++
| ++   The GNU C Library is distributed in the hope that it will be useful,
| ++   but WITHOUT ANY WARRANTY; without even the implied warranty of
| ++   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
| ++   Lesser General Public License for more details.
| ++
| ++   You should have received a copy of the GNU Lesser General Public
| ++   License along with the GNU C Library; if not, write to the Free
| ++   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
| ++   02111-1307 USA.  */
| ++
| ++#include <errno.h>
| ++#include <stdio.h>
| ++#include <unistd.h>
| ++
| ++int
| ++remove (file)
| ++     const char *file;
| ++{
| ++  /* First try to unlink since this is more frequently the necessary 
action. */
| ++  if (__unlink (file) != 0
| ++      /* If it is indeed a directory...  */
| ++      /* Linux returns EISDIR, POSIX mandates EPERM */
| ++      && (((errno != EISDIR) && (errno != EPERM))
| ++      /* ...try to remove it.  */
| ++      || __rmdir (file) != 0))
| ++    /* Cannot remove the object for whatever reason.  */
| ++    return -1;
| ++
| ++  return 0;
| ++}
| ++libc_hidden_def (remove)

Debian bug report: <http://bugs.debian.org/557248>.

Actually, the same change is needed for the Hurd; we also do return EPERM
for unlink("[directory]").  Roland, what's your preference to fix this?


Regards,
 Thomas

Attachment: signature.asc
Description: Digital signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]