Go to the documentation of this file.00001
00013 #include <stdlib.h>
00014 #include <string.h>
00015 #include "ucmd.h"
00016
00028 int ucmd_parse(Command cmd_list[], const char *delim, const char *in)
00029 {
00030 if (!in || strlen(in) == 0) return 0;
00031 if (!cmd_list) return UCMD_CMD_NOT_FOUND;
00032
00033 delim = (delim) ? delim : UCMD_DEFAULT_DELIMETER;
00034
00035 int retval = 0;
00036
00037 char *s = malloc(strlen(in)+1);
00038 strcpy(s, in);
00039
00040 int argc = 0;
00041 char **argv = NULL;
00042
00043 char *arg = strtok(s, delim);
00044 while (arg) {
00045 argc++;
00046 argv = realloc(argv, argc * sizeof(*argv));
00047 argv[argc-1] = arg;
00048 arg = strtok(NULL, delim);
00049 }
00050
00051 if (argc) {
00052 Command *c = NULL;
00053 for (Command *p = cmd_list; p->cmd; p++) {
00054 if (strcmp(p->cmd, argv[0]) == 0) {
00055 c = p;
00056 }
00057 }
00058 if (c) {
00059 retval = c->fn(argc, argv);
00060 } else {
00061 retval = UCMD_CMD_NOT_FOUND;
00062 }
00063 }
00064
00065 free(argv);
00066 free(s);
00067
00068 return retval;
00069 }