1*6a54128fSAndroid Build Coastguard Worker /*
2*6a54128fSAndroid Build Coastguard Worker * pf.c - Print file attributes on an ext2 file system
3*6a54128fSAndroid Build Coastguard Worker *
4*6a54128fSAndroid Build Coastguard Worker * Copyright (C) 1993, 1994 Remy Card <[email protected]>
5*6a54128fSAndroid Build Coastguard Worker * Laboratoire MASI, Institut Blaise Pascal
6*6a54128fSAndroid Build Coastguard Worker * Universite Pierre et Marie Curie (Paris VI)
7*6a54128fSAndroid Build Coastguard Worker *
8*6a54128fSAndroid Build Coastguard Worker * %Begin-Header%
9*6a54128fSAndroid Build Coastguard Worker * This file may be redistributed under the terms of the GNU Library
10*6a54128fSAndroid Build Coastguard Worker * General Public License, version 2.
11*6a54128fSAndroid Build Coastguard Worker * %End-Header%
12*6a54128fSAndroid Build Coastguard Worker */
13*6a54128fSAndroid Build Coastguard Worker
14*6a54128fSAndroid Build Coastguard Worker /*
15*6a54128fSAndroid Build Coastguard Worker * History:
16*6a54128fSAndroid Build Coastguard Worker * 93/10/30 - Creation
17*6a54128fSAndroid Build Coastguard Worker */
18*6a54128fSAndroid Build Coastguard Worker
19*6a54128fSAndroid Build Coastguard Worker #include "config.h"
20*6a54128fSAndroid Build Coastguard Worker #include <stdio.h>
21*6a54128fSAndroid Build Coastguard Worker
22*6a54128fSAndroid Build Coastguard Worker #include "e2p.h"
23*6a54128fSAndroid Build Coastguard Worker
24*6a54128fSAndroid Build Coastguard Worker struct flags_name {
25*6a54128fSAndroid Build Coastguard Worker unsigned long flag;
26*6a54128fSAndroid Build Coastguard Worker const char *short_name;
27*6a54128fSAndroid Build Coastguard Worker const char *long_name;
28*6a54128fSAndroid Build Coastguard Worker };
29*6a54128fSAndroid Build Coastguard Worker
30*6a54128fSAndroid Build Coastguard Worker static struct flags_name flags_array[] = {
31*6a54128fSAndroid Build Coastguard Worker { EXT2_SECRM_FL, "s", "Secure_Deletion" },
32*6a54128fSAndroid Build Coastguard Worker { EXT2_UNRM_FL, "u" , "Undelete" },
33*6a54128fSAndroid Build Coastguard Worker { EXT2_SYNC_FL, "S", "Synchronous_Updates" },
34*6a54128fSAndroid Build Coastguard Worker { EXT2_DIRSYNC_FL, "D", "Synchronous_Directory_Updates" },
35*6a54128fSAndroid Build Coastguard Worker { EXT2_IMMUTABLE_FL, "i", "Immutable" },
36*6a54128fSAndroid Build Coastguard Worker { EXT2_APPEND_FL, "a", "Append_Only" },
37*6a54128fSAndroid Build Coastguard Worker { EXT2_NODUMP_FL, "d", "No_Dump" },
38*6a54128fSAndroid Build Coastguard Worker { EXT2_NOATIME_FL, "A", "No_Atime" },
39*6a54128fSAndroid Build Coastguard Worker { EXT2_COMPR_FL, "c", "Compression_Requested" },
40*6a54128fSAndroid Build Coastguard Worker { EXT4_ENCRYPT_FL, "E", "Encrypted" },
41*6a54128fSAndroid Build Coastguard Worker { EXT3_JOURNAL_DATA_FL, "j", "Journaled_Data" },
42*6a54128fSAndroid Build Coastguard Worker { EXT2_INDEX_FL, "I", "Indexed_directory" },
43*6a54128fSAndroid Build Coastguard Worker { EXT2_NOTAIL_FL, "t", "No_Tailmerging" },
44*6a54128fSAndroid Build Coastguard Worker { EXT2_TOPDIR_FL, "T", "Top_of_Directory_Hierarchies" },
45*6a54128fSAndroid Build Coastguard Worker { EXT4_EXTENTS_FL, "e", "Extents" },
46*6a54128fSAndroid Build Coastguard Worker { FS_NOCOW_FL, "C", "No_COW" },
47*6a54128fSAndroid Build Coastguard Worker { FS_DAX_FL, "x", "DAX" },
48*6a54128fSAndroid Build Coastguard Worker { EXT4_CASEFOLD_FL, "F", "Casefold" },
49*6a54128fSAndroid Build Coastguard Worker { EXT4_INLINE_DATA_FL, "N", "Inline_Data" },
50*6a54128fSAndroid Build Coastguard Worker { EXT4_PROJINHERIT_FL, "P", "Project_Hierarchy" },
51*6a54128fSAndroid Build Coastguard Worker { EXT4_VERITY_FL, "V", "Verity" },
52*6a54128fSAndroid Build Coastguard Worker { EXT2_NOCOMPR_FL, "m", "Dont_Compress" },
53*6a54128fSAndroid Build Coastguard Worker { 0, NULL, NULL }
54*6a54128fSAndroid Build Coastguard Worker };
55*6a54128fSAndroid Build Coastguard Worker
print_flags(FILE * f,unsigned long flags,unsigned options)56*6a54128fSAndroid Build Coastguard Worker void print_flags (FILE * f, unsigned long flags, unsigned options)
57*6a54128fSAndroid Build Coastguard Worker {
58*6a54128fSAndroid Build Coastguard Worker int long_opt = (options & PFOPT_LONG);
59*6a54128fSAndroid Build Coastguard Worker struct flags_name *fp;
60*6a54128fSAndroid Build Coastguard Worker int first = 1;
61*6a54128fSAndroid Build Coastguard Worker
62*6a54128fSAndroid Build Coastguard Worker for (fp = flags_array; fp->flag != 0; fp++) {
63*6a54128fSAndroid Build Coastguard Worker if (flags & fp->flag) {
64*6a54128fSAndroid Build Coastguard Worker if (long_opt) {
65*6a54128fSAndroid Build Coastguard Worker if (first)
66*6a54128fSAndroid Build Coastguard Worker first = 0;
67*6a54128fSAndroid Build Coastguard Worker else
68*6a54128fSAndroid Build Coastguard Worker fputs(", ", f);
69*6a54128fSAndroid Build Coastguard Worker fputs(fp->long_name, f);
70*6a54128fSAndroid Build Coastguard Worker } else
71*6a54128fSAndroid Build Coastguard Worker fputs(fp->short_name, f);
72*6a54128fSAndroid Build Coastguard Worker } else {
73*6a54128fSAndroid Build Coastguard Worker if (!long_opt)
74*6a54128fSAndroid Build Coastguard Worker fputs("-", f);
75*6a54128fSAndroid Build Coastguard Worker }
76*6a54128fSAndroid Build Coastguard Worker }
77*6a54128fSAndroid Build Coastguard Worker if (long_opt && first)
78*6a54128fSAndroid Build Coastguard Worker fputs("---", f);
79*6a54128fSAndroid Build Coastguard Worker }
80