diff options
author | unknown <monty@mashka.mysql.fi> | 2003-01-28 08:38:28 +0200 |
---|---|---|
committer | unknown <monty@mashka.mysql.fi> | 2003-01-28 08:38:28 +0200 |
commit | 8c613c2c9168efa89eefcc82b1271e6731e526a7 (patch) | |
tree | b916d4acfbe4f32ab06b052fd06c072f858bdce1 /mysys/my_os2file64.c | |
parent | 03d1f3848214a09991f714eb19cfc26512048ed9 (diff) | |
download | mariadb-git-8c613c2c9168efa89eefcc82b1271e6731e526a7.tar.gz |
Fixes for Netware
Call pthread_mutex_destroy() on not used mutex.
Changed comments in .h and .c files from // -> /* */
Added detection of mutex on which one didn't call pthread_mutex_destroy()
Fixed bug in create_tmp_field() which causes a memory overrun in queries that uses "ORDER BY constant_expression"
Added optimisation for ORDER BY NULL
BitKeeper/deleted/.del-ChangeLog~dfc92e15bee6fc75:
Delete: sql/ChangeLog
BUILD/compile-pentium-valgrind-max:
Don't use valgrind with safemalloc as this can hide some bugs
Makefile.am:
Added platform dirs
bdb/os/os_handle.c:
Portability fix
client/mysql.cc:
Fixes for Netware.
Fixed duplicate output when using 'tee'
Simple optimisations
client/mysqldump.c:
Portability fix
client/mysqltest.c:
Portability fix
configure.in:
Fixes for Netware
extra/resolveip.c:
Fixes for Netware
include/Makefile.am:
Fixes for Netware
include/config-win.h:
Portability fix
include/my_global.h:
Fixes for Netware
include/my_net.h:
Fixes for Netware
include/my_pthread.h:
Fixes for Netware
Added detection of mutexes that was not destroyed
include/my_sys.h:
Fixes for Netware
Added 'extern' before external functions
include/mysql.h:
Fixes for Netware
innobase/configure.in:
Fixes for Netware
innobase/include/os0thread.h:
Fixes for Netware
innobase/os/os0sync.c:
Fixes for Netware
innobase/os/os0thread.c:
Fixes for Netware
innobase/srv/srv0srv.c:
Fixes for Netware
innobase/srv/srv0start.c:
Fixes for Netware
innobase/sync/sync0sync.c:
Fixes for Netware
isam/test3.c:
Disable test on Netware
libmysql/Makefile.shared:
Added my_sleep
libmysql/get_password.c:
Fixes for Netware
libmysql/libmysql.c:
Fixes for Netware
Made mysql_once_init() global
libmysql/manager.c:
Fixes for Netware
myisam/mi_test3.c:
Disable test for netware
mysql-test/mysql-test-run.sh:
Give warning if output file contains errors
mysql-test/r/count_distinct.result:
More tests
mysql-test/r/group_by.result:
Test of ORDER BY NULL
mysql-test/t/backup.test:
Fixes for Netware
mysql-test/t/count_distinct.test:
More tests
mysql-test/t/func_crypt.test:
Fixes for Netware
mysql-test/t/grant_cache.test:
Fixes for Netware
mysql-test/t/group_by.test:
Tests of ORDER BY NULL
mysql-test/t/rpl000015.test:
Fixes for Netware
mysql-test/t/rpl000017.test:
Fixes for Netware
mysql-test/t/rpl_rotate_logs.test:
Fixes for Netware
mysys/Makefile.am:
Added my_sleep.c and my_netware.c
mysys/charset.c:
Fixes for Netware
mysys/default.c:
Fixes for Netware
mysys/mf_tempfile.c:
Fixes for Netware
mysys/my_clock.c:
Fixes for Netware
mysys/my_copy.c:
Fixes for Netware
mysys/my_getwd.c:
Changed function comment from // -> /* */
mysys/my_init.c:
Fixes for Netware
mysys/my_lock.c:
Fixes for Netware
mysys/my_messnc.c:
Fixes for Netware
mysys/my_os2cond.c:
Removed comment
mysys/my_os2dirsrch.c:
Changed function comment from // -> /* */
Fixed indentation
mysys/my_os2dirsrch.h:
Changed function comment from // -> /* */
Fixed indentation
mysys/my_os2file64.c:
Changed function comment from // -> /* */
Fixed indentation
mysys/my_os2mutex.c:
Changed function comment from // -> /* */
Fixed indentation
mysys/my_os2thread.c:
Changed function comment from // -> /* */
Fixed indentation
mysys/my_os2tls.c:
Changed function comment from // -> /* */
Fixed indentation
mysys/my_pthread.c:
Fixes for Netware
mysys/my_redel.c:
Fixes for Netware
mysys/my_tempnam.c:
Fixes for Netware
mysys/my_thr_init.c:
Remove created mutexes when program ends.
mysys/mysys_priv.h:
Cleanup
mysys/safemalloc.c:
Prefix error messages with "Error:"
mysys/thr_alarm.c:
Destroy internal mutex on end_thr_alarm.
mysys/thr_mutex.c:
Added detection of mutex on which one didn't call pthread_mutex_destroy()
scripts/make_binary_distribution.sh:
Fixes for Netware
sql/des_key_file.cc:
Free mutex at end
sql/ha_innodb.cc:
Free mutex at end
sql/ha_myisam.cc:
Changed warnings from REPAIR Note:
(For mysql-test-run)
sql/hostname.cc:
Fixes for Netware
sql/item.h:
Fixed bug in create_tmp_field() which causes a memory overrun
sql/item_func.cc:
Free used mutexes
sql/item_sum.cc:
Fixed bug in create_tmp_field() which causes a memory overrun
sql/log.cc:
Free used mutexes
sql/my_lock.c:
Fixes for Netware
sql/mysql_priv.h:
Fixes for Netware
sql/mysqld.cc:
Fixes for Netware
Added Have_crypt
Properly free mutexes from MYSQL_LOG by calling cleanup
Free mutex before exit
sql/repl_failsafe.cc:
Fixes for Netware
sql/set_var.cc:
Added have_crypt
sql/share/english/errmsg.txt:
Added version socket and port to stderr log
sql/slave.cc:
Remove global MASTER_INFO variable and use instead an allocated variable.
This allows us to correctly free used mutex.
sql/slave.h:
Move constructors and destuctors to slave.cc
(To make it easier to clear all needed variables)
sql/sql_base.cc:
Safety fix
sql/sql_class.h:
Portability fixes.
Added 'cleanup' to log handling to be able to free mutexes.
sql/sql_insert.cc:
Fixes for Netware
mysys/my_sleep.c:
E
sql/sql_parse.cc:
Fixes for Netware
sql/sql_select.cc:
Added optimisation for ORDER BY NULL
sql/sql_select.h:
Fixed bug in create_tmp_field() which causes a memory overrun
sql/sql_table.cc:
Fixed bug in create_tmp_field() which causes a memory overrun
sql/sql_udf.cc:
Free mutex on end
vio/test-ssl.c:
Simple code cleanup
vio/test-sslclient.c:
Simple code cleanup
vio/test-sslserver.c:
Simple code cleanup
vio/viotest-ssl.c:
Simple code cleanup
Diffstat (limited to 'mysys/my_os2file64.c')
-rw-r--r-- | mysys/my_os2file64.c | 389 |
1 files changed, 195 insertions, 194 deletions
diff --git a/mysys/my_os2file64.c b/mysys/my_os2file64.c index bc24c92b87f..786e083adc4 100644 --- a/mysys/my_os2file64.c +++ b/mysys/my_os2file64.c @@ -24,10 +24,11 @@ int _lock64( int fd, int locktype, my_off_t start, my_off_t length, myf MyFlags); int _sopen64( const char *name, int oflag, int shflag, int mask); -// -// this class is used to define a global c++ variable, that -// is initialized before main() gets called. -// +/* + This class is used to define a global c++ variable, that + is initialized before main() gets called. +*/ + class File64bit { public: @@ -150,7 +151,7 @@ static unsigned char const errno_tab[] = _DosSetFilePtrL = NULL; return; } - // notify success + /* notify success */ #ifdef MYSQL_SERVER printf( "WSeB 64bit file API loaded.\n"); #endif @@ -164,230 +165,230 @@ void _OS2errno( APIRET rc) errno = errno_tab[rc]; } -longlong _lseek64( int fd, longlong offset, int seektype) -{ - APIRET rc; - longlong actual; - - if (_DosSetFilePtrL) - rc = _DosSetFilePtrL( fd, offset, seektype, &actual); - else { - ULONG ulActual; - rc = DosSetFilePtr( fd, (long) offset, seektype, &ulActual); - actual = ulActual; - } - - if (!rc) - return( actual);/* NO_ERROR */ - - // set errno - _OS2errno( rc); - // seek failed - return(-1); -} -inline _SetFileLocksL(HFILE hFile, - PFILELOCKL pflUnlock, - PFILELOCKL pflLock, - ULONG timeout, - ULONG flags) +longlong _lseek64( int fd, longlong offset, int seektype) { - if (_DosSetFileLocksL) { - APIRET rc; - rc = _DosSetFileLocksL( hFile, pflUnlock, pflLock, timeout, flags); + APIRET rc; + longlong actual; - // on FAT/HPFS/LAN a INVALID_PARAMETER is returned, seems that - // only JFS can handle >2GB ranges. - if (rc != 87) - return rc; + if (_DosSetFilePtrL) + rc = _DosSetFilePtrL( fd, offset, seektype, &actual); + else + { + ULONG ulActual; + rc = DosSetFilePtr( fd, (long) offset, seektype, &ulActual); + actual = ulActual; + } - // got INVALID_PARAMETER, fallback to standard call - } + if (!rc) + return( actual); /* NO_ERROR */ - FILELOCK flUnlock = { pflUnlock->lOffset, pflUnlock->lRange }; - FILELOCK flLock = { pflLock->lOffset, pflLock->lRange }; - return DosSetFileLocks( hFile, &flUnlock, &flLock, timeout, flags); + _OS2errno( rc); /* set errno */ + return(-1); /* seek failed */ } -int _lock64( int fd, int locktype, my_off_t start, - my_off_t length, myf MyFlags) -{ - FILELOCKL LockArea = {0,0}, UnlockArea = {0,0}; - ULONG readonly = 0; - APIRET rc = -1; - - switch( locktype) { - case F_UNLCK: - UnlockArea.lOffset = start; - UnlockArea.lRange = length ? length : LONGLONG_MAX; - break; - - case F_RDLCK: - case F_WRLCK: - LockArea.lOffset = start; - LockArea.lRange = length ? length : LONGLONG_MAX; - readonly = (locktype == F_RDLCK ? 1 : 0); - break; - - default: - errno = EINVAL; - rc = -1; - break; - } - - if (MyFlags & MY_DONT_WAIT) { - - rc = _SetFileLocksL( fd, &UnlockArea, &LockArea, 0, readonly); - //printf( "fd %d, locktype %d, rc %d (dont_wait)\n", fd, locktype, rc); - if (rc == 33) { /* Lock Violation */ - - DBUG_PRINT("info",("Was locked, trying with timeout")); - rc = _SetFileLocksL( fd, &UnlockArea, &LockArea, 1 * 1000, readonly); - //printf( "fd %d, locktype %d, rc %d (dont_wait with timeout)\n", fd, locktype, rc); - } - - } else { - - while( rc = _SetFileLocksL( fd, &UnlockArea, &LockArea, 0, readonly) && (rc == 33)) { - printf("."); - DosSleep(1 * 1000); - } - //printf( "fd %d, locktype %d, rc %d (wait2)\n", fd, locktype, rc); - } - - if (!rc) - return( 0);/* NO_ERROR */ - // set errno - _OS2errno( rc); - // lock failed - return(-1); +inline APIRET _SetFileLocksL(HFILE hFile, + PFILELOCKL pflUnlock, + PFILELOCKL pflLock, + ULONG timeout, + ULONG flags) +{ + if (_DosSetFileLocksL) + { + APIRET rc; + rc = _DosSetFileLocksL( hFile, pflUnlock, pflLock, timeout, flags); + + /* + on FAT/HPFS/LAN a INVALID_PARAMETER is returned, seems that + only JFS can handle >2GB ranges. + */ + if (rc != 87) + return rc; + /* got INVALID_PARAMETER, fallback to standard call */ + } + + FILELOCK flUnlock = { pflUnlock->lOffset, pflUnlock->lRange }; + FILELOCK flLock = { pflLock->lOffset, pflLock->lRange }; + return DosSetFileLocks( hFile, &flUnlock, &flLock, timeout, flags); } -int sopen( const char *name, int oflag, int shflag, int mask) + +int _lock64( int fd, int locktype, my_off_t start, + my_off_t length, myf MyFlags) { - int fail_errno; - APIRET rc = 0; - HFILE hf = 0; - ULONG ulAction = 0; - LONGLONG cbFile = 0; - ULONG ulAttribute = FILE_NORMAL; - ULONG fsOpenFlags = 0; - ULONG fsOpenMode = 0; - - /* Extract the access mode and sharing mode bits. */ - fsOpenMode = (shflag & 0xFF) | (oflag & 0x03); - - /* Translate ERROR_OPEN_FAILED to ENOENT unless O_EXCL is set (see - below). */ - fail_errno = ENOENT; - - /* Compute `open_flag' depending on `flags'. Note that _SO_CREAT is - set for O_CREAT. */ - - if (oflag & O_CREAT) - { - if (oflag & O_EXCL) - { - fsOpenFlags = OPEN_ACTION_FAIL_IF_EXISTS | OPEN_ACTION_CREATE_IF_NEW; - fail_errno = EEXIST; - } - else if (oflag & O_TRUNC) - fsOpenFlags = OPEN_ACTION_REPLACE_IF_EXISTS | OPEN_ACTION_CREATE_IF_NEW; - else - fsOpenFlags = OPEN_ACTION_OPEN_IF_EXISTS | OPEN_ACTION_CREATE_IF_NEW; - - if (mask & S_IWRITE) - ulAttribute = FILE_NORMAL; - else - ulAttribute = FILE_READONLY; + FILELOCKL LockArea = {0,0}, UnlockArea = {0,0}; + ULONG readonly = 0; + APIRET rc = -1; + + switch (locktype) { + case F_UNLCK: + UnlockArea.lOffset = start; + UnlockArea.lRange = length ? length : LONGLONG_MAX; + break; + + case F_RDLCK: + case F_WRLCK: + LockArea.lOffset = start; + LockArea.lRange = length ? length : LONGLONG_MAX; + readonly = (locktype == F_RDLCK ? 1 : 0); + break; + + default: + errno = EINVAL; + rc = -1; + break; + } + + if (MyFlags & MY_DONT_WAIT) + { + rc = _SetFileLocksL( fd, &UnlockArea, &LockArea, 0, readonly); + /* printf("fd %d, locktype %d, rc %d (dont_wait)\n", fd, locktype, rc); */ + if (rc == 33) { /* Lock Violation */ + + DBUG_PRINT("info",("Was locked, trying with timeout")); + rc = _SetFileLocksL( fd, &UnlockArea, &LockArea, 1 * 1000, readonly); + /* printf( "fd %d, locktype %d, rc %d (dont_wait with timeout)\n", fd, locktype, rc); */ + } + } + else + { + while (rc = _SetFileLocksL( fd, &UnlockArea, &LockArea, 0, readonly) && + (rc == 33)) + { + printf("."); + DosSleep(1 * 1000); + } + /* printf( "fd %d, locktype %d, rc %d (wait2)\n", fd, locktype, rc); */ + } + if (!rc) + return(0); /* NO_ERROR */ + _OS2errno( rc); /* set errno */ + return(-1); /* lock failed */ +} - } - else if (oflag & O_TRUNC) - fsOpenFlags = OPEN_ACTION_REPLACE_IF_EXISTS | OPEN_ACTION_FAIL_IF_NEW; - else - fsOpenFlags = OPEN_ACTION_OPEN_IF_EXISTS | OPEN_ACTION_FAIL_IF_NEW; - - /* Try to open the file and handle errors. */ - if (_DosOpenL) - rc = _DosOpenL( name, &hf, &ulAction, cbFile, - ulAttribute, fsOpenFlags, fsOpenMode, NULL); - else - rc = DosOpen( name, &hf, &ulAction, (LONG) cbFile, - ulAttribute, fsOpenFlags, fsOpenMode, NULL); - - if (rc == ERROR_OPEN_FAILED) - { - errno = fail_errno; - return -1; - } - if (rc != 0) - { - // set errno - _OS2errno( rc); - return -1; - } - if (oflag & O_APPEND) - _lseek64( hf, 0L, SEEK_END); +int sopen(const char *name, int oflag, int shflag, int mask) +{ + int fail_errno; + APIRET rc = 0; + HFILE hf = 0; + ULONG ulAction = 0; + LONGLONG cbFile = 0; + ULONG ulAttribute = FILE_NORMAL; + ULONG fsOpenFlags = 0; + ULONG fsOpenMode = 0; + + /* Extract the access mode and sharing mode bits. */ + fsOpenMode = (shflag & 0xFF) | (oflag & 0x03); + + /* + Translate ERROR_OPEN_FAILED to ENOENT unless O_EXCL is set (see + below). + */ + fail_errno = ENOENT; + + /* + Compute `open_flag' depending on `flags'. Note that _SO_CREAT is + set for O_CREAT. + */ + + if (oflag & O_CREAT) + { + if (oflag & O_EXCL) + { + fsOpenFlags = OPEN_ACTION_FAIL_IF_EXISTS | OPEN_ACTION_CREATE_IF_NEW; + fail_errno = EEXIST; + } + else if (oflag & O_TRUNC) + fsOpenFlags = OPEN_ACTION_REPLACE_IF_EXISTS | OPEN_ACTION_CREATE_IF_NEW; + else + fsOpenFlags = OPEN_ACTION_OPEN_IF_EXISTS | OPEN_ACTION_CREATE_IF_NEW; + + if (mask & S_IWRITE) + ulAttribute = FILE_NORMAL; + else + ulAttribute = FILE_READONLY; + + } + else if (oflag & O_TRUNC) + fsOpenFlags = OPEN_ACTION_REPLACE_IF_EXISTS | OPEN_ACTION_FAIL_IF_NEW; + else + fsOpenFlags = OPEN_ACTION_OPEN_IF_EXISTS | OPEN_ACTION_FAIL_IF_NEW; - return hf; + /* Try to open the file and handle errors. */ + if (_DosOpenL) + rc = _DosOpenL( name, &hf, &ulAction, cbFile, + ulAttribute, fsOpenFlags, fsOpenMode, NULL); + else + rc = DosOpen( name, &hf, &ulAction, (LONG) cbFile, + ulAttribute, fsOpenFlags, fsOpenMode, NULL); + + if (rc == ERROR_OPEN_FAILED) + { + errno = fail_errno; + return -1; + } + if (rc != 0) + { + _OS2errno( rc); /* set errno */ + return -1; + } + if (oflag & O_APPEND) + _lseek64( hf, 0L, SEEK_END); + return hf; } -int read( int fd, void *buffer, unsigned int count) -{ - APIRET rc; - ULONG actual; - rc = DosRead( fd, (PVOID) buffer, count, &actual); +int read(int fd, void *buffer, unsigned int count) +{ + APIRET rc; + ULONG actual; - if (!rc) - return( actual);/* NO_ERROR */ + rc= DosRead( fd, (PVOID) buffer, count, &actual); - // set errno - _OS2errno( rc); - // write failed - return(-1); + if (!rc) + return( actual); /* NO_ERROR */ + _OS2errno( rc); /* set errno */ + return(-1); /* read failed */ } -int write( int fd, const void *buffer, unsigned int count) -{ - APIRET rc; - ULONG actual; - rc = DosWrite( fd, (PVOID) buffer, count, &actual); +int write(int fd, const void *buffer, unsigned int count) +{ + APIRET rc; + ULONG actual; - if (!rc) - return( actual);/* NO_ERROR */ + rc = DosWrite( fd, (PVOID) buffer, count, &actual); - // set errno - _OS2errno( rc); - // write failed - return(-1); + if (!rc) + return( actual); /* NO_ERROR */ + _OS2errno( rc); /* set errno */ + return(-1); /* write failed */ } -int close( int fd) -{ - APIRET rc; - ULONG actual; - rc = DosClose( fd); +int close( int fd) +{ + APIRET rc; + ULONG actual; - if (!rc) - return( 0);/* NO_ERROR */ + rc = DosClose( fd); - // set errno - _OS2errno( rc); - // write failed - return(-1); + if (!rc) + return( 0); /* NO_ERROR */ + _OS2errno( rc); /* set errno */ + return(-1); /* close failed */ } -inline int open( const char *name, int oflag) + +int open( const char *name, int oflag) { return sopen( name, oflag, OPEN_SHARE_DENYNONE, S_IREAD | S_IWRITE); } -inline int open( const char *name, int oflag, int mask) + +int open( const char *name, int oflag, int mask) { return sopen( name, oflag, OPEN_SHARE_DENYNONE, mask); } |