Exemplo n.º 1
0
Arquivo: util.c Projeto: borlox/kos
int main(int argc, char **argv)
{
	char test1[] = " Hallo  \n";

	printf("Before: '%s'\n", test1);
	char *after = prepare(test1);
	printf("After: '%s'\n", after ? after : "<NULL>");

	char test2[] = "  \t\t \n";
	printf("Before: '%s'\n", test2);
	after = prepare(test2);
	printf("After: '%s'\n", after ? after : "<NULL>");

	struct cmd cmd = {0, 0};
	char line[] = "echo \"test bla\" 'blub\\' diedup'";
	split_cmd(line, &cmd);
	printf("Cmd: \n Argc: %d\n", cmd.argc);

	int i=0;
	for (; i < cmd.argc; ++i) {
		printf(" ->%s\n", cmd.argv[i]);
	}

	char *relined = build_cmd(&cmd);

	printf("Reassembled: '%s'\n", relined);

	free_argv(&cmd);
	free(relined);

	return 0;
}
Exemplo n.º 2
0
int main(void)
{
	cfg_opt_t sub_opts[] = {
		CFG_BOOL("bool", cfg_false, CFGF_NONE),
		CFG_STR("string", NULL, CFGF_NONE),
		CFG_INT("int", 0, CFGF_NONE),
		CFG_FLOAT("float", 0.0, CFGF_NONE),
		CFG_END()
	};

	cfg_opt_t opts[] = {
		CFG_BOOL_LIST("bool", cfg_false, CFGF_NONE),
		CFG_STR_LIST("string", NULL, CFGF_NONE),
		CFG_INT_LIST("int", 0, CFGF_NONE),
		CFG_FLOAT_LIST("float", "0.0", CFGF_NONE),
		CFG_SEC("sub", sub_opts,
			CFGF_MULTI | CFGF_TITLE | CFGF_NO_TITLE_DUPES),
		CFG_END()
	};

	char *cmd = NULL;
	const char *reply;
	int res;
	int i;

	cfg = cfg_init(opts, CFGF_NONE);

	for (;;) {
		printf("cli> ");
		fflush(stdout);

		if (cmd)
			free(cmd);
		cmd = input_cmd();
		if (!cmd)
			exit(0);
		res = split_cmd(cmd);
		if (res < 0) {
			printf("Parse error\n");
			continue;
		}
		if (cmdc == 0)
			continue;
		for (i = 0; cmds[i].cmd; ++i) {
			if (strcmp(cmdv[0], cmds[i].cmd))
				continue;
			reply = cmds[i].handler(cmdc, cmdv);
			if (!reply)
				exit(0);
			printf("%s", reply);
			break;
		}
		if (!cmds[i].cmd)
			printf("Unknown command\n");
	}

	cfg_free(cfg);
	return 0;
}
Exemplo n.º 3
0
int prepare_cmds(char **cmd, char *ops, int ops_count) {
    /*
     * Funkcja ma za przekazać pierwszą komendę z **cmd do wykonania i zapisać jej wynik
     * do zmiennej result.
     * Jeśli wywoływana funkcja zawiera operatory logiczne, to wykonujemy kolejne komendy
     * w zależności od wartości result i kolejnego operatora logicznego.
     */
    int args_count;
    int iter = 0;
    char ** args;
    int logical = ops_count > 0;
    args = split_cmd(cmd[iter++], &args_count);
    int result = check_cmd(args, args_count, logical, stdin, stdout);
    free(args);
    if (logical) {
        do {
            args = split_cmd(cmd[iter], &args_count);
            result = (*logic_tokens[token_idx(ops[iter - 1])].func)(result, args, args_count);
            iter++;
            free(args);
        } while(iter <= ops_count);
    }
}
Exemplo n.º 4
0
void		exec_cmd(char *str)
{
	char **cmd;

	str = ft_strdup(parse_vars(str));
	if (!(cmd = split_cmd(str)) || !cmd[0])
	{
		free_tab(cmd);
		return ;
	}
	if (!exec_file(cmd) && !exec_builtin(cmd))
		exec_path(cmd);
	free(str);
	free_tab(cmd);
}
Exemplo n.º 5
0
	void OnThreadRun()
	{
		while (true)
		{
			fprintf(stderr, "%s", PROMPT);	// print to error will not buffer the printed message

			if (fgets(m_buf, MAX_LINE_LEN - 1, stdin) == NULL)
			{
				fprintf(stderr, "fgets failed: %d\n", errno);
				continue;
			}

			m_buf[strlen(m_buf) - 1] = '\0';	// remove newline character

			split_cmd(m_buf);

			exec_cmd();
		}
	}
Exemplo n.º 6
0
Arquivo: sh.c Projeto: 1m69/OS67
int main(){
    int argc;
    char cmd[LEN_CMD];
    char *argv[MAX_ARGC];

    welcome();
    for (;;){
        argc = 0;
        memset(cmd, 0, sizeof(cmd));
        memset(argv, 0, sizeof(argv));

        if (get_cmd(cmd) < 0) break;

        if (split_cmd(argv, &argc, cmd) < 0){
            printf("sh: split cmd fail, too many arguments\n");
        };

        if (argc == 0) continue;

        /* build-in command cd */
        if (strcmp(argv[0], "cd") == 0){
            if (argc < 2){
                printf("cd: missing directory.\n");
            } else {
                if (_chdir(argv[1]) < 0){
                    printf("cd: can not change directroy to %s\n", argv[1]);
                }
            }
            /* external command in /bin */
        } else {
            parse_cmd(argc, argv);
        }
    }

    _exit();
}
Exemplo n.º 7
0
/**
 * vrrp_ctrl_cmd() - Interprete control fifo cmd
 */
static inline vrrp_event_t vrrp_ctrl_cmd(struct vrrp *vrrp,
        struct vrrp_net *vnet)
{
    int nword;

    nword =
        split_cmd(vrrp->ctrl.msg, vrrp->ctrl.cmd, CTRL_CMD_NTOKEN,
                  WHITESPACE);

    if (nword == 0)
        return INVALID;

    /*
     * control cmd stop
     */
    if (matches(vrrp->ctrl.cmd[0], "stop")) {
        log_notice("vrid %d :: control cmd stop, exiting", vrrp->vrid);
        set_bit(UVRRPD_RELOAD, &reg);
        clear_bit(KEEP_GOING, &reg);
        vrrp_ctrl_cmd_flush(&vrrp->ctrl);
        return CTRL_FIFO;
    }

    /*
     * control cmd reload
     */
    if (matches(vrrp->ctrl.cmd[0], "reload")) {
        set_bit(UVRRPD_RELOAD, &reg);
        vrrp_ctrl_cmd_flush(&vrrp->ctrl);
        return CTRL_FIFO;
    }

    /*
     * control cmd state || status
     */
    if (matches(vrrp->ctrl.cmd[0], "state")
            || matches(vrrp->ctrl.cmd[0], "status")) {

        set_bit(UVRRPD_DUMP, &reg);
        vrrp_ctrl_cmd_flush(&vrrp->ctrl);
        return CTRL_FIFO;
    }

    /*
     * control cmd prio
     */
    if (matches(vrrp->ctrl.cmd[0], "prio")) {
        if (nword != 2) {
            log_error
            ("vrid %d :: invalid syntax, control cmd prio <priority>",
             vrrp->vrid);

            vrrp_ctrl_cmd_flush(&vrrp->ctrl);
            return INVALID;
        }

        /* fetch priority */
        int err;
        unsigned long opt;
        err = mystrtoul(&opt, vrrp->ctrl.cmd[1], VRRP_PRIO_MAX);

        vrrp_ctrl_cmd_flush(&vrrp->ctrl);

        if (err == -ERANGE) {
            log_error
            ("vrid %d :: invalid control cmd prio, 0 < priority < 255",
             vrrp->vrid);
            return INVALID;
        }

        if (err == -EINVAL) {
            log_error
            ("vrid %d :: invalid control cmd prio, error parsing \"%s\" as a number",
             vrrp->vrid, vrrp->ctrl.cmd[1]);
            return INVALID;
        }

        /* change prio */
        if (vrrp->priority != (uint8_t) opt) {
            vrrp->priority = (uint8_t) opt;
            vrrp_adv_set_priority(vnet, vrrp->priority);
        }

        /* reload bit */
        set_bit(UVRRPD_RELOAD, &reg);

        return CTRL_FIFO;
    }

    vrrp_ctrl_cmd_flush(&vrrp->ctrl);

    return INVALID;
}