2001-02-17 13:19:19 +01:00
|
|
|
/**********************************************************************
|
|
|
|
Utilities for converting data from the database file
|
|
|
|
to the machine format.
|
|
|
|
|
|
|
|
(c) 1995 Innobase Oy
|
|
|
|
|
|
|
|
Created 11/28/1995 Heikki Tuuri
|
|
|
|
***********************************************************************/
|
|
|
|
|
|
|
|
/***********************************************************
|
|
|
|
The following function is used to store data in one byte. */
|
|
|
|
UNIV_INLINE
|
|
|
|
void
|
|
|
|
mach_write_to_1(
|
|
|
|
/*============*/
|
|
|
|
byte* b, /* in: pointer to byte where to store */
|
|
|
|
ulint n) /* in: ulint integer to be stored, >= 0, < 256 */
|
|
|
|
{
|
|
|
|
ut_ad(b);
|
ut0ut.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
mem0pool.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
os0file.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
os0shm.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
os0sync.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
os0thread.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
page0page.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
que0que.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
row0ins.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
row0mysql.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
row0sel.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
row0upd.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
row0vers.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
srv0srv.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
srv0start.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
sync0arr.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
sync0rw.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
sync0sync.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
trx0rec.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
trx0trx.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
srv0srv.h Fixes for 64-bit Linux, bug fixes, compiler warning fixes
sync0rw.h Fixes for 64-bit Linux, bug fixes, compiler warning fixes
sync0sync.h Fixes for 64-bit Linux, bug fixes, compiler warning fixes
ut0dbg.h Fixes for 64-bit Linux, bug fixes, compiler warning fixes
lock0lock.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
log0log.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
log0recv.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
ibuf0ibuf.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
buf0buf.h Fixes for 64-bit Linux, bug fixes, compiler warning fixes
buf0buf.ic Fixes for 64-bit Linux, bug fixes, compiler warning fixes
hash0hash.ic Fixes for 64-bit Linux, bug fixes, compiler warning fixes
mach0data.ic Fixes for 64-bit Linux, bug fixes, compiler warning fixes
mem0mem.h Fixes for 64-bit Linux, bug fixes, compiler warning fixes
mem0pool.h Fixes for 64-bit Linux, bug fixes, compiler warning fixes
mtr0mtr.h Fixes for 64-bit Linux, bug fixes, compiler warning fixes
os0file.h Fixes for 64-bit Linux, bug fixes, compiler warning fixes
os0sync.h Fixes for 64-bit Linux, bug fixes, compiler warning fixes
os0sync.ic Fixes for 64-bit Linux, bug fixes, compiler warning fixes
os0thread.h Fixes for 64-bit Linux, bug fixes, compiler warning fixes
univ.i Fixes for 64-bit Linux, bug fixes, compiler warning fixes
row0mysql.ic Fixes for 64-bit Linux, bug fixes, compiler warning fixes
com0shm.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
data0data.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
data0type.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
dict0crea.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
dict0dict.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
fil0fil.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
fsp0fsp.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
fut0lst.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
btr0sea.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
buf0buf.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
buf0flu.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
btr0btr.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
btr0cur.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
innobase/btr/btr0btr.c:
Fixes for 64-bit Linux, bug fixes, compiler warning fixes
innobase/btr/btr0cur.c:
Fixes for 64-bit Linux, bug fixes, compiler warning fixes
innobase/btr/btr0sea.c:
Fixes for 64-bit Linux, bug fixes, compiler warning fixes
innobase/buf/buf0buf.c:
Fixes for 64-bit Linux, bug fixes, compiler warning fixes
innobase/buf/buf0flu.c:
Fixes for 64-bit Linux, bug fixes, compiler warning fixes
innobase/com/com0shm.c:
Fixes for 64-bit Linux, bug fixes, compiler warning fixes
innobase/data/data0data.c:
Fixes for 64-bit Linux, bug fixes, compiler warning fixes
innobase/data/data0type.c:
Fixes for 64-bit Linux, bug fixes, compiler warning fixes
innobase/dict/dict0crea.c:
Fixes for 64-bit Linux, bug fixes, compiler warning fixes
innobase/dict/dict0dict.c:
Fixes for 64-bit Linux, bug fixes, compiler warning fixes
innobase/fil/fil0fil.c:
Fixes for 64-bit Linux, bug fixes, compiler warning fixes
innobase/fsp/fsp0fsp.c:
Fixes for 64-bit Linux, bug fixes, compiler warning fixes
innobase/fut/fut0lst.c:
Fixes for 64-bit Linux, bug fixes, compiler warning fixes
innobase/ibuf/ibuf0ibuf.c:
Fixes for 64-bit Linux, bug fixes, compiler warning fixes
innobase/include/buf0buf.h:
Fixes for 64-bit Linux, bug fixes, compiler warning fixes
innobase/include/buf0buf.ic:
Fixes for 64-bit Linux, bug fixes, compiler warning fixes
innobase/include/hash0hash.ic:
Fixes for 64-bit Linux, bug fixes, compiler warning fixes
innobase/include/mach0data.ic:
Fixes for 64-bit Linux, bug fixes, compiler warning fixes
innobase/include/mem0mem.h:
Fixes for 64-bit Linux, bug fixes, compiler warning fixes
innobase/include/mem0pool.h:
Fixes for 64-bit Linux, bug fixes, compiler warning fixes
innobase/include/mtr0mtr.h:
Fixes for 64-bit Linux, bug fixes, compiler warning fixes
innobase/include/os0file.h:
Fixes for 64-bit Linux, bug fixes, compiler warning fixes
innobase/include/os0sync.h:
Fixes for 64-bit Linux, bug fixes, compiler warning fixes
innobase/include/os0sync.ic:
Fixes for 64-bit Linux, bug fixes, compiler warning fixes
innobase/include/os0thread.h:
Fixes for 64-bit Linux, bug fixes, compiler warning fixes
innobase/include/row0mysql.ic:
Fixes for 64-bit Linux, bug fixes, compiler warning fixes
innobase/include/univ.i:
Fixes for 64-bit Linux, bug fixes, compiler warning fixes
innobase/include/srv0srv.h:
Fixes for 64-bit Linux, bug fixes, compiler warning fixes
innobase/include/sync0rw.h:
Fixes for 64-bit Linux, bug fixes, compiler warning fixes
innobase/include/sync0sync.h:
Fixes for 64-bit Linux, bug fixes, compiler warning fixes
innobase/include/ut0dbg.h:
Fixes for 64-bit Linux, bug fixes, compiler warning fixes
innobase/lock/lock0lock.c:
Fixes for 64-bit Linux, bug fixes, compiler warning fixes
innobase/log/log0log.c:
Fixes for 64-bit Linux, bug fixes, compiler warning fixes
innobase/log/log0recv.c:
Fixes for 64-bit Linux, bug fixes, compiler warning fixes
innobase/mem/mem0pool.c:
Fixes for 64-bit Linux, bug fixes, compiler warning fixes
innobase/os/os0file.c:
Fixes for 64-bit Linux, bug fixes, compiler warning fixes
innobase/os/os0shm.c:
Fixes for 64-bit Linux, bug fixes, compiler warning fixes
innobase/os/os0sync.c:
Fixes for 64-bit Linux, bug fixes, compiler warning fixes
innobase/os/os0thread.c:
Fixes for 64-bit Linux, bug fixes, compiler warning fixes
innobase/page/page0page.c:
Fixes for 64-bit Linux, bug fixes, compiler warning fixes
innobase/que/que0que.c:
Fixes for 64-bit Linux, bug fixes, compiler warning fixes
innobase/row/row0ins.c:
Fixes for 64-bit Linux, bug fixes, compiler warning fixes
innobase/row/row0mysql.c:
Fixes for 64-bit Linux, bug fixes, compiler warning fixes
innobase/row/row0sel.c:
Fixes for 64-bit Linux, bug fixes, compiler warning fixes
innobase/row/row0upd.c:
Fixes for 64-bit Linux, bug fixes, compiler warning fixes
innobase/row/row0vers.c:
Fixes for 64-bit Linux, bug fixes, compiler warning fixes
innobase/srv/srv0srv.c:
Fixes for 64-bit Linux, bug fixes, compiler warning fixes
innobase/srv/srv0start.c:
Fixes for 64-bit Linux, bug fixes, compiler warning fixes
innobase/sync/sync0arr.c:
Fixes for 64-bit Linux, bug fixes, compiler warning fixes
innobase/sync/sync0rw.c:
Fixes for 64-bit Linux, bug fixes, compiler warning fixes
innobase/sync/sync0sync.c:
Fixes for 64-bit Linux, bug fixes, compiler warning fixes
innobase/trx/trx0rec.c:
Fixes for 64-bit Linux, bug fixes, compiler warning fixes
innobase/trx/trx0trx.c:
Fixes for 64-bit Linux, bug fixes, compiler warning fixes
innobase/ut/ut0ut.c:
Fixes for 64-bit Linux, bug fixes, compiler warning fixes
2001-03-02 16:33:11 +01:00
|
|
|
ut_ad(n <= 0xFF);
|
2001-02-17 13:19:19 +01:00
|
|
|
|
|
|
|
b[0] = (byte)n;
|
|
|
|
}
|
|
|
|
|
|
|
|
/************************************************************
|
|
|
|
The following function is used to fetch data from one byte. */
|
|
|
|
UNIV_INLINE
|
|
|
|
ulint
|
|
|
|
mach_read_from_1(
|
|
|
|
/*=============*/
|
|
|
|
/* out: ulint integer, >= 0, < 256 */
|
|
|
|
byte* b) /* in: pointer to byte */
|
|
|
|
{
|
|
|
|
ut_ad(b);
|
|
|
|
return((ulint)(b[0]));
|
|
|
|
}
|
|
|
|
|
|
|
|
/***********************************************************
|
|
|
|
The following function is used to store data in two consecutive
|
|
|
|
bytes. We store the most significant byte to the lowest address. */
|
|
|
|
UNIV_INLINE
|
|
|
|
void
|
|
|
|
mach_write_to_2(
|
|
|
|
/*============*/
|
|
|
|
byte* b, /* in: pointer to two bytes where to store */
|
|
|
|
ulint n) /* in: ulint integer to be stored */
|
|
|
|
{
|
|
|
|
ut_ad(b);
|
|
|
|
ut_ad(n <= 0xFFFF);
|
|
|
|
|
|
|
|
b[0] = (byte)(n >> 8);
|
|
|
|
b[1] = (byte)(n);
|
|
|
|
}
|
|
|
|
|
|
|
|
/************************************************************
|
|
|
|
The following function is used to fetch data from 2 consecutive
|
|
|
|
bytes. The most significant byte is at the lowest address. */
|
|
|
|
UNIV_INLINE
|
|
|
|
ulint
|
|
|
|
mach_read_from_2(
|
|
|
|
/*=============*/
|
|
|
|
/* out: ulint integer */
|
|
|
|
byte* b) /* in: pointer to 2 bytes */
|
|
|
|
{
|
|
|
|
ut_ad(b);
|
|
|
|
return( ((ulint)(b[0]) << 8)
|
|
|
|
+ (ulint)(b[1])
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
/***********************************************************
|
|
|
|
The following function is used to store data in 3 consecutive
|
|
|
|
bytes. We store the most significant byte to the lowest address. */
|
|
|
|
UNIV_INLINE
|
|
|
|
void
|
|
|
|
mach_write_to_3(
|
|
|
|
/*============*/
|
|
|
|
byte* b, /* in: pointer to 3 bytes where to store */
|
|
|
|
ulint n) /* in: ulint integer to be stored */
|
|
|
|
{
|
|
|
|
ut_ad(b);
|
|
|
|
ut_ad(n <= 0xFFFFFF);
|
|
|
|
|
|
|
|
b[0] = (byte)(n >> 16);
|
|
|
|
b[1] = (byte)(n >> 8);
|
|
|
|
b[2] = (byte)(n);
|
|
|
|
}
|
|
|
|
|
|
|
|
/************************************************************
|
|
|
|
The following function is used to fetch data from 3 consecutive
|
|
|
|
bytes. The most significant byte is at the lowest address. */
|
|
|
|
UNIV_INLINE
|
|
|
|
ulint
|
|
|
|
mach_read_from_3(
|
|
|
|
/*=============*/
|
|
|
|
/* out: ulint integer */
|
|
|
|
byte* b) /* in: pointer to 3 bytes */
|
|
|
|
{
|
|
|
|
ut_ad(b);
|
|
|
|
return( ((ulint)(b[0]) << 16)
|
|
|
|
+ ((ulint)(b[1]) << 8)
|
|
|
|
+ (ulint)(b[2])
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
/***********************************************************
|
|
|
|
The following function is used to store data in four consecutive
|
|
|
|
bytes. We store the most significant byte to the lowest address. */
|
|
|
|
UNIV_INLINE
|
|
|
|
void
|
|
|
|
mach_write_to_4(
|
|
|
|
/*============*/
|
|
|
|
byte* b, /* in: pointer to four bytes where to store */
|
|
|
|
ulint n) /* in: ulint integer to be stored */
|
|
|
|
{
|
|
|
|
ut_ad(b);
|
|
|
|
|
srv0srv.h Support raw disk partitions as data files
srv0start.c Support raw disk partitions as data files
srv0srv.c Support raw disk partitions as data files
row0purge.c < 4 GB rows, doublewrite, hang fixes
row0row.c < 4 GB rows, doublewrite, hang fixes
row0sel.c < 4 GB rows, doublewrite, hang fixes
row0uins.c < 4 GB rows, doublewrite, hang fixes
row0umod.c < 4 GB rows, doublewrite, hang fixes
row0undo.c < 4 GB rows, doublewrite, hang fixes
row0upd.c < 4 GB rows, doublewrite, hang fixes
srv0srv.c < 4 GB rows, doublewrite, hang fixes
srv0start.c < 4 GB rows, doublewrite, hang fixes
sync0rw.c < 4 GB rows, doublewrite, hang fixes
sync0sync.c < 4 GB rows, doublewrite, hang fixes
trx0purge.c < 4 GB rows, doublewrite, hang fixes
trx0rec.c < 4 GB rows, doublewrite, hang fixes
trx0sys.c < 4 GB rows, doublewrite, hang fixes
btr0btr.c < 4 GB rows, doublewrite, hang fixes
btr0cur.c < 4 GB rows, doublewrite, hang fixes
buf0buf.c < 4 GB rows, doublewrite, hang fixes
buf0flu.c < 4 GB rows, doublewrite, hang fixes
buf0rea.c < 4 GB rows, doublewrite, hang fixes
data0data.c < 4 GB rows, doublewrite, hang fixes
fil0fil.c < 4 GB rows, doublewrite, hang fixes
fsp0fsp.c < 4 GB rows, doublewrite, hang fixes
ibuf0ibuf.c < 4 GB rows, doublewrite, hang fixes
lock0lock.c < 4 GB rows, doublewrite, hang fixes
log0log.c < 4 GB rows, doublewrite, hang fixes
log0recv.c < 4 GB rows, doublewrite, hang fixes
os0file.c < 4 GB rows, doublewrite, hang fixes
page0cur.c < 4 GB rows, doublewrite, hang fixes
pars0pars.c < 4 GB rows, doublewrite, hang fixes
rem0cmp.c < 4 GB rows, doublewrite, hang fixes
rem0rec.c < 4 GB rows, doublewrite, hang fixes
row0ins.c < 4 GB rows, doublewrite, hang fixes
row0mysql.c < 4 GB rows, doublewrite, hang fixes
univ.i < 4 GB rows, doublewrite, hang fixes
data0data.ic < 4 GB rows, doublewrite, hang fixes
mach0data.ic < 4 GB rows, doublewrite, hang fixes
rem0rec.ic < 4 GB rows, doublewrite, hang fixes
row0upd.ic < 4 GB rows, doublewrite, hang fixes
trx0rec.ic < 4 GB rows, doublewrite, hang fixes
rem0cmp.h < 4 GB rows, doublewrite, hang fixes
rem0rec.h < 4 GB rows, doublewrite, hang fixes
row0ins.h < 4 GB rows, doublewrite, hang fixes
row0mysql.h < 4 GB rows, doublewrite, hang fixes
row0row.h < 4 GB rows, doublewrite, hang fixes
row0upd.h < 4 GB rows, doublewrite, hang fixes
srv0srv.h < 4 GB rows, doublewrite, hang fixes
sync0sync.h < 4 GB rows, doublewrite, hang fixes
trx0rec.h < 4 GB rows, doublewrite, hang fixes
trx0sys.h < 4 GB rows, doublewrite, hang fixes
trx0types.h < 4 GB rows, doublewrite, hang fixes
trx0undo.h < 4 GB rows, doublewrite, hang fixes
ut0dbg.h < 4 GB rows, doublewrite, hang fixes
ut0ut.h < 4 GB rows, doublewrite, hang fixes
btr0btr.h < 4 GB rows, doublewrite, hang fixes
btr0cur.h < 4 GB rows, doublewrite, hang fixes
buf0buf.h < 4 GB rows, doublewrite, hang fixes
buf0flu.h < 4 GB rows, doublewrite, hang fixes
data0data.h < 4 GB rows, doublewrite, hang fixes
dict0mem.h < 4 GB rows, doublewrite, hang fixes
fil0fil.h < 4 GB rows, doublewrite, hang fixes
fsp0fsp.h < 4 GB rows, doublewrite, hang fixes
os0file.h < 4 GB rows, doublewrite, hang fixes
innobase/include/btr0btr.h:
< 4 GB rows, doublewrite, hang fixes
innobase/include/btr0cur.h:
< 4 GB rows, doublewrite, hang fixes
innobase/include/buf0buf.h:
< 4 GB rows, doublewrite, hang fixes
innobase/include/buf0flu.h:
< 4 GB rows, doublewrite, hang fixes
innobase/include/data0data.h:
< 4 GB rows, doublewrite, hang fixes
innobase/include/dict0mem.h:
< 4 GB rows, doublewrite, hang fixes
innobase/include/fil0fil.h:
< 4 GB rows, doublewrite, hang fixes
innobase/include/fsp0fsp.h:
< 4 GB rows, doublewrite, hang fixes
innobase/include/os0file.h:
< 4 GB rows, doublewrite, hang fixes
innobase/include/rem0cmp.h:
< 4 GB rows, doublewrite, hang fixes
innobase/include/rem0rec.h:
< 4 GB rows, doublewrite, hang fixes
innobase/include/row0ins.h:
< 4 GB rows, doublewrite, hang fixes
innobase/include/row0mysql.h:
< 4 GB rows, doublewrite, hang fixes
innobase/include/row0row.h:
< 4 GB rows, doublewrite, hang fixes
innobase/include/row0upd.h:
< 4 GB rows, doublewrite, hang fixes
innobase/include/sync0sync.h:
< 4 GB rows, doublewrite, hang fixes
innobase/include/trx0rec.h:
< 4 GB rows, doublewrite, hang fixes
innobase/include/trx0sys.h:
< 4 GB rows, doublewrite, hang fixes
innobase/include/trx0types.h:
< 4 GB rows, doublewrite, hang fixes
innobase/include/trx0undo.h:
< 4 GB rows, doublewrite, hang fixes
innobase/include/ut0dbg.h:
< 4 GB rows, doublewrite, hang fixes
innobase/include/ut0ut.h:
< 4 GB rows, doublewrite, hang fixes
innobase/include/data0data.ic:
< 4 GB rows, doublewrite, hang fixes
innobase/include/mach0data.ic:
< 4 GB rows, doublewrite, hang fixes
innobase/include/rem0rec.ic:
< 4 GB rows, doublewrite, hang fixes
innobase/include/row0upd.ic:
< 4 GB rows, doublewrite, hang fixes
innobase/include/trx0rec.ic:
< 4 GB rows, doublewrite, hang fixes
innobase/include/univ.i:
< 4 GB rows, doublewrite, hang fixes
innobase/btr/btr0btr.c:
< 4 GB rows, doublewrite, hang fixes
innobase/btr/btr0cur.c:
< 4 GB rows, doublewrite, hang fixes
innobase/buf/buf0buf.c:
< 4 GB rows, doublewrite, hang fixes
innobase/buf/buf0flu.c:
< 4 GB rows, doublewrite, hang fixes
innobase/buf/buf0rea.c:
< 4 GB rows, doublewrite, hang fixes
innobase/data/data0data.c:
< 4 GB rows, doublewrite, hang fixes
innobase/fil/fil0fil.c:
< 4 GB rows, doublewrite, hang fixes
innobase/fsp/fsp0fsp.c:
< 4 GB rows, doublewrite, hang fixes
innobase/ibuf/ibuf0ibuf.c:
< 4 GB rows, doublewrite, hang fixes
innobase/lock/lock0lock.c:
< 4 GB rows, doublewrite, hang fixes
innobase/log/log0log.c:
< 4 GB rows, doublewrite, hang fixes
innobase/log/log0recv.c:
< 4 GB rows, doublewrite, hang fixes
innobase/os/os0file.c:
< 4 GB rows, doublewrite, hang fixes
innobase/page/page0cur.c:
< 4 GB rows, doublewrite, hang fixes
innobase/pars/pars0pars.c:
< 4 GB rows, doublewrite, hang fixes
innobase/rem/rem0cmp.c:
< 4 GB rows, doublewrite, hang fixes
innobase/rem/rem0rec.c:
< 4 GB rows, doublewrite, hang fixes
innobase/row/row0ins.c:
< 4 GB rows, doublewrite, hang fixes
innobase/row/row0mysql.c:
< 4 GB rows, doublewrite, hang fixes
innobase/row/row0purge.c:
< 4 GB rows, doublewrite, hang fixes
innobase/row/row0row.c:
< 4 GB rows, doublewrite, hang fixes
innobase/row/row0sel.c:
< 4 GB rows, doublewrite, hang fixes
innobase/row/row0uins.c:
< 4 GB rows, doublewrite, hang fixes
innobase/row/row0umod.c:
< 4 GB rows, doublewrite, hang fixes
innobase/row/row0undo.c:
< 4 GB rows, doublewrite, hang fixes
innobase/row/row0upd.c:
< 4 GB rows, doublewrite, hang fixes
innobase/sync/sync0rw.c:
< 4 GB rows, doublewrite, hang fixes
innobase/sync/sync0sync.c:
< 4 GB rows, doublewrite, hang fixes
innobase/trx/trx0purge.c:
< 4 GB rows, doublewrite, hang fixes
innobase/trx/trx0rec.c:
< 4 GB rows, doublewrite, hang fixes
innobase/trx/trx0sys.c:
< 4 GB rows, doublewrite, hang fixes
innobase/srv/srv0srv.c:
Support raw disk partitions as data files
innobase/srv/srv0start.c:
Support raw disk partitions as data files
innobase/include/srv0srv.h:
Support raw disk partitions as data files
2001-08-04 18:36:14 +02:00
|
|
|
#if (0 == 1) && !defined(__STDC__) && defined(UNIV_INTEL) && (UNIV_WORD_SIZE == 4) && defined(UNIV_VISUALC)
|
2001-02-17 13:19:19 +01:00
|
|
|
|
|
|
|
/* We do not use this even on Intel, because unaligned accesses may
|
|
|
|
be slow */
|
|
|
|
|
|
|
|
__asm MOV EAX, n
|
|
|
|
__asm BSWAP EAX /* Intel is little-endian, must swap bytes */
|
|
|
|
__asm MOV n, EAX
|
|
|
|
|
|
|
|
*((ulint*)b) = n;
|
|
|
|
#else
|
|
|
|
b[0] = (byte)(n >> 24);
|
|
|
|
b[1] = (byte)(n >> 16);
|
|
|
|
b[2] = (byte)(n >> 8);
|
|
|
|
b[3] = (byte)n;
|
|
|
|
#endif
|
|
|
|
}
|
|
|
|
|
|
|
|
/************************************************************
|
|
|
|
The following function is used to fetch data from 4 consecutive
|
|
|
|
bytes. The most significant byte is at the lowest address. */
|
|
|
|
UNIV_INLINE
|
|
|
|
ulint
|
|
|
|
mach_read_from_4(
|
|
|
|
/*=============*/
|
|
|
|
/* out: ulint integer */
|
|
|
|
byte* b) /* in: pointer to four bytes */
|
|
|
|
{
|
srv0srv.h Support raw disk partitions as data files
srv0start.c Support raw disk partitions as data files
srv0srv.c Support raw disk partitions as data files
row0purge.c < 4 GB rows, doublewrite, hang fixes
row0row.c < 4 GB rows, doublewrite, hang fixes
row0sel.c < 4 GB rows, doublewrite, hang fixes
row0uins.c < 4 GB rows, doublewrite, hang fixes
row0umod.c < 4 GB rows, doublewrite, hang fixes
row0undo.c < 4 GB rows, doublewrite, hang fixes
row0upd.c < 4 GB rows, doublewrite, hang fixes
srv0srv.c < 4 GB rows, doublewrite, hang fixes
srv0start.c < 4 GB rows, doublewrite, hang fixes
sync0rw.c < 4 GB rows, doublewrite, hang fixes
sync0sync.c < 4 GB rows, doublewrite, hang fixes
trx0purge.c < 4 GB rows, doublewrite, hang fixes
trx0rec.c < 4 GB rows, doublewrite, hang fixes
trx0sys.c < 4 GB rows, doublewrite, hang fixes
btr0btr.c < 4 GB rows, doublewrite, hang fixes
btr0cur.c < 4 GB rows, doublewrite, hang fixes
buf0buf.c < 4 GB rows, doublewrite, hang fixes
buf0flu.c < 4 GB rows, doublewrite, hang fixes
buf0rea.c < 4 GB rows, doublewrite, hang fixes
data0data.c < 4 GB rows, doublewrite, hang fixes
fil0fil.c < 4 GB rows, doublewrite, hang fixes
fsp0fsp.c < 4 GB rows, doublewrite, hang fixes
ibuf0ibuf.c < 4 GB rows, doublewrite, hang fixes
lock0lock.c < 4 GB rows, doublewrite, hang fixes
log0log.c < 4 GB rows, doublewrite, hang fixes
log0recv.c < 4 GB rows, doublewrite, hang fixes
os0file.c < 4 GB rows, doublewrite, hang fixes
page0cur.c < 4 GB rows, doublewrite, hang fixes
pars0pars.c < 4 GB rows, doublewrite, hang fixes
rem0cmp.c < 4 GB rows, doublewrite, hang fixes
rem0rec.c < 4 GB rows, doublewrite, hang fixes
row0ins.c < 4 GB rows, doublewrite, hang fixes
row0mysql.c < 4 GB rows, doublewrite, hang fixes
univ.i < 4 GB rows, doublewrite, hang fixes
data0data.ic < 4 GB rows, doublewrite, hang fixes
mach0data.ic < 4 GB rows, doublewrite, hang fixes
rem0rec.ic < 4 GB rows, doublewrite, hang fixes
row0upd.ic < 4 GB rows, doublewrite, hang fixes
trx0rec.ic < 4 GB rows, doublewrite, hang fixes
rem0cmp.h < 4 GB rows, doublewrite, hang fixes
rem0rec.h < 4 GB rows, doublewrite, hang fixes
row0ins.h < 4 GB rows, doublewrite, hang fixes
row0mysql.h < 4 GB rows, doublewrite, hang fixes
row0row.h < 4 GB rows, doublewrite, hang fixes
row0upd.h < 4 GB rows, doublewrite, hang fixes
srv0srv.h < 4 GB rows, doublewrite, hang fixes
sync0sync.h < 4 GB rows, doublewrite, hang fixes
trx0rec.h < 4 GB rows, doublewrite, hang fixes
trx0sys.h < 4 GB rows, doublewrite, hang fixes
trx0types.h < 4 GB rows, doublewrite, hang fixes
trx0undo.h < 4 GB rows, doublewrite, hang fixes
ut0dbg.h < 4 GB rows, doublewrite, hang fixes
ut0ut.h < 4 GB rows, doublewrite, hang fixes
btr0btr.h < 4 GB rows, doublewrite, hang fixes
btr0cur.h < 4 GB rows, doublewrite, hang fixes
buf0buf.h < 4 GB rows, doublewrite, hang fixes
buf0flu.h < 4 GB rows, doublewrite, hang fixes
data0data.h < 4 GB rows, doublewrite, hang fixes
dict0mem.h < 4 GB rows, doublewrite, hang fixes
fil0fil.h < 4 GB rows, doublewrite, hang fixes
fsp0fsp.h < 4 GB rows, doublewrite, hang fixes
os0file.h < 4 GB rows, doublewrite, hang fixes
innobase/include/btr0btr.h:
< 4 GB rows, doublewrite, hang fixes
innobase/include/btr0cur.h:
< 4 GB rows, doublewrite, hang fixes
innobase/include/buf0buf.h:
< 4 GB rows, doublewrite, hang fixes
innobase/include/buf0flu.h:
< 4 GB rows, doublewrite, hang fixes
innobase/include/data0data.h:
< 4 GB rows, doublewrite, hang fixes
innobase/include/dict0mem.h:
< 4 GB rows, doublewrite, hang fixes
innobase/include/fil0fil.h:
< 4 GB rows, doublewrite, hang fixes
innobase/include/fsp0fsp.h:
< 4 GB rows, doublewrite, hang fixes
innobase/include/os0file.h:
< 4 GB rows, doublewrite, hang fixes
innobase/include/rem0cmp.h:
< 4 GB rows, doublewrite, hang fixes
innobase/include/rem0rec.h:
< 4 GB rows, doublewrite, hang fixes
innobase/include/row0ins.h:
< 4 GB rows, doublewrite, hang fixes
innobase/include/row0mysql.h:
< 4 GB rows, doublewrite, hang fixes
innobase/include/row0row.h:
< 4 GB rows, doublewrite, hang fixes
innobase/include/row0upd.h:
< 4 GB rows, doublewrite, hang fixes
innobase/include/sync0sync.h:
< 4 GB rows, doublewrite, hang fixes
innobase/include/trx0rec.h:
< 4 GB rows, doublewrite, hang fixes
innobase/include/trx0sys.h:
< 4 GB rows, doublewrite, hang fixes
innobase/include/trx0types.h:
< 4 GB rows, doublewrite, hang fixes
innobase/include/trx0undo.h:
< 4 GB rows, doublewrite, hang fixes
innobase/include/ut0dbg.h:
< 4 GB rows, doublewrite, hang fixes
innobase/include/ut0ut.h:
< 4 GB rows, doublewrite, hang fixes
innobase/include/data0data.ic:
< 4 GB rows, doublewrite, hang fixes
innobase/include/mach0data.ic:
< 4 GB rows, doublewrite, hang fixes
innobase/include/rem0rec.ic:
< 4 GB rows, doublewrite, hang fixes
innobase/include/row0upd.ic:
< 4 GB rows, doublewrite, hang fixes
innobase/include/trx0rec.ic:
< 4 GB rows, doublewrite, hang fixes
innobase/include/univ.i:
< 4 GB rows, doublewrite, hang fixes
innobase/btr/btr0btr.c:
< 4 GB rows, doublewrite, hang fixes
innobase/btr/btr0cur.c:
< 4 GB rows, doublewrite, hang fixes
innobase/buf/buf0buf.c:
< 4 GB rows, doublewrite, hang fixes
innobase/buf/buf0flu.c:
< 4 GB rows, doublewrite, hang fixes
innobase/buf/buf0rea.c:
< 4 GB rows, doublewrite, hang fixes
innobase/data/data0data.c:
< 4 GB rows, doublewrite, hang fixes
innobase/fil/fil0fil.c:
< 4 GB rows, doublewrite, hang fixes
innobase/fsp/fsp0fsp.c:
< 4 GB rows, doublewrite, hang fixes
innobase/ibuf/ibuf0ibuf.c:
< 4 GB rows, doublewrite, hang fixes
innobase/lock/lock0lock.c:
< 4 GB rows, doublewrite, hang fixes
innobase/log/log0log.c:
< 4 GB rows, doublewrite, hang fixes
innobase/log/log0recv.c:
< 4 GB rows, doublewrite, hang fixes
innobase/os/os0file.c:
< 4 GB rows, doublewrite, hang fixes
innobase/page/page0cur.c:
< 4 GB rows, doublewrite, hang fixes
innobase/pars/pars0pars.c:
< 4 GB rows, doublewrite, hang fixes
innobase/rem/rem0cmp.c:
< 4 GB rows, doublewrite, hang fixes
innobase/rem/rem0rec.c:
< 4 GB rows, doublewrite, hang fixes
innobase/row/row0ins.c:
< 4 GB rows, doublewrite, hang fixes
innobase/row/row0mysql.c:
< 4 GB rows, doublewrite, hang fixes
innobase/row/row0purge.c:
< 4 GB rows, doublewrite, hang fixes
innobase/row/row0row.c:
< 4 GB rows, doublewrite, hang fixes
innobase/row/row0sel.c:
< 4 GB rows, doublewrite, hang fixes
innobase/row/row0uins.c:
< 4 GB rows, doublewrite, hang fixes
innobase/row/row0umod.c:
< 4 GB rows, doublewrite, hang fixes
innobase/row/row0undo.c:
< 4 GB rows, doublewrite, hang fixes
innobase/row/row0upd.c:
< 4 GB rows, doublewrite, hang fixes
innobase/sync/sync0rw.c:
< 4 GB rows, doublewrite, hang fixes
innobase/sync/sync0sync.c:
< 4 GB rows, doublewrite, hang fixes
innobase/trx/trx0purge.c:
< 4 GB rows, doublewrite, hang fixes
innobase/trx/trx0rec.c:
< 4 GB rows, doublewrite, hang fixes
innobase/trx/trx0sys.c:
< 4 GB rows, doublewrite, hang fixes
innobase/srv/srv0srv.c:
Support raw disk partitions as data files
innobase/srv/srv0start.c:
Support raw disk partitions as data files
innobase/include/srv0srv.h:
Support raw disk partitions as data files
2001-08-04 18:36:14 +02:00
|
|
|
#if (0 == 1) && !defined(__STDC__) && defined(UNIV_INTEL) && (UNIV_WORD_SIZE == 4) && defined(UNIV_VISUALC)
|
2001-02-17 13:19:19 +01:00
|
|
|
/* We do not use this even on Intel, because unaligned accesses may
|
|
|
|
be slow */
|
|
|
|
|
|
|
|
ulint res;
|
|
|
|
|
|
|
|
ut_ad(b);
|
|
|
|
|
|
|
|
__asm MOV EDX, b
|
|
|
|
__asm MOV ECX, DWORD PTR [EDX]
|
|
|
|
__asm BSWAP ECX /* Intel is little-endian, must swap bytes */
|
|
|
|
__asm MOV res, ECX
|
|
|
|
|
|
|
|
return(res);
|
|
|
|
#else
|
|
|
|
ut_ad(b);
|
|
|
|
return( ((ulint)(b[0]) << 24)
|
|
|
|
+ ((ulint)(b[1]) << 16)
|
|
|
|
+ ((ulint)(b[2]) << 8)
|
|
|
|
+ (ulint)(b[3])
|
|
|
|
);
|
|
|
|
#endif
|
|
|
|
}
|
|
|
|
|
|
|
|
/***********************************************************
|
|
|
|
The following function is used to store data from a ulint to memory
|
|
|
|
in standard order: we store the most significant byte to the lowest
|
|
|
|
address. */
|
|
|
|
UNIV_INLINE
|
|
|
|
void
|
|
|
|
mach_write(
|
|
|
|
/*=======*/
|
|
|
|
byte* b, /* in: pointer to 4 bytes where to store */
|
|
|
|
ulint n) /* in: ulint integer to be stored */
|
|
|
|
{
|
|
|
|
ut_ad(b);
|
|
|
|
|
|
|
|
b[0] = (byte)(n >> 24);
|
|
|
|
b[1] = (byte)(n >> 16);
|
|
|
|
b[2] = (byte)(n >> 8);
|
|
|
|
b[3] = (byte)n;
|
|
|
|
}
|
|
|
|
|
|
|
|
/************************************************************
|
|
|
|
The following function is used to fetch data from memory to a ulint.
|
|
|
|
The most significant byte is at the lowest address. */
|
|
|
|
UNIV_INLINE
|
|
|
|
ulint
|
|
|
|
mach_read(
|
|
|
|
/*======*/
|
|
|
|
/* out: ulint integer */
|
|
|
|
byte* b) /* in: pointer to 4 bytes */
|
|
|
|
{
|
|
|
|
ut_ad(b);
|
|
|
|
|
|
|
|
return( ((ulint)(b[0]) << 24)
|
|
|
|
+ ((ulint)(b[1]) << 16)
|
|
|
|
+ ((ulint)(b[2]) << 8)
|
|
|
|
+ (ulint)(b[3])
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
/*************************************************************
|
|
|
|
Writes a ulint in a compressed form where the first byte codes the
|
|
|
|
length of the stored ulint. We look at the most significant bits of
|
|
|
|
the byte. If the most significant bit is zero, it means 1-byte storage,
|
|
|
|
else if the 2nd bit is 0, it means 2-byte storage, else if 3rd is 0,
|
|
|
|
it means 3-byte storage, else if 4th is 0, it means 4-byte storage,
|
|
|
|
else the storage is 5-byte. */
|
|
|
|
UNIV_INLINE
|
|
|
|
ulint
|
|
|
|
mach_write_compressed(
|
|
|
|
/*==================*/
|
|
|
|
/* out: compressed size in bytes */
|
|
|
|
byte* b, /* in: pointer to memory where to store */
|
|
|
|
ulint n) /* in: ulint integer (< 2^32) to be stored */
|
|
|
|
{
|
|
|
|
ut_ad(b);
|
|
|
|
|
|
|
|
if (n < 0x80) {
|
|
|
|
mach_write_to_1(b, n);
|
|
|
|
return(1);
|
|
|
|
} else if (n < 0x4000) {
|
|
|
|
mach_write_to_2(b, n | 0x8000);
|
|
|
|
return(2);
|
|
|
|
} else if (n < 0x200000) {
|
|
|
|
mach_write_to_3(b, n | 0xC00000);
|
|
|
|
return(3);
|
|
|
|
} else if (n < 0x10000000) {
|
|
|
|
mach_write_to_4(b, n | 0xE0000000);
|
|
|
|
return(4);
|
|
|
|
} else {
|
|
|
|
mach_write_to_1(b, 0xF0);
|
|
|
|
mach_write_to_4(b + 1, n);
|
|
|
|
return(5);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/*************************************************************
|
|
|
|
Returns the size of a ulint when written in the compressed form. */
|
|
|
|
UNIV_INLINE
|
|
|
|
ulint
|
|
|
|
mach_get_compressed_size(
|
|
|
|
/*=====================*/
|
|
|
|
/* out: compressed size in bytes */
|
|
|
|
ulint n) /* in: ulint integer (< 2^32) to be stored */
|
|
|
|
{
|
|
|
|
if (n < 0x80) {
|
|
|
|
return(1);
|
|
|
|
} else if (n < 0x4000) {
|
|
|
|
return(2);
|
|
|
|
} else if (n < 0x200000) {
|
|
|
|
return(3);
|
|
|
|
} else if (n < 0x10000000) {
|
|
|
|
return(4);
|
|
|
|
} else {
|
|
|
|
return(5);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/*************************************************************
|
|
|
|
Reads a ulint in a compressed form. */
|
|
|
|
UNIV_INLINE
|
|
|
|
ulint
|
|
|
|
mach_read_compressed(
|
|
|
|
/*=================*/
|
|
|
|
/* out: read integer (< 2^32) */
|
|
|
|
byte* b) /* in: pointer to memory from where to read */
|
|
|
|
{
|
|
|
|
ulint flag;
|
|
|
|
|
|
|
|
ut_ad(b);
|
|
|
|
|
|
|
|
flag = mach_read_from_1(b);
|
|
|
|
|
|
|
|
if (flag < 0x80) {
|
|
|
|
return(flag);
|
|
|
|
} else if (flag < 0xC0) {
|
|
|
|
return(mach_read_from_2(b) & 0x7FFF);
|
|
|
|
} else if (flag < 0xE0) {
|
|
|
|
return(mach_read_from_3(b) & 0x3FFFFF);
|
|
|
|
} else if (flag < 0xF0) {
|
|
|
|
return(mach_read_from_4(b) & 0x1FFFFFFF);
|
|
|
|
} else {
|
|
|
|
ut_ad(flag == 0xF0);
|
|
|
|
return(mach_read_from_4(b + 1));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/***********************************************************
|
|
|
|
The following function is used to store data in 8 consecutive
|
|
|
|
bytes. We store the most significant byte to the lowest address. */
|
|
|
|
UNIV_INLINE
|
|
|
|
void
|
|
|
|
mach_write_to_8(
|
|
|
|
/*============*/
|
|
|
|
byte* b, /* in: pointer to 8 bytes where to store */
|
|
|
|
dulint n) /* in: dulint integer to be stored */
|
|
|
|
{
|
|
|
|
ut_ad(b);
|
|
|
|
|
|
|
|
mach_write_to_4(b, ut_dulint_get_high(n));
|
|
|
|
mach_write_to_4(b + 4, ut_dulint_get_low(n));
|
|
|
|
}
|
|
|
|
|
|
|
|
/************************************************************
|
|
|
|
The following function is used to fetch data from 8 consecutive
|
|
|
|
bytes. The most significant byte is at the lowest address. */
|
|
|
|
UNIV_INLINE
|
|
|
|
dulint
|
|
|
|
mach_read_from_8(
|
|
|
|
/*=============*/
|
|
|
|
/* out: dulint integer */
|
|
|
|
byte* b) /* in: pointer to 8 bytes */
|
|
|
|
{
|
|
|
|
ulint high;
|
|
|
|
ulint low;
|
|
|
|
|
|
|
|
ut_ad(b);
|
|
|
|
|
|
|
|
high = mach_read_from_4(b);
|
|
|
|
low = mach_read_from_4(b + 4);
|
|
|
|
|
|
|
|
return(ut_dulint_create(high, low));
|
|
|
|
}
|
|
|
|
|
|
|
|
/***********************************************************
|
|
|
|
The following function is used to store data in 7 consecutive
|
|
|
|
bytes. We store the most significant byte to the lowest address. */
|
|
|
|
UNIV_INLINE
|
|
|
|
void
|
|
|
|
mach_write_to_7(
|
|
|
|
/*============*/
|
|
|
|
byte* b, /* in: pointer to 7 bytes where to store */
|
|
|
|
dulint n) /* in: dulint integer to be stored */
|
|
|
|
{
|
|
|
|
ut_ad(b);
|
|
|
|
|
|
|
|
mach_write_to_3(b, ut_dulint_get_high(n));
|
|
|
|
mach_write_to_4(b + 3, ut_dulint_get_low(n));
|
|
|
|
}
|
|
|
|
|
|
|
|
/************************************************************
|
|
|
|
The following function is used to fetch data from 7 consecutive
|
|
|
|
bytes. The most significant byte is at the lowest address. */
|
|
|
|
UNIV_INLINE
|
|
|
|
dulint
|
|
|
|
mach_read_from_7(
|
|
|
|
/*=============*/
|
|
|
|
/* out: dulint integer */
|
|
|
|
byte* b) /* in: pointer to 7 bytes */
|
|
|
|
{
|
|
|
|
ulint high;
|
|
|
|
ulint low;
|
|
|
|
|
|
|
|
ut_ad(b);
|
|
|
|
|
|
|
|
high = mach_read_from_3(b);
|
|
|
|
low = mach_read_from_4(b + 3);
|
|
|
|
|
|
|
|
return(ut_dulint_create(high, low));
|
|
|
|
}
|
|
|
|
|
|
|
|
/***********************************************************
|
|
|
|
The following function is used to store data in 6 consecutive
|
|
|
|
bytes. We store the most significant byte to the lowest address. */
|
|
|
|
UNIV_INLINE
|
|
|
|
void
|
|
|
|
mach_write_to_6(
|
|
|
|
/*============*/
|
|
|
|
byte* b, /* in: pointer to 6 bytes where to store */
|
|
|
|
dulint n) /* in: dulint integer to be stored */
|
|
|
|
{
|
|
|
|
ut_ad(b);
|
|
|
|
|
|
|
|
mach_write_to_2(b, ut_dulint_get_high(n));
|
|
|
|
mach_write_to_4(b + 2, ut_dulint_get_low(n));
|
|
|
|
}
|
|
|
|
|
|
|
|
/************************************************************
|
|
|
|
The following function is used to fetch data from 6 consecutive
|
|
|
|
bytes. The most significant byte is at the lowest address. */
|
|
|
|
UNIV_INLINE
|
|
|
|
dulint
|
|
|
|
mach_read_from_6(
|
|
|
|
/*=============*/
|
|
|
|
/* out: dulint integer */
|
|
|
|
byte* b) /* in: pointer to 7 bytes */
|
|
|
|
{
|
|
|
|
ulint high;
|
|
|
|
ulint low;
|
|
|
|
|
|
|
|
ut_ad(b);
|
|
|
|
|
|
|
|
high = mach_read_from_2(b);
|
|
|
|
low = mach_read_from_4(b + 2);
|
|
|
|
|
|
|
|
return(ut_dulint_create(high, low));
|
|
|
|
}
|
|
|
|
|
|
|
|
/*************************************************************
|
|
|
|
Writes a dulint in a compressed form. */
|
|
|
|
UNIV_INLINE
|
|
|
|
ulint
|
|
|
|
mach_dulint_write_compressed(
|
|
|
|
/*=========================*/
|
|
|
|
/* out: size in bytes */
|
|
|
|
byte* b, /* in: pointer to memory where to store */
|
|
|
|
dulint n) /* in: dulint integer to be stored */
|
|
|
|
{
|
|
|
|
ulint size;
|
|
|
|
|
|
|
|
ut_ad(b);
|
|
|
|
|
|
|
|
size = mach_write_compressed(b, ut_dulint_get_high(n));
|
|
|
|
mach_write_to_4(b + size, ut_dulint_get_low(n));
|
|
|
|
|
|
|
|
return(size + 4);
|
|
|
|
}
|
|
|
|
|
|
|
|
/*************************************************************
|
|
|
|
Returns the size of a dulint when written in the compressed form. */
|
|
|
|
UNIV_INLINE
|
|
|
|
ulint
|
|
|
|
mach_dulint_get_compressed_size(
|
|
|
|
/*============================*/
|
|
|
|
/* out: compressed size in bytes */
|
|
|
|
dulint n) /* in: dulint integer to be stored */
|
|
|
|
{
|
|
|
|
return(4 + mach_get_compressed_size(ut_dulint_get_high(n)));
|
|
|
|
}
|
|
|
|
|
|
|
|
/*************************************************************
|
|
|
|
Reads a dulint in a compressed form. */
|
|
|
|
UNIV_INLINE
|
|
|
|
dulint
|
|
|
|
mach_dulint_read_compressed(
|
|
|
|
/*========================*/
|
|
|
|
/* out: read dulint */
|
|
|
|
byte* b) /* in: pointer to memory from where to read */
|
|
|
|
{
|
|
|
|
ulint high;
|
|
|
|
ulint low;
|
|
|
|
ulint size;
|
|
|
|
|
|
|
|
ut_ad(b);
|
|
|
|
|
|
|
|
high = mach_read_compressed(b);
|
|
|
|
|
|
|
|
size = mach_get_compressed_size(high);
|
|
|
|
|
|
|
|
low = mach_read_from_4(b + size);
|
|
|
|
|
|
|
|
return(ut_dulint_create(high, low));
|
|
|
|
}
|
|
|
|
|
|
|
|
/*************************************************************
|
|
|
|
Writes a dulint in a compressed form. */
|
|
|
|
UNIV_INLINE
|
|
|
|
ulint
|
|
|
|
mach_dulint_write_much_compressed(
|
|
|
|
/*==============================*/
|
|
|
|
/* out: size in bytes */
|
|
|
|
byte* b, /* in: pointer to memory where to store */
|
|
|
|
dulint n) /* in: dulint integer to be stored */
|
|
|
|
{
|
|
|
|
ulint size;
|
|
|
|
|
|
|
|
ut_ad(b);
|
|
|
|
|
|
|
|
if (ut_dulint_get_high(n) == 0) {
|
|
|
|
return(mach_write_compressed(b, ut_dulint_get_low(n)));
|
|
|
|
}
|
|
|
|
|
|
|
|
*b = 0xFF;
|
|
|
|
size = 1 + mach_write_compressed(b + 1, ut_dulint_get_high(n));
|
|
|
|
|
|
|
|
size += mach_write_compressed(b + size, ut_dulint_get_low(n));
|
|
|
|
|
|
|
|
return(size);
|
|
|
|
}
|
|
|
|
|
|
|
|
/*************************************************************
|
|
|
|
Returns the size of a dulint when written in the compressed form. */
|
|
|
|
UNIV_INLINE
|
|
|
|
ulint
|
|
|
|
mach_dulint_get_much_compressed_size(
|
|
|
|
/*=================================*/
|
|
|
|
/* out: compressed size in bytes */
|
|
|
|
dulint n) /* in: dulint integer to be stored */
|
|
|
|
{
|
|
|
|
if (0 == ut_dulint_get_high(n)) {
|
|
|
|
return(mach_get_compressed_size(ut_dulint_get_low(n)));
|
|
|
|
}
|
|
|
|
|
|
|
|
return(1 + mach_get_compressed_size(ut_dulint_get_high(n))
|
|
|
|
+ mach_get_compressed_size(ut_dulint_get_low(n)));
|
|
|
|
}
|
|
|
|
|
|
|
|
/*************************************************************
|
|
|
|
Reads a dulint in a compressed form. */
|
|
|
|
UNIV_INLINE
|
|
|
|
dulint
|
|
|
|
mach_dulint_read_much_compressed(
|
|
|
|
/*=============================*/
|
|
|
|
/* out: read dulint */
|
|
|
|
byte* b) /* in: pointer to memory from where to read */
|
|
|
|
{
|
|
|
|
ulint high;
|
|
|
|
ulint low;
|
|
|
|
ulint size;
|
|
|
|
|
|
|
|
ut_ad(b);
|
|
|
|
|
|
|
|
if (*b != 0xFF) {
|
|
|
|
high = 0;
|
|
|
|
size = 0;
|
|
|
|
} else {
|
|
|
|
high = mach_read_compressed(b + 1);
|
|
|
|
|
|
|
|
size = 1 + mach_get_compressed_size(high);
|
|
|
|
}
|
|
|
|
|
|
|
|
low = mach_read_compressed(b + size);
|
|
|
|
|
|
|
|
return(ut_dulint_create(high, low));
|
|
|
|
}
|
|
|
|
|
|
|
|
/*************************************************************
|
|
|
|
Reads a double. It is stored in a little-endian format. */
|
|
|
|
UNIV_INLINE
|
|
|
|
double
|
|
|
|
mach_double_read(
|
|
|
|
/*=============*/
|
|
|
|
/* out: double read */
|
|
|
|
byte* b) /* in: pointer to memory from where to read */
|
|
|
|
{
|
|
|
|
double d;
|
|
|
|
ulint i;
|
|
|
|
byte* ptr;
|
|
|
|
|
|
|
|
ptr = (byte*)&d;
|
|
|
|
|
|
|
|
for (i = 0; i < sizeof(double); i++) {
|
|
|
|
#ifdef WORDS_BIGENDIAN
|
|
|
|
ptr[sizeof(double) - i - 1] = b[i];
|
|
|
|
#else
|
|
|
|
ptr[i] = b[i];
|
|
|
|
#endif
|
|
|
|
}
|
|
|
|
|
|
|
|
return(d);
|
|
|
|
}
|
|
|
|
|
|
|
|
/*************************************************************
|
|
|
|
Writes a double. It is stored in a little-endian format. */
|
|
|
|
UNIV_INLINE
|
|
|
|
void
|
|
|
|
mach_double_write(
|
|
|
|
/*==============*/
|
|
|
|
byte* b, /* in: pointer to memory where to write */
|
|
|
|
double d) /* in: double */
|
|
|
|
{
|
|
|
|
ulint i;
|
|
|
|
byte* ptr;
|
|
|
|
|
|
|
|
ptr = (byte*)&d;
|
|
|
|
|
|
|
|
for (i = 0; i < sizeof(double); i++) {
|
|
|
|
#ifdef WORDS_BIGENDIAN
|
|
|
|
b[i] = ptr[sizeof(double) - i - 1];
|
|
|
|
#else
|
|
|
|
b[i] = ptr[i];
|
|
|
|
#endif
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/*************************************************************
|
|
|
|
Reads a float. It is stored in a little-endian format. */
|
|
|
|
UNIV_INLINE
|
|
|
|
float
|
|
|
|
mach_float_read(
|
|
|
|
/*=============*/
|
|
|
|
/* out: float read */
|
|
|
|
byte* b) /* in: pointer to memory from where to read */
|
|
|
|
{
|
|
|
|
float d;
|
|
|
|
ulint i;
|
|
|
|
byte* ptr;
|
|
|
|
|
|
|
|
ptr = (byte*)&d;
|
|
|
|
|
|
|
|
for (i = 0; i < sizeof(float); i++) {
|
|
|
|
#ifdef WORDS_BIGENDIAN
|
|
|
|
ptr[sizeof(float) - i - 1] = b[i];
|
|
|
|
#else
|
|
|
|
ptr[i] = b[i];
|
|
|
|
#endif
|
|
|
|
}
|
|
|
|
|
|
|
|
return(d);
|
|
|
|
}
|
|
|
|
|
|
|
|
/*************************************************************
|
|
|
|
Writes a float. It is stored in a little-endian format. */
|
|
|
|
UNIV_INLINE
|
|
|
|
void
|
|
|
|
mach_float_write(
|
|
|
|
/*==============*/
|
|
|
|
byte* b, /* in: pointer to memory where to write */
|
|
|
|
float d) /* in: float */
|
|
|
|
{
|
|
|
|
ulint i;
|
|
|
|
byte* ptr;
|
|
|
|
|
|
|
|
ptr = (byte*)&d;
|
|
|
|
|
|
|
|
for (i = 0; i < sizeof(float); i++) {
|
|
|
|
#ifdef WORDS_BIGENDIAN
|
|
|
|
b[i] = ptr[sizeof(float) - i - 1];
|
|
|
|
#else
|
|
|
|
b[i] = ptr[i];
|
|
|
|
#endif
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/*************************************************************
|
|
|
|
Reads a ulint stored in the little-endian format. */
|
|
|
|
UNIV_INLINE
|
|
|
|
ulint
|
|
|
|
mach_read_from_n_little_endian(
|
|
|
|
/*===========================*/
|
|
|
|
/* out: unsigned long int */
|
|
|
|
byte* buf, /* in: from where to read */
|
|
|
|
ulint buf_size) /* in: from how many bytes to read */
|
|
|
|
{
|
|
|
|
ulint n = 0;
|
|
|
|
byte* ptr;
|
|
|
|
|
|
|
|
ut_ad(buf_size <= sizeof(ulint));
|
|
|
|
ut_ad(buf_size > 0);
|
|
|
|
|
|
|
|
ptr = buf + buf_size;
|
|
|
|
|
|
|
|
for (;;) {
|
|
|
|
ptr--;
|
|
|
|
|
|
|
|
n = n << 8;
|
|
|
|
|
|
|
|
n += (ulint)(*ptr);
|
|
|
|
|
|
|
|
if (ptr == buf) {
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return(n);
|
|
|
|
}
|
|
|
|
|
|
|
|
/*************************************************************
|
|
|
|
Writes a ulint in the little-endian format. */
|
|
|
|
UNIV_INLINE
|
|
|
|
void
|
|
|
|
mach_write_to_n_little_endian(
|
|
|
|
/*==========================*/
|
|
|
|
byte* dest, /* in: where to write */
|
|
|
|
ulint dest_size, /* in: into how many bytes to write */
|
|
|
|
ulint n) /* in: unsigned long int to write */
|
|
|
|
{
|
|
|
|
byte* end;
|
|
|
|
|
|
|
|
ut_ad(dest_size <= sizeof(ulint));
|
|
|
|
ut_ad(dest_size > 0);
|
|
|
|
|
|
|
|
end = dest + dest_size;
|
|
|
|
|
|
|
|
for (;;) {
|
|
|
|
*dest = (byte)(n & 0xFF);
|
|
|
|
|
|
|
|
n = n >> 8;
|
|
|
|
|
|
|
|
dest++;
|
|
|
|
|
|
|
|
if (dest == end) {
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
ut_ad(n == 0);
|
|
|
|
}
|
|
|
|
|
|
|
|
/*************************************************************
|
|
|
|
Reads a ulint stored in the little-endian format. */
|
|
|
|
UNIV_INLINE
|
|
|
|
ulint
|
|
|
|
mach_read_from_2_little_endian(
|
|
|
|
/*===========================*/
|
|
|
|
/* out: unsigned long int */
|
|
|
|
byte* buf) /* in: from where to read */
|
|
|
|
{
|
|
|
|
return((ulint)(*buf) + ((ulint)(*(buf + 1))) * 256);
|
|
|
|
}
|
|
|
|
|
|
|
|
/*************************************************************
|
|
|
|
Writes a ulint in the little-endian format. */
|
|
|
|
UNIV_INLINE
|
|
|
|
void
|
|
|
|
mach_write_to_2_little_endian(
|
|
|
|
/*==========================*/
|
|
|
|
byte* dest, /* in: where to write */
|
|
|
|
ulint n) /* in: unsigned long int to write */
|
|
|
|
{
|
|
|
|
ut_ad(n < 256 * 256);
|
|
|
|
|
|
|
|
*dest = (byte)(n & 0xFF);
|
|
|
|
|
|
|
|
n = n >> 8;
|
|
|
|
dest++;
|
|
|
|
|
|
|
|
*dest = (byte)(n & 0xFF);
|
|
|
|
}
|
|
|
|
|