Commit 5d8222cd authored by unknown's avatar unknown

changes to IM that came from Petr and JimW's review.


server-tools/instance-manager/IMService.cpp:
  make sure HandleServiceOptions returns 0 on success and 1 on failure
server-tools/instance-manager/mysqlmanager.cc:
  default return value is 1.
  simplify some code bits by just jumping to err on error.
  move options.cleanup inside the err block.  In this case, the err block
  is more than just an error block.  It is the terminating block
  for both error and success.  You set return_value to 0 for success
  or leave it as 1 for failure.  This simplies this function a bit.
server-tools/instance-manager/options.cc:
  remove the malloc for default password filename on Windows and replace
  with statically allocated memory.
  
  default Options:saved_argv to NULL so that we will know if we need
  to free it in cleanup()
  
  setup the default config file location for Windows inside the
  setup_windows_defaults function and remove this code from load()
  
  rework setup_windows_defaults so that it properly returns 0 on success
  and 1 on error and so it fills in the default location for the
  log file, password file, and config file.
parent 88c4ad24
...@@ -50,7 +50,7 @@ int HandleServiceOptions(Options options) ...@@ -50,7 +50,7 @@ int HandleServiceOptions(Options options)
else else
{ {
log_info("Service failed to install\n"); log_info("Service failed to install\n");
ret_val= -1; ret_val= 1;
} }
} }
else if (options.remove_service) else if (options.remove_service)
...@@ -62,10 +62,10 @@ int HandleServiceOptions(Options options) ...@@ -62,10 +62,10 @@ int HandleServiceOptions(Options options)
else else
{ {
log_info("Service failed to remove\n"); log_info("Service failed to remove\n");
ret_val= -1; ret_val= 1;
} }
} }
else else
return (int)winService.Init(); ret_val= winService.Init() ? 0 : 1;
return ret_val; return ret_val;
} }
...@@ -79,6 +79,7 @@ int HandleServiceOptions(Options options); ...@@ -79,6 +79,7 @@ int HandleServiceOptions(Options options);
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
int return_value= 1;
init_environment(argv[0]); init_environment(argv[0]);
Options options; Options options;
struct passwd *user_info; struct passwd *user_info;
...@@ -90,11 +91,8 @@ int main(int argc, char *argv[]) ...@@ -90,11 +91,8 @@ int main(int argc, char *argv[])
if ((user_info= check_user(options.user))) if ((user_info= check_user(options.user)))
{ {
if (set_user(options.user, user_info)) if (set_user(options.user, user_info))
{
options.cleanup();
goto err; goto err;
} }
}
if (options.run_as_service) if (options.run_as_service)
{ {
...@@ -105,17 +103,18 @@ int main(int argc, char *argv[]) ...@@ -105,17 +103,18 @@ int main(int argc, char *argv[])
} }
#else #else
#ifdef NDEBUG #ifdef NDEBUG
return HandleServiceOptions(options); return_value= HandleServiceOptions(options);
goto err; /* this is not always an error but we reuse the label */
#endif #endif
#endif #endif
manager(options); manager(options);
options.cleanup(); return_value= 0;
my_end(0);
return 0;
err: err:
options.cleanup();
my_end(0); my_end(0);
return 1; return return_value;
} }
/******************* Auxilary functions implementation **********************/ /******************* Auxilary functions implementation **********************/
......
...@@ -30,18 +30,20 @@ ...@@ -30,18 +30,20 @@
#define QUOTE2(x) #x #define QUOTE2(x) #x
#define QUOTE(x) QUOTE2(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__ #ifdef __WIN__
char windows_config_file[FN_REFLEN];
char Options::install_as_service; char Options::install_as_service;
char Options::remove_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 #else
char Options::run_as_service; char Options::run_as_service;
const char *Options::user= 0; /* No default value */ 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); const char *Options::config_file= QUOTE(DEFAULT_CONFIG_FILE);
#endif
const char *Options::log_file_name= default_log_file_name; const char *Options::log_file_name= default_log_file_name;
const char *Options::pid_file_name= QUOTE(DEFAULT_PID_FILE_NAME); const char *Options::pid_file_name= QUOTE(DEFAULT_PID_FILE_NAME);
const char *Options::socket_file_name= QUOTE(DEFAULT_SOCKET_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 */ ...@@ -51,7 +53,7 @@ const char *Options::bind_address= 0; /* No default value */
uint Options::monitoring_interval= DEFAULT_MONITORING_INTERVAL; uint Options::monitoring_interval= DEFAULT_MONITORING_INTERVAL;
uint Options::port_number= DEFAULT_PORT; uint Options::port_number= DEFAULT_PORT;
/* just to declare */ /* just to declare */
char **Options::saved_argv; char **Options::saved_argv= NULL;
/* /*
List of options, accepted by the instance manager. List of options, accepted by the instance manager.
...@@ -262,30 +264,8 @@ int Options::load(int argc, char **argv) ...@@ -262,30 +264,8 @@ int Options::load(int argc, char **argv)
} }
#ifdef __WIN__ #ifdef __WIN__
setup_windows_defaults(*argv); if (setup_windows_defaults())
/*
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; 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;
}
#endif #endif
/* config-file options are prepended to command-line ones */ /* config-file options are prepended to command-line ones */
...@@ -305,33 +285,32 @@ err: ...@@ -305,33 +285,32 @@ err:
void Options::cleanup() void Options::cleanup()
{ {
/* free_defaults returns nothing */ /* free_defaults returns nothing */
if (Options::saved_argv != NULL)
free_defaults(Options::saved_argv); free_defaults(Options::saved_argv);
#ifdef __WIN__
free((char*)default_password_file_name);
#endif
} }
#ifdef __WIN__ #ifdef __WIN__
char* change_extension(const char *src, const char *newext) void Options::setup_windows_defaults()
{ {
char *dot= (char*)strrchr(src, '.'); if (!GetModuleFileName(NULL, default_password_file_name,
if (!dot) return (char*)src; sizeof(default_password_file_name)))
return -1;
int newlen= dot-src+strlen(newext)+1; char *filename = strstr(default_password_file_name, ".exe");
char *temp= (char*)malloc(newlen); strcpy(filename, ".passwd");
bzero(temp, newlen);
strncpy(temp, src, dot-src+1); if (!GetModuleFileName(NULL, default_log_file_name,
strcat(temp, newext); sizeof(default_log_file_name)))
return temp; return -1;
} filename = strstr(default_log_file_name, ".exe");
strcpy(filename, ".log");
void Options::setup_windows_defaults(const char *progname) if (!GetModuleFileName(NULL, windows_config_file,
{ sizeof(windows_config_file)))
Options::password_file_name= default_password_file_name= return -1;
change_extension(progname, "passwd"); char *slash = strrchr(windows_config_file, '\\');
Options::log_file_name= default_log_file_name= strcpy(slash, "\\my.ini");
change_extension(progname, "log"); return 0;
} }
#endif #endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment