summaryrefslogtreecommitdiff
path: root/mysys
diff options
context:
space:
mode:
authorunknown <knielsen@knielsen-hq.org>2010-05-31 10:43:34 +0200
committerunknown <knielsen@knielsen-hq.org>2010-05-31 10:43:34 +0200
commit0fc39acb8125fae95062e7b680b022b075a308c3 (patch)
treecf991484ab999e60eb9b33d81733fca16b368cf9 /mysys
parente6eab96555d8cf70cbe6c8a94956855a0b5eca43 (diff)
parent80ba8556e772fd7e4eb369c64bb32ca44f93e221 (diff)
downloadmariadb-git-0fc39acb8125fae95062e7b680b022b075a308c3.tar.gz
Automerge MariaDB 5.1.47 release into main.
Diffstat (limited to 'mysys')
-rw-r--r--mysys/charset.c8
-rw-r--r--mysys/default.c8
-rw-r--r--mysys/mf_loadpath.c16
-rw-r--r--mysys/mf_pack.c3
-rw-r--r--mysys/my_alloc.c3
-rw-r--r--mysys/my_file.c2
-rw-r--r--mysys/my_getwd.c7
-rw-r--r--mysys/my_init.c1
-rw-r--r--mysys/my_symlink.c5
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
{
/*