aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorm.shulhan <ms@kilabit.org>2009-08-30 22:39:23 +0700
committerm.shulhan <ms@kilabit.org>2009-08-30 22:39:23 +0700
commit65a7b444bcd8eed57245a1f112b83af5770fbbd4 (patch)
tree80163dbaeb5c0c33111d072c5dc7f2edafb88277
parent168bef43351b3c2c57e177a0ef881c1dd0cfeaf3 (diff)
downloadvos-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.c2
-rw-r--r--proc/vos_set.h1
-rw-r--r--proc/vos_sort.c2
-rw-r--r--vos.c118
-rw-r--r--vos.h11
-rw-r--r--vos_errno.c7
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)
diff --git a/vos.c b/vos.c
index 12b29b5..f688cd0 100644
--- a/vos.c
+++ b/vos.c
@@ -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;
diff --git a/vos.h b/vos.h
index fa2568e..8ca3df3 100644
--- a/vos.h
+++ b/vos.h
@@ -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",