Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
mariadb
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
mariadb
Commits
2b52bc2a
Commit
2b52bc2a
authored
Mar 23, 2007
by
unknown
Browse files
Options
Browse Files
Download
Plain Diff
Merge damiendev.:C:/build/mysql-5.0
into damiendev.:C:/build/dev50
parents
55e8db7e
3f76fbfa
Changes
46
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
46 changed files
with
1196 additions
and
346 deletions
+1196
-346
extra/yassl/README
extra/yassl/README
+8
-0
extra/yassl/include/buffer.hpp
extra/yassl/include/buffer.hpp
+0
-3
extra/yassl/include/crypto_wrapper.hpp
extra/yassl/include/crypto_wrapper.hpp
+0
-6
extra/yassl/include/openssl/ssl.h
extra/yassl/include/openssl/ssl.h
+3
-7
extra/yassl/include/socket_wrapper.hpp
extra/yassl/include/socket_wrapper.hpp
+4
-2
extra/yassl/include/yassl_imp.hpp
extra/yassl/include/yassl_imp.hpp
+1
-16
extra/yassl/include/yassl_int.hpp
extra/yassl/include/yassl_int.hpp
+0
-1
extra/yassl/src/crypto_wrapper.cpp
extra/yassl/src/crypto_wrapper.cpp
+0
-2
extra/yassl/src/ssl.cpp
extra/yassl/src/ssl.cpp
+2
-2
extra/yassl/taocrypt/README
extra/yassl/taocrypt/README
+12
-1
extra/yassl/taocrypt/benchmark/benchmark.cpp
extra/yassl/taocrypt/benchmark/benchmark.cpp
+16
-16
extra/yassl/taocrypt/include/algebra.hpp
extra/yassl/taocrypt/include/algebra.hpp
+0
-3
extra/yassl/taocrypt/include/des.hpp
extra/yassl/taocrypt/include/des.hpp
+0
-1
extra/yassl/taocrypt/include/hash.hpp
extra/yassl/taocrypt/include/hash.hpp
+33
-3
extra/yassl/taocrypt/include/hmac.hpp
extra/yassl/taocrypt/include/hmac.hpp
+2
-2
extra/yassl/taocrypt/include/misc.hpp
extra/yassl/taocrypt/include/misc.hpp
+19
-0
extra/yassl/taocrypt/include/modarith.hpp
extra/yassl/taocrypt/include/modarith.hpp
+2
-2
extra/yassl/taocrypt/include/modes.hpp
extra/yassl/taocrypt/include/modes.hpp
+2
-2
extra/yassl/taocrypt/include/rsa.hpp
extra/yassl/taocrypt/include/rsa.hpp
+15
-19
extra/yassl/taocrypt/include/sha.hpp
extra/yassl/taocrypt/include/sha.hpp
+97
-0
extra/yassl/taocrypt/include/type_traits.hpp
extra/yassl/taocrypt/include/type_traits.hpp
+1
-5
extra/yassl/taocrypt/include/types.hpp
extra/yassl/taocrypt/include/types.hpp
+3
-0
extra/yassl/taocrypt/mySTL/list.hpp
extra/yassl/taocrypt/mySTL/list.hpp
+8
-8
extra/yassl/taocrypt/src/aes.cpp
extra/yassl/taocrypt/src/aes.cpp
+2
-9
extra/yassl/taocrypt/src/algebra.cpp
extra/yassl/taocrypt/src/algebra.cpp
+3
-3
extra/yassl/taocrypt/src/asn.cpp
extra/yassl/taocrypt/src/asn.cpp
+4
-4
extra/yassl/taocrypt/src/hash.cpp
extra/yassl/taocrypt/src/hash.cpp
+85
-0
extra/yassl/taocrypt/src/integer.cpp
extra/yassl/taocrypt/src/integer.cpp
+1
-1
extra/yassl/taocrypt/src/sha.cpp
extra/yassl/taocrypt/src/sha.cpp
+410
-0
extra/yassl/taocrypt/test/test.cpp
extra/yassl/taocrypt/test/test.cpp
+213
-48
extra/yassl/testsuite/testsuite.cpp
extra/yassl/testsuite/testsuite.cpp
+9
-10
innobase/dict/dict0dict.c
innobase/dict/dict0dict.c
+26
-10
innobase/include/rem0rec.ic
innobase/include/rem0rec.ic
+3
-0
innobase/include/sync0sync.ic
innobase/include/sync0sync.ic
+13
-24
innobase/lock/lock0lock.c
innobase/lock/lock0lock.c
+21
-9
innobase/srv/srv0srv.c
innobase/srv/srv0srv.c
+3
-3
innobase/ut/ut0ut.c
innobase/ut/ut0ut.c
+51
-8
mysql-test/mysql-test-run.pl
mysql-test/mysql-test-run.pl
+4
-7
mysql-test/r/flush2.result
mysql-test/r/flush2.result
+2
-14
mysql-test/r/innodb.result
mysql-test/r/innodb.result
+18
-0
mysql-test/t/flush2.test
mysql-test/t/flush2.test
+2
-2
mysql-test/t/innodb.test
mysql-test/t/innodb.test
+28
-0
mysys/mf_tempfile.c
mysys/mf_tempfile.c
+61
-84
mysys/my_static.c
mysys/my_static.c
+0
-5
mysys/my_static.h
mysys/my_static.h
+0
-4
sql/ha_innodb.cc
sql/ha_innodb.cc
+9
-0
No files found.
extra/yassl/README
View file @
2b52bc2a
*****************yaSSL Release notes, version 1.6.0 (2/22/07)
This release of yaSSL contains bug fixes, portability enhancements, and
better X509 support.
See normal build instructions below under 1.0.6.
See libcurl build instructions below under 1.3.0 and note in 1.5.8.
*****************yaSSL Release notes, version 1.5.8 (1/10/07)
This release of yaSSL contains bug fixes, portability enhancements, and
...
...
extra/yassl/include/buffer.hpp
View file @
2b52bc2a
...
...
@@ -49,13 +49,11 @@ const uint AUTO = 0xFEEDBEEF;
// Checking Policy should implement a check function that tests whether the
// index is within the size limit of the array
struct
Check
{
Check
()
{}
void
check
(
uint
i
,
uint
limit
);
};
struct
NoCheck
{
NoCheck
()
{}
void
check
(
uint
,
uint
);
};
...
...
@@ -193,7 +191,6 @@ inline void checked_delete(T* p)
// sets pointer to zero so safe for std conatiners
struct
del_ptr_zero
{
del_ptr_zero
()
{}
template
<
typename
T
>
void
operator
()(
T
*&
p
)
const
{
...
...
extra/yassl/include/crypto_wrapper.hpp
View file @
2b52bc2a
...
...
@@ -42,7 +42,6 @@ namespace yaSSL {
// Digest policy should implement a get_digest, update, and get sizes for pad
// and digest
struct
Digest
:
public
virtual_base
{
Digest
()
{}
virtual
void
get_digest
(
byte
*
)
=
0
;
virtual
void
get_digest
(
byte
*
,
const
byte
*
,
unsigned
int
)
=
0
;
virtual
void
update
(
const
byte
*
,
unsigned
int
)
=
0
;
...
...
@@ -54,7 +53,6 @@ struct Digest : public virtual_base {
// For use with NULL Digests
struct
NO_MAC
:
public
Digest
{
NO_MAC
()
{}
void
get_digest
(
byte
*
);
void
get_digest
(
byte
*
,
const
byte
*
,
unsigned
int
);
void
update
(
const
byte
*
,
unsigned
int
);
...
...
@@ -179,7 +177,6 @@ private:
// BulkCipher policy should implement encrypt, decrypt, get block size,
// and set keys for encrypt and decrypt
struct
BulkCipher
:
public
virtual_base
{
BulkCipher
()
{}
virtual
void
encrypt
(
byte
*
,
const
byte
*
,
unsigned
int
)
=
0
;
virtual
void
decrypt
(
byte
*
,
const
byte
*
,
unsigned
int
)
=
0
;
virtual
void
set_encryptKey
(
const
byte
*
,
const
byte
*
=
0
)
=
0
;
...
...
@@ -193,7 +190,6 @@ struct BulkCipher : public virtual_base {
// For use with NULL Ciphers
struct
NO_Cipher
:
public
BulkCipher
{
NO_Cipher
()
{}
void
encrypt
(
byte
*
,
const
byte
*
,
unsigned
int
)
{}
void
decrypt
(
byte
*
,
const
byte
*
,
unsigned
int
)
{}
void
set_encryptKey
(
const
byte
*
,
const
byte
*
)
{}
...
...
@@ -315,14 +311,12 @@ struct Auth : public virtual_base {
virtual
bool
verify
(
const
byte
*
,
unsigned
int
,
const
byte
*
,
unsigned
int
)
=
0
;
virtual
uint
get_signatureLength
()
const
=
0
;
Auth
()
{}
virtual
~
Auth
()
{}
};
// For use with NULL Authentication schemes
struct
NO_Auth
:
public
Auth
{
NO_Auth
()
{}
void
sign
(
byte
*
,
const
byte
*
,
unsigned
int
,
const
RandomPool
&
)
{}
bool
verify
(
const
byte
*
,
unsigned
int
,
const
byte
*
,
unsigned
int
)
{
return
true
;
}
...
...
extra/yassl/include/openssl/ssl.h
View file @
2b52bc2a
...
...
@@ -33,7 +33,8 @@
#include "opensslv.h"
/* for version number */
#include "rsa.h"
#define YASSL_VERSION "1.5.8"
#define YASSL_VERSION "1.6.5"
#if defined(__cplusplus)
...
...
@@ -189,16 +190,11 @@ enum { /* ERR Constants */
EVP_R_BAD_DECRYPT
=
2
};
#ifdef WIN
typedef
SOCKET
socket_t
;
#else
typedef
int
socket_t
;
#endif
SSL_CTX
*
SSL_CTX_new
(
SSL_METHOD
*
);
SSL
*
SSL_new
(
SSL_CTX
*
);
int
SSL_set_fd
(
SSL
*
,
socket_
t
);
int
SSL_set_fd
(
SSL
*
,
in
t
);
int
SSL_connect
(
SSL
*
);
int
SSL_write
(
SSL
*
,
const
void
*
,
int
);
int
SSL_read
(
SSL
*
,
void
*
,
int
);
...
...
extra/yassl/include/socket_wrapper.hpp
View file @
2b52bc2a
...
...
@@ -38,14 +38,16 @@
#include <netinet/in.h>
#include <arpa/inet.h>
#endif
#include "openssl/ssl.h"
/* for socket_t */
namespace
yaSSL
{
typedef
unsigned
int
uint
;
#ifndef _WIN32
#ifdef _WIN32
typedef
SOCKET
socket_t
;
#else
typedef
int
socket_t
;
const
socket_t
INVALID_SOCKET
=
-
1
;
const
int
SD_RECEIVE
=
0
;
const
int
SD_SEND
=
1
;
...
...
extra/yassl/include/yassl_imp.hpp
View file @
2b52bc2a
...
...
@@ -64,7 +64,6 @@ struct RecordLayerHeader {
// base for all messages
struct
Message
:
public
virtual_base
{
Message
()
{}
virtual
input_buffer
&
set
(
input_buffer
&
)
=
0
;
virtual
output_buffer
&
get
(
output_buffer
&
)
const
=
0
;
...
...
@@ -178,7 +177,6 @@ private:
class
HandShakeBase
:
public
virtual_base
{
int
length_
;
public:
HandShakeBase
()
{}
int
get_length
()
const
;
void
set_length
(
int
);
...
...
@@ -196,7 +194,6 @@ public:
struct
HelloRequest
:
public
HandShakeBase
{
HelloRequest
()
{}
input_buffer
&
set
(
input_buffer
&
in
);
output_buffer
&
get
(
output_buffer
&
out
)
const
;
...
...
@@ -330,7 +327,6 @@ private:
struct
ServerKeyBase
:
public
virtual_base
{
ServerKeyBase
()
{}
virtual
~
ServerKeyBase
()
{}
virtual
void
build
(
SSL
&
)
{}
virtual
void
read
(
SSL
&
,
input_buffer
&
)
{}
...
...
@@ -341,21 +337,15 @@ struct ServerKeyBase : public virtual_base {
// Server random number for FORTEZZA KEA
struct
Fortezza_Server
:
public
ServerKeyBase
{
Fortezza_Server
()
{}
opaque
r_s_
[
FORTEZZA_MAX
];
};
struct
SignatureBase
:
public
virtual_base
{
SignatureBase
()
{}
virtual
~
SignatureBase
()
{}
};
struct
anonymous_sa
:
public
SignatureBase
{
public:
anonymous_sa
()
{}
};
struct
anonymous_sa
:
public
SignatureBase
{};
struct
Hashes
{
...
...
@@ -365,13 +355,11 @@ struct Hashes {
struct
rsa_sa
:
public
SignatureBase
{
rsa_sa
()
{}
Hashes
hashes_
;
};
struct
dsa_sa
:
public
SignatureBase
{
dsa_sa
()
{}
uint8
sha_
[
SHA_LEN
];
};
...
...
@@ -399,7 +387,6 @@ private:
// Server's RSA exchange
struct
RSA_Server
:
public
ServerKeyBase
{
RSA_Server
()
{}
ServerRSAParams
params_
;
opaque
*
signature_
;
// signed rsa_sa hashes
};
...
...
@@ -474,7 +461,6 @@ struct PreMasterSecret {
struct
ClientKeyBase
:
public
virtual_base
{
ClientKeyBase
()
{}
virtual
~
ClientKeyBase
()
{}
virtual
void
build
(
SSL
&
)
{}
virtual
void
read
(
SSL
&
,
input_buffer
&
)
{}
...
...
@@ -505,7 +491,6 @@ private:
// Fortezza Key Parameters from page 29
// hard code lengths cause only used here
struct
FortezzaKeys
:
public
ClientKeyBase
{
FortezzaKeys
()
{}
opaque
y_c_
[
128
];
// client's Yc, public value
opaque
r_c_
[
128
];
// client's Rc
opaque
y_signature_
[
40
];
// DSS signed public key
...
...
extra/yassl/include/yassl_int.hpp
View file @
2b52bc2a
...
...
@@ -228,7 +228,6 @@ struct BIGNUM {
TaoCrypt::Integer), we need to explicitly state the namespace
here to let gcc 2.96 deduce the correct type.
*/
BIGNUM
()
{}
yaSSL
::
Integer
int_
;
void
assign
(
const
byte
*
b
,
uint
s
)
{
int_
.
assign
(
b
,
s
);
}
};
...
...
extra/yassl/src/crypto_wrapper.cpp
View file @
2b52bc2a
...
...
@@ -550,7 +550,6 @@ void RandomPool::Fill(opaque* dst, uint sz) const
// Implementation of DSS Authentication
struct
DSS
::
DSSImpl
{
DSSImpl
()
{}
void
SetPublic
(
const
byte
*
,
unsigned
int
);
void
SetPrivate
(
const
byte
*
,
unsigned
int
);
TaoCrypt
::
DSA_PublicKey
publicKey_
;
...
...
@@ -623,7 +622,6 @@ bool DSS::verify(const byte* sha_digest, unsigned int /* shaSz */,
// Implementation of RSA key interface
struct
RSA
::
RSAImpl
{
RSAImpl
()
{}
void
SetPublic
(
const
byte
*
,
unsigned
int
);
void
SetPrivate
(
const
byte
*
,
unsigned
int
);
TaoCrypt
::
RSA_PublicKey
publicKey_
;
...
...
extra/yassl/src/ssl.cpp
View file @
2b52bc2a
...
...
@@ -229,7 +229,7 @@ void SSL_free(SSL* ssl)
}
int
SSL_set_fd
(
SSL
*
ssl
,
socket_
t
fd
)
int
SSL_set_fd
(
SSL
*
ssl
,
in
t
fd
)
{
ssl
->
useSocket
().
set_fd
(
fd
);
return
SSL_SUCCESS
;
...
...
@@ -950,7 +950,7 @@ void ERR_print_errors_fp(FILE* /*fp*/)
char
*
ERR_error_string
(
unsigned
long
errNumber
,
char
*
buffer
)
{
static
char
*
msg
=
(
char
*
)
"Please supply a buffer for error string"
;
static
char
*
msg
=
(
char
*
)
"Please supply a buffer for error string"
;
if
(
buffer
)
{
SetErrorString
(
YasslError
(
errNumber
),
buffer
);
...
...
extra/yassl/taocrypt/README
View file @
2b52bc2a
TaoCrypt release 0.9.0 09/18/2006
TaoCrypt release 0.9.2 02/5/2007
This release includes bug fixes, portability enhancements, and some
optimiations.
See 0.9.0 for build instructions.
******************TaoCrypt release 0.9.0 09/18/2006
This is the first release of TaoCrypt, it was previously only included with
yaSSL. TaoCrypt is highly portable and fast, its features include:
...
...
extra/yassl/taocrypt/benchmark/benchmark.cpp
View file @
2b52bc2a
...
...
@@ -65,7 +65,7 @@ int main(int argc, char** argv)
const
int
megs
=
5
;
// how much to test
const
byte
global_
key
[]
=
const
byte
key
[]
=
{
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
,
0xfe
,
0xde
,
0xba
,
0x98
,
0x76
,
0x54
,
0x32
,
0x10
,
...
...
@@ -81,19 +81,19 @@ const byte iv[] =
};
byte
global_
plain
[
1024
*
1024
];
byte
global_
cipher
[
1024
*
1024
];
byte
plain
[
1024
*
1024
];
byte
cipher
[
1024
*
1024
];
void
bench_des
()
{
DES_EDE3_CBC_Encryption
enc
;
enc
.
SetKey
(
global_
key
,
16
,
iv
);
enc
.
SetKey
(
key
,
16
,
iv
);
double
start
=
current_time
();
for
(
int
i
=
0
;
i
<
megs
;
i
++
)
enc
.
Process
(
global_plain
,
global_cipher
,
sizeof
(
global_
plain
));
enc
.
Process
(
plain
,
cipher
,
sizeof
(
plain
));
double
total
=
current_time
()
-
start
;
...
...
@@ -107,12 +107,12 @@ void bench_des()
void
bench_aes
(
bool
show
)
{
AES_CBC_Encryption
enc
;
enc
.
SetKey
(
global_
key
,
16
,
iv
);
enc
.
SetKey
(
key
,
16
,
iv
);
double
start
=
current_time
();
for
(
int
i
=
0
;
i
<
megs
;
i
++
)
enc
.
Process
(
global_plain
,
global_cipher
,
sizeof
(
global_
plain
));
enc
.
Process
(
plain
,
cipher
,
sizeof
(
plain
));
double
total
=
current_time
()
-
start
;
...
...
@@ -127,12 +127,12 @@ void bench_aes(bool show)
void
bench_twofish
()
{
Twofish_CBC_Encryption
enc
;
enc
.
SetKey
(
global_
key
,
16
,
iv
);
enc
.
SetKey
(
key
,
16
,
iv
);
double
start
=
current_time
();
for
(
int
i
=
0
;
i
<
megs
;
i
++
)
enc
.
Process
(
global_plain
,
global_cipher
,
sizeof
(
global_
plain
));
enc
.
Process
(
plain
,
cipher
,
sizeof
(
plain
));
double
total
=
current_time
()
-
start
;
...
...
@@ -147,12 +147,12 @@ void bench_twofish()
void
bench_blowfish
()
{
Blowfish_CBC_Encryption
enc
;
enc
.
SetKey
(
global_
key
,
16
,
iv
);
enc
.
SetKey
(
key
,
16
,
iv
);
double
start
=
current_time
();
for
(
int
i
=
0
;
i
<
megs
;
i
++
)
enc
.
Process
(
global_plain
,
global_cipher
,
sizeof
(
global_
plain
));
enc
.
Process
(
plain
,
cipher
,
sizeof
(
plain
));
double
total
=
current_time
()
-
start
;
...
...
@@ -166,12 +166,12 @@ void bench_blowfish()
void
bench_arc4
()
{
ARC4
enc
;
enc
.
SetKey
(
global_
key
,
16
);
enc
.
SetKey
(
key
,
16
);
double
start
=
current_time
();
for
(
int
i
=
0
;
i
<
megs
;
i
++
)
enc
.
Process
(
global_cipher
,
global_plain
,
sizeof
(
global_
plain
));
enc
.
Process
(
cipher
,
plain
,
sizeof
(
plain
));
double
total
=
current_time
()
-
start
;
...
...
@@ -191,7 +191,7 @@ void bench_md5()
for
(
int
i
=
0
;
i
<
megs
;
i
++
)
hash
.
Update
(
global_plain
,
sizeof
(
global_
plain
));
hash
.
Update
(
plain
,
sizeof
(
plain
));
hash
.
Final
(
digest
);
...
...
@@ -213,7 +213,7 @@ void bench_sha()
for
(
int
i
=
0
;
i
<
megs
;
i
++
)
hash
.
Update
(
global_plain
,
sizeof
(
global_
plain
));
hash
.
Update
(
plain
,
sizeof
(
plain
));
hash
.
Final
(
digest
);
...
...
@@ -241,7 +241,7 @@ void bench_ripemd()
for
(
int
i
=
0
;
i
<
megs
;
i
++
)
hash
.
Update
(
global_plain
,
sizeof
(
global_
plain
));
hash
.
Update
(
plain
,
sizeof
(
plain
));
hash
.
Final
(
digest
);
...
...
extra/yassl/taocrypt/include/algebra.hpp
View file @
2b52bc2a
...
...
@@ -40,7 +40,6 @@ class TAOCRYPT_NO_VTABLE AbstractGroup : public virtual_base
public:
typedef
Integer
Element
;
AbstractGroup
()
{}
virtual
~
AbstractGroup
()
{}
virtual
bool
Equal
(
const
Element
&
a
,
const
Element
&
b
)
const
=
0
;
...
...
@@ -95,7 +94,6 @@ private:
class
MultiplicativeGroupT
:
public
AbstractGroup
{
public:
MultiplicativeGroupT
()
{}
const
AbstractRing
&
GetRing
()
const
{
return
*
m_pRing
;}
...
...
@@ -147,7 +145,6 @@ class TAOCRYPT_NO_VTABLE AbstractEuclideanDomain
:
public
AbstractRing
{
public:
AbstractEuclideanDomain
()
{}
typedef
Integer
Element
;
virtual
void
DivisionAlgorithm
(
Element
&
r
,
Element
&
q
,
const
Element
&
a
,
...
...
extra/yassl/taocrypt/include/des.hpp
View file @
2b52bc2a
...
...
@@ -41,7 +41,6 @@ enum { DES_BLOCK_SIZE = 8, DES_KEY_SIZE = 32 };
class
BasicDES
{
public:
BasicDES
()
{}
void
SetKey
(
const
byte
*
,
word32
,
CipherDir
dir
);
void
RawProcessBlock
(
word32
&
,
word32
&
)
const
;
protected:
...
...
extra/yassl/taocrypt/include/hash.hpp
View file @
2b52bc2a
...
...
@@ -31,7 +31,6 @@ namespace TaoCrypt {
// HASH
class
HASH
:
public
virtual_base
{
public:
HASH
()
{}
virtual
~
HASH
()
{}
virtual
void
Update
(
const
byte
*
,
word32
)
=
0
;
...
...
@@ -58,8 +57,7 @@ public:
word32
GetBitCountLo
()
const
{
return
loLen_
<<
3
;
}
word32
GetBitCountHi
()
const
{
return
(
loLen_
>>
(
8
*
sizeof
(
loLen_
)
-
3
))
+
(
hiLen_
<<
3
);
}
enum
{
MaxDigestSz
=
5
,
MaxBufferSz
=
64
};
enum
{
MaxDigestSz
=
8
,
MaxBufferSz
=
64
};
protected:
typedef
word32
HashLengthType
;
word32
buffLen_
;
// in bytes
...
...
@@ -74,6 +72,38 @@ protected:
};
#ifdef WORD64_AVAILABLE
// 64-bit HASH with Transform
class
HASH64withTransform
:
public
HASH
{
public:
HASH64withTransform
(
word32
digSz
,
word32
buffSz
);
virtual
~
HASH64withTransform
()
{}
virtual
ByteOrder
getByteOrder
()
const
=
0
;
virtual
word32
getPadSize
()
const
=
0
;
virtual
void
Update
(
const
byte
*
,
word32
);
virtual
void
Final
(
byte
*
);
word32
GetBitCountLo
()
const
{
return
loLen_
<<
3
;
}
word32
GetBitCountHi
()
const
{
return
(
loLen_
>>
(
8
*
sizeof
(
loLen_
)
-
3
))
+
(
hiLen_
<<
3
);
}
enum
{
MaxDigestSz
=
8
,
MaxBufferSz
=
128
};
protected:
typedef
word32
HashLengthType
;
word32
buffLen_
;
// in bytes
HashLengthType
loLen_
;
// length in bytes
HashLengthType
hiLen_
;
// length in bytes
word64
digest_
[
MaxDigestSz
];
word64
buffer_
[
MaxBufferSz
/
sizeof
(
word64
)];
virtual
void
Transform
()
=
0
;
void
AddLength
(
word32
);
};
#endif // WORD64_AVAILABLE
}
// namespace
...
...
extra/yassl/taocrypt/include/hmac.hpp
View file @
2b52bc2a
...
...
@@ -109,11 +109,11 @@ void HMAC<T>::KeyInnerHash()
// Update
template
<
class
T
>
void
HMAC
<
T
>::
Update
(
const
byte
*
msg
_arg
,
word32
length
)
void
HMAC
<
T
>::
Update
(
const
byte
*
msg
,
word32
length
)
{
if
(
!
innerHashKeyed_
)
KeyInnerHash
();
mac_
.
Update
(
msg
_arg
,
length
);
mac_
.
Update
(
msg
,
length
);
}
...
...
extra/yassl/taocrypt/include/misc.hpp
View file @
2b52bc2a
...
...
@@ -464,6 +464,25 @@ inline word32 ByteReverse(word32 value)
}
#ifdef WORD64_AVAILABLE
inline
word64
ByteReverse
(
word64
value
)
{
#ifdef TAOCRYPT_SLOW_WORD64
return
(
word64
(
ByteReverse
(
word32
(
value
)))
<<
32
)
|
ByteReverse
(
word32
(
value
>>
32
));
#else
value
=
((
value
&
W64LIT
(
0xFF00FF00FF00FF00
))
>>
8
)
|
((
value
&
W64LIT
(
0x00FF00FF00FF00FF
))
<<
8
);
value
=
((
value
&
W64LIT
(
0xFFFF0000FFFF0000
))
>>
16
)
|
((
value
&
W64LIT
(
0x0000FFFF0000FFFF
))
<<
16
);
return
rotlFixed
(
value
,
32U
);
#endif
}
#endif // WORD64_AVAILABLE
template
<
typename
T
>
inline
void
ByteReverse
(
T
*
out
,
const
T
*
in
,
word32
byteCount
)
{
...
...
extra/yassl/taocrypt/include/modarith.hpp
View file @
2b52bc2a
...
...
@@ -37,8 +37,8 @@ public:
typedef
int
RandomizationParameter
;
typedef
Integer
Element
;
ModularArithmetic
(
const
Integer
&
modulus
_arg
=
Integer
::
One
())
:
modulus
(
modulus
_arg
),
result
((
word
)
0
,
modulus_arg
.
reg_
.
size
())
{}
ModularArithmetic
(
const
Integer
&
modulus
=
Integer
::
One
())
:
modulus
(
modulus
),
result
((
word
)
0
,
modulus
.
reg_
.
size
())
{}
ModularArithmetic
(
const
ModularArithmetic
&
ma
)
:
AbstractRing
(),
...
...
extra/yassl/taocrypt/include/modes.hpp
View file @
2b52bc2a
...
...
@@ -42,8 +42,8 @@ public:
{
cipher_
.
Process
(
c
,
p
,
sz
);
}
void
SetKey
(
const
byte
*
k
,
word32
sz
)
{
cipher_
.
SetKey
(
k
,
sz
,
DIR
);
}
void
SetKey
(
const
byte
*
k
,
word32
sz
,
const
byte
*
iv
_arg
)
{
cipher_
.
SetKey
(
k
,
sz
,
DIR
);
cipher_
.
SetIV
(
iv
_arg
);
}
void
SetKey
(
const
byte
*
k
,
word32
sz
,
const
byte
*
iv
)
{
cipher_
.
SetKey
(
k
,
sz
,
DIR
);
cipher_
.
SetIV
(
iv
);
}
private:
T
cipher_
;
...
...
extra/yassl/taocrypt/include/rsa.hpp
View file @
2b52bc2a
...
...
@@ -131,7 +131,6 @@ private:
// block type 2 padding
class
RSA_BlockType2
{
public:
RSA_BlockType2
()
{}
void
Pad
(
const
byte
*
,
word32
,
byte
*
,
word32
,
RandomNumberGenerator
&
)
const
;
word32
UnPad
(
const
byte
*
,
word32
,
byte
*
)
const
;
...
...
@@ -141,7 +140,6 @@ public:
// block type 1 padding
class
RSA_BlockType1
{
public:
RSA_BlockType1
()
{}
void
Pad
(
const
byte
*
,
word32
,
byte
*
,
word32
,
RandomNumberGenerator
&
)
const
;
word32
UnPad
(
const
byte
*
,
word32
,
byte
*
)
const
;
...
...
@@ -176,27 +174,25 @@ public:
// Public Encrypt
template
<
class
Pad
>
void
RSA_Encryptor
<
Pad
>::
Encrypt
(
const
byte
*
plain_arg
,
word32
sz
,
byte
*
cipher_arg
,
RandomNumberGenerator
&
rng_arg
)
void
RSA_Encryptor
<
Pad
>::
Encrypt
(
const
byte
*
plain
,
word32
sz
,
byte
*
cipher
,
RandomNumberGenerator
&
rng
)
{
PK_Lengths
lengths
(
key_
.
GetModulus
());
assert
(
sz
<=
lengths
.
FixedMaxPlaintextLength
());
ByteBlock
paddedBlock
(
lengths
.
PaddedBlockByteLength
());
padding_
.
Pad
(
plain
_arg
,
sz
,
paddedBlock
.
get_buffer
(),
lengths
.
PaddedBlockBitLength
(),
rng
_arg
);
padding_
.
Pad
(
plain
,
sz
,
paddedBlock
.
get_buffer
(),
lengths
.
PaddedBlockBitLength
(),
rng
);
key_
.
ApplyFunction
(
Integer
(
paddedBlock
.
get_buffer
(),
paddedBlock
.
size
())).
Encode
(
cipher
_arg
,
lengths
.
FixedCiphertextLength
());
Encode
(
cipher
,
lengths
.
FixedCiphertextLength
());
}
// Private Decrypt
template
<
class
Pad
>
word32
RSA_Decryptor
<
Pad
>::
Decrypt
(
const
byte
*
cipher_arg
,
word32
sz
,
byte
*
plain_arg
,
RandomNumberGenerator
&
rng_arg
)
word32
RSA_Decryptor
<
Pad
>::
Decrypt
(
const
byte
*
cipher
,
word32
sz
,
byte
*
plain
,
RandomNumberGenerator
&
rng
)
{
PK_Lengths
lengths
(
key_
.
GetModulus
());
assert
(
sz
==
lengths
.
FixedCiphertextLength
());
...
...
@@ -205,29 +201,29 @@ word32 RSA_Decryptor<Pad>::Decrypt(const byte* cipher_arg, word32 sz,
return
0
;
ByteBlock
paddedBlock
(
lengths
.
PaddedBlockByteLength
());
Integer
x
=
key_
.
CalculateInverse
(
rng
_arg
,
Integer
(
cipher_arg
,
Integer
x
=
key_
.
CalculateInverse
(
rng
,
Integer
(
cipher
,
lengths
.
FixedCiphertextLength
()).
Ref
());
if
(
x
.
ByteCount
()
>
paddedBlock
.
size
())
x
=
Integer
::
Zero
();
// don't return false, prevents timing attack
x
.
Encode
(
paddedBlock
.
get_buffer
(),
paddedBlock
.
size
());
return
padding_
.
UnPad
(
paddedBlock
.
get_buffer
(),
lengths
.
PaddedBlockBitLength
(),
plain
_arg
);
lengths
.
PaddedBlockBitLength
(),
plain
);
}
// Private SSL type (block 1) Encrypt
template
<
class
Pad
>
void
RSA_Decryptor
<
Pad
>::
SSL_Sign
(
const
byte
*
message
,
word32
sz
,
byte
*
sig
,
RandomNumberGenerator
&
rng
_arg
)
RandomNumberGenerator
&
rng
)
{
RSA_PublicKey
inverse
;
inverse
.
Initialize
(
key_
.
GetModulus
(),
key_
.
GetPrivateExponent
());
RSA_Encryptor
<
RSA_BlockType1
>
enc
(
inverse
);
// SSL Type
enc
.
Encrypt
(
message
,
sz
,
sig
,
rng
_arg
);
enc
.
Encrypt
(
message
,
sz
,
sig
,
rng
);
}
word32
SSL_Decrypt
(
const
RSA_PublicKey
&
key
,
const
byte
*
sig
,
byte
*
plain
_arg
);
word32
SSL_Decrypt
(
const
RSA_PublicKey
&
key
,
const
byte
*
sig
,
byte
*
plain
);
// Public SSL type (block 1) Decrypt
...
...
@@ -235,11 +231,11 @@ template<class Pad>
bool
RSA_Encryptor
<
Pad
>::
SSL_Verify
(
const
byte
*
message
,
word32
sz
,
const
byte
*
sig
)
{
ByteBlock
local_
plain
(
PK_Lengths
(
key_
.
GetModulus
()).
FixedMaxPlaintextLength
());
if
(
SSL_Decrypt
(
key_
,
sig
,
local_
plain
.
get_buffer
())
!=
sz
)
ByteBlock
plain
(
PK_Lengths
(
key_
.
GetModulus
()).
FixedMaxPlaintextLength
());
if
(
SSL_Decrypt
(
key_
,
sig
,
plain
.
get_buffer
())
!=
sz
)
return
false
;
// not right justified or bad padding
if
(
(
memcmp
(
local_
plain
.
get_buffer
(),
message
,
sz
))
==
0
)
if
(
(
memcmp
(
plain
.
get_buffer
(),
message
,
sz
))
==
0
)
return
true
;
return
false
;
}
...
...
extra/yassl/taocrypt/include/sha.hpp
View file @
2b52bc2a
...
...
@@ -64,6 +64,103 @@ inline void swap(SHA& a, SHA& b)
a
.
Swap
(
b
);
}
// SHA-256 digest
class
SHA256
:
public
HASHwithTransform
{
public:
enum
{
BLOCK_SIZE
=
64
,
DIGEST_SIZE
=
32
,
PAD_SIZE
=
56
,
TAO_BYTE_ORDER
=
BigEndianOrder
};
// in Bytes
SHA256
()
:
HASHwithTransform
(
DIGEST_SIZE
/
sizeof
(
word32
),
BLOCK_SIZE
)
{
Init
();
}
ByteOrder
getByteOrder
()
const
{
return
ByteOrder
(
TAO_BYTE_ORDER
);
}
word32
getBlockSize
()
const
{
return
BLOCK_SIZE
;
}
word32
getDigestSize
()
const
{
return
DIGEST_SIZE
;
}
word32
getPadSize
()
const
{
return
PAD_SIZE
;
}
void
Init
();
SHA256
(
const
SHA256
&
);
SHA256
&
operator
=
(
const
SHA256
&
);
void
Swap
(
SHA256
&
);
private:
void
Transform
();
};
// SHA-224 digest
class
SHA224
:
public
HASHwithTransform
{
public:
enum
{
BLOCK_SIZE
=
64
,
DIGEST_SIZE
=
28
,
PAD_SIZE
=
56
,
TAO_BYTE_ORDER
=
BigEndianOrder
};
// in Bytes
SHA224
()
:
HASHwithTransform
(
SHA256
::
DIGEST_SIZE
/
sizeof
(
word32
),
BLOCK_SIZE
)
{
Init
();
}
ByteOrder
getByteOrder
()
const
{
return
ByteOrder
(
TAO_BYTE_ORDER
);
}
word32
getBlockSize
()
const
{
return
BLOCK_SIZE
;
}
word32
getDigestSize
()
const
{
return
DIGEST_SIZE
;
}
word32
getPadSize
()
const
{
return
PAD_SIZE
;
}
void
Init
();
SHA224
(
const
SHA224
&
);
SHA224
&
operator
=
(
const
SHA224
&
);
void
Swap
(
SHA224
&
);
private:
void
Transform
();
};
#ifdef WORD64_AVAILABLE
// SHA-512 digest
class
SHA512
:
public
HASH64withTransform
{
public:
enum
{
BLOCK_SIZE
=
128
,
DIGEST_SIZE
=
64
,
PAD_SIZE
=
112
,
TAO_BYTE_ORDER
=
BigEndianOrder
};
// in Bytes
SHA512
()
:
HASH64withTransform
(
DIGEST_SIZE
/
sizeof
(
word64
),
BLOCK_SIZE
)
{
Init
();
}
ByteOrder
getByteOrder
()
const
{
return
ByteOrder
(
TAO_BYTE_ORDER
);
}
word32
getBlockSize
()
const
{
return
BLOCK_SIZE
;
}
word32
getDigestSize
()
const
{
return
DIGEST_SIZE
;
}
word32
getPadSize
()
const
{
return
PAD_SIZE
;
}
void
Init
();
SHA512
(
const
SHA512
&
);
SHA512
&
operator
=
(
const
SHA512
&
);
void
Swap
(
SHA512
&
);
private:
void
Transform
();
};
// SHA-384 digest
class
SHA384
:
public
HASH64withTransform
{
public:
enum
{
BLOCK_SIZE
=
128
,
DIGEST_SIZE
=
48
,
PAD_SIZE
=
112
,
TAO_BYTE_ORDER
=
BigEndianOrder
};
// in Bytes
SHA384
()
:
HASH64withTransform
(
SHA512
::
DIGEST_SIZE
/
sizeof
(
word64
),
BLOCK_SIZE
)
{
Init
();
}
ByteOrder
getByteOrder
()
const
{
return
ByteOrder
(
TAO_BYTE_ORDER
);
}
word32
getBlockSize
()
const
{
return
BLOCK_SIZE
;
}
word32
getDigestSize
()
const
{
return
DIGEST_SIZE
;
}
word32
getPadSize
()
const
{
return
PAD_SIZE
;
}
void
Init
();
SHA384
(
const
SHA384
&
);
SHA384
&
operator
=
(
const
SHA384
&
);
void
Swap
(
SHA384
&
);
private:
void
Transform
();
};
#endif // WORD64_AVAILABLE
}
// namespace
...
...
extra/yassl/taocrypt/include/type_traits.hpp
View file @
2b52bc2a
...
...
@@ -62,11 +62,7 @@ MK_FUNDAMENTAL_TYPE(unsigned long)
MK_FUNDAMENTAL_TYPE
(
float
)
MK_FUNDAMENTAL_TYPE
(
double
)
#ifdef LONG_DOUBLE_IS_DISTINCT_TYPE
// Don't define by default as this gives warnings on power mac
MK_FUNDAMENTAL_TYPE
(
long
double
)
#endif
MK_FUNDAMENTAL_TYPE
(
long
double
)
#if defined(WORD64_AVAILABLE) && defined(WORD64_IS_DISTINCT_TYPE)
MK_FUNDAMENTAL_TYPE
(
word64
)
...
...
extra/yassl/taocrypt/include/types.hpp
View file @
2b52bc2a
...
...
@@ -46,13 +46,16 @@ typedef unsigned int word32;
#define WORD64_AVAILABLE
#define WORD64_IS_DISTINCT_TYPE
typedef
unsigned
__int64
word64
;
#define W64LIT(x) x##ui64
#elif SIZEOF_LONG == 8
#define WORD64_AVAILABLE
typedef
unsigned
long
word64
;
#define W64LIT(x) x##LL
#elif SIZEOF_LONG_LONG == 8
#define WORD64_AVAILABLE
#define WORD64_IS_DISTINCT_TYPE
typedef
unsigned
long
long
word64
;
#define W64LIT(x) x##LL
#endif
...
...
extra/yassl/taocrypt/mySTL/list.hpp
View file @
2b52bc2a
...
...
@@ -231,7 +231,7 @@ void list<T>::push_front(T t)
template
<
typename
T
>
void
list
<
T
>::
pop_front
()
{
node
*
local_
front
=
head_
;
node
*
front
=
head_
;
if
(
head_
==
0
)
return
;
...
...
@@ -241,8 +241,8 @@ void list<T>::pop_front()
head_
=
head_
->
next_
;
head_
->
prev_
=
0
;
}
destroy
(
local_
front
);
FreeMemory
(
local_
front
);
destroy
(
front
);
FreeMemory
(
front
);
--
sz_
;
}
...
...
@@ -303,13 +303,13 @@ T list<T>::back() const
template
<
typename
T
>
typename
list
<
T
>::
node
*
list
<
T
>::
look_up
(
T
t
)
{
node
*
l
ocal_l
ist
=
head_
;
node
*
list
=
head_
;
if
(
l
ocal_l
ist
==
0
)
return
0
;
if
(
list
==
0
)
return
0
;
for
(;
l
ocal_list
;
local_list
=
local_
list
->
next_
)
if
(
l
ocal_l
ist
->
value_
==
t
)
return
l
ocal_l
ist
;
for
(;
l
ist
;
list
=
list
->
next_
)
if
(
list
->
value_
==
t
)
return
list
;
return
0
;
}
...
...
extra/yassl/taocrypt/src/aes.cpp
View file @
2b52bc2a
...
...
@@ -90,14 +90,13 @@ void AES::SetKey(const byte* userKey, word32 keylen, CipherDir /*dummy*/)
rounds_
=
keylen
/
4
+
6
;
word32
temp
,
*
rk
=
key_
;
unsigned
int
i
=
0
;
GetUserKey
(
BigEndianOrder
,
rk
,
keylen
/
4
,
userKey
,
keylen
);
switch
(
keylen
)
{
case
16
:
{
unsigned
int
i
=
0
;
while
(
true
)
{
temp
=
rk
[
3
];
...
...
@@ -115,10 +114,8 @@ void AES::SetKey(const byte* userKey, word32 keylen, CipherDir /*dummy*/)
rk
+=
4
;
}
break
;
}
case
24
:
{
unsigned
int
i
=
0
;
while
(
true
)
// for (;;) here triggers a bug in VC60 SP4 w/ Pro Pack
{
temp
=
rk
[
5
];
...
...
@@ -139,10 +136,7 @@ void AES::SetKey(const byte* userKey, word32 keylen, CipherDir /*dummy*/)
}
break
;
}
case
32
:
{
unsigned
int
i
=
0
;
while
(
true
)
{
temp
=
rk
[
7
];
...
...
@@ -171,7 +165,6 @@ void AES::SetKey(const byte* userKey, word32 keylen, CipherDir /*dummy*/)
}
break
;
}
}
if
(
dir_
==
DECRYPTION
)
{
...
...
extra/yassl/taocrypt/src/algebra.cpp
View file @
2b52bc2a
...
...
@@ -186,10 +186,10 @@ Integer AbstractGroup::CascadeScalarMultiply(const Element &x,
struct
WindowSlider
{
WindowSlider
(
const
Integer
&
exp
_arg
,
bool
fastNegate_arg
,
WindowSlider
(
const
Integer
&
exp
,
bool
fastNegate
,
unsigned
int
windowSizeIn
=
0
)
:
exp
(
exp
_arg
),
windowModulus
(
Integer
::
One
()),
windowSize
(
windowSizeIn
),
windowBegin
(
0
),
fastNegate
(
fastNegate
_arg
),
firstTime
(
true
),
:
exp
(
exp
),
windowModulus
(
Integer
::
One
()),
windowSize
(
windowSizeIn
),
windowBegin
(
0
),
fastNegate
(
fastNegate
),
firstTime
(
true
),
finished
(
false
)
{
if
(
windowSize
==
0
)
...
...
extra/yassl/taocrypt/src/asn.cpp
View file @
2b52bc2a
...
...
@@ -737,17 +737,17 @@ void CertDecoder::GetName(NameType nt)
email
=
true
;
source_
.
advance
(
oidSz
+
1
);
word32
length
2
=
GetLength
(
source_
);
word32
length
=
GetLength
(
source_
);
if
(
email
)
{
memcpy
(
&
ptr
[
idx
],
"/emailAddress="
,
14
);
idx
+=
14
;
memcpy
(
&
ptr
[
idx
],
source_
.
get_current
(),
length
2
);
idx
+=
length
2
;
memcpy
(
&
ptr
[
idx
],
source_
.
get_current
(),
length
);
idx
+=
length
;
}
source_
.
advance
(
length
2
);
source_
.
advance
(
length
);
}
}
ptr
[
idx
++
]
=
0
;
...
...
extra/yassl/taocrypt/src/hash.cpp
View file @
2b52bc2a
...
...
@@ -108,4 +108,89 @@ void HASHwithTransform::Final(byte* hash)
Init
();
// reset state
}
#ifdef WORD64_AVAILABLE
HASH64withTransform
::
HASH64withTransform
(
word32
digSz
,
word32
buffSz
)
{
assert
(
digSz
<=
MaxDigestSz
);
assert
(
buffSz
<=
MaxBufferSz
);
}
void
HASH64withTransform
::
AddLength
(
word32
len
)
{
HashLengthType
tmp
=
loLen_
;
if
(
(
loLen_
+=
len
)
<
tmp
)
hiLen_
++
;
// carry low to high
hiLen_
+=
SafeRightShift
<
8
*
sizeof
(
HashLengthType
)
>
(
len
);
}
// Update digest with data of size len, do in blocks
void
HASH64withTransform
::
Update
(
const
byte
*
data
,
word32
len
)
{
// do block size increments
word32
blockSz
=
getBlockSize
();
byte
*
local
=
reinterpret_cast
<
byte
*>
(
buffer_
);
while
(
len
)
{
word32
add
=
min
(
len
,
blockSz
-
buffLen_
);
memcpy
(
&
local
[
buffLen_
],
data
,
add
);
buffLen_
+=
add
;
data
+=
add
;
len
-=
add
;
if
(
buffLen_
==
blockSz
)
{
ByteReverseIf
(
buffer_
,
buffer_
,
blockSz
,
getByteOrder
());
Transform
();
AddLength
(
blockSz
);
buffLen_
=
0
;
}
}
}
// Final process, place digest in hash
void
HASH64withTransform
::
Final
(
byte
*
hash
)
{
word32
blockSz
=
getBlockSize
();
word32
digestSz
=
getDigestSize
();
word32
padSz
=
getPadSize
();
ByteOrder
order
=
getByteOrder
();
AddLength
(
buffLen_
);
// before adding pads
HashLengthType
preLoLen
=
GetBitCountLo
();
HashLengthType
preHiLen
=
GetBitCountHi
();
byte
*
local
=
reinterpret_cast
<
byte
*>
(
buffer_
);
local
[
buffLen_
++
]
=
0x80
;
// add 1
// pad with zeros
if
(
buffLen_
>
padSz
)
{
memset
(
&
local
[
buffLen_
],
0
,
blockSz
-
buffLen_
);
buffLen_
+=
blockSz
-
buffLen_
;
ByteReverseIf
(
buffer_
,
buffer_
,
blockSz
,
order
);
Transform
();
buffLen_
=
0
;
}
memset
(
&
local
[
buffLen_
],
0
,
padSz
-
buffLen_
);
ByteReverseIf
(
buffer_
,
buffer_
,
padSz
,
order
);
buffer_
[
blockSz
/
sizeof
(
word64
)
-
2
]
=
order
?
preHiLen
:
preLoLen
;
buffer_
[
blockSz
/
sizeof
(
word64
)
-
1
]
=
order
?
preLoLen
:
preHiLen
;
Transform
();
ByteReverseIf
(
digest_
,
digest_
,
digestSz
,
order
);
memcpy
(
hash
,
digest_
,
digestSz
);
Init
();
// reset state
}
#endif // WORD64_AVAILABLE
}
// namespace
extra/yassl/taocrypt/src/integer.cpp
View file @
2b52bc2a
...
...
@@ -3390,7 +3390,7 @@ void Integer::DivideByPowerOf2(Integer &r, Integer &q, const Integer &a,
CopyWords
(
r
.
reg_
.
get_buffer
(),
a
.
reg_
.
get_buffer
(),
wordCount
);
SetWords
(
r
.
reg_
+
wordCount
,
0
,
r
.
reg_
.
size
()
-
wordCount
);
if
(
n
%
WORD_BITS
!=
0
)
r
.
reg_
[
wordCount
-
1
]
%=
(
(
word
)
1
<<
(
n
%
WORD_BITS
));
r
.
reg_
[
wordCount
-
1
]
%=
(
word
(
1
)
<<
(
n
%
WORD_BITS
));
}
else
{
...
...
extra/yassl/taocrypt/src/sha.cpp
View file @
2b52bc2a
This diff is collapsed.
Click to expand it.
extra/yassl/taocrypt/test/test.cpp
View file @
2b52bc2a
This diff is collapsed.
Click to expand it.
extra/yassl/testsuite/testsuite.cpp
View file @
2b52bc2a
...
...
@@ -7,7 +7,7 @@
typedef
unsigned
char
byte
;
void
taocrypt_test
(
void
*
);
void
file_test
(
char
*
,
byte
*
);
void
file_test
(
c
onst
c
har
*
,
byte
*
);
void
client_test
(
void
*
);
void
echoclient_test
(
void
*
);
...
...
@@ -86,8 +86,8 @@ int main(int argc, char** argv)
// input output compare
byte
input
[
TaoCrypt
::
MD5
::
DIGEST_SIZE
];
byte
output
[
TaoCrypt
::
MD5
::
DIGEST_SIZE
];
file_test
(
(
char
*
)
"input"
,
input
);
file_test
(
(
char
*
)
"output"
,
output
);
file_test
(
"input"
,
input
);
file_test
(
"output"
,
output
);
assert
(
memcmp
(
input
,
output
,
sizeof
(
input
))
==
0
);
printf
(
"
\n
All tests passed!
\n
"
);
...
...
@@ -141,17 +141,16 @@ int test_openSSL_des()
/* test des encrypt/decrypt */
char
data
[]
=
"this is my data "
;
int
dataSz
=
strlen
(
data
);
DES_key_schedule
local_
key
[
3
];
DES_key_schedule
key
[
3
];
byte
iv
[
8
];
EVP_BytesToKey
(
EVP_des_ede3_cbc
(),
EVP_md5
(),
NULL
,
(
byte
*
)
data
,
dataSz
,
1
,
(
byte
*
)
local_
key
,
iv
);
(
byte
*
)
key
,
iv
);
byte
cipher
[
16
];
DES_ede3_cbc_encrypt
((
byte
*
)
data
,
cipher
,
dataSz
,
&
local_key
[
0
],
&
local_key
[
1
],
&
local_key
[
2
],
&
iv
,
true
);
DES_ede3_cbc_encrypt
((
byte
*
)
data
,
cipher
,
dataSz
,
&
key
[
0
],
&
key
[
1
],
&
key
[
2
],
&
iv
,
true
);
byte
plain
[
16
];
DES_ede3_cbc_encrypt
(
cipher
,
plain
,
16
,
&
local_key
[
0
],
&
local_key
[
1
],
&
local_key
[
2
],
&
iv
,
false
);
DES_ede3_cbc_encrypt
(
cipher
,
plain
,
16
,
&
key
[
0
],
&
key
[
1
],
&
key
[
2
],
&
iv
,
false
);
return
0
;
}
innobase/dict/dict0dict.c
View file @
2b52bc2a
...
...
@@ -2139,9 +2139,12 @@ dict_foreign_find_index(
ulint
n_cols
,
/* in: number of columns */
dict_index_t
*
types_idx
,
/* in: NULL or an index to whose types the
column types must match */
ibool
check_charsets
)
/* in: whether to check charsets.
ibool
check_charsets
,
/* in: whether to check charsets.
only has an effect if types_idx !=
NULL. */
ulint
check_null
)
/* in: nonzero if none of the columns must
be declared NOT NULL */
{
#ifndef UNIV_HOTBACKUP
dict_index_t
*
index
;
...
...
@@ -2154,10 +2157,11 @@ dict_foreign_find_index(
if
(
dict_index_get_n_fields
(
index
)
>=
n_cols
)
{
for
(
i
=
0
;
i
<
n_cols
;
i
++
)
{
col_name
=
dict_index_get_nth_field
(
index
,
i
)
->
col
->
name
;
if
(
dict_index_get_nth_field
(
index
,
i
)
->
prefix_len
!=
0
)
{
dict_field_t
*
field
=
dict_index_get_nth_field
(
index
,
i
);
col_name
=
field
->
col
->
name
;
if
(
field
->
prefix_len
!=
0
)
{
/* We do not accept column prefix
indexes here */
...
...
@@ -2169,6 +2173,13 @@ dict_foreign_find_index(
break
;
}
if
(
check_null
&&
(
field
->
col
->
type
.
prtype
&
DATA_NOT_NULL
))
{
return
(
NULL
);
}
if
(
types_idx
&&
!
cmp_types_are_equal
(
dict_index_get_nth_type
(
index
,
i
),
dict_index_get_nth_type
(
types_idx
,
i
),
...
...
@@ -2290,7 +2301,7 @@ dict_foreign_add_to_cache(
index
=
dict_foreign_find_index
(
ref_table
,
(
const
char
**
)
for_in_cache
->
referenced_col_names
,
for_in_cache
->
n_fields
,
for_in_cache
->
foreign_index
,
check_charsets
);
for_in_cache
->
foreign_index
,
check_charsets
,
FALSE
);
if
(
index
==
NULL
)
{
dict_foreign_error_report
(
ef
,
for_in_cache
,
...
...
@@ -2317,13 +2328,17 @@ dict_foreign_add_to_cache(
index
=
dict_foreign_find_index
(
for_table
,
(
const
char
**
)
for_in_cache
->
foreign_col_names
,
for_in_cache
->
n_fields
,
for_in_cache
->
referenced_index
,
check_charsets
);
for_in_cache
->
referenced_index
,
check_charsets
,
for_in_cache
->
type
&
(
DICT_FOREIGN_ON_DELETE_SET_NULL
|
DICT_FOREIGN_ON_UPDATE_SET_NULL
));
if
(
index
==
NULL
)
{
dict_foreign_error_report
(
ef
,
for_in_cache
,
"there is no index in the table which would contain
\n
"
"the columns as the first columns, or the data types in the
\n
"
"table do not match to the ones in the referenced table."
);
"table do not match to the ones in the referenced table
\n
"
"or one of the ON ... SET NULL columns is declared NOT NULL."
);
if
(
for_in_cache
==
foreign
)
{
if
(
added_to_referenced_list
)
{
...
...
@@ -3125,7 +3140,8 @@ col_loop1:
/* Try to find an index which contains the columns
as the first fields and in the right order */
index
=
dict_foreign_find_index
(
table
,
column_names
,
i
,
NULL
,
TRUE
);
index
=
dict_foreign_find_index
(
table
,
column_names
,
i
,
NULL
,
TRUE
,
FALSE
);
if
(
!
index
)
{
mutex_enter
(
&
dict_foreign_err_mutex
);
...
...
@@ -3390,7 +3406,7 @@ try_find_index:
if
(
referenced_table
)
{
index
=
dict_foreign_find_index
(
referenced_table
,
column_names
,
i
,
foreign
->
foreign_index
,
TRUE
);
column_names
,
i
,
foreign
->
foreign_index
,
TRUE
,
FALSE
);
if
(
!
index
)
{
dict_foreign_free
(
foreign
);
mutex_enter
(
&
dict_foreign_err_mutex
);
...
...
innobase/include/rem0rec.ic
View file @
2b52bc2a
...
...
@@ -982,6 +982,9 @@ rec_offs_nth_size(
{
ut_ad(rec_offs_validate(NULL, NULL, offsets));
ut_ad(n < rec_offs_n_fields(offsets));
if (!n) {
return(rec_offs_base(offsets)[1 + n] & REC_OFFS_MASK);
}
return((rec_offs_base(offsets)[1 + n] - rec_offs_base(offsets)[n])
& REC_OFFS_MASK);
}
...
...
innobase/include/sync0sync.ic
View file @
2b52bc2a
...
...
@@ -6,6 +6,16 @@ Mutex, the basic synchronization primitive
Created 9/5/1995 Heikki Tuuri
*******************************************************/
#if defined(not_defined) && defined(__GNUC__) && defined(UNIV_INTEL_X86)
/* %z0: Use the size of operand %0 which in our case is *m to determine
instruction size, it should end up as xchgl. "1" in the input constraint,
says that "in" has to go in the same place as "out".*/
#define TAS(m, in, out) \
asm volatile ("xchg%z0 %2, %0" \
: "=g" (*(m)), "=r" (out) \
: "1" (in)) /* Note: "1" here refers to "=r" (out) */
#endif
/**********************************************************************
Sets the waiters field in a mutex. */
...
...
@@ -85,20 +95,10 @@ mutex_test_and_set(
return(res);
#elif defined(not_defined) && defined(__GNUC__) && defined(UNIV_INTEL_X86)
ulint* lw;
ulint res;
lw = &(mutex->lock_word);
/* In assembly we use the so-called AT & T syntax where
the order of operands is inverted compared to the ordinary Intel
syntax. The 'l' after the mnemonics denotes a 32-bit operation.
The line after the code tells which values come out of the asm
code, and the second line tells the input to the asm code. */
TAS(&mutex->lock_word, 1, res);
asm volatile("movl $1, %%eax; xchgl (%%ecx), %%eax" :
"=eax" (res), "=m" (*lw) :
"ecx" (lw));
return(res);
#else
ibool ret;
...
...
@@ -137,20 +137,9 @@ mutex_reset_lock_word(
__asm MOV ECX, lw
__asm XCHG EDX, DWORD PTR [ECX]
#elif defined(not_defined) && defined(__GNUC__) && defined(UNIV_INTEL_X86)
ulint* lw;
lw = &(mutex->lock_word);
/* In assembly we use the so-called AT & T syntax where
the order of operands is inverted compared to the ordinary Intel
syntax. The 'l' after the mnemonics denotes a 32-bit operation. */
ulint res;
asm volatile("movl $0, %%eax; xchgl (%%ecx), %%eax" :
"=m" (*lw) :
"ecx" (lw) :
"eax"); /* gcc does not seem to understand
that our asm code resets eax: tell it
explicitly that after the third ':' */
TAS(&mutex->lock_word, 0, res);
#else
mutex->lock_word = 0;
...
...
innobase/lock/lock0lock.c
View file @
2b52bc2a
...
...
@@ -3259,12 +3259,6 @@ lock_deadlock_recursive(
*
cost
=
*
cost
+
1
;
if
((
depth
>
LOCK_MAX_DEPTH_IN_DEADLOCK_CHECK
)
||
(
*
cost
>
LOCK_MAX_N_STEPS_IN_DEADLOCK_CHECK
))
{
return
(
LOCK_VICTIM_IS_START
);
}
lock
=
wait_lock
;
if
(
lock_get_type
(
wait_lock
)
==
LOCK_REC
)
{
...
...
@@ -3296,11 +3290,18 @@ lock_deadlock_recursive(
if
(
lock_has_to_wait
(
wait_lock
,
lock
))
{
ibool
too_far
=
depth
>
LOCK_MAX_DEPTH_IN_DEADLOCK_CHECK
||
*
cost
>
LOCK_MAX_N_STEPS_IN_DEADLOCK_CHECK
;
lock_trx
=
lock
->
trx
;
if
(
lock_trx
==
start
)
{
if
(
lock_trx
==
start
||
too_far
)
{
/* We came back to the recursion starting
point: a deadlock detected */
point: a deadlock detected; or we have
searched the waits-for graph too long */
FILE
*
ef
=
lock_latest_err_file
;
rewind
(
ef
);
...
...
@@ -3342,9 +3343,20 @@ lock_deadlock_recursive(
}
#ifdef UNIV_DEBUG
if
(
lock_print_waits
)
{
fputs
(
"Deadlock detected
\n
"
,
stderr
);
fputs
(
"Deadlock detected"
" or too long search
\n
"
,
stderr
);
}
#endif
/* UNIV_DEBUG */
if
(
too_far
)
{
fputs
(
"TOO DEEP OR LONG SEARCH"
" IN THE LOCK TABLE"
" WAITS-FOR GRAPH
\n
"
,
ef
);
return
(
LOCK_VICTIM_IS_START
);
}
if
(
ut_dulint_cmp
(
wait_lock
->
trx
->
undo_no
,
start
->
undo_no
)
>=
0
)
{
/* Our recursion starting point
...
...
innobase/srv/srv0srv.c
View file @
2b52bc2a
...
...
@@ -1822,14 +1822,14 @@ srv_export_innodb_status(void)
export_vars
.
innodb_pages_written
=
buf_pool
->
n_pages_written
;
export_vars
.
innodb_row_lock_waits
=
srv_n_lock_wait_count
;
export_vars
.
innodb_row_lock_current_waits
=
srv_n_lock_wait_current_count
;
export_vars
.
innodb_row_lock_time
=
srv_n_lock_wait_time
/
1000
0
;
export_vars
.
innodb_row_lock_time
=
srv_n_lock_wait_time
/
1000
;
if
(
srv_n_lock_wait_count
>
0
)
{
export_vars
.
innodb_row_lock_time_avg
=
(
ulint
)
(
srv_n_lock_wait_time
/
1000
0
/
srv_n_lock_wait_count
);
(
srv_n_lock_wait_time
/
1000
/
srv_n_lock_wait_count
);
}
else
{
export_vars
.
innodb_row_lock_time_avg
=
0
;
}
export_vars
.
innodb_row_lock_time_max
=
srv_n_lock_max_wait_time
/
1000
0
;
export_vars
.
innodb_row_lock_time_max
=
srv_n_lock_max_wait_time
/
1000
;
export_vars
.
innodb_rows_read
=
srv_n_rows_read
;
export_vars
.
innodb_rows_inserted
=
srv_n_rows_inserted
;
export_vars
.
innodb_rows_updated
=
srv_n_rows_updated
;
...
...
innobase/ut/ut0ut.c
View file @
2b52bc2a
...
...
@@ -20,6 +20,55 @@ Created 5/11/1994 Heikki Tuuri
ibool
ut_always_false
=
FALSE
;
#ifdef __WIN__
/*********************************************************************
NOTE: The Windows epoch starts from 1601/01/01 whereas the Unix
epoch starts from 1970/1/1. For selection of constant see:
http://support.microsoft.com/kb/167296/ */
#define WIN_TO_UNIX_DELTA_USEC ((ib_longlong) 11644473600000000ULL)
/*********************************************************************
This is the Windows version of gettimeofday(2).*/
static
int
ut_gettimeofday
(
/*============*/
/* out: 0 if all OK else -1 */
struct
timeval
*
tv
,
/* out: Values are relative to Unix epoch */
void
*
tz
)
/* in: not used */
{
FILETIME
ft
;
ib_longlong
tm
;
if
(
!
tv
)
{
errno
=
EINVAL
;
return
(
-
1
);
}
GetSystemTimeAsFileTime
(
&
ft
);
tm
=
(
ib_longlong
)
ft
.
dwHighDateTime
<<
32
;
tm
|=
ft
.
dwLowDateTime
;
ut_a
(
tm
>=
0
);
/* If tm wraps over to negative, the quotient / 10
does not work */
tm
/=
10
;
/* Convert from 100 nsec periods to usec */
/* If we don't convert to the Unix epoch the value for
struct timeval::tv_sec will overflow.*/
tm
-=
WIN_TO_UNIX_DELTA_USEC
;
tv
->
tv_sec
=
(
long
)
(
tm
/
1000000L
);
tv
->
tv_usec
=
(
long
)
(
tm
%
1000000L
);
return
(
0
);
}
#else
#define ut_gettimeofday gettimeofday
#endif
/*********************************************************************
Get the quote character to be used in SQL identifiers.
This definition must match the one in sql/ha_innodb.cc! */
...
...
@@ -82,17 +131,11 @@ ut_usectime(
ulint
*
sec
,
/* out: seconds since the Epoch */
ulint
*
ms
)
/* out: microseconds since the Epoch+*sec */
{
#ifdef __WIN__
SYSTEMTIME
st
;
GetLocalTime
(
&
st
);
*
sec
=
(
ulint
)
st
.
wSecond
;
*
ms
=
(
ulint
)
st
.
wMilliseconds
;
#else
struct
timeval
tv
;
gettimeofday
(
&
tv
,
NULL
);
ut_gettimeofday
(
&
tv
,
NULL
);
*
sec
=
(
ulint
)
tv
.
tv_sec
;
*
ms
=
(
ulint
)
tv
.
tv_usec
;
#endif
}
/**************************************************************
...
...
mysql-test/mysql-test-run.pl
View file @
2b52bc2a
...
...
@@ -1064,7 +1064,6 @@ sub command_line_setup () {
idx
=>
0
,
path_myddir
=>
"
$opt_vardir
/master-data
",
path_myerr
=>
"
$opt_vardir
/log/master.err
",
path_mylog
=>
"
$opt_vardir
/log/master.log
",
path_pid
=>
"
$opt_vardir
/run/master.pid
",
path_sock
=>
"
$sockdir
/master.sock
",
port
=>
$opt_master_myport
,
...
...
@@ -1080,7 +1079,6 @@ sub command_line_setup () {
idx
=>
1
,
path_myddir
=>
"
$opt_vardir
/master1-data
",
path_myerr
=>
"
$opt_vardir
/log/master1.err
",
path_mylog
=>
"
$opt_vardir
/log/master1.log
",
path_pid
=>
"
$opt_vardir
/run/master1.pid
",
path_sock
=>
"
$sockdir
/master1.sock
",
port
=>
$opt_master_myport
+
1
,
...
...
@@ -1096,7 +1094,6 @@ sub command_line_setup () {
idx
=>
0
,
path_myddir
=>
"
$opt_vardir
/slave-data
",
path_myerr
=>
"
$opt_vardir
/log/slave.err
",
path_mylog
=>
"
$opt_vardir
/log/slave.log
",
path_pid
=>
"
$opt_vardir
/run/slave.pid
",
path_sock
=>
"
$sockdir
/slave.sock
",
port
=>
$opt_slave_myport
,
...
...
@@ -1113,7 +1110,6 @@ sub command_line_setup () {
idx
=>
1
,
path_myddir
=>
"
$opt_vardir
/slave1-data
",
path_myerr
=>
"
$opt_vardir
/log/slave1.err
",
path_mylog
=>
"
$opt_vardir
/log/slave1.log
",
path_pid
=>
"
$opt_vardir
/run/slave1.pid
",
path_sock
=>
"
$sockdir
/slave1.sock
",
port
=>
$opt_slave_myport
+
1
,
...
...
@@ -1129,7 +1125,6 @@ sub command_line_setup () {
idx
=>
2
,
path_myddir
=>
"
$opt_vardir
/slave2-data
",
path_myerr
=>
"
$opt_vardir
/log/slave2.err
",
path_mylog
=>
"
$opt_vardir
/log/slave2.log
",
path_pid
=>
"
$opt_vardir
/run/slave2.pid
",
path_sock
=>
"
$sockdir
/slave2.sock
",
port
=>
$opt_slave_myport
+
2
,
...
...
@@ -3683,8 +3678,10 @@ sub mysqld_arguments ($$$$) {
mtr_add_arg
(
$args
,
"
%s--log-output=table,file
",
$prefix
);
}
mtr_add_arg
(
$args
,
"
%s--log=%s
",
$prefix
,
$mysqld
->
{'
path_mylog
'});
my
$log_base_path
=
"
$opt_vardir
/log/
$mysqld
->{'type'}
$sidx
";
mtr_add_arg
(
$args
,
"
%s--log=%s.log
",
$prefix
,
$log_base_path
);
mtr_add_arg
(
$args
,
"
%s--log-slow-queries=%s-slow.log
",
$prefix
,
$log_base_path
);
# Check if "extra_opt" contains --skip-log-bin
my
$skip_binlog
=
grep
(
/^--skip-log-bin/
,
@$extra_opt
);
...
...
mysql-test/r/flush2.result
View file @
2b52bc2a
flush logs;
set global expire_logs_days = 3;
show variables like 'log%';
show variables like 'log
_bin
%';
Variable_name Value
log ON
log_bin OFF
log_bin_trust_function_creators ON
log_error
log_queries_not_using_indexes OFF
log_slave_updates OFF
log_slow_queries OFF
log_warnings 1
flush logs;
show variables like 'log%';
show variables like 'log
_bin
%';
Variable_name Value
log ON
log_bin OFF
log_bin_trust_function_creators ON
log_error
log_queries_not_using_indexes OFF
log_slave_updates OFF
log_slow_queries OFF
log_warnings 1
set global expire_logs_days = 0;
mysql-test/r/innodb.result
View file @
2b52bc2a
...
...
@@ -2968,3 +2968,21 @@ a
drop table t2, t1;
create table t1 (g geometry not null, spatial gk(g)) engine=innodb;
ERROR HY000: The used table type doesn't support SPATIAL indexes
CREATE TABLE t1 (a INT, INDEX(a)) ENGINE=InnoDB;
CREATE TABLE t2 (a INT, INDEX(a)) ENGINE=InnoDB;
INSERT INTO t1 VALUES (1);
INSERT INTO t2 VALUES (1);
ALTER TABLE t2 ADD FOREIGN KEY (a) REFERENCES t1 (a) ON DELETE SET NULL;
ALTER TABLE t2 MODIFY a INT NOT NULL;
ERROR HY000: Error on rename of '#sql-temporary' to './test/t2' (errno: 150)
DELETE FROM t1;
DROP TABLE t2,t1;
CREATE TABLE t1 (a VARCHAR(5) COLLATE utf8_unicode_ci PRIMARY KEY)
ENGINE=InnoDB;
INSERT INTO t1 VALUES (0xEFBCA4EFBCA4EFBCA4);
DELETE FROM t1;
INSERT INTO t1 VALUES ('DDD');
SELECT * FROM t1;
a
DDD
DROP TABLE t1;
mysql-test/t/flush2.test
View file @
2b52bc2a
...
...
@@ -3,7 +3,7 @@
#
flush
logs
;
set
global
expire_logs_days
=
3
;
show
variables
like
'log%'
;
show
variables
like
'log
_bin
%'
;
flush
logs
;
show
variables
like
'log%'
;
show
variables
like
'log
_bin
%'
;
set
global
expire_logs_days
=
0
;
mysql-test/t/innodb.test
View file @
2b52bc2a
...
...
@@ -1976,6 +1976,34 @@ drop table t2, t1;
--
error
ER_TABLE_CANT_HANDLE_SPKEYS
create
table
t1
(
g
geometry
not
null
,
spatial
gk
(
g
))
engine
=
innodb
;
#
# Bug #25927: Prevent ALTER TABLE ... MODIFY ... NOT NULL on columns
# for which there is a foreign key constraint ON ... SET NULL.
#
CREATE
TABLE
t1
(
a
INT
,
INDEX
(
a
))
ENGINE
=
InnoDB
;
CREATE
TABLE
t2
(
a
INT
,
INDEX
(
a
))
ENGINE
=
InnoDB
;
INSERT
INTO
t1
VALUES
(
1
);
INSERT
INTO
t2
VALUES
(
1
);
ALTER
TABLE
t2
ADD
FOREIGN
KEY
(
a
)
REFERENCES
t1
(
a
)
ON
DELETE
SET
NULL
;
--
replace_regex
/
'\.\/test\/#sql-[0-9a-f_]*'
/
'#sql-temporary'
/
--
error
1025
ALTER
TABLE
t2
MODIFY
a
INT
NOT
NULL
;
DELETE
FROM
t1
;
DROP
TABLE
t2
,
t1
;
#
# Bug #26835: table corruption after delete+insert
#
CREATE
TABLE
t1
(
a
VARCHAR
(
5
)
COLLATE
utf8_unicode_ci
PRIMARY
KEY
)
ENGINE
=
InnoDB
;
INSERT
INTO
t1
VALUES
(
0xEFBCA4EFBCA4EFBCA4
);
DELETE
FROM
t1
;
INSERT
INTO
t1
VALUES
(
'DDD'
);
SELECT
*
FROM
t1
;
DROP
TABLE
t1
;
#######################################################################
# #
# Please, DO NOT TOUCH this file as well as the innodb.result file. #
...
...
mysys/mf_tempfile.c
View file @
2b52bc2a
...
...
@@ -22,15 +22,36 @@
#include <paths.h>
#endif
#ifdef HAVE_TEMPNAM
#if !defined(MSDOS) && !defined(OS2) && !defined(__NETWARE__)
extern
char
**
environ
;
#endif
#endif
/*
Create a temporary file in a given directory
This function should be used instead of my_tempnam() !
@brief
Create a temporary file with unique name in a given directory
@details
create_temp_file
to pointer to buffer where temporary filename will be stored
dir directory where to create the file
prefix prefix the filename with this
mode Flags to use for my_create/my_open
MyFlags Magic flags
@return
File descriptor of opened file if success
-1 and sets errno if fails.
@note
The behaviour of this function differs a lot between
implementation, it's main use is to generate a file with
a name that does not already exist.
When passing O_TEMPORARY flag in "mode" the file should
be automatically deleted
The implementation using mkstemp should be considered the
reference implementation when adding a new or modifying an
existing one
*/
File
create_temp_file
(
char
*
to
,
const
char
*
dir
,
const
char
*
prefix
,
...
...
@@ -38,41 +59,33 @@ File create_temp_file(char *to, const char *dir, const char *prefix,
myf
MyFlags
__attribute__
((
unused
)))
{
File
file
=
-
1
;
DBUG_ENTER
(
"create_temp_file"
);
#if defined(_MSC_VER)
{
char
temp
[
FN_REFLEN
],
*
end
,
*
res
,
**
old_env
,
*
temp_env
[
1
];
old_env
=
environ
;
if
(
dir
)
{
end
=
strend
(
dir
)
-
1
;
if
(
!
dir
[
0
])
{
/* Change empty string to current dir */
to
[
0
]
=
FN_CURLIB
;
to
[
1
]
=
0
;
dir
=
to
;
}
else
if
(
*
end
==
FN_DEVCHAR
)
{
/* Get current dir for drive */
_fullpath
(
temp
,
dir
,
FN_REFLEN
);
dir
=
to
;
}
else
if
(
*
end
==
FN_LIBCHAR
&&
dir
<
end
&&
end
[
-
1
]
!=
FN_DEVCHAR
)
{
strmake
(
to
,
dir
,(
uint
)
(
end
-
dir
));
/* Copy and remove last '\' */
dir
=
to
;
}
environ
=
temp_env
;
/* Force use of dir (dir not checked) */
temp_env
[
0
]
=
0
;
}
if
((
res
=
tempnam
((
char
*
)
dir
,(
char
*
)
prefix
)))
DBUG_PRINT
(
"enter"
,
(
"dir: %s, prefix: %s"
,
dir
,
prefix
));
#if defined (__WIN__)
/*
Use GetTempFileName to generate a unique filename, create
the file and release it's handle
- uses up to the first three letters from prefix
*/
if
(
GetTempFileName
(
dir
,
prefix
,
0
,
to
)
==
0
)
DBUG_RETURN
(
-
1
);
DBUG_PRINT
(
"info"
,
(
"name: %s"
,
to
));
/*
Open the file without the "open only if file doesn't already exist"
since the file has already been created by GetTempFileName
*/
if
((
file
=
my_open
(
to
,
(
mode
&
~
O_EXCL
),
MyFlags
))
<
0
)
{
strmake
(
to
,
res
,
FN_REFLEN
-
1
);
(
*
free
)(
res
);
file
=
my_create
(
to
,
0
,
mode
|
O_EXCL
|
O_NOFOLLOW
,
MyFlags
);
}
environ
=
old_env
;
/* Open failed, remove the file created by GetTempFileName */
int
tmp
=
my_errno
;
(
void
)
my_delete
(
to
,
MYF
(
0
));
my_errno
=
tmp
;
}
#elif defined(_ZTC__)
if
(
!
dir
)
dir
=
getenv
(
"TMPDIR"
);
...
...
@@ -101,6 +114,8 @@ File create_temp_file(char *to, const char *dir, const char *prefix,
}
strmov
(
convert_dirname
(
to
,
dir
,
NullS
),
prefix_buff
);
org_file
=
mkstemp
(
to
);
if
(
mode
&
O_TEMPORARY
)
(
void
)
my_delete
(
to
,
MYF
(
MY_WME
|
ME_NOINPUT
));
file
=
my_register_filename
(
org_file
,
to
,
FILE_BY_MKSTEMP
,
EE_CANTCREATEFILE
,
MyFlags
);
/* If we didn't manage to register the name, remove the temp file */
...
...
@@ -113,6 +128,10 @@ File create_temp_file(char *to, const char *dir, const char *prefix,
}
#elif defined(HAVE_TEMPNAM)
{
#if !defined(__NETWARE__)
extern
char
**
environ
;
#endif
char
*
res
,
**
old_env
,
*
temp_env
[
1
];
if
(
dir
&&
!
dir
[
0
])
{
/* Change empty string to current dir */
...
...
@@ -120,16 +139,7 @@ File create_temp_file(char *to, const char *dir, const char *prefix,
to
[
1
]
=
0
;
dir
=
to
;
}
#ifdef OS2
/* changing environ variable doesn't work with VACPP */
char
buffer
[
256
],
*
end
;
buffer
[
sizeof
(
buffer
)
-
1
]
=
0
;
end
=
strxnmov
(
buffer
,
sizeof
(
buffer
)
-
1
,
(
char
*
)
"TMP="
,
dir
,
NullS
);
/* remove ending backslash */
if
(
end
[
-
1
]
==
'\\'
)
end
[
-
1
]
=
0
;
putenv
(
buffer
);
#elif !defined(__NETWARE__)
#if !defined(__NETWARE__)
old_env
=
(
char
**
)
environ
;
if
(
dir
)
{
/* Don't use TMPDIR if dir is given */
...
...
@@ -151,45 +161,12 @@ File create_temp_file(char *to, const char *dir, const char *prefix,
{
DBUG_PRINT
(
"error"
,(
"Got error: %d from tempnam"
,
errno
));
}
#if !defined(
OS2) && !defined(
__NETWARE__)
#if !defined(__NETWARE__)
environ
=
(
const
char
**
)
old_env
;
#endif
}
#else
{
register
long
uniq
;
register
int
length
;
my_string
pos
,
end_pos
;
/* Make an unique number */
pthread_mutex_lock
(
&
THR_LOCK_open
);
uniq
=
((
long
)
getpid
()
<<
20
)
+
(
long
)
_my_tempnam_used
++
;
pthread_mutex_unlock
(
&
THR_LOCK_open
);
if
(
!
dir
&&
!
(
dir
=
getenv
(
"TMPDIR"
)))
/* Use this if possibly */
dir
=
P_tmpdir
;
/* Use system default */
length
=
strlen
(
dir
)
+
strlen
(
pfx
)
+
1
;
DBUG_PRINT
(
"test"
,(
"mallocing %d byte"
,
length
+
8
+
sizeof
(
TMP_EXT
)
+
1
));
if
(
length
+
8
+
sizeof
(
TMP_EXT
)
+
1
>
FN_REFLENGTH
)
errno
=
my_errno
=
ENAMETOOLONG
;
else
{
end_pos
=
strmov
(
to
,
dir
);
if
(
end_pos
!=
to
&&
end_pos
[
-
1
]
!=
FN_LIBCHAR
)
*
end_pos
++=
FN_LIBCHAR
;
end_pos
=
strmov
(
end_pos
,
pfx
);
for
(
length
=
0
;
length
<
8
&&
uniq
;
length
++
)
{
*
end_pos
++=
_dig_vec_upper
[(
int
)
(
uniq
&
31
)];
uniq
>>=
5
;
}
(
void
)
strmov
(
end_pos
,
TMP_EXT
);
file
=
my_create
(
to
,
0
,
(
int
)
(
O_RDWR
|
O_BINARY
|
O_TRUNC
|
O_EXCL
|
O_NOFOLLOW
|
O_TEMPORARY
|
O_SHORT_LIVED
),
MYF
(
MY_WME
));
}
}
#error No implementation found for create_temp_file
#endif
if
(
file
>=
0
)
thread_safe_increment
(
my_tmp_file_created
,
&
THR_LOCK_open
);
...
...
mysys/my_static.c
View file @
2b52bc2a
...
...
@@ -67,11 +67,6 @@ uint my_once_extra=ONCE_ALLOC_INIT; /* Memory to alloc / block */
#ifdef HAVE_LARGE_PAGES
my_bool
my_use_large_pages
=
0
;
uint
my_large_page_size
=
0
;
#endif
/* from my_tempnam */
#if !defined(HAVE_TEMPNAM) || defined(HPUX11)
int
_my_tempnam_used
=
0
;
#endif
/* from safe_malloc */
...
...
mysys/my_static.h
View file @
2b52bc2a
...
...
@@ -60,10 +60,6 @@ extern const char *soundex_map;
extern
USED_MEM
*
my_once_root_block
;
extern
uint
my_once_extra
;
#if !defined(HAVE_TEMPNAM) || defined(HPUX11)
extern
int
_my_tempnam_used
;
#endif
extern
byte
*
sf_min_adress
,
*
sf_max_adress
;
extern
uint
sf_malloc_count
;
extern
struct
st_irem
*
sf_malloc_root
;
...
...
sql/ha_innodb.cc
View file @
2b52bc2a
...
...
@@ -6066,6 +6066,15 @@ ha_innobase::external_lock(
trx
->
isolation_level
=
innobase_map_isolation_level
(
(
enum_tx_isolation
)
thd
->
variables
.
tx_isolation
);
if
(
trx
->
isolation_level
<=
TRX_ISO_READ_COMMITTED
&&
trx
->
global_read_view
)
{
/* At low transaction isolation levels we let
each consistent read set its own snapshot */
read_view_close_for_mysql
(
trx
);
}
}
if
(
trx
->
isolation_level
==
TRX_ISO_SERIALIZABLE
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment