3838#include "../xbps-install/defs.h"
3939
4040static void __attribute__((noreturn ))
41- usage (void )
41+ usage (bool fail )
4242{
4343 fprintf (stdout ,
4444 "Usage: xbps-uhelper [OPTIONS] [MODE] [ARGUMENTS]\n\n"
@@ -66,7 +66,7 @@ usage(void)
6666 " version <pkgname...> Prints version of installed packages\n"
6767 " getsystemdir Prints the system xbps.d directory\n"
6868 );
69- exit (EXIT_FAILURE );
69+ exit (fail ? EXIT_FAILURE : EXIT_SUCCESS );
7070}
7171
7272static char *
@@ -104,6 +104,9 @@ main(int argc, char **argv)
104104
105105 while ((c = getopt_long (argc , argv , "C:dr:vV" , longopts , NULL )) != -1 ) {
106106 switch (c ) {
107+ case 'h' :
108+ usage (false);
109+ /* NOTREACHED */
107110 case 'C' :
108111 confdir = optarg ;
109112 break ;
@@ -120,17 +123,21 @@ main(int argc, char **argv)
120123 case 'V' :
121124 printf ("%s\n" , XBPS_RELVER );
122125 exit (EXIT_SUCCESS );
126+ /* NOTREACHED */
123127 case '?' :
124128 default :
125- usage ();
129+ usage (true);
130+ /* NOTREACHED */
126131 }
127132 }
128133
129134 argc -= optind ;
130135 argv += optind ;
131136
132- if (argc < 1 )
133- usage ();
137+ if (argc < 1 ) {
138+ usage (true);
139+ /* NOTREACHED */
140+ }
134141
135142 memset (& xh , 0 , sizeof (xh ));
136143
@@ -158,8 +165,10 @@ main(int argc, char **argv)
158165
159166 if (strcmp (argv [0 ], "version" ) == 0 ) {
160167 /* Prints version of installed packages */
161- if (argc < 2 )
162- usage ();
168+ if (argc < 2 ) {
169+ usage (true);
170+ /* NOTREACHED */
171+ }
163172
164173 for (i = 1 ; i < argc ; i ++ ) {
165174 if ((((dict = xbps_pkgdb_get_pkg (& xh , argv [i ])) == NULL )) &&
@@ -173,8 +182,10 @@ main(int argc, char **argv)
173182 }
174183 } else if (strcmp (argv [0 ], "real-version" ) == 0 ) {
175184 /* Prints version of installed real packages, not virtual */
176- if (argc < 2 )
177- usage ();
185+ if (argc < 2 ) {
186+ usage (true);
187+ /* NOTREACHED */
188+ }
178189
179190 for (i = 1 ; i < argc ; i ++ ) {
180191 if ((dict = xbps_pkgdb_get_pkg (& xh , argv [i ])) == NULL ) {
@@ -187,8 +198,10 @@ main(int argc, char **argv)
187198 }
188199 } else if (strcmp (argv [0 ], "getpkgversion" ) == 0 ) {
189200 /* Returns the version of pkg strings */
190- if (argc < 2 )
191- usage ();
201+ if (argc < 2 ) {
202+ usage (true);
203+ /* NOTREACHED */
204+ }
192205
193206 for (i = 1 ; i < argc ; i ++ ) {
194207 version = xbps_pkg_version (argv [i ]);
@@ -202,8 +215,10 @@ main(int argc, char **argv)
202215 }
203216 } else if (strcmp (argv [0 ], "getpkgname" ) == 0 ) {
204217 /* Returns the name of pkg strings */
205- if (argc < 2 )
206- usage ();
218+ if (argc < 2 ) {
219+ usage (true);
220+ /* NOTREACHED */
221+ }
207222
208223 for (i = 1 ; i < argc ; i ++ ) {
209224 if (!xbps_pkg_name (pkgname , sizeof (pkgname ), argv [i ])) {
@@ -216,8 +231,10 @@ main(int argc, char **argv)
216231 }
217232 } else if (strcmp (argv [0 ], "getpkgrevision" ) == 0 ) {
218233 /* Returns the revision of pkg strings */
219- if (argc < 2 )
220- usage ();
234+ if (argc < 2 ) {
235+ usage (true);
236+ /* NOTREACHED */
237+ }
221238
222239 for (i = 1 ; i < argc ; i ++ ) {
223240 version = xbps_pkg_revision (argv [1 ]);
@@ -229,8 +246,10 @@ main(int argc, char **argv)
229246 }
230247 } else if (strcmp (argv [0 ], "getpkgdepname" ) == 0 ) {
231248 /* Returns the pkgname of dependencies */
232- if (argc < 2 )
233- usage ();
249+ if (argc < 2 ) {
250+ usage (true);
251+ /* NOTREACHED */
252+ }
234253
235254 for (i = 1 ; i < argc ; i ++ ) {
236255 if (!xbps_pkgpattern_name (pkgname , sizeof (pkgname ), argv [i ])) {
@@ -242,8 +261,10 @@ main(int argc, char **argv)
242261 }
243262 } else if (strcmp (argv [0 ], "getpkgdepversion" ) == 0 ) {
244263 /* returns the version of package pattern dependencies */
245- if (argc < 2 )
246- usage ();
264+ if (argc < 2 ) {
265+ usage (true);
266+ /* NOTREACHED */
267+ }
247268
248269 for (i = 1 ; i < argc ; i ++ ) {
249270 version = xbps_pkgpattern_version (argv [i ]);
@@ -256,8 +277,10 @@ main(int argc, char **argv)
256277 }
257278 } else if (strcmp (argv [0 ], "getname" ) == 0 ) {
258279 /* returns the name of a pkg strings or pkg patterns */
259- if (argc < 2 )
260- usage ();
280+ if (argc < 2 ) {
281+ usage (true);
282+ /* NOTREACHED */
283+ }
261284
262285 for (i = 1 ; i < argc ; i ++ ) {
263286 if (xbps_pkgpattern_name (pkgname , sizeof (pkgname ), argv [i ]) ||
@@ -272,8 +295,10 @@ main(int argc, char **argv)
272295 }
273296 } else if (strcmp (argv [0 ], "getversion" ) == 0 ) {
274297 /* returns the version of a pkg strings or pkg patterns */
275- if (argc < 2 )
276- usage ();
298+ if (argc < 2 ) {
299+ usage (true);
300+ /* NOTREACHED */
301+ }
277302
278303 for (i = 1 ; i < argc ; i ++ ) {
279304 version = xbps_pkgpattern_version (argv [i ]);
@@ -291,8 +316,10 @@ main(int argc, char **argv)
291316 }
292317 } else if (strcmp (argv [0 ], "binpkgver" ) == 0 ) {
293318 /* Returns the pkgver of binpkg strings */
294- if (argc < 2 )
295- usage ();
319+ if (argc < 2 ) {
320+ usage (true);
321+ /* NOTREACHED */
322+ }
296323
297324 for (i = 1 ; i < argc ; i ++ ) {
298325 version = xbps_binpkg_pkgver (argv [i ]);
@@ -306,8 +333,10 @@ main(int argc, char **argv)
306333 }
307334 } else if (strcmp (argv [0 ], "binpkgarch" ) == 0 ) {
308335 /* Returns the arch of binpkg strings */
309- if (argc < 2 )
310- usage ();
336+ if (argc < 2 ) {
337+ usage (true);
338+ /* NOTREACHED */
339+ }
311340
312341 for (i = 1 ; i < argc ; i ++ ) {
313342 version = xbps_binpkg_arch (argv [i ]);
@@ -321,8 +350,10 @@ main(int argc, char **argv)
321350 }
322351 } else if (strcmp (argv [0 ], "pkgmatch" ) == 0 ) {
323352 /* Matches a pkg with a pattern */
324- if (argc != 3 )
325- usage ();
353+ if (argc != 3 ) {
354+ usage (true);
355+ /* NOTREACHED */
356+ }
326357 rv = xbps_pkgpattern_match (argv [1 ], argv [2 ]);
327358 if (flags & XBPS_FLAG_VERBOSE ) {
328359 if (rv >= 0 )
@@ -336,8 +367,10 @@ main(int argc, char **argv)
336367 exit (rv );
337368 } else if (strcmp (argv [0 ], "cmpver" ) == 0 ) {
338369 /* Compare two version strings, installed vs required */
339- if (argc != 3 )
340- usage ();
370+ if (argc != 3 ) {
371+ usage (true);
372+ /* NOTREACHED */
373+ }
341374
342375 rv = xbps_cmpver (argv [1 ], argv [2 ]);
343376 if (flags & XBPS_FLAG_VERBOSE )
@@ -348,8 +381,10 @@ main(int argc, char **argv)
348381 exit (rv );
349382 } else if (strcmp (argv [0 ], "arch" ) == 0 ) {
350383 /* returns the xbps native arch */
351- if (argc != 1 )
352- usage ();
384+ if (argc != 1 ) {
385+ usage (true);
386+ /* NOTREACHED */
387+ }
353388
354389 if (xh .native_arch [0 ] && xh .target_arch && strcmp (xh .native_arch , xh .target_arch )) {
355390 printf ("%s\n" , xh .target_arch );
@@ -358,16 +393,20 @@ main(int argc, char **argv)
358393 }
359394 } else if (strcmp (argv [0 ], "getsystemdir" ) == 0 ) {
360395 /* returns the xbps system directory (<sharedir>/xbps.d) */
361- if (argc != 1 )
362- usage ();
396+ if (argc != 1 ) {
397+ usage (true);
398+ /* NOTREACHED */
399+ }
363400
364401 printf ("%s\n" , XBPS_SYSDEFCONF_PATH );
365402 } else if (strcmp (argv [0 ], "digest" ) == 0 ) {
366403 char sha256 [XBPS_SHA256_SIZE ];
367404
368405 /* Prints SHA256 hashes for specified files */
369- if (argc < 2 )
370- usage ();
406+ if (argc < 2 ) {
407+ usage (true);
408+ /* NOTREACHED */
409+ }
371410
372411 for (i = 1 ; i < argc ; i ++ ) {
373412 if (!xbps_file_sha256 (sha256 , sizeof sha256 , argv [i ])) {
@@ -380,8 +419,10 @@ main(int argc, char **argv)
380419 }
381420 } else if (strcmp (argv [0 ], "fetch" ) == 0 ) {
382421 /* Fetch a file from specified URL */
383- if (argc < 2 )
384- usage ();
422+ if (argc < 2 ) {
423+ usage (true);
424+ /* NOTREACHED */
425+ }
385426
386427 for (i = 1 ; i < argc ; i ++ ) {
387428 filename = fname (argv [i ]);
@@ -397,7 +438,7 @@ main(int argc, char **argv)
397438 }
398439 }
399440 } else {
400- usage ();
441+ usage (true );
401442 }
402443
403444 exit (rv ? EXIT_FAILURE : EXIT_SUCCESS );
0 commit comments