X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=src%2Fstatserv.c;h=db503331219f7dce1f67d00eb5f9a370d9c2aceb;hp=e3b09c5896a6a9af491e2f08aca783c7afcc68c8;hb=9afc8581574131c6d3ecea36c85740c07714318c;hpb=c586ade2977ae5f6bf01f24cc7c8a84492c544a8 diff --git a/src/statserv.c b/src/statserv.c index e3b09c5..db50333 100644 --- a/src/statserv.c +++ b/src/statserv.c @@ -163,7 +163,6 @@ static xmlNodePtr xml_config_get_root(void) yaz_log(YLOG_WARN, "Bad/missing root element for config %s", control_block.xml_config); return 0; - } } return ptr; @@ -521,9 +520,8 @@ static void xml_config_read(const char *base_path) } #endif -static void xml_config_open(void) +static int xml_config_open(void) { - WRBUF base_path; const char *last_p; const char *fname = control_block.xml_config; if (!getcwd(gfs_root_dir, FILENAME_MAX)) @@ -542,7 +540,7 @@ static void xml_config_open(void) gfs_nmem = nmem_create(); #if YAZ_HAVE_XML2 if (fname[0] == '\0') - return; + return 0; if (!xml_config_doc) { @@ -550,7 +548,7 @@ static void xml_config_open(void) if (!xml_config_doc) { yaz_log(YLOG_FATAL, "Could not parse %s", fname); - exit(1); + return -1; } else { @@ -559,11 +557,10 @@ static void xml_config_open(void) { yaz_log(YLOG_WARN, "XInclude processing failed for config %s", fname); - exit(1); + return -1; } } } - base_path = wrbuf_alloc(); last_p = strrchr(fname, #ifdef WIN32 '\\' @@ -572,12 +569,16 @@ static void xml_config_open(void) #endif ); if (last_p) + { + WRBUF base_path = wrbuf_alloc(); wrbuf_write(base_path, fname, last_p - fname); + xml_config_read(wrbuf_cstr(base_path)); + wrbuf_destroy(base_path); + } else - wrbuf_puts(base_path, "."); - xml_config_read(wrbuf_cstr(base_path)); - wrbuf_destroy(base_path); + xml_config_read(0); #endif + return 0; } static void xml_config_close(void) @@ -600,16 +601,18 @@ static void xml_config_close(void) #endif } -static void xml_config_add_listeners(void) +static int xml_config_add_listeners(void) { struct gfs_listen *gfs = gfs_listen_list; int id_no; + int ret = 0; for (id_no = 1; gfs; gfs = gfs->next, id_no++) { - if (gfs->address) - add_listener(gfs->address, id_no); + if (!ret && gfs->address) + ret = add_listener(gfs->address, id_no); } + return ret; } static void xml_config_bend_start(void) @@ -1258,6 +1261,17 @@ static void normal_stop_handler(int num) } #endif +static void show_version(void) +{ + char vstr[20], sha1_str[41]; + + yaz_version(vstr, sha1_str); + printf("YAZ version: %s %s\n", YAZ_VERSION, YAZ_VERSION_SHA1); + if (strcmp(sha1_str, YAZ_VERSION_SHA1)) + printf("YAZ DLL/SO: %s %s\n", vstr, sha1_str); + exit(0); +} + static int statserv_sc_main(yaz_sc_t s, int argc, char **argv) { char sep; @@ -1282,7 +1296,8 @@ static int statserv_sc_main(yaz_sc_t s, int argc, char **argv) if (control_block.options_func(argc, argv)) return 1; - xml_config_open(); + if (xml_config_open()) + return 1; xml_config_bend_start(); @@ -1296,7 +1311,8 @@ static int statserv_sc_main(yaz_sc_t s, int argc, char **argv) } else { - xml_config_add_listeners(); + if (xml_config_add_listeners()) + return 1; if (!pListener) add_listener("tcp:@:9999", 0); @@ -1337,7 +1353,7 @@ int check_options(int argc, char **argv) get_logbits(1); - while ((ret = options("1a:iszSTl:v:u:c:w:t:k:Kd:A:p:DC:f:m:r:", + while ((ret = options("1a:iszSTl:v:u:c:w:t:k:Kd:A:p:DC:f:m:r:V", argv, argc, &arg)) != -2) { switch (ret) @@ -1453,11 +1469,14 @@ int check_options(int argc, char **argv) } yaz_log_init_max_size(r * 1024); break; + case 'V': + show_version(); + break; default: fprintf(stderr, "Usage: %s [ -a -v " " -l -u -c -t " " -k -d -p -C certfile" - " -zKiDST1 -m -w ... ]\n", me); + " -zKiDSTV1 -m -w ... ]\n", me); return 1; } }