Changeset 2725 in MondoRescue for branches/2.2.9/mindi-busybox/e2fsprogs/e2fs_lib.c
- Timestamp:
- Feb 25, 2011, 9:26:54 PM (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2.2.9/mindi-busybox/e2fsprogs/e2fs_lib.c
r1765 r2725 3 3 * See README for additional information 4 4 * 5 * This file can be redistributed under the terms of the GNU Library General 6 * Public License 5 * Licensed under GPLv2, see file LICENSE in this source tree. 7 6 */ 8 7 … … 30 29 /* Iterate a function on each entry of a directory */ 31 30 int iterate_on_dir(const char *dir_name, 32 int (*func)(const char *, struct dirent *, void *),33 void * 31 int FAST_FUNC (*func)(const char *, struct dirent *, void *), 32 void *private) 34 33 { 35 34 DIR *dir; 36 struct dirent *de, *dep; 37 int max_len, len; 38 39 max_len = PATH_MAX + sizeof(struct dirent); 40 de = xmalloc(max_len+1); 41 memset(de, 0, max_len+1); 35 struct dirent *de; 42 36 43 37 dir = opendir(dir_name); 44 38 if (dir == NULL) { 45 free(de);46 39 return -1; 47 40 } 48 while ((dep = readdir(dir))) { 49 len = sizeof(struct dirent); 50 if (len < dep->d_reclen) 51 len = dep->d_reclen; 52 if (len > max_len) 53 len = max_len; 54 memcpy(de, dep, len); 41 while ((de = readdir(dir)) != NULL) { 55 42 func(dir_name, de, private); 56 43 } 57 44 closedir(dir); 58 free(de);59 45 return 0; 60 46 } … … 68 54 IF_LONG_IS_WIDER(int ver;) 69 55 70 fd = open(name, O_ NONBLOCK);56 fd = open(name, O_RDONLY | O_NONBLOCK); 71 57 if (fd == -1) 72 58 return -1; … … 110 96 goto notsupp; 111 97 } 112 fd = open(name, O_ NONBLOCK); /* neither read nor write asked for */98 fd = open(name, O_RDONLY | O_NONBLOCK); /* neither read nor write asked for */ 113 99 if (fd == -1) 114 100 return -1; … … 142 128 143 129 /* Print file attributes on an ext2 file system */ 144 struct flags_name { 145 unsigned long flag; 146 char short_name; 147 const char *long_name; 130 const uint32_t e2attr_flags_value[] = { 131 #ifdef ENABLE_COMPRESSION 132 EXT2_COMPRBLK_FL, 133 EXT2_DIRTY_FL, 134 EXT2_NOCOMPR_FL, 135 EXT2_ECOMPR_FL, 136 #endif 137 EXT2_INDEX_FL, 138 EXT2_SECRM_FL, 139 EXT2_UNRM_FL, 140 EXT2_SYNC_FL, 141 EXT2_DIRSYNC_FL, 142 EXT2_IMMUTABLE_FL, 143 EXT2_APPEND_FL, 144 EXT2_NODUMP_FL, 145 EXT2_NOATIME_FL, 146 EXT2_COMPR_FL, 147 EXT3_JOURNAL_DATA_FL, 148 EXT2_NOTAIL_FL, 149 EXT2_TOPDIR_FL 148 150 }; 149 151 150 /* TODO: apart from I and (disabled) COMPRESSION flags, this 151 * is a duplicate of a table from chattr. Merge? */ 152 static const struct flags_name flags_array[] = { 153 { EXT2_SECRM_FL, 's', "Secure_Deletion" }, 154 { EXT2_UNRM_FL, 'u' , "Undelete" }, 155 { EXT2_SYNC_FL, 'S', "Synchronous_Updates" }, 156 { EXT2_DIRSYNC_FL, 'D', "Synchronous_Directory_Updates" }, 157 { EXT2_IMMUTABLE_FL, 'i', "Immutable" }, 158 { EXT2_APPEND_FL, 'a', "Append_Only" }, 159 { EXT2_NODUMP_FL, 'd', "No_Dump" }, 160 { EXT2_NOATIME_FL, 'A', "No_Atime" }, 161 { EXT2_COMPR_FL, 'c', "Compression_Requested" }, 152 const char e2attr_flags_sname[] = 162 153 #ifdef ENABLE_COMPRESSION 163 { EXT2_COMPRBLK_FL, 'B', "Compressed_File" }, 164 { EXT2_DIRTY_FL, 'Z', "Compressed_Dirty_File" }, 165 { EXT2_NOCOMPR_FL, 'X', "Compression_Raw_Access" }, 166 { EXT2_ECOMPR_FL, 'E', "Compression_Error" }, 167 #endif 168 { EXT3_JOURNAL_DATA_FL, 'j', "Journaled_Data" }, 169 { EXT2_INDEX_FL, 'I', "Indexed_directory" }, 170 { EXT2_NOTAIL_FL, 't', "No_Tailmerging" }, 171 { EXT2_TOPDIR_FL, 'T', "Top_of_Directory_Hierarchies" }, 172 { 0, '\0', NULL } 173 }; 174 175 void print_flags(FILE *f, unsigned long flags, unsigned options) 176 { 177 const struct flags_name *fp; 178 154 "BZXE" 155 #endif 156 "I" 157 "suSDiadAcjtT"; 158 159 static const char e2attr_flags_lname[] = 160 #ifdef ENABLE_COMPRESSION 161 "Compressed_File" "\0" 162 "Compressed_Dirty_File" "\0" 163 "Compression_Raw_Access" "\0" 164 "Compression_Error" "\0" 165 #endif 166 "Indexed_directory" "\0" 167 "Secure_Deletion" "\0" 168 "Undelete" "\0" 169 "Synchronous_Updates" "\0" 170 "Synchronous_Directory_Updates" "\0" 171 "Immutable" "\0" 172 "Append_Only" "\0" 173 "No_Dump" "\0" 174 "No_Atime" "\0" 175 "Compression_Requested" "\0" 176 "Journaled_Data" "\0" 177 "No_Tailmerging" "\0" 178 "Top_of_Directory_Hierarchies" "\0" 179 /* Another trailing NUL is added by compiler */; 180 181 void print_e2flags(FILE *f, unsigned long flags, unsigned options) 182 { 183 const uint32_t *fv; 184 const char *fn; 185 186 fv = e2attr_flags_value; 179 187 if (options & PFOPT_LONG) { 180 188 int first = 1; 181 for (fp = flags_array; fp->short_name; fp++) { 182 if (flags & fp->flag) { 189 fn = e2attr_flags_lname; 190 do { 191 if (flags & *fv) { 183 192 if (!first) 184 193 fputs(", ", f); 185 fputs(f p->long_name, f);194 fputs(fn, f); 186 195 first = 0; 187 196 } 188 } 197 fv++; 198 fn += strlen(fn) + 1; 199 } while (*fn); 189 200 if (first) 190 201 fputs("---", f); 191 202 } else { 192 for (fp = flags_array; fp->short_name; fp++) { 203 fn = e2attr_flags_sname; 204 do { 193 205 char c = '-'; 194 if (flags & fp->flag)195 c = fp->short_name;206 if (flags & *fv) 207 c = *fn; 196 208 fputc(c, f); 197 } 198 } 199 } 209 fv++; 210 fn++; 211 } while (*fn); 212 } 213 }
Note:
See TracChangeset
for help on using the changeset viewer.