aboutsummaryrefslogtreecommitdiffstats
path: root/l4arg
diff options
context:
space:
mode:
Diffstat (limited to 'l4arg')
-rw-r--r--l4arg/Makefile24
-rw-r--r--l4arg/l4arg.h28
-rw-r--r--l4arg/qarg.c54
-rw-r--r--l4arg/toargv.c111
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);
-}