summary refs log tree commit diff
diff options
context:
space:
mode:
authorJune McEnroe <june@causal.agency>2019-02-27 14:33:11 -0500
committerJune McEnroe <june@causal.agency>2019-02-27 14:33:11 -0500
commit77b946689ae949381954aa34e9ca863f54839abb (patch)
treecde17476f406809e8fc8cd8a2732aac7e5084127
parentAdd type and ulimit shell keywords (diff)
downloadsrc-77b946689ae949381954aa34e9ca863f54839abb.tar.gz
src-77b946689ae949381954aa34e9ca863f54839abb.zip
Use getsubopt(3) to parse -o options in hi
Diffstat (limited to '')
-rw-r--r--bin/hi.c22
1 files changed, 8 insertions, 14 deletions
diff --git a/bin/hi.c b/bin/hi.c
index 68a50469..3c312c4a 100644
--- a/bin/hi.c
+++ b/bin/hi.c
@@ -349,10 +349,11 @@ enum Option {
 	OptionLen,
 };
 
-static const char *OptionKey[OptionLen] = {
+static const char *OptionKey[OptionLen + 1] = {
 #define X(option, key) [option] = key,
 	ENUM_OPTION
 #undef X
+	NULL,
 };
 
 typedef void HeaderFn(const char *opts[]);
@@ -649,13 +650,6 @@ static bool findFormat(struct Format *format, const char *name) {
 	return false;
 }
 
-static bool findOption(enum Option *opt, const char *key) {
-	for (*opt = 0; *opt < OptionLen; ++*opt) {
-		if (!strcmp(key, OptionKey[*opt])) return true;
-	}
-	return false;
-}
-
 int main(int argc, char *argv[]) {
 	setlocale(LC_CTYPE, "");
 
@@ -680,14 +674,14 @@ int main(int argc, char *argv[]) {
 			}
 			break; case 'n': name = optarg;
 			break; case 'o': {
+				char *val;
 				enum Option key;
-				char *keystr, *valstr;
-				while (NULL != (valstr = strsep(&optarg, ","))) {
-					keystr = strsep(&valstr, "=");
-					if (!findOption(&key, keystr)) {
-						errx(EX_USAGE, "no such option %s", keystr);
+				while (optarg[0]) {
+					key = getsubopt(&optarg, (char *const *)OptionKey, &val);
+					if (key >= OptionLen) {
+						errx(EX_USAGE, "no such option %s", suboptarg);
 					}
-					opts[key] = (valstr ? valstr : keystr);
+					opts[key] = (val ? val : "");
 				}
 			}
 			break; default: return EX_USAGE;
pan title='2009-08-09 13:22:00 +0200'>2009-08-09Add support for repo.commit-filter and repo.source-filterLars Hjemli 2009-08-08Expose file extension in tree lists as class to allow nicer tree stylingMartin Szulecki 2009-08-08Introduce noplainemail option to hide email adresses from spambotsMartin Szulecki 2009-07-31ui-commit: add support for 'commit-filter' optionLars Hjemli 2009-07-31ui-tree: add support for source-filter optionLars Hjemli 2009-07-31ui-snapshot: use cgit_{open|close}_filter() to execute compressorsLars Hjemli 2009-07-31Add generic filter/plugin infrastructureLars Hjemli 2009-07-25Add support for mime type registration and lookupLars Hjemli 2009-07-25cgit.h: keep config flags sortedLars Hjemli 2009-07-25cgitrc.5.txt: document 'embedded' and 'noheader'Lars Hjemli 2009-07-25Add support for 'noheader' optionLars Hjemli 2009-07-25cgitrc.5.txt: document 'head-include'Lars Hjemli 2009-07-25ui-blob: return 'application/octet-stream' for binary blobsLars Hjemli 2009-07-25ui-plain: Return 'application/octet-stream' for binary files.Remko Tronçon 2009-06-11use cgit_httpscheme() for atom feedDiego Ongaro 2009-06-11add cgit_httpscheme() -> http:// or https://Diego Ongaro 2009-06-07Return http statuscode 404 on unknown branchLars Hjemli 2009-06-07Add head-include configuration option.Mark Lodato 2009-03-15CGIT 0.8.2.1Lars Hjemli 2009-03-15Fix doc-related glitches in Makefile and .gitignoreLars Hjemli 2009-03-15ui-snapshot: avoid segfault when no filename is specifiedLars Hjemli 2009-03-15fix segfault when displaying empty blobsEric Wong 2009-02-19Add support for HEAD requestsLars Hjemli 2009-02-19Add support for ETag in 'plain' viewLars Hjemli 2009-02-12ui-tree: escape ascii-text properly in hexdump viewLars Hjemli 2009-02-12Makefile: add doc-related targetsLars Hjemli