char** q3c_handle_input(char* inp, int* argc) { if (inp != NULL) { char* cd = strchr(inp, ':'); if (cd != NULL) { int di = cd - inp, ac = 1, dc, ign = 0; char** arga = malloc(1); char* args = inp + di + 2; dc = count_char(args, ':'); char* cmd = (char*) calloc(di + 1, sizeof (char)); strncpy(cmd, inp, di); log_fmt("> cmd: %s", cmd); log_fmt("> args: %s\n", args); char* arg = strtok(args, " "); while (arg != NULL) { di = strlen(arg) - 1; if (!strncmp(arg + di, ":", 1)) { ign = dc > 1; if (dc == 1) { arg[di] = '\0'; } } if (!ign) { arga = realloc(arga, ++ac * sizeof (char*)); arga[ac - 1] = strdup(arg); } arg = strtok(NULL, " "); ign = 0; } *argc = ac; arga[0] = cmd; return arga; } } return NULL; } // cut leading whitespaces char** q3c_handle_input_logfile(char* inp, int* argc) { if (inp != NULL) { int i, wsc = 0; for (i = 0; i < strlen(inp); i++) { if (inp[i] == ' ' && ++wsc == 3) { break; } } int nsl = strlen(inp) - i; char* ci = calloc(nsl, sizeof (char)); strncpy(ci, inp + i + 1, nsl); free(inp); return q3c_handle_input(ci, argc); } return NULL; }