X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=misc%2Fchattr.c;h=848c1d55b4d3038ded940253ea0d461d8c907909;hb=7953f61012d10f2040d63108cbe277f8854e6423;hp=b359248ab6693baea4fa4df1251254ffafa8c1b9;hpb=1e3472c5f37ca3686dd69b079d4d02a302f5798d;p=tools%2Fe2fsprogs.git diff --git a/misc/chattr.c b/misc/chattr.c index b359248..848c1d5 100644 --- a/misc/chattr.c +++ b/misc/chattr.c @@ -14,17 +14,17 @@ * 93/10/30 - Creation * 93/11/13 - Replace stat() calls by lstat() to avoid loops * 94/02/27 - Integrated in Ted's distribution + * 98/12/29 - Ignore symlinks when working recursively (G M Sipe) + * 98/12/29 - Display version info only when -V specified (G M Sipe) */ #include #include #include -#ifdef HAVE_GETOPT_H -#include -#endif #include #include #include +#include #ifdef HAVE_ERRNO_H #include #endif @@ -53,13 +53,13 @@ unsigned long af; unsigned long rf; unsigned long sf; -static void volatile fatal_error (const char * fmt_string, int errcode) +static void fatal_error(const char * fmt_string, int errcode) { fprintf (stderr, fmt_string, program_name); exit (errcode); } -#define usage() fatal_error ("usage: %s [-RV] [-+=acdisSu] [-v version] files...\n", \ +#define usage() fatal_error("usage: %s [-RV] [-+=AacdisSu] [-v version] files...\n", \ 1) static int decode_arg (int * i, int argc, char ** argv) @@ -89,6 +89,12 @@ static int decode_arg (int * i, int argc, char ** argv) rem = 1; break; #endif +#ifdef EXT2_NOATIME_FL + case 'A': + rf |= EXT2_NOATIME_FL; + rem = 1; + break; +#endif case 'c': rf |= EXT2_COMPR_FL; rem = 1; @@ -145,6 +151,11 @@ static int decode_arg (int * i, int argc, char ** argv) af |= EXT2_APPEND_FL; break; #endif +#ifdef EXT2_NOATIME_FL + case 'A': + af |= EXT2_NOATIME_FL; + break; +#endif case 'c': af |= EXT2_COMPR_FL; break; @@ -181,6 +192,11 @@ static int decode_arg (int * i, int argc, char ** argv) sf |= EXT2_APPEND_FL; break; #endif +#ifdef EXT2_NOATIME_FL + case 'A': + sf |= EXT2_NOATIME_FL; + break; +#endif case 'c': sf |= EXT2_COMPR_FL; break; @@ -223,6 +239,8 @@ static void change_attributes (const char * name) com_err (program_name, errno, "while stating %s", name); return; } + if (S_ISLNK(st.st_mode) && recursive) + return; if (set) { if (verbose) @@ -285,14 +303,11 @@ static int chattr_dir_proc (const char * dir_name, struct dirent * de, void * pr return 0; } -void main (int argc, char ** argv) +int main (int argc, char ** argv) { int i, j; int end_arg = 0; - fprintf (stderr, "chattr %s, %s for EXT2 FS %s, %s\n", - E2FSPROGS_VERSION, E2FSPROGS_DATE, - EXT2FS_VERSION, EXT2FS_DATE); if (argc && *argv) program_name = *argv; i = 1; @@ -315,6 +330,11 @@ void main (int argc, char ** argv) fprintf (stderr, "Must use '-v', =, - or +\n"); exit (1); } + if (verbose) + fprintf (stderr, "chattr %s, %s for EXT2 FS %s, %s\n", + E2FSPROGS_VERSION, E2FSPROGS_DATE, + EXT2FS_VERSION, EXT2FS_DATE); for (j = i; j < argc; j++) change_attributes (argv[j]); + exit(0); }