diff options
author | unknown <jimw@mysql.com> | 2005-06-24 13:41:33 -0700 |
---|---|---|
committer | unknown <jimw@mysql.com> | 2005-06-24 13:41:33 -0700 |
commit | f56dd2a0fa24b154aa71307e12283e43c7ff0914 (patch) | |
tree | f29e416cf6a91425d2edb7c5e7cca1dde42543f6 | |
parent | d34e2ccb3ea51811552f3e87ad68ee8673804da1 (diff) | |
download | mariadb-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.dsp | 4 | ||||
-rw-r--r-- | VC++Files/client/mysqlclient_ia64.dsp | 4 | ||||
-rw-r--r-- | VC++Files/libmysql/libmysql.dsp | 4 | ||||
-rw-r--r-- | VC++Files/libmysql/libmysql_ia64.dsp | 4 | ||||
-rw-r--r-- | VC++Files/libmysqld/libmysqld.dsp | 4 | ||||
-rw-r--r-- | VC++Files/libmysqld/libmysqld_ia64.dsp | 4 | ||||
-rw-r--r-- | VC++Files/strings/backup/strings.dsp | 7 | ||||
-rw-r--r-- | VC++Files/strings/noMASM/strings.dsp | 4 | ||||
-rw-r--r-- | VC++Files/strings/strings.dsp | 4 | ||||
-rw-r--r-- | VC++Files/strings/strings_ia64.dsp | 4 | ||||
-rw-r--r-- | include/m_string.h | 7 | ||||
-rw-r--r-- | libmysql/Makefile.shared | 2 | ||||
-rw-r--r-- | sql/mysqld.cc | 21 | ||||
-rw-r--r-- | strings/Makefile.am | 6 | ||||
-rw-r--r-- | strings/conf_to_src.c | 2 | ||||
-rw-r--r-- | strings/ctype-tis620.c | 8 | ||||
-rw-r--r-- | strings/str_alloc.c | 34 |
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; |