diff options
author | unknown <knielsen@knielsen-hq.org> | 2010-05-31 10:43:34 +0200 |
---|---|---|
committer | unknown <knielsen@knielsen-hq.org> | 2010-05-31 10:43:34 +0200 |
commit | 0fc39acb8125fae95062e7b680b022b075a308c3 (patch) | |
tree | cf991484ab999e60eb9b33d81733fca16b368cf9 /mysys | |
parent | e6eab96555d8cf70cbe6c8a94956855a0b5eca43 (diff) | |
parent | 80ba8556e772fd7e4eb369c64bb32ca44f93e221 (diff) | |
download | mariadb-git-0fc39acb8125fae95062e7b680b022b075a308c3.tar.gz |
Automerge MariaDB 5.1.47 release into main.
Diffstat (limited to 'mysys')
-rw-r--r-- | mysys/charset.c | 8 | ||||
-rw-r--r-- | mysys/default.c | 8 | ||||
-rw-r--r-- | mysys/mf_loadpath.c | 16 | ||||
-rw-r--r-- | mysys/mf_pack.c | 3 | ||||
-rw-r--r-- | mysys/my_alloc.c | 3 | ||||
-rw-r--r-- | mysys/my_file.c | 2 | ||||
-rw-r--r-- | mysys/my_getwd.c | 7 | ||||
-rw-r--r-- | mysys/my_init.c | 1 | ||||
-rw-r--r-- | mysys/my_symlink.c | 5 |
9 files changed, 39 insertions, 14 deletions
diff --git a/mysys/charset.c b/mysys/charset.c index dd27cb45a5f..8d2f68b7bbf 100644 --- a/mysys/charset.c +++ b/mysys/charset.c @@ -245,6 +245,8 @@ static int add_collation(CHARSET_INFO *cs) if (cs_copy_data(all_charsets[cs->number],cs)) return MY_XML_ERROR; + newcs->caseup_multiply= newcs->casedn_multiply= 1; + if (!strcmp(cs->csname,"ucs2") ) { #if defined(HAVE_CHARSET_ucs2) && defined(HAVE_UCA_COLLATIONS) @@ -403,6 +405,7 @@ static void *cs_alloc(size_t size) static my_pthread_once_t charsets_initialized= MY_PTHREAD_ONCE_INIT; +static my_pthread_once_t charsets_template= MY_PTHREAD_ONCE_INIT; static void init_available_charsets(void) { @@ -430,6 +433,11 @@ static void init_available_charsets(void) } +void free_charsets(void) +{ + charsets_initialized= charsets_template; +} + uint get_collation_number(const char *name) { my_pthread_once(&charsets_initialized, init_available_charsets); diff --git a/mysys/default.c b/mysys/default.c index 4e9d4faae91..63f9445dbdc 100644 --- a/mysys/default.c +++ b/mysys/default.c @@ -995,10 +995,10 @@ void print_defaults(const char *conf_file, const char **groups) } } puts("\nThe following options may be given as the first argument:\n\ ---print-defaults Print the program argument list and exit\n\ ---no-defaults Don't read default options from any options file\n\ ---defaults-file=# Only read default options from the given file #\n\ ---defaults-extra-file=# Read this file after the global files are read"); +--print-defaults Print the program argument list and exit.\n\ +--no-defaults Don't read default options from any option file.\n\ +--defaults-file=# Only read default options from the given file #.\n\ +--defaults-extra-file=# Read this file after the global files are read."); } #include <help_end.h> diff --git a/mysys/mf_loadpath.c b/mysys/mf_loadpath.c index 48a69207839..510c72ffa38 100644 --- a/mysys/mf_loadpath.c +++ b/mysys/mf_loadpath.c @@ -26,7 +26,8 @@ char * my_load_path(char * to, const char *path, const char *own_path_prefix) { - char buff[FN_REFLEN]; + char buff[FN_REFLEN+1]; + const char *from= buff; int is_cur; DBUG_ENTER("my_load_path"); DBUG_PRINT("enter",("path: %s prefix: %s",path, @@ -34,7 +35,7 @@ char * my_load_path(char * to, const char *path, if ((path[0] == FN_HOMELIB && path[1] == FN_LIBCHAR) || test_if_hard_path(path)) - VOID(strmov(buff,path)); + from= path; else if ((is_cur=(path[0] == FN_CURLIB && path[1] == FN_LIBCHAR)) || (is_prefix(path,FN_PARENTDIR)) || ! own_path_prefix) @@ -42,13 +43,16 @@ char * my_load_path(char * to, const char *path, if (is_cur) is_cur=2; /* Remove current dir */ if (! my_getwd(buff,(uint) (FN_REFLEN-strlen(path)+is_cur),MYF(0))) - VOID(strcat(buff,path+is_cur)); + { + size_t length= strlen(buff); + (void) strmake(buff + length, path+is_cur, FN_REFLEN - length); + } else - VOID(strmov(buff,path)); /* Return org file name */ + from= path; /* Return org file name */ } else - VOID(strxmov(buff,own_path_prefix,path,NullS)); - strmov(to,buff); + (void) strxnmov(buff, FN_REFLEN, own_path_prefix, path, NullS); + strmake(to, from, FN_REFLEN-1); DBUG_PRINT("exit",("to: %s",to)); DBUG_RETURN(to); } /* my_load_path */ diff --git a/mysys/mf_pack.c b/mysys/mf_pack.c index c13a5581b80..4f7cd90e8aa 100644 --- a/mysys/mf_pack.c +++ b/mysys/mf_pack.c @@ -311,6 +311,9 @@ size_t normalize_dirname(char *to, const char *from) #endif buff[length - 1] != FN_LIBCHAR && buff[length - 1] != '/') { + /* we need reserve 2 bytes for the trailing slash and the zero */ + if (length >= sizeof (buff) - 1) + length= sizeof (buff) - 2; buff[length]= FN_LIBCHAR; buff[length + 1]= '\0'; } diff --git a/mysys/my_alloc.c b/mysys/my_alloc.c index 32fc75fc692..8d3bc0c3fb2 100644 --- a/mysys/my_alloc.c +++ b/mysys/my_alloc.c @@ -21,7 +21,6 @@ #undef EXTRA_DEBUG #define EXTRA_DEBUG - /* Initialize memory root @@ -276,7 +275,7 @@ void *multi_alloc_root(MEM_ROOT *root, ...) DBUG_RETURN((void*) start); } -#define TRASH_MEM(X) TRASH(((char*)(X) + ((X)->size-(X)->left)), (X)->left) +#define TRASH_MEM(X) VALGRIND_MAKE_MEM_UNDEFINED(((char*)(X) + ((X)->size-(X)->left)), (X)->left) /* Mark all data in blocks free for reusage */ diff --git a/mysys/my_file.c b/mysys/my_file.c index 64dc4745703..594f361437f 100644 --- a/mysys/my_file.c +++ b/mysys/my_file.c @@ -72,7 +72,7 @@ static uint set_max_open_files(uint max_file_limit) } #else -static int set_max_open_files(uint max_file_limit) +static uint set_max_open_files(uint max_file_limit) { /* We don't know the limit. Return best guess */ return min(max_file_limit, OS_FILE_LIMIT); diff --git a/mysys/my_getwd.c b/mysys/my_getwd.c index e0c5b94b53e..e6b867e2753 100644 --- a/mysys/my_getwd.c +++ b/mysys/my_getwd.c @@ -50,11 +50,16 @@ int my_getwd(char * buf, size_t size, myf MyFlags) DBUG_PRINT("my",("buf: 0x%lx size: %u MyFlags %d", (long) buf, (uint) size, MyFlags)); + if (size < 1) + return(-1); + if (curr_dir[0]) /* Current pos is saved here */ VOID(strmake(buf,&curr_dir[0],size-1)); else { #if defined(HAVE_GETCWD) + if (size < 2) + return(-1); if (!getcwd(buf,(uint) (size-2)) && MyFlags & MY_WME) { my_errno=errno; @@ -68,6 +73,8 @@ int my_getwd(char * buf, size_t size, myf MyFlags) strmake(buf,pathname,size-1); } #elif defined(VMS) + if (size < 2) + return(-1); if (!getcwd(buf,size-2,1) && MyFlags & MY_WME) { my_errno=errno; diff --git a/mysys/my_init.c b/mysys/my_init.c index 0f6bb80fe95..e7ab9ba7a1f 100644 --- a/mysys/my_init.c +++ b/mysys/my_init.c @@ -166,6 +166,7 @@ void my_end(int infoflag) my_print_open_files(); } } + free_charsets(); my_error_unregister_all(); my_once_free(); #ifdef THREAD diff --git a/mysys/my_symlink.c b/mysys/my_symlink.c index 258e227bb7b..33f45a882e1 100644 --- a/mysys/my_symlink.c +++ b/mysys/my_symlink.c @@ -117,6 +117,9 @@ int my_is_symlink(const char *filename __attribute__((unused))) /* Resolve all symbolic links in path 'to' may be equal to 'filename' + + to is guaranteed to never set to a string longer than FN_REFLEN + (including the end \0) */ int my_realpath(char *to, const char *filename, @@ -130,7 +133,7 @@ int my_realpath(char *to, const char *filename, DBUG_PRINT("info",("executing realpath")); if ((ptr=realpath(filename,buff))) - strmake(to,ptr,FN_REFLEN-1); + strmake(to, ptr, FN_REFLEN-1); else { /* |