[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
signature.asc
Description: Digital signature
- remove() vs. directories,
Thomas Schwinge <=