summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--server-tools/instance-manager/IMService.cpp6
-rw-r--r--server-tools/instance-manager/mysqlmanager.cc15
-rw-r--r--server-tools/instance-manager/options.cc83
-rw-r--r--server-tools/instance-manager/options.h2
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
};