чување 4bd161a8e84d6fbfa9b56218e5b87eade6e4def6
родитељ 670e57e9d5688d10356bc76c902645db8b079ba9
Аутор: Страхиња Радић <contact@strahinja.org>
Датум: Wed, 19 Jul 2023 15:09:26 +0200
slweb.c(process_incdir): Bugfix: make all optional params optional; optimize
Signed-off-by: Страхиња Радић <contact@strahinja.org>
Diffstat:
| M | slweb.c | | | 44 | +++++++++++++++----------------------------- |
измењених датотека: 1, додавања: 15(+), брисања: 29(-)
diff --git a/slweb.c b/slweb.c
@@ -1798,6 +1798,8 @@ process_incdir(FILE* output, const u8* token, const u8* link_prefix,
long names_output;
int details_open = 1;
int list_only = 0;
+ int pass;
+ u8* parg = NULL;
if (read_yaml_macros_and_links)
return 0;
@@ -1815,20 +1817,24 @@ process_incdir(FILE* output, const u8* token, const u8* link_prefix,
incdir = strdup((char*)(arg + 1));
*(incdir + strlen(incdir) - 1) = 0; /* trim ending " */
+ pass = 0;
+
+incdir_next_arg:
arg = (u8*)strtok_r(NULL, " ", (char**)&saveptr);
if (!arg)
- goto skip_arg;
+ goto incdir_done_args;
- if (*arg == '=')
+ parg = arg;
+ if (*parg == '=')
macro_body = get_value(macros, macros_count, arg + 1);
+ else if (!strcmp((const char*)arg, "listonly"))
+ list_only = 1;
else
{
- u8* parg = arg;
while (parg && *parg)
{
if (*parg < '0' || *parg > '9')
- exit(error(1,
- (u8*)"incdir: Non-numeric argument"));
+ exit(error(1, (u8*)"incdir: Invalid argument"));
parg++;
}
errno = 0;
@@ -1836,32 +1842,12 @@ process_incdir(FILE* output, const u8* token, const u8* link_prefix,
if (errno)
exit(error(errno,
(u8*)"incdir: Invalid parameter 'num'"));
- arg = (u8*)strtok_r(NULL, " ", (char**)&saveptr);
- if (arg)
- {
- if (*arg != '=')
- {
- free(incdir);
- exit(error(1,
- (u8*)"incdir: Third argument not "
- "macro"));
- }
- macro_body = get_value(macros, macros_count, arg + 1);
- }
- }
-
- if (!arg)
- goto skip_arg;
- arg = (u8*)strtok_r(NULL, " ", (char**)&saveptr);
- if (arg)
- {
- if (!strcmp((const char*)arg, "listonly"))
- list_only = 1;
- else
- exit(error(errno, (u8*)"incdir: Invalid argument"));
}
+ pass++;
+ if (pass < 3)
+ goto incdir_next_arg;
-skip_arg:
+incdir_done_args:
print_output(output, "<ul class=\"incdir\">\n");
if ((names_total = scandir(incdir, &namelist, &filter_subdirs,