summaryrefslogtreecommitdiff
path: root/mysys
diff options
context:
space:
mode:
authorAlexander Nozdrin <alik@ibmvm>2010-08-04 12:18:32 +0400
committerAlexander Nozdrin <alik@ibmvm>2010-08-04 12:18:32 +0400
commitaeeafbb39656fc4678c72b00f958215754b32dc7 (patch)
tree512613b578f3b028a4c6b6272b2dc4820676ad8b /mysys
parentefc8a279356bd2afd8d6af341f7cf80860475efd (diff)
parent81906cdf3805fe5fcea47fef11945f9adbcef4d8 (diff)
downloadmariadb-git-aeeafbb39656fc4678c72b00f958215754b32dc7.tar.gz
Auto-merge from mysql-5.5.
Diffstat (limited to 'mysys')
-rw-r--r--mysys/CMakeLists.txt25
-rw-r--r--mysys/Makefile.am18
-rw-r--r--mysys/checksum.c7
-rw-r--r--mysys/default.c2
-rw-r--r--mysys/default_modify.c252
-rw-r--r--mysys/lf_alloc-pin.c6
-rw-r--r--mysys/lf_hash.c2
-rw-r--r--mysys/make-conf.c71
-rw-r--r--mysys/mf_iocache.c53
-rw-r--r--mysys/mf_iocache2.c11
-rw-r--r--mysys/mf_keycache.c15
-rw-r--r--mysys/mf_wfile.c123
-rw-r--r--mysys/my_append.c64
-rw-r--r--mysys/my_atomic.c7
-rw-r--r--mysys/my_bit.c7
-rw-r--r--mysys/my_bitmap.c186
-rw-r--r--mysys/my_clock.c32
-rw-r--r--mysys/my_dup.c41
-rw-r--r--mysys/my_handler.c2
-rw-r--r--mysys/my_init.c6
-rw-r--r--mysys/my_net.c42
-rw-r--r--mysys/my_pthread.c6
-rw-r--r--mysys/my_static.c3
-rw-r--r--mysys/my_static.h6
-rw-r--r--mysys/my_vle.c109
-rw-r--r--mysys/rijndael.c16
-rw-r--r--mysys/test_charset.c10
-rw-r--r--mysys/test_fn.c69
-rw-r--r--mysys/thr_alarm.c5
-rw-r--r--mysys/thr_lock.c51
-rw-r--r--mysys/trie.c236
31 files changed, 112 insertions, 1371 deletions
diff --git a/mysys/CMakeLists.txt b/mysys/CMakeLists.txt
index 83615c82e2a..ae41151a981 100644
--- a/mysys/CMakeLists.txt
+++ b/mysys/CMakeLists.txt
@@ -17,23 +17,23 @@
INCLUDE_DIRECTORIES(${ZLIB_INCLUDE_DIR} ${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/mysys)
-SET(MYSYS_SOURCES array.c charset-def.c charset.c checksum.c default.c default_modify.c
- errors.c hash.c list.c md5.c mf_brkhant.c mf_cache.c mf_dirname.c mf_fn_ext.c
+SET(MYSYS_SOURCES array.c charset-def.c charset.c checksum.c default.c
+ errors.c hash.c list.c md5.c mf_cache.c mf_dirname.c mf_fn_ext.c
mf_format.c mf_getdate.c mf_iocache.c mf_iocache2.c mf_keycache.c
mf_keycaches.c mf_loadpath.c mf_pack.c mf_path.c mf_qsort.c mf_qsort2.c
mf_radix.c mf_same.c mf_sort.c mf_soundex.c mf_arr_appstr.c mf_tempdir.c
- mf_tempfile.c mf_unixpath.c mf_wcomp.c mf_wfile.c mulalloc.c my_access.c
- my_aes.c my_alarm.c my_alloc.c my_append.c my_bit.c my_bitmap.c my_chsize.c
- my_clock.c my_compress.c my_copy.c my_crc32.c my_create.c my_delete.c
+ mf_tempfile.c mf_unixpath.c mf_wcomp.c mulalloc.c my_access.c
+ my_aes.c my_alloc.c my_bit.c my_bitmap.c my_chsize.c
+ my_compress.c my_copy.c my_create.c my_delete.c
my_div.c my_error.c my_file.c my_fopen.c my_fstream.c my_gethostbyname.c
my_gethwaddr.c my_getopt.c my_getsystime.c my_getwd.c my_handler.c my_init.c
- my_lib.c my_lock.c my_lockmem.c my_malloc.c my_mess.c
- my_mkdir.c my_mmap.c my_net.c my_once.c my_open.c my_pread.c my_pthread.c
+ my_lib.c my_lock.c my_malloc.c my_mess.c
+ my_mkdir.c my_mmap.c my_once.c my_open.c my_pread.c my_pthread.c
my_quick.c my_read.c my_redel.c my_rename.c my_seek.c my_sleep.c
my_static.c my_symlink.c my_symlink2.c my_sync.c my_thr_init.c
my_write.c ptr_cmp.c queues.c stacktrace.c
rijndael.c sha1.c string.c thr_alarm.c thr_lock.c thr_mutex.c
- thr_rwlock.c tree.c typelib.c my_vle.c base64.c my_memmem.c my_getpagesize.c
+ thr_rwlock.c tree.c typelib.c base64.c my_memmem.c my_getpagesize.c
lf_alloc-pin.c lf_dynarray.c lf_hash.c
my_atomic.c my_getncpus.c
my_rdtsc.c)
@@ -42,6 +42,10 @@ IF (WIN32)
SET (MYSYS_SOURCES ${MYSYS_SOURCES} my_winthread.c my_wincond.c my_winerr.c my_winfile.c my_windac.c my_conio.c)
ENDIF()
+IF(HAVE_ALARM)
+ SET(MYSYS_SOURCES ${MYSYS_SOURCES} my_alarm.c)
+ENDIF()
+
IF(NOT HAVE_CXX_NEW)
# gcc as C++ compiler does not have new/delete
SET(MYSYS_SOURCES ${MYSYS_SOURCES} my_new.cc)
@@ -58,10 +62,15 @@ IF(HAVE_LARGE_PAGES)
SET(MYSYS_SOURCES ${MYSYS_SOURCES} my_largepage.c)
ENDIF()
+IF(HAVE_MLOCK)
+ SET(MYSYS_SOURCES ${MYSYS_SOURCES} my_lockmem.c)
+ENDIF()
+
IF(UNIX)
# some workarounds
SET(MYSYS_SOURCES ${MYSYS_SOURCES} my_port.c)
ENDIF()
+
ADD_CONVENIENCE_LIBRARY(mysys ${MYSYS_SOURCES})
TARGET_LINK_LIBRARIES(mysys dbug strings ${ZLIB_LIBRARY}
${LIBNSL} ${LIBM} ${LIBRT})
diff --git a/mysys/Makefile.am b/mysys/Makefile.am
index a9e3f16c548..357fa321da6 100644
--- a/mysys/Makefile.am
+++ b/mysys/Makefile.am
@@ -24,31 +24,29 @@ LDADD = libmysys.a $(top_builddir)/strings/libmystrings.a $(top_builddir)/dbug
noinst_HEADERS = mysys_priv.h my_static.h my_handler_errors.h
libmysys_a_SOURCES = my_init.c my_getwd.c mf_getdate.c my_mmap.c \
mf_path.c mf_loadpath.c my_file.c \
- my_open.c my_create.c my_dup.c my_seek.c my_read.c \
+ my_open.c my_create.c my_seek.c my_read.c \
my_pread.c my_write.c my_getpagesize.c \
mf_keycaches.c my_crc32.c \
mf_iocache.c mf_iocache2.c mf_cache.c mf_tempfile.c \
mf_tempdir.c my_lock.c mf_brkhant.c my_alarm.c \
my_malloc.c my_once.c mulalloc.c \
- my_alloc.c my_new.cc my_vle.c my_atomic.c lf_hash.c \
+ my_alloc.c my_new.cc my_atomic.c lf_hash.c \
lf_dynarray.c lf_alloc-pin.c \
my_fopen.c my_fstream.c my_getsystime.c \
my_error.c errors.c my_div.c my_mess.c \
mf_format.c mf_same.c mf_dirname.c mf_fn_ext.c \
my_symlink.c my_symlink2.c \
mf_pack.c mf_unixpath.c mf_arr_appstr.c \
- mf_wcomp.c mf_wfile.c my_gethwaddr.c \
+ mf_wcomp.c my_gethwaddr.c \
mf_qsort.c mf_qsort2.c mf_sort.c \
ptr_cmp.c mf_radix.c queues.c my_getncpus.c \
- tree.c trie.c list.c hash.c array.c string.c typelib.c \
- my_copy.c my_append.c my_lib.c \
+ tree.c list.c hash.c array.c string.c typelib.c \
+ my_copy.c my_lib.c \
my_delete.c my_rename.c my_redel.c \
- my_chsize.c my_clock.c \
- my_quick.c my_lockmem.c my_static.c \
+ my_chsize.c my_quick.c my_lockmem.c my_static.c \
my_sync.c my_getopt.c my_mkdir.c \
- default_modify.c default.c \
- my_compress.c checksum.c \
- my_net.c my_port.c my_sleep.c \
+ default.c my_compress.c checksum.c \
+ my_port.c my_sleep.c \
charset.c charset-def.c my_bitmap.c my_bit.c md5.c \
my_gethostbyname.c rijndael.c my_aes.c sha1.c \
my_handler.c my_largepage.c \
diff --git a/mysys/checksum.c b/mysys/checksum.c
index 1c7c9358d53..a96ea31ea0e 100644
--- a/mysys/checksum.c
+++ b/mysys/checksum.c
@@ -30,13 +30,6 @@
ha_checksum my_checksum(ha_checksum crc, const uchar *pos, size_t length)
{
-#ifdef NOT_USED
- const uchar *end=pos+length;
- for ( ; pos != end ; pos++)
- crc=((crc << 8) + *((uchar*) pos)) + (crc >> (8*sizeof(ha_checksum)-8));
- return crc;
-#else
return (ha_checksum)crc32((uint)crc, pos, (uint)length);
-#endif
}
diff --git a/mysys/default.c b/mysys/default.c
index 8002a1a0307..0e0883e1fcf 100644
--- a/mysys/default.c
+++ b/mysys/default.c
@@ -575,7 +575,7 @@ int my_load_defaults(const char *conf_file, const char **groups,
void free_defaults(char **argv)
{
MEM_ROOT ptr;
- memcpy_fixed((char*) &ptr,(char *) argv - sizeof(ptr), sizeof(ptr));
+ memcpy(&ptr, ((char *) argv) - sizeof(ptr), sizeof(ptr));
free_root(&ptr,MYF(0));
}
diff --git a/mysys/default_modify.c b/mysys/default_modify.c
deleted file mode 100644
index edf4907cd4b..00000000000
--- a/mysys/default_modify.c
+++ /dev/null
@@ -1,252 +0,0 @@
-/* Copyright (C) 2005 MySQL AB
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; version 2 of the License.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
-
-#include "my_global.h"
-#include "mysys_priv.h"
-#include "m_string.h"
-#include <my_dir.h>
-
-#define BUFF_SIZE 1024
-#define RESERVE 1024 /* Extend buffer with this extent */
-
-#ifdef _WIN32
-#define NEWLINE "\r\n"
-#define NEWLINE_LEN 2
-#else
-#define NEWLINE "\n"
-#define NEWLINE_LEN 1
-#endif
-
-static char *add_option(char *dst, const char *option_value,
- const char *option, int remove_option);
-
-
-/*
- Add/remove option to the option file section.
-
- SYNOPSYS
- modify_defaults_file()
- file_location The location of configuration file to edit
- option The name of the option to look for (can be NULL)
- option value The value of the option we would like to set (can be NULL)
- section_name The name of the section (must be NOT NULL)
- remove_option This defines what we want to remove:
- - MY_REMOVE_NONE -- nothing to remove;
- - MY_REMOVE_OPTION -- remove the specified option;
- - MY_REMOVE_SECTION -- remove the specified section;
- IMPLEMENTATION
- We open the option file first, then read the file line-by-line,
- looking for the section we need. At the same time we put these lines
- into a buffer. Then we look for the option within this section and
- change/remove it. In the end we get a buffer with modified version of the
- file. Then we write it to the file, truncate it if needed and close it.
- Note that there is a small time gap, when the file is incomplete,
- and this theoretically might introduce a problem.
-
- RETURN
- 0 - ok
- 1 - some error has occured. Probably due to the lack of resourses
- 2 - cannot open the file
-*/
-
-int modify_defaults_file(const char *file_location, const char *option,
- const char *option_value,
- const char *section_name, int remove_option)
-{
- FILE *cnf_file;
- MY_STAT file_stat;
- char linebuff[BUFF_SIZE], *src_ptr, *dst_ptr, *file_buffer;
- size_t opt_len= 0, optval_len= 0, sect_len, new_opt_len, reserve_extended;
- uint nr_newlines= 0, buffer_size;
- my_bool in_section= FALSE, opt_applied= 0;
- int reserve_occupied= 0;
- DBUG_ENTER("modify_defaults_file");
-
- if (!(cnf_file= my_fopen(file_location, O_RDWR | O_BINARY, MYF(0))))
- DBUG_RETURN(2);
-
- /* my_fstat doesn't use the flag parameter */
- if (my_fstat(my_fileno(cnf_file), &file_stat, MYF(0)))
- goto malloc_err;
-
- if (option && option_value)
- {
- opt_len= strlen(option);
- optval_len= strlen(option_value);
- }
-
- new_opt_len= opt_len + 1 + optval_len + NEWLINE_LEN;
-
- /* calculate the size of the buffer we need */
- reserve_extended= (opt_len +
- 1 + /* For '=' char */
- optval_len + /* Option value len */
- NEWLINE_LEN + /* Space for newline */
- RESERVE); /* Some additional space */
-
- buffer_size= (file_stat.st_size +
- 1); /* The ending zero */
-
- /*
- Reserve space to read the contents of the file and some more
- for the option we want to add.
- */
- if (!(file_buffer= (char*) my_malloc(buffer_size + reserve_extended,
- MYF(MY_WME))))
- goto malloc_err;
-
- sect_len= strlen(section_name);
-
- for (dst_ptr= file_buffer; fgets(linebuff, BUFF_SIZE, cnf_file); )
- {
- /* Skip over whitespaces */
- for (src_ptr= linebuff; my_isspace(&my_charset_latin1, *src_ptr);
- src_ptr++)
- {}
-
- if (!*src_ptr) /* Empty line */
- {
- nr_newlines++;
- continue;
- }
-
- /* correct the option (if requested) */
- if (option && in_section && !strncmp(src_ptr, option, opt_len) &&
- (*(src_ptr + opt_len) == '=' ||
- my_isspace(&my_charset_latin1, *(src_ptr + opt_len)) ||
- *(src_ptr + opt_len) == '\0'))
- {
- char *old_src_ptr= src_ptr;
- src_ptr= strend(src_ptr+ opt_len); /* Find the end of the line */
-
- /* could be negative */
- reserve_occupied+= (int) new_opt_len - (int) (src_ptr - old_src_ptr);
- if (reserve_occupied >= (int) reserve_extended)
- {
- reserve_extended= (uint) reserve_occupied + RESERVE;
- if (!(file_buffer= (char*) my_realloc(file_buffer, buffer_size +
- reserve_extended,
- MYF(MY_WME|MY_FREE_ON_ERROR))))
- goto malloc_err;
- }
- opt_applied= 1;
- dst_ptr= add_option(dst_ptr, option_value, option, remove_option);
- }
- else
- {
- /*
- If we are going to the new group and have an option to apply, do
- it now. If we are removing a single option or the whole section
- this will only trigger opt_applied flag.
- */
-
- if (in_section && !opt_applied && *src_ptr == '[')
- {
- dst_ptr= add_option(dst_ptr, option_value, option, remove_option);
- opt_applied= 1; /* set the flag to do write() later */
- reserve_occupied= new_opt_len+ opt_len + 1 + NEWLINE_LEN;
- }
-
- for (; nr_newlines; nr_newlines--)
- dst_ptr= strmov(dst_ptr, NEWLINE);
-
- /* Skip the section if MY_REMOVE_SECTION was given */
- if (!in_section || remove_option != MY_REMOVE_SECTION)
- dst_ptr= strmov(dst_ptr, linebuff);
- }
- /* Look for a section */
- if (*src_ptr == '[')
- {
- /* Copy the line to the buffer */
- if (!strncmp(++src_ptr, section_name, sect_len))
- {
- src_ptr+= sect_len;
- /* Skip over whitespaces. They are allowed after section name */
- for (; my_isspace(&my_charset_latin1, *src_ptr); src_ptr++)
- {}
-
- if (*src_ptr != ']')
- {
- in_section= FALSE;
- continue; /* Missing closing parenthesis. Assume this was no group */
- }
-
- if (remove_option == MY_REMOVE_SECTION)
- dst_ptr= dst_ptr - strlen(linebuff);
-
- in_section= TRUE;
- }
- else
- in_section= FALSE; /* mark that this section is of no interest to us */
- }
- }
-
- /*
- File ended. Apply an option or set opt_applied flag (in case of
- MY_REMOVE_SECTION) so that the changes are saved. Do not do anything
- if we are removing non-existent option.
- */
-
- if (!opt_applied && in_section && (remove_option != MY_REMOVE_OPTION))
- {
- /* New option still remains to apply at the end */
- if (!remove_option && *(dst_ptr - 1) != '\n')
- dst_ptr= strmov(dst_ptr, NEWLINE);
- dst_ptr= add_option(dst_ptr, option_value, option, remove_option);
- opt_applied= 1;
- }
- for (; nr_newlines; nr_newlines--)
- dst_ptr= strmov(dst_ptr, NEWLINE);
-
- if (opt_applied)
- {
- /* Don't write the file if there are no changes to be made */
- if (my_chsize(my_fileno(cnf_file), (my_off_t) (dst_ptr - file_buffer), 0,
- MYF(MY_WME)) ||
- my_fseek(cnf_file, 0, MY_SEEK_SET, MYF(0)) ||
- my_fwrite(cnf_file, (uchar*) file_buffer, (size_t) (dst_ptr - file_buffer),
- MYF(MY_NABP)))
- goto err;
- }
- if (my_fclose(cnf_file, MYF(MY_WME)))
- DBUG_RETURN(1);
-
- my_free(file_buffer);
- DBUG_RETURN(0);
-
-err:
- my_free(file_buffer);
-malloc_err:
- my_fclose(cnf_file, MYF(0));
- DBUG_RETURN(1); /* out of resources */
-}
-
-
-static char *add_option(char *dst, const char *option_value,
- const char *option, int remove_option)
-{
- if (!remove_option)
- {
- dst= strmov(dst, option);
- if (*option_value)
- {
- *dst++= '=';
- dst= strmov(dst, option_value);
- }
- /* add a newline */
- dst= strmov(dst, NEWLINE);
- }
- return dst;
-}
diff --git a/mysys/lf_alloc-pin.c b/mysys/lf_alloc-pin.c
index c264d3ac4c5..4ed01ac8083 100644
--- a/mysys/lf_alloc-pin.c
+++ b/mysys/lf_alloc-pin.c
@@ -448,8 +448,6 @@ void lf_alloc_init(LF_ALLOCATOR *allocator, uint size, uint free_ptr_offset)
allocator->top= 0;
allocator->mallocs= 0;
allocator->element_size= size;
- allocator->constructor= 0;
- allocator->destructor= 0;
DBUG_ASSERT(size >= sizeof(void*) + free_ptr_offset);
}
@@ -470,8 +468,6 @@ void lf_alloc_destroy(LF_ALLOCATOR *allocator)
while (node)
{
uchar *tmp= anext_node(node);
- if (allocator->destructor)
- allocator->destructor(node);
my_free(node);
node= tmp;
}
@@ -500,8 +496,6 @@ void *_lf_alloc_new(LF_PINS *pins)
if (!node)
{
node= (void *)my_malloc(allocator->element_size, MYF(MY_WME));
- if (allocator->constructor)
- allocator->constructor(node);
#ifdef MY_LF_EXTRA_DEBUG
if (likely(node != 0))
my_atomic_add32(&allocator->mallocs, 1);
diff --git a/mysys/lf_hash.c b/mysys/lf_hash.c
index 9c51ff1766e..e7bf82fc6ca 100644
--- a/mysys/lf_hash.c
+++ b/mysys/lf_hash.c
@@ -41,8 +41,6 @@ typedef struct {
*/
} LF_SLIST;
-const int LF_HASH_OVERHEAD= sizeof(LF_SLIST);
-
/*
a structure to pass the context (pointers two the three successive elements
in a list) from lfind to linsert/ldelete
diff --git a/mysys/make-conf.c b/mysys/make-conf.c
deleted file mode 100644
index 0dacde4dee0..00000000000
--- a/mysys/make-conf.c
+++ /dev/null
@@ -1,71 +0,0 @@
-/* Copyright (C) 2000 MySQL AB
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; version 2 of the License.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
-
-/* make-conf.c
- * make a charset .conf file out of a ctype-charset.c file.
- */
-
-#ifndef CHARSET
-#error You must define the charset, e.g.: -DCHARSET=latin1
-#endif
-
-/* some pre-processor tricks to get us going */
-#define _STRINGIZE_HELPER(x) #x
-#define STRINGIZE(x) _STRINGIZE_HELPER(x)
-
-#define _JOIN_WORDS_HELPER(a, b) a ## b
-#define JOIN_WORDS(a, b) _JOIN_WORDS_HELPER(a, b)
-
-#define CH_SRC ctype- ## CHARSET ## .c
-#define CH_INCLUDE STRINGIZE(CH_SRC)
-
-/* aaaah, that's better */
-#include <my_my_global.h>
-#include CH_INCLUDE
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#define ROW_LEN 16
-
-void print_array(const char *name, const uchar *array, uint size);
-
-int main(void)
-{
- printf("# Configuration file for the "
- STRINGIZE(CHARSET)
- " character set.\n");
-
- print_array("ctype", JOIN_WORDS(ctype_, CHARSET), 257);
- print_array("to_lower", JOIN_WORDS(to_lower_, CHARSET), 256);
- print_array("to_upper", JOIN_WORDS(to_upper_, CHARSET), 256);
- print_array("sort_order", JOIN_WORDS(sort_order_, CHARSET), 256);
-
- exit(EXIT_SUCCESS);
-}
-
-void print_array(const char *name, const uchar *array, uint size)
-{
- uint i;
-
- printf("\n# The %s array must have %d elements.\n", name, size);
-
- for (i = 0; i < size; ++i) {
- printf(" %02X", array[i]);
-
- if ((i+1) % ROW_LEN == size % ROW_LEN)
- printf("\n");
- }
-}
diff --git a/mysys/mf_iocache.c b/mysys/mf_iocache.c
index d9b1bfcaa7f..173b678cdd1 100644
--- a/mysys/mf_iocache.c
+++ b/mysys/mf_iocache.c
@@ -47,7 +47,6 @@ TODO:
write buffer to the read buffer before we start to reuse it.
*/
-#define MAP_TO_USE_RAID
#include "mysys_priv.h"
#include <m_string.h>
#ifdef HAVE_AIOWAIT
@@ -455,7 +454,9 @@ my_bool reinit_io_cache(IO_CACHE *info, enum cache_type type,
RETURN
0 we succeeded in reading all data
- 1 Error: can't read requested characters
+ 1 Error: couldn't read requested characters. In this case:
+ If info->error == -1, we got a read error.
+ Otherwise info->error contains the number of bytes in Buffer.
*/
int _my_b_read(register IO_CACHE *info, uchar *Buffer, size_t Count)
@@ -464,6 +465,7 @@ int _my_b_read(register IO_CACHE *info, uchar *Buffer, size_t Count)
my_off_t pos_in_file;
DBUG_ENTER("_my_b_read");
+ /* If the buffer is not empty yet, copy what is available. */
if ((left_length= (size_t) (info->read_end-info->read_pos)))
{
DBUG_ASSERT(Count >= left_length); /* User is not using my_b_read() */
@@ -475,7 +477,7 @@ int _my_b_read(register IO_CACHE *info, uchar *Buffer, size_t Count)
/* pos_in_file always point on where info->buffer was read */
pos_in_file=info->pos_in_file+ (size_t) (info->read_end - info->buffer);
- /*
+ /*
Whenever a function which operates on IO_CACHE flushes/writes
some part of the IO_CACHE to disk it will set the property
"seek_not_done" to indicate this to other functions operating
@@ -502,19 +504,38 @@ int _my_b_read(register IO_CACHE *info, uchar *Buffer, size_t Count)
}
}
+ /*
+ Calculate, how much we are within a IO_SIZE block. Ideally this
+ should be zero.
+ */
diff_length= (size_t) (pos_in_file & (IO_SIZE-1));
+
+ /*
+ If more than a block plus the rest of the current block is wanted,
+ we do read directly, without filling the buffer.
+ */
if (Count >= (size_t) (IO_SIZE+(IO_SIZE-diff_length)))
{ /* Fill first intern buffer */
size_t read_length;
if (info->end_of_file <= pos_in_file)
- { /* End of file */
+ {
+ /* End of file. Return, what we did copy from the buffer. */
info->error= (int) left_length;
DBUG_RETURN(1);
}
+ /*
+ Crop the wanted count to a multiple of IO_SIZE and subtract,
+ what we did already read from a block. That way, the read will
+ end aligned with a block.
+ */
length=(Count & (size_t) ~(IO_SIZE-1))-diff_length;
if ((read_length= my_read(info->file,Buffer, length, info->myflags))
!= length)
{
+ /*
+ If we didn't get, what we wanted, we either return -1 for a read
+ error, or (it's end of file), how much we got in total.
+ */
info->error= (read_length == (size_t) -1 ? -1 :
(int) (read_length+left_length));
DBUG_RETURN(1);
@@ -526,15 +547,27 @@ int _my_b_read(register IO_CACHE *info, uchar *Buffer, size_t Count)
diff_length=0;
}
+ /*
+ At this point, we want less than one and a partial block.
+ We will read a full cache, minus the number of bytes, we are
+ within a block already. So we will reach new alignment.
+ */
max_length= info->read_length-diff_length;
+ /* We will not read past end of file. */
if (info->type != READ_FIFO &&
max_length > (info->end_of_file - pos_in_file))
max_length= (size_t) (info->end_of_file - pos_in_file);
+ /*
+ If there is nothing left to read,
+ we either are done, or we failed to fulfill the request.
+ Otherwise, we read max_length into the cache.
+ */
if (!max_length)
{
if (Count)
{
- info->error= left_length; /* We only got this many char */
+ /* We couldn't fulfil the request. Return, how much we got. */
+ info->error= left_length;
DBUG_RETURN(1);
}
length=0; /* Didn't read any chars */
@@ -543,13 +576,23 @@ int _my_b_read(register IO_CACHE *info, uchar *Buffer, size_t Count)
info->myflags)) < Count ||
length == (size_t) -1)
{
+ /*
+ We got an read error, or less than requested (end of file).
+ If not a read error, copy, what we got.
+ */
if (length != (size_t) -1)
memcpy(Buffer, info->buffer, length);
info->pos_in_file= pos_in_file;
+ /* For a read error, return -1, otherwise, what we got in total. */
info->error= length == (size_t) -1 ? -1 : (int) (length+left_length);
info->read_pos=info->read_end=info->buffer;
DBUG_RETURN(1);
}
+ /*
+ Count is the remaining number of bytes requested.
+ length is the amount of data in the cache.
+ Read Count bytes from the cache.
+ */
info->read_pos=info->buffer+Count;
info->read_end=info->buffer+length;
info->pos_in_file=pos_in_file;
diff --git a/mysys/mf_iocache2.c b/mysys/mf_iocache2.c
index 5e34bff2b51..7a40ea8a86f 100644
--- a/mysys/mf_iocache2.c
+++ b/mysys/mf_iocache2.c
@@ -17,7 +17,6 @@
More functions to be used with IO_CACHE files
*/
-#define MAP_TO_USE_RAID
#include "mysys_priv.h"
#include <m_string.h>
#include <stdarg.h>
@@ -71,6 +70,16 @@ my_b_copy_to_file(IO_CACHE *cache, FILE *file)
my_off_t my_b_append_tell(IO_CACHE* info)
{
/*
+ Sometimes we want to make sure that the variable is not put into
+ a register in debugging mode so we can see its value in the core
+ */
+#ifndef DBUG_OFF
+# define dbug_volatile volatile
+#else
+# define dbug_volatile
+#endif
+
+ /*
Prevent optimizer from putting res in a register when debugging
we need this to be able to see the value of res when the assert fails
*/
diff --git a/mysys/mf_keycache.c b/mysys/mf_keycache.c
index c42c3d469e6..fc62d3d8a8e 100644
--- a/mysys/mf_keycache.c
+++ b/mysys/mf_keycache.c
@@ -2683,10 +2683,7 @@ uchar *key_cache_read(KEY_CACHE *keycache,
#endif
/* Copy data from the cache buffer */
- if (!(read_length & 511))
- bmove512(buff, block->buffer+offset, read_length);
- else
- memcpy(buff, block->buffer+offset, (size_t) read_length);
+ memcpy(buff, block->buffer+offset, (size_t) read_length);
#if !defined(SERIALIZED_READ_FROM_CACHE)
keycache_pthread_mutex_lock(&keycache->cache_lock);
@@ -2920,10 +2917,7 @@ int key_cache_insert(KEY_CACHE *keycache,
#endif
/* Copy data from buff */
- if (!(read_length & 511))
- bmove512(block->buffer+offset, buff, read_length);
- else
- memcpy(block->buffer+offset, buff, (size_t) read_length);
+ memcpy(block->buffer+offset, buff, (size_t) read_length);
#if !defined(SERIALIZED_READ_FROM_CACHE)
keycache_pthread_mutex_lock(&keycache->cache_lock);
@@ -3246,10 +3240,7 @@ int key_cache_write(KEY_CACHE *keycache,
#if !defined(SERIALIZED_READ_FROM_CACHE)
keycache_pthread_mutex_unlock(&keycache->cache_lock);
#endif
- if (!(read_length & 511))
- bmove512(block->buffer+offset, buff, read_length);
- else
- memcpy(block->buffer+offset, buff, (size_t) read_length);
+ memcpy(block->buffer+offset, buff, (size_t) read_length);
#if !defined(SERIALIZED_READ_FROM_CACHE)
keycache_pthread_mutex_lock(&keycache->cache_lock);
diff --git a/mysys/mf_wfile.c b/mysys/mf_wfile.c
deleted file mode 100644
index 95c4c006b2c..00000000000
--- a/mysys/mf_wfile.c
+++ /dev/null
@@ -1,123 +0,0 @@
-/* Copyright (C) 2000 MySQL AB
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; version 2 of the License.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
-
-/* Functions for finding files with wildcards */
-
-/*
- The following file-name-test is supported:
- - "name [[,] name...] ; Matches any of used filenames.
- Each name can have "*" and/or "?"
- wild-cards.
- - [wildspec [,]] !wildspec2 ; File that matches wildspec and not
- wildspec2.
-*/
-
-#include "mysys_priv.h"
-#include <m_string.h>
-
- /* Store wildcard-string in a easyer format */
-
-WF_PACK *wf_comp(char * str)
-{
- uint ant;
- int not_pos;
- register char * pos;
- char * buffer;
- WF_PACK *ret;
- DBUG_ENTER("wf_comp");
-
- not_pos= -1; /* Skip space and '!' in front */
- while (*str == ' ')
- str++;
- if (*str == '!')
- {
- not_pos=0;
- while (*++str == ' ') {};
- }
- if (*str == 0) /* Empty == everything */
- DBUG_RETURN((WF_PACK *) NULL);
-
- ant=1; /* Count filespecs */
- for (pos=str ; *pos ; pos++)
- ant+= test(*pos == ' ' || *pos == ',');
-
- if ((ret= (WF_PACK*) my_malloc((uint) ant*(sizeof(char **)+2)+
- sizeof(WF_PACK)+ (uint) strlen(str)+1,
- MYF(MY_WME)))
- == 0)
- DBUG_RETURN((WF_PACK *) NULL);
- ret->wild= (char **) (ret+1);
- buffer= (char *) (ret->wild+ant);
-
- ant=0;
- for (pos=str ; *pos ; str= pos)
- {
- ret->wild[ant++]=buffer;
- while (*pos != ' ' && *pos != ',' && *pos != '!' && *pos)
- *buffer++ = *pos++;
-
- *buffer++ = '\0';
- while (*pos == ' ' || *pos == ',' || *pos == '!' )
- if (*pos++ == '!' && not_pos <0)
- not_pos=(int) ant;
- }
-
- ret->wilds=ant;
- if (not_pos <0)
- ret->not_pos=ant;
- else
- ret->not_pos=(uint) not_pos;
-
- DBUG_PRINT("exit",("antal: %d not_pos: %d",ret->wilds,ret->not_pos));
- DBUG_RETURN(ret);
-} /* wf_comp */
-
-
- /* Test if a given filename is matched */
-
-int wf_test(register WF_PACK *wf_pack, register const char *name)
-{
- reg2 uint i;
- reg3 uint not_pos;
- DBUG_ENTER("wf_test");
-
- if (! wf_pack || wf_pack->wilds == 0)
- DBUG_RETURN(0); /* Everything goes */
-
- not_pos=wf_pack->not_pos;
- for (i=0 ; i < not_pos; i++)
- if (wild_compare(name,wf_pack->wild[i],0) == 0)
- goto found;
- if (i)
- DBUG_RETURN(1); /* No-match */
-
-found:
-/* Test that it isn't in not-list */
-
- for (i=not_pos ; i < wf_pack->wilds; i++)
- if (wild_compare(name,wf_pack->wild[i],0) == 0)
- DBUG_RETURN(1);
- DBUG_RETURN(0);
-} /* wf_test */
-
-
- /* We need this because program don't know with malloc we used */
-
-void wf_end(WF_PACK *buffer)
-{
- DBUG_ENTER("wf_end");
- my_free(buffer);
- DBUG_VOID_RETURN;
-} /* wf_end */
diff --git a/mysys/my_append.c b/mysys/my_append.c
deleted file mode 100644
index 1ef3905b6f5..00000000000
--- a/mysys/my_append.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/* Copyright (C) 2000 MySQL AB
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; version 2 of the License.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
-
-#include "mysys_priv.h"
-#include <sys/stat.h>
-#include <m_string.h>
-#if defined(HAVE_UTIME_H)
-#include <utime.h>
-#elif defined(HAVE_SYS_UTIME_H)
-#include <sys/utime.h>
-#elif !defined(HPUX10)
-struct utimbuf {
- time_t actime;
- time_t modtime;
-};
-#endif
-
-/*
- Append a file to another
-
- NOTES
- Don't set MY_FNABP or MY_NABP bits on when calling this function
-*/
-
-int my_append(const char *from, const char *to, myf MyFlags)
-{
- size_t Count;
- File from_file,to_file;
- uchar buff[IO_SIZE];
- DBUG_ENTER("my_append");
- DBUG_PRINT("my",("from %s to %s MyFlags %d", from, to, MyFlags));
-
- from_file= to_file= -1;
-
- if ((from_file=my_open(from,O_RDONLY,MyFlags)) >= 0)
- {
- if ((to_file=my_open(to,O_APPEND | O_WRONLY,MyFlags)) >= 0)
- {
- while ((Count=my_read(from_file,buff,IO_SIZE,MyFlags)) != 0)
- if (Count == (uint) -1 ||
- my_write(to_file,buff,Count,MYF(MyFlags | MY_NABP)))
- goto err;
- if (my_close(from_file,MyFlags) | my_close(to_file,MyFlags))
- DBUG_RETURN(-1); /* Error on close */
- DBUG_RETURN(0);
- }
- }
-err:
- if (from_file >= 0) (void) my_close(from_file,MyFlags);
- if (to_file >= 0) (void) my_close(to_file,MyFlags);
- DBUG_RETURN(-1);
-}
diff --git a/mysys/my_atomic.c b/mysys/my_atomic.c
index 6bc76f0de3c..7cbe15cfb74 100644
--- a/mysys/my_atomic.c
+++ b/mysys/my_atomic.c
@@ -16,13 +16,6 @@
#include <my_global.h>
#include <my_sys.h>
-#ifndef HAVE_INLINE
-/* the following will cause all inline functions to be instantiated */
-#define HAVE_INLINE
-#undef STATIC_INLINE
-#define STATIC_INLINE extern
-#endif
-
#include <my_atomic.h>
/*
diff --git a/mysys/my_bit.c b/mysys/my_bit.c
index 2881eb1ebd2..f072f243765 100644
--- a/mysys/my_bit.c
+++ b/mysys/my_bit.c
@@ -15,13 +15,6 @@
#include <my_global.h>
-#ifndef HAVE_INLINE
-/* the following will cause all inline functions to be instantiated */
-#define HAVE_INLINE
-#undef STATIC_INLINE
-#define STATIC_INLINE extern
-#endif
-
#include <my_bit.h>
const char _my_bits_nbits[256] = {
diff --git a/mysys/my_bitmap.c b/mysys/my_bitmap.c
index 3de05fa8664..3401c7301e9 100644
--- a/mysys/my_bitmap.c
+++ b/mysys/my_bitmap.c
@@ -566,192 +566,6 @@ void bitmap_lock_clear_bit(MY_BITMAP *map, uint bitmap_bit)
bitmap_unlock(map);
}
-
-#ifdef NOT_USED
-my_bool bitmap_lock_is_prefix(const MY_BITMAP *map, uint prefix_size)
-{
- my_bool res;
- bitmap_lock((MY_BITMAP *)map);
- res= bitmap_is_prefix(map, prefix_size);
- bitmap_unlock((MY_BITMAP *)map);
- return res;
-}
-
-
-void bitmap_lock_set_all(MY_BITMAP *map)
-{
- bitmap_lock(map);
- bitmap_set_all(map);
- bitmap_unlock(map);
-}
-
-
-void bitmap_lock_clear_all(MY_BITMAP *map)
-{
- bitmap_lock(map);
- bitmap_clear_all(map);
- bitmap_unlock(map);
-}
-
-
-void bitmap_lock_set_prefix(MY_BITMAP *map, uint prefix_size)
-{
- bitmap_lock(map);
- bitmap_set_prefix(map, prefix_size);
- bitmap_unlock(map);
-}
-
-
-my_bool bitmap_lock_is_clear_all(const MY_BITMAP *map)
-{
- uint res;
- bitmap_lock((MY_BITMAP *)map);
- res= bitmap_is_clear_all(map);
- bitmap_unlock((MY_BITMAP *)map);
- return res;
-}
-
-
-my_bool bitmap_lock_is_set_all(const MY_BITMAP *map)
-{
- uint res;
- bitmap_lock((MY_BITMAP *)map);
- res= bitmap_is_set_all(map);
- bitmap_unlock((MY_BITMAP *)map);
- return res;
-}
-
-
-my_bool bitmap_lock_is_set(const MY_BITMAP *map, uint bitmap_bit)
-{
- my_bool res;
- DBUG_ASSERT(map->bitmap && bitmap_bit < map->n_bits);
- bitmap_lock((MY_BITMAP *)map);
- res= bitmap_is_set(map, bitmap_bit);
- bitmap_unlock((MY_BITMAP *)map);
- return res;
-}
-
-
-my_bool bitmap_lock_is_subset(const MY_BITMAP *map1, const MY_BITMAP *map2)
-{
- uint res;
- bitmap_lock((MY_BITMAP *)map1);
- bitmap_lock((MY_BITMAP *)map2);
- res= bitmap_is_subset(map1, map2);
- bitmap_unlock((MY_BITMAP *)map2);
- bitmap_unlock((MY_BITMAP *)map1);
- return res;
-}
-
-
-my_bool bitmap_lock_cmp(const MY_BITMAP *map1, const MY_BITMAP *map2)
-{
- uint res;
-
- DBUG_ASSERT(map1->bitmap && map2->bitmap &&
- map1->n_bits==map2->n_bits);
- bitmap_lock((MY_BITMAP *)map1);
- bitmap_lock((MY_BITMAP *)map2);
- res= bitmap_cmp(map1, map2);
- bitmap_unlock((MY_BITMAP *)map2);
- bitmap_unlock((MY_BITMAP *)map1);
- return res;
-}
-
-
-void bitmap_lock_intersect(MY_BITMAP *map, const MY_BITMAP *map2)
-{
- bitmap_lock(map);
- bitmap_lock((MY_BITMAP *)map2);
- bitmap_intersect(map, map2);
- bitmap_unlock((MY_BITMAP *)map2);
- bitmap_unlock(map);
-}
-
-
-void bitmap_lock_subtract(MY_BITMAP *map, const MY_BITMAP *map2)
-{
- bitmap_lock(map);
- bitmap_lock((MY_BITMAP *)map2);
- bitmap_subtract(map, map2);
- bitmap_unlock((MY_BITMAP *)map2);
- bitmap_unlock(map);
-}
-
-
-void bitmap_lock_union(MY_BITMAP *map, const MY_BITMAP *map2)
-{
- bitmap_lock(map);
- bitmap_lock((MY_BITMAP *)map2);
- bitmap_union(map, map2);
- bitmap_unlock((MY_BITMAP *)map2);
- bitmap_unlock(map);
-}
-
-
-/*
- SYNOPSIS
- bitmap_bits_set()
- map
- RETURN
- Number of set bits in the bitmap.
-*/
-uint bitmap_lock_bits_set(const MY_BITMAP *map)
-{
- uint res;
- bitmap_lock((MY_BITMAP *)map);
- DBUG_ASSERT(map->bitmap);
- res= bitmap_bits_set(map);
- bitmap_unlock((MY_BITMAP *)map);
- return res;
-}
-
-
-/*
- SYNOPSIS
- bitmap_get_first()
- map
- RETURN
- Number of first unset bit in the bitmap or MY_BIT_NONE if all bits are set.
-*/
-uint bitmap_lock_get_first(const MY_BITMAP *map)
-{
- uint res;
- bitmap_lock((MY_BITMAP*)map);
- res= bitmap_get_first(map);
- bitmap_unlock((MY_BITMAP*)map);
- return res;
-}
-
-
-uint bitmap_lock_get_first_set(const MY_BITMAP *map)
-{
- uint res;
- bitmap_lock((MY_BITMAP*)map);
- res= bitmap_get_first_set(map);
- bitmap_unlock((MY_BITMAP*)map);
- return res;
-}
-
-
-void bitmap_lock_set_bit(MY_BITMAP *map, uint bitmap_bit)
-{
- DBUG_ASSERT(map->bitmap && bitmap_bit < map->n_bits);
- bitmap_lock(map);
- bitmap_set_bit(map, bitmap_bit);
- bitmap_unlock(map);
-}
-
-
-void bitmap_lock_flip_bit(MY_BITMAP *map, uint bitmap_bit)
-{
- DBUG_ASSERT(map->bitmap && bitmap_bit < map->n_bits);
- bitmap_lock(map);
- bitmap_flip_bit(map, bitmap_bit);
- bitmap_unlock(map);
-}
-#endif
#ifdef MAIN
uint get_rand_bit(uint bitsize)
diff --git a/mysys/my_clock.c b/mysys/my_clock.c
deleted file mode 100644
index da04feb462f..00000000000
--- a/mysys/my_clock.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/* Copyright (C) 2000 MySQL AB
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; version 2 of the License.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
-
-#include "my_global.h"
-
-#if !defined(_MSC_VER) && !defined(__BORLANDC__)
-#include "mysys_priv.h"
-#include <sys/times.h>
-#endif
-
-long my_clock(void)
-{
-#if !defined(__WIN__)
- struct tms tmsbuf;
- (void) times(&tmsbuf);
- return (tmsbuf.tms_utime + tmsbuf.tms_stime);
-#else
- return clock();
-#endif
-}
diff --git a/mysys/my_dup.c b/mysys/my_dup.c
deleted file mode 100644
index 5fdd6e9f364..00000000000
--- a/mysys/my_dup.c
+++ /dev/null
@@ -1,41 +0,0 @@
-/* Copyright (C) 2000 MySQL AB
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; version 2 of the License.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
-
-#include "mysys_priv.h"
-#include "mysys_err.h"
-#include <my_dir.h>
-#include <errno.h>
-#if defined(__WIN__)
-#include <share.h>
-#endif
-
- /* Open a file */
-
-File my_dup(File file, myf MyFlags)
-{
- File fd;
- const char *filename;
- DBUG_ENTER("my_dup");
- DBUG_PRINT("my",("file: %d MyFlags: %d", file, MyFlags));
-#ifdef _WIN32
- fd= my_win_dup(file);
-#else
- fd= dup(file);
-#endif
- filename= (((uint) file < my_file_limit) ?
- my_file_info[(int) file].name : "Unknown");
- DBUG_RETURN(my_register_filename(fd, filename, FILE_BY_DUP,
- EE_FILENOTFOUND, MyFlags));
-} /* my_open */
diff --git a/mysys/my_handler.c b/mysys/my_handler.c
index 48d100f2d3f..bd1e313d066 100644
--- a/mysys/my_handler.c
+++ b/mysys/my_handler.c
@@ -23,6 +23,8 @@
#include "my_handler_errors.h"
+#define CMP_NUM(a,b) (((a) < (b)) ? -1 : ((a) == (b)) ? 0 : 1)
+
int ha_compare_text(CHARSET_INFO *charset_info, uchar *a, uint a_length,
uchar *b, uint b_length, my_bool part_key,
my_bool skip_end_space)
diff --git a/mysys/my_init.c b/mysys/my_init.c
index dbf1bfe761c..d2371278b0c 100644
--- a/mysys/my_init.c
+++ b/mysys/my_init.c
@@ -33,6 +33,9 @@ static my_bool win32_init_tcp_ip();
#define my_win_init()
#endif
+#define SCALE_SEC 100
+#define SCALE_USEC 10000
+
my_bool my_init_done= 0;
/** True if @c my_basic_init() has been called. */
my_bool my_basic_init_done= 0;
@@ -138,9 +141,6 @@ my_bool my_init(void)
#ifdef THREAD
if (my_thread_global_init())
return 1;
-#if !defined(__WIN__)
- sigfillset(&my_signals); /* signals blocked by mf_brkhant */
-#endif
#endif /* THREAD */
{
DBUG_ENTER("my_init");
diff --git a/mysys/my_net.c b/mysys/my_net.c
deleted file mode 100644
index e584e541175..00000000000
--- a/mysys/my_net.c
+++ /dev/null
@@ -1,42 +0,0 @@
-/* Copyright (C) 2000 MySQL AB, 2008-2009 Sun Microsystems, Inc
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; version 2 of the License.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
-
-/* thread safe version of some common functions */
-
-#include "mysys_priv.h"
-#include <m_string.h>
-
-/* for thread safe my_inet_ntoa */
-#if !defined(__WIN__)
-#include <netdb.h>
-#ifdef HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
-#ifdef HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
-#ifdef HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-#endif /* !defined(__WIN__) */
-
-void my_inet_ntoa(struct in_addr in, char *buf)
-{
- char *ptr;
- mysql_mutex_lock(&THR_LOCK_net);
- ptr=inet_ntoa(in);
- strmov(buf,ptr);
- mysql_mutex_unlock(&THR_LOCK_net);
-}
diff --git a/mysys/my_pthread.c b/mysys/my_pthread.c
index 270d13928e3..dee34d10b38 100644
--- a/mysys/my_pthread.c
+++ b/mysys/my_pthread.c
@@ -138,7 +138,7 @@ void sigwait_setup(sigset_t *set)
sact.sa_flags = 0;
sact.sa_handler = px_handle_sig;
- memcpy_fixed(&sact.sa_mask,set,sizeof(*set)); /* handler isn't thread_safe */
+ memcpy(&sact.sa_mask, set, sizeof(*set)); /* handler isn't thread_safe */
sigemptyset(&unblock_mask);
pthread_sigmask(SIG_UNBLOCK,(sigset_t*) 0,&rev_sigwait_set);
@@ -164,7 +164,7 @@ void sigwait_setup(sigset_t *set)
}
}
}
- memcpy_fixed(&sigwait_set,set,sizeof(*set));
+ memcpy(&sigwait_set, set, sizeof(*set));
pthread_sigmask(SIG_BLOCK,(sigset_t*) set,(sigset_t*) 0);
pthread_sigmask(SIG_UNBLOCK,&unblock_mask,(sigset_t*) 0);
}
@@ -252,7 +252,7 @@ void *sigwait_thread(void *set_arg)
struct sigaction sact;
sact.sa_flags = 0;
sact.sa_handler = sigwait_handle_sig;
- memcpy_fixed(&sact.sa_mask,set,sizeof(*set)); /* handler isn't thread_safe */
+ memcpy(&sact.sa_mask, set, sizeof(*set)); /* handler isn't thread_safe */
sigemptyset(&pending_set);
for (i = 1; i <= sizeof(pending_set)*8; i++)
diff --git a/mysys/my_static.c b/mysys/my_static.c
index 2869b43543a..d7354555f3d 100644
--- a/mysys/my_static.c
+++ b/mysys/my_static.c
@@ -43,9 +43,6 @@ struct st_my_file_info *my_file_info= my_file_info_default;
int my_dont_interrupt=0;
volatile int _my_signals=0;
struct st_remember _my_sig_remember[MAX_SIGNALS]={{0,0}};
-#ifdef THREAD
-sigset_t my_signals; /* signals blocked by mf_brkhant */
-#endif
/* from mf_reccache.c */
ulong my_default_record_cache_size=RECORD_CACHE_SIZE;
diff --git a/mysys/my_static.h b/mysys/my_static.h
index 2c9cef0f101..7fde15ff133 100644
--- a/mysys/my_static.h
+++ b/mysys/my_static.h
@@ -25,9 +25,6 @@ C_MODE_START
#include <signal.h>
#define MAX_SIGNALS 10 /* Max signals under a dont-allow */
-#define MIN_KEYBLOCK (min(IO_SIZE,1024))
-#define MAX_KEYBLOCK 8192 /* Max keyblocklength == 8*IO_SIZE */
-#define MAX_BLOCK_TYPES MAX_KEYBLOCK/MIN_KEYBLOCK
struct st_remember {
int number;
@@ -48,9 +45,6 @@ extern struct st_my_file_info my_file_info_default[MY_NFILE];
extern ulonglong query_performance_frequency, query_performance_offset;
-#if defined(THREAD) && !defined(__WIN__)
-extern sigset_t my_signals; /* signals blocked by mf_brkhant */
-#endif
C_MODE_END
#endif /* MYSYS_MY_STATIC_INCLUDED */
diff --git a/mysys/my_vle.c b/mysys/my_vle.c
deleted file mode 100644
index 09f297eb553..00000000000
--- a/mysys/my_vle.c
+++ /dev/null
@@ -1,109 +0,0 @@
-/* Copyright (C) 2005 MySQL AB
-
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; version 2 of the License.
-
- This program is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
-
-/*
- Variable length encoding.
-
- A method to store an arbitrary-size non-negative integer. We let the
- most significant bit of the number indicate that the next byte
- should be contatenated to form the real number.
-*/
-
-#include "my_vle.h"
-
-/*
- Function to encode an unsigned long as VLE. The bytes for the VLE
- will be written to the location pointed to by 'out'. The maximum
- number of bytes written will be 'max'.
-
- PARAMETERS
-
- out Pointer to beginning of where to store VLE bytes.
- max Maximum number of bytes to write.
- n Number to encode.
-
- RETURN VALUE
- On success, one past the end of the array containing the VLE
- bytes. On failure, the 'out' pointer is returned.
-*/
-
-uchar*
-my_vle_encode(uchar* out, size_t max, ulong n)
-{
- uchar buf[my_vle_sizeof(n)];
- uchar *ptr= buf;
- size_t len;
-
- do
- {
- *ptr++= (uchar) (n & 0x7F);
- n>>= 7;
- }
- while (n > 0);
-
- len= ptr - buf;
-
- if (len <= max)
- {
- /*
- The bytes are stored in reverse order in 'buf'. Let's write them
- in correct order to the output buffer and set the MSB at the
- same time.
- */
- while (ptr-- > buf)
- {
- uchar v= *ptr;
- if (ptr > buf)
- v|= 0x80;
- *out++= v;
- }
- }
-
- return out;
-}
-
-/*
- Function to decode a VLE representation of an integral value.
-
-
- PARAMETERS
-
- result_ptr Pointer to an unsigned long where the value will be written.
- vle Pointer to the VLE bytes.
-
- RETURN VALUE
-
- One-past the end of the VLE bytes. The routine will never read
- more than sizeof(*result_ptr) + 1 bytes.
-*/
-
-uchar const*
-my_vle_decode(ulong *result_ptr, uchar const *vle)
-{
- ulong result= 0;
- size_t cnt= 1;
-
- do
- {
- result<<= 7;
- result|= (*vle & 0x7F);
- }
- while ((*vle++ & 0x80) && ++cnt <= sizeof(*result_ptr) + 1);
-
- if (cnt <= sizeof(*result_ptr) + 1)
- *result_ptr= result;
-
- return vle;
-}
diff --git a/mysys/rijndael.c b/mysys/rijndael.c
index 2b12753c4e5..2d622efad82 100644
--- a/mysys/rijndael.c
+++ b/mysys/rijndael.c
@@ -32,22 +32,6 @@
#define FULL_UNROLL
*/
-
-#ifdef NOT_USED
-Te0[x] = S [x].[02, 01, 01, 03];
-Te1[x] = S [x].[03, 02, 01, 01];
-Te2[x] = S [x].[01, 03, 02, 01];
-Te3[x] = S [x].[01, 01, 03, 02];
-Te4[x] = S [x].[01, 01, 01, 01];
-
-Td0[x] = Si[x].[0e, 09, 0d, 0b];
-Td1[x] = Si[x].[0b, 0e, 09, 0d];
-Td2[x] = Si[x].[0d, 0b, 0e, 09];
-Td3[x] = Si[x].[09, 0d, 0b, 0e];
-Td4[x] = Si[x].[01, 01, 01, 01];
-#endif
-
-
static const uint32 Te0[256]=
{
0xc66363a5U, 0xf87c7c84U, 0xee777799U, 0xf67b7b8dU,
diff --git a/mysys/test_charset.c b/mysys/test_charset.c
index 5b399071d11..39df1b02d7b 100644
--- a/mysys/test_charset.c
+++ b/mysys/test_charset.c
@@ -77,15 +77,5 @@ int main(int argc, char **argv) {
_print_csinfo(cs);
fflush(stdout);
-#ifdef NOT_USED_ANYMORE
- cs_list = list_charsets(MYF(MY_CS_COMPILED | MY_CS_CONFIG));
- printf("LIST OF CHARSETS (compiled + *.conf):\n%s\n", cs_list);
- my_free(cs_list);
-
- cs_list = list_charsets(MYF(MY_CS_INDEX | MY_CS_LOADED));
- printf("LIST OF CHARSETS (index + loaded):\n%s\n", cs_list);
- my_free(cs_list);
-#endif
-
return 0;
}
diff --git a/mysys/test_fn.c b/mysys/test_fn.c
deleted file mode 100644
index 249cc878390..00000000000
--- a/mysys/test_fn.c
+++ /dev/null
@@ -1,69 +0,0 @@
-/* Copyright (C) 2000 MySQL AB
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; version 2 of the License.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
-
-#include "mysys_priv.h"
-
-const char *test_names[]=
-{
- "/usr/my/include/srclib/myfunc/dbug/test",
- "test",
- "dbug/test",
- "/usr/my/srclib/myfunc/dbug/test",
- "/usr/monty/oldcopy/jazz/setupp.frm",
- "~/monty.tst",
- "~/dbug/monty.tst",
- "./hejsan",
- "./dbug/test",
- "../dbug/test",
- "../myfunc/test",
- "../../monty/rutedit",
- "/usr/monty//usr/monty/rutedit",
- "/usr/./monty/rutedit",
- "/usr/my/../monty/rutedit",
- "/usr/my/~/rutedit",
- "~/../my",
- "~/../my/srclib/myfunc/test",
- "~/../my/srclib/myfunc/./dbug/test",
- "/../usr/my/srclib/dbug",
- "c/../my",
- "/c/../my",
- NullS,
-};
-
-int main(int argc __attribute__((unused)), char **argv)
-{
- const char **pos;
- char buff[FN_REFLEN],buff2[FN_REFLEN];
- DBUG_ENTER ("main");
- DBUG_PROCESS (argv[0]);
- MY_INIT(argv[0]);
-
- if (argv[1] && argv[1][1] == '#')
- DBUG_PUSH(argv[1]+2);
-
- for (pos=test_names; *pos ; pos++)
- {
- printf("org : '%s'\n",*pos);
- printf("pack: '%s'\n",fn_format(buff,*pos,"","",8));
- printf("unpack: '%s'\n",fn_format(buff2,*pos,"","",4));
- unpack_filename(buff,buff);
- if (strcmp(buff,buff2) != 0)
- {
- printf("error on cmp: '%s' != '%s'\n",buff,buff2);
- }
- puts("");
- }
- DBUG_RETURN(0);
-}
diff --git a/mysys/thr_alarm.c b/mysys/thr_alarm.c
index 9ca18eeaf1b..54eef693558 100644
--- a/mysys/thr_alarm.c
+++ b/mysys/thr_alarm.c
@@ -903,11 +903,6 @@ int main(int argc __attribute__((unused)),char **argv __attribute__((unused)))
sigaddset(&set,THR_SERVER_ALARM);
sigdelset(&set, thr_client_alarm);
(void) pthread_sigmask(SIG_SETMASK,&set,NULL);
-#ifdef NOT_USED
- sigemptyset(&set);
- sigaddset(&set, thr_client_alarm);
- pthread_sigmask(SIG_UNBLOCK, &set, (sigset_t*) 0);
-#endif
pthread_attr_init(&thr_attr);
pthread_attr_setscope(&thr_attr,PTHREAD_SCOPE_PROCESS);
diff --git a/mysys/thr_lock.c b/mysys/thr_lock.c
index 9d10ba1fb01..7ba0490cb29 100644
--- a/mysys/thr_lock.c
+++ b/mysys/thr_lock.c
@@ -107,7 +107,7 @@ my_bool init_thr_lock()
}
static inline my_bool
-thr_lock_owner_equal(THR_LOCK_OWNER *rhs, THR_LOCK_OWNER *lhs)
+thr_lock_owner_equal(THR_LOCK_INFO *rhs, THR_LOCK_INFO *lhs)
{
return rhs == lhs;
}
@@ -122,7 +122,7 @@ static int check_lock(struct st_lock_list *list, const char* lock_type,
{
THR_LOCK_DATA *data,**prev;
uint count=0;
- THR_LOCK_OWNER *UNINIT_VAR(first_owner);
+ THR_LOCK_INFO *UNINIT_VAR(first_owner);
prev= &list->data;
if (list->data)
@@ -341,7 +341,6 @@ void thr_lock_info_init(THR_LOCK_INFO *info)
struct st_my_thread_var *tmp= my_thread_var;
info->thread= tmp->pthread_self;
info->thread_id= tmp->id;
- info->n_cursors= 0;
}
/* Initialize a lock instance */
@@ -357,7 +356,7 @@ void thr_lock_data_init(THR_LOCK *lock,THR_LOCK_DATA *data, void *param)
static inline my_bool
-has_old_lock(THR_LOCK_DATA *data, THR_LOCK_OWNER *owner)
+has_old_lock(THR_LOCK_DATA *data, THR_LOCK_INFO *owner)
{
for ( ; data ; data=data->next)
{
@@ -506,13 +505,12 @@ wait_for_lock(struct st_lock_list *wait, THR_LOCK_DATA *data,
enum enum_thr_lock_result
-thr_lock(THR_LOCK_DATA *data, THR_LOCK_OWNER *owner,
+thr_lock(THR_LOCK_DATA *data, THR_LOCK_INFO *owner,
enum thr_lock_type lock_type, ulong lock_wait_timeout)
{
THR_LOCK *lock=data->lock;
enum enum_thr_lock_result result= THR_LOCK_SUCCESS;
struct st_lock_list *wait_queue;
- THR_LOCK_DATA *lock_owner;
DBUG_ENTER("thr_lock");
data->next=0;
@@ -521,7 +519,7 @@ thr_lock(THR_LOCK_DATA *data, THR_LOCK_OWNER *owner,
data->owner= owner; /* Must be reset ! */
mysql_mutex_lock(&lock->mutex);
DBUG_PRINT("lock",("data: 0x%lx thread: 0x%lx lock: 0x%lx type: %d",
- (long) data, data->owner->info->thread_id,
+ (long) data, data->owner->thread_id,
(long) lock, (int) lock_type));
check_locks(lock,(uint) lock_type <= (uint) TL_READ_NO_INSERT ?
"enter read_lock" : "enter write_lock",0);
@@ -558,7 +556,7 @@ thr_lock(THR_LOCK_DATA *data, THR_LOCK_OWNER *owner,
*/
DBUG_PRINT("lock",("write locked 1 by thread: 0x%lx",
- lock->write.data->owner->info->thread_id));
+ lock->write.data->owner->thread_id));
if (thr_lock_owner_equal(data->owner, lock->write.data->owner) ||
(lock->write.data->type <= TL_WRITE_DELAYED &&
(((int) lock_type <= (int) TL_READ_HIGH_PRIORITY) ||
@@ -707,7 +705,7 @@ thr_lock(THR_LOCK_DATA *data, THR_LOCK_OWNER *owner,
goto end;
}
DBUG_PRINT("lock",("write locked 2 by thread: 0x%lx",
- lock->write.data->owner->info->thread_id));
+ lock->write.data->owner->thread_id));
}
else
{
@@ -743,23 +741,10 @@ thr_lock(THR_LOCK_DATA *data, THR_LOCK_OWNER *owner,
}
}
DBUG_PRINT("lock",("write locked 3 by thread: 0x%lx type: %d",
- lock->read.data->owner->info->thread_id, data->type));
+ lock->read.data->owner->thread_id, data->type));
}
wait_queue= &lock->write_wait;
}
- /*
- Try to detect a trivial deadlock when using cursors: attempt to
- lock a table that is already locked by an open cursor within the
- same connection. lock_owner can be zero if we succumbed to a high
- priority writer in the write_wait queue.
- */
- lock_owner= lock->read.data ? lock->read.data : lock->write.data;
- if (lock_owner && lock_owner->owner->info == owner->info)
- {
- DBUG_PRINT("lock",("deadlock"));
- result= THR_LOCK_DEADLOCK;
- goto end;
- }
/* Can't get lock yet; Wait for it */
DBUG_RETURN(wait_for_lock(wait_queue, data, 0, lock_wait_timeout));
end:
@@ -807,7 +792,7 @@ static inline void free_all_read_locks(THR_LOCK *lock,
}
/* purecov: begin inspected */
DBUG_PRINT("lock",("giving read lock to thread: 0x%lx",
- data->owner->info->thread_id));
+ data->owner->thread_id));
/* purecov: end */
data->cond=0; /* Mark thread free */
mysql_cond_signal(cond);
@@ -826,7 +811,7 @@ void thr_unlock(THR_LOCK_DATA *data)
enum thr_lock_type lock_type=data->type;
DBUG_ENTER("thr_unlock");
DBUG_PRINT("lock",("data: 0x%lx thread: 0x%lx lock: 0x%lx",
- (long) data, data->owner->info->thread_id, (long) lock));
+ (long) data, data->owner->thread_id, (long) lock));
mysql_mutex_lock(&lock->mutex);
check_locks(lock,"start of release lock",0);
@@ -915,7 +900,7 @@ static void wake_up_waiters(THR_LOCK *lock)
data->type=TL_WRITE; /* Upgrade lock */
/* purecov: begin inspected */
DBUG_PRINT("lock",("giving write lock of type %d to thread: 0x%lx",
- data->type, data->owner->info->thread_id));
+ data->type, data->owner->thread_id));
/* purecov: end */
{
mysql_cond_t *cond= data->cond;
@@ -1020,7 +1005,7 @@ static void sort_locks(THR_LOCK_DATA **data,uint count)
enum enum_thr_lock_result
-thr_multi_lock(THR_LOCK_DATA **data, uint count, THR_LOCK_OWNER *owner,
+thr_multi_lock(THR_LOCK_DATA **data, uint count, THR_LOCK_INFO *owner,
ulong lock_wait_timeout)
{
THR_LOCK_DATA **pos,**end;
@@ -1144,7 +1129,7 @@ void thr_multi_unlock(THR_LOCK_DATA **data,uint count)
else
{
DBUG_PRINT("lock",("Free lock: data: 0x%lx thread: 0x%lx lock: 0x%lx",
- (long) *pos, (*pos)->owner->info->thread_id,
+ (long) *pos, (*pos)->owner->thread_id,
(long) (*pos)->lock));
}
}
@@ -1200,7 +1185,7 @@ my_bool thr_abort_locks_for_thread(THR_LOCK *lock, my_thread_id thread_id)
mysql_mutex_lock(&lock->mutex);
for (data= lock->read_wait.data; data ; data= data->next)
{
- if (data->owner->info->thread_id == thread_id) /* purecov: tested */
+ if (data->owner->thread_id == thread_id) /* purecov: tested */
{
DBUG_PRINT("info",("Aborting read-wait lock"));
data->type= TL_UNLOCK; /* Mark killed */
@@ -1217,7 +1202,7 @@ my_bool thr_abort_locks_for_thread(THR_LOCK *lock, my_thread_id thread_id)
}
for (data= lock->write_wait.data; data ; data= data->next)
{
- if (data->owner->info->thread_id == thread_id) /* purecov: tested */
+ if (data->owner->thread_id == thread_id) /* purecov: tested */
{
DBUG_PRINT("info",("Aborting write-wait lock"));
data->type= TL_UNLOCK;
@@ -1387,7 +1372,7 @@ static void thr_print_lock(const char* name,struct st_lock_list *list)
prev= &list->data;
for (data=list->data; data && count++ < MAX_LOCKS ; data=data->next)
{
- printf("0x%lx (%lu:%d); ", (ulong) data, data->owner->info->thread_id,
+ printf("0x%lx (%lu:%d); ", (ulong) data, data->owner->thread_id,
(int) data->type);
if (data->prev != prev)
printf("\nWarning: prev didn't point at previous lock\n");
@@ -1525,7 +1510,6 @@ static void *test_thread(void *arg)
{
int i,j,param=*((int*) arg);
THR_LOCK_DATA data[MAX_LOCK_COUNT];
- THR_LOCK_OWNER owner;
THR_LOCK_INFO lock_info;
THR_LOCK_DATA *multi_locks[MAX_LOCK_COUNT];
my_thread_init();
@@ -1534,7 +1518,6 @@ static void *test_thread(void *arg)
thr_lock_info_init(&lock_info);
- thr_lock_owner_init(&owner, &lock_info);
for (i=0; i < lock_counts[param] ; i++)
thr_lock_data_init(locks+tests[param][i].lock_nr,data+i,NULL);
for (j=1 ; j < 10 ; j++) /* try locking 10 times */
@@ -1544,7 +1527,7 @@ static void *test_thread(void *arg)
multi_locks[i]= &data[i];
data[i].type= tests[param][i].lock_type;
}
- thr_multi_lock(multi_locks, lock_counts[param], &owner, TEST_TIMEOUT);
+ thr_multi_lock(multi_locks, lock_counts[param], &lock_info, TEST_TIMEOUT);
mysql_mutex_lock(&LOCK_thread_count);
{
int tmp=rand() & 7; /* Do something from 0-2 sec */
diff --git a/mysys/trie.c b/mysys/trie.c
deleted file mode 100644
index b2e93fcceac..00000000000
--- a/mysys/trie.c
+++ /dev/null
@@ -1,236 +0,0 @@
-/* Copyright (C) 2005 MySQL AB
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; version 2 of the License.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
-
-/*
- Implementation of trie and Aho-Corasick automaton.
- Supports only charsets that can be compared byte-wise.
-
- TODO:
- Add character frequencies. Can increase lookup speed
- up to 30%.
- Implement character-wise comparision.
-*/
-
-
-#include "mysys_priv.h"
-#include <m_string.h>
-#include <my_trie.h>
-#include <my_base.h>
-
-
-/*
- SYNOPSIS
- TRIE *trie_init (TRIE *trie, CHARSET_INFO *charset);
-
- DESCRIPTION
- Allocates or initializes a `TRIE' object. If `trie' is a `NULL'
- pointer, the function allocates, initializes, and returns a new
- object. Otherwise, the object is initialized and the address of
- the object is returned. If `trie_init()' allocates a new object,
- it will be freed when `trie_free()' is called.
-
- RETURN VALUE
- An initialized `TRIE*' object. `NULL' if there was insufficient
- memory to allocate a new object.
-*/
-
-TRIE *trie_init (TRIE *trie, CHARSET_INFO *charset)
-{
- MEM_ROOT mem_root;
- DBUG_ENTER("trie_init");
- DBUG_ASSERT(charset);
- init_alloc_root(&mem_root,
- (sizeof(TRIE_NODE) * 128) + ALLOC_ROOT_MIN_BLOCK_SIZE,
- sizeof(TRIE_NODE) * 128);
- if (! trie)
- {
- if (! (trie= (TRIE *)alloc_root(&mem_root, sizeof(TRIE))))
- {
- free_root(&mem_root, MYF(0));
- DBUG_RETURN(NULL);
- }
- }
-
- memcpy(&trie->mem_root, &mem_root, sizeof(MEM_ROOT));
- trie->root.leaf= 0;
- trie->root.c= 0;
- trie->root.next= NULL;
- trie->root.links= NULL;
- trie->root.fail= NULL;
- trie->charset= charset;
- trie->nnodes= 0;
- trie->nwords= 0;
- DBUG_RETURN(trie);
-}
-
-
-/*
- SYNOPSIS
- void trie_free (TRIE *trie);
- trie - valid pointer to `TRIE'
-
- DESCRIPTION
- Frees the memory allocated for a `trie'.
-
- RETURN VALUE
- None.
-*/
-
-void trie_free (TRIE *trie)
-{
- MEM_ROOT mem_root;
- DBUG_ENTER("trie_free");
- DBUG_ASSERT(trie);
- memcpy(&mem_root, &trie->mem_root, sizeof(MEM_ROOT));
- free_root(&mem_root, MYF(0));
- DBUG_VOID_RETURN;
-}
-
-
-/*
- SYNOPSIS
- my_bool trie_insert (TRIE *trie, const uchar *key, uint keylen);
- trie - valid pointer to `TRIE'
- key - valid pointer to key to insert
- keylen - non-0 key length
-
- DESCRIPTION
- Inserts new key into trie.
-
- RETURN VALUE
- Upon successful completion, `trie_insert' returns `FALSE'. Otherwise
- `TRUE' is returned.
-
- NOTES
- If this function fails you must assume `trie' is broken.
- However it can be freed with trie_free().
-*/
-
-my_bool trie_insert (TRIE *trie, const uchar *key, uint keylen)
-{
- TRIE_NODE *node;
- TRIE_NODE *next;
- uchar p;
- uint k;
- DBUG_ENTER("trie_insert");
- DBUG_ASSERT(trie && key && keylen);
- node= &trie->root;
- trie->root.fail= NULL;
- for (k= 0; k < keylen; k++)
- {
- p= key[k];
- for (next= node->links; next; next= next->next)
- if (next->c == p)
- break;
-
- if (! next)
- {
- TRIE_NODE *tmp= (TRIE_NODE *)alloc_root(&trie->mem_root,
- sizeof(TRIE_NODE));
- if (! tmp)
- DBUG_RETURN(TRUE);
- tmp->leaf= 0;
- tmp->c= p;
- tmp->links= tmp->fail= tmp->next= NULL;
- trie->nnodes++;
- if (! node->links)
- {
- node->links= tmp;
- }
- else
- {
- for (next= node->links; next->next; next= next->next) /* no-op */;
- next->next= tmp;
- }
- node= tmp;
- }
- else
- {
- node= next;
- }
- }
- node->leaf= keylen;
- trie->nwords++;
- DBUG_RETURN(FALSE);
-}
-
-
-/*
- SYNOPSIS
- my_bool trie_prepare (TRIE *trie);
- trie - valid pointer to `TRIE'
-
- DESCRIPTION
- Constructs Aho-Corasick automaton.
-
- RETURN VALUE
- Upon successful completion, `trie_prepare' returns `FALSE'. Otherwise
- `TRUE' is returned.
-*/
-
-my_bool ac_trie_prepare (TRIE *trie)
-{
- TRIE_NODE **tmp_nodes;
- TRIE_NODE *node;
- uint32 fnode= 0;
- uint32 lnode= 0;
- DBUG_ENTER("trie_prepare");
- DBUG_ASSERT(trie);
-
- tmp_nodes= (TRIE_NODE **)my_malloc(trie->nnodes * sizeof(TRIE_NODE *), MYF(0));
- if (! tmp_nodes)
- DBUG_RETURN(TRUE);
-
- trie->root.fail= &trie->root;
- for (node= trie->root.links; node; node= node->next)
- {
- node->fail= &trie->root;
- tmp_nodes[lnode++]= node;
- }
-
- while (fnode < lnode)
- {
- TRIE_NODE *current= (TRIE_NODE *)tmp_nodes[fnode++];
- for (node= current->links; node; node= node->next)
- {
- TRIE_NODE *fail= current->fail;
- tmp_nodes[lnode++]= node;
- while (! (node->fail= trie_goto(&trie->root, fail, node->c)))
- fail= fail->fail;
- }
- }
- my_free(tmp_nodes);
- DBUG_RETURN(FALSE);
-}
-
-
-/*
- SYNOPSIS
- void ac_trie_init (TRIE *trie, AC_TRIE_STATE *state);
- trie - valid pointer to `TRIE'
- state - value pointer to `AC_TRIE_STATE'
-
- DESCRIPTION
- Initializes `AC_TRIE_STATE' object.
-*/
-
-void ac_trie_init (TRIE *trie, AC_TRIE_STATE *state)
-{
- DBUG_ENTER("ac_trie_init");
- DBUG_ASSERT(trie && state);
- state->trie= trie;
- state->node= &trie->root;
- DBUG_VOID_RETURN;
-}