mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Changed prototype of killed_ptr() to make it more portable
Applied patches for Netware
This commit is contained in:
@ -153,6 +153,7 @@ void log_info(char *, ...);
|
||||
void log_error(char *, ...);
|
||||
void log_errno(char *, ...);
|
||||
void die(char *);
|
||||
char *str_tok(char *string, const char *delim);
|
||||
|
||||
/******************************************************************************
|
||||
|
||||
@ -244,6 +245,7 @@ void mysql_install_db()
|
||||
mkdir(temp, S_IRWXU);
|
||||
|
||||
// create subdirectories
|
||||
log("Creating test-suite folders...\n");
|
||||
snprintf(temp, PATH_MAX, "%s/var/run", mysql_test_dir);
|
||||
mkdir(temp, S_IRWXU);
|
||||
snprintf(temp, PATH_MAX, "%s/var/tmp", mysql_test_dir);
|
||||
@ -262,7 +264,9 @@ void mysql_install_db()
|
||||
mkdir(temp, S_IRWXU);
|
||||
|
||||
// install databases
|
||||
log("Creating test databases for master... \n");
|
||||
install_db(master_dir);
|
||||
log("Creating test databases for slave... \n");
|
||||
install_db(slave_dir);
|
||||
}
|
||||
|
||||
@ -346,6 +350,9 @@ void start_master()
|
||||
add_arg(&al, "--character-sets-dir=%s", char_dir);
|
||||
add_arg(&al, "--tmpdir=%s", mysql_tmp_dir);
|
||||
add_arg(&al, "--language=%s", lang_dir);
|
||||
#ifdef DEBUG //only for debug builds
|
||||
add_arg(&al, "--debug");
|
||||
#endif
|
||||
|
||||
if (use_openssl)
|
||||
{
|
||||
@ -370,33 +377,28 @@ void start_master()
|
||||
if (master_opt[0] != NULL)
|
||||
{
|
||||
char *p;
|
||||
char *temp;
|
||||
|
||||
p = (char *)strtok(master_opt, " \t");
|
||||
|
||||
if ((temp = strstr(p, "timezone")) == NULL)
|
||||
p = (char *)str_tok(master_opt, " \t");
|
||||
if (!strstr(master_opt, "timezone"))
|
||||
{
|
||||
while(p)
|
||||
while (p)
|
||||
{
|
||||
add_arg(&al, "%s", p);
|
||||
p = (char *)strtok(NULL, " \t");
|
||||
p = (char *)str_tok(NULL, " \t");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//do nothing
|
||||
}
|
||||
}
|
||||
|
||||
// remove the pid file if it exists
|
||||
remove(master_pid);
|
||||
|
||||
// spawn
|
||||
if ((err = spawn(mysqld_file, &al, FALSE, NULL, master_out, master_err)) == 0)
|
||||
if ((err= spawn(mysqld_file, &al, FALSE, NULL, master_out, master_err)) == 0)
|
||||
{
|
||||
sleep_until_file_exists(master_pid);
|
||||
|
||||
if ((err = wait_for_server_start(bin_dir, user, password, master_port,mysql_tmp_dir)) == 0)
|
||||
if ((err = wait_for_server_start(bin_dir, user, password, master_port,
|
||||
mysql_tmp_dir)) == 0)
|
||||
{
|
||||
master_running = TRUE;
|
||||
}
|
||||
@ -467,11 +469,11 @@ void start_slave()
|
||||
snprintf(temp, PATH_MAX, "%s/master.info", slave_dir);
|
||||
fp = fopen(temp, "wb+");
|
||||
|
||||
fputs("master-bin.001\n", fp);
|
||||
fputs("master-bin.000001\n", fp);
|
||||
fputs("4\n", fp);
|
||||
fputs("127.0.0.1\n", fp);
|
||||
fputs("replicate\n", fp);
|
||||
fputs("aaaaaaaaaaaaaaabthispartofthepasswordisnotused\n", fp);
|
||||
fputs("aaaaaaaaaaaaaaab\n", fp);
|
||||
fputs("9306\n", fp);
|
||||
fputs("1\n", fp);
|
||||
fputs("0\n", fp);
|
||||
@ -521,6 +523,9 @@ void start_slave()
|
||||
add_arg(&al, "--master-retry-count=10");
|
||||
add_arg(&al, "-O");
|
||||
add_arg(&al, "slave_net_timeout=10");
|
||||
#ifdef DEBUG //only for debug builds
|
||||
add_arg(&al, "--debug");
|
||||
#endif
|
||||
|
||||
if (use_openssl)
|
||||
{
|
||||
@ -534,13 +539,13 @@ void start_slave()
|
||||
{
|
||||
char *p;
|
||||
|
||||
p = (char *)strtok(slave_master_info, " \t");
|
||||
p = (char *)str_tok(slave_master_info, " \t");
|
||||
|
||||
while(p)
|
||||
{
|
||||
add_arg(&al, "%s", p);
|
||||
|
||||
p = (char *)strtok(NULL, " \t");
|
||||
p = (char *)str_tok(NULL, " \t");
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -567,13 +572,13 @@ void start_slave()
|
||||
{
|
||||
char *p;
|
||||
|
||||
p = (char *)strtok(slave_opt, " \t");
|
||||
p = (char *)str_tok(slave_opt, " \t");
|
||||
|
||||
while(p)
|
||||
{
|
||||
add_arg(&al, "%s", p);
|
||||
|
||||
p = (char *)strtok(NULL, " \t");
|
||||
p = (char *)str_tok(NULL, " \t");
|
||||
}
|
||||
}
|
||||
|
||||
@ -585,7 +590,8 @@ void start_slave()
|
||||
{
|
||||
sleep_until_file_exists(slave_pid);
|
||||
|
||||
if ((err = wait_for_server_start(bin_dir, user, password, slave_port,mysql_tmp_dir)) == 0)
|
||||
if ((err = wait_for_server_start(bin_dir, user, password, slave_port,
|
||||
mysql_tmp_dir)) == 0)
|
||||
{
|
||||
slave_running = TRUE;
|
||||
}
|
||||
@ -636,7 +642,8 @@ void stop_slave()
|
||||
if (!slave_running) return;
|
||||
|
||||
// stop
|
||||
if ((err = stop_server(bin_dir, user, password, slave_port, slave_pid,mysql_tmp_dir)) == 0)
|
||||
if ((err = stop_server(bin_dir, user, password, slave_port, slave_pid,
|
||||
mysql_tmp_dir)) == 0)
|
||||
{
|
||||
slave_running = FALSE;
|
||||
}
|
||||
@ -660,7 +667,8 @@ void stop_master()
|
||||
// running?
|
||||
if (!master_running) return;
|
||||
|
||||
if ((err = stop_server(bin_dir, user, password, master_port, master_pid,mysql_tmp_dir)) == 0)
|
||||
if ((err = stop_server(bin_dir, user, password, master_port, master_pid,
|
||||
mysql_tmp_dir)) == 0)
|
||||
{
|
||||
master_running = FALSE;
|
||||
}
|
||||
@ -697,6 +705,7 @@ void mysql_stop()
|
||||
******************************************************************************/
|
||||
void mysql_restart()
|
||||
{
|
||||
log_info("Restarting the MySQL server(s): %u", ++restarts);
|
||||
|
||||
mysql_stop();
|
||||
|
||||
@ -758,6 +767,12 @@ int read_option(char *opt_file, char *opt)
|
||||
|
||||
strcat(opt, temp);
|
||||
}
|
||||
// Check for double backslash and replace it with single bakslash
|
||||
if ((p = strstr(opt, "\\\\")) != NULL)
|
||||
{
|
||||
/* bmove is guranteed to work byte by byte */
|
||||
bmove(p, p+1, strlen(p+1));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -786,17 +801,13 @@ void run_test(char *test)
|
||||
int flag = FALSE;
|
||||
struct stat info;
|
||||
|
||||
// single test?
|
||||
// if (!single_test)
|
||||
{
|
||||
// skip tests in the skip list
|
||||
snprintf(temp, PATH_MAX, " %s ", test);
|
||||
skip = (strindex(skip_test, temp) != NULL);
|
||||
if( skip == FALSE )
|
||||
ignore = (strindex(ignore_test, temp) != NULL);
|
||||
}
|
||||
// skip tests in the skip list
|
||||
snprintf(temp, PATH_MAX, " %s ", test);
|
||||
skip = (strindex(skip_test, temp) != NULL);
|
||||
if (skip == FALSE)
|
||||
ignore = (strindex(ignore_test, temp) != NULL);
|
||||
|
||||
if(ignore)
|
||||
if (ignore)
|
||||
{
|
||||
// show test
|
||||
log("%-46s ", test);
|
||||
@ -837,7 +848,7 @@ void run_test(char *test)
|
||||
if (stat(test_file, &info))
|
||||
{
|
||||
snprintf(test_file, PATH_MAX, "%s/%s%s", test_dir, test, TEST_SUFFIX);
|
||||
if(access(test_file,0))
|
||||
if (access(test_file,0))
|
||||
{
|
||||
printf("Invalid test name %s, %s file not found\n",test,test_file);
|
||||
return;
|
||||
@ -1087,8 +1098,7 @@ void die(char *msg)
|
||||
void setup(char *file)
|
||||
{
|
||||
char temp[PATH_MAX];
|
||||
char mysqldump_load[PATH_MAX*2],mysqlbinlog_load[PATH_MAX*2];
|
||||
|
||||
char file_path[PATH_MAX*2];
|
||||
char *p;
|
||||
|
||||
// set the timezone for the timestamp test
|
||||
@ -1145,13 +1155,15 @@ void setup(char *file)
|
||||
strcpy(temp, strlwr(skip_test));
|
||||
snprintf(skip_test, PATH_MAX, " %s ", temp);
|
||||
|
||||
snprintf(mysqlbinlog_load,PATH_MAX*2,"%s/mysqlbinlog --no-defaults --local-load=%s",bin_dir,mysql_tmp_dir);
|
||||
snprintf(mysqldump_load,PATH_MAX*2,"%s/mysqldump --no-defaults -uroot --port=%d",bin_dir,master_port);
|
||||
// environment
|
||||
setenv("MYSQL_TEST_DIR", mysql_test_dir, 1);
|
||||
setenv("MYSQL_DUMP", mysqldump_load, 1);
|
||||
setenv("MYSQL_BINLOG", mysqlbinlog_load, 1);
|
||||
snprintf(file_path, PATH_MAX*2, "%s/mysqldump --no-defaults -u root --port=%u", bin_dir, master_port);
|
||||
setenv("MYSQL_DUMP", file_path, 1);
|
||||
snprintf(file_path, PATH_MAX*2, "%s/mysqlbinlog --no-defaults --local-load=%s", bin_dir, mysql_tmp_dir);
|
||||
setenv("MYSQL_BINLOG", file_path, 1);
|
||||
setenv("MASTER_MYPORT", "9306", 1);
|
||||
|
||||
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
@ -1165,20 +1177,22 @@ int main(int argc, char **argv)
|
||||
// setup
|
||||
setup(argv[0]);
|
||||
|
||||
/* The --ignore option is comma saperated list of test cases to skip and should
|
||||
* be very first command line option to the test suite.
|
||||
* The usage is now:
|
||||
* mysql_test_run --ignore=test1,test2 test3 test4
|
||||
* where test1 and test2 are test cases to ignore
|
||||
* and test3 and test4 are test cases to run. */
|
||||
if( argc >= 2 && !strnicmp(argv[1], "--ignore=", sizeof("--ignore=")-1) )
|
||||
/* The --ignore option is comma saperated list of test cases to skip and
|
||||
should be very first command line option to the test suite.
|
||||
|
||||
The usage is now:
|
||||
mysql_test_run --ignore=test1,test2 test3 test4
|
||||
where test1 and test2 are test cases to ignore
|
||||
and test3 and test4 are test cases to run.
|
||||
*/
|
||||
if (argc >= 2 && !strnicmp(argv[1], "--ignore=", sizeof("--ignore=")-1))
|
||||
{
|
||||
char *temp, *token;
|
||||
temp=strdup(strchr(argv[1],'=') + 1);
|
||||
for(token=strtok(temp, ","); token != NULL; token=strtok(NULL, ","))
|
||||
temp= strdup(strchr(argv[1],'=') + 1);
|
||||
for (token=str_tok(temp, ","); token != NULL; token=str_tok(NULL, ","))
|
||||
{
|
||||
if( strlen(ignore_test) + strlen(token) + 2 <= PATH_MAX-1 )
|
||||
sprintf( ignore_test+strlen(ignore_test), " %s ", token);
|
||||
if (strlen(ignore_test) + strlen(token) + 2 <= PATH_MAX-1)
|
||||
sprintf(ignore_test+strlen(ignore_test), " %s ", token);
|
||||
else
|
||||
{
|
||||
free(temp);
|
||||
@ -1272,3 +1286,114 @@ int main(int argc, char **argv)
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Synopsis:
|
||||
This function breaks the string into a sequence of tokens. The difference
|
||||
between this function and strtok is that it respects the quoted string i.e.
|
||||
it skips any delimiter character within the quoted part of the string.
|
||||
It return tokens by eliminating quote character. It modifies the input string
|
||||
passed. It will work with whitespace delimeter but may not work properly with
|
||||
other delimeter. If the delimeter will contain any quote character, then
|
||||
function will not tokenize and will return null string.
|
||||
e.g. if input string is
|
||||
--init-slave="set global max_connections=500" --skip-external-locking
|
||||
then the output will two string i.e.
|
||||
--init-slave=set global max_connections=500
|
||||
--skip-external-locking
|
||||
|
||||
Arguments:
|
||||
string: input string
|
||||
delim: set of delimiter character
|
||||
Output:
|
||||
return the null terminated token of NULL.
|
||||
*/
|
||||
|
||||
|
||||
char *str_tok(char *string, const char *delim)
|
||||
{
|
||||
char *token; /* current token received from strtok */
|
||||
char *qt_token; /* token delimeted by the matching pair of quote */
|
||||
/*
|
||||
if there are any quote chars found in the token then this variable
|
||||
will hold the concatenated string to return to the caller
|
||||
*/
|
||||
char *ptr_token=NULL;
|
||||
/* pointer to the quote character in the token from strtok */
|
||||
char *ptr_quote=NULL;
|
||||
|
||||
/* See if the delimeter contains any quote character */
|
||||
if (strchr(delim,'\'') || strchr(delim,'\"'))
|
||||
return NULL;
|
||||
|
||||
/* repeate till we are getting some token from strtok */
|
||||
while ((token = (char*)strtok(string, delim) ) != NULL)
|
||||
{
|
||||
/*
|
||||
make the input string NULL so that next time onward strtok can
|
||||
be called with NULL input string.
|
||||
*/
|
||||
string = NULL;
|
||||
|
||||
/* check if the current token contain double quote character*/
|
||||
if ((ptr_quote = (char*)strchr(token,'\"')) != NULL)
|
||||
{
|
||||
/*
|
||||
get the matching the matching double quote in the remaining
|
||||
input string
|
||||
*/
|
||||
qt_token = (char*)strtok(NULL,"\"");
|
||||
}
|
||||
/* check if the current token contain single quote character*/
|
||||
else if ((ptr_quote = (char*)strchr(token,'\'')) != NULL)
|
||||
{
|
||||
/*
|
||||
get the matching the matching single quote in the remaining
|
||||
input string
|
||||
*/
|
||||
qt_token = (char*)strtok(NULL,"\'");
|
||||
}
|
||||
|
||||
/*
|
||||
if the current token does not contains any quote character then
|
||||
return to the caller.
|
||||
*/
|
||||
if (ptr_quote == NULL)
|
||||
{
|
||||
/*
|
||||
if there is any earlier token i.e. ptr_token then append the
|
||||
current token in it and return it else return the current
|
||||
token directly
|
||||
*/
|
||||
return ptr_token ? strcat(ptr_token,token) : token;
|
||||
}
|
||||
|
||||
/*
|
||||
remove the quote character i.e. make NULL so that the token will
|
||||
be devided in two part and later both part can be concatenated
|
||||
and hence quote will be removed
|
||||
*/
|
||||
*ptr_quote= 0;
|
||||
|
||||
/* check if ptr_token has been initialized or not */
|
||||
if (ptr_token == NULL)
|
||||
{
|
||||
/* initialize the ptr_token with current token */
|
||||
ptr_token= token;
|
||||
/* copy entire string between matching pair of quote*/
|
||||
sprintf(ptr_token+strlen(ptr_token),"%s %s", ptr_quote+1, qt_token);
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
copy the current token and entire string between matching pair
|
||||
of quote
|
||||
*/
|
||||
sprintf(ptr_token+strlen(ptr_token),"%s%s %s", token, ptr_quote+1,
|
||||
qt_token );
|
||||
}
|
||||
}
|
||||
|
||||
/* return the concatenated token */
|
||||
return ptr_token;
|
||||
}
|
||||
|
Reference in New Issue
Block a user