diff options
Diffstat (limited to 'l4arg')
-rw-r--r-- | l4arg/Makefile | 24 | ||||
-rw-r--r-- | l4arg/l4arg.h | 28 | ||||
-rw-r--r-- | l4arg/qarg.c | 54 | ||||
-rw-r--r-- | l4arg/toargv.c | 111 |
4 files changed, 0 insertions, 217 deletions
diff --git a/l4arg/Makefile b/l4arg/Makefile deleted file mode 100644 index 0f2ffe3..0000000 --- a/l4arg/Makefile +++ /dev/null @@ -1,24 +0,0 @@ -CC=cc -AR=ar -RM=rm -f -INSTALL=install -m 644 -LOCAL_CFLAGS=-g -CFLAGS=-Wall -I. -I../l4darr $(LOCAL_CFLAGS) -OBJ=toargv.o qarg.o -LIBFILE=libl4arg.a -DESTDIR=/ -PREFIX=/usr/local -LIBDIR=$(DESTDIR)/$(PREFIX)/lib - -.PHONY: all clean - -all: $(LIBFILE) -$(LIBFILE): $(OBJ) - $(AR) rcs $(LIBFILE) $(OBJ) -clean: - $(RM) $(LIBFILE) $(OBJ) -install: - mkdir -p $(LIBDIR) - $(INSTALL) $(LIBFILE) $(LIBDIR) -uninstall: - $(RM) $(LIBDIR)/$(LIBFILE) diff --git a/l4arg/l4arg.h b/l4arg/l4arg.h deleted file mode 100644 index 68352c8..0000000 --- a/l4arg/l4arg.h +++ /dev/null @@ -1,28 +0,0 @@ -#ifndef L4LIB_ARG_PARSER -#define L4LIB_ARG_PARSER - -#ifdef __cplusplus -extern "C" { -#endif - -char** l4arg_toargv(const char*, const char*, const char*, const char*); -void l4arg_toargv_free(char**); - -typedef struct l4lib_qarg { - char* arg_name; - char* arg_value; -} L4QARG; - -L4QARG* l4qarg_parse(const char*); -void l4qarg_free(L4QARG*); -#define l4qarg_n(qargitem) ((qargitem).arg_name) -#define l4qarg_v(qargitem) ((qargitem).arg_value) -#define l4qarg_hasvalue(qargitem) (((qargitem).arg_value != NULL)) -#define l4qarg_end(qargitem) \ - ((((qargitem).arg_name) == NULL) && (((qargitem).arg_value) == NULL)) - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/l4arg/qarg.c b/l4arg/qarg.c deleted file mode 100644 index 412967c..0000000 --- a/l4arg/qarg.c +++ /dev/null @@ -1,54 +0,0 @@ -#include <stdlib.h> -#include <string.h> -#include <l4arg.h> - -/* 為什麼叫做 qarg 呢?因為這是用來解析很像 QEMU 命令列參數的參數 */ - -L4QARG* l4qarg_parse(const char* str){ - char** pargv = l4arg_toargv(str, ",", "\"\'", "\\"); - if(pargv == NULL){ - return NULL; - } - int i, allc; - L4QARG* qargarr; - char* pos; - for(i=0; pargv[i]!=NULL; i++); - allc = i + 1; - qargarr = (L4QARG*) malloc(sizeof(L4QARG) * allc); - if(qargarr == NULL){ - l4arg_toargv_free(pargv); - return NULL; - } - for(i=0; pargv[i]!=NULL; i++){ - pos = strchr(pargv[i], '='); - if(pos == NULL){ - qargarr[i].arg_name = pargv[i]; - qargarr[i].arg_value = NULL; - }else{ - *pos = '\0'; - qargarr[i].arg_name = pargv[i]; - pos++; - qargarr[i].arg_value = (char*) malloc(strlen(pos)+1); - if(qargarr[i].arg_value == NULL){ - l4arg_toargv_free(pargv); - return NULL; - } - strcpy(qargarr[i].arg_value, pos); - } - } - free(pargv); - qargarr[i].arg_name = NULL; - qargarr[i].arg_value = NULL; - return qargarr; -} - -void l4qarg_free(L4QARG* qarg){ - int i; - for(i=0; !(qarg[i].arg_name == NULL && qarg[i].arg_value == NULL); i++){ - free(qarg[i].arg_name); - if(qarg[i].arg_value != NULL){ - free(qarg[i].arg_value); - } - } - free(qarg); -} diff --git a/l4arg/toargv.c b/l4arg/toargv.c deleted file mode 100644 index 433ad1a..0000000 --- a/l4arg/toargv.c +++ /dev/null @@ -1,111 +0,0 @@ -#include <string.h> -#include <stdlib.h> -#include <l4arg.h> -#include <l4darr.h> - -/* 基本上優先順序是 escape -> quoting -> delimiter */ - -#define abort_l4arg_toargv \ - do{ \ - l4da_free(parr); \ - l4da_free(tmpstr); \ - return NULL; \ - }while(0) - -char** l4arg_toargv(const char* str, - const char* delim, const char* quoting, const char* esc){ - int i; - char escaped = 0, quoted = 0, delimed = 0; - L4DA* parr; - L4DA* tmpstr; - char* addstr, tmpchar; - char** rval; - parr = l4da_create(sizeof(char*), 0); - if(parr == NULL){ - return NULL; - } - tmpstr = l4da_create(sizeof(char), 0); - if(tmpstr == NULL){ - l4da_free(parr); - return NULL; - } - for(i=0; str[i]!='\0'; i++){ - if(escaped){ - if(l4da_pushback(tmpstr, &str[i]) < 0){ - abort_l4arg_toargv; - } - escaped = 0; - delimed = 0; - continue; - } - if(quoted){ - if(strchr(quoting, str[i]) != NULL){ - quoted = 0; - continue; - } - if(l4da_pushback(tmpstr, &str[i]) < 0){ - abort_l4arg_toargv; - } - delimed = 0; - continue; - } - if(strchr(esc, str[i]) != NULL){ - escaped = 1; - continue; - } - if(strchr(quoting, str[i]) != NULL){ - quoted = 1; - continue; - } - if(strchr(delim, str[i]) != NULL){ - if(l4da_getlen(tmpstr) > 0){ - tmpchar = '\0'; - if(l4da_pushback(tmpstr, &tmpchar) < 0){ - abort_l4arg_toargv; - } - addstr = (char*)l4da_drop_struct(tmpstr); - if(l4da_pushback(parr, &addstr) < 0){ - l4da_free(parr); - return NULL; - } - tmpstr = l4da_create(sizeof(char), 0); - if(tmpstr == NULL){ - l4da_free(parr); - return NULL; - } - } - delimed = 1; - continue; - } - if(l4da_pushback(tmpstr, &str[i]) < 0){ - abort_l4arg_toargv; - } - delimed = 0; - } - if(!delimed){ - tmpchar = '\0'; - if(l4da_pushback(tmpstr, &tmpchar) < 0){ - abort_l4arg_toargv; - } - addstr = (char*)l4da_drop_struct(tmpstr); - if(l4da_pushback(parr, &addstr) < 0){ - l4da_free(parr); - return NULL; - } - } - addstr = NULL; - if(l4da_pushback(parr, &addstr) < 0){ - l4da_free(parr); - return NULL; - } - rval = (char**)l4da_drop_struct(parr); - return rval; -} - -void l4arg_toargv_free(char** pargv){ - int i; - for(i=0; pargv[i]!=NULL; i++){ - free(pargv[i]); - } - free(pargv); -} |