*** empty log message ***
[platform/upstream/coreutils.git] / src / remove.h
1 /* Remove directory entries.
2
3    Copyright (C) 1998, 2000, 2002, 2003, 2004, 2005 Free Software
4    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 #ifndef REMOVE_H
21 # define REMOVE_H
22
23 # include "dev-ino.h"
24
25 struct rm_options
26 {
27   /* If true, ignore nonexistent files.  */
28   bool ignore_missing_files;
29
30   /* If true, query the user about whether to remove each file.  */
31   bool interactive;
32
33   /* If true, recursively remove directories.  */
34   bool recursive;
35
36   /* Pointer to the device and inode numbers of `/', when --recursive.
37      Otherwise NULL.  */
38   struct dev_ino *root_dev_ino;
39
40   /* If nonzero, stdin is a tty.  */
41   bool stdin_tty;
42
43   /* If true, display the name of each file removed.  */
44   bool verbose;
45
46   /* If true, treat the failure by the rm function to restore the
47      current working directory as a fatal error.  I.e., if this field
48      is true and the rm function cannot restore cwd, it must exit with
49      a nonzero status.  Some applications require that the rm function
50      restore cwd (e.g., mv) and some others do not (e.g., rm,
51      in many cases).  */
52   bool require_restore_cwd;
53 };
54
55 enum RM_status
56 {
57   /* These must be listed in order of increasing seriousness. */
58   RM_OK = 2,
59   RM_USER_DECLINED,
60   RM_ERROR,
61   RM_NONEMPTY_DIR
62 };
63
64 # define VALID_STATUS(S) \
65   ((S) == RM_OK || (S) == RM_USER_DECLINED || (S) == RM_ERROR)
66
67 # define UPDATE_STATUS(S, New_value)                            \
68   do                                                            \
69     {                                                           \
70       if ((New_value) == RM_ERROR                               \
71           || ((New_value) == RM_USER_DECLINED && (S) == RM_OK)) \
72         (S) = (New_value);                                      \
73     }                                                           \
74   while (0)
75
76 enum RM_status rm (size_t n_files, char const *const *file,
77                    struct rm_options const *x);
78
79 #endif