diff options
-rw-r--r-- | Docs/manual.texi | 126 | ||||
-rw-r--r-- | client/Makefile.am | 1 | ||||
-rw-r--r-- | client/client_priv.h | 31 | ||||
-rw-r--r-- | client/mysql.cc | 11 | ||||
-rw-r--r-- | client/mysqladmin.c | 9 | ||||
-rw-r--r-- | client/mysqlbinlog.cc | 16 | ||||
-rw-r--r-- | client/mysqlcheck.c | 12 | ||||
-rw-r--r-- | client/mysqlimport.c | 10 | ||||
-rw-r--r-- | extra/comp_err.c | 15 | ||||
-rw-r--r-- | heap/hp_test2.c | 55 | ||||
-rw-r--r-- | heap/hp_update.c | 12 | ||||
-rw-r--r-- | heap/hp_write.c | 2 | ||||
-rw-r--r-- | include/config-os2.h | 9 | ||||
-rw-r--r-- | include/global.h | 11 | ||||
-rw-r--r-- | include/merge.h | 2 | ||||
-rw-r--r-- | include/my_pthread.h | 2 | ||||
-rw-r--r-- | include/myisam.h | 2 | ||||
-rw-r--r-- | include/nisam.h | 2 | ||||
-rw-r--r-- | libmysql/dll.c | 22 | ||||
-rw-r--r-- | libmysql/libmysql.c | 21 | ||||
-rw-r--r-- | libmysql/net.c | 4 | ||||
-rw-r--r-- | libmysql/violite.c | 14 | ||||
-rw-r--r-- | myisam/myisampack.c | 48 | ||||
-rw-r--r-- | myisam/sort.c | 6 | ||||
-rw-r--r-- | mysys/my_write.c | 39 | ||||
-rw-r--r-- | sql/handler.h | 2 | ||||
-rw-r--r-- | sql/mini_client.cc | 12 | ||||
-rw-r--r-- | sql/mysqld.cc | 23 | ||||
-rw-r--r-- | sql/net_serv.cc | 4 | ||||
-rw-r--r-- | sql/sql_table.cc | 2 | ||||
-rw-r--r-- | sql/unireg.cc | 4 |
31 files changed, 273 insertions, 256 deletions
diff --git a/Docs/manual.texi b/Docs/manual.texi index c63fb14011e..a61faa7647e 100644 --- a/Docs/manual.texi +++ b/Docs/manual.texi @@ -1,4 +1,4 @@ -\input texinfo @c -*-texinfo-*- +input texinfo @c -*-texinfo-*- @c Copyright 1997-2001 TcX AB, Detron HB and MySQL Finland AB @c @c ********************************************************* @@ -1566,6 +1566,10 @@ Hands on tutorial for MySQL. @subheading Porting MySQL/Using MySQL on Different Systems @table @asis +@item @uref{http://www.entropy.ch/software/macosx/mysql/} +Binary of MySQL for Mac OS X Client. Includes information of how to +build and use MySQL on Mac OS X. + @item @uref{http://xclave.macnn.com/MySQL/} The Mac OS Xclave. Running MySQL on Mac OS X. @@ -5187,9 +5191,6 @@ for MySQL from the day it was released, whereas until recently PostgreSQL was unsupported. @item -MySQL works on more platforms than PostgreSQL. @xref{Which OS}. - -@item MySQL works better on Windows than PostgreSQL does. MySQL runs as a native Windows application (a service on NT/Win2000/WinXP), while PostgreSQL is run under the cygwin emulation. We have heard that @@ -8074,6 +8075,8 @@ shell> ./configure --with-unix-socket-path=/usr/local/mysql/tmp/mysql.sock @end example Note that the given file must be an absolute pathname! +You can also later change the location @file{mysql.sock} by using the MySQL +option files. @xref{Problems with mysql.sock}. @cindex compiling, statically @cindex statically, compiling @@ -8087,6 +8090,8 @@ shell> ./configure --with-client-ldflags=-all-static \ --with-mysqld-ldflags=-all-static @end example + + @tindex @code{CC} environment variable @tindex environment variable, @code{CC} @tindex @code{CXX} environment variable @@ -8993,6 +8998,8 @@ shell> MYSQL_UNIX_PORT=/some_tmp_dir/mysqld.sock shell> export TMPDIR MYSQL_UNIX_PORT @end example +@xref{Problems with mysql.sock}. + @file{some_tmp_dir} should be the path to some directory for which you have write permission. @xref{Environment variables}. @@ -9233,6 +9240,7 @@ should append the following to it: /bin/sh -c 'cd /usr/local/mysql ; ./bin/safe_mysqld --user=mysql &' @end example +@cindex changing socket location You can also add options for @code{mysql.server} in a global @file{/etc/my.cnf} file. A typical @file{/etc/my.cnf} file might look like this: @@ -9240,7 +9248,7 @@ this: @example [mysqld] datadir=/usr/local/mysql/var -socket=/tmp/mysqld.sock +socket=/var/tmp/mysql.sock port=3306 user=mysql @@ -28268,18 +28276,22 @@ example: @end example In this example, @code{9} (@code{precision}) represents the number of -significant decimal digits that will be stored for values, and -@code{2} (@code{scale}) represents the number of digits that will be -stored following the decimal point. In this case, therefore, the range -of values that can be stored in the @code{salary} column is from -@code{-999999.99} to @code{9999999.99}. In ANSI/ISO SQL92, the syntax -@code{DECIMAL(p)} is equivalent to @code{DECIMAL(p,0)}. Similarly, the -syntax @code{DECIMAL} is equivalent to @code{DECIMAL(p,0)}, where the -implementation is allowed to decide the value of @code{p}. -MySQL does not currently support either of these variant forms -of the @code{DECIMAL}/@code{NUMERIC} data types. This is not generally -a serious problem, as the principal benefits of these types derive from -the ability to control both precision and scale explicitly. +significant decimal digits that will be stored for values, and @code{2} +(@code{scale}) represents the number of digits that will be stored +following the decimal point. In this case, therefore, the range of +values that can be stored in the @code{salary} column is from +@code{-9999999.99} to @code{9999999.99}. +(MySQL can actually store numbers up to @code{9999999.99} in this column +because it doesn't have to store the sign for positive numbers) + +In ANSI/ISO SQL92, the syntax @code{DECIMAL(p)} is equivalent to +@code{DECIMAL(p,0)}. Similarly, the syntax @code{DECIMAL} is equivalent +to @code{DECIMAL(p,0)}, where the implementation is allowed to decide +the value of @code{p}. MySQL does not currently support either of these +variant forms of the @code{DECIMAL}/@code{NUMERIC} data types. This is +not generally a serious problem, as the principal benefits of these +types derive from the ability to control both precision and scale +explicitly. @code{DECIMAL} and @code{NUMERIC} values are stored as strings, rather than as binary floating-point numbers, in order to preserve the decimal @@ -31891,8 +31903,8 @@ can also be used to get the value. Note that as @code{mysql_insert_id()} is only updated after @code{INSERT} and @code{UPDATE} statements, you can't use this function -to retrieve the value used @code{LAST_INSERT_ID(expr)} for other SQL -statements. +to retrieve the value for @code{LAST_INSERT_ID(expr)} after executing +other SQL statements like @code{SELECT} or @code{SET}. @findex FORMAT() @@ -40640,8 +40652,9 @@ does not generate an @code{AUTO_INCREMENT} value. If you need to save the value for later, be sure to call @code{mysql_insert_id()} immediately after the query that generates the value. -@code{mysql_insert_id()} is only updated after @code{INSERT} and -@code{UPDATE} statements, not after using @code{LAST_INSERT_ID(expr)}. +@code{mysql_insert_id()} is updated after @code{INSERT} and +@code{UPDATE} statements that generate an @code{AUTO_INCREMENT} value or +that set a column value to @code{LAST_INSERT_ID(expr)}. @xref{Miscellaneous functions}. Also note that the value of the SQL @code{LAST_INSERT_ID()} function always @@ -43402,27 +43415,14 @@ the MySQL socket (for example, a job that removes old files from the @file{/tmp} directory). You can always run @code{mysqladmin version} and check that the socket @code{mysqladmin} is trying to use really exists. The fix in this case is to change the @code{cron} job to -not remove @file{mysqld.sock} or to place the socket somewhere else. You -can specify a different socket location at MySQL configuration -time with this command: -@example -shell> ./configure --with-unix-socket-path=/path/to/socket -@end example -You can also start @code{safe_mysqld} with the -@code{--socket=/path/to/socket} option and set the environment variable -@code{MYSQL_UNIX_PORT} to the socket pathname before starting your -MySQL clients. +not remove @file{mysqld.sock} or to place the socket somewhere else. +@xref{Problems with mysql.sock}. @item You have started the @code{mysqld} server with the @code{--socket=/path/to/socket} option. If you change the socket pathname for the server, you must also notify the MySQL clients -about the new path. You can do this by setting the environment variable -@code{MYSQL_UNIX_PORT} to the socket pathname or by providing the socket path -as an argument to the clients. You can test the socket with this command: - -@example -shell> mysqladmin --socket=/path/to/socket version -@end example +about the new path. You can do this by providing the socket path +as an argument to the client. @xref{Problems with mysql.sock}. @item You are using Linux and one thread has died (core dumped). In this case you must kill the other @code{mysqld} threads (for example, with the @@ -44409,8 +44409,8 @@ tables. These are not hidden and have names of the form @file{SQL_*}. the original table. -@node Problems with mysql.sock, Timezone problems, Temporary files, Administration Issues -@appendixsubsec How to Protect @file{/tmp/mysql.sock} from Being Deleted +@node Problems with mysql.sock, Timezone problems, Temporary files, Administration Issues +@appendixsubsec How to Protect or change the MySQL socket file @file{/tmp/mysql.sock} @cindex @code{mysql.sock}, protection @cindex deletion, @code{mysql.sock} @@ -44430,6 +44430,40 @@ only by their owners or the superuser (@code{root}). You can check if the @code{sticky} bit is set by executing @code{ls -ld /tmp}. If the last permission bit is @code{t}, the bit is set. +@cindex changing socket location + +You can change the place where MySQL uses / puts the socket file the +following ways: + +@itemize @bullet +@item +Specify the path in a global or local option file. +For example, put in @code{/etc/my.cnf}: + +@example +[client] +socket=path-for-socket-file + +[mysqld] +socket=path-for-socket-file +@end example +@xref{Option files}. +@item +Specifying this on the command line to @code{safe_mysqld} and most +clients with the @code{--socket=path-for-socket-file} option. +@item +Specify the path to the socket in the @code{MYSQL_UNIX_PORT} environment +variable. +@item +Defining the path with the @code{configure} option +@code{--with-unix-socket-path=path-for-socket-file}. @xref{configure options}. +@end itemize + +You can test that the socket works with this command: + +@example +shell> mysqladmin --socket=/path/to/socket version +@end example @node Timezone problems, , Problems with mysql.sock, Administration Issues @appendixsubsec Time Zone Problems @@ -46768,6 +46802,7 @@ users use this code as the rest of the code and because of this we are not yet 100% confident in this code. @menu +* News-3.23.43:: Changes in release 3.23.43 * News-3.23.42:: Changes in release 3.23.42 * News-3.23.41:: Changes in release 3.23.41 * News-3.23.40:: Changes in release 3.23.40 @@ -46814,7 +46849,16 @@ not yet 100% confident in this code. * News-3.23.0:: Changes in release 3.23.0 @end menu -@node News-3.23.42, News-3.23.41, News-3.23.x, News-3.23.x +@node News-3.23.43, News-3.23.42, News-3.23.x, News-3.23.x +@appendixsubsec Changes in release 3.23.43 +@itemize @bullet +@item +Fixed problem with @code{myisampack} when using pre-space filled CHAR columns. +@item +Applied patch from Yuri Dario for OS2. +@end itemize + +@node News-3.23.42, News-3.23.41, News-3.23.43, News-3.23.x @appendixsubsec Changes in release 3.23.42 @itemize @bullet @item diff --git a/client/Makefile.am b/client/Makefile.am index a91c7d05f77..380c9f2acbe 100644 --- a/client/Makefile.am +++ b/client/Makefile.am @@ -19,6 +19,7 @@ INCLUDES = -I$(srcdir)/../include \ -I../include -I$(srcdir)/.. -I$(top_srcdir) \ -I.. +noinst_HEADERS = client_priv.h LIBS = @CLIENT_LIBS@ LDADD = @CLIENT_EXTRA_LDFLAGS@ ../libmysql/libmysqlclient.la bin_PROGRAMS = mysql mysqladmin mysqlcheck mysqlshow \ diff --git a/client/client_priv.h b/client/client_priv.h new file mode 100644 index 00000000000..7bee03a8ab5 --- /dev/null +++ b/client/client_priv.h @@ -0,0 +1,31 @@ +/* Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult 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 */ + +/* Common defines for all clients */ + +#include <global.h> +#include <my_sys.h> +#include <m_string.h> +#include <mysql.h> +#include <errmsg.h> +#include <getopt.h> + +/* We have to define 'enum options' identical in all files to keep OS2 happy */ + +enum options { OPT_CHARSETS_DIR=256, OPT_DEFAULT_CHARSET, + OPT_PAGER, OPT_NOPAGER, OPT_TEE, OPT_NOTEE, + OPT_LOW_PRIORITY, OPT_AUTO_REPAIR, OPT_COMPRESS, + OPT_FTB, OPT_LTB, OPT_ENC, OPT_O_ENC, OPT_ESC, OPT_TABLES}; diff --git a/client/mysql.cc b/client/mysql.cc index e4db7e93256..96536c9d5f0 100644 --- a/client/mysql.cc +++ b/client/mysql.cc @@ -25,17 +25,12 @@ * **/ -#include <global.h> -#include <my_sys.h> -#include <m_string.h> +#include "client_priv.h" #include <m_ctype.h> -#include "mysql.h" -#include "errmsg.h" #include <my_dir.h> #ifndef __GNU_LIBRARY__ #define __GNU_LIBRARY__ // Skip warnings in getopt.h #endif -#include <getopt.h> #include "my_readline.h" #include <signal.h> @@ -380,10 +375,6 @@ sig_handler mysql_end(int sig) exit(status.exit_status); } -enum options {OPT_CHARSETS_DIR=256, OPT_DEFAULT_CHARSET, - OPT_PAGER, OPT_NOPAGER, OPT_TEE, OPT_NOTEE} ; - - static struct option long_options[] = { {"i-am-a-dummy", optional_argument, 0, 'U'}, diff --git a/client/mysqladmin.c b/client/mysqladmin.c index e95d6492949..ca568a914f2 100644 --- a/client/mysqladmin.c +++ b/client/mysqladmin.c @@ -17,13 +17,8 @@ /* maintaince of mysql databases */ -#include <global.h> -#include <my_sys.h> -#include <m_string.h> +#include "client_priv.h" #include <signal.h> -#include "mysql.h" -#include "errmsg.h" -#include <getopt.h> #ifdef THREAD #include <my_pthread.h> /* because of signal() */ #endif @@ -102,8 +97,6 @@ static const char *command_names[]= { static TYPELIB command_typelib= { array_elements(command_names)-1,"commands", command_names}; -enum options { OPT_CHARSETS_DIR=256 }; - static struct option long_options[] = { {"compress", no_argument, 0, 'C'}, {"character-sets-dir", required_argument, 0, OPT_CHARSETS_DIR}, diff --git a/client/mysqlbinlog.cc b/client/mysqlbinlog.cc index 289f5aa517f..ac2f3e4efda 100644 --- a/client/mysqlbinlog.cc +++ b/client/mysqlbinlog.cc @@ -17,23 +17,20 @@ #define MYSQL_CLIENT #undef MYSQL_SERVER -#include <global.h> -#include <m_string.h> -#include <my_sys.h> -#include <getopt.h> -#include <mysql.h> +#include "client_priv.h" #include <time.h> #include "log_event.h" #define CLIENT_CAPABILITIES (CLIENT_LONG_PASSWORD | CLIENT_LONG_FLAG | CLIENT_LOCAL_FILES) +#ifndef OS2 extern "C" { int simple_command(MYSQL *mysql,enum enum_server_command command, - const char *arg, - uint length, my_bool skipp_check); - int net_safe_read(MYSQL* mysql); + const char *arg, uint length, my_bool skipp_check); + uint net_safe_read(MYSQL* mysql); } +#endif char server_version[SERVER_VERSION_LENGTH]; uint32 server_id = 0; @@ -42,7 +39,8 @@ uint32 server_id = 0; ulong bytes_sent = 0L, bytes_received = 0L; ulong mysqld_net_retry_count = 10L; uint test_flags = 0; -FILE *result_file; + +static FILE *result_file; #ifndef DBUG_OFF static const char* default_dbug_option = "d:t:o,/tmp/mysqlbinlog.trace"; diff --git a/client/mysqlcheck.c b/client/mysqlcheck.c index ebaa8366c72..0f7bfb37ecf 100644 --- a/client/mysqlcheck.c +++ b/client/mysqlcheck.c @@ -18,19 +18,12 @@ #define CHECK_VERSION "1.02" -#include <global.h> -#include <my_sys.h> -#include <m_string.h> +#include "client_priv.h" #include <m_ctype.h> - -#include "mysql.h" #include "mysql_version.h" #include "mysqld_error.h" -#include <getopt.h> #include "sslopt-vars.h" -#include <m_string.h> - /* Exit codes */ #define EX_USAGE 1 @@ -50,9 +43,6 @@ DYNAMIC_ARRAY tables4repair; enum operations {DO_CHECK, DO_REPAIR, DO_ANALYZE, DO_OPTIMIZE}; -enum options {OPT_CHARSETS_DIR=256, OPT_COMPRESS, OPT_DEFAULT_CHARSET, - OPT_TABLES, OPT_AUTO_REPAIR}; - static struct option long_options[] = { {"all-databases", no_argument, 0, 'A'}, diff --git a/client/mysqlimport.c b/client/mysqlimport.c index cbdedf56cbe..d8f763b9653 100644 --- a/client/mysqlimport.c +++ b/client/mysqlimport.c @@ -27,13 +27,8 @@ */ #define IMPORT_VERSION "2.7" -#include <global.h> -#include <my_sys.h> -#include <m_string.h> -#include "mysql.h" +#include "client_priv.h" #include "mysql_version.h" -#include <getopt.h> - static void db_error_with_table(MYSQL *mysql, char *table); static void db_error(MYSQL *mysql); @@ -54,9 +49,6 @@ static uint opt_mysql_port=0; static my_string opt_mysql_unix_port=0; #include "sslopt-vars.h" -enum mi_options {OPT_FTB=256, OPT_LTB, OPT_ENC, OPT_O_ENC, OPT_ESC, - OPT_LOW_PRIORITY, OPT_CHARSETS_DIR, OPT_DEFAULT_CHARSET}; - static struct option long_options[] = { {"character-sets-dir", required_argument, 0, OPT_CHARSETS_DIR}, diff --git a/extra/comp_err.c b/extra/comp_err.c index 198bdffb0db..f7b68ff0891 100644 --- a/extra/comp_err.c +++ b/extra/comp_err.c @@ -119,9 +119,7 @@ int main(int argc,char *argv[]) /* Read options */ -static void get_options(argc,argv) -register int *argc; -register char **argv[]; +static void get_options(register int *argc,register char **argv[]) { int help=0; char *pos,*progname; @@ -163,9 +161,7 @@ register char **argv[]; /* Count rows in from-file until row that start with char is found */ -static int count_rows(from,c,c2) -FILE *from; -pchar c,c2; +static int count_rows(FILE *from, pchar c, pchar c2) { int count; long pos; @@ -189,9 +185,7 @@ pchar c,c2; /* Read rows and remember them until row that start with char */ /* Converts row as a C-compiler would convert a textstring */ -static int remember_rows(from,c) -FILE *from; -pchar c; +static int remember_rows(FILE* from, pchar c) { int i,nr,start_count,found_end; char row[MAXLENGTH],*pos; @@ -253,8 +247,7 @@ pchar c; /* Copy rows from memory to file and remember position */ -static int copy_rows(to) -FILE *to; +static int copy_rows(FILE *to) { int row_nr; long start_pos; diff --git a/heap/hp_test2.c b/heap/hp_test2.c index e3ed7a90df5..a76aa19e082 100644 --- a/heap/hp_test2.c +++ b/heap/hp_test2.c @@ -45,13 +45,11 @@ static int calc_check(byte *buf,uint length); /* Huvudprogrammet */ -int main(argc,argv) -int argc; -char *argv[]; +int main(int argc, char *argv[]) { register uint i,j; uint ant,n1,n2,n3; - uint reclength,write_count,update,delete,check2,dupp_keys,found_key; + uint reclength,write_count,update,opt_delete,check2,dupp_keys,found_key; int error; ulong pos; unsigned long key_check; @@ -70,7 +68,7 @@ char *argv[]; get_options(argc,argv); reclength=37; - write_count=update=delete=0; + write_count=update=opt_delete=0; key_check=0; keyinfo[0].seg=keyseg; @@ -169,7 +167,7 @@ char *argv[]; printf("error: %d; can't delete record: \"%s\"\n", my_errno,record); goto err; } - delete++; + opt_delete++; key1[atoi(record+keyinfo[0].seg[0].start)]--; key3[atoi(record+keyinfo[2].seg[0].start)]=0; key_check-=atoi(record); @@ -198,7 +196,7 @@ char *argv[]; { if (heap_scan_init(file)) goto err; - j=rnd(write_count-delete); + j=rnd(write_count-opt_delete); while ((error=heap_scan(file,record) == HA_ERR_RECORD_DELETED) || (!error && j)) { @@ -271,7 +269,7 @@ char *argv[]; key_check-=atoi(record3); key1[atoi(record+keyinfo[0].seg[0].start)]--; key3[atoi(record+keyinfo[2].seg[0].start)]=0; - delete++; + opt_delete++; ant=2; while ((error=heap_rnext(file,record3)) == 0 || error == HA_ERR_RECORD_DELETED) @@ -291,21 +289,21 @@ char *argv[]; } if (!silent) - printf("- Read last key - delete - prev - prev - delete - prev -> first\n"); + printf("- Read last key - delete - prev - prev - opt_delete - prev -> first\n"); if (heap_rlast(file,record3)) goto err; if (heap_delete(file,record3)) goto err; key_check-=atoi(record3); key1[atoi(record+keyinfo[0].seg[0].start)]--; key3[atoi(record+keyinfo[2].seg[0].start)]=0; - delete++; + opt_delete++; if (heap_rprev(file,record3) || heap_rprev(file,record3)) goto err; if (heap_delete(file,record3)) goto err; key_check-=atoi(record3); key1[atoi(record+keyinfo[0].seg[0].start)]--; key3[atoi(record+keyinfo[2].seg[0].start)]=0; - delete++; + opt_delete++; ant=3; while ((error=heap_rprev(file,record3)) == 0 || error == HA_ERR_RECORD_DELETED) @@ -340,7 +338,7 @@ char *argv[]; goto err; if (heap_delete(file,record3)) goto err; key_check-=atoi(record3); - delete++; + opt_delete++; key1[atoi(record+keyinfo[0].seg[0].start)]--; key3[atoi(record+keyinfo[2].seg[0].start)]=0; ant=0; @@ -348,9 +346,9 @@ char *argv[]; error == HA_ERR_RECORD_DELETED) if (! error) ant++; - if (ant != write_count-delete) + if (ant != write_count-opt_delete) { - printf("next: Found: %d records of %d\n",ant,write_count-delete); + printf("next: Found: %d records of %d\n",ant,write_count-opt_delete); goto end; } if (heap_check_heap(file,0)) @@ -361,7 +359,7 @@ char *argv[]; puts("- Test if: Read rrnd - same - rkey - same"); DBUG_PRINT("progpos",("Read rrnd - same")); - pos=rnd(write_count-delete-5)+5; + pos=rnd(write_count-opt_delete-5)+5; heap_scan_init(file); i=5; while ((error=heap_scan(file,record)) == HA_ERR_RECORD_DELETED || @@ -399,14 +397,14 @@ char *argv[]; { HEAPINFO info; heap_info(file,&info,0); - /* We have to test with delete +1 as this may be the case if the last + /* We have to test with opt_delete +1 as this may be the case if the last inserted row was a duplicate key */ - if (info.records != write_count-delete || - (info.deleted != delete && info.deleted != delete+1)) + if (info.records != write_count-opt_delete || + (info.deleted != opt_delete && info.deleted != opt_delete+1)) { puts("Wrong info from heap_info"); printf("Got: records: %ld(%d) deleted: %ld(%d)\n", - info.records,write_count-delete,info.deleted,delete); + info.records,write_count-opt_delete,info.deleted,opt_delete); } } @@ -429,10 +427,10 @@ char *argv[]; check+=calc_check(record,reclength); } } - if (ant != write_count-delete) + if (ant != write_count-opt_delete) { printf("rrnd: I can only find: %d records of %d\n", ant, - write_count-delete); + write_count-opt_delete); goto end; } if (heap_extra(file,HA_EXTRA_NO_CACHE)) @@ -460,10 +458,10 @@ char *argv[]; check2+=calc_check(record,reclength); } } - if (ant != write_count-delete) + if (ant != write_count-opt_delete) { printf("scan: I can only find: %d records of %d\n", ant, - write_count-delete); + write_count-opt_delete); goto end; } #ifdef OLD_HEAP_VERSION @@ -552,7 +550,7 @@ char *argv[]; write_count++; if (heap_delete(file,record)) goto err; - delete++; + opt_delete++; } pos++; } @@ -570,7 +568,7 @@ char *argv[]; end: printf("\nFollowing test have been made:\n"); - printf("Write records: %d\nUpdate records: %d\nDelete records: %d\n", write_count,update,delete); + printf("Write records: %d\nUpdate records: %d\nDelete records: %d\n", write_count,update,opt_delete); heap_clear(file); if (heap_close(file) || (file2 && heap_close(file2))) goto err; @@ -629,8 +627,7 @@ static int get_options(int argc,char *argv[]) /* Generate a random value in intervall 0 <=x <= n */ -static int rnd(max_value) -int max_value; +static int rnd(int max_value) { return (int) ((rand() & 32767)/32767.0*max_value); } /* rnd */ @@ -650,9 +647,7 @@ static sig_handler endprog(int sig_number __attribute__((unused))) } } -static int calc_check(buf,length) -byte *buf; -uint length; +static int calc_check(byte *buf, uint length) { int check=0; while (length--) diff --git a/heap/hp_update.c b/heap/hp_update.c index 5eb4562ca5c..a1d9c51e9dd 100644 --- a/heap/hp_update.c +++ b/heap/hp_update.c @@ -18,7 +18,7 @@ #include "heapdef.h" -int heap_update(HP_INFO *info, const byte *old, const byte *new) +int heap_update(HP_INFO *info, const byte *old, const byte *heap_new) { uint key; byte *pos; @@ -35,16 +35,16 @@ int heap_update(HP_INFO *info, const byte *old, const byte *new) for (key=0 ; key < share->keys ; key++) { - if (_hp_rec_key_cmp(share->keydef+key,old,new)) + if (_hp_rec_key_cmp(share->keydef+key,old,heap_new)) { if (_hp_delete_key(info,share->keydef+key,old,pos,key == (uint) info->lastinx) || - _hp_write_key(share,share->keydef+key,new,pos)) + _hp_write_key(share,share->keydef+key,heap_new,pos)) goto err; } } - memcpy(pos,new,(size_t) share->reclength); + memcpy(pos,heap_new,(size_t) share->reclength); if (++(share->records) == share->blength) share->blength+= share->blength; DBUG_RETURN(0); @@ -54,9 +54,9 @@ int heap_update(HP_INFO *info, const byte *old, const byte *new) info->errkey=key; do { - if (_hp_rec_key_cmp(share->keydef+key,old,new)) + if (_hp_rec_key_cmp(share->keydef+key,old,heap_new)) { - if (_hp_delete_key(info,share->keydef+key,new,pos,0) || + if (_hp_delete_key(info,share->keydef+key,heap_new,pos,0) || _hp_write_key(share,share->keydef+key,old,pos)) break; } diff --git a/heap/hp_write.c b/heap/hp_write.c index e74183276f7..12b5c638f78 100644 --- a/heap/hp_write.c +++ b/heap/hp_write.c @@ -38,7 +38,7 @@ int heap_write(HP_INFO *info, const byte *record) DBUG_ENTER("heap_write"); #ifndef DBUG_OFF - if (info->mode && O_RDONLY) + if (info->mode & O_RDONLY) { DBUG_RETURN(my_errno=EACCES); } diff --git a/include/config-os2.h b/include/config-os2.h index 172a04a9f01..9064cd5a5bb 100644 --- a/include/config-os2.h +++ b/include/config-os2.h @@ -87,6 +87,8 @@ #define S_IFMT 0xF000 /* Mask for file type */ #define F_TO_EOF 0L /* Param to lockf() to lock rest of file */ +#define HUGE_PTR + #ifdef __cplusplus extern "C" #endif @@ -102,8 +104,13 @@ BOOL TlsSetValue( DWORD, PVOID); #define lseek(A,B,C) _lseek64( A, B, C) #define tell(A) _lseek64( A, 0, SEEK_CUR) +void* dlopen( char* path, int flag); +char* dlerror( void); +void* dlsym( void* hmod, char* fn); +void dlclose( void* hmod); + /* Some typedefs */ -typedef ulonglong os_off_t; +typedef unsigned long long os_off_t; /* config.h. Generated automatically by configure. */ /* config.h.in. Generated automatically from configure.in by autoheader. */ diff --git a/include/global.h b/include/global.h index f10411af0aa..c7d6952f1c6 100644 --- a/include/global.h +++ b/include/global.h @@ -647,15 +647,24 @@ typedef off_t os_off_t; #define socket_errno WSAGetLastError() #define SOCKET_EINTR WSAEINTR #define SOCKET_EAGAIN WSAEINPROGRESS +#define SOCKET_ENFILE ENFILE +#define SOCKET_EMFILE EMFILE #elif defined(OS2) #define socket_errno sock_errno() +#define SOCKET_EINTR SOCEINTR +#define SOCKET_EAGAIN SOCEINPROGRESS +#define SOCKET_EWOULDBLOCK SOCEWOULDBLOCK +#define SOCKET_ENFILE SOCENFILE +#define SOCKET_EMFILE SOCEMFILE #define closesocket(A) soclose(A) #else /* Unix */ -#define socket_errno errno +#define socket_errno errno #define closesocket(A) close(A) #define SOCKET_EINTR EINTR #define SOCKET_EAGAIN EAGAIN #define SOCKET_EWOULDBLOCK EWOULDBLOCK +#define SOCKET_ENFILE ENFILE +#define SOCKET_EMFILE EMFILE #endif typedef uint8 int7; /* Most effective integer 0 <= x <= 127 */ diff --git a/include/merge.h b/include/merge.h index b090e49b471..c661e03a0c7 100644 --- a/include/merge.h +++ b/include/merge.h @@ -43,7 +43,7 @@ typedef struct st_mrg_info /* Struct from h_info */ ulonglong data_file_length; uint reclength; /* Recordlength */ int errkey; /* With key was dupplicated on err */ - uint options; /* HA_OPTIONS_... used */ + uint options; /* HA_OPTION_... used */ } MERGE_INFO; typedef struct st_mrg_table_info diff --git a/include/my_pthread.h b/include/my_pthread.h index b54a94f83fc..cd72bcced83 100644 --- a/include/my_pthread.h +++ b/include/my_pthread.h @@ -139,6 +139,7 @@ int pthread_mutex_unlock (pthread_mutex_t *); int pthread_mutex_destroy (pthread_mutex_t *); #define my_pthread_setprio(A,B) DosSetPriority(PRTYS_THREAD,PRTYC_NOCHANGE, B, A) #define pthread_kill(A,B) raise(B) +#define pthread_exit(A) pthread_dummy() #else #define pthread_mutex_init(A,B) InitializeCriticalSection(A) #define pthread_mutex_lock(A) (EnterCriticalSection(A),0) @@ -146,7 +147,6 @@ int pthread_mutex_destroy (pthread_mutex_t *); #define pthread_mutex_destroy(A) DeleteCriticalSection(A) #define my_pthread_setprio(A,B) SetThreadPriority(GetCurrentThread(), (B)) #define pthread_kill(A,B) pthread_dummy(0) -#define pthread_exit(A) pthread_dummy() #endif /* OS2 */ /* Dummy defines for easier code */ diff --git a/include/myisam.h b/include/myisam.h index 9b006467ac8..8d25e17e589 100644 --- a/include/myisam.h +++ b/include/myisam.h @@ -69,7 +69,7 @@ typedef struct st_mi_isaminfo /* Struct from h_info */ ulonglong auto_increment; ulonglong key_map; /* Which keys are used */ uint keys; /* Number of keys in use */ - uint options; /* HA_OPTIONS_... used */ + uint options; /* HA_OPTION_... used */ int errkey, /* With key was dupplicated on err */ sortkey; /* clustered by this key */ File filenr; /* (uniq) filenr for datafile */ diff --git a/include/nisam.h b/include/nisam.h index 77ca12bbc5c..7ce2b44ee79 100644 --- a/include/nisam.h +++ b/include/nisam.h @@ -57,7 +57,7 @@ typedef struct st_n_isaminfo /* Struct from h_info */ uint reclength; /* Recordlength */ uint mean_reclength; /* Mean recordlength (if packed) */ uint keys; /* How many keys used */ - uint options; /* HA_OPTIONS_... used */ + uint options; /* HA_OPTION_... used */ int errkey, /* With key was dupplicated on err */ sortkey; /* clustered by this key */ File filenr; /* (uniq) filenr for datafile */ diff --git a/libmysql/dll.c b/libmysql/dll.c index 4c952c5889e..d1a23794025 100644 --- a/libmysql/dll.c +++ b/libmysql/dll.c @@ -110,3 +110,25 @@ int _export FAR PASCAL libmain(HANDLE hModule,short cbHeapSize, } #endif + +#ifdef OS2 + +// +// This function is called automatically by _DLL_InitTerm +// Every dll runtime enviroment is not tz enabled, so tzset() +// must be called to enable TZ handling +// Also timezone is fixed. +// +extern "C" unsigned long _System DllMain(unsigned long modhandle, + unsigned long flag) +{ + if (flag == 0) { + tzset(); // Set tzname + time_t currentTime = time(NULL); + struct tm *ts = localtime(¤tTime); + if (ts->tm_isdst > 0) + _timezone -= 3600; + } +} + +#endif diff --git a/libmysql/libmysql.c b/libmysql/libmysql.c index 0cb6170b25c..0e202a4fc08 100644 --- a/libmysql/libmysql.c +++ b/libmysql/libmysql.c @@ -70,11 +70,10 @@ my_string mysql_unix_port=0; #endif #if defined(MSDOS) || defined(__WIN__) -#define ERRNO WSAGetLastError() +// socket_errno is defined in global.h for all platforms #define perror(A) #else #include <errno.h> -#define ERRNO errno #define SOCKET_ERROR -1 #endif /* __WIN__ */ @@ -451,7 +450,7 @@ simple_command(MYSQL *mysql,enum enum_server_command command, const char *arg, if (net_write_command(net,(uchar) command,arg, length ? length : (ulong) strlen(arg))) { - DBUG_PRINT("error",("Can't send command to server. Error: %d",errno)); + DBUG_PRINT("error",("Can't send command to server. Error: %d",socket_errno)); end_server(mysql); if (mysql_reconnect(mysql) || net_write_command(net,(uchar) command,arg, @@ -1213,7 +1212,7 @@ mysql_real_connect(MYSQL *mysql,const char *host, const char *user, if ((sock = socket(AF_UNIX,SOCK_STREAM,0)) == SOCKET_ERROR) { net->last_errno=CR_SOCKET_CREATE_ERROR; - sprintf(net->last_error,ER(net->last_errno),ERRNO); + sprintf(net->last_error,ER(net->last_errno),socket_errno); goto error; } net->vio = vio_new(sock, VIO_TYPE_SOCKET, TRUE); @@ -1223,9 +1222,9 @@ mysql_real_connect(MYSQL *mysql,const char *host, const char *user, if (connect2(sock,(struct sockaddr *) &UNIXaddr, sizeof(UNIXaddr), mysql->options.connect_timeout) <0) { - DBUG_PRINT("error",("Got error %d on connect to local server",ERRNO)); + DBUG_PRINT("error",("Got error %d on connect to local server",socket_errno)); net->last_errno=CR_CONNECTION_ERROR; - sprintf(net->last_error,ER(net->last_errno),unix_socket,ERRNO); + sprintf(net->last_error,ER(net->last_errno),unix_socket,socket_errno); goto error; } } @@ -1276,7 +1275,7 @@ mysql_real_connect(MYSQL *mysql,const char *host, const char *user, if ((sock = (my_socket) socket(AF_INET,SOCK_STREAM,0)) == SOCKET_ERROR) { net->last_errno=CR_IPSOCK_ERROR; - sprintf(net->last_error,ER(net->last_errno),ERRNO); + sprintf(net->last_error,ER(net->last_errno),socket_errno); goto error; } net->vio = vio_new(sock,VIO_TYPE_TCPIP,FALSE); @@ -1313,7 +1312,7 @@ mysql_real_connect(MYSQL *mysql,const char *host, const char *user, if (!(hp=gethostbyname(host))) { net->last_errno=CR_UNKNOWN_HOST; - sprintf(net->last_error, ER(CR_UNKNOWN_HOST), host, errno); + sprintf(net->last_error, ER(CR_UNKNOWN_HOST), host, socket_errno); goto error; } memcpy(&sock_addr.sin_addr,hp->h_addr, (size_t) hp->h_length); @@ -1323,9 +1322,9 @@ mysql_real_connect(MYSQL *mysql,const char *host, const char *user, if (connect2(sock,(struct sockaddr *) &sock_addr, sizeof(sock_addr), mysql->options.connect_timeout) <0) { - DBUG_PRINT("error",("Got error %d on connect to '%s'",ERRNO,host)); + DBUG_PRINT("error",("Got error %d on connect to '%s'",socket_errno,host)); net->last_errno= CR_CONN_HOST_ERROR; - sprintf(net->last_error ,ER(CR_CONN_HOST_ERROR), host, ERRNO); + sprintf(net->last_error ,ER(CR_CONN_HOST_ERROR), host, socket_errno); goto error; } } @@ -1810,7 +1809,7 @@ send_file_to_server(MYSQL *mysql, const char *filename) if (my_net_write(&mysql->net,"",0) || net_flush(&mysql->net)) { mysql->net.last_errno=CR_SERVER_LOST; - sprintf(mysql->net.last_error,ER(mysql->net.last_errno),errno); + sprintf(mysql->net.last_error,ER(mysql->net.last_errno),socket_errno); my_free(tmp_name,MYF(0)); DBUG_RETURN(-1); } diff --git a/libmysql/net.c b/libmysql/net.c index ba0944a2516..24e4da3561a 100644 --- a/libmysql/net.c +++ b/libmysql/net.c @@ -77,7 +77,7 @@ extern ulong mysqld_net_retry_count; typedef my_bool thr_alarm_t; typedef my_bool ALARM; #define thr_alarm_init(A) (*(A))=0 -#define thr_alarm_in_use(A) (*(A)) +#define thr_alarm_in_use(A) (*(A)!= 0) #define thr_end_alarm(A) #define thr_alarm(A,B,C) local_thr_alarm((A),(B),(C)) inline int local_thr_alarm(my_bool *A,int B __attribute__((unused)),ALARM *C __attribute__((unused))) @@ -372,7 +372,7 @@ net_real_write(NET *net,const char *packet,ulong len) #endif /* EXTRA_DEBUG */ } #if defined(THREAD_SAFE_CLIENT) && !defined(MYSQL_SERVER) - if (vio_errno(net->vio) == EINTR) + if (vio_errno(net->vio) == SOCKET_EINTR) { DBUG_PRINT("warning",("Interrupted write. Retrying...")); continue; diff --git a/libmysql/violite.c b/libmysql/violite.c index aff4224e5a3..0d96c71969c 100644 --- a/libmysql/violite.c +++ b/libmysql/violite.c @@ -44,18 +44,10 @@ #endif /* defined(__EMX__) */ #if defined(MSDOS) || defined(__WIN__) -#ifdef __WIN__ -#undef errno -#undef EINTR -#undef EAGAIN -#define errno WSAGetLastError() -#define EINTR WSAEINTR -#define EAGAIN WSAEINPROGRESS -#endif /* __WIN__ */ #define O_NONBLOCK 1 /* For emulation of fcntl() */ #endif #ifndef EWOULDBLOCK -#define EWOULDBLOCK EAGAIN +#define SOCKET_EWOULDBLOCK SOCKET_EAGAIN #endif #ifndef __WIN__ @@ -327,8 +319,8 @@ int vio_keepalive(Vio* vio, my_bool set_keep_alive) my_bool vio_should_retry(Vio * vio __attribute__((unused))) { - int en = errno; - return en == EAGAIN || en == EINTR || en == EWOULDBLOCK; + int en = socket_errno; + return en == SOCKET_EAGAIN || en == SOCKET_EINTR || en == SOCKET_EWOULDBLOCK; } diff --git a/myisam/myisampack.c b/myisam/myisampack.c index c0c23f28d6c..54a8db457e8 100644 --- a/myisam/myisampack.c +++ b/myisam/myisampack.c @@ -111,21 +111,21 @@ typedef struct st_isam_mrg { uint ref_length; uint max_blob_length; my_off_t records; -} MRG_INFO; +} PACK_MRG_INFO; extern int main(int argc,char * *argv); static void get_options(int *argc,char ***argv); static MI_INFO *open_isam_file(char *name,int mode); -static bool open_isam_files(MRG_INFO *mrg,char **names,uint count); -static int compress(MRG_INFO *file,char *join_name); +static bool open_isam_files(PACK_MRG_INFO *mrg,char **names,uint count); +static int compress(PACK_MRG_INFO *file,char *join_name); static HUFF_COUNTS *init_huff_count(MI_INFO *info,my_off_t records); static void free_counts_and_tree_and_queue(HUFF_TREE *huff_trees, uint trees, HUFF_COUNTS *huff_counts, uint fields); static int compare_tree(const uchar *s,const uchar *t); -static int get_statistic(MRG_INFO *mrg,HUFF_COUNTS *huff_counts); +static int get_statistic(PACK_MRG_INFO *mrg,HUFF_COUNTS *huff_counts); static void check_counts(HUFF_COUNTS *huff_counts,uint trees, my_off_t records); static int test_space_compress(HUFF_COUNTS *huff_counts,my_off_t records, @@ -143,7 +143,7 @@ static int make_huff_decode_table(HUFF_TREE *huff_tree,uint trees); static void make_traverse_code_tree(HUFF_TREE *huff_tree, HUFF_ELEMENT *element,uint size, ulong code); -static int write_header(MRG_INFO *isam_file, uint header_length,uint trees, +static int write_header(PACK_MRG_INFO *isam_file, uint header_length,uint trees, my_off_t tot_elements,my_off_t filelength); static void write_field_info(HUFF_COUNTS *counts, uint fields,uint trees); static my_off_t write_huff_tree(HUFF_TREE *huff_tree,uint trees); @@ -151,7 +151,7 @@ static uint *make_offset_code_tree(HUFF_TREE *huff_tree, HUFF_ELEMENT *element, uint *offset); static uint max_bit(uint value); -static int compress_isam_file(MRG_INFO *file,HUFF_COUNTS *huff_counts); +static int compress_isam_file(PACK_MRG_INFO *file,HUFF_COUNTS *huff_counts); static char *make_new_name(char *new_name,char *old_name); static char *make_old_name(char *new_name,char *old_name); static void init_file_buffer(File file,pbool read_buffer); @@ -159,13 +159,13 @@ static int flush_buffer(ulong neaded_length); static void end_file_buffer(void); static void write_bits(ulong value,uint bits); static void flush_bits(void); -static int save_state(MI_INFO *isam_file,MRG_INFO *mrg,my_off_t new_length, +static int save_state(MI_INFO *isam_file,PACK_MRG_INFO *mrg,my_off_t new_length, ha_checksum crc); -static int save_state_mrg(File file,MRG_INFO *isam_file,my_off_t new_length, +static int save_state_mrg(File file,PACK_MRG_INFO *isam_file,my_off_t new_length, ha_checksum crc); -static int mrg_close(MRG_INFO *mrg); -static int mrg_rrnd(MRG_INFO *info,byte *buf); -static void mrg_reset(MRG_INFO *mrg); +static int mrg_close(PACK_MRG_INFO *mrg); +static int mrg_rrnd(PACK_MRG_INFO *info,byte *buf); +static void mrg_reset(PACK_MRG_INFO *mrg); static int backup=0,error_on_write=0,test_only=0,verbose=0,silent=0, @@ -186,7 +186,7 @@ static const char *load_default_groups[]= { "myisampack",0 }; int main(int argc, char **argv) { int error,ok; - MRG_INFO merge; + PACK_MRG_INFO merge; char **default_argv; MY_INIT(argv[0]); @@ -251,7 +251,7 @@ static struct option long_options[] = static void print_version(void) { - printf("%s Ver 1.10 for %s on %s\n",my_progname,SYSTEM_TYPE,MACHINE_TYPE); + printf("%s Ver 1.11 for %s on %s\n",my_progname,SYSTEM_TYPE,MACHINE_TYPE); } static void usage(void) @@ -403,7 +403,7 @@ static MI_INFO *open_isam_file(char *name,int mode) } -static bool open_isam_files(MRG_INFO *mrg,char **names,uint count) +static bool open_isam_files(PACK_MRG_INFO *mrg,char **names,uint count) { uint i,j; mrg->count=0; @@ -445,7 +445,7 @@ static bool open_isam_files(MRG_INFO *mrg,char **names,uint count) } -static int compress(MRG_INFO *mrg,char *result_table) +static int compress(PACK_MRG_INFO *mrg,char *result_table) { int error; File new_file,join_isam_file; @@ -721,7 +721,7 @@ static void free_counts_and_tree_and_queue(HUFF_TREE *huff_trees, uint trees, /* Read through old file and gather some statistics */ -static int get_statistic(MRG_INFO *mrg,HUFF_COUNTS *huff_counts) +static int get_statistic(PACK_MRG_INFO *mrg,HUFF_COUNTS *huff_counts) { int error; uint length; @@ -983,7 +983,7 @@ static void check_counts(HUFF_COUNTS *huff_counts, uint trees, huff_counts->end_space[huff_counts->field_length]+= huff_counts->empty_fields; } - else + if (huff_counts->tot_pre_space) { huff_counts->tot_pre_space+=length; huff_counts->max_pre_space=huff_counts->field_length; @@ -1461,7 +1461,7 @@ static void make_traverse_code_tree(HUFF_TREE *huff_tree, /* Write header to new packed data file */ -static int write_header(MRG_INFO *mrg,uint head_length,uint trees, +static int write_header(PACK_MRG_INFO *mrg,uint head_length,uint trees, my_off_t tot_elements,my_off_t filelength) { byte *buff=file_buffer.pos; @@ -1639,7 +1639,7 @@ static uint max_bit(register uint value) } -static int compress_isam_file(MRG_INFO *mrg, HUFF_COUNTS *huff_counts) +static int compress_isam_file(PACK_MRG_INFO *mrg, HUFF_COUNTS *huff_counts) { int error; uint i,max_calc_length,pack_ref_length,min_record_length,max_record_length, @@ -2025,7 +2025,7 @@ static void flush_bits (void) ** functions to handle the joined files ****************************************************************************/ -static int save_state(MI_INFO *isam_file,MRG_INFO *mrg,my_off_t new_length, +static int save_state(MI_INFO *isam_file,PACK_MRG_INFO *mrg,my_off_t new_length, ha_checksum crc) { MYISAM_SHARE *share=isam_file->s; @@ -2060,7 +2060,7 @@ static int save_state(MI_INFO *isam_file,MRG_INFO *mrg,my_off_t new_length, } -static int save_state_mrg(File file,MRG_INFO *mrg,my_off_t new_length, +static int save_state_mrg(File file,PACK_MRG_INFO *mrg,my_off_t new_length, ha_checksum crc) { MI_STATE_INFO state; @@ -2090,7 +2090,7 @@ static int save_state_mrg(File file,MRG_INFO *mrg,my_off_t new_length, /* reset for mrg_rrnd */ -static void mrg_reset(MRG_INFO *mrg) +static void mrg_reset(PACK_MRG_INFO *mrg) { if (mrg->current) { @@ -2099,7 +2099,7 @@ static void mrg_reset(MRG_INFO *mrg) } } -static int mrg_rrnd(MRG_INFO *info,byte *buf) +static int mrg_rrnd(PACK_MRG_INFO *info,byte *buf) { int error; MI_INFO *isam_info; @@ -2138,7 +2138,7 @@ static int mrg_rrnd(MRG_INFO *info,byte *buf) } -static int mrg_close(MRG_INFO *mrg) +static int mrg_close(PACK_MRG_INFO *mrg) { uint i; int error=0; diff --git a/myisam/sort.c b/myisam/sort.c index 39874d05640..161a5f92bf5 100644 --- a/myisam/sort.c +++ b/myisam/sort.c @@ -40,10 +40,10 @@ typedef struct st_buffpek { my_off_t file_pos; /* Where we are in the sort file */ - ha_rows count; /* Number of rows in table */ uchar *base,*key; /* Key pointers */ - uint mem_count; /* numbers of keys in memory */ - uint max_keys; /* Max keys in buffert */ + ha_rows count; /* Number of rows in table */ + ulong mem_count; /* numbers of keys in memory */ + ulong max_keys; /* Max keys in buffert */ } BUFFPEK; extern void print_error _VARARGS((const char *fmt,...)); diff --git a/mysys/my_write.c b/mysys/my_write.c index 640043192ef..5d5a48a3dda 100644 --- a/mysys/my_write.c +++ b/mysys/my_write.c @@ -19,45 +19,6 @@ #include "mysys_err.h" #include <errno.h> -#ifdef OS2 - -int _write64( int fd, const void *buffer, unsigned int count) -{ - APIRET rc; - ULONG actual; - - rc = DosWrite( fd, (PVOID) buffer, count, &actual); - - switch (rc) { - case 0: /* NO_ERROR */ - errno = 0; - return( actual); - break; - case ERROR_INVALID_FUNCTION: - errno = EPERM; - break; - case ERROR_ACCESS_DENIED: - errno = EACCESS; - break; - case ERROR_INVALID_HANDLE: - errno = EBADF; - break; - case ERROR_DISK_FULL: - errno = ENOSPC; - break; - default: - errno = EINVAL; - break; - } - // write failed - return(-1); -} - -// redirect call -#define write _write64 - -#endif // OS2 - /* Write a chunk of bytes to a file */ diff --git a/sql/handler.h b/sql/handler.h index ef78f0af39b..4ce743a5edd 100644 --- a/sql/handler.h +++ b/sql/handler.h @@ -77,7 +77,7 @@ #define HA_NO_FULLTEXT_KEY (HA_NO_PREFIX_CHAR_KEYS*2) /* Parameters for open() (in register form->filestat) */ - /* HA_GET_INFO does a implicit HA_ABORT_IF_LOCKED */ + /* HA_GET_INFO does an implicit HA_ABORT_IF_LOCKED */ #define HA_OPEN_KEYFILE 1 #define HA_OPEN_RNDFILE 2 diff --git a/sql/mini_client.cc b/sql/mini_client.cc index fe8a0a161b3..3dfd58375a5 100644 --- a/sql/mini_client.cc +++ b/sql/mini_client.cc @@ -98,16 +98,10 @@ static void mc_free_old_query(MYSQL *mysql); #define CLIENT_CAPABILITIES (CLIENT_LONG_PASSWORD | CLIENT_LONG_FLAG | CLIENT_LOCAL_FILES) #if defined(MSDOS) || defined(__WIN__) -#define ERRNO WSAGetLastError() #define perror(A) -#elif defined(OS2) -#define ERRNO sock_errno() -#define SOCKET_ERROR -1 #else -#include <sys/errno.h> -#define ERRNO errno +#include <errno.h> #define SOCKET_ERROR -1 -#define closesocket(A) close(A) #endif #ifdef __WIN__ @@ -351,7 +345,7 @@ mc_net_safe_read(MYSQL *mysql) { DBUG_PRINT("error",("Wrong connection or packet. fd: %s len: %d", vio_description(net->vio),len)); - if (socket_errno != EINTR) + if (socket_errno != SOCKET_EINTR) { mc_end_server(mysql); if(net->last_errno != ER_NET_PACKET_TOO_LARGE) @@ -544,7 +538,7 @@ mc_mysql_connect(MYSQL *mysql,const char *host, const char *user, if ((sock = socket(AF_UNIX,SOCK_STREAM,0)) == SOCKET_ERROR) { net->last_errno=CR_SOCKET_CREATE_ERROR; - sprintf(net->last_error,ER(net->last_errno),ERRNO); + sprintf(net->last_error,ER(net->last_errno),socket_errno); goto error; } net->vio = vio_new(sock, VIO_TYPE_SOCKET, TRUE); diff --git a/sql/mysqld.cc b/sql/mysqld.cc index b7cd101695a..9aa56ea7fc1 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -1455,10 +1455,6 @@ static int my_message_sql(uint error, const char *str, } #ifdef __WIN__ -#undef errno -#undef EINTR -#define errno WSAGetLastError() -#define EINTR WSAEINTR struct utsname { @@ -1571,18 +1567,26 @@ int main(int argc, char **argv) tzset(); // Set tzname start_time=time((time_t*) 0); +#ifdef OS2 + { + // fix timezone for daylight saving + struct tm *ts = localtime(&start_time); + if (ts->tm_isdst > 0) + _timezone -= 3600; + } +#endif #ifdef HAVE_TZNAME #if defined(HAVE_LOCALTIME_R) && defined(_REENTRANT) { struct tm tm_tmp; localtime_r(&start_time,&tm_tmp); - strmov(time_zone,tzname[tm_tmp.tm_isdst == 1 ? 1 : 0]); + strmov(time_zone,tzname[tm_tmp.tm_isdst != 0 ? 1 : 0]); } #else { struct tm *start_tm; start_tm=localtime(&start_time); - strmov(time_zone,tzname[start_tm->tm_isdst == 1 ? 1 : 0]); + strmov(time_zone,tzname[start_tm->tm_isdst != 0 ? 1 : 0]); } #endif #endif @@ -2263,7 +2267,7 @@ pthread_handler_decl(handle_connections_sockets,arg __attribute__((unused))) #else if (select((int) max_used_connection,&readFDs,0,0,0) < 0) { - if (socket_errno != EINTR) + if (socket_errno != SOCKET_EINTR) { if (!select_errors++ && !abort_loop) /* purecov: inspected */ sql_print_error("mysqld: Got error %d from select",socket_errno); /* purecov: inspected */ @@ -2306,7 +2310,8 @@ pthread_handler_decl(handle_connections_sockets,arg __attribute__((unused))) size_socket length=sizeof(struct sockaddr_in); new_sock = accept(sock, my_reinterpret_cast(struct sockaddr *) (&cAddr), &length); - if (new_sock != INVALID_SOCKET || (errno != EINTR && errno != EAGAIN)) + if (new_sock != INVALID_SOCKET || + (socket_errno != SOCKET_EINTR && socket_errno != SOCKET_EAGAIN)) break; #if !defined(NO_FCNTL_NONBLOCK) if (!(test_flags & TEST_BLOCKING)) @@ -2324,7 +2329,7 @@ pthread_handler_decl(handle_connections_sockets,arg __attribute__((unused))) { if ((error_count++ & 255) == 0) // This can happen often sql_perror("Error in accept"); - if (errno == ENFILE || errno == EMFILE) + if (socket_errno == SOCKET_ENFILE || socket_errno == SOCKET_EMFILE) sleep(1); // Give other threads some time continue; } diff --git a/sql/net_serv.cc b/sql/net_serv.cc index c9bfd977e78..4d4603ed586 100644 --- a/sql/net_serv.cc +++ b/sql/net_serv.cc @@ -277,7 +277,7 @@ net_real_write(NET *net,const char *packet,ulong len) int length; char *pos,*end; thr_alarm_t alarmed; -#if !defined(__WIN__) && !defined(__EMX__) && !defined(OS2) +#if !defined(__WIN__) ALARM alarm_buff; #endif uint retry_count=0; @@ -372,7 +372,7 @@ net_real_write(NET *net,const char *packet,ulong len) #endif /* EXTRA_DEBUG */ } #if defined(THREAD_SAFE_CLIENT) && !defined(MYSQL_SERVER) - if (vio_errno(net->vio) == EINTR) + if (vio_errno(net->vio) == SOCKET_EINTR) { DBUG_PRINT("warning",("Interrupted write. Retrying...")); continue; diff --git a/sql/sql_table.cc b/sql/sql_table.cc index 8f4082c6688..4735e8a08ec 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -182,7 +182,7 @@ int quick_rm_table(enum db_type base,const char *db, } /***************************************************************************** - * Create at table. + * Create a table. * If one creates a temporary table, this is automaticly opened ****************************************************************************/ diff --git a/sql/unireg.cc b/sql/unireg.cc index d02af0ef0d0..c5bfbbbea88 100644 --- a/sql/unireg.cc +++ b/sql/unireg.cc @@ -18,7 +18,7 @@ /* Functions to create a unireg form-file from a FIELD and a fieldname-fieldinfo struct. - In the following functions FIELD * is a ordinary field-structure with + In the following functions FIELD * is an ordinary field-structure with the following exeptions: sc_length,typepos,row,kol,dtype,regnr and field nead not to be set. str is a (long) to record position where 0 is the first position. @@ -502,7 +502,7 @@ static bool pack_fields(File file,List<create_field> &create_fields) } - /* save a empty record on start of formfile */ + /* save an empty record on start of formfile */ static bool make_empty_rec(File file,enum db_type table_type, uint table_options, |