Commit b55de19e authored by monty@donna.mysql.com's avatar monty@donna.mysql.com

Portability fixes

parent 9f7c4563
monty@tramp.mysql.fi monty@donna.mysql.com
...@@ -2161,7 +2161,7 @@ Webmerger - This CGI tool interprets files and generates dynamic output ...@@ -2161,7 +2161,7 @@ Webmerger - This CGI tool interprets files and generates dynamic output
based on a set of simple tags. Ready-to-run drivers for @strong{MySQL} and based on a set of simple tags. Ready-to-run drivers for @strong{MySQL} and
PostgreSQL through ODBC. PostgreSQL through ODBC.
@item @uref{http://phpclub.unet.ru/index_e.php3}@* @item @uref{http://phpclub.net/}@*
PHPclub - Tips and tricks for PHP. PHPclub - Tips and tricks for PHP.
@item @uref{http://www.penguinservices.com/scripts}@* @item @uref{http://www.penguinservices.com/scripts}@*
...@@ -35859,7 +35859,7 @@ don't yet support: ...@@ -35859,7 +35859,7 @@ don't yet support:
@table @code @table @code
@item Sub select @item Sub select
@item Foregin keys @item Foreign keys
@item Stored procedures @item Stored procedures
@item An extendable type system. @item An extendable type system.
@item A way to extend the SQL to handle new key types (like R-trees) @item A way to extend the SQL to handle new key types (like R-trees)
...@@ -36670,13 +36670,12 @@ only on Linux. ...@@ -36670,13 +36670,12 @@ only on Linux.
You can always find the latest version You can always find the latest version
@uref{http://www.trash.net/~ffischer/admin/index.html, here}. @uref{http://www.trash.net/~ffischer/admin/index.html, here}.
@c Link temporary removed on request because of a bug in the current version @item @uref{http://www.mysql.com/Downloads/Win32/MySQL-Maker-1.0.zip,MySQL-Maker 1.0}.
@c @item @uref{http://www.mysql.com/Downloads/Win32/MySQL-Maker092.zip,MySQL-Maker 092}. Shareware @strong{MySQL} client for windows. It's WYSIWYG tool which allows
@c Shareware @strong{MySQL} client for windows. It's WYSIWYG tool which allows you to create, change and delete databases and tables.
@c you to create, change and delete databases and tables. You can change field - structure and add, change and delete data in
@c You can change field - structure and add, change and delete data in these tables directly without ODBC-driver.
@c these tables directly without ODBC-driver. @uref{http://www.presult.de/presult/frames/fs_mysqlmaker.html, MySQL Maker homepage}
@c @uref{http://62.26.183.157/presult/support/su_sweiche_download.html, MySQL Maker homepage}
@item @uref{http://www.mysql.com/Downloads/Contrib/mysqlwinadmn.zip, mysqlwinadmn.zip} @item @uref{http://www.mysql.com/Downloads/Contrib/mysqlwinadmn.zip, mysqlwinadmn.zip}
Windows GUI (binary only) to administrate a database, by David B. Mansel, Windows GUI (binary only) to administrate a database, by David B. Mansel,
...@@ -36979,8 +36978,8 @@ Raw port of a SQL mode for XEmacs. Supports completion. Original by ...@@ -36979,8 +36978,8 @@ Raw port of a SQL mode for XEmacs. Supports completion. Original by
Peter D. Pezaris @email{pez@@atlantic2.sbi.com} and partial Peter D. Pezaris @email{pez@@atlantic2.sbi.com} and partial
@strong{MySQL} port by David Axmark. @strong{MySQL} port by David Axmark.
@item @uref{http://www.mysql.com/Downloads/Win32/myaccess97_1_1.zip, MyAccess97 1.1} @item @uref{http://www.mysql.com/Downloads/Win32/myaccess97_1_3.zip, MyAccess97 1.3}
@item @uref{http://www.mysql.com/Downloads/Win32/myaccess2000_1_1.zip, MyAccess2000 1.1} @item @uref{http://www.mysql.com/Downloads/Win32/myaccess2000_1_3.zip, MyAccess2000 1.3}
MyAccess is an AddIn for MS Access 97/2000 which allows you to manage MySQL databases from within Access. Main functions are: MyAccess is an AddIn for MS Access 97/2000 which allows you to manage MySQL databases from within Access. Main functions are:
@itemize @bullet @itemize @bullet
...@@ -987,6 +987,9 @@ EOF ...@@ -987,6 +987,9 @@ EOF
*:Rhapsody:*:*) *:Rhapsody:*:*)
echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
exit 0 ;; exit 0 ;;
*:Darwin:*:*)
echo `uname -p`-apple-darwin${UNAME_RELEASE}
exit 0 ;;
esac esac
#echo '(No uname command or uname output not recognized.)' 1>&2 #echo '(No uname command or uname output not recognized.)' 1>&2
......
...@@ -919,7 +919,7 @@ case $os in ...@@ -919,7 +919,7 @@ case $os in
| -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
| -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
| -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \ | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
| -interix* | -uwin* | -rhapsody* | -openstep* | -oskit*) | -interix* | -uwin* | -rhapsody* | -darwin* | -openstep* | -oskit*)
# Remember, each alternative MUST END IN *, to match a version number. # Remember, each alternative MUST END IN *, to match a version number.
;; ;;
-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
......
...@@ -331,7 +331,13 @@ elif $PS $$ 2> /dev/null | grep $0 > /dev/null ...@@ -331,7 +331,13 @@ elif $PS $$ 2> /dev/null | grep $0 > /dev/null
then then
FIND_PROC="$PS \$\$PID | grep mysqld > /dev/null" FIND_PROC="$PS \$\$PID | grep mysqld > /dev/null"
else else
AC_MSG_ERROR([Could not find the right ps switches. Which OS is this ?. See the Installation chapter in the Reference Manual.]) case $SYSTEM_TYPE in
*darwin*)
FIND_PROC="$PS -uaxww | grep mysqld | grep \" \$\$PID \" > /dev/null"
;;
*)
AC_MSG_ERROR([Could not find the right ps switches. Which OS is this ?. See the Installation chapter in the Reference Manual.])
esac
fi fi
AC_SUBST(FIND_PROC) AC_SUBST(FIND_PROC)
AC_MSG_RESULT("$FIND_PROC") AC_MSG_RESULT("$FIND_PROC")
...@@ -619,6 +625,7 @@ int main() ...@@ -619,6 +625,7 @@ int main()
# Some system specific hacks # Some system specific hacks
# #
MAX_C_OPTIMIZE="-O6"
case $SYSTEM_TYPE in case $SYSTEM_TYPE in
*solaris2.7*) *solaris2.7*)
# Solaris 2.7 has a broken /usr/include/widec.h # Solaris 2.7 has a broken /usr/include/widec.h
...@@ -674,6 +681,15 @@ case $SYSTEM_TYPE in ...@@ -674,6 +681,15 @@ case $SYSTEM_TYPE in
fi fi
fi fi
;; ;;
*darwin*)
if test "$ac_cv_prog_gcc" = "yes"
then
CFLAGS="$CFLAGS -traditional-cpp -DHAVE_DARWIN_THREADS"
CXXFLAGS="$CXXFLAGS -traditional-cpp -DHAVE_DARWIN_THREADS"
MAX_C_OPTIMIZE="-O"
with_named_curses=""
fi
;;
*freebsd*) *freebsd*)
echo "Adding fix for interrupted reads" echo "Adding fix for interrupted reads"
CXXFLAGS="$CXXFLAGS -DMYSQLD_NET_RETRY_COUNT=1000000" CXXFLAGS="$CXXFLAGS -DMYSQLD_NET_RETRY_COUNT=1000000"
...@@ -1012,7 +1028,7 @@ if test "$ac_cv_prog_gcc" = "yes" ...@@ -1012,7 +1028,7 @@ if test "$ac_cv_prog_gcc" = "yes"
then then
DEBUG_CFLAGS="-g" DEBUG_CFLAGS="-g"
DEBUG_OPTIMIZE_CC="-O" DEBUG_OPTIMIZE_CC="-O"
OPTIMIZE_CFLAGS="-O6" OPTIMIZE_CFLAGS="$MAX_C_OPTIMIZE"
else else
DEBUG_CFLAGS="-g" DEBUG_CFLAGS="-g"
DEBUG_OPTIMIZE_CC="" DEBUG_OPTIMIZE_CC=""
...@@ -1221,7 +1237,7 @@ AC_CHECK_FUNCS(alarm bmove \ ...@@ -1221,7 +1237,7 @@ AC_CHECK_FUNCS(alarm bmove \
getrusage getpwuid getcwd getrlimit getwd index stpcpy locking longjmp \ getrusage getpwuid getcwd getrlimit getwd index stpcpy locking longjmp \
perror pread realpath rename \ perror pread realpath rename \
socket strnlen madvise \ socket strnlen madvise \
strtoul strtoull snprintf tempnam thr_setconcurrency \ strtol strtoul strtoull snprintf tempnam thr_setconcurrency \
gethostbyaddr_r gethostbyname_r getpwnam \ gethostbyaddr_r gethostbyname_r getpwnam \
bfill bzero bcmp strstr strpbrk strerror\ bfill bzero bcmp strstr strpbrk strerror\
tell atod memcpy memmove \ tell atod memcpy memmove \
......
...@@ -48,7 +48,7 @@ static void usage(my_bool version) ...@@ -48,7 +48,7 @@ static void usage(my_bool version)
puts("Prints all arguments that is give to some program using the default files"); puts("Prints all arguments that is give to some program using the default files");
printf("Usage: %s [OPTIONS] groups\n",my_progname); printf("Usage: %s [OPTIONS] groups\n",my_progname);
printf("\n\ printf("\n\
-c, --config-file=# --defaults-file=#\n\ -c, --config-file=#, --defaults-file=#\n\
The config file to use (default '%s')\n\ The config file to use (default '%s')\n\
--no-defaults Return an empty string (useful for scripts)\n\ --no-defaults Return an empty string (useful for scripts)\n\
-?, --help Display this help message and exit.\n\ -?, --help Display this help message and exit.\n\
......
...@@ -346,6 +346,19 @@ struct tm *localtime_r(const time_t *clock, struct tm *res); ...@@ -346,6 +346,19 @@ struct tm *localtime_r(const time_t *clock, struct tm *res);
#define pthread_detach_this_thread() { pthread_t tmp=pthread_self() ; pthread_detach(&tmp); } #define pthread_detach_this_thread() { pthread_t tmp=pthread_self() ; pthread_detach(&tmp); }
#endif #endif
#ifdef HAVE_DARWIN_THREADS
#define pthread_sigmask(A,B,C) sigprocmask((A),(B),(C))
#define pthread_kill(A,B) pthread_dummy(0)
#define pthread_condattr_init(A) pthread_dummy(0)
#define pthread_condattr_destroy(A) pthread_dummy(0)
#define pthread_cond_init( A, B ) pthread_cond_init( (A), 0 )
#define pthread_signal(A,B) pthread_dummy(0)
#undef pthread_detach_this_thread
#define pthread_detach_this_thread() { pthread_t tmp=pthread_self() ; pthread_detach(&tmp); }
#undef sigset
#define sigset(A,B) pthread_signal((A),(void (*)(int)) (B))
#endif
#if ((defined(HAVE_PTHREAD_ATTR_CREATE) && !defined(HAVE_SIGWAIT)) || defined(HAVE_DEC_3_2_THREADS)) && !defined(HAVE_CTHREADS_WRAPPER) #if ((defined(HAVE_PTHREAD_ATTR_CREATE) && !defined(HAVE_SIGWAIT)) || defined(HAVE_DEC_3_2_THREADS)) && !defined(HAVE_CTHREADS_WRAPPER)
/* This is set on AIX_3_2 and Siemens unix (and DEC OSF/1 3.2 too) */ /* This is set on AIX_3_2 and Siemens unix (and DEC OSF/1 3.2 too) */
#define pthread_key_create(A,B) \ #define pthread_key_create(A,B) \
......
...@@ -1798,7 +1798,7 @@ bsdi4*) ...@@ -1798,7 +1798,7 @@ bsdi4*)
finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
shlibpath_var=LD_LIBRARY_PATH shlibpath_var=LD_LIBRARY_PATH
deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
file_magic_cmd=/usr/bin/file file_magic_cmd="/usr/bin/file -L"
file_magic_test_file=/shlib/libc.so file_magic_test_file=/shlib/libc.so
sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
......
...@@ -2922,8 +2922,10 @@ void update_auto_increment_key(MI_CHECK *param, MI_INFO *info, ...@@ -2922,8 +2922,10 @@ void update_auto_increment_key(MI_CHECK *param, MI_INFO *info,
!(((ulonglong) 1 << (info->s->base.auto_key-1) !(((ulonglong) 1 << (info->s->base.auto_key-1)
& info->s->state.key_map))) & info->s->state.key_map)))
{ {
mi_check_print_info(param,"Table: %s doesn't have an auto increment key\n", if (!(param->testflag & T_VERY_SILENT))
param->isam_file_name); mi_check_print_info(param,
"Table: %s doesn't have an auto increment key\n",
param->isam_file_name);
return; return;
} }
if (!(param->testflag & T_SILENT) && if (!(param->testflag & T_SILENT) &&
......
...@@ -26,7 +26,8 @@ libmysys_a_SOURCES = my_init.c my_getwd.c mf_getdate.c\ ...@@ -26,7 +26,8 @@ libmysys_a_SOURCES = my_init.c my_getwd.c mf_getdate.c\
mf_path.c mf_loadpath.c\ mf_path.c mf_loadpath.c\
my_open.c my_create.c my_seek.c my_read.c \ my_open.c my_create.c my_seek.c my_read.c \
my_pread.c my_write.c \ my_pread.c my_write.c \
mf_reccache.c mf_keycache.c mf_iocache.c mf_cache.c \ mf_reccache.c mf_keycache.c \
mf_iocache.c mf_cache.c mf_tempfile.c \
my_lock.c mf_brkhant.c my_alarm.c \ my_lock.c mf_brkhant.c my_alarm.c \
my_malloc.c my_realloc.c my_once.c mulalloc.c \ my_malloc.c my_realloc.c my_once.c mulalloc.c \
my_alloc.c safemalloc.c my_fopen.c my_fstream.c \ my_alloc.c safemalloc.c my_fopen.c my_fstream.c \
......
...@@ -21,18 +21,6 @@ ...@@ -21,18 +21,6 @@
#include <m_string.h> #include <m_string.h>
#include "my_static.h" #include "my_static.h"
#include "mysys_err.h" #include "mysys_err.h"
#include <paths.h>
#define TMP_EXT ".tmp" /* Extension of tempfile */
#if ! defined(P_tmpdir)
#define P_tmpdir ""
#endif
#ifdef HAVE_TEMPNAM
#ifndef MSDOS
extern char **environ;
#endif
#endif
/* /*
Remove an open tempfile so that it doesn't survive Remove an open tempfile so that it doesn't survive
......
/* Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library 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
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
MA 02111-1307, USA */
#include "mysys_priv.h"
#include <m_string.h>
#include "my_static.h"
#include "mysys_err.h"
#include <errno.h>
#ifdef HAVE_PATH_H
#include <paths.h>
#endif
#ifdef HAVE_TEMPNAM
#ifndef MSDOS
extern char **environ;
#endif
#endif
/*
Create a temporary file in a given directory
This function should be used instead of my_tempnam() !
*/
File create_temp_file(char *to, const char *dir, const char *prefix,
int mode, myf MyFlags)
{
File file= -1;
DBUG_ENTER("open_temp_file");
#if defined(_MSC_VER)
{
char *end,*res,**old_env,*temp_env[1];
old_env=environ;
if (dir)
{
end=strend(dir)-1;
if (!dir[0])
{ /* Change empty string to current dir */
to[0]= FN_CURLIB;
to[1]= 0;
dir=to;
}
else if (*end == FN_DEVCHAR)
{ /* Get current dir for drive */
_fullpath(temp,dir,FN_REFLEN);
dir=to;
}
else if (*end == FN_LIBCHAR && dir < end && end[-1] != FN_DEVCHAR)
{
strmake(to,dir,(uint) (end-dir)); /* Copy and remove last '\' */
dir=to;
}
environ=temp_env; /* Force use of dir (dir not checked) */
temp_env[0]=0;
}
if ((res=tempnam((char*) dir,(char *) prefix)))
{
strnmov(to,res,FN_REFLEN);
(*free)(res);
file=my_create(to,0, mode, MyFlags);
}
environ=old_env;
}
#elif defined(_ZTC__)
if (!dir)
dir=getenv("TMPDIR");
if ((res=tempnam((char*) dir,(char *) prefix)))
{
strnmov(to,res,FN_REFLEN);
(*free)(res);
file=my_create(to, 0, mode, MyFlags);
}
#elif defined(HAVE_MKSTEMP)
{
char prefix[30];
uint pfx_len;
pfx_len=(strmov(strnmov(prefix,
prefix ? prefix : "tmp.",
sizeof(prefix)-7),"XXXXXX") - prefix);
if (!dir && ! (dir =getenv("TMPDIR")))
dir=P_tmpdir;
if (strlen(dir)+ pfx_len > FN_REFLEN-2)
{
errno=my_errno= ENAMETOOLONG;
return 1;
}
strmov(to,dir);
strmov(convert_dirname(to),prefix);
file=mkstemp(to);
}
#elif defined(HAVE_TEMPNAM)
{
char *res,**old_env,*temp_env[1];
if (dir && !dir[0])
{ /* Change empty string to current dir */
to[0]= FN_CURLIB;
to[1]= 0;
dir=to;
}
old_env=environ;
if (dir)
{ /* Don't use TMPDIR if dir is given */
environ=temp_env;
temp_env[0]=0;
}
if ((res=tempnam((char*) dir, (char*) prefix)))
{
strnmov(to,res,FN_REFLEN);
(*free)(res);
file=my_create(to,0,
(int) (O_RDWR | O_BINARY | O_TRUNC |
O_TEMPORARY | O_SHORT_LIVED),
MYF(MY_WME));
}
else
{
DBUG_PRINT("error",("Got error: %d from tempnam",errno));
}
environ=old_env;
}
#else
{
register long uniq;
register int length;
my_string pos,end_pos;
/* Make an unique number */
pthread_mutex_lock(&THR_LOCK_open);
uniq= ((long) getpid() << 20) + (long) _my_tempnam_used++ ;
pthread_mutex_unlock(&THR_LOCK_open);
if (!dir && !(dir=getenv("TMPDIR"))) /* Use this if possibly */
dir=P_tmpdir; /* Use system default */
length=strlen(dir)+strlen(pfx)+1;
DBUG_PRINT("test",("mallocing %d byte",length+8+sizeof(TMP_EXT)+1));
if (length+8+sizeof(TMP_EXT)+1 > FN_REFLENGTH)
errno=my_errno= ENAMETOOLONG;
else
{
end_pos=strmov(to,dir);
if (end_pos != to && end_pos[-1] != FN_LIBCHAR)
*end_pos++=FN_LIBCHAR;
end_pos=strmov(end_pos,pfx);
for (length=0 ; length < 8 && uniq ; length++)
{
*end_pos++= _dig_vec[(int) (uniq & 31)];
uniq >>= 5;
}
(void) strmov(end_pos,TMP_EXT);
file=my_create(to,0,
(int) (O_RDWR | O_BINARY | O_TRUNC |
O_TEMPORARY | O_SHORT_LIVED),
MYF(MY_WME));
}
}
#endif
DBUG_RETURN(file);
}
...@@ -149,7 +149,8 @@ void MYSQL_LOG::open(const char *log_name, enum_log_type log_type_arg, ...@@ -149,7 +149,8 @@ void MYSQL_LOG::open(const char *log_name, enum_log_type log_type_arg,
fn_format(index_file_name, name, mysql_data_home, ".index", 6); fn_format(index_file_name, name, mysql_data_home, ".index", 6);
db[0]=0; db[0]=0;
file=my_fopen(log_file_name,O_APPEND | O_WRONLY,MYF(MY_WME | ME_WAITTANG)); file=my_fopen(log_file_name,O_APPEND | O_WRONLY | O_BINARY,
MYF(MY_WME | ME_WAITTANG));
if (!file) if (!file)
{ {
my_free(name,MYF(0)); my_free(name,MYF(0));
...@@ -188,7 +189,7 @@ void MYSQL_LOG::open(const char *log_name, enum_log_type log_type_arg, ...@@ -188,7 +189,7 @@ void MYSQL_LOG::open(const char *log_name, enum_log_type log_type_arg,
{ {
Start_log_event s; Start_log_event s;
if(!index_file && if(!index_file &&
!(index_file = my_fopen(index_file_name,O_APPEND | O_RDWR, !(index_file = my_fopen(index_file_name,O_APPEND | O_BINARY | O_RDWR,
MYF(MY_WME)))) MYF(MY_WME))))
{ {
my_fclose(file,MYF(MY_WME)); my_fclose(file,MYF(MY_WME));
......
...@@ -19,10 +19,10 @@ ...@@ -19,10 +19,10 @@
#include <my_dir.h> #include <my_dir.h>
#include <hash.h> #include <hash.h>
#define SQL_CACHE_LENGTH 300 #define SQL_CACHE_LENGTH 30 // 300 crashes apple gcc.
HASH sql_cache; HASH sql_cache;
LEX lex_array_static[SQL_CACHE_LENGTH]; static LEX lex_array_static[SQL_CACHE_LENGTH];
LEX * lex_array = lex_array_static; LEX * lex_array = lex_array_static;
int last_lex_array_item = SQL_CACHE_LENGTH - 1; int last_lex_array_item = SQL_CACHE_LENGTH - 1;
......
...@@ -476,6 +476,7 @@ mysqld_show_create(THD *thd, TABLE_LIST *table_list) ...@@ -476,6 +476,7 @@ mysqld_show_create(THD *thd, TABLE_LIST *table_list)
DBUG_PRINT("enter",("db: %s table: %s",table_list->db, DBUG_PRINT("enter",("db: %s table: %s",table_list->db,
table_list->real_name)); table_list->real_name));
/* Only one table for now */
if (!(table = open_ltable(thd, table_list, TL_UNLOCK))) if (!(table = open_ltable(thd, table_list, TL_UNLOCK)))
{ {
send_error(&thd->net); send_error(&thd->net);
...@@ -490,34 +491,32 @@ mysqld_show_create(THD *thd, TABLE_LIST *table_list) ...@@ -490,34 +491,32 @@ mysqld_show_create(THD *thd, TABLE_LIST *table_list)
DBUG_RETURN(1); DBUG_RETURN(1);
String *packet = &thd->packet; String *packet = &thd->packet;
for(;table; table = table->next) {
{ packet->length(0);
packet->length(0); net_store_data(packet, table->table_name);
net_store_data(packet, table->table_name); // a hack - we need to reserve some space for the length before
// a hack - we need to reserve some space for the length before // we know what it is - let's assume that the length of create table
// we know what it is - let's assume that the length of create table // statement will fit into 3 bytes ( 16 MB max :-) )
// statement will fit into 3 bytes ( 16 MB max :-) ) ulong store_len_offset = packet->length();
ulong store_len_offset = packet->length(); packet->length(store_len_offset + 4);
packet->length(store_len_offset + 4); if (store_create_info(thd, table, packet))
if(store_create_info(thd, table, packet)) DBUG_RETURN(-1);
DBUG_RETURN(-1); ulong create_len = packet->length() - store_len_offset - 4;
ulong create_len = packet->length() - store_len_offset - 4; if (create_len > 0x00ffffff) // better readable in HEX ...
if(create_len > 0x00ffffff) // better readable in HEX ... DBUG_RETURN(1); // just in case somebody manages to create a table
DBUG_RETURN(1); // just in case somebody manages to create a table // with *that* much stuff in the definition
// with *that* much stuff in the definition
// now we have to store the length in three bytes, even if it would fit
// now we have to store the length in three bytes, even if it would fit // into fewer, so we cannot use net_store_data() anymore,
// into fewer, so we cannot use net_store_data() anymore, // and do it ourselves
// and do it ourselves char* p = (char*)packet->ptr() + store_len_offset;
char* p = (char*)packet->ptr() + store_len_offset; *p++ = (char) 253; // The client the length is stored using 3-bytes
*p++ = (char) 253; // The client the length is stored using 3-bytes int3store(p, create_len);
int3store(p, create_len);
// now we are in business :-)
// now we are in business :-) if (my_net_write(&thd->net, (char*)packet->ptr(), packet->length()))
if(my_net_write(&thd->net, (char*)packet->ptr(), packet->length())) DBUG_RETURN(1);
DBUG_RETURN(1); }
}
send_eof(&thd->net); send_eof(&thd->net);
DBUG_RETURN(0); DBUG_RETURN(0);
} }
......
...@@ -18,6 +18,6 @@ ...@@ -18,6 +18,6 @@
/* This defines strtol() if neaded */ /* This defines strtol() if neaded */
#include <global.h> #include <global.h>
#if !defined(MSDOS) && !defined(HAVE_STRTOUL) && !defined(__WIN__) #if !defined(MSDOS) && !defined(HAVE_STRTOL) && !defined(__WIN__)
#include "strto.c" #include "strto.c"
#endif #endif
...@@ -311,7 +311,7 @@ fi ...@@ -311,7 +311,7 @@ fi
%attr(755, root, root) /usr/bin/safe_mysqld %attr(755, root, root) /usr/bin/safe_mysqld
%attr(755, root, root) /usr/bin/my_print_defaults %attr(755, root, root) /usr/bin/my_print_defaults
%attr(644, root, root) /usr/info/mysql.info %attr(644, root, root) /usr/info/mysql.info.gz
%attr(755, root, root) /usr/sbin/mysqld %attr(755, root, root) /usr/sbin/mysqld
...@@ -331,7 +331,7 @@ fi ...@@ -331,7 +331,7 @@ fi
%attr(755, root, root) /usr/bin/mysqlshow %attr(755, root, root) /usr/bin/mysqlshow
%attr(755, root, root) /usr/bin/mysqlbinlog %attr(755, root, root) /usr/bin/mysqlbinlog
%attr(644, root, man) %doc /usr/man/man1/mysql.1 %attr(644, root, man) %doc /usr/man/man1/mysql.1.gz
%post shared %post shared
/sbin/ldconfig /sbin/ldconfig
......
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