diff options
-rw-r--r-- | server-tools/instance-manager/IMService.cpp | 6 | ||||
-rw-r--r-- | server-tools/instance-manager/mysqlmanager.cc | 15 | ||||
-rw-r--r-- | server-tools/instance-manager/options.cc | 83 | ||||
-rw-r--r-- | server-tools/instance-manager/options.h | 2 |
4 files changed, 42 insertions, 64 deletions
diff --git a/server-tools/instance-manager/IMService.cpp b/server-tools/instance-manager/IMService.cpp index a5070dcf0f6..e040a5da8c2 100644 --- a/server-tools/instance-manager/IMService.cpp +++ b/server-tools/instance-manager/IMService.cpp @@ -50,7 +50,7 @@ int HandleServiceOptions(Options options) else { log_info("Service failed to install"); - ret_val= -1; + ret_val= 1; } } else if (options.remove_service) @@ -62,10 +62,10 @@ int HandleServiceOptions(Options options) else { log_info("Service failed to remove"); - ret_val= -1; + ret_val= 1; } } else - return (int)winService.Init(); + ret_val= !winService.Init(); return ret_val; } diff --git a/server-tools/instance-manager/mysqlmanager.cc b/server-tools/instance-manager/mysqlmanager.cc index de80878e283..a1420a639cb 100644 --- a/server-tools/instance-manager/mysqlmanager.cc +++ b/server-tools/instance-manager/mysqlmanager.cc @@ -79,6 +79,7 @@ int HandleServiceOptions(Options options); int main(int argc, char *argv[]) { + int return_value= 1; init_environment(argv[0]); Options options; struct passwd *user_info; @@ -90,10 +91,7 @@ int main(int argc, char *argv[]) if ((user_info= check_user(options.user))) { if (set_user(options.user, user_info)) - { - options.cleanup(); goto err; - } } if (options.run_as_service) @@ -105,17 +103,18 @@ int main(int argc, char *argv[]) } #else #ifdef NDEBUG - return HandleServiceOptions(options); + return_value= HandleServiceOptions(options); + goto err; /* this is not always an error but we reuse the label */ #endif #endif manager(options); - options.cleanup(); - my_end(0); - return 0; + return_value= 0; + err: + options.cleanup(); my_end(0); - return 1; + return return_value; } /******************* Auxilary functions implementation **********************/ diff --git a/server-tools/instance-manager/options.cc b/server-tools/instance-manager/options.cc index a9d31457d98..6fd11471fc6 100644 --- a/server-tools/instance-manager/options.cc +++ b/server-tools/instance-manager/options.cc @@ -30,18 +30,20 @@ #define QUOTE2(x) #x #define QUOTE(x) QUOTE2(x) -const char *default_password_file_name= QUOTE(DEFAULT_PASSWORD_FILE_NAME); -const char *default_log_file_name= QUOTE(DEFAULT_LOG_FILE_NAME); #ifdef __WIN__ -char windows_config_file[FN_REFLEN]; - char Options::install_as_service; char Options::remove_service; +char windows_config_file[FN_REFLEN]; +char default_password_file_name[FN_REFLEN]; +char default_log_file_name[FN_REFLEN]; +const char *Options::config_file= windows_config_file; #else char Options::run_as_service; const char *Options::user= 0; /* No default value */ -#endif +const char *default_password_file_name= QUOTE(DEFAULT_PASSWORD_FILE_NAME); +const char *default_log_file_name= QUOTE(DEFAULT_LOG_FILE_NAME); const char *Options::config_file= QUOTE(DEFAULT_CONFIG_FILE); +#endif const char *Options::log_file_name= default_log_file_name; const char *Options::pid_file_name= QUOTE(DEFAULT_PID_FILE_NAME); const char *Options::socket_file_name= QUOTE(DEFAULT_SOCKET_FILE_NAME); @@ -51,7 +53,7 @@ const char *Options::bind_address= 0; /* No default value */ uint Options::monitoring_interval= DEFAULT_MONITORING_INTERVAL; uint Options::port_number= DEFAULT_PORT; /* just to declare */ -char **Options::saved_argv; +char **Options::saved_argv= NULL; /* List of options, accepted by the instance manager. @@ -262,30 +264,8 @@ int Options::load(int argc, char **argv) } #ifdef __WIN__ - setup_windows_defaults(*argv); - - /* - On Windows, there are two possibilities. Either we are given - a defaults file on the command line or we use the my.ini file - that is in our app dir - */ - if (Options::config_file == NULL) - { - char *filename; - static const char default_win_config_file_name[]= "\\my.ini"; - - if (!GetModuleFileName(NULL, windows_config_file, - sizeof(windows_config_file))) - goto err; - - filename= strrchr(windows_config_file, "\\"); - /* - Don't check for the overflow as strlen("\\my.ini") is less - then strlen("mysqlmanager") (the binary name) - */ - strcpy(filename, default_win_config_file_name); - Options::config_file= windows_config_file; - } + if (setup_windows_defaults()) + goto err; #endif /* config-file options are prepended to command-line ones */ @@ -305,33 +285,32 @@ err: void Options::cleanup() { /* free_defaults returns nothing */ - free_defaults(Options::saved_argv); -#ifdef __WIN__ - free((char*)default_password_file_name); -#endif + if (Options::saved_argv != NULL) + free_defaults(Options::saved_argv); } #ifdef __WIN__ -char* change_extension(const char *src, const char *newext) +int Options::setup_windows_defaults() { - char *dot= (char*)strrchr(src, '.'); - if (!dot) return (char*)src; - - int newlen= dot-src+strlen(newext)+1; - char *temp= (char*)malloc(newlen); - bzero(temp, newlen); - strncpy(temp, src, dot-src+1); - strcat(temp, newext); - return temp; -} - -void Options::setup_windows_defaults(const char *progname) -{ - Options::password_file_name= default_password_file_name= - change_extension(progname, "passwd"); - Options::log_file_name= default_log_file_name= - change_extension(progname, "log"); + if (!GetModuleFileName(NULL, default_password_file_name, + sizeof(default_password_file_name))) + return 1; + char *filename= strstr(default_password_file_name, ".exe"); + strcpy(filename, ".passwd"); + + if (!GetModuleFileName(NULL, default_log_file_name, + sizeof(default_log_file_name))) + return 1; + filename= strstr(default_log_file_name, ".exe"); + strcpy(filename, ".log"); + + if (!GetModuleFileName(NULL, windows_config_file, + sizeof(windows_config_file))) + return 1; + char *slash= strrchr(windows_config_file, '\\'); + strcpy(slash, "\\my.ini"); + return 0; } #endif diff --git a/server-tools/instance-manager/options.h b/server-tools/instance-manager/options.h index 537316fedfc..5cc14e7ee7f 100644 --- a/server-tools/instance-manager/options.h +++ b/server-tools/instance-manager/options.h @@ -52,7 +52,7 @@ struct Options int load(int argc, char **argv); void cleanup(); #ifdef __WIN__ - void setup_windows_defaults(const char *progname); + int setup_windows_defaults(const char *progname); #endif }; |