L4Re/departure

libext2fs/lib/libe2p/pf.c

617:2733e5770ee9
9 months ago Paul Boddie Made the run command wait for completion, introducing the spawn command to run programs in the background. Introduced conveniences for waiting for the last job to be initiated and for piping from the last job, also subscribing to signals from pipe-supplying jobs so that they may be transparently removed from the job list upon completion. Augmented the job listing with the "+" notation familiar from Unix. Prevented new jobs from being started when no job slots are available.
     1 /*     2  * pf.c			- Print file attributes on an ext2 file system     3  *     4  * Copyright (C) 1993, 1994  Remy Card <card@masi.ibp.fr>     5  *                           Laboratoire MASI, Institut Blaise Pascal     6  *                           Universite Pierre et Marie Curie (Paris VI)     7  *     8  * %Begin-Header%     9  * This file may be redistributed under the terms of the GNU Library    10  * General Public License, version 2.    11  * %End-Header%    12  */    13     14 /*    15  * History:    16  * 93/10/30	- Creation    17  */    18     19 #include "config.h"    20 #include <stdio.h>    21     22 #include "e2p.h"    23     24 struct flags_name {    25 	unsigned long	flag;    26 	const char	*short_name;    27 	const char	*long_name;    28 };    29     30 static struct flags_name flags_array[] = {    31 	{ EXT2_SECRM_FL, "s", "Secure_Deletion" },    32 	{ EXT2_UNRM_FL, "u" , "Undelete" },    33 	{ EXT2_SYNC_FL, "S", "Synchronous_Updates" },    34 	{ EXT2_DIRSYNC_FL, "D", "Synchronous_Directory_Updates" },    35 	{ EXT2_IMMUTABLE_FL, "i", "Immutable" },    36 	{ EXT2_APPEND_FL, "a", "Append_Only" },    37 	{ EXT2_NODUMP_FL, "d", "No_Dump" },    38 	{ EXT2_NOATIME_FL, "A", "No_Atime" },    39 	{ EXT2_COMPR_FL, "c", "Compression_Requested" },    40 	{ EXT4_ENCRYPT_FL, "E", "Encrypted" },    41 	{ EXT3_JOURNAL_DATA_FL, "j", "Journaled_Data" },    42 	{ EXT2_INDEX_FL, "I", "Indexed_directory" },    43 	{ EXT2_NOTAIL_FL, "t", "No_Tailmerging" },    44 	{ EXT2_TOPDIR_FL, "T", "Top_of_Directory_Hierarchies" },    45 	{ EXT4_EXTENTS_FL, "e", "Extents" },    46 	{ FS_NOCOW_FL, "C", "No_COW" },    47 	{ FS_DAX_FL, "x", "DAX" },    48 	{ EXT4_CASEFOLD_FL, "F", "Casefold" },    49 	{ EXT4_INLINE_DATA_FL, "N", "Inline_Data" },    50 	{ EXT4_PROJINHERIT_FL, "P", "Project_Hierarchy" },    51 	{ EXT4_VERITY_FL, "V", "Verity" },    52 	{ EXT2_NOCOMPR_FL, "m", "Dont_Compress" },    53 	{ 0, NULL, NULL }    54 };    55     56 void print_flags (FILE * f, unsigned long flags, unsigned options)    57 {    58 	int long_opt = (options & PFOPT_LONG);    59 	struct flags_name *fp;    60 	int	first = 1;    61     62 	for (fp = flags_array; fp->flag != 0; fp++) {    63 		if (flags & fp->flag) {    64 			if (long_opt) {    65 				if (first)    66 					first = 0;    67 				else    68 					fputs(", ", f);    69 				fputs(fp->long_name, f);    70 			} else    71 				fputs(fp->short_name, f);    72 		} else {    73 			if (!long_opt)    74 				fputs("-", f);    75 		}    76 	}    77 	if (long_opt && first)    78 		fputs("---", f);    79 }