mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 20:12:31 +01:00
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.
This commit is contained in:
parent
88c4ad2435
commit
5d8222cd6f
3 changed files with 40 additions and 62 deletions
|
@ -50,7 +50,7 @@ int HandleServiceOptions(Options options)
|
|||
else
|
||||
{
|
||||
log_info("Service failed to install\n");
|
||||
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\n");
|
||||
ret_val= -1;
|
||||
ret_val= 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
return (int)winService.Init();
|
||||
ret_val= winService.Init() ? 0 : 1;
|
||||
return ret_val;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
return_value= 0;
|
||||
|
||||
err:
|
||||
options.cleanup();
|
||||
my_end(0);
|
||||
return 0;
|
||||
err:
|
||||
my_end(0);
|
||||
return 1;
|
||||
return return_value;
|
||||
}
|
||||
|
||||
/******************* Auxilary functions implementation **********************/
|
||||
|
|
|
@ -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)
|
||||
void Options::setup_windows_defaults()
|
||||
{
|
||||
char *dot= (char*)strrchr(src, '.');
|
||||
if (!dot) return (char*)src;
|
||||
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");
|
||||
|
||||
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, windows_config_file,
|
||||
sizeof(windows_config_file)))
|
||||
return -1;
|
||||
char *slash = strrchr(windows_config_file, '\\');
|
||||
strcpy(slash, "\\my.ini");
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in a new issue