@@ -101,7 +101,7 @@ static CommandLineStatus parseArguments(int argc, char** argv, CommandLineSettin
101101 .pidMatchList = NULL ,
102102 .commFilter = NULL ,
103103 .stateFilter = NULL ,
104- .userId = (uid_t )- 1 , // -1 is guaranteed to be an invalid uid_t (see setreuid(2))
104+ .userId = (uid_t ) - 1 , // -1 is guaranteed to be an invalid uid_t (see setreuid(2))
105105 .sortKey = 0 ,
106106 .delay = -1 ,
107107 .iterationsRemaining = -1 ,
@@ -145,184 +145,184 @@ static CommandLineStatus parseArguments(int argc, char** argv, CommandLineSettin
145145 break ;
146146
147147 switch (opt ) {
148- case 'h' :
149- printHelpFlag (program );
150- return STATUS_OK_EXIT ;
151- case 'V' :
152- printVersionFlag (program );
153- return STATUS_OK_EXIT ;
154- case 's' :
155- assert (optarg ); /* please clang analyzer, cause optarg can be NULL in the 'u' case */
156- if (String_eq (optarg , "help" )) {
157- for (int j = 1 ; j < LAST_PROCESSFIELD ; j ++ ) {
158- const char * name = Process_fields [j ].name ;
159- const char * description = Process_fields [j ].description ;
160- if (name )
161- printf ("%19s %s\n" , name , description );
162- }
163- return STATUS_OK_EXIT ;
164- }
165- flags -> sortKey = 0 ;
148+ case 'h' :
149+ printHelpFlag (program );
150+ return STATUS_OK_EXIT ;
151+ case 'V' :
152+ printVersionFlag (program );
153+ return STATUS_OK_EXIT ;
154+ case 's' :
155+ assert (optarg ); /* please clang analyzer, cause optarg can be NULL in the 'u' case */
156+ if (String_eq (optarg , "help" )) {
166157 for (int j = 1 ; j < LAST_PROCESSFIELD ; j ++ ) {
167- if (Process_fields [j ].name == NULL )
168- continue ;
169- if (String_eq (optarg , Process_fields [j ].name )) {
170- flags -> sortKey = j ;
171- break ;
172- }
158+ const char * name = Process_fields [j ].name ;
159+ const char * description = Process_fields [j ].description ;
160+ if (name )
161+ printf ("%19s %s\n" , name , description );
173162 }
174- if (flags -> sortKey == 0 ) {
175- fprintf (stderr , "Error: invalid column \"%s\".\n" , optarg );
176- return STATUS_ERROR_EXIT ;
163+ return STATUS_OK_EXIT ;
164+ }
165+ flags -> sortKey = 0 ;
166+ for (int j = 1 ; j < LAST_PROCESSFIELD ; j ++ ) {
167+ if (Process_fields [j ].name == NULL )
168+ continue ;
169+ if (String_eq (optarg , Process_fields [j ].name )) {
170+ flags -> sortKey = j ;
171+ break ;
177172 }
178- break ;
179- case 'd' :
180- if (sscanf (optarg , "%16d" , & (flags -> delay )) == 1 ) {
181- if (flags -> delay < 1 )
182- flags -> delay = 1 ;
183- if (flags -> delay > 100 )
184- flags -> delay = 100 ;
185- } else {
186- fprintf (stderr , "Error: invalid delay value \"%s\".\n" , optarg );
173+ }
174+ if (flags -> sortKey == 0 ) {
175+ fprintf (stderr , "Error: invalid column \"%s\".\n" , optarg );
176+ return STATUS_ERROR_EXIT ;
177+ }
178+ break ;
179+ case 'd' :
180+ if (sscanf (optarg , "%16d" , & (flags -> delay )) == 1 ) {
181+ if (flags -> delay < 1 )
182+ flags -> delay = 1 ;
183+ if (flags -> delay > 100 )
184+ flags -> delay = 100 ;
185+ } else {
186+ fprintf (stderr , "Error: invalid delay value \"%s\".\n" , optarg );
187+ return STATUS_ERROR_EXIT ;
188+ }
189+ break ;
190+ case 'n' :
191+ if (sscanf (optarg , "%16d" , & flags -> iterationsRemaining ) == 1 ) {
192+ if (flags -> iterationsRemaining <= 0 ) {
193+ fprintf (stderr , "Error: maximum iteration count must be positive.\n" );
187194 return STATUS_ERROR_EXIT ;
188195 }
189- break ;
190- case 'n' :
191- if (sscanf (optarg , "%16d" , & flags -> iterationsRemaining ) == 1 ) {
192- if (flags -> iterationsRemaining <= 0 ) {
193- fprintf (stderr , "Error: maximum iteration count must be positive.\n" );
196+ } else {
197+ fprintf (stderr , "Error: invalid maximum iteration count \"%s\".\n" , optarg );
198+ return STATUS_ERROR_EXIT ;
199+ }
200+ break ;
201+ case 'u' : {
202+ const char * username = optarg ;
203+ if (!username && optind < argc && argv [optind ] != NULL &&
204+ (argv [optind ][0 ] != '\0' && argv [optind ][0 ] != '-' )) {
205+ username = argv [optind ++ ];
206+ }
207+
208+ if (!username ) {
209+ flags -> userId = geteuid ();
210+ } else if (!Action_setUserOnly (username , & (flags -> userId ))) {
211+ for (const char * itr = username ; * itr ; ++ itr )
212+ if (!isdigit ((unsigned char )* itr )) {
213+ fprintf (stderr , "Error: invalid user \"%s\".\n" , username );
194214 return STATUS_ERROR_EXIT ;
195215 }
196- } else {
197- fprintf (stderr , "Error: invalid maximum iteration count \"%s\".\n" , optarg );
198- return STATUS_ERROR_EXIT ;
199- }
200- break ;
201- case 'u' : {
202- const char * username = optarg ;
203- if (!username && optind < argc && argv [optind ] != NULL &&
204- (argv [optind ][0 ] != '\0' && argv [optind ][0 ] != '-' )) {
205- username = argv [optind ++ ];
206- }
207-
208- if (!username ) {
209- flags -> userId = geteuid ();
210- } else if (!Action_setUserOnly (username , & (flags -> userId ))) {
211- for (const char * itr = username ; * itr ; ++ itr )
212- if (!isdigit ((unsigned char )* itr )) {
213- fprintf (stderr , "Error: invalid user \"%s\".\n" , username );
214- return STATUS_ERROR_EXIT ;
215- }
216- flags -> userId = atol (username );
217- }
218- break ;
216+ flags -> userId = atol (username );
219217 }
220- case 'C' :
221- flags -> useColors = false;
222- break ;
223- case 'M' :
218+ break ;
219+ }
220+ case 'C' :
221+ flags -> useColors = false;
222+ break ;
223+ case 'M' :
224224#ifdef HAVE_GETMOUSE
225- flags -> enableMouse = false;
225+ flags -> enableMouse = false;
226226#endif
227- break ;
228- case 'U' :
229- flags -> allowUnicode = false;
230- break ;
231- case 't' :
232- flags -> treeView = true;
233- break ;
234- case 'p' : {
235- assert (optarg ); /* please clang analyzer, cause optarg can be NULL in the 'u' case */
236- char * argCopy = xStrdup (optarg );
237- char * saveptr ;
238- const char * pid = strtok_r (argCopy , "," , & saveptr );
239-
240- if (!flags -> pidMatchList ) {
241- flags -> pidMatchList = Hashtable_new (8 , false);
242- }
243-
244- while (pid ) {
245- unsigned int num_pid = atoi (pid );
246- // deepcode ignore CastIntegerToAddress: we just want a non-NULL pointer here
247- Hashtable_put (flags -> pidMatchList , num_pid , (void * ) 1 );
248- pid = strtok_r (NULL , "," , & saveptr );
249- }
250- free (argCopy );
227+ break ;
228+ case 'U' :
229+ flags -> allowUnicode = false;
230+ break ;
231+ case 't' :
232+ flags -> treeView = true;
233+ break ;
234+ case 'p' : {
235+ assert (optarg ); /* please clang analyzer, cause optarg can be NULL in the 'u' case */
236+ char * argCopy = xStrdup (optarg );
237+ char * saveptr ;
238+ const char * pid = strtok_r (argCopy , "," , & saveptr );
239+
240+ if (!flags -> pidMatchList ) {
241+ flags -> pidMatchList = Hashtable_new (8 , false);
242+ }
251243
252- break ;
244+ while (pid ) {
245+ unsigned int num_pid = atoi (pid );
246+ // deepcode ignore CastIntegerToAddress: we just want a non-NULL pointer here
247+ Hashtable_put (flags -> pidMatchList , num_pid , (void * ) 1 );
248+ pid = strtok_r (NULL , "," , & saveptr );
253249 }
254- case 'F' :
255- assert (optarg );
256- if (optarg [0 ] == '\0' || optarg [0 ] == '|' ) {
257- fprintf (stderr , "Error: invalid filter value \"%s\".\n" , optarg );
258- return STATUS_ERROR_EXIT ;
259- }
260- free_and_xStrdup (& flags -> commFilter , optarg );
261- break ;
262-
263- case 'S' :
264- //ensures that optarg is not NULL
265- assert (optarg );
266-
267- // check if the argument is empty
268- if (optarg [0 ] == '\0' ) {
269- fprintf (stderr , "Error: state filter cannot be empty.\n" );
270- return STATUS_ERROR_EXIT ;
271- }
272-
273- // for each character in optarg:
274- // - check if it corresponds to a valid ProcessState enum value
275- // - if any character is invalid, print an error and exit
276- for (char * c = optarg ; * c != '\0' ; c ++ ) {
277- int valid = 0 ;
278-
279- // test all ProcessState enum values
280- for (ProcessState s = UNKNOWN ; s <= SLEEPING ; s ++ ) {
281- if (* c == processStateChar (s )) {
282- valid = 1 ; // character is valid
283- break ;
284- }
285- }
250+ free (argCopy );
286251
287- // if character is invalid, report error and exit
288- if (!valid ) {
289- fprintf (stderr , "Error: invalid state filter value \"%s\".\n" , optarg );
252+ break ;
253+ }
254+ case 'F' :
255+ assert (optarg );
256+ if (optarg [0 ] == '\0' || optarg [0 ] == '|' ) {
257+ fprintf (stderr , "Error: invalid filter value \"%s\".\n" , optarg );
290258 return STATUS_ERROR_EXIT ;
291- }
292- }
259+ }
260+ free_and_xStrdup (& flags -> commFilter , optarg );
261+ break ;
293262
294- free_and_xStrdup (& flags -> stateFilter , optarg );
295- break ;
263+ case 'S' :
264+ //ensures that optarg is not NULL
265+ assert (optarg );
296266
267+ // check if the argument is empty
268+ if (optarg [0 ] == '\0' ) {
269+ fprintf (stderr , "Error: state filter cannot be empty.\n" );
270+ return STATUS_ERROR_EXIT ;
271+ }
297272
298- case 'H' : {
299- const char * delay = optarg ;
300- if (!delay && optind < argc && argv [optind ] != NULL &&
301- (argv [optind ][0 ] != '\0' && argv [optind ][0 ] != '-' )) {
302- delay = argv [optind ++ ];
303- }
304- if (delay ) {
305- if (sscanf (delay , "%16d" , & (flags -> highlightDelaySecs )) == 1 ) {
306- if (flags -> highlightDelaySecs < 1 )
307- flags -> highlightDelaySecs = 1 ;
308- } else {
309- fprintf (stderr , "Error: invalid highlight delay value \"%s\".\n" , delay );
310- return STATUS_ERROR_EXIT ;
273+ // for each character in optarg:
274+ // - check if it corresponds to a valid ProcessState enum value
275+ // - if any character is invalid, print an error and exit
276+ for (char * c = optarg ; * c != '\0' ; c ++ ) {
277+ int valid = 0 ;
278+
279+ // test all ProcessState enum values
280+ for (ProcessState s = UNKNOWN ; s <= SLEEPING ; s ++ ) {
281+ if (* c == processStateChar (s )) {
282+ valid = 1 ; // character is valid
283+ break ;
311284 }
312285 }
313- flags -> highlightChanges = true;
314- break ;
286+
287+ // if character is invalid, report error and exit
288+ if (!valid ) {
289+ fprintf (stderr , "Error: invalid state filter value \"%s\".\n" , optarg );
290+ return STATUS_ERROR_EXIT ;
291+ }
315292 }
316- case 128 :
317- flags -> readonly = true;
318- break ;
319-
320- default : {
321- CommandLineStatus status ;
322- if ((status = Platform_getLongOption (opt , argc , argv )) != STATUS_OK )
323- return status ;
324- break ;
293+
294+ free_and_xStrdup (& flags -> stateFilter , optarg );
295+ break ;
296+
297+
298+ case 'H' : {
299+ const char * delay = optarg ;
300+ if (!delay && optind < argc && argv [optind ] != NULL &&
301+ (argv [optind ][0 ] != '\0' && argv [optind ][0 ] != '-' )) {
302+ delay = argv [optind ++ ];
303+ }
304+ if (delay ) {
305+ if (sscanf (delay , "%16d" , & (flags -> highlightDelaySecs )) == 1 ) {
306+ if (flags -> highlightDelaySecs < 1 )
307+ flags -> highlightDelaySecs = 1 ;
308+ } else {
309+ fprintf (stderr , "Error: invalid highlight delay value \"%s\".\n" , delay );
310+ return STATUS_ERROR_EXIT ;
311+ }
325312 }
313+ flags -> highlightChanges = true;
314+ break ;
315+ }
316+ case 128 :
317+ flags -> readonly = true;
318+ break ;
319+
320+ default : {
321+ CommandLineStatus status ;
322+ if ((status = Platform_getLongOption (opt , argc , argv )) != STATUS_OK )
323+ return status ;
324+ break ;
325+ }
326326 }
327327 }
328328
@@ -424,7 +424,7 @@ int CommandLine_run(int argc, char** argv) {
424424 };
425425 if (flags .stateFilter ) {
426426 free_and_xStrdup (& settings -> stateFilter , flags .stateFilter );
427- }
427+ }
428428
429429 MainPanel_setState (panel , & state );
430430 if (flags .commFilter )
0 commit comments