2001-02-17 14:19:19 +02:00
|
|
|
/**********************************************************************
|
|
|
|
Utilities for byte operations
|
|
|
|
|
|
|
|
(c) 1994, 1995 Innobase Oy
|
|
|
|
|
|
|
|
Created 1/20/1994 Heikki Tuuri
|
|
|
|
***********************************************************************/
|
|
|
|
|
|
|
|
#ifndef ut0byte_h
|
|
|
|
#define ut0byte_h
|
|
|
|
|
|
|
|
|
|
|
|
#include "univ.i"
|
|
|
|
|
|
|
|
/* Type definition for a 64-bit unsigned integer, which works also
|
|
|
|
in 32-bit machines. NOTE! Access the fields only with the accessor
|
|
|
|
functions. This definition appears here only for the compiler to
|
|
|
|
know the size of a dulint. */
|
|
|
|
|
|
|
|
typedef struct dulint_struct dulint;
|
|
|
|
struct dulint_struct{
|
|
|
|
ulint high; /* most significant 32 bits */
|
|
|
|
ulint low; /* least significant 32 bits */
|
|
|
|
};
|
|
|
|
|
|
|
|
/* Zero value for a dulint */
|
|
|
|
extern dulint ut_dulint_zero;
|
|
|
|
|
|
|
|
/* Maximum value for a dulint */
|
|
|
|
extern dulint ut_dulint_max;
|
|
|
|
|
|
|
|
/***********************************************************
|
|
|
|
Creates a 64-bit dulint out of two ulints. */
|
|
|
|
UNIV_INLINE
|
|
|
|
dulint
|
|
|
|
ut_dulint_create(
|
|
|
|
/*=============*/
|
|
|
|
/* out: created dulint */
|
|
|
|
ulint high, /* in: high-order 32 bits */
|
|
|
|
ulint low); /* in: low-order 32 bits */
|
|
|
|
/***********************************************************
|
|
|
|
Gets the high-order 32 bits of a dulint. */
|
|
|
|
UNIV_INLINE
|
|
|
|
ulint
|
|
|
|
ut_dulint_get_high(
|
|
|
|
/*===============*/
|
|
|
|
/* out: 32 bits in ulint */
|
|
|
|
dulint d); /* in: dulint */
|
|
|
|
/***********************************************************
|
|
|
|
Gets the low-order 32 bits of a dulint. */
|
|
|
|
UNIV_INLINE
|
|
|
|
ulint
|
|
|
|
ut_dulint_get_low(
|
|
|
|
/*==============*/
|
|
|
|
/* out: 32 bits in ulint */
|
|
|
|
dulint d); /* in: dulint */
|
|
|
|
/***********************************************************
|
2002-03-21 18:03:09 +02:00
|
|
|
Converts a dulint (a struct of 2 ulints) to ib_longlong, which is a 64-bit
|
|
|
|
integer type. */
|
|
|
|
UNIV_INLINE
|
|
|
|
ib_longlong
|
|
|
|
ut_conv_dulint_to_longlong(
|
|
|
|
/*=======================*/
|
|
|
|
/* out: value in ib_longlong type */
|
|
|
|
dulint d); /* in: dulint */
|
|
|
|
/***********************************************************
|
2001-02-17 14:19:19 +02:00
|
|
|
Tests if a dulint is zero. */
|
|
|
|
UNIV_INLINE
|
|
|
|
ibool
|
|
|
|
ut_dulint_is_zero(
|
|
|
|
/*==============*/
|
|
|
|
/* out: TRUE if zero */
|
|
|
|
dulint a); /* in: dulint */
|
|
|
|
/***********************************************************
|
|
|
|
Compares two dulints. */
|
|
|
|
UNIV_INLINE
|
|
|
|
int
|
|
|
|
ut_dulint_cmp(
|
|
|
|
/*==========*/
|
|
|
|
/* out: -1 if a < b, 0 if a == b,
|
|
|
|
1 if a > b */
|
|
|
|
dulint a, /* in: dulint */
|
|
|
|
dulint b); /* in: dulint */
|
|
|
|
/***********************************************************
|
|
|
|
Calculates the max of two dulints. */
|
|
|
|
UNIV_INLINE
|
|
|
|
dulint
|
|
|
|
ut_dulint_get_max(
|
|
|
|
/*==============*/
|
|
|
|
/* out: max(a, b) */
|
|
|
|
dulint a, /* in: dulint */
|
|
|
|
dulint b); /* in: dulint */
|
|
|
|
/***********************************************************
|
|
|
|
Calculates the min of two dulints. */
|
|
|
|
UNIV_INLINE
|
|
|
|
dulint
|
|
|
|
ut_dulint_get_min(
|
|
|
|
/*==============*/
|
|
|
|
/* out: min(a, b) */
|
|
|
|
dulint a, /* in: dulint */
|
|
|
|
dulint b); /* in: dulint */
|
|
|
|
/***********************************************************
|
|
|
|
Adds a ulint to a dulint. */
|
|
|
|
UNIV_INLINE
|
|
|
|
dulint
|
|
|
|
ut_dulint_add(
|
|
|
|
/*==========*/
|
|
|
|
/* out: sum a + b */
|
|
|
|
dulint a, /* in: dulint */
|
|
|
|
ulint b); /* in: ulint */
|
|
|
|
/***********************************************************
|
|
|
|
Subtracts a ulint from a dulint. */
|
|
|
|
UNIV_INLINE
|
|
|
|
dulint
|
|
|
|
ut_dulint_subtract(
|
|
|
|
/*===============*/
|
|
|
|
/* out: a - b */
|
|
|
|
dulint a, /* in: dulint */
|
|
|
|
ulint b); /* in: ulint, b <= a */
|
|
|
|
/***********************************************************
|
|
|
|
Subtracts a dulint from another. NOTE that the difference must be positive
|
|
|
|
and smaller that 4G. */
|
|
|
|
UNIV_INLINE
|
|
|
|
ulint
|
|
|
|
ut_dulint_minus(
|
|
|
|
/*============*/
|
|
|
|
/* out: a - b */
|
|
|
|
dulint a, /* in: dulint; NOTE a must be >= b and at most
|
|
|
|
2 to power 32 - 1 greater */
|
|
|
|
dulint b); /* in: dulint */
|
|
|
|
/************************************************************
|
|
|
|
Rounds a dulint downward to a multiple of a power of 2. */
|
|
|
|
UNIV_INLINE
|
|
|
|
dulint
|
|
|
|
ut_dulint_align_down(
|
|
|
|
/*=================*/
|
|
|
|
/* out: rounded value */
|
|
|
|
dulint n, /* in: number to be rounded */
|
|
|
|
ulint align_no); /* in: align by this number which must be a
|
|
|
|
power of 2 */
|
|
|
|
/************************************************************
|
|
|
|
Rounds a dulint upward to a multiple of a power of 2. */
|
|
|
|
UNIV_INLINE
|
|
|
|
dulint
|
|
|
|
ut_dulint_align_up(
|
|
|
|
/*===============*/
|
|
|
|
/* out: rounded value */
|
|
|
|
dulint n, /* in: number to be rounded */
|
|
|
|
ulint align_no); /* in: align by this number which must be a
|
|
|
|
power of 2 */
|
|
|
|
/***********************************************************
|
|
|
|
Increments a dulint variable by 1. */
|
|
|
|
#define UT_DULINT_INC(D)\
|
|
|
|
{\
|
2003-10-07 17:28:59 +03:00
|
|
|
if ((D).low == 0xFFFFFFFFUL) {\
|
2001-02-17 14:19:19 +02:00
|
|
|
(D).high = (D).high + 1;\
|
|
|
|
(D).low = 0;\
|
|
|
|
} else {\
|
|
|
|
(D).low = (D).low + 1;\
|
|
|
|
}\
|
|
|
|
}
|
|
|
|
/***********************************************************
|
|
|
|
Tests if two dulints are equal. */
|
|
|
|
#define UT_DULINT_EQ(D1, D2) (((D1).low == (D2).low)\
|
|
|
|
&& ((D1).high == (D2).high))
|
|
|
|
/****************************************************************
|
|
|
|
Sort function for dulint arrays. */
|
|
|
|
void
|
|
|
|
ut_dulint_sort(dulint* arr, dulint* aux_arr, ulint low, ulint high);
|
|
|
|
/*===============================================================*/
|
|
|
|
/************************************************************
|
|
|
|
The following function calculates the value of an integer n rounded
|
|
|
|
to the least product of align_no which is >= n. align_no has to be a
|
|
|
|
power of 2. */
|
|
|
|
UNIV_INLINE
|
|
|
|
ulint
|
|
|
|
ut_calc_align(
|
|
|
|
/*==========*/
|
|
|
|
/* out: rounded value */
|
|
|
|
ulint n, /* in: number to be rounded */
|
|
|
|
ulint align_no); /* in: align by this number */
|
|
|
|
/************************************************************
|
|
|
|
The following function calculates the value of an integer n rounded
|
|
|
|
to the biggest product of align_no which is <= n. align_no has to be a
|
|
|
|
power of 2. */
|
|
|
|
UNIV_INLINE
|
|
|
|
ulint
|
|
|
|
ut_calc_align_down(
|
|
|
|
/*===============*/
|
|
|
|
/* out: rounded value */
|
|
|
|
ulint n, /* in: number to be rounded */
|
|
|
|
ulint align_no); /* in: align by this number */
|
|
|
|
/*************************************************************
|
|
|
|
The following function rounds up a pointer to the nearest aligned address. */
|
|
|
|
UNIV_INLINE
|
|
|
|
void*
|
|
|
|
ut_align(
|
|
|
|
/*=====*/
|
|
|
|
/* out: aligned pointer */
|
|
|
|
void* ptr, /* in: pointer */
|
|
|
|
ulint align_no); /* in: align by this number */
|
|
|
|
/*************************************************************
|
|
|
|
The following function rounds down a pointer to the nearest
|
|
|
|
aligned address. */
|
|
|
|
UNIV_INLINE
|
|
|
|
void*
|
|
|
|
ut_align_down(
|
|
|
|
/*==========*/
|
|
|
|
/* out: aligned pointer */
|
|
|
|
void* ptr, /* in: pointer */
|
|
|
|
ulint align_no); /* in: align by this number */
|
|
|
|
/*********************************************************************
|
|
|
|
Gets the nth bit of a ulint. */
|
|
|
|
UNIV_INLINE
|
|
|
|
ibool
|
|
|
|
ut_bit_get_nth(
|
|
|
|
/*===========*/
|
|
|
|
/* out: TRUE if nth bit is 1; 0th bit is defined to
|
|
|
|
be the least significant */
|
|
|
|
ulint a, /* in: ulint */
|
|
|
|
ulint n); /* in: nth bit requested */
|
|
|
|
/*********************************************************************
|
|
|
|
Sets the nth bit of a ulint. */
|
|
|
|
UNIV_INLINE
|
|
|
|
ulint
|
|
|
|
ut_bit_set_nth(
|
|
|
|
/*===========*/
|
|
|
|
/* out: the ulint with the bit set as requested */
|
|
|
|
ulint a, /* in: ulint */
|
|
|
|
ulint n, /* in: nth bit requested */
|
|
|
|
ibool val); /* in: value for the bit to set */
|
2001-12-11 22:45:32 +02:00
|
|
|
/****************************************************************
|
|
|
|
Copies a string to a memory location, setting characters to lower case. */
|
|
|
|
|
|
|
|
void
|
|
|
|
ut_cpy_in_lower_case(
|
|
|
|
/*=================*/
|
InnoDB cleanup: fixing buffer overflows and quoting of quotes
innobase/dict/dict0crea.c:
Remove unneeded prototypes for static functions
Remove unused parameters from some functions
Replace some assertions with compile-time checks
dict_create_add_foreigns_to_dictionary():
allocate space dynamically for the SQL, and quote quotes
innobase/dict/dict0dict.c:
Remove unnecessary prototypes for static functions
dict_tables_have_same_db(): Remove length limitation
dict_remove_db_name(): Use strchr()
dict_get_db_name_len(): Use strchr()
Replace mem_heap_alloc()+strlen()+memcpy() with mem_heap_strdup()
Remove unnecessary strlen() calls
Allocate space dynamically for generated strings
dict_scan_id(): allow quotes within quoted strings
innobase/dict/dict0load.c:
Remove unnecessary strlen() calls
Replace mem_heap_alloc()+strlen()+memcpy() with mem_heap_strdup()
innobase/dict/dict0mem.c:
Replace mem_heap_alloc()+strlen()+memcpy() with mem_heap_strdup()
innobase/eval/eval0eval.c:
Make TO_CHAR() work with any machine word width
innobase/fil/fil0fil.c:
Replace mem_alloc()+strlen()+strcpy() with mem_strdup()
innobase/ibuf/ibuf0ibuf.c:
Make some global variables static
Add #ifdef UNIV_IBUF_DEBUG around debug statements
innobase/include/data0data.h:
Add #ifdef UNIV_DEBUG around dtuple_validate()
innobase/include/data0data.ic:
Replace = with == in ut_ad(tuple->magic_n == DATA_TUPLE_MAGIC_N)
innobase/include/dict0dict.h:
Add const qualifiers
innobase/include/lock0lock.h:
Add UL suffixes to unsigned long masks
innobase/include/log0log.h:
Remove unused parameter "type" of log_group_write_buf()
innobase/include/mem0mem.h:
Add mem_strdup(), mem_strdupl(), mem_strdupq(), mem_heap_strdup(),
and mem_heap_strdupl()
innobase/include/mem0mem.ic:
Add mem_strdup(), mem_strdupl(), mem_strdupq(), mem_heap_strdup(),
and mem_heap_strdupl()
innobase/include/row0uins.h:
Remove unused parameter "thr" of row_undo_ins()
innobase/include/row0undo.h:
Remvoe unused parameter "thr" of row_undo_search_clust_to_pcur()
innobase/include/ut0byte.h:
Add const qualifier to ut_cpy_in_lower_case()
Remove parameter "len" of ut_cmp_in_lower_case()
innobase/include/ut0mem.h:
Add ut_strlenq(), ut_strcpyq() and ut_memcpyq()
innobase/include/ut0mem.ic:
Add ut_strlenq()
innobase/include/ut0ut.h:
Declare ut_sprintf() as a printf-style function
innobase/lock/lock0lock.c:
lock_clust_rec_modify_check_and_lock(): Remove unused variable "trx"
innobase/log/log0log.c:
Remove unused parameters
innobase/log/log0recv.c:
Remove parameter "type" from log_group_write_buf()
innobase/mem/mem0mem.c:
Simplify the initialization of block->init_block
innobase/mtr/mtr0log.c:
Add a debug assertion to mlog_parse_initial_log_record()
innobase/page/page0cur.c:
Add debug assertion to page_cur_insert_rec_write_log()
Remove hard-coded buffer size in page_cur_parse_insert_rec()
innobase/page/page0page.c:
Remove unneeded variable rec
innobase/pars/pars0opt.c:
Correct a potential buffer overflow
innobase/pars/pars0pars.c:
Replace mem_heap_alloc()+strlen()+memcpy() with mem_heap_strdup()
innobase/row/row0ins.c:
Replace parameter "thr" with "trx" in row_ins_foreign_report_add_err()
Remove unnecessary strlen() call
Use strchr()
innobase/row/row0mysql.c:
Add row_mysql_is_recovered_tmp_table()
Add row_mysql_is_system_table()
Compare reserved table names with exact match
Use strstr() and strchr() and mem_strdupl()
Compute space needed for generated SQL, and allocate it dynamically
innobase/row/row0purge.c:
Remove unused parameters "thr"
innobase/row/row0row.c:
Simplify row_get_clust_rec()
innobase/row/row0uins.c:
Remove unused parameters "thr"
innobase/row/row0umod.c:
Remove unused variable "index"
row_undo_mod_del_unmark_sec_and_undo_update():
Remove parameter "node" and variable "rec"
Remove unused parameters "thr"
innobase/row/row0undo.c:
Remove unused parameters "thr"
innobase/srv/srv0srv.c:
Replace UT_NOT_USED() with __attribute__((unused))
innobase/srv/srv0start.c:
Remove unnecessary strlen() calls
Remove unused parameter "create_new_db" of open_or_create_log_file()
innobase/trx/trx0roll.c:
Replace mem_alloc()+strlen()+memcpy() with mem_strdup()
innobase/trx/trx0sys.c:
Remove unnecessary strlen() call
innobase/ut/ut0byte.c:
Add const qualifier to ut_cpy_in_lower_case()
Remove parameter "len" of ut_cmp_in_lower_case()
innobase/ut/ut0mem.c:
Add ut_strlenq() and ut_memcpyq()
sql/ha_innodb.cc:
Remove parameter "len" of ut_cmp_in_lower_case()
2004-04-01 16:51:34 +03:00
|
|
|
char* dest, /* in: destination */
|
|
|
|
const char* source, /* in: source */
|
|
|
|
ulint len); /* in: string length */
|
2001-12-11 22:45:32 +02:00
|
|
|
/****************************************************************
|
|
|
|
Compares two strings when converted to lower case. */
|
|
|
|
|
|
|
|
int
|
|
|
|
ut_cmp_in_lower_case(
|
|
|
|
/*=================*/
|
InnoDB cleanup: fixing buffer overflows and quoting of quotes
innobase/dict/dict0crea.c:
Remove unneeded prototypes for static functions
Remove unused parameters from some functions
Replace some assertions with compile-time checks
dict_create_add_foreigns_to_dictionary():
allocate space dynamically for the SQL, and quote quotes
innobase/dict/dict0dict.c:
Remove unnecessary prototypes for static functions
dict_tables_have_same_db(): Remove length limitation
dict_remove_db_name(): Use strchr()
dict_get_db_name_len(): Use strchr()
Replace mem_heap_alloc()+strlen()+memcpy() with mem_heap_strdup()
Remove unnecessary strlen() calls
Allocate space dynamically for generated strings
dict_scan_id(): allow quotes within quoted strings
innobase/dict/dict0load.c:
Remove unnecessary strlen() calls
Replace mem_heap_alloc()+strlen()+memcpy() with mem_heap_strdup()
innobase/dict/dict0mem.c:
Replace mem_heap_alloc()+strlen()+memcpy() with mem_heap_strdup()
innobase/eval/eval0eval.c:
Make TO_CHAR() work with any machine word width
innobase/fil/fil0fil.c:
Replace mem_alloc()+strlen()+strcpy() with mem_strdup()
innobase/ibuf/ibuf0ibuf.c:
Make some global variables static
Add #ifdef UNIV_IBUF_DEBUG around debug statements
innobase/include/data0data.h:
Add #ifdef UNIV_DEBUG around dtuple_validate()
innobase/include/data0data.ic:
Replace = with == in ut_ad(tuple->magic_n == DATA_TUPLE_MAGIC_N)
innobase/include/dict0dict.h:
Add const qualifiers
innobase/include/lock0lock.h:
Add UL suffixes to unsigned long masks
innobase/include/log0log.h:
Remove unused parameter "type" of log_group_write_buf()
innobase/include/mem0mem.h:
Add mem_strdup(), mem_strdupl(), mem_strdupq(), mem_heap_strdup(),
and mem_heap_strdupl()
innobase/include/mem0mem.ic:
Add mem_strdup(), mem_strdupl(), mem_strdupq(), mem_heap_strdup(),
and mem_heap_strdupl()
innobase/include/row0uins.h:
Remove unused parameter "thr" of row_undo_ins()
innobase/include/row0undo.h:
Remvoe unused parameter "thr" of row_undo_search_clust_to_pcur()
innobase/include/ut0byte.h:
Add const qualifier to ut_cpy_in_lower_case()
Remove parameter "len" of ut_cmp_in_lower_case()
innobase/include/ut0mem.h:
Add ut_strlenq(), ut_strcpyq() and ut_memcpyq()
innobase/include/ut0mem.ic:
Add ut_strlenq()
innobase/include/ut0ut.h:
Declare ut_sprintf() as a printf-style function
innobase/lock/lock0lock.c:
lock_clust_rec_modify_check_and_lock(): Remove unused variable "trx"
innobase/log/log0log.c:
Remove unused parameters
innobase/log/log0recv.c:
Remove parameter "type" from log_group_write_buf()
innobase/mem/mem0mem.c:
Simplify the initialization of block->init_block
innobase/mtr/mtr0log.c:
Add a debug assertion to mlog_parse_initial_log_record()
innobase/page/page0cur.c:
Add debug assertion to page_cur_insert_rec_write_log()
Remove hard-coded buffer size in page_cur_parse_insert_rec()
innobase/page/page0page.c:
Remove unneeded variable rec
innobase/pars/pars0opt.c:
Correct a potential buffer overflow
innobase/pars/pars0pars.c:
Replace mem_heap_alloc()+strlen()+memcpy() with mem_heap_strdup()
innobase/row/row0ins.c:
Replace parameter "thr" with "trx" in row_ins_foreign_report_add_err()
Remove unnecessary strlen() call
Use strchr()
innobase/row/row0mysql.c:
Add row_mysql_is_recovered_tmp_table()
Add row_mysql_is_system_table()
Compare reserved table names with exact match
Use strstr() and strchr() and mem_strdupl()
Compute space needed for generated SQL, and allocate it dynamically
innobase/row/row0purge.c:
Remove unused parameters "thr"
innobase/row/row0row.c:
Simplify row_get_clust_rec()
innobase/row/row0uins.c:
Remove unused parameters "thr"
innobase/row/row0umod.c:
Remove unused variable "index"
row_undo_mod_del_unmark_sec_and_undo_update():
Remove parameter "node" and variable "rec"
Remove unused parameters "thr"
innobase/row/row0undo.c:
Remove unused parameters "thr"
innobase/srv/srv0srv.c:
Replace UT_NOT_USED() with __attribute__((unused))
innobase/srv/srv0start.c:
Remove unnecessary strlen() calls
Remove unused parameter "create_new_db" of open_or_create_log_file()
innobase/trx/trx0roll.c:
Replace mem_alloc()+strlen()+memcpy() with mem_strdup()
innobase/trx/trx0sys.c:
Remove unnecessary strlen() call
innobase/ut/ut0byte.c:
Add const qualifier to ut_cpy_in_lower_case()
Remove parameter "len" of ut_cmp_in_lower_case()
innobase/ut/ut0mem.c:
Add ut_strlenq() and ut_memcpyq()
sql/ha_innodb.cc:
Remove parameter "len" of ut_cmp_in_lower_case()
2004-04-01 16:51:34 +03:00
|
|
|
/* out: -1, 0, 1 if str1 < str2, str1 == str2,
|
|
|
|
str1 > str2, respectively */
|
|
|
|
const char* str1, /* in: string1 */
|
|
|
|
const char* str2); /* in: string2 */
|
2001-02-17 14:19:19 +02:00
|
|
|
|
|
|
|
#ifndef UNIV_NONINL
|
|
|
|
#include "ut0byte.ic"
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#endif
|