source: trunk/essentials/app-arch/tar/lib/rmdir.c

Last change on this file was 3342, checked in by bird, 18 years ago

tar 1.16.1

File size: 1.7 KB
Line 
1/* BSD compatible remove directory function for System V
2
3 Copyright (C) 1988, 1990, 1999, 2003, 2004, 2005, 2006 Free
4 Software Foundation, Inc.
5
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2, or (at your option)
9 any later version.
10
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software Foundation,
18 Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
19
20#include <config.h>
21
22#include <sys/types.h>
23#include <sys/stat.h>
24#include <errno.h>
25
26/* rmdir adapted from GNU tar. */
27
28/* Remove directory DIR.
29 Return 0 if successful, -1 if not. */
30
31int
32rmdir (char const *dir)
33{
34 pid_t cpid;
35 int status;
36 struct stat statbuf;
37
38 if (stat (dir, &statbuf) != 0)
39 return -1; /* errno already set */
40
41 if (!S_ISDIR (statbuf.st_mode))
42 {
43 errno = ENOTDIR;
44 return -1;
45 }
46
47 cpid = fork ();
48 switch (cpid)
49 {
50 case -1: /* cannot fork */
51 return -1; /* errno already set */
52
53 case 0: /* child process */
54 execl ("/bin/rmdir", "rmdir", dir, (char *) 0);
55 _exit (1);
56
57 default: /* parent process */
58
59 /* Wait for kid to finish. */
60
61 while (wait (&status) != cpid)
62 /* Do nothing. */ ;
63
64 if (status)
65 {
66
67 /* /bin/rmdir failed. */
68
69 errno = EIO;
70 return -1;
71 }
72 return 0;
73 }
74}
Note: See TracBrowser for help on using the repository browser.