Mercurial > hg > octave-kai > gnulib-hg
annotate lib/rmdir.c @ 4665:dc6d827f3011
Remove K&R cruft.
author | Paul Eggert <eggert@cs.ucla.edu> |
---|---|
date | Tue, 09 Sep 2003 22:27:55 +0000 |
parents | 807294ed0f4f |
children | a535859efd14 |
rev | line source |
---|---|
775 | 1 /* BSD compatible remove directory function for System V |
4665 | 2 |
3 Copyright (C) 1988, 1990, 1999, 2003 Free Software Foundation, Inc. | |
315 | 4 |
5 This program is free software; you can redistribute it and/or modify | |
6 it under the terms of the GNU General Public License as published by | |
7 the Free Software Foundation; either version 2, or (at your option) | |
8 any later version. | |
9 | |
10 This program is distributed in the hope that it will be useful, | |
11 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
13 GNU General Public License for more details. | |
14 | |
15 You should have received a copy of the GNU General Public License | |
650
b4ef1c1a0171
update FSF address in copyright
Jim Meyering <jim@meyering.net>
parents:
439
diff
changeset
|
16 along with this program; if not, write to the Free Software Foundation, |
b4ef1c1a0171
update FSF address in copyright
Jim Meyering <jim@meyering.net>
parents:
439
diff
changeset
|
17 Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ |
315 | 18 |
775 | 19 #if HAVE_CONFIG_H |
20 # include <config.h> | |
315 | 21 #endif |
22 | |
23 #include <sys/types.h> | |
24 #include <sys/stat.h> | |
25 | |
26 #include <errno.h> | |
27 #ifndef errno | |
28 extern int errno; | |
29 #endif | |
30 | |
775 | 31 #if STAT_MACROS_BROKEN |
32 # undef S_ISDIR | |
315 | 33 #endif |
34 | |
35 #if !defined(S_ISDIR) && defined(S_IFDIR) | |
775 | 36 # define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) |
315 | 37 #endif |
38 | |
39 /* rmdir adapted from GNU tar. */ | |
40 | |
41 /* Remove directory DPATH. | |
42 Return 0 if successful, -1 if not. */ | |
43 | |
44 int | |
4665 | 45 rmdir (char const *dpath) |
315 | 46 { |
1768
d12253dc9dbb
(rmdir): Use pid_t instead of int; check status
Jim Meyering <jim@meyering.net>
parents:
775
diff
changeset
|
47 pid_t cpid; |
d12253dc9dbb
(rmdir): Use pid_t instead of int; check status
Jim Meyering <jim@meyering.net>
parents:
775
diff
changeset
|
48 int status; |
315 | 49 struct stat statbuf; |
50 | |
431
a13a90e8681b
(rmdir): Use stat, not safe_stat.
Jim Meyering <jim@meyering.net>
parents:
381
diff
changeset
|
51 if (stat (dpath, &statbuf) != 0) |
315 | 52 return -1; /* errno already set */ |
53 | |
54 if (!S_ISDIR (statbuf.st_mode)) | |
55 { | |
56 errno = ENOTDIR; | |
57 return -1; | |
58 } | |
59 | |
60 cpid = fork (); | |
61 switch (cpid) | |
62 { | |
63 case -1: /* cannot fork */ | |
64 return -1; /* errno already set */ | |
65 | |
66 case 0: /* child process */ | |
67 execl ("/bin/rmdir", "rmdir", dpath, (char *) 0); | |
68 _exit (1); | |
69 | |
70 default: /* parent process */ | |
71 | |
72 /* Wait for kid to finish. */ | |
73 | |
74 while (wait (&status) != cpid) | |
75 /* Do nothing. */ ; | |
76 | |
1768
d12253dc9dbb
(rmdir): Use pid_t instead of int; check status
Jim Meyering <jim@meyering.net>
parents:
775
diff
changeset
|
77 if (status) |
315 | 78 { |
79 | |
80 /* /bin/rmdir failed. */ | |
81 | |
82 errno = EIO; | |
83 return -1; | |
84 } | |
85 return 0; | |
86 } | |
87 } |