Skip to content

Commit 20a9977

Browse files
committed
bin/xbps-uhelper: allow multiple arguments for many actions
1 parent 6de3c0f commit 20a9977

File tree

1 file changed

+52
-35
lines changed

1 file changed

+52
-35
lines changed

bin/xbps-uhelper/main.c

Lines changed: 52 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ main(int argc, char **argv)
103103
struct xferstat xfer;
104104
const char *version, *rootdir = NULL, *confdir = NULL;
105105
char pkgname[XBPS_NAME_SIZE], *filename;
106-
int flags = 0, c, rv = 0;
106+
int flags = 0, c, rv = 0, i = 0;
107107
const struct option longopts[] = {
108108
{ NULL, 0, NULL, 0 }
109109
};
@@ -160,59 +160,76 @@ main(int argc, char **argv)
160160
}
161161

162162
if (strcmp(argv[0], "version") == 0) {
163-
/* Prints version of an installed package */
164-
if (argc != 2)
163+
/* Prints version of installed packages */
164+
if (argc < 2)
165165
usage();
166166

167-
if ((((dict = xbps_pkgdb_get_pkg(&xh, argv[1])) == NULL)) &&
168-
(((dict = xbps_pkgdb_get_virtualpkg(&xh, argv[1])) == NULL)))
169-
exit(EXIT_FAILURE);
170-
171-
xbps_dictionary_get_cstring_nocopy(dict, "pkgver", &version);
172-
printf("%s\n", xbps_pkg_version(version));
167+
for (i = 1; i < argc; i++) {
168+
if ((((dict = xbps_pkgdb_get_pkg(&xh, argv[i])) == NULL)) &&
169+
(((dict = xbps_pkgdb_get_virtualpkg(&xh, argv[i])) == NULL))) {
170+
xbps_error_printf("Could not find package '%s'\n", argv[i])
171+
rv = 1;
172+
} else {
173+
xbps_dictionary_get_cstring_nocopy(dict, "pkgver", &version);
174+
printf("%s\n", xbps_pkg_version(version));
175+
}
176+
}
173177
} else if (strcmp(argv[0], "real-version") == 0) {
174-
/* Prints version of an installed real package, not virtual */
175-
if (argc != 2)
178+
/* Prints version of installed real packages, not virtual */
179+
if (argc < 2)
176180
usage();
177181

178-
if ((dict = xbps_pkgdb_get_pkg(&xh, argv[1])) == NULL)
179-
exit(EXIT_FAILURE);
180-
181-
xbps_dictionary_get_cstring_nocopy(dict, "pkgver", &version);
182-
printf("%s\n", xbps_pkg_version(version));
182+
for (i = 1; i < argc; i++) {
183+
if ((dict = xbps_pkgdb_get_pkg(&xh, argv[i])) == NULL) {
184+
xbps_error_printf("Could not find package '%s'\n", argv[i])
185+
rv = 1;
186+
} else {
187+
xbps_dictionary_get_cstring_nocopy(dict, "pkgver", &version);
188+
printf("%s\n", xbps_pkg_version(version));
189+
}
190+
}
183191
} else if (strcmp(argv[0], "getpkgversion") == 0) {
184192
/* Returns the version of a pkg string */
185-
if (argc != 2)
193+
if (argc < 2)
186194
usage();
187195

188-
version = xbps_pkg_version(argv[1]);
189-
if (version == NULL) {
190-
fprintf(stderr,
191-
"Invalid string, expected <string>-<version>_<revision>\n");
192-
exit(EXIT_FAILURE);
196+
for (i = 1; i < argc; i++) {
197+
version = xbps_pkg_version(argv[i]);
198+
if (version == NULL) {
199+
xbps_error_printf(
200+
"Invalid string '%s', expected <string>-<version>_<revision>\n", argv[i]);
201+
rv = 1;
202+
} else {
203+
printf("%s\n", version);
204+
}
193205
}
194-
printf("%s\n", version);
195206
} else if (strcmp(argv[0], "getpkgname") == 0) {
196207
/* Returns the name of a pkg string */
197-
if (argc != 2)
208+
if (argc < 2)
198209
usage();
199210

200-
if (!xbps_pkg_name(pkgname, sizeof(pkgname), argv[1])) {
201-
fprintf(stderr,
202-
"Invalid string, expected <string>-<version>_<revision>\n");
203-
exit(EXIT_FAILURE);
211+
for (i = 1; i < argc; i++) {
212+
if (!xbps_pkg_name(pkgname, sizeof(pkgname), argv[i])) {
213+
fprintf(stderr,
214+
"Invalid string '%s', expected <string>-<version>_<revision>\n", argv[i]);
215+
rv = 1;
216+
} else {
217+
printf("%s\n", pkgname);
218+
}
204219
}
205-
printf("%s\n", pkgname);
206220
} else if (strcmp(argv[0], "getpkgrevision") == 0) {
207221
/* Returns the revision of a pkg string */
208-
if (argc != 2)
222+
if (argc < 2)
209223
usage();
210224

211-
version = xbps_pkg_revision(argv[1]);
212-
if (version == NULL)
213-
exit(EXIT_SUCCESS);
214-
215-
printf("%s\n", version);
225+
for (i = 1; i < argc; i++) {
226+
version = xbps_pkg_revision(argv[1]);
227+
if (version == NULL) {
228+
rv = 1;
229+
} else {
230+
printf("%s\n", version);
231+
}
232+
}
216233
} else if (strcmp(argv[0], "getpkgdepname") == 0) {
217234
/* Returns the pkgname of a dependency */
218235
if (argc != 2)

0 commit comments

Comments
 (0)