TODO: add an item for a chmod optimization
[platform/upstream/coreutils.git] / src / chown-core.h
1 /* chown-core.h -- types and prototypes shared by chown and chgrp.
2
3    Copyright (C) 2000, 2003-2005, 2007-2008 Free Software Foundation, Inc.
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 3 of the License, or
8    (at your option) 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
16    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
17
18 #ifndef CHOWN_CORE_H
19 # define CHOWN_CORE_H
20
21 # include "dev-ino.h"
22
23 enum Change_status
24 {
25   CH_NOT_APPLIED = 1,
26   CH_SUCCEEDED,
27   CH_FAILED,
28   CH_NO_CHANGE_REQUESTED
29 };
30
31 enum Verbosity
32 {
33   /* Print a message for each file that is processed.  */
34   V_high,
35
36   /* Print a message for each file whose attributes we change.  */
37   V_changes_only,
38
39   /* Do not be verbose.  This is the default. */
40   V_off
41 };
42
43 struct Chown_option
44 {
45   /* Level of verbosity.  */
46   enum Verbosity verbosity;
47
48   /* If nonzero, change the ownership of directories recursively. */
49   bool recurse;
50
51   /* Pointer to the device and inode numbers of `/', when --recursive.
52      Need not be freed.  Otherwise NULL.  */
53   struct dev_ino *root_dev_ino;
54
55   /* This corresponds to the --dereference (opposite of -h) option.  */
56   bool affect_symlink_referent;
57
58   /* If nonzero, force silence (no error messages). */
59   bool force_silent;
60
61   /* The name of the user to which ownership of the files is being given. */
62   char *user_name;
63
64   /* The name of the group to which ownership of the files is being given. */
65   char *group_name;
66 };
67
68 void
69 chopt_init (struct Chown_option *);
70
71 void
72 chopt_free (struct Chown_option *);
73
74 char *
75 gid_to_name (gid_t);
76
77 char *
78 uid_to_name (uid_t);
79
80 bool
81 chown_files (char **files, int bit_flags,
82              uid_t uid, gid_t gid,
83              uid_t required_uid, gid_t required_gid,
84              struct Chown_option const *chopt);
85
86 #endif /* CHOWN_CORE_H */