Merge pull request #839 from ernestoCruz05/refactor-mmsg

refactor(mmsg): simplify dispatch arguments parsing
This commit is contained in:
DreamMaoMao 2026-04-11 07:01:24 +08:00 committed by GitHub
commit 7cfeeb3687
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -603,120 +603,49 @@ int32_t main(int32_t argc, char *argv[]) {
mode = SET; mode = SET;
char *arg = EARGF(usage()); char *arg = EARGF(usage());
// Trim leading and trailing whitespace from entire argument first dispatch_cmd = dispatch_arg1 = dispatch_arg2 = dispatch_arg3 =
while (isspace(*arg)) dispatch_arg4 = dispatch_arg5 = "";
arg++;
char *end = arg + strlen(arg) - 1;
while (end > arg && isspace(*end))
end--;
*(end + 1) = '\0';
dispatch_cmd = arg; char *tokens[6] = {0};
char *comma1 = strchr(arg, ','); int count = 0;
if (comma1) {
*comma1 = '\0';
// Trim trailing whitespace from command while (arg && count < 6) {
end = dispatch_cmd + strlen(dispatch_cmd) - 1; char *comma = (count < 5) ? strchr(arg, ',') : NULL;
while (end > dispatch_cmd && isspace(*end)) if (comma) {
end--; *comma = '\0';
*(end + 1) = '\0'; tokens[count++] = arg;
arg = comma + 1;
} else {
tokens[count++] = arg;
break;
}
}
dispatch_arg1 = comma1 + 1; for (int i = 0; i < count; i++) {
// Trim leading whitespace from arg1 char *str = tokens[i];
while (isspace(*dispatch_arg1)) while (isspace((unsigned char)*str))
dispatch_arg1++; str++;
if (*str) {
// Trim trailing whitespace from arg1 before looking for next char *end = str + strlen(str) - 1;
// comma while (end > str && isspace((unsigned char)*end))
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))
end--; end--;
*(end + 1) = '\0'; *(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 { tokens[i] = str;
dispatch_arg1 = "";
dispatch_arg2 = "";
dispatch_arg3 = "";
dispatch_arg4 = "";
dispatch_arg5 = "";
} }
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; break;
case 'O': case 'O':