From aeba0e82dd8d317f704a6853e78159693d2c3844 Mon Sep 17 00:00:00 2001 From: ernestoCruz05 Date: Fri, 10 Apr 2026 16:58:07 +0100 Subject: [PATCH] refactor(mmsg): simplify dispatch arguments parsing --- mmsg/mmsg.c | 143 +++++++++++++--------------------------------------- 1 file changed, 36 insertions(+), 107 deletions(-) diff --git a/mmsg/mmsg.c b/mmsg/mmsg.c index 0191a635..69f1d1d0 100644 --- a/mmsg/mmsg.c +++ b/mmsg/mmsg.c @@ -603,120 +603,49 @@ int32_t main(int32_t argc, char *argv[]) { mode = SET; char *arg = EARGF(usage()); - // Trim leading and trailing whitespace from entire argument first - while (isspace(*arg)) - arg++; - char *end = arg + strlen(arg) - 1; - while (end > arg && isspace(*end)) - end--; - *(end + 1) = '\0'; + dispatch_cmd = dispatch_arg1 = dispatch_arg2 = dispatch_arg3 = + dispatch_arg4 = dispatch_arg5 = ""; - dispatch_cmd = arg; - char *comma1 = strchr(arg, ','); - if (comma1) { - *comma1 = '\0'; + char *tokens[6] = {0}; + int count = 0; - // Trim trailing whitespace from command - end = dispatch_cmd + strlen(dispatch_cmd) - 1; - while (end > dispatch_cmd && isspace(*end)) - end--; - *(end + 1) = '\0'; + while (arg && count < 6) { + char *comma = (count < 5) ? strchr(arg, ',') : NULL; + if (comma) { + *comma = '\0'; + tokens[count++] = arg; + arg = comma + 1; + } else { + tokens[count++] = arg; + break; + } + } - dispatch_arg1 = comma1 + 1; - // Trim leading whitespace from arg1 - while (isspace(*dispatch_arg1)) - dispatch_arg1++; - - // Trim trailing whitespace from arg1 before looking for next - // comma - end = dispatch_arg1 + strlen(dispatch_arg1) - 1; - while (end > dispatch_arg1 && isspace(*end)) - end--; - *(end + 1) = '\0'; - - char *comma2 = strchr(dispatch_arg1, ','); - if (comma2) { - *comma2 = '\0'; - dispatch_arg2 = comma2 + 1; - // Trim leading whitespace from arg2 - while (isspace(*dispatch_arg2)) - dispatch_arg2++; - - // Trim trailing whitespace from arg2 before looking for - // next comma - end = dispatch_arg2 + strlen(dispatch_arg2) - 1; - while (end > dispatch_arg2 && isspace(*end)) + for (int i = 0; i < count; i++) { + char *str = tokens[i]; + while (isspace((unsigned char)*str)) + str++; + if (*str) { + char *end = str + strlen(str) - 1; + while (end > str && isspace((unsigned char)*end)) end--; *(end + 1) = '\0'; - - char *comma3 = strchr(dispatch_arg2, ','); - if (comma3) { - *comma3 = '\0'; - dispatch_arg3 = comma3 + 1; - // Trim leading whitespace from arg3 - while (isspace(*dispatch_arg3)) - dispatch_arg3++; - - // Trim trailing whitespace from arg3 before looking for - // next comma - end = dispatch_arg3 + strlen(dispatch_arg3) - 1; - while (end > dispatch_arg3 && isspace(*end)) - end--; - *(end + 1) = '\0'; - - char *comma4 = strchr(dispatch_arg3, ','); - if (comma4) { - *comma4 = '\0'; - dispatch_arg4 = comma4 + 1; - // Trim leading whitespace from arg4 - while (isspace(*dispatch_arg4)) - dispatch_arg4++; - - // Trim trailing whitespace from arg4 before looking - // for next comma - end = dispatch_arg4 + strlen(dispatch_arg4) - 1; - while (end > dispatch_arg4 && isspace(*end)) - end--; - *(end + 1) = '\0'; - - char *comma5 = strchr(dispatch_arg4, ','); - if (comma5) { - *comma5 = '\0'; - dispatch_arg5 = comma5 + 1; - // Trim leading whitespace from arg5 - while (isspace(*dispatch_arg5)) - dispatch_arg5++; - - // Trim trailing whitespace from arg5 - end = dispatch_arg5 + strlen(dispatch_arg5) - 1; - while (end > dispatch_arg5 && isspace(*end)) - end--; - *(end + 1) = '\0'; - } else { - dispatch_arg5 = ""; - } - } else { - dispatch_arg4 = ""; - dispatch_arg5 = ""; - } - } else { - dispatch_arg3 = ""; - dispatch_arg4 = ""; - dispatch_arg5 = ""; - } - } else { - dispatch_arg2 = ""; - dispatch_arg3 = ""; - dispatch_arg4 = ""; - dispatch_arg5 = ""; } - } else { - dispatch_arg1 = ""; - dispatch_arg2 = ""; - dispatch_arg3 = ""; - dispatch_arg4 = ""; - dispatch_arg5 = ""; + tokens[i] = str; } + + if (count > 0) + dispatch_cmd = tokens[0]; + if (count > 1) + dispatch_arg1 = tokens[1]; + if (count > 2) + dispatch_arg2 = tokens[2]; + if (count > 3) + dispatch_arg3 = tokens[3]; + if (count > 4) + dispatch_arg4 = tokens[4]; + if (count > 5) + dispatch_arg5 = tokens[5]; } break; case 'O':