Returns 1 if option not set. Returns 1 with error to stderr if flag does not exist. Case insensitive. Signed-off-by: Matthew Sexton <wsdmatty@gmail.com> --- src/pacman/pacman-conf.c | 44 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 42 insertions(+), 2 deletions(-) diff --git a/src/pacman/pacman-conf.c b/src/pacman/pacman-conf.c index efc62cdd..ada4bd9f 100644 --- a/src/pacman/pacman-conf.c +++ b/src/pacman/pacman-conf.c @@ -25,7 +25,7 @@ const char *myname = "pacman-conf", *myver = "1.0.0"; alpm_list_t *directives = NULL; -char sep = '\n', *repo_name = NULL; +char sep = '\n', *repo_name = NULL, *check_name = NULL; const char *config_file = NULL; int repo_list = 0, verbose = 0; @@ -47,6 +47,7 @@ static void usage(int ret) fputs(_(" -r, --repo=<remote> query options for a specific repo\n"), stream); fputs(_(" -v, --verbose always show directive names\n"), stream); fputs(_(" -l, --repo-list list configured repositories\n"), stream); + fputs(_(" -i, --is-set returns 0 (successful) if config flag is set\n"), stream); fputs(_(" -h, --help display this help information\n"), stream); fputs(_(" -V, --version display version information\n"), stream); cleanup(); @@ -58,7 +59,7 @@ static void parse_opts(int argc, char **argv) int c; config_file = CONFFILE; - const char *short_opts = "c:hlR:r:Vv"; + const char *short_opts = "c:h:i:lR:r:Vv"; struct option long_opts[] = { { "config" , required_argument , NULL , 'c' }, { "rootdir" , required_argument , NULL , 'R' }, @@ -67,6 +68,7 @@ static void parse_opts(int argc, char **argv) { "verbose" , no_argument , NULL , 'v' }, { "help" , no_argument , NULL , 'h' }, { "version" , no_argument , NULL , 'V' }, + { "is-set" , required_argument , NULL , 'i' }, { 0, 0, 0, 0 }, }; @@ -99,6 +101,9 @@ static void parse_opts(int argc, char **argv) cleanup(); exit(0); break; + case 'i': + check_name = optarg; + break; case '?': default: usage(1); @@ -391,6 +396,39 @@ static int list_directives(void) return ret; } +static int check_config_flags( void ) +{ + /* 1 = flag-not-set. Regardless of whether flag exists or not */ + int ret = 1; + short value; + + if (strcasecmp(check_name, "Color") == 0) { + value = config->color; + } else if (strcasecmp(check_name, "UseSyslog") == 0) { + value = config->usesyslog; + } else if (strcasecmp(check_name, "TotalDownload") == 0) { + value = config->totaldownload; + } else if (strcasecmp(check_name, "CheckSpace") == 0) { + value = config->checkspace; + } else if (strcasecmp(check_name, "VerbosePkgLists") == 0) { + value = config->verbosepkglists; + } else if (strcasecmp(check_name, "DisableDownloadTimeout") == 0) { + value = config->disable_dl_timeout; + } else if (strcasecmp(check_name, "ILoveCandy") == 0) { + value = config->chomp; + } else { + value = -1; + } + + if (value == -1) { + fprintf(stderr, _("error: unknown config option '%s'\n"), check_name); + ret = 1; + } else { + ret = !value; + } + return ret; +} + int main(int argc, char **argv) { int ret = 0; @@ -427,6 +465,8 @@ int main(int argc, char **argv) list_repos(); } else if(repo_name) { ret = list_repo_directives(); + } else if (check_name) { + ret = check_config_flags(); } else { ret = list_directives(); } -- 2.23.0