From d13c54351dd7ec5c538ff746704c6a8096b25776 Mon Sep 17 00:00:00 2001 From: Michael Widenius Date: Mon, 30 Nov 2009 01:08:56 +0200 Subject: Remove compiler warnings (Including some warnings from -Wstrict-aliasing) Don't use static link by default (in compile-pentium) as some new systems doesn't have all static libraries available Change type for functions in plugin.h:str_mysql_ftparser_param() to const unsigned char and string lengths to size_t. One effect of the above change is that one needs to include mysql_global.h or define size_t before including plugin.h This fixes a case where mysql_client_test failed with newer gcc that enables strict-aliasing by default BUILD/compile-pentium: Don't use static link by default as some new systems doesn't have all static libraries available client/mysql_upgrade.c: Remove not used variable cmd-line-utils/readline/config_readline.h: Define some constants to get rid of compiler warnings on Linux cmd-line-utils/readline/display.c: Get rid of compiler warnings cmd-line-utils/readline/history.c: Got rid of compiler warnings: - Defining some strings as const - Added cast cmd-line-utils/readline/rlmbutil.h: Added cast to get rid of compiler warnings cmd-line-utils/readline/text.c: Remove not needed initialization to get rid of compiler warnings cmd-line-utils/readline/xmalloc.c: Changed types to 'const char* to get rid of compiler warnings configure.in: Ensure that we use MariaDB as suffix include/mysql/plugin.h: Changed types to 'const unsigned char* to get rid of compiler warnings (in other parts of the code) Change length for not \0 terminated string to size_t include/mysql/plugin.h.pp: Update related to plugin.h libmysql/libmysql.c: Fixed bug that caused core dump with newer gcc when strict aliasing is not turned off mysql-test/t/information_schema.test: Test is depending on innodb mysql-test/t/not_partition.test: Fixed wrong directory name (Not noticed before as we don't ususally run this test) mysys/lf_hash.c: Got rid of compiler warnings from -Wstrict-aliasing mysys/my_redel.c: Removed not used variable regex/engine.c: Changed types to 'const char* to get rid of compiler warnings regex/engine.ih: Changed types to 'const char* to get rid of compiler warnings sql/sp_head.cc: Got rid of compiler warning from -Wstrict-aliasing sql/sql_base.cc: Got rid of compiler warnings from -Wstrict-aliasing (The original code was probably wrong as nj_col->table_field was sql/sql_builtin.cc.in: plugin.h needs to have size_t defined sql/sql_parse.cc: Remove used variable sql/sql_select.cc: Got rid of compiler warnings from -Wstrict-aliasing sql/sql_show.cc: Added #ifdef to get rid of compiler warning when not using partition engine sql/table.cc: Got rid of compiler warning from -Wstrict-aliasing storage/maria/ha_maria.cc: Got rid of compiler warnings from -Wstrict-aliasing: - Use the thd_killed() API function storage/maria/lockman.c: Got rid of compiler warnings from -Wstrict-aliasing storage/maria/ma_check.c: Got rid of compiler warnings from -Wstrict-aliasing Change to use new version of _ma_killed_ptr; Don't call it as often as before storage/maria/ma_check_standalone.h: Update to compatible _ma_killed_ptr() from ha_maria.cc storage/maria/ma_ft_boolean_search.c: Changed pointers from char -> const char* and length to size_t (to get rid of compiler warnings and casts) storage/maria/ma_ft_nlq_search.c: Got rid of compiler warnings from -Wstrict-aliasing Ensure that 'subkeys' is 32 bit storage/maria/ma_ft_parser.c: Changed pointers from char -> const char* and length to size_t (to get rid of compiler warnings and casts) storage/maria/ma_ftdefs.h: Changed pointers from char -> const char* and length to size_t (to get rid of compiler warnings and casts) storage/maria/ma_sort.c: Change to use new version of _ma_killed_ptr; Don't call it as often as before storage/maria/ma_state.c: Got rid of compiler warnings from -Wstrict-aliasing storage/maria/maria_def.h: Redefine ma_killed_ptr() storage/maria/maria_ftdump.c: Got rid of compiler warnings from -Wstrict-aliasing storage/maria/trnman.c: Got rid of compiler warnings from -Wstrict-aliasing storage/myisam/ft_boolean_search.c: Changed pointers from char -> const char* and length to size_t (to get rid of compiler warnings and casts) storage/myisam/ft_nlq_search.c: Got rid of compiler warnings from -Wstrict-aliasing storage/myisam/ft_parser.c: Changed pointers from char -> const char* and length to size_t (to get rid of compiler warnings and casts) storage/myisam/ft_stopwords.c: Changed pointers from char -> const char* and length to size_t (to get rid of compiler warnings and casts) storage/myisam/ftdefs.h: Changed pointers from char -> const char* and length to size_t (to get rid of compiler warnings and casts) storage/myisam/ha_myisam.cc: Got rid of compiler warnings from -Wstrict-aliasing: - Use the thd_killed() API function storage/myisam/mi_check.c: Use new killed_ptr() function storage/myisam/myisam_ftdump.c: Got rid of compiler warnings from -Wstrict-aliasing storage/myisam/myisamchk.c: Update to compatible killed_ptr() from ha_myisam.cc storage/myisam/myisamdef.h: Redefine killed_ptr() storage/myisam/myisamlog.c: Got rid of compiler warnings from -Wstrict-aliasing storage/myisam/sort.c: Change to use new version of killed_ptr; Don't call it as often as before storage/xtradb/fil/fil0fil.c: Fixedc ompiler warning storage/xtradb/trx/trx0i_s.c: Include mysql_plugin.h later to ensure that size_t is defined --- storage/maria/ha_maria.cc | 5 ++--- storage/maria/lockman.c | 13 +++++++------ storage/maria/ma_check.c | 18 +++++++++--------- storage/maria/ma_check_standalone.h | 6 ++---- storage/maria/ma_ft_boolean_search.c | 31 +++++++++++++++---------------- storage/maria/ma_ft_nlq_search.c | 5 +++-- storage/maria/ma_ft_parser.c | 26 ++++++++++++++------------ storage/maria/ma_ftdefs.h | 8 ++++---- storage/maria/ma_sort.c | 11 ++++++----- storage/maria/ma_state.c | 2 +- storage/maria/maria_def.h | 2 +- storage/maria/maria_ftdump.c | 2 +- storage/maria/trnman.c | 6 +++--- storage/myisam/ft_boolean_search.c | 36 ++++++++++++++++++------------------ storage/myisam/ft_nlq_search.c | 6 ++++-- storage/myisam/ft_parser.c | 32 +++++++++++++++++--------------- storage/myisam/ft_stopwords.c | 5 +++-- storage/myisam/ftdefs.h | 10 +++++----- storage/myisam/ha_myisam.cc | 5 ++--- storage/myisam/mi_check.c | 10 +++++----- storage/myisam/myisam_ftdump.c | 2 +- storage/myisam/myisamchk.c | 6 ++---- storage/myisam/myisamdef.h | 2 +- storage/myisam/myisamlog.c | 2 +- storage/myisam/sort.c | 11 ++++++----- storage/xtradb/fil/fil0fil.c | 2 +- storage/xtradb/trx/trx0i_s.c | 2 +- 27 files changed, 135 insertions(+), 131 deletions(-) (limited to 'storage') diff --git a/storage/maria/ha_maria.cc b/storage/maria/ha_maria.cc index 8719cbd114d..2b5e333a176 100644 --- a/storage/maria/ha_maria.cc +++ b/storage/maria/ha_maria.cc @@ -665,10 +665,9 @@ int maria_check_definition(MARIA_KEYDEF *t1_keyinfo, extern "C" { -volatile int *_ma_killed_ptr(HA_CHECK *param) +int _ma_killed_ptr(HA_CHECK *param) { - /* In theory Unsafe conversion, but should be ok for now */ - return (int*) &(((THD *) (param->thd))->killed); + return thd_killed((THD*)param->thd); } diff --git a/storage/maria/lockman.c b/storage/maria/lockman.c index e7f3c81b0fd..d6d4dcd44e6 100644 --- a/storage/maria/lockman.c +++ b/storage/maria/lockman.c @@ -360,7 +360,7 @@ retry: else { if (my_atomic_casptr((void **)cursor->prev, - (void **)&cursor->curr, cursor->next)) + (void **)(char*) &cursor->curr, cursor->next)) _lf_alloc_free(pins, cursor->curr); else { @@ -421,7 +421,8 @@ static int lockinsert(LOCK * volatile *head, LOCK *node, LF_PINS *pins, node->link= (intptr)cursor.curr; DBUG_ASSERT(node->link != (intptr)node); DBUG_ASSERT(cursor.prev != &node->link); - if (!my_atomic_casptr((void **)cursor.prev, (void **)&cursor.curr, node)) + if (!my_atomic_casptr((void **)cursor.prev, + (void **)(char*) &cursor.curr, node)) { res= REPEAT_ONCE_MORE; node->flags&= ~ACTIVE; @@ -498,11 +499,11 @@ static int lockdelete(LOCK * volatile *head, LOCK *node, LF_PINS *pins) then we can delete. Good news is - this is only required when rolling back a savepoint. */ - if (my_atomic_casptr((void **)&(cursor.curr->link), - (void **)&cursor.next, 1+(char *)cursor.next)) + if (my_atomic_casptr((void **)(char*)&(cursor.curr->link), + (void **)(char*)&cursor.next, 1+(char *)cursor.next)) { if (my_atomic_casptr((void **)cursor.prev, - (void **)&cursor.curr, cursor.next)) + (void **)(char*)&cursor.curr, cursor.next)) _lf_alloc_free(pins, cursor.curr); else lockfind(head, node, &cursor, pins); @@ -573,7 +574,7 @@ static void initialize_bucket(LOCKMAN *lm, LOCK * volatile *node, my_free((void *)dummy, MYF(0)); dummy= cur; } - my_atomic_casptr((void **)node, (void **)&tmp, dummy); + my_atomic_casptr((void **)node, (void **)(char*) &tmp, dummy); } static inline uint calc_hash(uint64 resource) diff --git a/storage/maria/ma_check.c b/storage/maria/ma_check.c index e33849bef04..3314a21871a 100644 --- a/storage/maria/ma_check.c +++ b/storage/maria/ma_check.c @@ -215,7 +215,7 @@ int maria_chk_del(HA_CHECK *param, register MARIA_HA *info, empty=0; for (i= share->state.state.del ; i > 0L && next_link != HA_OFFSET_ERROR ; i--) { - if (*_ma_killed_ptr(param)) + if (_ma_killed_ptr(param)) DBUG_RETURN(1); if (test_flag & T_VERBOSE) printf(" %9s",llstr(next_link,buff)); @@ -310,7 +310,7 @@ static int check_k_link(HA_CHECK *param, register MARIA_HA *info, records= (ha_rows) (share->state.state.key_file_length / block_size); while (next_link != HA_OFFSET_ERROR && records > 0) { - if (*_ma_killed_ptr(param)) + if (_ma_killed_ptr(param)) DBUG_RETURN(1); if (param->testflag & T_VERBOSE) printf("%16s",llstr(next_link,llbuff)); @@ -876,10 +876,10 @@ static int chk_index(HA_CHECK *param, MARIA_HA *info, MARIA_KEYDEF *keyinfo, tmp_key.data= tmp_key_buff; for ( ;; ) { - if (*_ma_killed_ptr(param)) - goto err; if (nod_flag) { + if (_ma_killed_ptr(param)) + goto err; next_page= _ma_kpos(nod_flag,keypos); if (chk_index_down(param,info,keyinfo,next_page, temp_buff,keys,key_checksum,level+1)) @@ -1180,7 +1180,7 @@ static int check_static_record(HA_CHECK *param, MARIA_HA *info, int extend, pos= 0; while (pos < share->state.state.data_file_length) { - if (*_ma_killed_ptr(param)) + if (_ma_killed_ptr(param)) return -1; if (my_b_read(¶m->read_cache, record, share->base.pack_reclength)) @@ -1230,7 +1230,7 @@ static int check_dynamic_record(HA_CHECK *param, MARIA_HA *info, int extend, { my_bool got_error= 0; int flag; - if (*_ma_killed_ptr(param)) + if (_ma_killed_ptr(param)) DBUG_RETURN(-1); flag= block_info.second_read=0; @@ -1451,7 +1451,7 @@ static int check_compressed_record(HA_CHECK *param, MARIA_HA *info, int extend, pos= share->pack.header_length; /* Skip header */ while (pos < share->state.state.data_file_length) { - if (*_ma_killed_ptr(param)) + if (_ma_killed_ptr(param)) DBUG_RETURN(-1); if (_ma_read_cache(¶m->read_cache, block_info.header, pos, @@ -1815,7 +1815,7 @@ static int check_block_record(HA_CHECK *param, MARIA_HA *info, int extend, LINT_INIT(row_count); LINT_INIT(empty_space); - if (*_ma_killed_ptr(param)) + if (_ma_killed_ptr(param)) { _ma_scan_end_block_record(info); return -1; @@ -4631,7 +4631,7 @@ static int sort_get_next_record(MARIA_SORT_PARAM *sort_param) char llbuff[22],llbuff2[22]; DBUG_ENTER("sort_get_next_record"); - if (*_ma_killed_ptr(param)) + if (_ma_killed_ptr(param)) DBUG_RETURN(1); switch (sort_info->org_data_file_type) { diff --git a/storage/maria/ma_check_standalone.h b/storage/maria/ma_check_standalone.h index 3874d722d6c..9b30c96089f 100644 --- a/storage/maria/ma_check_standalone.h +++ b/storage/maria/ma_check_standalone.h @@ -30,11 +30,9 @@ Check if check/repair operation was killed by a signal */ -static int not_killed= 0; - -volatile int *_ma_killed_ptr(HA_CHECK *param __attribute__((unused))) +int _ma_killed_ptr(HA_CHECK *param __attribute__((unused))) { - return ¬_killed; /* always NULL */ + return 0; } /* print warnings and errors */ diff --git a/storage/maria/ma_ft_boolean_search.c b/storage/maria/ma_ft_boolean_search.c index 763b8827a6c..c91a4ac46f1 100644 --- a/storage/maria/ma_ft_boolean_search.c +++ b/storage/maria/ma_ft_boolean_search.c @@ -180,7 +180,7 @@ typedef struct st_my_ftb_param static int ftb_query_add_word(MYSQL_FTPARSER_PARAM *param, - char *word, int word_len, + const uchar *word, size_t word_len, MYSQL_FTPARSER_BOOLEAN_INFO *info) { MY_FTB_PARAM *ftb_param= param->mysql_ftparam; @@ -282,19 +282,19 @@ static int ftb_query_add_word(MYSQL_FTPARSER_PARAM *param, static int ftb_parse_query_internal(MYSQL_FTPARSER_PARAM *param, - char *query, int len) + const uchar *query, size_t len) { MY_FTB_PARAM *ftb_param= param->mysql_ftparam; MYSQL_FTPARSER_BOOLEAN_INFO info; CHARSET_INFO *cs= ftb_param->ftb->charset; - uchar **start= (uchar**) &query; - uchar *end= (uchar*) query + len; + const uchar **start= &query; + const uchar *end= query + len; FT_WORD w; info.prev= ' '; info.quot= 0; while (maria_ft_get_word(cs, start, end, &w, &info)) - param->mysql_add_word(param, (char *) w.pos, w.len, &info); + param->mysql_add_word(param, w.pos, w.len, &info); return(0); } @@ -615,7 +615,7 @@ typedef struct st_my_ftb_phrase_param static int ftb_phrase_add_word(MYSQL_FTPARSER_PARAM *param, - char *word, int word_len, + const uchar *word, size_t word_len, MYSQL_FTPARSER_BOOLEAN_INFO *boolean_info __attribute__((unused))) { MY_FTB_PHRASE_PARAM *phrase_param= param->mysql_ftparam; @@ -647,15 +647,15 @@ static int ftb_phrase_add_word(MYSQL_FTPARSER_PARAM *param, static int ftb_check_phrase_internal(MYSQL_FTPARSER_PARAM *param, - char *document, int len) + const uchar *document, size_t len) { FT_WORD word; MY_FTB_PHRASE_PARAM *phrase_param= param->mysql_ftparam; - const uchar *docend= (uchar*) document + len; - while (maria_ft_simple_get_word(phrase_param->cs, (uchar**) &document, + const uchar *docend= document + len; + while (maria_ft_simple_get_word(phrase_param->cs, &document, docend, &word, FALSE)) { - param->mysql_add_word(param, (char*) word.pos, word.len, 0); + param->mysql_add_word(param, word.pos, word.len, 0); if (phrase_param->match) break; } @@ -872,7 +872,7 @@ typedef struct st_my_ftb_find_param static int ftb_find_relevance_add_word(MYSQL_FTPARSER_PARAM *param, - char *word, int len, + const uchar *word, size_t len, MYSQL_FTPARSER_BOOLEAN_INFO *boolean_info __attribute__((unused))) { MY_FTB_FIND_PARAM *ftb_param= param->mysql_ftparam; @@ -933,15 +933,14 @@ static int ftb_find_relevance_add_word(MYSQL_FTPARSER_PARAM *param, static int ftb_find_relevance_parse(MYSQL_FTPARSER_PARAM *param, - char *doc, int len) + const uchar *doc, size_t len) { MY_FTB_FIND_PARAM *ftb_param= param->mysql_ftparam; FT_INFO *ftb= ftb_param->ftb; - uchar *end= (uchar*) doc + len; + const uchar *end= doc + len; FT_WORD w; - while (maria_ft_simple_get_word(ftb->charset, (uchar**) &doc, - end, &w, TRUE)) - param->mysql_add_word(param, (char *) w.pos, w.len, 0); + while (maria_ft_simple_get_word(ftb->charset, &doc, end, &w, TRUE)) + param->mysql_add_word(param, w.pos, w.len, 0); return(0); } diff --git a/storage/maria/ma_ft_nlq_search.c b/storage/maria/ma_ft_nlq_search.c index 1a85c50174e..7187419b548 100644 --- a/storage/maria/ma_ft_nlq_search.c +++ b/storage/maria/ma_ft_nlq_search.c @@ -63,7 +63,8 @@ static int FT_SUPERDOC_cmp(void* cmp_arg __attribute__((unused)), static int walk_and_match(FT_WORD *word, uint32 count, ALL_IN_ONE *aio) { - int subkeys, r; + int32 subkeys; + int r; uint doc_cnt; FT_SUPERDOC sdoc, *sptr; TREE_ELEMENT *selem; @@ -127,7 +128,7 @@ static int walk_and_match(FT_WORD *word, uint32 count, ALL_IN_ONE *aio) goto do_skip; } #if HA_FT_WTYPE == HA_KEYTYPE_FLOAT - tmp_weight=*(float*)&subkeys; + tmp_weight=*(float*) (char*) &subkeys; #else #error #endif diff --git a/storage/maria/ma_ft_parser.c b/storage/maria/ma_ft_parser.c index bdfbbb936ce..11c9f2603a5 100644 --- a/storage/maria/ma_ft_parser.c +++ b/storage/maria/ma_ft_parser.c @@ -109,10 +109,11 @@ my_bool maria_ft_boolean_check_syntax_string(const uchar *str) 3 - right bracket 4 - stopword found */ -uchar maria_ft_get_word(CHARSET_INFO *cs, uchar **start, uchar *end, +uchar maria_ft_get_word(CHARSET_INFO *cs, const uchar **start, + const uchar *end, FT_WORD *word, MYSQL_FTPARSER_BOOLEAN_INFO *param) { - uchar *doc=*start; + const uchar *doc= *start; int ctype; uint mwc, length; int mbl; @@ -203,11 +204,11 @@ ret: return param->type; } -uchar maria_ft_simple_get_word(CHARSET_INFO *cs, uchar **start, +uchar maria_ft_simple_get_word(CHARSET_INFO *cs, const uchar **start, const uchar *end, FT_WORD *word, my_bool skip_stopwords) { - uchar *doc= *start; + const uchar *doc= *start; uint mwc, length; int ctype, mbl; DBUG_ENTER("maria_ft_simple_get_word"); @@ -259,8 +260,9 @@ void maria_ft_parse_init(TREE *wtree, CHARSET_INFO *cs) static int maria_ft_add_word(MYSQL_FTPARSER_PARAM *param, - char *word, int word_len, - MYSQL_FTPARSER_BOOLEAN_INFO *boolean_info __attribute__((unused))) + const uchar *word, size_t word_len, + MYSQL_FTPARSER_BOOLEAN_INFO *boolean_info + __attribute__((unused))) { TREE *wtree; FT_WORD w; @@ -276,7 +278,7 @@ static int maria_ft_add_word(MYSQL_FTPARSER_PARAM *param, w.pos= ptr; } else - w.pos= (uchar *) word; + w.pos= word; w.len= word_len; if (!tree_insert(wtree, &w, 0, wtree->custom_arg)) { @@ -288,17 +290,17 @@ static int maria_ft_add_word(MYSQL_FTPARSER_PARAM *param, static int maria_ft_parse_internal(MYSQL_FTPARSER_PARAM *param, - char *doc_arg, int doc_len) + const uchar *doc_arg, size_t doc_len) { - uchar *doc= (uchar*) doc_arg; - uchar *end= doc + doc_len; + const uchar *doc= doc_arg; + const uchar *end= doc + doc_len; MY_FT_PARSER_PARAM *ft_param=param->mysql_ftparam; TREE *wtree= ft_param->wtree; FT_WORD w; DBUG_ENTER("maria_ft_parse_internal"); while (maria_ft_simple_get_word(wtree->custom_arg, &doc, end, &w, TRUE)) - if (param->mysql_add_word(param, (char *) w.pos, w.len, 0)) + if (param->mysql_add_word(param, w.pos, w.len, 0)) DBUG_RETURN(1); DBUG_RETURN(0); } @@ -378,7 +380,7 @@ MYSQL_FTPARSER_PARAM *maria_ftparser_call_initializer(MARIA_HA *info, mysql_add_word != 0 - parser is initialized, or no initialization needed. */ info->ftparser_param[ftparser_nr].mysql_add_word= - (int (*)(struct st_mysql_ftparser_param *, char *, int, + (int (*)(struct st_mysql_ftparser_param *, const uchar *, size_t, MYSQL_FTPARSER_BOOLEAN_INFO *)) 1; if (parser->init && parser->init(&info->ftparser_param[ftparser_nr])) return 0; diff --git a/storage/maria/ma_ftdefs.h b/storage/maria/ma_ftdefs.h index 7e83d774aed..f9ccbf16de3 100644 --- a/storage/maria/ma_ftdefs.h +++ b/storage/maria/ma_ftdefs.h @@ -96,7 +96,7 @@ #define FTB_RQUOT (ft_boolean_syntax[11]) typedef struct st_maria_ft_word { - uchar * pos; + const uchar * pos; uint len; double weight; } FT_WORD; @@ -106,9 +106,9 @@ int is_stopword(char *word, uint len); MARIA_KEY *_ma_ft_make_key(MARIA_HA *, MARIA_KEY *, uint , uchar *, FT_WORD *, my_off_t); -uchar maria_ft_get_word(CHARSET_INFO *, uchar **, uchar *, FT_WORD *, - MYSQL_FTPARSER_BOOLEAN_INFO *); -uchar maria_ft_simple_get_word(CHARSET_INFO *, uchar **, const uchar *, +uchar maria_ft_get_word(CHARSET_INFO *, const uchar **, const uchar *, + FT_WORD *, MYSQL_FTPARSER_BOOLEAN_INFO *); +uchar maria_ft_simple_get_word(CHARSET_INFO *, const uchar **, const uchar *, FT_WORD *, my_bool); typedef struct _st_maria_ft_seg_iterator { diff --git a/storage/maria/ma_sort.c b/storage/maria/ma_sort.c index fa2cbab995a..387563ebaac 100644 --- a/storage/maria/ma_sort.c +++ b/storage/maria/ma_sort.c @@ -920,7 +920,6 @@ merge_buffers(MARIA_SORT_PARAM *info, uint keys, IO_CACHE *from_file, uchar *strpos; BUFFPEK *buffpek,**refpek; QUEUE queue; - volatile int *killed= _ma_killed_ptr(info->sort_info->param); DBUG_ENTER("merge_buffers"); count=error=0; @@ -953,10 +952,6 @@ merge_buffers(MARIA_SORT_PARAM *info, uint keys, IO_CACHE *from_file, { for (;;) { - if (*killed) - { - error=1; goto err; - } buffpek=(BUFFPEK*) queue_top(&queue); if (to_file) { @@ -976,6 +971,12 @@ merge_buffers(MARIA_SORT_PARAM *info, uint keys, IO_CACHE *from_file, buffpek->key+=sort_length; if (! --buffpek->mem_count) { + /* It's enough to check for killedptr before a slow operation */ + if (_ma_killed_ptr(info->sort_info->param)) + { + error=1; + goto err; + } if (!(error=(int) info->read_to_buffer(from_file,buffpek,sort_length))) { uchar *base= buffpek->base; diff --git a/storage/maria/ma_state.c b/storage/maria/ma_state.c index 0b7fba9f55a..d7ddc73e2b4 100644 --- a/storage/maria/ma_state.c +++ b/storage/maria/ma_state.c @@ -528,7 +528,7 @@ void _ma_remove_table_from_trnman(MARIA_SHARE *share, TRN *trn) safe_mutex_assert_owner(&share->intern_lock); - for (prev= (MARIA_USED_TABLES**) &trn->used_tables, tables= *prev; + for (prev= (MARIA_USED_TABLES**) (char*) &trn->used_tables, tables= *prev; tables; tables= *prev) { diff --git a/storage/maria/maria_def.h b/storage/maria/maria_def.h index ada4ae3f426..ad93d566578 100644 --- a/storage/maria/maria_def.h +++ b/storage/maria/maria_def.h @@ -1160,7 +1160,7 @@ int _ma_flush_table_files(MARIA_HA *info, uint flush_data_or_index, Functions needed by _ma_check (are overridden in MySQL/ha_maria.cc). See ma_check_standalone.h . */ -volatile int *_ma_killed_ptr(HA_CHECK *param); +int _ma_killed_ptr(HA_CHECK *param); void _ma_check_print_error _VARARGS((HA_CHECK *param, const char *fmt, ...)) ATTRIBUTE_FORMAT(printf, 2, 3); void _ma_check_print_warning _VARARGS((HA_CHECK *param, const char *fmt, ...)) diff --git a/storage/maria/maria_ftdump.c b/storage/maria/maria_ftdump.c index 5e3b47b956e..180b6dfd90d 100644 --- a/storage/maria/maria_ftdump.c +++ b/storage/maria/maria_ftdump.c @@ -116,7 +116,7 @@ int main(int argc,char *argv[]) subkeys=ft_sintXkorr(info->lastkey_buff + keylen + 1); if (subkeys >= 0) - weight=*(float*)&subkeys; + weight=*(float*) (char*) &subkeys; #ifdef HAVE_SNPRINTF snprintf(buf,MAX_LEN,"%.*s",(int) keylen,info->lastkey_buff+1); diff --git a/storage/maria/trnman.c b/storage/maria/trnman.c index 43fac68806f..ceb8ad2ae2d 100644 --- a/storage/maria/trnman.c +++ b/storage/maria/trnman.c @@ -300,8 +300,8 @@ TRN *trnman_new_trn(WT_THD *wt) (ABA isn't possible, we're behind a mutex */ my_atomic_rwlock_wrlock(&LOCK_pool); - while (tmp.trn && !my_atomic_casptr((void **)&pool, &tmp.v, - (void *)tmp.trn->next)) + while (tmp.trn && !my_atomic_casptr((void **)(char*) &pool, &tmp.v, + (void *)tmp.trn->next)) /* no-op */; my_atomic_rwlock_wrunlock(&LOCK_pool); @@ -545,7 +545,7 @@ static void trnman_free_trn(TRN *trn) down after the loop at -O2 */ *(TRN * volatile *)&(trn->next)= tmp.trn; - } while (!my_atomic_casptr((void **)&pool, &tmp.v, trn)); + } while (!my_atomic_casptr((void **)(char*)&pool, &tmp.v, trn)); my_atomic_rwlock_wrunlock(&LOCK_pool); } diff --git a/storage/myisam/ft_boolean_search.c b/storage/myisam/ft_boolean_search.c index ddb932e234e..193ce510f98 100644 --- a/storage/myisam/ft_boolean_search.c +++ b/storage/myisam/ft_boolean_search.c @@ -180,7 +180,7 @@ typedef struct st_my_ftb_param static int ftb_query_add_word(MYSQL_FTPARSER_PARAM *param, - char *word, int word_len, + const uchar *word, size_t word_len, MYSQL_FTPARSER_BOOLEAN_INFO *info) { MY_FTB_PARAM *ftb_param= param->mysql_ftparam; @@ -282,19 +282,19 @@ static int ftb_query_add_word(MYSQL_FTPARSER_PARAM *param, static int ftb_parse_query_internal(MYSQL_FTPARSER_PARAM *param, - char *query, int len) + const uchar *query, size_t len) { MY_FTB_PARAM *ftb_param= param->mysql_ftparam; MYSQL_FTPARSER_BOOLEAN_INFO info; CHARSET_INFO *cs= ftb_param->ftb->charset; - uchar **start= (uchar**) &query; - uchar *end= (uchar*) query + len; + const uchar **start= &query; + const uchar *end= query + len; FT_WORD w; info.prev= ' '; info.quot= 0; while (ft_get_word(cs, start, end, &w, &info)) - param->mysql_add_word(param, (char*) w.pos, w.len, &info); + param->mysql_add_word(param, w.pos, w.len, &info); return(0); } @@ -616,7 +616,7 @@ typedef struct st_my_ftb_phrase_param static int ftb_phrase_add_word(MYSQL_FTPARSER_PARAM *param, - char *word, int word_len, + const uchar *word, size_t word_len, MYSQL_FTPARSER_BOOLEAN_INFO *boolean_info __attribute__((unused))) { MY_FTB_PHRASE_PARAM *phrase_param= param->mysql_ftparam; @@ -648,15 +648,15 @@ static int ftb_phrase_add_word(MYSQL_FTPARSER_PARAM *param, static int ftb_check_phrase_internal(MYSQL_FTPARSER_PARAM *param, - char *document, int len) + const uchar *document, size_t len) { FT_WORD word; MY_FTB_PHRASE_PARAM *phrase_param= param->mysql_ftparam; const uchar *docend= (uchar*) document + len; - while (ft_simple_get_word(phrase_param->cs, (uchar**) &document, docend, + while (ft_simple_get_word(phrase_param->cs, &document, docend, &word, FALSE)) { - param->mysql_add_word(param, (char*) word.pos, word.len, 0); + param->mysql_add_word(param, word.pos, word.len, 0); if (phrase_param->match) break; } @@ -874,7 +874,7 @@ typedef struct st_my_ftb_find_param static int ftb_find_relevance_add_word(MYSQL_FTPARSER_PARAM *param, - char *word, int len, + const uchar *word, size_t len, MYSQL_FTPARSER_BOOLEAN_INFO *boolean_info __attribute__((unused))) { MY_FTB_FIND_PARAM *ftb_param= param->mysql_ftparam; @@ -888,8 +888,8 @@ static int ftb_find_relevance_add_word(MYSQL_FTPARSER_PARAM *param, for (a= 0, b= ftb->queue.elements, c= (a+b)/2; b-a>1; c= (a+b)/2) { ftbw= ftb->list[c]; - if (ha_compare_text(ftb->charset, (uchar*)word, len, - (uchar*)ftbw->word+1, ftbw->len-1, + if (ha_compare_text(ftb->charset, word, len, + ftbw->word+1, ftbw->len-1, (my_bool) (ftbw->flags & FTB_FLAG_TRUNC), 0) < 0) b= c; else @@ -915,8 +915,8 @@ static int ftb_find_relevance_add_word(MYSQL_FTPARSER_PARAM *param, for (; c >= 0; c--) { ftbw= ftb->list[c]; - if (ha_compare_text(ftb->charset, (uchar*)word, len, - (uchar*)ftbw->word + 1,ftbw->len - 1, + if (ha_compare_text(ftb->charset, word, len, + ftbw->word + 1,ftbw->len - 1, (my_bool)(ftbw->flags & FTB_FLAG_TRUNC), 0)) { if (ftb->with_scan & FTB_FLAG_TRUNC) @@ -935,14 +935,14 @@ static int ftb_find_relevance_add_word(MYSQL_FTPARSER_PARAM *param, static int ftb_find_relevance_parse(MYSQL_FTPARSER_PARAM *param, - char *doc, int len) + const uchar *doc, size_t len) { MY_FTB_FIND_PARAM *ftb_param= param->mysql_ftparam; FT_INFO *ftb= ftb_param->ftb; - uchar *end= (uchar*) doc + len; + const uchar *end= doc + len; FT_WORD w; - while (ft_simple_get_word(ftb->charset, (uchar**) &doc, end, &w, TRUE)) - param->mysql_add_word(param, (char*) w.pos, w.len, 0); + while (ft_simple_get_word(ftb->charset, &doc, end, &w, TRUE)) + param->mysql_add_word(param, w.pos, w.len, 0); return(0); } diff --git a/storage/myisam/ft_nlq_search.c b/storage/myisam/ft_nlq_search.c index eb563638d36..da593a3debc 100644 --- a/storage/myisam/ft_nlq_search.c +++ b/storage/myisam/ft_nlq_search.c @@ -63,7 +63,8 @@ static int FT_SUPERDOC_cmp(void* cmp_arg __attribute__((unused)), static int walk_and_match(FT_WORD *word, uint32 count, ALL_IN_ONE *aio) { - int subkeys, r; + int32 subkeys; + int r; uint keylen, doc_cnt; FT_SUPERDOC sdoc, *sptr; TREE_ELEMENT *selem; @@ -123,7 +124,8 @@ static int walk_and_match(FT_WORD *word, uint32 count, ALL_IN_ONE *aio) goto do_skip; } #if HA_FT_WTYPE == HA_KEYTYPE_FLOAT - tmp_weight=*(float*)&subkeys; + /* The weight we read was actually a float */ + tmp_weight=*(float*) (char*) &subkeys; #else #error #endif diff --git a/storage/myisam/ft_parser.c b/storage/myisam/ft_parser.c index 4cde3834ed7..cacedaaeea0 100644 --- a/storage/myisam/ft_parser.c +++ b/storage/myisam/ft_parser.c @@ -106,10 +106,10 @@ my_bool ft_boolean_check_syntax_string(const uchar *str) 3 - right bracket 4 - stopword found */ -uchar ft_get_word(CHARSET_INFO *cs, uchar **start, uchar *end, +uchar ft_get_word(CHARSET_INFO *cs, const uchar **start, const uchar *end, FT_WORD *word, MYSQL_FTPARSER_BOOLEAN_INFO *param) { - uchar *doc=*start; + const uchar *doc= *start; int ctype; uint mwc, length; int mbl; @@ -201,10 +201,11 @@ ret: return param->type; } -uchar ft_simple_get_word(CHARSET_INFO *cs, uchar **start, const uchar *end, - FT_WORD *word, my_bool skip_stopwords) +uchar ft_simple_get_word(CHARSET_INFO *cs, const uchar **start, + const uchar *end, FT_WORD *word, + my_bool skip_stopwords) { - uchar *doc= *start; + const uchar *doc= *start; uint mwc, length; int mbl; int ctype; @@ -216,7 +217,7 @@ uchar ft_simple_get_word(CHARSET_INFO *cs, uchar **start, const uchar *end, { if (doc >= end) DBUG_RETURN(0); - mbl= cs->cset->ctype(cs, &ctype, (uchar*)doc, (uchar*)end); + mbl= cs->cset->ctype(cs, &ctype, doc, end); if (true_word_char(ctype, *doc)) break; } @@ -225,7 +226,7 @@ uchar ft_simple_get_word(CHARSET_INFO *cs, uchar **start, const uchar *end, for (word->pos= doc; doc < end; length++, doc+= (mbl > 0 ? mbl : (mbl < 0 ? -mbl : 1))) { - mbl= cs->cset->ctype(cs, &ctype, (uchar*)doc, (uchar*)end); + mbl= cs->cset->ctype(cs, &ctype, doc, end); if (true_word_char(ctype, *doc)) mwc= 0; else if (!misc_word_char(*doc) || mwc) @@ -238,7 +239,7 @@ uchar ft_simple_get_word(CHARSET_INFO *cs, uchar **start, const uchar *end, if (skip_stopwords == FALSE || (length >= ft_min_word_len && length < ft_max_word_len && - !is_stopword((char*) word->pos, word->len))) + !is_stopword(word->pos, word->len))) { *start= doc; DBUG_RETURN(1); @@ -257,8 +258,9 @@ void ft_parse_init(TREE *wtree, CHARSET_INFO *cs) static int ft_add_word(MYSQL_FTPARSER_PARAM *param, - char *word, int word_len, - MYSQL_FTPARSER_BOOLEAN_INFO *boolean_info __attribute__((unused))) + const uchar *word, size_t word_len, + MYSQL_FTPARSER_BOOLEAN_INFO *boolean_info + __attribute__((unused))) { TREE *wtree; FT_WORD w; @@ -286,10 +288,10 @@ static int ft_add_word(MYSQL_FTPARSER_PARAM *param, static int ft_parse_internal(MYSQL_FTPARSER_PARAM *param, - char *doc_arg, int doc_len) + const uchar *doc_arg, size_t doc_len) { - uchar *doc= (uchar*) doc_arg; - uchar *end= doc + doc_len; + const uchar *doc= doc_arg; + const uchar *end= doc + doc_len; MY_FT_PARSER_PARAM *ft_param=param->mysql_ftparam; TREE *wtree= ft_param->wtree; FT_WORD w; @@ -302,7 +304,7 @@ static int ft_parse_internal(MYSQL_FTPARSER_PARAM *param, } -int ft_parse(TREE *wtree, uchar *doc, int doclen, +int ft_parse(TREE *wtree, const uchar *doc, int doclen, struct st_mysql_ftparser *parser, MYSQL_FTPARSER_PARAM *param, MEM_ROOT *mem_root) { @@ -377,7 +379,7 @@ MYSQL_FTPARSER_PARAM *ftparser_call_initializer(MI_INFO *info, mysql_add_word != 0 - parser is initialized, or no initialization needed. */ info->ftparser_param[ftparser_nr].mysql_add_word= - (int (*)(struct st_mysql_ftparser_param *, char *, int, + (int (*)(struct st_mysql_ftparser_param *, const uchar *, size_t, MYSQL_FTPARSER_BOOLEAN_INFO *)) 1; if (parser->init && parser->init(&info->ftparser_param[ftparser_nr])) return 0; diff --git a/storage/myisam/ft_stopwords.c b/storage/myisam/ft_stopwords.c index 8aefffbee1d..db4cd3b32b6 100644 --- a/storage/myisam/ft_stopwords.c +++ b/storage/myisam/ft_stopwords.c @@ -66,7 +66,8 @@ int ft_init_stopwords() { File fd; uint len; - uchar *buffer, *start, *end; + uchar *buffer; + const uchar *start, *end; FT_WORD w; int error=-1; @@ -109,7 +110,7 @@ err0: } -int is_stopword(char *word, uint len) +int is_stopword(const uchar *word, size_t len) { FT_STOPWORD sw; sw.pos=word; diff --git a/storage/myisam/ftdefs.h b/storage/myisam/ftdefs.h index ddcf1a8dc26..2b4c46c78ad 100644 --- a/storage/myisam/ftdefs.h +++ b/storage/myisam/ftdefs.h @@ -96,18 +96,18 @@ #define FTB_RQUOT (ft_boolean_syntax[11]) typedef struct st_ft_word { - uchar * pos; + const uchar *pos; uint len; double weight; } FT_WORD; -int is_stopword(char *word, uint len); +int is_stopword(const uchar *word, size_t len); uint _ft_make_key(MI_INFO *, uint , uchar *, FT_WORD *, my_off_t); -uchar ft_get_word(CHARSET_INFO *, uchar **, uchar *, FT_WORD *, +uchar ft_get_word(CHARSET_INFO *, const uchar **, const uchar *, FT_WORD *, MYSQL_FTPARSER_BOOLEAN_INFO *); -uchar ft_simple_get_word(CHARSET_INFO *, uchar **, const uchar *, +uchar ft_simple_get_word(CHARSET_INFO *, const uchar **, const uchar *, FT_WORD *, my_bool); typedef struct _st_ft_seg_iterator { @@ -121,7 +121,7 @@ void _mi_ft_segiterator_dummy_init(const uchar *, uint, FT_SEG_ITERATOR *); uint _mi_ft_segiterator(FT_SEG_ITERATOR *); void ft_parse_init(TREE *, CHARSET_INFO *); -int ft_parse(TREE *, uchar *, int, struct st_mysql_ftparser *parser, +int ft_parse(TREE *, const uchar *, int, struct st_mysql_ftparser *parser, MYSQL_FTPARSER_PARAM *, MEM_ROOT *); FT_WORD * ft_linearize(TREE *, MEM_ROOT *); FT_WORD * _mi_ft_parserecord(MI_INFO *, uint, const uchar *, MEM_ROOT *); diff --git a/storage/myisam/ha_myisam.cc b/storage/myisam/ha_myisam.cc index fd35410682e..930f8ed8c59 100644 --- a/storage/myisam/ha_myisam.cc +++ b/storage/myisam/ha_myisam.cc @@ -497,10 +497,9 @@ int check_definition(MI_KEYDEF *t1_keyinfo, MI_COLUMNDEF *t1_recinfo, extern "C" { -volatile int *killed_ptr(HA_CHECK *param) +int killed_ptr(HA_CHECK *param) { - /* In theory Unsafe conversion, but should be ok for now */ - return (int*) &(((THD *)(param->thd))->killed); + return thd_killed((THD*)param->thd); } void mi_check_print_error(HA_CHECK *param, const char *fmt,...) diff --git a/storage/myisam/mi_check.c b/storage/myisam/mi_check.c index c6140e0bcd8..ac90f41e80d 100644 --- a/storage/myisam/mi_check.c +++ b/storage/myisam/mi_check.c @@ -166,7 +166,7 @@ int chk_del(HA_CHECK *param, register MI_INFO *info, ulonglong test_flag) empty=0; for (i= info->state->del ; i > 0L && next_link != HA_OFFSET_ERROR ; i--) { - if (*killed_ptr(param)) + if (killed_ptr(param)) DBUG_RETURN(1); if (test_flag & T_VERBOSE) printf(" %9s",llstr(next_link,buff)); @@ -261,7 +261,7 @@ static int check_k_link(HA_CHECK *param, register MI_INFO *info, uint nr) records= (ha_rows) (info->state->key_file_length / block_size); while (next_link != HA_OFFSET_ERROR && records > 0) { - if (*killed_ptr(param)) + if (killed_ptr(param)) DBUG_RETURN(1); if (param->testflag & T_VERBOSE) printf("%16s",llstr(next_link,llbuff)); @@ -778,7 +778,7 @@ static int chk_index(HA_CHECK *param, MI_INFO *info, MI_KEYDEF *keyinfo, } for ( ;; ) { - if (*killed_ptr(param)) + if (killed_ptr(param)) goto err; memcpy((char*) info->lastkey,(char*) key,key_length); info->lastkey_length=key_length; @@ -990,7 +990,7 @@ int chk_data_link(HA_CHECK *param, MI_INFO *info, my_bool extend) bzero((char*) key_checksum, info->s->base.keys * sizeof(key_checksum[0])); while (pos < info->state->data_file_length) { - if (*killed_ptr(param)) + if (killed_ptr(param)) goto err2; switch (info->s->data_file_type) { case BLOCK_RECORD: @@ -3247,7 +3247,7 @@ static int sort_get_next_record(MI_SORT_PARAM *sort_param) char llbuff[22],llbuff2[22]; DBUG_ENTER("sort_get_next_record"); - if (*killed_ptr(param)) + if (killed_ptr(param)) DBUG_RETURN(1); switch (share->data_file_type) { diff --git a/storage/myisam/myisam_ftdump.c b/storage/myisam/myisam_ftdump.c index 63d954242a0..b7b035559f7 100644 --- a/storage/myisam/myisam_ftdump.c +++ b/storage/myisam/myisam_ftdump.c @@ -113,7 +113,7 @@ int main(int argc,char *argv[]) subkeys=ft_sintXkorr(info->lastkey+keylen+1); if (subkeys >= 0) - weight=*(float*)&subkeys; + weight= *(float*) (char*) &subkeys; #ifdef HAVE_SNPRINTF snprintf(buf,MAX_LEN,"%.*s",(int) keylen,info->lastkey+1); diff --git a/storage/myisam/myisamchk.c b/storage/myisam/myisamchk.c index 6b3ea48e040..b4b4a0215c2 100644 --- a/storage/myisam/myisamchk.c +++ b/storage/myisam/myisamchk.c @@ -1745,11 +1745,9 @@ err: sorting */ -static int not_killed= 0; - -volatile int *killed_ptr(HA_CHECK *param __attribute__((unused))) +int killed_ptr(HA_CHECK *param __attribute__((unused))) { - return ¬_killed; /* always NULL */ + return 0; } /* print warnings and errors */ diff --git a/storage/myisam/myisamdef.h b/storage/myisam/myisamdef.h index c2841c49199..680bdbf16dd 100644 --- a/storage/myisam/myisamdef.h +++ b/storage/myisam/myisamdef.h @@ -725,7 +725,7 @@ my_bool mi_dynmap_file(MI_INFO *info, my_off_t size); void mi_remap_file(MI_INFO *info, my_off_t size); /* Functions needed by mi_check */ -volatile int *killed_ptr(HA_CHECK *param); +int killed_ptr(HA_CHECK *param); void mi_check_print_error _VARARGS((HA_CHECK *param, const char *fmt, ...)); void mi_check_print_warning _VARARGS((HA_CHECK *param, const char *fmt, ...)); void mi_check_print_info _VARARGS((HA_CHECK *param, const char *fmt, ...)); diff --git a/storage/myisam/myisamlog.c b/storage/myisam/myisamlog.c index 6e681676c12..679dc0b731b 100644 --- a/storage/myisam/myisamlog.c +++ b/storage/myisam/myisamlog.c @@ -385,7 +385,7 @@ static int examine_log(char * file_name, char **table_names) file_info.name=0; file_info.show_name=0; file_info.record=0; - if (read_string(&cache,(uchar**) &file_info.name, + if (read_string(&cache,(uchar**) (char*) &file_info.name, (uint) mi_uint2korr(head))) goto err; { diff --git a/storage/myisam/sort.c b/storage/myisam/sort.c index 3aaef41e1dd..607ddd66d3c 100644 --- a/storage/myisam/sort.c +++ b/storage/myisam/sort.c @@ -900,7 +900,6 @@ merge_buffers(MI_SORT_PARAM *info, uint keys, IO_CACHE *from_file, uchar *strpos; BUFFPEK *buffpek,**refpek; QUEUE queue; - volatile int *killed= killed_ptr(info->sort_info->param); DBUG_ENTER("merge_buffers"); count=error=0; @@ -933,10 +932,6 @@ merge_buffers(MI_SORT_PARAM *info, uint keys, IO_CACHE *from_file, { for (;;) { - if (*killed) - { - error=1; goto err; - } buffpek=(BUFFPEK*) queue_top(&queue); if (to_file) { @@ -956,6 +951,12 @@ merge_buffers(MI_SORT_PARAM *info, uint keys, IO_CACHE *from_file, buffpek->key+=sort_length; if (! --buffpek->mem_count) { + /* It's enough to check for killedptr before a slow operation */ + if (killed_ptr(info->sort_info->param)) + { + error=1; + goto err; + } if (!(error=(int) info->read_to_buffer(from_file,buffpek,sort_length))) { uchar *base= buffpek->base; diff --git a/storage/xtradb/fil/fil0fil.c b/storage/xtradb/fil/fil0fil.c index 741fac86e30..8d81fd41d58 100644 --- a/storage/xtradb/fil/fil0fil.c +++ b/storage/xtradb/fil/fil0fil.c @@ -3139,7 +3139,7 @@ skip_info: if (mach_read_from_4(page + FIL_PAGE_OFFSET) || !offset) { mach_write_to_4(page + FIL_PAGE_ARCH_LOG_NO_OR_SPACE_ID, id); - for (i = 0; i < n_index; i++) { + for (i = 0; (ulint) i < n_index; i++) { if (offset / UNIV_PAGE_SIZE == root_page[i]) { /* this is index root page */ mach_write_to_4(page + FIL_PAGE_DATA + PAGE_BTR_SEG_LEAF diff --git a/storage/xtradb/trx/trx0i_s.c b/storage/xtradb/trx/trx0i_s.c index 0d809806edc..90b73ad9e07 100644 --- a/storage/xtradb/trx/trx0i_s.c +++ b/storage/xtradb/trx/trx0i_s.c @@ -28,11 +28,11 @@ table cache" for later retrieval. Created July 17, 2007 Vasil Dimov *******************************************************/ -#include #include "mysql_addons.h" #include "univ.i" +#include #include "buf0buf.h" #include "dict0dict.h" #include "ha0storage.h" -- cgit v1.2.1