summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <jimw@mysql.com>2005-06-24 13:41:33 -0700
committerunknown <jimw@mysql.com>2005-06-24 13:41:33 -0700
commitf56dd2a0fa24b154aa71307e12283e43c7ff0914 (patch)
treef29e416cf6a91425d2edb7c5e7cca1dde42543f6
parentd34e2ccb3ea51811552f3e87ad68ee8673804da1 (diff)
downloadmariadb-git-f56dd2a0fa24b154aa71307e12283e43c7ff0914.tar.gz
Add my_str_malloc and _free function pointers to strings library
which will by default exit(1) if malloc() fails, but can be set to do something else by the calling program does, which mysqld does to use my_malloc(..., MYF(MY_FAE)) instead. Also checks allocation in conf_to_src utility program. (Bug #7003) strings/conf_to_src.c: if malloc() fails, just abort VC++Files/client/mysqlclient.dsp: Add str_alloc.c VC++Files/client/mysqlclient_ia64.dsp: Add str_alloc.c VC++Files/libmysql/libmysql.dsp: Add str_alloc.c VC++Files/libmysql/libmysql_ia64.dsp: Add str_alloc.c VC++Files/libmysqld/libmysqld.dsp: Add str_alloc.c VC++Files/libmysqld/libmysqld_ia64.dsp: Add str_alloc.c VC++Files/strings/backup/strings.dsp: Add str_alloc.c VC++Files/strings/noMASM/strings.dsp: Add str_alloc.c VC++Files/strings/strings.dsp: Add str_alloc.c VC++Files/strings/strings_ia64.dsp: Add str_alloc.c include/m_string.h: Add my_str_malloc/free function pointers. libmysql/Makefile.shared: Add str_alloc.lo sql/mysqld.cc: Reassign my_str_malloc/free pointers so they use my_malloc/free strings/Makefile.am: Add str_alloc.c strings/ctype-tis620.c: Use my_str_malloc/free
-rw-r--r--VC++Files/client/mysqlclient.dsp4
-rw-r--r--VC++Files/client/mysqlclient_ia64.dsp4
-rw-r--r--VC++Files/libmysql/libmysql.dsp4
-rw-r--r--VC++Files/libmysql/libmysql_ia64.dsp4
-rw-r--r--VC++Files/libmysqld/libmysqld.dsp4
-rw-r--r--VC++Files/libmysqld/libmysqld_ia64.dsp4
-rw-r--r--VC++Files/strings/backup/strings.dsp7
-rw-r--r--VC++Files/strings/noMASM/strings.dsp4
-rw-r--r--VC++Files/strings/strings.dsp4
-rw-r--r--VC++Files/strings/strings_ia64.dsp4
-rw-r--r--include/m_string.h7
-rw-r--r--libmysql/Makefile.shared2
-rw-r--r--sql/mysqld.cc21
-rw-r--r--strings/Makefile.am6
-rw-r--r--strings/conf_to_src.c2
-rw-r--r--strings/ctype-tis620.c8
-rw-r--r--strings/str_alloc.c34
17 files changed, 113 insertions, 10 deletions
diff --git a/VC++Files/client/mysqlclient.dsp b/VC++Files/client/mysqlclient.dsp
index c0d891b1c9a..429a16073ee 100644
--- a/VC++Files/client/mysqlclient.dsp
+++ b/VC++Files/client/mysqlclient.dsp
@@ -571,6 +571,10 @@ SOURCE=..\strings\strxnmov.c
# End Source File
# Begin Source File
+SOURCE=..\strings\str_alloc.c
+# End Source File
+# Begin Source File
+
SOURCE=..\mysys\thr_mutex.c
# End Source File
# Begin Source File
diff --git a/VC++Files/client/mysqlclient_ia64.dsp b/VC++Files/client/mysqlclient_ia64.dsp
index e38f37d61e6..aab436458c4 100644
--- a/VC++Files/client/mysqlclient_ia64.dsp
+++ b/VC++Files/client/mysqlclient_ia64.dsp
@@ -552,6 +552,10 @@ SOURCE=..\strings\strxnmov.c
# End Source File
# Begin Source File
+SOURCE=..\strings\str_alloc.c
+# End Source File
+# Begin Source File
+
SOURCE=..\mysys\thr_mutex.c
# End Source File
# Begin Source File
diff --git a/VC++Files/libmysql/libmysql.dsp b/VC++Files/libmysql/libmysql.dsp
index 356aac3563f..34da02fa3c5 100644
--- a/VC++Files/libmysql/libmysql.dsp
+++ b/VC++Files/libmysql/libmysql.dsp
@@ -539,6 +539,10 @@ SOURCE=..\strings\strxnmov.c
# End Source File
# Begin Source File
+SOURCE=..\strings\str_alloc.c
+# End Source File
+# Begin Source File
+
SOURCE=..\mysys\thr_mutex.c
# End Source File
# Begin Source File
diff --git a/VC++Files/libmysql/libmysql_ia64.dsp b/VC++Files/libmysql/libmysql_ia64.dsp
index 75586ef2cf6..d18db197ad1 100644
--- a/VC++Files/libmysql/libmysql_ia64.dsp
+++ b/VC++Files/libmysql/libmysql_ia64.dsp
@@ -526,6 +526,10 @@ SOURCE=..\strings\strxnmov.c
# End Source File
# Begin Source File
+SOURCE=..\strings\str_alloc.c
+# End Source File
+# Begin Source File
+
SOURCE=..\mysys\thr_mutex.c
# End Source File
# Begin Source File
diff --git a/VC++Files/libmysqld/libmysqld.dsp b/VC++Files/libmysqld/libmysqld.dsp
index 85bd8ca023e..76f1a28b5d0 100644
--- a/VC++Files/libmysqld/libmysqld.dsp
+++ b/VC++Files/libmysqld/libmysqld.dsp
@@ -600,6 +600,10 @@ SOURCE=..\strings\strxnmov.c
# End Source File
# Begin Source File
+SOURCE=..\strings\str_alloc.c
+# End Source File
+# Begin Source File
+
SOURCE=..\sql\table.cpp
# End Source File
# Begin Source File
diff --git a/VC++Files/libmysqld/libmysqld_ia64.dsp b/VC++Files/libmysqld/libmysqld_ia64.dsp
index fe99ea480c7..b5223e38f2d 100644
--- a/VC++Files/libmysqld/libmysqld_ia64.dsp
+++ b/VC++Files/libmysqld/libmysqld_ia64.dsp
@@ -538,6 +538,10 @@ SOURCE=..\strings\strxnmov.c
# End Source File
# Begin Source File
+SOURCE=..\strings\str_alloc.c
+# End Source File
+# Begin Source File
+
SOURCE=..\sql\table.cpp
# End Source File
# Begin Source File
diff --git a/VC++Files/strings/backup/strings.dsp b/VC++Files/strings/backup/strings.dsp
index a6be39b40ab..dcff9915f13 100644
--- a/VC++Files/strings/backup/strings.dsp
+++ b/VC++Files/strings/backup/strings.dsp
@@ -238,7 +238,12 @@ InputName=Strxmov
# End Source File
# Begin Source File
-SOURCE=.\strxnmov.c
+SOURCE=.\strxnmov.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\str_alloc.c
# End Source File
+
# End Target
# End Project
diff --git a/VC++Files/strings/noMASM/strings.dsp b/VC++Files/strings/noMASM/strings.dsp
index ffec20f3a59..e7a0395c3df 100644
--- a/VC++Files/strings/noMASM/strings.dsp
+++ b/VC++Files/strings/noMASM/strings.dsp
@@ -256,6 +256,10 @@ SOURCE=.\strxnmov.c
# End Source File
# Begin Source File
+SOURCE=.\str_alloc.c
+# End Source File
+# Begin Source File
+
SOURCE=.\xml.c
# End Source File
# End Target
diff --git a/VC++Files/strings/strings.dsp b/VC++Files/strings/strings.dsp
index 320cdaf2132..714359c5570 100644
--- a/VC++Files/strings/strings.dsp
+++ b/VC++Files/strings/strings.dsp
@@ -273,6 +273,10 @@ SOURCE=.\strxnmov.c
# End Source File
# Begin Source File
+SOURCE=.\str_alloc.c
+# End Source File
+# Begin Source File
+
SOURCE=.\xml.c
# End Source File
# End Target
diff --git a/VC++Files/strings/strings_ia64.dsp b/VC++Files/strings/strings_ia64.dsp
index c0b7b9c292c..0ccb4f62928 100644
--- a/VC++Files/strings/strings_ia64.dsp
+++ b/VC++Files/strings/strings_ia64.dsp
@@ -272,6 +272,10 @@ SOURCE=.\strxnmov.c
# End Source File
# Begin Source File
+SOURCE=.\str_alloc.c
+# End Source File
+# Begin Source File
+
SOURCE=.\xml.c
# End Source File
# End Target
diff --git a/include/m_string.h b/include/m_string.h
index d3465363beb..33ba9c155c2 100644
--- a/include/m_string.h
+++ b/include/m_string.h
@@ -88,6 +88,13 @@
extern "C" {
#endif
+/*
+ my_str_malloc() and my_str_free() are assigned to implementations in
+ strings/alloc.c, but can be overridden in the calling program.
+ */
+extern void *(*my_str_malloc)(size_t);
+extern void (*my_str_free)(void *);
+
#if defined(HAVE_STPCPY) && !defined(HAVE_mit_thread)
#define strmov(A,B) stpcpy((A),(B))
#ifndef stpcpy
diff --git a/libmysql/Makefile.shared b/libmysql/Makefile.shared
index a2bfa616f6b..d006363a1d3 100644
--- a/libmysql/Makefile.shared
+++ b/libmysql/Makefile.shared
@@ -46,7 +46,7 @@ mystringsobjects = strmov.lo strxmov.lo strxnmov.lo strnmov.lo \
ctype-win1250ch.lo ctype-utf8.lo ctype-extra.lo \
ctype-ucs2.lo ctype-gb2312.lo ctype-gbk.lo \
ctype-sjis.lo ctype-tis620.lo ctype-ujis.lo \
- ctype-uca.lo xml.lo my_strtoll10.lo
+ ctype-uca.lo xml.lo my_strtoll10.lo str_alloc.lo
mystringsextra= strto.c
dbugobjects = dbug.lo # IT IS IN SAFEMALLOC.C sanity.lo
diff --git a/sql/mysqld.cc b/sql/mysqld.cc
index 3e0b496f05f..143bea5902d 100644
--- a/sql/mysqld.cc
+++ b/sql/mysqld.cc
@@ -2304,6 +2304,19 @@ static int my_message_sql(uint error, const char *str, myf MyFlags)
DBUG_RETURN(0);
}
+
+static void *my_str_malloc_mysqld(size_t size)
+{
+ return my_malloc(size, MYF(MY_FAE));
+}
+
+
+static void my_str_free_mysqld(void *ptr)
+{
+ my_free((gptr)ptr, MYF(MY_FAE));
+}
+
+
#ifdef __WIN__
struct utsname
@@ -3159,10 +3172,16 @@ we force server id to 2, but this MySQL server will not act as a slave.");
#endif
/*
+ Initialize my_str_malloc() and my_str_free()
+ */
+ my_str_malloc= &my_str_malloc_mysqld;
+ my_str_free= &my_str_free_mysqld;
+
+ /*
init signals & alarm
After this we can't quit by a simple unireg_abort
*/
- error_handler_hook = my_message_sql;
+ error_handler_hook= my_message_sql;
start_signal_handler(); // Creates pidfile
if (acl_init((THD *)0, opt_noacl) ||
my_tz_init((THD *)0, default_tz_name, opt_bootstrap))
diff --git a/strings/Makefile.am b/strings/Makefile.am
index a98908ad54a..309de8f8830 100644
--- a/strings/Makefile.am
+++ b/strings/Makefile.am
@@ -22,19 +22,19 @@ pkglib_LIBRARIES = libmystrings.a
# Exact one of ASSEMBLER_X
if ASSEMBLER_x86
ASRCS = strings-x86.s longlong2str-x86.s my_strtoll10-x86.s
-CSRCS = bfill.c bmove.c bmove512.c bchange.c strxnmov.c int2str.c str2int.c r_strinstr.c strtod.c bcmp.c strtol.c strtoul.c strtoll.c strtoull.c llstr.c strnlen.c ctype.c ctype-simple.c ctype-mb.c ctype-big5.c ctype-cp932.c ctype-czech.c ctype-eucjpms.c ctype-euc_kr.c ctype-gb2312.c ctype-gbk.c ctype-sjis.c ctype-tis620.c ctype-ujis.c ctype-utf8.c ctype-ucs2.c ctype-uca.c ctype-win1250ch.c ctype-bin.c ctype-latin1.c my_vsnprintf.c xml.c decimal.c ctype-extra.c
+CSRCS = bfill.c bmove.c bmove512.c bchange.c strxnmov.c int2str.c str2int.c r_strinstr.c strtod.c bcmp.c strtol.c strtoul.c strtoll.c strtoull.c llstr.c strnlen.c ctype.c ctype-simple.c ctype-mb.c ctype-big5.c ctype-cp932.c ctype-czech.c ctype-eucjpms.c ctype-euc_kr.c ctype-gb2312.c ctype-gbk.c ctype-sjis.c ctype-tis620.c ctype-ujis.c ctype-utf8.c ctype-ucs2.c ctype-uca.c ctype-win1250ch.c ctype-bin.c ctype-latin1.c my_vsnprintf.c xml.c decimal.c ctype-extra.c str_alloc.c
else
if ASSEMBLER_sparc32
# These file MUST all be on the same line!! Otherwise automake
# generats a very broken makefile
ASRCS = bmove_upp-sparc.s strappend-sparc.s strend-sparc.s strinstr-sparc.s strmake-sparc.s strmov-sparc.s strnmov-sparc.s strstr-sparc.s
-CSRCS = strcont.c strfill.c strcend.c is_prefix.c longlong2str.c bfill.c bmove.c bmove512.c bchange.c strxnmov.c int2str.c str2int.c r_strinstr.c strtod.c bcmp.c strtol.c strtoul.c strtoll.c strtoull.c llstr.c strnlen.c strxmov.c ctype.c ctype-simple.c ctype-mb.c ctype-big5.c ctype-cp932.c ctype-czech.c ctype-eucjpms.c ctype-euc_kr.c ctype-gb2312.c ctype-gbk.c ctype-sjis.c ctype-tis620.c ctype-ujis.c ctype-utf8.c ctype-ucs2.c ctype-uca.c ctype-win1250ch.c ctype-bin.c ctype-latin1.c my_vsnprintf.c xml.c decimal.c ctype-extra.c my_strtoll10.c
+CSRCS = strcont.c strfill.c strcend.c is_prefix.c longlong2str.c bfill.c bmove.c bmove512.c bchange.c strxnmov.c int2str.c str2int.c r_strinstr.c strtod.c bcmp.c strtol.c strtoul.c strtoll.c strtoull.c llstr.c strnlen.c strxmov.c ctype.c ctype-simple.c ctype-mb.c ctype-big5.c ctype-cp932.c ctype-czech.c ctype-eucjpms.c ctype-euc_kr.c ctype-gb2312.c ctype-gbk.c ctype-sjis.c ctype-tis620.c ctype-ujis.c ctype-utf8.c ctype-ucs2.c ctype-uca.c ctype-win1250ch.c ctype-bin.c ctype-latin1.c my_vsnprintf.c xml.c decimal.c ctype-extra.c my_strtoll10.c str_alloc.c
else
#no assembler
ASRCS =
# These file MUST all be on the same line!! Otherwise automake
# generats a very broken makefile
-CSRCS = strxmov.c bmove_upp.c strappend.c strcont.c strend.c strfill.c strcend.c is_prefix.c strstr.c strinstr.c strmake.c strnmov.c strmov.c longlong2str.c bfill.c bmove.c bmove512.c bchange.c strxnmov.c int2str.c str2int.c r_strinstr.c strtod.c bcmp.c strtol.c strtoul.c strtoll.c strtoull.c llstr.c strnlen.c ctype.c ctype-simple.c ctype-mb.c ctype-big5.c ctype-cp932.c ctype-czech.c ctype-eucjpms.c ctype-euc_kr.c ctype-gb2312.c ctype-gbk.c ctype-sjis.c ctype-tis620.c ctype-ujis.c ctype-utf8.c ctype-ucs2.c ctype-uca.c ctype-win1250ch.c ctype-bin.c ctype-latin1.c my_vsnprintf.c xml.c decimal.c ctype-extra.c my_strtoll10.c
+CSRCS = strxmov.c bmove_upp.c strappend.c strcont.c strend.c strfill.c strcend.c is_prefix.c strstr.c strinstr.c strmake.c strnmov.c strmov.c longlong2str.c bfill.c bmove.c bmove512.c bchange.c strxnmov.c int2str.c str2int.c r_strinstr.c strtod.c bcmp.c strtol.c strtoul.c strtoll.c strtoull.c llstr.c strnlen.c ctype.c ctype-simple.c ctype-mb.c ctype-big5.c ctype-cp932.c ctype-czech.c ctype-eucjpms.c ctype-euc_kr.c ctype-gb2312.c ctype-gbk.c ctype-sjis.c ctype-tis620.c ctype-ujis.c ctype-utf8.c ctype-ucs2.c ctype-uca.c ctype-win1250ch.c ctype-bin.c ctype-latin1.c my_vsnprintf.c xml.c decimal.c ctype-extra.c my_strtoll10.c str_alloc.c
endif
endif
diff --git a/strings/conf_to_src.c b/strings/conf_to_src.c
index d5ffa15ee0c..5a6adb398da 100644
--- a/strings/conf_to_src.c
+++ b/strings/conf_to_src.c
@@ -75,6 +75,8 @@ static int get_charset_number(const char *charset_name)
char *mdup(const char *src, uint len)
{
char *dst=(char*)malloc(len);
+ if (!dst)
+ exit(1);
memcpy(dst,src,len);
return dst;
}
diff --git a/strings/ctype-tis620.c b/strings/ctype-tis620.c
index 4fe8bb4e349..e445fa90bd3 100644
--- a/strings/ctype-tis620.c
+++ b/strings/ctype-tis620.c
@@ -541,7 +541,7 @@ int my_strnncoll_tis620(CHARSET_INFO *cs __attribute__((unused)),
tc1= buf;
if ((len1 + len2 +2) > (int) sizeof(buf))
- tc1= (uchar*) malloc(len1+len2+2);
+ tc1= (uchar*) my_str_malloc(len1+len2+2);
tc2= tc1 + len1+1;
memcpy((char*) tc1, (char*) s1, len1);
tc1[len1]= 0; /* if length(s1)> len1, need to put 'end of string' */
@@ -551,7 +551,7 @@ int my_strnncoll_tis620(CHARSET_INFO *cs __attribute__((unused)),
thai2sortable(tc2, len2);
i= strcmp((char*)tc1, (char*)tc2);
if (tc1 != buf)
- free(tc1);
+ my_str_free(tc1);
return i;
}
@@ -572,7 +572,7 @@ int my_strnncollsp_tis620(CHARSET_INFO * cs __attribute__((unused)),
a= buf;
if ((a_length + b_length +2) > (int) sizeof(buf))
- alloced= a= (uchar*) malloc(a_length+b_length+2);
+ alloced= a= (uchar*) my_str_malloc(a_length+b_length+2);
b= a + a_length+1;
memcpy((char*) a, (char*) a0, a_length);
@@ -621,7 +621,7 @@ int my_strnncollsp_tis620(CHARSET_INFO * cs __attribute__((unused)),
ret:
if (alloced)
- free(alloced);
+ my_str_free(alloced);
return res;
}
diff --git a/strings/str_alloc.c b/strings/str_alloc.c
new file mode 100644
index 00000000000..158fa7e75bb
--- /dev/null
+++ b/strings/str_alloc.c
@@ -0,0 +1,34 @@
+/* Copyright (C) 2000 MySQL AB
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
+
+#include <my_global.h>
+#include <m_string.h>
+
+static void *my_str_malloc_default(size_t size)
+{
+ void *ret= malloc(size);
+ if (!ret)
+ exit(1);
+ return ret;
+}
+
+static void my_str_free_default(void *ptr)
+{
+ free(ptr);
+}
+
+void *(*my_str_malloc)(size_t)= &my_str_malloc_default;
+void (*my_str_free)(void *)= &my_str_free_default;