From 2e314136ed58b6860c667e379bef22190fe84aa2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Frings-F=C3=BCrst?= Date: Sat, 22 Nov 2025 14:50:10 +0100 Subject: New upstream version 5.2 --- src/tc-realpath.c | 52 +++++++++++++++++++--------------------------------- 1 file changed, 19 insertions(+), 33 deletions(-) (limited to 'src/tc-realpath.c') 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 #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; } -- cgit v1.2.3