summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <serg@serg.mylan>2003-08-21 18:30:43 +0200
committerunknown <serg@serg.mylan>2003-08-21 18:30:43 +0200
commitc1551b4c04a68699872d80b7e1b9e5a969e4ff72 (patch)
tree73d6e3458f0aef120d5c361fde234488c2b99242
parente103da7acc6f3563a2f7207e59c34b9d9ff64295 (diff)
downloadmariadb-git-c1551b4c04a68699872d80b7e1b9e5a969e4ff72.tar.gz
use crc32() from bundled zlib if system zlib is unavailable
sql/item_create.h: previous patch cleanup sql/item_strfunc.cc: previous patch cleanup sql/item_strfunc.h: previous patch cleanup sql/lex.h: previous patch cleanup
-rw-r--r--include/my_sys.h3
-rw-r--r--mysys/Makefile.am2
-rw-r--r--mysys/my_crc32.c36
-rw-r--r--sql/item_create.h2
-rw-r--r--sql/item_strfunc.cc19
-rw-r--r--sql/item_strfunc.h40
-rw-r--r--sql/lex.h2
7 files changed, 62 insertions, 42 deletions
diff --git a/include/my_sys.h b/include/my_sys.h
index 6721d77a8af..a6a4d46e227 100644
--- a/include/my_sys.h
+++ b/include/my_sys.h
@@ -753,8 +753,9 @@ extern my_bool my_uncompress(byte *, ulong *, ulong *);
extern byte *my_compress_alloc(const byte *packet, ulong *len, ulong *complen);
extern ha_checksum my_checksum(ha_checksum crc, const byte *mem, uint count);
extern uint my_bit_log2(ulong value);
-uint my_count_bits(ulonglong v);
+extern uint my_count_bits(ulonglong v);
extern void my_sleep(ulong m_seconds);
+extern ulong crc32(ulong crc, const uchar *buf, uint len);
#ifdef __WIN__
extern my_bool have_tcpip; /* Is set if tcpip is used */
diff --git a/mysys/Makefile.am b/mysys/Makefile.am
index 5b1c859cb2a..9e563755ebd 100644
--- a/mysys/Makefile.am
+++ b/mysys/Makefile.am
@@ -29,7 +29,7 @@ libmysys_a_SOURCES = my_init.c my_getwd.c mf_getdate.c\
mf_path.c mf_loadpath.c\
my_open.c my_create.c my_dup.c my_seek.c my_read.c \
my_pread.c my_write.c \
- mf_keycache.c \
+ mf_keycache.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_realloc.c my_once.c mulalloc.c \
diff --git a/mysys/my_crc32.c b/mysys/my_crc32.c
new file mode 100644
index 00000000000..5514b01ede2
--- /dev/null
+++ b/mysys/my_crc32.c
@@ -0,0 +1,36 @@
+/* Copyright (C) 2003 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; either version 2 of the License, or
+ (at your option) any later version.
+
+ 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"
+
+#ifndef HAVE_COMPRESS
+
+/* minimal set of defines for using crc32() from zlib codebase */
+#define _ZLIB_H
+#define ZEXPORT
+#define Z_NULL 0
+#define OF(args) args
+#undef DYNAMIC_CRC_TABLE
+typedef uchar Byte;
+typedef uchar Bytef;
+typedef uint uInt;
+typedef ulong uLong;
+typedef ulong uLongf;
+
+#include "../zlib/crc32.c"
+
+#endif
+
diff --git a/sql/item_create.h b/sql/item_create.h
index 1326077b096..e80272e21a5 100644
--- a/sql/item_create.h
+++ b/sql/item_create.h
@@ -33,9 +33,7 @@ Item *create_func_connection_id(void);
Item *create_func_conv(Item* a, Item *b, Item *c);
Item *create_func_cos(Item* a);
Item *create_func_cot(Item* a);
-#ifdef HAVE_COMPRESS
Item *create_func_crc32(Item* a);
-#endif
Item *create_func_date_format(Item* a,Item *b);
Item *create_func_dayname(Item* a);
Item *create_func_dayofmonth(Item* a);
diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc
index 7c6e6e0686c..cb24fb0f027 100644
--- a/sql/item_strfunc.cc
+++ b/sql/item_strfunc.cc
@@ -2561,9 +2561,6 @@ longlong Item_func_uncompressed_length::val_int()
return uint4korr(res->c_ptr()) & 0x3FFFFFFF;
}
-#ifdef HAVE_COMPRESS
-#include "zlib.h"
-
longlong Item_func_crc32::val_int()
{
String *res=args[0]->val_str(&value);
@@ -2573,21 +2570,11 @@ longlong Item_func_crc32::val_int()
return 0; /* purecov: inspected */
}
null_value=0;
- return (longlong) crc32(0L, (Bytef*)res->ptr(), res->length());
+ return (longlong) crc32(0L, (uchar*)res->ptr(), res->length());
}
-longlong Item_func_uncompressed_length::val_int()
-{
- String *res= args[0]->val_str(&value);
- if (!res)
- {
- null_value=1;
- return 0; /* purecov: inspected */
- }
- null_value=0;
- if (res->is_empty()) return 0;
- return uint4korr(res->c_ptr()) & 0x3FFFFFFF;
-}
+#ifdef HAVE_COMPRESS
+#include "zlib.h"
String *Item_func_compress::val_str(String *str)
{
diff --git a/sql/item_strfunc.h b/sql/item_strfunc.h
index d7547d69aed..a8725febe62 100644
--- a/sql/item_strfunc.h
+++ b/sql/item_strfunc.h
@@ -630,6 +630,26 @@ public:
};
};
+class Item_func_crc32 :public Item_int_func
+{
+ String value;
+public:
+ Item_func_crc32(Item *a) :Item_int_func(a) {}
+ const char *func_name() const { return "crc32"; }
+ void fix_length_and_dec() { max_length=10; }
+ longlong val_int();
+};
+
+class Item_func_uncompressed_length : public Item_int_func
+{
+ String value;
+public:
+ Item_func_uncompressed_length(Item *a):Item_int_func(a){}
+ const char *func_name() const{return "uncompressed_length";}
+ void fix_length_and_dec() { max_length=10; }
+ longlong val_int();
+};
+
#ifdef HAVE_COMPRESS
#define ZLIB_DEPENDED_FUNCTION ;
#else
@@ -656,23 +676,3 @@ public:
String *val_str(String *) ZLIB_DEPENDED_FUNCTION
};
-class Item_func_crc32 :public Item_int_func
-{
- String value;
-public:
- Item_func_crc32(Item *a) :Item_int_func(a) {}
- const char *func_name() const { return "crc32"; }
- void fix_length_and_dec() { max_length=10; }
- longlong val_int() ZLIB_DEPENDED_FUNCTION
-};
-
-class Item_func_uncompressed_length : public Item_int_func
-{
- String value;
-public:
- Item_func_uncompressed_length(Item *a):Item_int_func(a){}
- const char *func_name() const{return "uncompressed_length";}
- void fix_length_and_dec() { max_length=10; }
- longlong val_int();
-};
-
diff --git a/sql/lex.h b/sql/lex.h
index 35c4d990b32..7ac61c73ad8 100644
--- a/sql/lex.h
+++ b/sql/lex.h
@@ -472,9 +472,7 @@ static SYMBOL sql_functions[] = {
{ "COUNT", SYM(COUNT_SYM),0,0},
{ "COS", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_cos)},
{ "COT", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_cot)},
-#ifdef HAVE_COMPRESS
{ "CRC32", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_crc32)},
-#endif
{ "CROSSES", SYM(FUNC_ARG2),0,CREATE_FUNC(create_func_crosses)},
{ "CURDATE", SYM(CURDATE),0,0},
{ "CURTIME", SYM(CURTIME),0,0},