Skip to content

Commit 08ba5e2

Browse files
committed
bin/xbps-uhelper: clean up error handling
1 parent b74cc39 commit 08ba5e2

File tree

2 files changed

+83
-41
lines changed

2 files changed

+83
-41
lines changed

bin/xbps-uhelper/main.c

Lines changed: 81 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
#include "../xbps-install/defs.h"
3939

4040
static 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

7272
static 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);

bin/xbps-uhelper/xbps-uhelper.1

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,8 @@ Prints the version of installed real packages.
151151
Prints the version of installed packages.
152152
.El
153153
.Sh EXIT STATUS
154-
.Ex -std
154+
.Ex
155+
A descriptive error message will be printed to stderr.
155156
Exceptions to this are:
156157
.Bl -tag -width xx
157158
.It Cm cmpver Ar instver Ar reqver

0 commit comments

Comments
 (0)