diff --git a/src/sf_util.c b/src/sf_util.c index 1e7dae8..07df475 100644 --- a/src/sf_util.c +++ b/src/sf_util.c @@ -95,30 +95,79 @@ int sf_printbuffer(char* buffer,int32_t len) void sf_usage(const char *program) { - fprintf(stderr, "Usage: %s [--without-daemon | --no-daemon] " - "[start | stop | restart]\n", program); + fprintf(stderr, "Usage: %s [options] " + "[start | stop | restart]\n\noptions:\n" + "\t[--without-daemon | --no-daemon]: run in foreground\n" + "\t[-V | --version]: show version info\n" + "\t[-h | --help]: for this usage\n\n", program); } -void sf_parse_daemon_mode_and_action_ex(int argc, char *argv[], - bool *daemon_mode, char **action, const char *default_action) +const char *sf_parse_daemon_mode_and_action_ex(int argc, char *argv[], + const Version *version, bool *daemon_mode, char **action, + const char *default_action) { int i; + const char *config_filepath; *daemon_mode = true; - for (i=2; imajor, + version->minor, version->patch); + return NULL; + } + if (strcmp(argv[i], "-h") == 0 || + strcmp(argv[i], "--help") == 0) + { + sf_usage(argv[0]); + return NULL; + } + } + + if (*daemon_mode) { + config_filepath = argv[1]; + } else { + if (argc == 2) { + sf_usage(argv[0]); + return NULL; + } + + config_filepath = (i == 1) ? argv[2] : argv[1]; } if (argc - (*daemon_mode ? 0 : 1) > 2) { - *action = argv[argc - 1]; + int last_index; + last_index = argc - 1; + if (*daemon_mode) { + *action = argv[last_index]; + } else { + *action = (i == last_index) ? + argv[last_index - 1] : + argv[last_index]; + } } else { *action = (char *)default_action; } + + return config_filepath; } int sf_logger_init(LogContext *pContext, const char *filename_prefix) diff --git a/src/sf_util.h b/src/sf_util.h index 3499962..6974276 100644 --- a/src/sf_util.h +++ b/src/sf_util.h @@ -58,8 +58,10 @@ __FILE__, eln, eres, emsg, strerror(eres)) #define dszoffset(cls, mem) ((char*)&((cls*)0)->mem - ((char*)0)) -#define sf_parse_daemon_mode_and_action(argc, argv, daemon_mode, action) \ - sf_parse_daemon_mode_and_action_ex(argc, argv, daemon_mode, action, "start") +#define sf_parse_daemon_mode_and_action(argc, argv, \ + version, daemon_mode, action) \ + sf_parse_daemon_mode_and_action_ex(argc, argv, \ + version, daemon_mode, action, "start") #ifdef __cplusplus extern "C" { @@ -73,8 +75,9 @@ int sf_printbuffer(char* buffer,int32_t len); void sf_usage(const char *program); -void sf_parse_daemon_mode_and_action_ex(int argc, char *argv[], - bool *daemon_mode, char **action, const char *default_action); +const char *sf_parse_daemon_mode_and_action_ex(int argc, char *argv[], + const Version *version, bool *daemon_mode, char **action, + const char *default_action); int sf_logger_init(LogContext *pContext, const char *filename_prefix);