According to the susv2 man pages I have, remove(3) should act as

rmdir(2) on directories and unlink(2) otherwise. This modification,
and most of the man page update has been obtined from OpenBSD. This
was spotted by someone on a mailing lists a few months ago, but
I've lost their mail.

Reviewed by:	sheldonh
This commit is contained in:
dwmalone 2000-08-28 15:45:42 +00:00
parent 2ff526fc50
commit b008bd149c
2 changed files with 26 additions and 7 deletions

View File

@ -51,12 +51,17 @@
.Sh DESCRIPTION
The
.Fn remove
function
is an alias for the
.Xr unlink 2
system call.
It deletes the file referenced by
function removes the file or directory specified by
.Fa path .
.Pp
If
.Fa path
specifies a directory,
.Fn remove "path"
is the equivalent of
.Fn rmdir "path" .
Otherwise, it is the equivalent of
.Fn unlink "path" .
.Sh RETURN VALUES
Upon successful completion,
.Fn remove
@ -70,12 +75,18 @@ The
function
may fail and set
.Va errno
for any of the errors specified for the routine
for any of the errors specified for the routines
.Xr lstat 2 ,
.Xr rmdir 2
or
.Xr unlink 2 .
.Sh SEE ALSO
.Xr rmdir 2 ,
.Xr unlink 2
.Sh STANDARDS
The
.Fn remove
function conforms to
.St -ansiC .
.St -ansiC
and
.St -xpg4.2 .

View File

@ -42,6 +42,8 @@ static const char rcsid[] =
"$FreeBSD$";
#endif /* LIBC_SCCS and not lint */
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
@ -49,5 +51,11 @@ int
remove(file)
const char *file;
{
struct stat sb;
if (lstat(file, &sb) < 0)
return (-1);
if (S_ISDIR(sb.st_mode))
return (rmdir(file));
return (unlink(file));
}