Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
mariadb
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
mariadb
Commits
3ef9d44e
Commit
3ef9d44e
authored
Aug 12, 2002
by
monty@hundin.mysql.fi
Browse files
Options
Browse Files
Download
Plain Diff
merge with 3.23.52
parents
c99c1fd3
d825808a
Changes
36
Hide whitespace changes
Inline
Side-by-side
Showing
36 changed files
with
405 additions
and
206 deletions
+405
-206
Docs/manual.texi
Docs/manual.texi
+4
-1
include/my_no_pthread.h
include/my_no_pthread.h
+1
-1
include/my_sys.h
include/my_sys.h
+7
-8
innobase/include/os0thread.h
innobase/include/os0thread.h
+3
-1
innobase/include/trx0trx.h
innobase/include/trx0trx.h
+8
-1
innobase/include/univ.i
innobase/include/univ.i
+6
-0
innobase/include/ut0ut.h
innobase/include/ut0ut.h
+12
-0
innobase/lock/lock0lock.c
innobase/lock/lock0lock.c
+4
-2
innobase/os/os0thread.c
innobase/os/os0thread.c
+9
-2
innobase/srv/srv0srv.c
innobase/srv/srv0srv.c
+12
-1
innobase/trx/trx0trx.c
innobase/trx/trx0trx.c
+12
-1
innobase/ut/ut0ut.c
innobase/ut/ut0ut.c
+25
-0
libmysql/Makefile.shared
libmysql/Makefile.shared
+1
-1
mysql-test/mysql-test-run.sh
mysql-test/mysql-test-run.sh
+1
-1
mysql-test/t/bigint.test
mysql-test/t/bigint.test
+6
-0
mysql-test/t/func_if.test
mysql-test/t/func_if.test
+4
-0
mysys/Makefile.am
mysys/Makefile.am
+1
-1
mysys/my_gethostbyname.c
mysys/my_gethostbyname.c
+0
-3
mysys/my_init.c
mysys/my_init.c
+0
-3
mysys/my_net.c
mysys/my_net.c
+0
-5
mysys/my_os2cond.c
mysys/my_os2cond.c
+12
-12
mysys/my_os2dirsrch.c
mysys/my_os2dirsrch.c
+33
-33
mysys/my_os2dirsrch.h
mysys/my_os2dirsrch.h
+10
-10
mysys/my_os2dlfcn.c
mysys/my_os2dlfcn.c
+2
-2
mysys/my_os2file64.c
mysys/my_os2file64.c
+72
-72
mysys/my_os2mutex.c
mysys/my_os2mutex.c
+4
-4
mysys/my_os2thread.c
mysys/my_os2thread.c
+3
-3
mysys/my_os2tls.c
mysys/my_os2tls.c
+22
-22
mysys/my_port.c
mysys/my_port.c
+40
-0
mysys/mysys_priv.h
mysys/mysys_priv.h
+3
-3
mysys/thr_rwlock.c
mysys/thr_rwlock.c
+0
-1
sql/ha_innodb.cc
sql/ha_innodb.cc
+62
-3
sql/ha_innodb.h
sql/ha_innodb.h
+1
-0
sql/item_cmpfunc.cc
sql/item_cmpfunc.cc
+3
-3
sql/mysqld.cc
sql/mysqld.cc
+21
-5
sql/sql_insert.cc
sql/sql_insert.cc
+1
-1
No files found.
Docs/manual.texi
View file @
3ef9d44e
...
@@ -50881,7 +50881,10 @@ not yet 100% confident in this code.
...
@@ -50881,7 +50881,10 @@ not yet 100% confident in this code.
@appendixsubsec Changes in release 3.23.52
@appendixsubsec Changes in release 3.23.52
@itemize @bullet
@itemize @bullet
@item
@item
Fixed a security bug with empty db column in db table
Fixed problem with @code{UNSIGNED BIGINT} on AIX.
@item
Fixed security bug when having an empty databasename in the @code{user.db}
table.
@item
@item
Changed initialisation of @code{RND()} to make it less predicatable.
Changed initialisation of @code{RND()} to make it less predicatable.
@item
@item
include/my_no_pthread.h
View file @
3ef9d44e
...
@@ -20,7 +20,7 @@
...
@@ -20,7 +20,7 @@
environment, easier to use.
environment, easier to use.
*/
*/
#if !defined(_my_no_pthread_h) && !defined(THREAD
S
)
#if !defined(_my_no_pthread_h) && !defined(THREAD)
#define _my_no_pthread_h
#define _my_no_pthread_h
#define pthread_mutex_init(A,B)
#define pthread_mutex_init(A,B)
...
...
include/my_sys.h
View file @
3ef9d44e
...
@@ -158,22 +158,21 @@ extern my_string my_strdup(const char *from,myf MyFlags);
...
@@ -158,22 +158,21 @@ extern my_string my_strdup(const char *from,myf MyFlags);
#define CALLER_INFO
/* nothing */
#define CALLER_INFO
/* nothing */
#define ORIG_CALLER_INFO
/* nothing */
#define ORIG_CALLER_INFO
/* nothing */
#endif
#endif
#ifdef HAVE_ALLOCA
#ifdef HAVE_ALLOCA
#ifdef __GNUC__
#if defined(_AIX) && !defined(__GNUC__)
/* Remove any previous definitions. */
#pragma alloca
#undef alloca
#define alloca(size) __builtin_alloca (size)
#else
/* xlc */
#ifdef _AIX
#pragma alloca
#endif
/* _AIX */
#endif
/* _AIX */
#endif
/* __GNUC__ */
#if defined(__GNUC__) && !defined(HAVE_ALLOCA_H)
#define alloca __builtin_alloca
#endif
/* GNUC */
#define my_alloca(SZ) alloca((size_t) (SZ))
#define my_alloca(SZ) alloca((size_t) (SZ))
#define my_afree(PTR) {}
#define my_afree(PTR) {}
#else
#else
#define my_alloca(SZ) my_malloc(SZ,MYF(0))
#define my_alloca(SZ) my_malloc(SZ,MYF(0))
#define my_afree(PTR) my_free(PTR,MYF(MY_WME))
#define my_afree(PTR) my_free(PTR,MYF(MY_WME))
#endif
/* HAVE_ALLOCA */
#endif
/* HAVE_ALLOCA */
#ifdef MSDOS
#ifdef MSDOS
#ifdef __ZTC__
#ifdef __ZTC__
void
*
__CDECL
halloc
(
long
count
,
size_t
length
);
void
*
__CDECL
halloc
(
long
count
,
size_t
length
);
...
...
innobase/include/os0thread.h
View file @
3ef9d44e
...
@@ -70,7 +70,9 @@ os_thread_create(
...
@@ -70,7 +70,9 @@ os_thread_create(
void
*
arg
,
/* in: argument to start
void
*
arg
,
/* in: argument to start
function */
function */
os_thread_id_t
*
thread_id
);
/* out: id of created
os_thread_id_t
*
thread_id
);
/* out: id of created
thread */
thread; currently this is
identical to the handle to
the thread */
/*********************************************************************
/*********************************************************************
A thread calling this function ends its execution. */
A thread calling this function ends its execution. */
...
...
innobase/include/trx0trx.h
View file @
3ef9d44e
...
@@ -117,6 +117,13 @@ void
...
@@ -117,6 +117,13 @@ void
trx_start_if_not_started
(
trx_start_if_not_started
(
/*=====================*/
/*=====================*/
trx_t
*
trx
);
/* in: transaction */
trx_t
*
trx
);
/* in: transaction */
/*****************************************************************
Starts the transaction if it is not yet started. */
void
trx_start_if_not_started_noninline
(
/*===============================*/
trx_t
*
trx
);
/* in: transaction */
/********************************************************************
/********************************************************************
Commits a transaction. */
Commits a transaction. */
...
@@ -262,7 +269,7 @@ void
...
@@ -262,7 +269,7 @@ void
trx_print
(
trx_print
(
/*======*/
/*======*/
char
*
buf
,
/* in/out: buffer where to print, must be at least
char
*
buf
,
/* in/out: buffer where to print, must be at least
5
00 bytes */
8
00 bytes */
trx_t
*
trx
);
/* in: transaction */
trx_t
*
trx
);
/* in: transaction */
...
...
innobase/include/univ.i
View file @
3ef9d44e
...
@@ -63,6 +63,12 @@ Microsoft Visual C++ */
...
@@ -63,6 +63,12 @@ Microsoft Visual C++ */
#
define
HAVE_PWRITE
#
define
HAVE_PWRITE
#
endif
#
endif
/* Apparently in some old SCO Unixes the return type of sprintf is not
an integer as it should be according to the modern Posix standard. Because
of that we define sprintf inside InnoDB code as our own function ut_sprintf */
#
undef
sprintf
#
define
sprintf
ut_sprintf
#
endif
#
endif
/* DEBUG VERSION CONTROL
/* DEBUG VERSION CONTROL
...
...
innobase/include/ut0ut.h
View file @
3ef9d44e
...
@@ -17,6 +17,18 @@ Created 1/20/1994 Heikki Tuuri
...
@@ -17,6 +17,18 @@ Created 1/20/1994 Heikki Tuuri
typedef
time_t
ib_time_t
;
typedef
time_t
ib_time_t
;
/************************************************************
Uses vsprintf to emulate sprintf so that the function always returns
the printed length. Apparently in some old SCO Unixes sprintf did not
return the printed length but a pointer to the end of the printed string. */
ulint
ut_sprintf
(
/*=======*/
char
*
buf
,
/* in/out: buffer where to print */
const
char
*
format
,
/* in: format of prints */
...);
/* in: arguments to be printed */
/************************************************************
/************************************************************
Gets the high 32 bits in a ulint. That is makes a shift >> 32,
Gets the high 32 bits in a ulint. That is makes a shift >> 32,
but since there seem to be compiler bugs in both gcc and Visual C++,
but since there seem to be compiler bugs in both gcc and Visual C++,
...
...
innobase/lock/lock0lock.c
View file @
3ef9d44e
...
@@ -2755,6 +2755,8 @@ lock_deadlock_occurs(
...
@@ -2755,6 +2755,8 @@ lock_deadlock_occurs(
err_buf
+=
sprintf
(
err_buf
,
err_buf
+=
sprintf
(
err_buf
,
"*** WE ROLL BACK TRANSACTION (2)
\n
"
);
"*** WE ROLL BACK TRANSACTION (2)
\n
"
);
ut_a
(
strlen
(
lock_latest_err_buf
)
<
4100
);
/*
/*
sess_raise_error_low(trx, DB_DEADLOCK, lock->type_mode, table,
sess_raise_error_low(trx, DB_DEADLOCK, lock->type_mode, table,
index, NULL, NULL, NULL);
index, NULL, NULL, NULL);
...
@@ -3626,7 +3628,7 @@ lock_print_info(
...
@@ -3626,7 +3628,7 @@ lock_print_info(
trx
=
UT_LIST_GET_FIRST
(
trx_sys
->
mysql_trx_list
);
trx
=
UT_LIST_GET_FIRST
(
trx_sys
->
mysql_trx_list
);
while
(
trx
)
{
while
(
trx
)
{
if
(
buf_end
-
buf
<
6
00
)
{
if
(
buf_end
-
buf
<
9
00
)
{
return
;
return
;
}
}
...
@@ -3663,7 +3665,7 @@ loop:
...
@@ -3663,7 +3665,7 @@ loop:
return
;
return
;
}
}
if
(
buf_end
-
buf
<
6
00
)
{
if
(
buf_end
-
buf
<
9
00
)
{
return
;
return
;
}
}
...
...
innobase/os/os0thread.c
View file @
3ef9d44e
...
@@ -97,17 +97,20 @@ os_thread_create(
...
@@ -97,17 +97,20 @@ os_thread_create(
function */
function */
os_thread_id_t
*
thread_id
__attribute__
((
unused
)))
os_thread_id_t
*
thread_id
__attribute__
((
unused
)))
/* out: id of created
/* out: id of created
thread */
thread; currently this is
identical to the handle to
the thread */
{
{
#ifdef __WIN__
#ifdef __WIN__
os_thread_t
thread
;
os_thread_t
thread
;
ulint
win_thread_id
;
thread
=
CreateThread
(
NULL
,
/* no security attributes */
thread
=
CreateThread
(
NULL
,
/* no security attributes */
0
,
/* default size stack */
0
,
/* default size stack */
(
LPTHREAD_START_ROUTINE
)
start_f
,
(
LPTHREAD_START_ROUTINE
)
start_f
,
arg
,
arg
,
0
,
/* thread runs immediately */
0
,
/* thread runs immediately */
thread_id
);
&
win_
thread_id
);
if
(
srv_set_thread_priorities
)
{
if
(
srv_set_thread_priorities
)
{
...
@@ -118,6 +121,8 @@ os_thread_create(
...
@@ -118,6 +121,8 @@ os_thread_create(
ut_a
(
SetThreadPriority
(
thread
,
srv_query_thread_priority
));
ut_a
(
SetThreadPriority
(
thread
,
srv_query_thread_priority
));
}
}
*
thread_id
=
thread
;
return
(
thread
);
return
(
thread
);
#else
#else
int
ret
;
int
ret
;
...
@@ -135,6 +140,8 @@ os_thread_create(
...
@@ -135,6 +140,8 @@ os_thread_create(
my_pthread_setprio
(
pthread
,
srv_query_thread_priority
);
my_pthread_setprio
(
pthread
,
srv_query_thread_priority
);
}
}
*
thread_id
=
pthread
;
return
(
pthread
);
return
(
pthread
);
#endif
#endif
}
}
...
...
innobase/srv/srv0srv.c
View file @
3ef9d44e
...
@@ -2228,6 +2228,7 @@ srv_sprintf_innodb_monitor(
...
@@ -2228,6 +2228,7 @@ srv_sprintf_innodb_monitor(
ut_sprintf_timestamp
(
buf
);
ut_sprintf_timestamp
(
buf
);
buf
=
buf
+
strlen
(
buf
);
buf
=
buf
+
strlen
(
buf
);
ut_a
(
buf
<
buf_end
+
1500
);
buf
+=
sprintf
(
buf
,
" INNODB MONITOR OUTPUT
\n
"
buf
+=
sprintf
(
buf
,
" INNODB MONITOR OUTPUT
\n
"
"=====================================
\n
"
);
"=====================================
\n
"
);
...
@@ -2242,6 +2243,7 @@ srv_sprintf_innodb_monitor(
...
@@ -2242,6 +2243,7 @@ srv_sprintf_innodb_monitor(
sync_print
(
buf
,
buf_end
);
sync_print
(
buf
,
buf_end
);
buf
=
buf
+
strlen
(
buf
);
buf
=
buf
+
strlen
(
buf
);
ut_a
(
buf
<
buf_end
+
1500
);
buf
+=
sprintf
(
buf
,
"------------
\n
"
buf
+=
sprintf
(
buf
,
"------------
\n
"
"TRANSACTIONS
\n
"
"TRANSACTIONS
\n
"
...
@@ -2254,15 +2256,18 @@ srv_sprintf_innodb_monitor(
...
@@ -2254,15 +2256,18 @@ srv_sprintf_innodb_monitor(
"--------
\n
"
);
"--------
\n
"
);
os_aio_print
(
buf
,
buf_end
);
os_aio_print
(
buf
,
buf_end
);
buf
=
buf
+
strlen
(
buf
);
buf
=
buf
+
strlen
(
buf
);
ut_a
(
buf
<
buf_end
+
1500
);
buf
+=
sprintf
(
buf
,
"-------------------------------------
\n
"
buf
+=
sprintf
(
buf
,
"-------------------------------------
\n
"
"INSERT BUFFER AND ADAPTIVE HASH INDEX
\n
"
"INSERT BUFFER AND ADAPTIVE HASH INDEX
\n
"
"-------------------------------------
\n
"
);
"-------------------------------------
\n
"
);
ibuf_print
(
buf
,
buf_end
);
ibuf_print
(
buf
,
buf_end
);
buf
=
buf
+
strlen
(
buf
);
buf
=
buf
+
strlen
(
buf
);
ut_a
(
buf
<
buf_end
+
1500
);
ha_print_info
(
buf
,
buf_end
,
btr_search_sys
->
hash_index
);
ha_print_info
(
buf
,
buf_end
,
btr_search_sys
->
hash_index
);
buf
=
buf
+
strlen
(
buf
);
buf
=
buf
+
strlen
(
buf
);
ut_a
(
buf
<
buf_end
+
1500
);
buf
+=
sprintf
(
buf
,
buf
+=
sprintf
(
buf
,
"%.2f hash searches/s, %.2f non-hash searches/s
\n
"
,
"%.2f hash searches/s, %.2f non-hash searches/s
\n
"
,
...
@@ -2278,6 +2283,7 @@ srv_sprintf_innodb_monitor(
...
@@ -2278,6 +2283,7 @@ srv_sprintf_innodb_monitor(
"---
\n
"
);
"---
\n
"
);
log_print
(
buf
,
buf_end
);
log_print
(
buf
,
buf_end
);
buf
=
buf
+
strlen
(
buf
);
buf
=
buf
+
strlen
(
buf
);
ut_a
(
buf
<
buf_end
+
1500
);
buf
+=
sprintf
(
buf
,
"----------------------
\n
"
buf
+=
sprintf
(
buf
,
"----------------------
\n
"
"BUFFER POOL AND MEMORY
\n
"
"BUFFER POOL AND MEMORY
\n
"
...
@@ -2288,6 +2294,7 @@ srv_sprintf_innodb_monitor(
...
@@ -2288,6 +2294,7 @@ srv_sprintf_innodb_monitor(
mem_pool_get_reserved
(
mem_comm_pool
));
mem_pool_get_reserved
(
mem_comm_pool
));
buf_print_io
(
buf
,
buf_end
);
buf_print_io
(
buf
,
buf_end
);
buf
=
buf
+
strlen
(
buf
);
buf
=
buf
+
strlen
(
buf
);
ut_a
(
buf
<
buf_end
+
1500
);
buf
+=
sprintf
(
buf
,
"--------------
\n
"
buf
+=
sprintf
(
buf
,
"--------------
\n
"
"ROW OPERATIONS
\n
"
"ROW OPERATIONS
\n
"
...
@@ -2321,6 +2328,8 @@ srv_sprintf_innodb_monitor(
...
@@ -2321,6 +2328,8 @@ srv_sprintf_innodb_monitor(
buf
+=
sprintf
(
buf
,
"----------------------------
\n
"
buf
+=
sprintf
(
buf
,
"----------------------------
\n
"
"END OF INNODB MONITOR OUTPUT
\n
"
"END OF INNODB MONITOR OUTPUT
\n
"
"============================
\n
"
);
"============================
\n
"
);
ut_a
(
buf
<
buf_end
+
1900
);
mutex_exit
(
&
srv_innodb_monitor_mutex
);
mutex_exit
(
&
srv_innodb_monitor_mutex
);
}
}
...
@@ -2378,7 +2387,9 @@ loop:
...
@@ -2378,7 +2387,9 @@ loop:
buf
=
mem_alloc
(
100000
);
buf
=
mem_alloc
(
100000
);
srv_sprintf_innodb_monitor
(
buf
,
100000
);
srv_sprintf_innodb_monitor
(
buf
,
90000
);
ut_a
(
strlen
(
buf
)
<
99000
);
printf
(
"%s"
,
buf
);
printf
(
"%s"
,
buf
);
...
...
innobase/trx/trx0trx.c
View file @
3ef9d44e
...
@@ -39,6 +39,17 @@ sess_t* trx_dummy_sess = NULL;
...
@@ -39,6 +39,17 @@ sess_t* trx_dummy_sess = NULL;
the kernel mutex */
the kernel mutex */
ulint
trx_n_mysql_transactions
=
0
;
ulint
trx_n_mysql_transactions
=
0
;
/*****************************************************************
Starts the transaction if it is not yet started. */
void
trx_start_if_not_started_noninline
(
/*===============================*/
trx_t
*
trx
)
/* in: transaction */
{
trx_start_if_not_started
(
trx
);
}
/********************************************************************
/********************************************************************
Retrieves the error_info field from a trx. */
Retrieves the error_info field from a trx. */
...
@@ -1465,7 +1476,7 @@ void
...
@@ -1465,7 +1476,7 @@ void
trx_print
(
trx_print
(
/*======*/
/*======*/
char
*
buf
,
/* in/out: buffer where to print, must be at least
char
*
buf
,
/* in/out: buffer where to print, must be at least
5
00 bytes */
8
00 bytes */
trx_t
*
trx
)
/* in: transaction */
trx_t
*
trx
)
/* in: transaction */
{
{
char
*
start_of_line
;
char
*
start_of_line
;
...
...
innobase/ut/ut0ut.c
View file @
3ef9d44e
...
@@ -12,10 +12,35 @@ Created 5/11/1994 Heikki Tuuri
...
@@ -12,10 +12,35 @@ Created 5/11/1994 Heikki Tuuri
#include "ut0ut.ic"
#include "ut0ut.ic"
#endif
#endif
#include <stdarg.h>
#include "ut0sort.h"
#include "ut0sort.h"
ibool
ut_always_false
=
FALSE
;
ibool
ut_always_false
=
FALSE
;
/************************************************************
Uses vsprintf to emulate sprintf so that the function always returns
the printed length. Apparently in some old SCO Unixes sprintf did not
return the printed length but a pointer to the end of the printed string. */
ulint
ut_sprintf
(
/*=======*/
char
*
buf
,
/* in/out: buffer where to print */
const
char
*
format
,
/* in: format of prints */
...)
/* in: arguments to be printed */
{
va_list
args
;
va_start
(
args
,
format
);
vsprintf
(
buf
,
format
,
args
);
va_end
(
args
);
return
((
ulint
)
strlen
(
buf
));
}
/************************************************************
/************************************************************
Gets the high 32 bits in a ulint. That is makes a shift >> 32,
Gets the high 32 bits in a ulint. That is makes a shift >> 32,
but since there seem to be compiler bugs in both gcc and Visual C++,
but since there seem to be compiler bugs in both gcc and Visual C++,
...
...
libmysql/Makefile.shared
View file @
3ef9d44e
...
@@ -60,7 +60,7 @@ mysysobjects1 = my_init.lo my_static.lo my_malloc.lo my_realloc.lo \
...
@@ -60,7 +60,7 @@ mysysobjects1 = my_init.lo my_static.lo my_malloc.lo my_realloc.lo \
charset.lo hash.lo mf_iocache.lo
\
charset.lo hash.lo mf_iocache.lo
\
mf_iocache2.lo my_seek.lo
\
mf_iocache2.lo my_seek.lo
\
my_pread.lo mf_cache.lo my_vsnprintf.lo md5.lo
\
my_pread.lo mf_cache.lo my_vsnprintf.lo md5.lo
\
my_getopt.lo my_gethostbyname.lo
my_getopt.lo my_gethostbyname.lo
my_port.lo
sqlobjects
=
net.lo
sqlobjects
=
net.lo
# Not needed in the minimum library
# Not needed in the minimum library
...
...
mysql-test/mysql-test-run.sh
View file @
3ef9d44e
...
@@ -19,7 +19,7 @@ TZ=GMT-3; export TZ # for UNIX_TIMESTAMP tests to work
...
@@ -19,7 +19,7 @@ TZ=GMT-3; export TZ # for UNIX_TIMESTAMP tests to work
# Program Definitions
# Program Definitions
#--
#--
PATH
=
/bin:/usr/bin:/usr/local/bin:/usr/bsd:/usr/X11R6/bin:/usr/openwin/bin
PATH
=
/bin:/usr/bin:/usr/local/bin:/usr/bsd:/usr/X11R6/bin:/usr/openwin/bin
:/usr/bin/X11
MASTER_40_ARGS
=
"--rpl-recovery-rank=1 --init-rpl-role=master"
MASTER_40_ARGS
=
"--rpl-recovery-rank=1 --init-rpl-role=master"
# Standard functions
# Standard functions
...
...
mysql-test/t/bigint.test
View file @
3ef9d44e
...
@@ -5,6 +5,12 @@ select 0,256,00000000000000065536,2147483647,-2147483648,2147483648,+4294967296;
...
@@ -5,6 +5,12 @@ select 0,256,00000000000000065536,2147483647,-2147483648,2147483648,+4294967296;
select
9223372036854775807
,
-
00
9223372036854775808
;
select
9223372036854775807
,
-
00
9223372036854775808
;
select
+
9999999999999999999
,
-
9999999999999999999
;
select
+
9999999999999999999
,
-
9999999999999999999
;
#
# In 3.23 we have to disable the test of column to bigint as
# this fails on AIX powerpc (the resolution for double is not good enough)
# This will work on 4.0 as we then have internal handling of bigint variables.
#
drop
table
if
exists
t1
;
drop
table
if
exists
t1
;
create
table
t1
(
a
bigint
unsigned
not
null
,
primary
key
(
a
));
create
table
t1
(
a
bigint
unsigned
not
null
,
primary
key
(
a
));
insert
into
t1
values
(
18446744073709551615
),
(
0xFFFFFFFFFFFFFFFE
);
insert
into
t1
values
(
18446744073709551615
),
(
0xFFFFFFFFFFFFFFFE
);
...
...
mysql-test/t/func_if.test
View file @
3ef9d44e
...
@@ -28,3 +28,7 @@ create table t1 (num double(12,2));
...
@@ -28,3 +28,7 @@ create table t1 (num double(12,2));
insert
into
t1
values
(
144.54
);
insert
into
t1
values
(
144.54
);
select
sum
(
if
(
num
is
null
,
0.00
,
num
))
from
t1
;
select
sum
(
if
(
num
is
null
,
0.00
,
num
))
from
t1
;
drop
table
t1
;
drop
table
t1
;
create
table
t1
(
x
int
,
y
int
);
insert
into
t1
values
(
0
,
6
),(
10
,
16
),(
20
,
26
),(
30
,
10
),(
40
,
46
),(
50
,
56
);
select
min
(
if
(
y
-
x
>
5
,
y
,
NULL
)),
max
(
if
(
y
-
x
>
5
,
y
,
NULL
))
from
t1
;
drop
table
t1
;
mysys/Makefile.am
View file @
3ef9d44e
...
@@ -49,7 +49,7 @@ libmysys_a_SOURCES = my_init.c my_getwd.c mf_getdate.c\
...
@@ -49,7 +49,7 @@ libmysys_a_SOURCES = my_init.c my_getwd.c mf_getdate.c\
my_quick.c my_lockmem.c my_static.c
\
my_quick.c my_lockmem.c my_static.c
\
my_getopt.c my_mkdir.c
\
my_getopt.c my_mkdir.c
\
default.c my_compress.c checksum.c raid.cc
\
default.c my_compress.c checksum.c raid.cc
\
my_net.c my_semaphore.c
\
my_net.c my_semaphore.c
my_port.c
\
my_vsnprintf.c charset.c my_bitmap.c my_bit.c md5.c
\
my_vsnprintf.c charset.c my_bitmap.c my_bit.c md5.c
\
my_gethostbyname.c rijndael.c my_aes.c sha1.c
my_gethostbyname.c rijndael.c my_aes.c sha1.c
EXTRA_DIST
=
thr_alarm.c thr_lock.c my_pthread.c my_thr_init.c
\
EXTRA_DIST
=
thr_alarm.c thr_lock.c my_pthread.c my_thr_init.c
\
...
...
mysys/my_gethostbyname.c
View file @
3ef9d44e
...
@@ -18,9 +18,6 @@
...
@@ -18,9 +18,6 @@
/* Thread safe version of gethostbyname_r() */
/* Thread safe version of gethostbyname_r() */
#include "mysys_priv.h"
#include "mysys_priv.h"
#ifdef THREAD
#include "my_pthread.h"
#endif
#include <assert.h>
#include <assert.h>
#if !defined(MSDOS) && !defined(__WIN__)
#if !defined(MSDOS) && !defined(__WIN__)
#include <netdb.h>
#include <netdb.h>
...
...
mysys/my_init.c
View file @
3ef9d44e
...
@@ -20,9 +20,6 @@
...
@@ -20,9 +20,6 @@
#include "m_ctype.h"
#include "m_ctype.h"
#include <m_string.h>
#include <m_string.h>
#include <m_ctype.h>
#include <m_ctype.h>
#ifdef THREAD
#include <my_pthread.h>
#endif
#ifdef HAVE_GETRUSAGE
#ifdef HAVE_GETRUSAGE
#include <sys/resource.h>
#include <sys/resource.h>
/* extern int getrusage(int, struct rusage *); */
/* extern int getrusage(int, struct rusage *); */
...
...
mysys/my_net.c
View file @
3ef9d44e
...
@@ -33,11 +33,6 @@
...
@@ -33,11 +33,6 @@
#endif
#endif
#endif
/* !defined(MSDOS) && !defined(__WIN__) */
#endif
/* !defined(MSDOS) && !defined(__WIN__) */
#ifndef THREAD
#define pthread_mutex_lock(A)
#define pthread_mutex_unlock(A)
#endif
void
my_inet_ntoa
(
struct
in_addr
in
,
char
*
buf
)
void
my_inet_ntoa
(
struct
in_addr
in
,
char
*
buf
)
{
{
char
*
ptr
;
char
*
ptr
;
...
...
mysys/my_os2cond.c
View file @
3ef9d44e
...
@@ -32,8 +32,8 @@
...
@@ -32,8 +32,8 @@
int
pthread_cond_init
(
pthread_cond_t
*
cond
,
const
pthread_condattr_t
*
attr
)
int
pthread_cond_init
(
pthread_cond_t
*
cond
,
const
pthread_condattr_t
*
attr
)
{
{
APIRET
rc
=
0
;
APIRET
rc
=
0
;
HEV
event
;
HEV
event
;
cond
->
waiting
=
0
;
cond
->
waiting
=
0
;
/* Warp3 FP29 or Warp4 FP4 or better required */
/* Warp3 FP29 or Warp4 FP4 or better required */
rc
=
DosCreateEventSem
(
NULL
,
&
cond
->
semaphore
,
0x0800
,
0
);
rc
=
DosCreateEventSem
(
NULL
,
&
cond
->
semaphore
,
0x0800
,
0
);
...
@@ -61,7 +61,7 @@ int pthread_cond_destroy(pthread_cond_t *cond)
...
@@ -61,7 +61,7 @@ int pthread_cond_destroy(pthread_cond_t *cond)
int
pthread_cond_wait
(
pthread_cond_t
*
cond
,
pthread_mutex_t
*
mutex
)
int
pthread_cond_wait
(
pthread_cond_t
*
cond
,
pthread_mutex_t
*
mutex
)
{
{
APIRET
rc
;
APIRET
rc
;
int
rval
;
int
rval
;
rval
=
0
;
rval
=
0
;
cond
->
waiting
++
;
cond
->
waiting
++
;
...
@@ -80,13 +80,13 @@ int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex)
...
@@ -80,13 +80,13 @@ int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex)
}
}
int
pthread_cond_timedwait
(
pthread_cond_t
*
cond
,
pthread_mutex_t
*
mutex
,
int
pthread_cond_timedwait
(
pthread_cond_t
*
cond
,
pthread_mutex_t
*
mutex
,
struct
timespec
*
abstime
)
struct
timespec
*
abstime
)
{
{
struct
timeb
curtime
;
struct
timeb
curtime
;
int
result
;
int
result
;
long
timeout
;
long
timeout
;
APIRET
rc
;
APIRET
rc
;
int
rval
;
int
rval
;
_ftime
(
&
curtime
);
_ftime
(
&
curtime
);
timeout
=
((
long
)
(
abstime
->
ts_sec
-
curtime
.
time
)
*
1000L
+
timeout
=
((
long
)
(
abstime
->
ts_sec
-
curtime
.
time
)
*
1000L
+
...
@@ -123,13 +123,13 @@ int pthread_cond_signal(pthread_cond_t *cond)
...
@@ -123,13 +123,13 @@ int pthread_cond_signal(pthread_cond_t *cond)
int
pthread_cond_broadcast
(
pthread_cond_t
*
cond
)
int
pthread_cond_broadcast
(
pthread_cond_t
*
cond
)
{
{
int
i
;
int
i
;
APIRET
rc
;
APIRET
rc
;
/*
/*
* Enter a loop to bring all threads off the
* Enter a loop to bring all threads off the
* condition queue:
* condition queue:
*/
*/
i
=
cond
->
waiting
;
i
=
cond
->
waiting
;
while
(
i
--
)
rc
=
DosPostEventSem
(
cond
->
semaphore
);
while
(
i
--
)
rc
=
DosPostEventSem
(
cond
->
semaphore
);
...
@@ -176,9 +176,9 @@ struct tm *localtime_r(const time_t *timep,struct tm *tmp)
...
@@ -176,9 +176,9 @@ struct tm *localtime_r(const time_t *timep,struct tm *tmp)
else
else
{
{
struct
tm
*
res
=
localtime
(
timep
);
struct
tm
*
res
=
localtime
(
timep
);
if
(
!
res
)
/* Wrong date */
if
(
!
res
)
/* Wrong date */
{
{
bzero
(
tmp
,
sizeof
(
*
tmp
));
/* Keep things safe */
bzero
(
tmp
,
sizeof
(
*
tmp
));
/* Keep things safe */
return
0
;
return
0
;
}
}
*
tmp
=
*
res
;
*
tmp
=
*
res
;
...
...
mysys/my_os2dirsrch.c
View file @
3ef9d44e
...
@@ -26,10 +26,10 @@
...
@@ -26,10 +26,10 @@
long
_findfirst
(
char
*
path
,
struct
_finddata_t
*
dos_file
)
long
_findfirst
(
char
*
path
,
struct
_finddata_t
*
dos_file
)
{
{
HDIR
hdir
=
HDIR_CREATE
;
HDIR
hdir
=
HDIR_CREATE
;
APIRET
rc
;
APIRET
rc
;
FILEFINDBUF3
buf3
;
FILEFINDBUF3
buf3
;
ULONG
entries
=
1
;
ULONG
entries
=
1
;
#ifdef _DEBUG
#ifdef _DEBUG
printf
(
"_findfirst path %s
\n
"
,
path
);
printf
(
"_findfirst path %s
\n
"
,
path
);
...
@@ -37,13 +37,13 @@ long _findfirst( char* path, struct _finddata_t* dos_file)
...
@@ -37,13 +37,13 @@ long _findfirst( char* path, struct _finddata_t* dos_file)
memset
(
&
buf3
,
0
,
sizeof
(
buf3
));
memset
(
&
buf3
,
0
,
sizeof
(
buf3
));
rc
=
DosFindFirst
(
rc
=
DosFindFirst
(
path
,
/* Address of the ASCIIZ path name of the file or subdirectory to be found. */
path
,
/* Address of the ASCIIZ path name of the file or subdirectory to be found. */
&
hdir
,
/* Address of the handle associated with this DosFindFirst request. */
&
hdir
,
/* Address of the handle associated with this DosFindFirst request. */
FILE_NORMAL
|
FILE_DIRECTORY
,
/* Attribute value that determines the file objects to be searched for. */
FILE_NORMAL
|
FILE_DIRECTORY
,
/* Attribute value that determines the file objects to be searched for. */
&
buf3
,
/* Result buffer. */
&
buf3
,
/* Result buffer. */
sizeof
(
buf3
),
/* The length, in bytes, of pfindbuf. */
sizeof
(
buf3
),
/* The length, in bytes, of pfindbuf. */
&
entries
,
/* Pointer to the number of entries: */
&
entries
,
/* Pointer to the number of entries: */
FIL_STANDARD
);
/* The level of file information required. */
FIL_STANDARD
);
/* The level of file information required. */
#ifdef _DEBUG
#ifdef _DEBUG
printf
(
"_findfirst rc=%d hdir=%d entries=%d->%s
\n
"
,
rc
,
hdir
,
entries
,
buf3
.
achName
);
printf
(
"_findfirst rc=%d hdir=%d entries=%d->%s
\n
"
,
rc
,
hdir
,
entries
,
buf3
.
achName
);
...
@@ -64,16 +64,16 @@ long _findfirst( char* path, struct _finddata_t* dos_file)
...
@@ -64,16 +64,16 @@ long _findfirst( char* path, struct _finddata_t* dos_file)
long
_findnext
(
long
hdir
,
struct
_finddata_t
*
dos_file
)
long
_findnext
(
long
hdir
,
struct
_finddata_t
*
dos_file
)
{
{
APIRET
rc
;
APIRET
rc
;
FILEFINDBUF3
buf3
;
FILEFINDBUF3
buf3
;
ULONG
entries
=
1
;
ULONG
entries
=
1
;
memset
(
&
buf3
,
0
,
sizeof
(
buf3
));
memset
(
&
buf3
,
0
,
sizeof
(
buf3
));
rc
=
DosFindNext
(
rc
=
DosFindNext
(
hdir
,
hdir
,
&
buf3
,
/* Result buffer. */
&
buf3
,
/* Result buffer. */
sizeof
(
buf3
),
/* The length, in bytes, of pfindbuf. */
sizeof
(
buf3
),
/* The length, in bytes, of pfindbuf. */
&
entries
);
/* Pointer to the number of entries: */
&
entries
);
/* Pointer to the number of entries: */
#ifdef _DEBUG
#ifdef _DEBUG
printf
(
"_findnext rc=%d hdir=%d entries=%d->%s
\n
"
,
rc
,
hdir
,
entries
,
buf3
.
achName
);
printf
(
"_findnext rc=%d hdir=%d entries=%d->%s
\n
"
,
rc
,
hdir
,
entries
,
buf3
.
achName
);
...
@@ -93,7 +93,7 @@ long _findnext( long hdir, struct _finddata_t* dos_file)
...
@@ -93,7 +93,7 @@ long _findnext( long hdir, struct _finddata_t* dos_file)
void
_findclose
(
long
hdir
)
void
_findclose
(
long
hdir
)
{
{
APIRET
rc
;
APIRET
rc
;
rc
=
DosFindClose
(
hdir
);
rc
=
DosFindClose
(
hdir
);
#ifdef _DEBUG
#ifdef _DEBUG
...
@@ -105,8 +105,8 @@ DIR* opendir( char* path)
...
@@ -105,8 +105,8 @@ DIR* opendir( char* path)
{
{
DIR
*
dir
=
(
DIR
*
)
calloc
(
1
,
sizeof
(
DIR
));
DIR
*
dir
=
(
DIR
*
)
calloc
(
1
,
sizeof
(
DIR
));
char
buffer
[
260
];
char
buffer
[
260
];
APIRET
rc
;
APIRET
rc
;
ULONG
entries
=
1
;
ULONG
entries
=
1
;
strcpy
(
buffer
,
path
);
strcpy
(
buffer
,
path
);
strcat
(
buffer
,
"*.*"
);
strcat
(
buffer
,
"*.*"
);
...
@@ -118,13 +118,13 @@ DIR* opendir( char* path)
...
@@ -118,13 +118,13 @@ DIR* opendir( char* path)
dir
->
hdir
=
HDIR_CREATE
;
dir
->
hdir
=
HDIR_CREATE
;
memset
(
&
dir
->
buf3
,
0
,
sizeof
(
dir
->
buf3
));
memset
(
&
dir
->
buf3
,
0
,
sizeof
(
dir
->
buf3
));
rc
=
DosFindFirst
(
rc
=
DosFindFirst
(
buffer
,
/* Address of the ASCIIZ path name of the file or subdirectory to be found. */
buffer
,
/* Address of the ASCIIZ path name of the file or subdirectory to be found. */
&
dir
->
hdir
,
/* Address of the handle associated with this DosFindFirst request. */
&
dir
->
hdir
,
/* Address of the handle associated with this DosFindFirst request. */
FILE_NORMAL
|
FILE_DIRECTORY
,
/* Attribute value that determines the file objects to be searched for. */
FILE_NORMAL
|
FILE_DIRECTORY
,
/* Attribute value that determines the file objects to be searched for. */
&
dir
->
buf3
,
/* Result buffer. */
&
dir
->
buf3
,
/* Result buffer. */
sizeof
(
dir
->
buf3
),
/* The length, in bytes, of pfindbuf. */
sizeof
(
dir
->
buf3
),
/* The length, in bytes, of pfindbuf. */
&
entries
,
/* Pointer to the number of entries: */
&
entries
,
/* Pointer to the number of entries: */
FIL_STANDARD
);
/* The level of file information required. */
FIL_STANDARD
);
/* The level of file information required. */
#ifdef _DEBUG
#ifdef _DEBUG
printf
(
"opendir rc=%d hdir=%d entries=%d->%s
\n
"
,
rc
,
dir
->
hdir
,
entries
,
dir
->
buf3
.
achName
);
printf
(
"opendir rc=%d hdir=%d entries=%d->%s
\n
"
,
rc
,
dir
->
hdir
,
entries
,
dir
->
buf3
.
achName
);
...
@@ -138,9 +138,9 @@ DIR* opendir( char* path)
...
@@ -138,9 +138,9 @@ DIR* opendir( char* path)
struct
dirent
*
readdir
(
DIR
*
dir
)
struct
dirent
*
readdir
(
DIR
*
dir
)
{
{
APIRET
rc
;
APIRET
rc
;
//FILEFINDBUF3 buf3;
//FILEFINDBUF3 buf3;
ULONG
entries
=
1
;
ULONG
entries
=
1
;
if
(
!
dir
->
buf3
.
achName
[
0
])
// file not found on previous query
if
(
!
dir
->
buf3
.
achName
[
0
])
// file not found on previous query
return
NULL
;
return
NULL
;
...
@@ -151,10 +151,10 @@ struct dirent* readdir( DIR* dir)
...
@@ -151,10 +151,10 @@ struct dirent* readdir( DIR* dir)
// query next file
// query next file
memset
(
&
dir
->
buf3
,
0
,
sizeof
(
dir
->
buf3
));
memset
(
&
dir
->
buf3
,
0
,
sizeof
(
dir
->
buf3
));
rc
=
DosFindNext
(
rc
=
DosFindNext
(
dir
->
hdir
,
dir
->
hdir
,
&
dir
->
buf3
,
/* Result buffer. */
&
dir
->
buf3
,
/* Result buffer. */
sizeof
(
dir
->
buf3
),
/* The length, in bytes, of pfindbuf. */
sizeof
(
dir
->
buf3
),
/* The length, in bytes, of pfindbuf. */
&
entries
);
/* Pointer to the number of entries: */
&
entries
);
/* Pointer to the number of entries: */
#ifdef _DEBUG
#ifdef _DEBUG
printf
(
"_findnext rc=%d hdir=%d entries=%d->%s
\n
"
,
rc
,
dir
->
hdir
,
entries
,
dir
->
buf3
.
achName
);
printf
(
"_findnext rc=%d hdir=%d entries=%d->%s
\n
"
,
rc
,
dir
->
hdir
,
entries
,
dir
->
buf3
.
achName
);
...
@@ -168,7 +168,7 @@ struct dirent* readdir( DIR* dir)
...
@@ -168,7 +168,7 @@ struct dirent* readdir( DIR* dir)
int
closedir
(
DIR
*
dir
)
int
closedir
(
DIR
*
dir
)
{
{
APIRET
rc
;
APIRET
rc
;
rc
=
DosFindClose
(
dir
->
hdir
);
rc
=
DosFindClose
(
dir
->
hdir
);
#ifdef _DEBUG
#ifdef _DEBUG
...
...
mysys/my_os2dirsrch.h
View file @
3ef9d44e
...
@@ -30,9 +30,9 @@ extern "C" {
...
@@ -30,9 +30,9 @@ extern "C" {
struct
_finddata_t
struct
_finddata_t
{
{
unsigned
attrib
;
unsigned
attrib
;
//unsigned long
time_create; /* -1 for FAT file systems */
//unsigned long
time_create; /* -1 for FAT file systems */
//unsigned long
time_access; /* -1 for FAT file systems */
//unsigned long
time_access; /* -1 for FAT file systems */
//unsigned long
time_write;
//unsigned long
time_write;
unsigned
long
size
;
unsigned
long
size
;
char
name
[
260
];
char
name
[
260
];
//uint16 wr_date;
//uint16 wr_date;
...
@@ -42,10 +42,10 @@ struct _finddata_t
...
@@ -42,10 +42,10 @@ struct _finddata_t
struct
dirent
struct
dirent
{
{
//unsigned attrib;
//unsigned attrib;
//unsigned long
time_create; /* -1 for FAT file systems */
//unsigned long
time_create; /* -1 for FAT file systems */
//unsigned long
time_access; /* -1 for FAT file systems */
//unsigned long
time_access; /* -1 for FAT file systems */
//unsigned long
time_write;
//unsigned long
time_write;
//unsigned long
size;
//unsigned long
size;
char
d_name
[
260
];
char
d_name
[
260
];
//uint16 wr_date;
//uint16 wr_date;
//uint16 wr_time;
//uint16 wr_time;
...
@@ -66,9 +66,9 @@ int closedir (DIR *);
...
@@ -66,9 +66,9 @@ int closedir (DIR *);
//#define _A_SUBDIR FILE_DIRECTORY
//#define _A_SUBDIR FILE_DIRECTORY
//#define _A_RDONLY FILE_READONLY
//#define _A_RDONLY FILE_READONLY
//long
_findfirst( char*, struct _finddata_t*);
//long
_findfirst( char*, struct _finddata_t*);
//long
_findnext( long, struct _finddata_t*);
//long
_findnext( long, struct _finddata_t*);
//void
_findclose( long);
//void
_findclose( long);
#ifdef __cplusplus_00
#ifdef __cplusplus_00
}
}
...
...
mysys/my_os2dlfcn.c
View file @
3ef9d44e
...
@@ -34,7 +34,7 @@ char* dlerror( void);
...
@@ -34,7 +34,7 @@ char* dlerror( void);
void
*
dlsym
(
void
*
hmod
,
char
*
fn
);
void
*
dlsym
(
void
*
hmod
,
char
*
fn
);
void
dlclose
(
void
*
hmod
);
void
dlclose
(
void
*
hmod
);
char
fail
[
256
];
char
fail
[
256
];
void
*
dlopen
(
char
*
path
,
int
flag
)
void
*
dlopen
(
char
*
path
,
int
flag
)
{
{
...
@@ -56,7 +56,7 @@ char* dlerror( void)
...
@@ -56,7 +56,7 @@ char* dlerror( void)
void
*
dlsym
(
void
*
hmod
,
char
*
fn
)
void
*
dlsym
(
void
*
hmod
,
char
*
fn
)
{
{
APIRET
rc
;
APIRET
rc
;
PFN
addr
;
PFN
addr
;
rc
=
DosQueryProcAddr
(
(
HMODULE
)
hmod
,
0l
,
fn
,
&
addr
);
rc
=
DosQueryProcAddr
(
(
HMODULE
)
hmod
,
0l
,
fn
,
&
addr
);
if
(
rc
)
if
(
rc
)
...
...
mysys/my_os2file64.c
View file @
3ef9d44e
...
@@ -18,11 +18,11 @@
...
@@ -18,11 +18,11 @@
Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
MA 02111-1307, USA */
MA 02111-1307, USA */
void
_OS2errno
(
APIRET
rc
);
void
_OS2errno
(
APIRET
rc
);
longlong
_lseek64
(
int
fd
,
longlong
offset
,
int
seektype
);
longlong
_lseek64
(
int
fd
,
longlong
offset
,
int
seektype
);
int
_lock64
(
int
fd
,
int
locktype
,
my_off_t
start
,
int
_lock64
(
int
fd
,
int
locktype
,
my_off_t
start
,
my_off_t
length
,
myf
MyFlags
);
my_off_t
length
,
myf
MyFlags
);
int
_sopen64
(
const
char
*
name
,
int
oflag
,
int
shflag
,
int
mask
);
int
_sopen64
(
const
char
*
name
,
int
oflag
,
int
shflag
,
int
mask
);
//
//
// this class is used to define a global c++ variable, that
// this class is used to define a global c++ variable, that
...
@@ -34,52 +34,52 @@ class File64bit
...
@@ -34,52 +34,52 @@ class File64bit
File64bit
();
/* default constructor */
File64bit
();
/* default constructor */
}
initFile64bit
;
}
initFile64bit
;
static
APIRET
(
*
APIENTRY
_DosOpenL
)(
PCSZ
pszFileName
,
static
APIRET
(
*
APIENTRY
_DosOpenL
)(
PCSZ
pszFileName
,
PHFILE
phf
,
PHFILE
phf
,
PULONG
pulAction
,
PULONG
pulAction
,
LONGLONG
cbFile
,
LONGLONG
cbFile
,
ULONG
ulAttribute
,
ULONG
ulAttribute
,
ULONG
fsOpenFlags
,
ULONG
fsOpenFlags
,
ULONG
fsOpenMode
,
ULONG
fsOpenMode
,
PEAOP2
peaop2
);
PEAOP2
peaop2
);
static
APIRET
(
*
APIENTRY
_DosSetFilePtrL
)(
HFILE
hFile
,
static
APIRET
(
*
APIENTRY
_DosSetFilePtrL
)(
HFILE
hFile
,
LONGLONG
ib
,
LONGLONG
ib
,
ULONG
method
,
ULONG
method
,
PLONGLONG
ibActual
);
PLONGLONG
ibActual
);
static
APIRET
(
*
APIENTRY
_DosSetFileLocksL
)(
HFILE
hFile
,
static
APIRET
(
*
APIENTRY
_DosSetFileLocksL
)(
HFILE
hFile
,
PFILELOCKL
pflUnlock
,
PFILELOCKL
pflUnlock
,
PFILELOCKL
pflLock
,
PFILELOCKL
pflLock
,
ULONG
timeout
,
ULONG
timeout
,
ULONG
flags
);
ULONG
flags
);
#define EIO
EINVAL
#define EIO
EINVAL
#define ESPIPE EBADSEEK
#define ESPIPE EBADSEEK
static
unsigned
char
const
errno_tab
[]
=
static
unsigned
char
const
errno_tab
[]
=
{
{
0
,
EINVAL
,
ENOENT
,
ENOENT
,
EMFILE
,
/* 0..4 */
0
,
EINVAL
,
ENOENT
,
ENOENT
,
EMFILE
,
/* 0..4 */
EACCES
,
EBADF
,
EIO
,
ENOMEM
,
EIO
,
/* 5..9 */
EACCES
,
EBADF
,
EIO
,
ENOMEM
,
EIO
,
/* 5..9 */
EINVAL
,
ENOEXEC
,
EINVAL
,
EINVAL
,
EINVAL
,
/* 10..14 */
EINVAL
,
ENOEXEC
,
EINVAL
,
EINVAL
,
EINVAL
,
/* 10..14 */
ENOENT
,
EBUSY
,
EXDEV
,
ENOENT
,
EROFS
,
/* 15..19 */
ENOENT
,
EBUSY
,
EXDEV
,
ENOENT
,
EROFS
,
/* 15..19 */
EIO
,
EIO
,
EIO
,
EIO
,
EIO
,
/* 20..24 */
EIO
,
EIO
,
EIO
,
EIO
,
EIO
,
/* 20..24 */
EIO
,
EIO
,
EIO
,
ENOSPC
,
EIO
,
/* 25..29 */
EIO
,
EIO
,
EIO
,
ENOSPC
,
EIO
,
/* 25..29 */
EIO
,
EIO
,
EACCES
,
EACCES
,
EIO
,
/* 30..34 */
EIO
,
EIO
,
EACCES
,
EACCES
,
EIO
,
/* 30..34 */
EIO
,
EIO
,
EIO
,
EIO
,
ENOSPC
,
/* 35..39 */
EIO
,
EIO
,
EIO
,
EIO
,
ENOSPC
,
/* 35..39 */
EIO
,
EIO
,
EIO
,
EIO
,
EIO
,
/* 40..44 */
EIO
,
EIO
,
EIO
,
EIO
,
EIO
,
/* 40..44 */
EIO
,
EIO
,
EIO
,
EIO
,
EIO
,
/* 45..49 */
EIO
,
EIO
,
EIO
,
EIO
,
EIO
,
/* 45..49 */
EIO
,
EIO
,
EIO
,
EIO
,
EBUSY
,
/* 50..54 */
EIO
,
EIO
,
EIO
,
EIO
,
EBUSY
,
/* 50..54 */
EIO
,
EIO
,
EIO
,
EIO
,
EIO
,
/* 55..59 */
EIO
,
EIO
,
EIO
,
EIO
,
EIO
,
/* 55..59 */
EIO
,
ENOSPC
,
ENOSPC
,
EIO
,
EIO
,
/* 60..64 */
EIO
,
ENOSPC
,
ENOSPC
,
EIO
,
EIO
,
/* 60..64 */
EACCES
,
EIO
,
EIO
,
EIO
,
EIO
,
/* 65..69 */
EACCES
,
EIO
,
EIO
,
EIO
,
EIO
,
/* 65..69 */
EIO
,
EIO
,
EIO
,
EROFS
,
EIO
,
/* 70..74 */
EIO
,
EIO
,
EIO
,
EROFS
,
EIO
,
/* 70..74 */
EIO
,
EIO
,
EIO
,
EIO
,
EIO
,
/* 75..79 */
EIO
,
EIO
,
EIO
,
EIO
,
EIO
,
/* 75..79 */
EEXIST
,
EIO
,
ENOENT
,
EIO
,
EIO
,
/* 80..84 */
EEXIST
,
EIO
,
ENOENT
,
EIO
,
EIO
,
/* 80..84 */
EIO
,
EIO
,
EINVAL
,
EIO
,
EAGAIN
,
/* 85..89 */
EIO
,
EIO
,
EINVAL
,
EIO
,
EAGAIN
,
/* 85..89 */
EIO
,
EIO
,
EIO
,
EIO
,
EIO
,
/* 90..94 */
EIO
,
EIO
,
EIO
,
EIO
,
EIO
,
/* 90..94 */
EINTR
,
EIO
,
EIO
,
EIO
,
EACCES
,
/* 95..99 */
EINTR
,
EIO
,
EIO
,
EIO
,
EACCES
,
/* 95..99 */
ENOMEM
,
EINVAL
,
EINVAL
,
ENOMEM
,
EINVAL
,
/* 100..104 */
ENOMEM
,
EINVAL
,
EINVAL
,
ENOMEM
,
EINVAL
,
/* 100..104 */
EINVAL
,
ENOMEM
,
EIO
,
EACCES
,
EPIPE
,
/* 105..109 */
EINVAL
,
ENOMEM
,
EIO
,
EACCES
,
EPIPE
,
/* 105..109 */
ENOENT
,
E2BIG
,
ENOSPC
,
ENOMEM
,
EBADF
,
/* 110..114 */
ENOENT
,
E2BIG
,
ENOSPC
,
ENOMEM
,
EBADF
,
/* 110..114 */
EINVAL
,
EINVAL
,
EINVAL
,
EINVAL
,
EINVAL
,
/* 115..119 */
EINVAL
,
EINVAL
,
EINVAL
,
EINVAL
,
EINVAL
,
/* 115..119 */
EINVAL
,
EINVAL
,
EINVAL
,
ENOENT
,
EINVAL
,
/* 120..124 */
EINVAL
,
EINVAL
,
EINVAL
,
ENOENT
,
EINVAL
,
/* 120..124 */
...
@@ -121,16 +121,16 @@ static unsigned char const errno_tab[] =
...
@@ -121,16 +121,16 @@ static unsigned char const errno_tab[] =
EINVAL
,
EBUSY
,
EINVAL
,
ESRCH
,
EINVAL
,
/* 300..304 */
EINVAL
,
EBUSY
,
EINVAL
,
ESRCH
,
EINVAL
,
/* 300..304 */
ESRCH
,
EINVAL
,
EINVAL
,
EINVAL
,
ESRCH
,
/* 305..309 */
ESRCH
,
EINVAL
,
EINVAL
,
EINVAL
,
ESRCH
,
/* 305..309 */
EINVAL
,
ENOMEM
,
EINVAL
,
EINVAL
,
EINVAL
,
/* 310..314 */
EINVAL
,
ENOMEM
,
EINVAL
,
EINVAL
,
EINVAL
,
/* 310..314 */
EINVAL
,
E2BIG
,
ENOENT
,
EIO
,
EIO
,
/* 315..319 */
EINVAL
,
E2BIG
,
ENOENT
,
EIO
,
EIO
,
/* 315..319 */
EINVAL
,
EINVAL
,
EINVAL
,
EINVAL
,
EAGAIN
,
/* 320..324 */
EINVAL
,
EINVAL
,
EINVAL
,
EINVAL
,
EAGAIN
,
/* 320..324 */
EINVAL
,
EINVAL
,
EINVAL
,
EIO
,
ENOENT
,
/* 325..329 */
EINVAL
,
EINVAL
,
EINVAL
,
EIO
,
ENOENT
,
/* 325..329 */
EACCES
,
EACCES
,
EACCES
,
ENOENT
,
ENOMEM
/* 330..334 */
EACCES
,
EACCES
,
EACCES
,
ENOENT
,
ENOMEM
/* 330..334 */
};
};
/*
/*
* Initialize 64bit file access: dynamic load of WSeB API
* Initialize 64bit file access: dynamic load of WSeB API
*/
*/
File64bit
::
File64bit
()
File64bit
::
File64bit
()
{
{
HMODULE
hDoscalls
;
HMODULE
hDoscalls
;
...
@@ -156,7 +156,7 @@ static unsigned char const errno_tab[] =
...
@@ -156,7 +156,7 @@ static unsigned char const errno_tab[] =
#endif
#endif
}
}
void
_OS2errno
(
APIRET
rc
)
void
_OS2errno
(
APIRET
rc
)
{
{
if
(
rc
>=
sizeof
(
errno_tab
))
if
(
rc
>=
sizeof
(
errno_tab
))
errno
=
EINVAL
;
errno
=
EINVAL
;
...
@@ -187,19 +187,19 @@ longlong _lseek64( int fd, longlong offset, int seektype)
...
@@ -187,19 +187,19 @@ longlong _lseek64( int fd, longlong offset, int seektype)
}
}
inline
_SetFileLocksL
(
HFILE
hFile
,
inline
_SetFileLocksL
(
HFILE
hFile
,
PFILELOCKL
pflUnlock
,
PFILELOCKL
pflUnlock
,
PFILELOCKL
pflLock
,
PFILELOCKL
pflLock
,
ULONG
timeout
,
ULONG
timeout
,
ULONG
flags
)
ULONG
flags
)
{
{
if
(
_DosSetFileLocksL
)
{
if
(
_DosSetFileLocksL
)
{
APIRET
rc
;
APIRET
rc
;
rc
=
_DosSetFileLocksL
(
hFile
,
pflUnlock
,
pflLock
,
timeout
,
flags
);
rc
=
_DosSetFileLocksL
(
hFile
,
pflUnlock
,
pflLock
,
timeout
,
flags
);
// on FAT/HPFS/LAN a INVALID_PARAMETER is returned, seems that
// on FAT/HPFS/LAN a INVALID_PARAMETER is returned, seems that
// only JFS can handle >2GB ranges.
// only JFS can handle >2GB ranges.
if
(
rc
!=
87
)
if
(
rc
!=
87
)
return
rc
;
return
rc
;
// got INVALID_PARAMETER, fallback to standard call
// got INVALID_PARAMETER, fallback to standard call
}
}
...
@@ -209,8 +209,8 @@ inline _SetFileLocksL(HFILE hFile,
...
@@ -209,8 +209,8 @@ inline _SetFileLocksL(HFILE hFile,
return
DosSetFileLocks
(
hFile
,
&
flUnlock
,
&
flLock
,
timeout
,
flags
);
return
DosSetFileLocks
(
hFile
,
&
flUnlock
,
&
flLock
,
timeout
,
flags
);
}
}
int
_lock64
(
int
fd
,
int
locktype
,
my_off_t
start
,
int
_lock64
(
int
fd
,
int
locktype
,
my_off_t
start
,
my_off_t
length
,
myf
MyFlags
)
my_off_t
length
,
myf
MyFlags
)
{
{
FILELOCKL
LockArea
=
{
0
,
0
},
UnlockArea
=
{
0
,
0
};
FILELOCKL
LockArea
=
{
0
,
0
},
UnlockArea
=
{
0
,
0
};
ULONG
readonly
=
0
;
ULONG
readonly
=
0
;
...
@@ -241,16 +241,16 @@ int _lock64( int fd, int locktype, my_off_t start,
...
@@ -241,16 +241,16 @@ int _lock64( int fd, int locktype, my_off_t start,
//printf( "fd %d, locktype %d, rc %d (dont_wait)\n", fd, locktype, rc);
//printf( "fd %d, locktype %d, rc %d (dont_wait)\n", fd, locktype, rc);
if
(
rc
==
33
)
{
/* Lock Violation */
if
(
rc
==
33
)
{
/* Lock Violation */
DBUG_PRINT
(
"info"
,(
"Was locked, trying with timeout"
));
DBUG_PRINT
(
"info"
,(
"Was locked, trying with timeout"
));
rc
=
_SetFileLocksL
(
fd
,
&
UnlockArea
,
&
LockArea
,
1
*
1000
,
readonly
);
rc
=
_SetFileLocksL
(
fd
,
&
UnlockArea
,
&
LockArea
,
1
*
1000
,
readonly
);
//printf( "fd %d, locktype %d, rc %d (dont_wait with timeout)\n", fd, locktype, rc);
//printf( "fd %d, locktype %d, rc %d (dont_wait with timeout)\n", fd, locktype, rc);
}
}
}
else
{
}
else
{
while
(
rc
=
_SetFileLocksL
(
fd
,
&
UnlockArea
,
&
LockArea
,
0
,
readonly
)
&&
(
rc
==
33
))
{
while
(
rc
=
_SetFileLocksL
(
fd
,
&
UnlockArea
,
&
LockArea
,
0
,
readonly
)
&&
(
rc
==
33
))
{
printf
(
"."
);
printf
(
"."
);
DosSleep
(
1
*
1000
);
DosSleep
(
1
*
1000
);
}
}
//printf( "fd %d, locktype %d, rc %d (wait2)\n", fd, locktype, rc);
//printf( "fd %d, locktype %d, rc %d (wait2)\n", fd, locktype, rc);
}
}
...
@@ -264,9 +264,9 @@ int _lock64( int fd, int locktype, my_off_t start,
...
@@ -264,9 +264,9 @@ int _lock64( int fd, int locktype, my_off_t start,
return
(
-
1
);
return
(
-
1
);
}
}
int
sopen
(
const
char
*
name
,
int
oflag
,
int
shflag
,
int
mask
)
int
sopen
(
const
char
*
name
,
int
oflag
,
int
shflag
,
int
mask
)
{
{
int
fail_errno
;
int
fail_errno
;
APIRET
rc
=
0
;
APIRET
rc
=
0
;
HFILE
hf
=
0
;
HFILE
hf
=
0
;
ULONG
ulAction
=
0
;
ULONG
ulAction
=
0
;
...
@@ -289,18 +289,18 @@ int sopen( const char *name, int oflag, int shflag, int mask)
...
@@ -289,18 +289,18 @@ int sopen( const char *name, int oflag, int shflag, int mask)
{
{
if
(
oflag
&
O_EXCL
)
if
(
oflag
&
O_EXCL
)
{
{
fsOpenFlags
=
OPEN_ACTION_FAIL_IF_EXISTS
|
OPEN_ACTION_CREATE_IF_NEW
;
fsOpenFlags
=
OPEN_ACTION_FAIL_IF_EXISTS
|
OPEN_ACTION_CREATE_IF_NEW
;
fail_errno
=
EEXIST
;
fail_errno
=
EEXIST
;
}
}
else
if
(
oflag
&
O_TRUNC
)
else
if
(
oflag
&
O_TRUNC
)
fsOpenFlags
=
OPEN_ACTION_REPLACE_IF_EXISTS
|
OPEN_ACTION_CREATE_IF_NEW
;
fsOpenFlags
=
OPEN_ACTION_REPLACE_IF_EXISTS
|
OPEN_ACTION_CREATE_IF_NEW
;
else
else
fsOpenFlags
=
OPEN_ACTION_OPEN_IF_EXISTS
|
OPEN_ACTION_CREATE_IF_NEW
;
fsOpenFlags
=
OPEN_ACTION_OPEN_IF_EXISTS
|
OPEN_ACTION_CREATE_IF_NEW
;
if
(
mask
&
S_IWRITE
)
if
(
mask
&
S_IWRITE
)
ulAttribute
=
FILE_NORMAL
;
ulAttribute
=
FILE_NORMAL
;
else
else
ulAttribute
=
FILE_READONLY
;
ulAttribute
=
FILE_READONLY
;
}
}
else
if
(
oflag
&
O_TRUNC
)
else
if
(
oflag
&
O_TRUNC
)
...
@@ -311,10 +311,10 @@ int sopen( const char *name, int oflag, int shflag, int mask)
...
@@ -311,10 +311,10 @@ int sopen( const char *name, int oflag, int shflag, int mask)
/* Try to open the file and handle errors. */
/* Try to open the file and handle errors. */
if
(
_DosOpenL
)
if
(
_DosOpenL
)
rc
=
_DosOpenL
(
name
,
&
hf
,
&
ulAction
,
cbFile
,
rc
=
_DosOpenL
(
name
,
&
hf
,
&
ulAction
,
cbFile
,
ulAttribute
,
fsOpenFlags
,
fsOpenMode
,
NULL
);
ulAttribute
,
fsOpenFlags
,
fsOpenMode
,
NULL
);
else
else
rc
=
DosOpen
(
name
,
&
hf
,
&
ulAction
,
(
LONG
)
cbFile
,
rc
=
DosOpen
(
name
,
&
hf
,
&
ulAction
,
(
LONG
)
cbFile
,
ulAttribute
,
fsOpenFlags
,
fsOpenMode
,
NULL
);
ulAttribute
,
fsOpenFlags
,
fsOpenMode
,
NULL
);
if
(
rc
==
ERROR_OPEN_FAILED
)
if
(
rc
==
ERROR_OPEN_FAILED
)
{
{
...
@@ -334,7 +334,7 @@ int sopen( const char *name, int oflag, int shflag, int mask)
...
@@ -334,7 +334,7 @@ int sopen( const char *name, int oflag, int shflag, int mask)
return
hf
;
return
hf
;
}
}
int
read
(
int
fd
,
void
*
buffer
,
unsigned
int
count
)
int
read
(
int
fd
,
void
*
buffer
,
unsigned
int
count
)
{
{
APIRET
rc
;
APIRET
rc
;
ULONG
actual
;
ULONG
actual
;
...
@@ -350,7 +350,7 @@ int read( int fd, void *buffer, unsigned int count)
...
@@ -350,7 +350,7 @@ int read( int fd, void *buffer, unsigned int count)
return
(
-
1
);
return
(
-
1
);
}
}
int
write
(
int
fd
,
const
void
*
buffer
,
unsigned
int
count
)
int
write
(
int
fd
,
const
void
*
buffer
,
unsigned
int
count
)
{
{
APIRET
rc
;
APIRET
rc
;
ULONG
actual
;
ULONG
actual
;
...
@@ -366,7 +366,7 @@ int write( int fd, const void *buffer, unsigned int count)
...
@@ -366,7 +366,7 @@ int write( int fd, const void *buffer, unsigned int count)
return
(
-
1
);
return
(
-
1
);
}
}
int
close
(
int
fd
)
int
close
(
int
fd
)
{
{
APIRET
rc
;
APIRET
rc
;
ULONG
actual
;
ULONG
actual
;
...
...
mysys/my_os2mutex.c
View file @
3ef9d44e
...
@@ -72,8 +72,8 @@ pthread_mutex_destroy(pthread_mutex_t * mutex)
...
@@ -72,8 +72,8 @@ pthread_mutex_destroy(pthread_mutex_t * mutex)
int
int
pthread_mutex_lock
(
pthread_mutex_t
*
mutex
)
pthread_mutex_lock
(
pthread_mutex_t
*
mutex
)
{
{
int
ret
=
0
;
int
ret
=
0
;
int
status
=
0
;
int
status
=
0
;
APIRET
rc
=
0
;
APIRET
rc
=
0
;
rc
=
DosRequestMutexSem
(
*
mutex
,
SEM_INDEFINITE_WAIT
);
rc
=
DosRequestMutexSem
(
*
mutex
,
SEM_INDEFINITE_WAIT
);
...
@@ -86,9 +86,9 @@ pthread_mutex_lock(pthread_mutex_t * mutex)
...
@@ -86,9 +86,9 @@ pthread_mutex_lock(pthread_mutex_t * mutex)
int
int
pthread_mutex_unlock
(
pthread_mutex_t
*
mutex
)
pthread_mutex_unlock
(
pthread_mutex_t
*
mutex
)
{
{
int
ret
=
0
;
int
ret
=
0
;
APIRET
rc
=
0
;
APIRET
rc
=
0
;
int
status
;
int
status
;
rc
=
DosReleaseMutexSem
(
*
mutex
);
rc
=
DosReleaseMutexSem
(
*
mutex
);
...
...
mysys/my_os2thread.c
View file @
3ef9d44e
...
@@ -31,9 +31,9 @@ static pthread_mutex_t THR_LOCK_thread;
...
@@ -31,9 +31,9 @@ static pthread_mutex_t THR_LOCK_thread;
struct
pthread_map
struct
pthread_map
{
{
HANDLE
pthreadself
;
HANDLE
pthreadself
;
pthread_handler
func
;
pthread_handler
func
;
void
*
param
;
void
*
param
;
};
};
void
win_pthread_init
(
void
)
void
win_pthread_init
(
void
)
...
@@ -57,7 +57,7 @@ static pthread_handler_decl(pthread_start,param)
...
@@ -57,7 +57,7 @@ static pthread_handler_decl(pthread_start,param)
pthread_handler
func
=
((
struct
pthread_map
*
)
param
)
->
func
;
pthread_handler
func
=
((
struct
pthread_map
*
)
param
)
->
func
;
void
*
func_param
=
((
struct
pthread_map
*
)
param
)
->
param
;
void
*
func_param
=
((
struct
pthread_map
*
)
param
)
->
param
;
my_thread_init
();
/* Will always succeed in windows */
my_thread_init
();
/* Will always succeed in windows */
pthread_mutex_lock
(
&
THR_LOCK_thread
);
/* Wait for beginthread to return */
pthread_mutex_lock
(
&
THR_LOCK_thread
);
/* Wait for beginthread to return */
win_pthread_self
=
((
struct
pthread_map
*
)
param
)
->
pthreadself
;
win_pthread_self
=
((
struct
pthread_map
*
)
param
)
->
pthreadself
;
pthread_mutex_unlock
(
&
THR_LOCK_thread
);
pthread_mutex_unlock
(
&
THR_LOCK_thread
);
free
((
char
*
)
param
);
/* Free param from create */
free
((
char
*
)
param
);
/* Free param from create */
...
...
mysys/my_os2tls.c
View file @
3ef9d44e
...
@@ -18,23 +18,23 @@
...
@@ -18,23 +18,23 @@
Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
MA 02111-1307, USA */
MA 02111-1307, USA */
DWORD
TlsAlloc
(
void
);
DWORD
TlsAlloc
(
void
);
BOOL
TlsFree
(
DWORD
);
BOOL
TlsFree
(
DWORD
);
PVOID
TlsGetValue
(
DWORD
);
PVOID
TlsGetValue
(
DWORD
);
BOOL
TlsSetValue
(
DWORD
,
PVOID
);
BOOL
TlsSetValue
(
DWORD
,
PVOID
);
#define TLS_MINIMUM_AVAILABLE
64
#define TLS_MINIMUM_AVAILABLE
64
PULONG
tls_storage
;
/* TLS local storage */
PULONG
tls_storage
;
/* TLS local storage */
DWORD
tls_bits
[
2
];
/* TLS in-use bits */
DWORD
tls_bits
[
2
];
/* TLS in-use bits */
pthread_mutex_t
tls_mutex
;
/* TLS mutex for in-use bits */
pthread_mutex_t
tls_mutex
;
/* TLS mutex for in-use bits */
DWORD
TlsAlloc
(
void
)
DWORD
TlsAlloc
(
void
)
{
{
DWORD
index
=
-
1
;
DWORD
index
=
-
1
;
DWORD
mask
,
tibidx
;
DWORD
mask
,
tibidx
;
int
i
;
int
i
;
if
(
tls_storage
==
NULL
)
{
if
(
tls_storage
==
NULL
)
{
...
@@ -43,12 +43,12 @@ DWORD TlsAlloc( void)
...
@@ -43,12 +43,12 @@ DWORD TlsAlloc( void)
// allocate memory for TLS storage
// allocate memory for TLS storage
rc
=
DosAllocThreadLocalMemory
(
1
,
&
tls_storage
);
rc
=
DosAllocThreadLocalMemory
(
1
,
&
tls_storage
);
if
(
rc
)
{
if
(
rc
)
{
fprintf
(
stderr
,
"DosAllocThreadLocalMemory error: return code = %u
\n
"
,
rc
);
fprintf
(
stderr
,
"DosAllocThreadLocalMemory error: return code = %u
\n
"
,
rc
);
}
}
// create a mutex
// create a mutex
if
(
pthread_mutex_init
(
&
tls_mutex
,
NULL
))
if
(
pthread_mutex_init
(
&
tls_mutex
,
NULL
))
fprintf
(
stderr
,
"Failed to init TLS mutex
\n
"
);
fprintf
(
stderr
,
"Failed to init TLS mutex
\n
"
);
}
}
pthread_mutex_lock
(
&
tls_mutex
);
pthread_mutex_lock
(
&
tls_mutex
);
...
@@ -56,18 +56,18 @@ DWORD TlsAlloc( void)
...
@@ -56,18 +56,18 @@ DWORD TlsAlloc( void)
tibidx
=
0
;
tibidx
=
0
;
if
(
tls_bits
[
0
]
==
0xFFFFFFFF
)
{
if
(
tls_bits
[
0
]
==
0xFFFFFFFF
)
{
if
(
tls_bits
[
1
]
==
0xFFFFFFFF
)
{
if
(
tls_bits
[
1
]
==
0xFFFFFFFF
)
{
fprintf
(
stderr
,
"tid#%d, no more TLS bits available
\n
"
,
_threadid
);
fprintf
(
stderr
,
"tid#%d, no more TLS bits available
\n
"
,
_threadid
);
pthread_mutex_unlock
(
&
tls_mutex
);
pthread_mutex_unlock
(
&
tls_mutex
);
return
-
1
;
return
-
1
;
}
}
tibidx
=
1
;
tibidx
=
1
;
}
}
for
(
i
=
0
;
i
<
32
;
i
++
)
{
for
(
i
=
0
;
i
<
32
;
i
++
)
{
mask
=
(
1
<<
i
);
mask
=
(
1
<<
i
);
if
((
tls_bits
[
tibidx
]
&
mask
)
==
0
)
{
if
((
tls_bits
[
tibidx
]
&
mask
)
==
0
)
{
tls_bits
[
tibidx
]
|=
mask
;
tls_bits
[
tibidx
]
|=
mask
;
index
=
(
tibidx
*
32
)
+
i
;
index
=
(
tibidx
*
32
)
+
i
;
break
;
break
;
}
}
}
}
tls_storage
[
index
]
=
0
;
tls_storage
[
index
]
=
0
;
...
@@ -79,9 +79,9 @@ DWORD TlsAlloc( void)
...
@@ -79,9 +79,9 @@ DWORD TlsAlloc( void)
return
index
;
return
index
;
}
}
BOOL
TlsFree
(
DWORD
index
)
BOOL
TlsFree
(
DWORD
index
)
{
{
int
tlsidx
;
int
tlsidx
;
DWORD
mask
;
DWORD
mask
;
if
(
index
>=
TLS_MINIMUM_AVAILABLE
)
if
(
index
>=
TLS_MINIMUM_AVAILABLE
)
...
@@ -106,7 +106,7 @@ BOOL TlsFree( DWORD index)
...
@@ -106,7 +106,7 @@ BOOL TlsFree( DWORD index)
}
}
PVOID
TlsGetValue
(
DWORD
index
)
PVOID
TlsGetValue
(
DWORD
index
)
{
{
if
(
index
>=
TLS_MINIMUM_AVAILABLE
)
if
(
index
>=
TLS_MINIMUM_AVAILABLE
)
return
NULL
;
return
NULL
;
...
@@ -122,7 +122,7 @@ PVOID TlsGetValue( DWORD index)
...
@@ -122,7 +122,7 @@ PVOID TlsGetValue( DWORD index)
return
(
PVOID
)
tls_array
[
index
];
return
(
PVOID
)
tls_array
[
index
];
}
}
BOOL
TlsSetValue
(
DWORD
index
,
PVOID
val
)
BOOL
TlsSetValue
(
DWORD
index
,
PVOID
val
)
{
{
// verify if memory has been allocated for this thread
// verify if memory has been allocated for this thread
...
...
mysys/my_port.c
0 → 100644
View file @
3ef9d44e
/* 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 */
/*
Small functions to make code portable
*/
#include "mysys_priv.h"
#ifdef _AIX
/*
On AIX, at least with gcc 3.1, the expression
'(double) (ulonglong) var' doesn't always work for big unsigned
integers like '18446744073709551615'. The end result is that the
high bit is simply dropped. (probably bug in gcc optimizations)
Handling the conversion in a sub function seems to work.
*/
double
my_longlong2double
(
unsigned
long
long
nr
)
{
return
(
double
)
nr
;
}
#endif
/* _AIX */
mysys/mysys_priv.h
View file @
3ef9d44e
...
@@ -22,10 +22,10 @@
...
@@ -22,10 +22,10 @@
#endif
#endif
#ifdef THREAD
#ifdef THREAD
#include <my_pthread.h>
extern
pthread_mutex_t
THR_LOCK_malloc
,
THR_LOCK_open
,
THR_LOCK_keycache
,
extern
pthread_mutex_t
THR_LOCK_malloc
,
THR_LOCK_open
,
THR_LOCK_keycache
,
THR_LOCK_lock
,
THR_LOCK_isam
,
THR_LOCK_net
,
THR_LOCK_charset
;
THR_LOCK_lock
,
THR_LOCK_isam
,
THR_LOCK_net
,
THR_LOCK_charset
;
extern
pthread_mutex_t
LOCK_bitmap
;
extern
pthread_mutex_t
LOCK_bitmap
;
#else
/* THREAD */
#else
#define pthread_mutex_lock(A)
#include <my_no_pthread.h>
#define pthread_mutex_unlock(A)
#endif
#endif
mysys/thr_rwlock.c
View file @
3ef9d44e
...
@@ -17,7 +17,6 @@
...
@@ -17,7 +17,6 @@
/* Synchronization - readers / writer thread locks */
/* Synchronization - readers / writer thread locks */
#include "mysys_priv.h"
#include "mysys_priv.h"
#include <my_pthread.h>
#if defined(THREAD) && !defined(HAVE_PTHREAD_RWLOCK_RDLOCK) && !defined(HAVE_RWLOCK_INIT)
#if defined(THREAD) && !defined(HAVE_PTHREAD_RWLOCK_RDLOCK) && !defined(HAVE_RWLOCK_INIT)
#include <errno.h>
#include <errno.h>
...
...
sql/ha_innodb.cc
View file @
3ef9d44e
...
@@ -19,7 +19,7 @@
...
@@ -19,7 +19,7 @@
/* TODO list for the InnoDB handler:
/* TODO list for the InnoDB handler:
- Ask Monty if strings of different languages can exist in the same
- Ask Monty if strings of different languages can exist in the same
database. Answer: in
near future yes, but not yet
.
database. Answer: in
4.1 yes
.
*/
*/
#ifdef __GNUC__
#ifdef __GNUC__
...
@@ -308,6 +308,8 @@ innobase_mysql_print_thd(
...
@@ -308,6 +308,8 @@ innobase_mysql_print_thd(
}
}
buf
[
0
]
=
'\n'
;
buf
[
0
]
=
'\n'
;
buf
[
1
]
=
0
;
buf
[
1
]
=
0
;
ut_a
(
strlen
(
old_buf
)
<
400
);
}
}
}
}
...
@@ -393,6 +395,61 @@ ha_innobase::update_thd(
...
@@ -393,6 +395,61 @@ ha_innobase::update_thd(
return
(
0
);
return
(
0
);
}
}
/*********************************************************************
Call this when you have opened a new table handle in HANDLER, before you
call index_read_idx() etc. Actually, we can let the cursor stay open even
over a transaction commit! Then you should call this before every operation,
fecth next etc. This function inits the necessary things even after a
transaction commit. */
/* TODO: THIS CODE HAS NOT BEEN TESTED!!! */
void
ha_innobase
::
init_table_handle_for_HANDLER
(
void
)
/*============================================*/
{
row_prebuilt_t
*
prebuilt
;
/* If current thd does not yet have a trx struct, create one.
If the current handle does not yet have a prebuilt struct, create
one. Update the trx pointers in the prebuilt struct. Normally
this operation is done in external_lock. */
update_thd
(
current_thd
);
/* Initialize the prebuilt struct much like it would be inited in
external_lock */
prebuilt
=
(
row_prebuilt_t
*
)
innobase_prebuilt
;
/* If the transaction is not started yet, start it */
trx_start_if_not_started_noninline
(
prebuilt
->
trx
);
/* Assign a read view if the transaction does not have it yet */
trx_assign_read_view
(
prebuilt
->
trx
);
/* We did the necessary inits in this function, no need to repeat them
in row_search_for_mysql */
prebuilt
->
sql_stat_start
=
FALSE
;
/* We let HANDLER always to do the reads as consistent reads, even
if the trx isolation level would have been specified as SERIALIZABLE */
prebuilt
->
select_lock_type
=
LOCK_NONE
;
/* Always fetch all columns in the index record */
prebuilt
->
hint_no_need_to_fetch_extra_cols
=
FALSE
;
/* We want always to fetch all columns in the whole row? Or do
we???? */
prebuilt
->
read_just_key
=
FALSE
;
}
/*************************************************************************
/*************************************************************************
Opens an InnoDB database. */
Opens an InnoDB database. */
...
@@ -3460,8 +3517,10 @@ innodb_show_status(
...
@@ -3460,8 +3517,10 @@ innodb_show_status(
DBUG_ENTER
(
"innodb_show_status"
);
DBUG_ENTER
(
"innodb_show_status"
);
/* We let the InnoDB Monitor to output at most 100 kB of text */
/* We let the InnoDB Monitor to output at most 100 kB of text, add
buf
=
(
char
*
)
ut_malloc
(
100
*
1024
);
a safety margin of 10 kB for buffer overruns */
buf
=
(
char
*
)
ut_malloc
(
110
*
1024
);
srv_sprintf_innodb_monitor
(
buf
,
100
*
1024
);
srv_sprintf_innodb_monitor
(
buf
,
100
*
1024
);
...
...
sql/ha_innodb.h
View file @
3ef9d44e
...
@@ -164,6 +164,7 @@ class ha_innobase: public handler
...
@@ -164,6 +164,7 @@ class ha_innobase: public handler
void
free_foreign_key_create_info
(
char
*
str
);
void
free_foreign_key_create_info
(
char
*
str
);
THR_LOCK_DATA
**
store_lock
(
THD
*
thd
,
THR_LOCK_DATA
**
to
,
THR_LOCK_DATA
**
store_lock
(
THD
*
thd
,
THR_LOCK_DATA
**
to
,
enum
thr_lock_type
lock_type
);
enum
thr_lock_type
lock_type
);
void
init_table_handle_for_HANDLER
();
/* TODO: NOT TESTED!!! */
longlong
get_auto_increment
();
longlong
get_auto_increment
();
};
};
...
...
sql/item_cmpfunc.cc
View file @
3ef9d44e
...
@@ -501,12 +501,12 @@ Item_func_if::fix_length_and_dec()
...
@@ -501,12 +501,12 @@ Item_func_if::fix_length_and_dec()
if
(
null1
)
if
(
null1
)
{
{
cached_result_type
=
arg2_type
;
cached_result_type
=
arg2_type
;
binary
=
args
[
1
]
->
binary
;
binary
=
args
[
2
]
->
binary
;
}
}
else
if
(
null2
)
else
if
(
null2
)
{
{
cached_result_type
=
arg
2
_type
;
cached_result_type
=
arg
1
_type
;
binary
=
args
[
2
]
->
binary
;
binary
=
args
[
1
]
->
binary
;
}
}
else
if
(
arg1_type
==
STRING_RESULT
||
arg2_type
==
STRING_RESULT
)
else
if
(
arg1_type
==
STRING_RESULT
||
arg2_type
==
STRING_RESULT
)
{
{
...
...
sql/mysqld.cc
View file @
3ef9d44e
...
@@ -646,29 +646,45 @@ static void close_server_sock()
...
@@ -646,29 +646,45 @@ static void close_server_sock()
if
(
tmp_sock
!=
INVALID_SOCKET
)
if
(
tmp_sock
!=
INVALID_SOCKET
)
{
{
ip_sock
=
INVALID_SOCKET
;
ip_sock
=
INVALID_SOCKET
;
DBUG_PRINT
(
"info"
,(
"c
losing
TCP/IP socket"
));
DBUG_PRINT
(
"info"
,(
"c
alling shutdown on
TCP/IP socket"
));
VOID
(
shutdown
(
tmp_sock
,
2
));
VOID
(
shutdown
(
tmp_sock
,
2
));
#ifdef NOT_USED
/*
The following code is disabled as it causes MySQL to hang on
AIX 4.3 during shutdown
*/
DBUG_PRINT
(
"info"
,(
"calling closesocket on TCP/IP socket"
));
VOID
(
closesocket
(
tmp_sock
));
VOID
(
closesocket
(
tmp_sock
));
#endif
}
}
tmp_sock
=
unix_sock
;
tmp_sock
=
unix_sock
;
if
(
tmp_sock
!=
INVALID_SOCKET
)
if
(
tmp_sock
!=
INVALID_SOCKET
)
{
{
unix_sock
=
INVALID_SOCKET
;
unix_sock
=
INVALID_SOCKET
;
DBUG_PRINT
(
"info"
,(
"c
losing U
nix socket"
));
DBUG_PRINT
(
"info"
,(
"c
alling shutdown on u
nix socket"
));
VOID
(
shutdown
(
tmp_sock
,
2
));
VOID
(
shutdown
(
tmp_sock
,
2
));
#ifdef NOT_USED
/*
The following code is disabled as it may cause MySQL to hang on
AIX 4.3 during shutdown (not tested, but likely)
*/
DBUG_PRINT
(
"info"
,(
"calling closesocket on unix/IP socket"
));
VOID
(
closesocket
(
tmp_sock
));
VOID
(
closesocket
(
tmp_sock
));
#endif
VOID
(
unlink
(
mysql_unix_port
));
VOID
(
unlink
(
mysql_unix_port
));
}
}
DBUG_VOID_RETURN
;
DBUG_VOID_RETURN
;
#endif
#endif
}
}
void
kill_mysql
(
void
)
void
kill_mysql
(
void
)
{
{
DBUG_ENTER
(
"kill_mysql"
);
DBUG_ENTER
(
"kill_mysql"
);
#ifdef SIGNALS_DONT_BREAK_READ
#ifdef SIGNALS_DONT_BREAK_READ
close_server_sock
();
/* force accept to wake up */
abort_loop
=
1
;
// Break connection loops
close_server_sock
();
// Force accept to wake up
#endif
#endif
#if defined(__WIN__)
#if defined(__WIN__)
...
@@ -699,7 +715,7 @@ void kill_mysql(void)
...
@@ -699,7 +715,7 @@ void kill_mysql(void)
DBUG_PRINT
(
"quit"
,(
"After pthread_kill"
));
DBUG_PRINT
(
"quit"
,(
"After pthread_kill"
));
shutdown_in_progress
=
1
;
// Safety if kill didn't work
shutdown_in_progress
=
1
;
// Safety if kill didn't work
#ifdef SIGNALS_DONT_BREAK_READ
#ifdef SIGNALS_DONT_BREAK_READ
if
(
!
abort_loop
)
if
(
!
kill_in_progress
)
{
{
pthread_t
tmp
;
pthread_t
tmp
;
abort_loop
=
1
;
abort_loop
=
1
;
...
@@ -1273,7 +1289,7 @@ static void sig_reload(int signo)
...
@@ -1273,7 +1289,7 @@ static void sig_reload(int signo)
static
void
sig_kill
(
int
signo
)
static
void
sig_kill
(
int
signo
)
{
{
if
(
!
abort_loop
)
if
(
!
kill_in_progress
)
{
{
abort_loop
=
1
;
// mark abort for threads
abort_loop
=
1
;
// mark abort for threads
kill_server
((
void
*
)
signo
);
kill_server
((
void
*
)
signo
);
...
...
sql/sql_insert.cc
View file @
3ef9d44e
...
@@ -345,7 +345,7 @@ int mysql_insert(THD *thd,TABLE_LIST *table_list, List<Item> &fields,
...
@@ -345,7 +345,7 @@ int mysql_insert(THD *thd,TABLE_LIST *table_list, List<Item> &fields,
else
else
sprintf
(
buff
,
ER
(
ER_INSERT_INFO
),
info
.
records
,
info
.
deleted
,
sprintf
(
buff
,
ER
(
ER_INSERT_INFO
),
info
.
records
,
info
.
deleted
,
thd
->
cuted_fields
);
thd
->
cuted_fields
);
::
send_ok
(
&
thd
->
net
,
info
.
copied
+
info
.
deleted
,
0L
,
buff
);
::
send_ok
(
&
thd
->
net
,
info
.
copied
+
info
.
deleted
,
(
ulonglong
)
id
,
buff
);
}
}
DBUG_RETURN
(
0
);
DBUG_RETURN
(
0
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment