xref: /aosp_15_r20/external/e2fsprogs/lib/e2p/pf.c (revision 6a54128f25917bfc36a8a6e9d722c04a0b4641b6)
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