| /* vi: set sw=4 ts=4: */ |
| /* |
| * See README for additional information |
| * |
| * Licensed under GPLv2, see file LICENSE in this source tree. |
| */ |
| |
| #include "libbb.h" |
| #include "e2fs_lib.h" |
| |
| /* Print file attributes on an ext2 file system */ |
| const uint32_t e2attr_flags_value[] ALIGN4 = { |
| #ifdef ENABLE_COMPRESSION |
| EXT2_COMPRBLK_FL, |
| EXT2_DIRTY_FL, |
| EXT2_NOCOMPR_FL, |
| #endif |
| EXT2_SECRM_FL, |
| EXT2_UNRM_FL, |
| EXT2_SYNC_FL, |
| EXT2_DIRSYNC_FL, |
| EXT2_IMMUTABLE_FL, |
| EXT2_APPEND_FL, |
| EXT2_NODUMP_FL, |
| EXT2_NOATIME_FL, |
| EXT2_COMPR_FL, |
| EXT2_ECOMPR_FL, |
| EXT3_JOURNAL_DATA_FL, |
| EXT2_INDEX_FL, |
| EXT2_NOTAIL_FL, |
| EXT2_TOPDIR_FL, |
| EXT2_EXTENT_FL, |
| EXT2_NOCOW_FL, |
| EXT2_CASEFOLD_FL, |
| EXT2_INLINE_DATA_FL, |
| EXT2_PROJINHERIT_FL, |
| EXT2_VERITY_FL, |
| }; |
| |
| const char e2attr_flags_sname[] ALIGN1 = |
| #ifdef ENABLE_COMPRESSION |
| "BZX" |
| #endif |
| "suSDiadAcEjItTeCFNPV"; |
| |
| static const char e2attr_flags_lname[] ALIGN1 = |
| #ifdef ENABLE_COMPRESSION |
| "Compressed_File" "\0" |
| "Compressed_Dirty_File" "\0" |
| "Compression_Raw_Access" "\0" |
| #endif |
| "Secure_Deletion" "\0" |
| "Undelete" "\0" |
| "Synchronous_Updates" "\0" |
| "Synchronous_Directory_Updates" "\0" |
| "Immutable" "\0" |
| "Append_Only" "\0" |
| "No_Dump" "\0" |
| "No_Atime" "\0" |
| "Compression_Requested" "\0" |
| "Encrypted" "\0" |
| "Journaled_Data" "\0" |
| "Indexed_directory" "\0" |
| "No_Tailmerging" "\0" |
| "Top_of_Directory_Hierarchies" "\0" |
| "Extents" "\0" |
| "No_COW" "\0" |
| "Casefold" "\0" |
| "Inline_Data" "\0" |
| "Project_Hierarchy" "\0" |
| "Verity" "\0" |
| /* Another trailing NUL is added by compiler */; |
| |
| void print_e2flags_long(unsigned flags) |
| { |
| const uint32_t *fv; |
| const char *fn; |
| int first = 1; |
| |
| fv = e2attr_flags_value; |
| fn = e2attr_flags_lname; |
| do { |
| if (flags & *fv) { |
| if (!first) |
| fputs(", ", stdout); |
| fputs(fn, stdout); |
| first = 0; |
| } |
| fv++; |
| fn += strlen(fn) + 1; |
| } while (*fn); |
| if (first) |
| fputs("---", stdout); |
| } |
| |
| void print_e2flags(unsigned flags) |
| { |
| const uint32_t *fv; |
| const char *fn; |
| |
| fv = e2attr_flags_value; |
| fn = e2attr_flags_sname; |
| do { |
| char c = '-'; |
| if (flags & *fv) |
| c = *fn; |
| putchar(c); |
| fv++; |
| fn++; |
| } while (*fn); |
| } |