Commit 409592e6 authored by jimw@mysql.com's avatar jimw@mysql.com

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)
parent 539d63d0
...@@ -571,6 +571,10 @@ SOURCE=..\strings\strxnmov.c ...@@ -571,6 +571,10 @@ SOURCE=..\strings\strxnmov.c
# End Source File # End Source File
# Begin Source File # Begin Source File
SOURCE=..\strings\str_alloc.c
# End Source File
# Begin Source File
SOURCE=..\mysys\thr_mutex.c SOURCE=..\mysys\thr_mutex.c
# End Source File # End Source File
# Begin Source File # Begin Source File
......
...@@ -552,6 +552,10 @@ SOURCE=..\strings\strxnmov.c ...@@ -552,6 +552,10 @@ SOURCE=..\strings\strxnmov.c
# End Source File # End Source File
# Begin Source File # Begin Source File
SOURCE=..\strings\str_alloc.c
# End Source File
# Begin Source File
SOURCE=..\mysys\thr_mutex.c SOURCE=..\mysys\thr_mutex.c
# End Source File # End Source File
# Begin Source File # Begin Source File
......
...@@ -539,6 +539,10 @@ SOURCE=..\strings\strxnmov.c ...@@ -539,6 +539,10 @@ SOURCE=..\strings\strxnmov.c
# End Source File # End Source File
# Begin Source File # Begin Source File
SOURCE=..\strings\str_alloc.c
# End Source File
# Begin Source File
SOURCE=..\mysys\thr_mutex.c SOURCE=..\mysys\thr_mutex.c
# End Source File # End Source File
# Begin Source File # Begin Source File
......
...@@ -526,6 +526,10 @@ SOURCE=..\strings\strxnmov.c ...@@ -526,6 +526,10 @@ SOURCE=..\strings\strxnmov.c
# End Source File # End Source File
# Begin Source File # Begin Source File
SOURCE=..\strings\str_alloc.c
# End Source File
# Begin Source File
SOURCE=..\mysys\thr_mutex.c SOURCE=..\mysys\thr_mutex.c
# End Source File # End Source File
# Begin Source File # Begin Source File
......
...@@ -600,6 +600,10 @@ SOURCE=..\strings\strxnmov.c ...@@ -600,6 +600,10 @@ SOURCE=..\strings\strxnmov.c
# End Source File # End Source File
# Begin Source File # Begin Source File
SOURCE=..\strings\str_alloc.c
# End Source File
# Begin Source File
SOURCE=..\sql\table.cpp SOURCE=..\sql\table.cpp
# End Source File # End Source File
# Begin Source File # Begin Source File
......
...@@ -538,6 +538,10 @@ SOURCE=..\strings\strxnmov.c ...@@ -538,6 +538,10 @@ SOURCE=..\strings\strxnmov.c
# End Source File # End Source File
# Begin Source File # Begin Source File
SOURCE=..\strings\str_alloc.c
# End Source File
# Begin Source File
SOURCE=..\sql\table.cpp SOURCE=..\sql\table.cpp
# End Source File # End Source File
# Begin Source File # Begin Source File
......
...@@ -240,5 +240,10 @@ InputName=Strxmov ...@@ -240,5 +240,10 @@ InputName=Strxmov
SOURCE=.\strxnmov.c SOURCE=.\strxnmov.c
# End Source File # End Source File
# Begin Source File
SOURCE=.\str_alloc.c
# End Source File
# End Target # End Target
# End Project # End Project
...@@ -256,6 +256,10 @@ SOURCE=.\strxnmov.c ...@@ -256,6 +256,10 @@ SOURCE=.\strxnmov.c
# End Source File # End Source File
# Begin Source File # Begin Source File
SOURCE=.\str_alloc.c
# End Source File
# Begin Source File
SOURCE=.\xml.c SOURCE=.\xml.c
# End Source File # End Source File
# End Target # End Target
......
...@@ -273,6 +273,10 @@ SOURCE=.\strxnmov.c ...@@ -273,6 +273,10 @@ SOURCE=.\strxnmov.c
# End Source File # End Source File
# Begin Source File # Begin Source File
SOURCE=.\str_alloc.c
# End Source File
# Begin Source File
SOURCE=.\xml.c SOURCE=.\xml.c
# End Source File # End Source File
# End Target # End Target
......
...@@ -272,6 +272,10 @@ SOURCE=.\strxnmov.c ...@@ -272,6 +272,10 @@ SOURCE=.\strxnmov.c
# End Source File # End Source File
# Begin Source File # Begin Source File
SOURCE=.\str_alloc.c
# End Source File
# Begin Source File
SOURCE=.\xml.c SOURCE=.\xml.c
# End Source File # End Source File
# End Target # End Target
......
...@@ -88,6 +88,13 @@ ...@@ -88,6 +88,13 @@
extern "C" { extern "C" {
#endif #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) #if defined(HAVE_STPCPY) && !defined(HAVE_mit_thread)
#define strmov(A,B) stpcpy((A),(B)) #define strmov(A,B) stpcpy((A),(B))
#ifndef stpcpy #ifndef stpcpy
......
...@@ -46,7 +46,7 @@ mystringsobjects = strmov.lo strxmov.lo strxnmov.lo strnmov.lo \ ...@@ -46,7 +46,7 @@ mystringsobjects = strmov.lo strxmov.lo strxnmov.lo strnmov.lo \
ctype-win1250ch.lo ctype-utf8.lo ctype-extra.lo \ ctype-win1250ch.lo ctype-utf8.lo ctype-extra.lo \
ctype-ucs2.lo ctype-gb2312.lo ctype-gbk.lo \ ctype-ucs2.lo ctype-gb2312.lo ctype-gbk.lo \
ctype-sjis.lo ctype-tis620.lo ctype-ujis.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 mystringsextra= strto.c
dbugobjects = dbug.lo # IT IS IN SAFEMALLOC.C sanity.lo dbugobjects = dbug.lo # IT IS IN SAFEMALLOC.C sanity.lo
......
...@@ -2304,6 +2304,19 @@ static int my_message_sql(uint error, const char *str, myf MyFlags) ...@@ -2304,6 +2304,19 @@ static int my_message_sql(uint error, const char *str, myf MyFlags)
DBUG_RETURN(0); 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__ #ifdef __WIN__
struct utsname struct utsname
...@@ -3158,11 +3171,17 @@ we force server id to 2, but this MySQL server will not act as a slave."); ...@@ -3158,11 +3171,17 @@ we force server id to 2, but this MySQL server will not act as a slave.");
} }
#endif #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 init signals & alarm
After this we can't quit by a simple unireg_abort 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 start_signal_handler(); // Creates pidfile
if (acl_init((THD *)0, opt_noacl) || if (acl_init((THD *)0, opt_noacl) ||
my_tz_init((THD *)0, default_tz_name, opt_bootstrap)) my_tz_init((THD *)0, default_tz_name, opt_bootstrap))
......
...@@ -22,19 +22,19 @@ pkglib_LIBRARIES = libmystrings.a ...@@ -22,19 +22,19 @@ pkglib_LIBRARIES = libmystrings.a
# Exact one of ASSEMBLER_X # Exact one of ASSEMBLER_X
if ASSEMBLER_x86 if ASSEMBLER_x86
ASRCS = strings-x86.s longlong2str-x86.s my_strtoll10-x86.s 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 else
if ASSEMBLER_sparc32 if ASSEMBLER_sparc32
# These file MUST all be on the same line!! Otherwise automake # These file MUST all be on the same line!! Otherwise automake
# generats a very broken makefile # 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 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 else
#no assembler #no assembler
ASRCS = ASRCS =
# These file MUST all be on the same line!! Otherwise automake # These file MUST all be on the same line!! Otherwise automake
# generats a very broken makefile # 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
endif endif
......
...@@ -75,6 +75,8 @@ static int get_charset_number(const char *charset_name) ...@@ -75,6 +75,8 @@ static int get_charset_number(const char *charset_name)
char *mdup(const char *src, uint len) char *mdup(const char *src, uint len)
{ {
char *dst=(char*)malloc(len); char *dst=(char*)malloc(len);
if (!dst)
exit(1);
memcpy(dst,src,len); memcpy(dst,src,len);
return dst; return dst;
} }
......
...@@ -541,7 +541,7 @@ int my_strnncoll_tis620(CHARSET_INFO *cs __attribute__((unused)), ...@@ -541,7 +541,7 @@ int my_strnncoll_tis620(CHARSET_INFO *cs __attribute__((unused)),
tc1= buf; tc1= buf;
if ((len1 + len2 +2) > (int) sizeof(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; tc2= tc1 + len1+1;
memcpy((char*) tc1, (char*) s1, len1); memcpy((char*) tc1, (char*) s1, len1);
tc1[len1]= 0; /* if length(s1)> len1, need to put 'end of string' */ 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)), ...@@ -551,7 +551,7 @@ int my_strnncoll_tis620(CHARSET_INFO *cs __attribute__((unused)),
thai2sortable(tc2, len2); thai2sortable(tc2, len2);
i= strcmp((char*)tc1, (char*)tc2); i= strcmp((char*)tc1, (char*)tc2);
if (tc1 != buf) if (tc1 != buf)
free(tc1); my_str_free(tc1);
return i; return i;
} }
...@@ -572,7 +572,7 @@ int my_strnncollsp_tis620(CHARSET_INFO * cs __attribute__((unused)), ...@@ -572,7 +572,7 @@ int my_strnncollsp_tis620(CHARSET_INFO * cs __attribute__((unused)),
a= buf; a= buf;
if ((a_length + b_length +2) > (int) sizeof(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; b= a + a_length+1;
memcpy((char*) a, (char*) a0, a_length); memcpy((char*) a, (char*) a0, a_length);
...@@ -621,7 +621,7 @@ int my_strnncollsp_tis620(CHARSET_INFO * cs __attribute__((unused)), ...@@ -621,7 +621,7 @@ int my_strnncollsp_tis620(CHARSET_INFO * cs __attribute__((unused)),
ret: ret:
if (alloced) if (alloced)
free(alloced); my_str_free(alloced);
return res; return res;
} }
......
/* 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;
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment