All pastes #2089873 Raw Edit

Stuff

public text v1 · immutable
#2089873 ·published 2011-10-13 22:21 UTC
rendered paste body
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;
}