mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
fix some issues with IM and long pathnames (with spaces)
This commit is contained in:
@ -47,14 +47,12 @@ static inline int create_mysqld_command(Buffer *buf,
|
||||
if (buf->get_size()) /* malloc succeeded */
|
||||
{
|
||||
#ifdef __WIN__
|
||||
buf->append(position, "\"", 1);
|
||||
position++;
|
||||
buf->append(position++, "\"", 1);
|
||||
#endif
|
||||
buf->append(position, mysqld_path_str, mysqld_path_len);
|
||||
position+= mysqld_path_len;
|
||||
#ifdef __WIN__
|
||||
buf->append(position, "\"", 1);
|
||||
position++;
|
||||
buf->append(position++, "\"", 1);
|
||||
#endif
|
||||
/* here the '\0' character is copied from the option string */
|
||||
buf->append(position, option, option_len);
|
||||
@ -340,6 +338,10 @@ int Instance_options::complete_initialization(const char *default_path,
|
||||
if (!mysqld_path && !(mysqld_path= strdup_root(&alloc, default_path)))
|
||||
goto err;
|
||||
|
||||
// it's safe to cast this to char* since this is a buffer we are allocating
|
||||
char* end= convert_dirname((char*)mysqld_path, mysqld_path, NullS);
|
||||
end[-1] = 0;
|
||||
|
||||
mysqld_path_len= strlen(mysqld_path);
|
||||
|
||||
if (mysqld_port)
|
||||
|
@ -24,6 +24,20 @@
|
||||
#include "portability.h"
|
||||
|
||||
|
||||
void trim_space(const char **text, uint *word_len)
|
||||
{
|
||||
const char* start = *text;
|
||||
while (*start != 0 && *start == ' ')
|
||||
start++;
|
||||
*text = start;
|
||||
|
||||
int len= strlen(start);
|
||||
const char* end= start + len - 1;
|
||||
while (end > start && (*end == ' ' || *end == '\r' || *end == '\n'))
|
||||
end--;
|
||||
*word_len= (end - start)+1;
|
||||
}
|
||||
|
||||
/*
|
||||
Parse output of the given command
|
||||
|
||||
@ -85,14 +99,13 @@ int parse_output_and_get_value(const char *command, const char *word,
|
||||
Get the word, which might contain non-alphanumeric characters. (Usually
|
||||
these are '/', '-' and '.' in the path expressions and filenames)
|
||||
*/
|
||||
get_word((const char **) &linep, &found_word_len, NONSPACE);
|
||||
if (!strncmp(word, linep, wordlen))
|
||||
{
|
||||
/*
|
||||
If we have found the word, return the next one (this is usually
|
||||
an option value) or the whole line (if flag)
|
||||
*/
|
||||
linep+= found_word_len; /* swallow the previous one */
|
||||
linep+= wordlen; /* swallow the previous one */
|
||||
if (flag & GET_VALUE)
|
||||
{
|
||||
get_word((const char **) &linep, &found_word_len, NONSPACE);
|
||||
|
Reference in New Issue
Block a user