Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/pkg
Path: blob/main/src/alias.c
2065 views
1
/*-
2
* Copyright (c) 2015 Lars Engels <[email protected]>
3
* All rights reserved.
4
*
5
* Redistribution and use in source and binary forms, with or without
6
* modification, are permitted provided that the following conditions
7
* are met:
8
* 1. Redistributions of source code must retain the above copyright
9
* notice, this list of conditions and the following disclaimer
10
* in this position and unchanged.
11
* 2. Redistributions in binary form must reproduce the above copyright
12
* notice, this list of conditions and the following disclaimer in the
13
* documentation and/or other materials provided with the distribution.
14
*
15
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
16
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
17
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
18
* IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
19
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
20
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
21
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
22
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
24
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25
*/
26
27
#include <sys/param.h>
28
29
#include <err.h>
30
#include <stdio.h>
31
#include <string.h>
32
#include <unistd.h>
33
#include <getopt.h>
34
35
#include <pkg.h>
36
37
#include "pkgcli.h"
38
39
void
40
usage_alias(void)
41
{
42
fprintf(stderr, "Usage: pkg alias [-ql] [alias]\n\n");
43
fprintf(stderr, "For more information see 'pkg help alias'.\n");
44
}
45
46
int
47
exec_alias(int argc, char **argv)
48
{
49
const pkg_object *all_aliases;
50
const pkg_object *alias;
51
pkg_iter it = NULL;
52
int ch;
53
int ret = EXIT_SUCCESS;
54
bool list = false;
55
56
struct option longopts[] = {
57
{ "quiet", no_argument, NULL, 'q' },
58
{ "list", no_argument, NULL, 'l' },
59
{ NULL, 0, NULL, 0 },
60
};
61
62
while ((ch = getopt_long(argc, argv, "+ql", longopts, NULL)) != -1) {
63
switch (ch) {
64
case 'q':
65
quiet = true;
66
break;
67
case 'l':
68
list = true;
69
break;
70
default:
71
usage_alias();
72
return (EXIT_FAILURE);
73
}
74
}
75
76
argc -= optind;
77
argv += optind;
78
79
all_aliases = pkg_config_get("ALIAS");
80
81
if (argc == 0) {
82
if (!quiet && list)
83
printf("%s\n", "ALIAS");
84
else if (!quiet)
85
printf("%-20s %s\n", "ALIAS", "ARGUMENTS");
86
while ((alias = pkg_object_iterate(all_aliases, &it))) {
87
if (list)
88
printf("%s\n", pkg_object_key(alias));
89
else
90
printf("%-20s '%s'\n", pkg_object_key(alias), pkg_object_string(alias));
91
}
92
return (ret);
93
}
94
95
for (int i = 0; i < argc; i++) {
96
it = NULL;
97
while ((alias = pkg_object_iterate(all_aliases, &it))) {
98
if (STREQ(argv[i], pkg_object_key(alias)))
99
break;
100
}
101
if (alias) {
102
if (list)
103
printf("%s\n", argv[i]);
104
else
105
printf("%-20s '%s'\n", argv[i], pkg_object_string(alias));
106
} else {
107
warnx("No such alias: '%s'", argv[i]);
108
ret = EXIT_FAILURE;
109
}
110
}
111
112
return (ret);
113
}
114
115
116