diff options
| author | m.shulhan <ms@kilabit.org> | 2009-08-30 22:39:23 +0700 |
|---|---|---|
| committer | m.shulhan <ms@kilabit.org> | 2009-08-30 22:39:23 +0700 |
| commit | 65a7b444bcd8eed57245a1f112b83af5770fbbd4 (patch) | |
| tree | 80163dbaeb5c0c33111d072c5dc7f2edafb88277 | |
| parent | 168bef43351b3c2c57e177a0ef881c1dd0cfeaf3 (diff) | |
| download | vos-65a7b444bcd8eed57245a1f112b83af5770fbbd4.tar.xz | |
Vos: use system environment to initialize Vos global variable.
proc/vos_set:
- set_proc_tmp_dir_value(): make it global function.
proc/vos_sort:
- sort_process(): set return value to null.
| -rw-r--r-- | proc/vos_set.c | 2 | ||||
| -rw-r--r-- | proc/vos_set.h | 1 | ||||
| -rw-r--r-- | proc/vos_sort.c | 2 | ||||
| -rw-r--r-- | vos.c | 118 | ||||
| -rw-r--r-- | vos.h | 11 | ||||
| -rw-r--r-- | vos_errno.c | 7 |
6 files changed, 77 insertions, 64 deletions
diff --git a/proc/vos_set.c b/proc/vos_set.c index ec00f4d..3f348f1 100644 --- a/proc/vos_set.c +++ b/proc/vos_set.c @@ -1,6 +1,6 @@ #include "proc/vos_set.h" -static int set_proc_tmp_dir_value(char *tmp) +int set_proc_tmp_dir_value(char *tmp) { int idx = 0; int s = 0; diff --git a/proc/vos_set.h b/proc/vos_set.h index 5d2445d..91dd6be 100644 --- a/proc/vos_set.h +++ b/proc/vos_set.h @@ -6,6 +6,7 @@ #include "op/vos_LL.h" #include "op/vos_StmtSet.h" +int set_proc_tmp_dir_value(char *tmp); int vos_process_set(struct StmtSet *set); #endif diff --git a/proc/vos_sort.c b/proc/vos_sort.c index ce8fc28..2ecb4e4 100644 --- a/proc/vos_sort.c +++ b/proc/vos_sort.c @@ -309,7 +309,7 @@ err: file_close(&F); psort->retval = s; - return (void *) s; + return 0; } int vos_process_sort(struct Stmt *sort) @@ -5,13 +5,6 @@ #include "proc/vos_create.h" #include "proc/vos_join.h" -enum _arg_todo { - ARG_DONE = 0, - ARG_START, - ARG_DEBUG_VALUE, - ARG_VOS_SCRIPT -}; - /** * @return: * < 0..(n-1) : success @@ -66,56 +59,15 @@ char *get_tmp_dir(const int lock) return tmp_dir; } -static int vos_init(int argc, char **argv) +void sys_getenv_num(unsigned long *env_value, const char *env_name, + unsigned long def_value) { - int i = 1; - int s = ARG_START; - - _vos.debug = 0; - while (i <= argc && s != ARG_DONE) { - switch (s) { - case ARG_START: - s = strcmp(argv[i], "-h"); - if (s == 0) - return E_VOS_PARAM; - - s = strcmp(argv[i], "-d"); - if (s == 0) { - s = ARG_DEBUG_VALUE; - i++; - } else - s = ARG_VOS_SCRIPT; - break; - - case ARG_DEBUG_VALUE: - _vos.debug = strtol(argv[i], 0, 0); - s = ARG_VOS_SCRIPT; - i++; - break; - - case ARG_VOS_SCRIPT: - _vos.script = argv[i]; - s = ARG_DONE; - break; - } - } - if (s != ARG_DONE) - return E_VOS_PARAM; + const char *env = getenv(env_name); - s = ll_add(&_vos.proc_tmp_dir, 1, VOS_DEF_PROC_TMP_DIR); - if (s) - return s; - - pthread_mutex_init(&_vos.proc_tmp_dir_lock, 0); - _vos.p_proc_tmp_dir = _vos.proc_tmp_dir; - _vos.file_buf_size = VOS_DEF_FILE_BUF_SIZE; - _vos.proc_cmp_case = VOS_DEF_PROC_CMP_CASE; - _vos.proc_max = VOS_DEF_PROC_MAX; - _vos.proc_max_row = VOS_DEF_PROC_MAX_ROW; - - srand(time((void *) 0)); - - return 0; + if (env) + *env_value = strtol(env, 0, 0); + else + *env_value = def_value; } static void vos_print() @@ -131,6 +83,60 @@ static void vos_print() ll_print(_vos.proc_tmp_dir); } +/** + * @return: + * < 0 : success. + * < E_VOS_PARAM : fail. + */ +static int vos_init(int argc, char **argv) +{ + int s; + char *env; + + if (argc < 2 || argc > 2) + return E_VOS_PARAM; + + pthread_mutex_init(&_vos.proc_tmp_dir_lock, 0); + + /* get Vos variable value from system environment */ + sys_getenv_num((unsigned long *) &_vos.debug, VOS_ENV_DEBUG, + VOS_DEF_DEBUG_VALUE); + + sys_getenv_num(&_vos.file_buf_size, VOS_ENV_FILE_BUF_SIZE, + VOS_DEF_FILE_BUF_SIZE); + + sys_getenv_num((unsigned long *) &_vos.proc_cmp_case, + VOS_ENV_PROC_CMP_CASE, + VOS_DEF_PROC_CMP_CASE); + + sys_getenv_num((unsigned long *) &_vos.proc_max, VOS_ENV_PROC_MAX, + VOS_DEF_PROC_MAX); + + sys_getenv_num(&_vos.proc_max_row, VOS_ENV_PROC_MAX_ROW, + VOS_DEF_PROC_MAX_ROW); + + /* get temporary dir from system environment */ + env = getenv(VOS_ENV_TMP_DIR); + if (env) + set_proc_tmp_dir_value(env); + else { + s = ll_add(&_vos.proc_tmp_dir, 1, VOS_DEF_PROC_TMP_DIR); + if (s) + return s; + } + + _vos.p_proc_tmp_dir = _vos.proc_tmp_dir; + + _vos.script = argv[1]; + + srand(time((void *) 0)); + + if (_vos.debug) + vos_print(); + + return 0; +} + static int vos_process(struct Stmt *stmt) { int s; @@ -175,7 +181,7 @@ int main(int argc, char *argv[]) int s; struct Stmt *stmt = 0; - s = vos_init(argc - 1, argv); + s = vos_init(argc, argv); if (s) goto err; @@ -3,12 +3,21 @@ #include "type/vos_TVos.h" +#define VOS_DEF_DEBUG_VALUE 0 #define VOS_DEF_DATE_FORMAT "YYYY/MM/DD" #define VOS_DEF_FILE_BUF_SIZE 8192 #define VOS_DEF_PROC_CMP_CASE CMP_CASE_SENSITIVE #define VOS_DEF_PROC_MAX 2 #define VOS_DEF_PROC_MAX_ROW 100000 #define VOS_DEF_PROC_TMP_DIR "/tmp/" + +#define VOS_ENV_DEBUG "VOS_DEBUG" +#define VOS_ENV_TMP_DIR "VOS_TMP_DIR" +#define VOS_ENV_FILE_BUF_SIZE "VOS_FILE_BUFFER_SIZE" +#define VOS_ENV_PROC_CMP_CASE "VOS_COMPARE_CASE" +#define VOS_ENV_PROC_MAX "VOS_PROCESS_MAX" +#define VOS_ENV_PROC_MAX_ROW "VOS_PROCESS_MAX_ROW" + #define VOS_SORT_OUT_FORMAT "sort.XXXXXXXX" #define VOS_SORT_TMP_FORMAT "tmp.sort.XXXXXXXX" #define VOS_JOIN_OUT_FORMAT "join.XXXXXXXX" @@ -17,5 +26,7 @@ struct Vos _vos; int get_token_idx(const char **ls, const unsigned int n, const char *tok); char *get_tmp_dir(const int lock); +void sys_getenv_num(unsigned long *env_value, const char *env_name, + unsigned long def_value); #endif diff --git a/vos_errno.c b/vos_errno.c index 09a5c5a..d859a14 100644 --- a/vos_errno.c +++ b/vos_errno.c @@ -2,12 +2,7 @@ const char *vos_errmsg[N_VOS_ERRNO] = { "\0", - "Usage: vos [-d {1|2|4|8|16}] <vos script>\n"\ - " -d 1 : debug / test script\n"\ - " -d 2 : debug script parser\n"\ - " -d 4 : debug sort statement\n"\ - " -d 8 : debug create statement\n"\ - " -d 16 : debug join statement\n\0", + "Usage: vos <vos script>\n\0", "line %d: unexpected character '%c'.\n\0", "line %d: unexpected token '%s'.\n\0", |
