summaryrefslogtreecommitdiff
path: root/src/tc-realpath.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/tc-realpath.c')
-rw-r--r--src/tc-realpath.c52
1 files changed, 19 insertions, 33 deletions
diff --git a/src/tc-realpath.c b/src/tc-realpath.c
index 4d6b79f..e4933a5 100644
--- a/src/tc-realpath.c
+++ b/src/tc-realpath.c
@@ -10,36 +10,14 @@
#include <libHX/string.h>
#include "internal.h"
-static unsigned int rp_flags;
-static unsigned int rp_absolute;
-static unsigned int rp_no_parent, rp_no_self;
-
static const struct HXoption rp_option_table[] = {
- {.sh = 'a', .type = HXTYPE_NONE, .ptr = &rp_absolute,
- .help = "Produce an absolute path"},
- {.sh = 'p', .type = HXTYPE_NONE, .ptr = &rp_no_parent,
- .help = "Deactivate resolution of \"..\" entries"},
- {.sh = 's', .type = HXTYPE_NONE, .ptr = &rp_no_self,
- .help = "Deactivate resolution of \".\" entries"},
+ {.sh = 'a', .type = HXTYPE_NONE, .help = "Produce an absolute path"},
+ {.sh = 'p', .type = HXTYPE_NONE, .help = "Deactivate resolution of \"..\" entries"},
+ {.sh = 's', .type = HXTYPE_NONE, .help = "Deactivate resolution of \".\" entries"},
HXOPT_AUTOHELP,
HXOPT_TABLEEND,
};
-static bool rp_get_options(char **oargv, int *argc, char ***argv)
-{
- if (HX_getopt5(rp_option_table, oargv, argc, argv, HXOPT_USAGEONERR) !=
- HXOPT_ERR_SUCCESS)
- return false;
- rp_flags = HX_REALPATH_DEFAULT;
- if (rp_absolute)
- rp_flags |= HX_REALPATH_ABSOLUTE;
- if (rp_no_parent)
- rp_flags &= ~HX_REALPATH_PARENT;
- if (rp_no_self)
- rp_flags &= ~HX_REALPATH_SELF;
- return true;
-}
-
static void t_1(void)
{
hxmc_t *tmp = HXmc_strinit("");
@@ -57,20 +35,28 @@ static void t_2(void)
HXmc_free(tmp);
}
-int main(int argc, char **oargv)
+int main(int argc, char **argv)
{
- char **argv = nullptr;
hxmc_t *res;
int ret;
-
- if (!rp_get_options(oargv, &argc, &argv))
- return EXIT_FAILURE;
+ struct HXopt6_result result;
+ if (HX_getopt6(rp_option_table, argc, argv, &result,
+ HXOPT_USAGEONERR | HXOPT_ITER_OA) != HXOPT_ERR_SUCCESS)
+ return false;
+ unsigned int rp_flags = HX_REALPATH_DEFAULT;
+ for (int i = 0; i < result.nopts; ++i) {
+ switch (result.desc[i]->sh) {
+ case 'a': rp_flags |= HX_REALPATH_ABSOLUTE; break;
+ case 'p': rp_flags &= ~HX_REALPATH_PARENT; break;
+ case 's': rp_flags &= ~HX_REALPATH_SELF; break;
+ }
+ }
t_1();
t_2();
res = NULL;
- for (int i = 1; i < argc; ++i) {
- ret = HX_realpath(&res, argv[argc], rp_flags);
+ for (int i = 0; i < result.nargs; ++i) {
+ ret = HX_realpath(&res, result.uarg[i], rp_flags);
if (ret < 0) {
perror("HX_realpath");
printf("\n");
@@ -78,6 +64,6 @@ int main(int argc, char **oargv)
printf("%s\n", res);
}
}
- HX_zvecfree(argv);
+ HX_getopt6_clean(&result);
return EXIT_SUCCESS;
}