Magellan Linux

Annotation of /trunk/mkinitrd-magellan/busybox/e2fsprogs/lsattr.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 984 - (hide annotations) (download)
Sun May 30 11:32:42 2010 UTC (14 years ago) by niro
File MIME type: text/plain
File size: 2448 byte(s)
-updated to busybox-1.16.1 and enabled blkid/uuid support in default config
1 niro 532 /* vi: set sw=4 ts=4: */
2     /*
3     * lsattr.c - List file attributes on an ext2 file system
4     *
5     * Copyright (C) 1993, 1994 Remy Card <card@masi.ibp.fr>
6     * Laboratoire MASI, Institut Blaise Pascal
7     * Universite Pierre et Marie Curie (Paris VI)
8     *
9     * This file can be redistributed under the terms of the GNU General
10     * Public License
11     */
12    
13     /*
14     * History:
15     * 93/10/30 - Creation
16     * 93/11/13 - Replace stat() calls by lstat() to avoid loops
17     * 94/02/27 - Integrated in Ted's distribution
18     * 98/12/29 - Display version info only when -V specified (G M Sipe)
19     */
20    
21 niro 816 #include "libbb.h"
22 niro 532 #include "e2fs_lib.h"
23    
24     enum {
25     OPT_RECUR = 0x1,
26     OPT_ALL = 0x2,
27     OPT_DIRS_OPT = 0x4,
28     OPT_PF_LONG = 0x8,
29     OPT_GENERATION = 0x10,
30     };
31    
32     static void list_attributes(const char *name)
33     {
34     unsigned long fsflags;
35     unsigned long generation;
36    
37 niro 816 if (fgetflags(name, &fsflags) != 0)
38 niro 532 goto read_err;
39    
40     if (option_mask32 & OPT_GENERATION) {
41 niro 816 if (fgetversion(name, &generation) != 0)
42 niro 532 goto read_err;
43     printf("%5lu ", generation);
44     }
45    
46     if (option_mask32 & OPT_PF_LONG) {
47     printf("%-28s ", name);
48 niro 816 print_e2flags(stdout, fsflags, PFOPT_LONG);
49     bb_putchar('\n');
50 niro 532 } else {
51 niro 816 print_e2flags(stdout, fsflags, 0);
52 niro 532 printf(" %s\n", name);
53     }
54    
55     return;
56     read_err:
57     bb_perror_msg("reading %s", name);
58     }
59    
60 niro 984 static int FAST_FUNC lsattr_dir_proc(const char *dir_name,
61     struct dirent *de,
62     void *private UNUSED_PARAM)
63 niro 532 {
64     struct stat st;
65     char *path;
66    
67     path = concat_path_file(dir_name, de->d_name);
68    
69 niro 816 if (lstat(path, &st) != 0)
70 niro 532 bb_perror_msg("stat %s", path);
71     else if (de->d_name[0] != '.' || (option_mask32 & OPT_ALL)) {
72     list_attributes(path);
73     if (S_ISDIR(st.st_mode) && (option_mask32 & OPT_RECUR)
74 niro 816 && !DOT_OR_DOTDOT(de->d_name)
75 niro 532 ) {
76     printf("\n%s:\n", path);
77     iterate_on_dir(path, lsattr_dir_proc, NULL);
78 niro 816 bb_putchar('\n');
79 niro 532 }
80     }
81    
82     free(path);
83     return 0;
84     }
85    
86     static void lsattr_args(const char *name)
87     {
88     struct stat st;
89    
90     if (lstat(name, &st) == -1) {
91     bb_perror_msg("stat %s", name);
92     } else if (S_ISDIR(st.st_mode) && !(option_mask32 & OPT_DIRS_OPT)) {
93     iterate_on_dir(name, lsattr_dir_proc, NULL);
94     } else {
95     list_attributes(name);
96     }
97     }
98    
99 niro 816 int lsattr_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
100     int lsattr_main(int argc UNUSED_PARAM, char **argv)
101 niro 532 {
102 niro 816 getopt32(argv, "Radlv");
103 niro 532 argv += optind;
104    
105     if (!*argv)
106 niro 816 *--argv = (char*)".";
107     do lsattr_args(*argv++); while (*argv);
108 niro 532
109     return EXIT_SUCCESS;
110     }