1
#! /bin/sh /usr/share/dpatch/dpatch-run
2
## 91_bug29389.dpatch by Jamie Strandboge <jamie@ubuntu.com>
4
## All lines beginning with `## DP:' are a description of the patch.
5
## DP: fix for bug29389
9
diff -Nru mysql-dfsg-5.0-5.0.45.orig/libmysql/libmysql.c mysql-dfsg-5.0-5.0.45/libmysql/libmysql.c
10
--- mysql-dfsg-5.0-5.0.45.orig/libmysql/libmysql.c 2007-07-04 13:05:53.000000000 +0000
11
+++ mysql-dfsg-5.0-5.0.45/libmysql/libmysql.c 2007-10-02 19:28:49.000000000 +0000
12
@@ -3678,33 +3678,38 @@
13
case MYSQL_TYPE_FLOAT:
16
- We need to store data in the buffer before the truncation check to
17
+ We need to mark the local variable volatile to
18
workaround Intel FPU executive precision feature.
19
(See http://gcc.gnu.org/bugzilla/show_bug.cgi?id=323 for details)
20
- AFAIU it does not guarantee to work.
23
+ volatile float data;
26
data= (float) ulonglong2double(value);
27
+ *param->error= ((ulonglong) value) != ((ulonglong) data);
30
- data= (float) value;
33
+ *param->error= value != ((longlong) data);
35
floatstore(buffer, data);
36
- *param->error= is_unsigned ?
37
- ((ulonglong) value) != ((ulonglong) (*(float*) buffer)) :
38
- ((longlong) value) != ((longlong) (*(float*) buffer));
41
case MYSQL_TYPE_DOUBLE:
44
+ volatile double data;
47
data= ulonglong2double(value);
48
+ *param->error= ((ulonglong) value) != ((ulonglong) data);
53
+ *param->error= value != ((longlong) data);
55
doublestore(buffer, data);
56
- *param->error= is_unsigned ?
57
- ((ulonglong) value) != ((ulonglong) (*(double*) buffer)) :
58
- ((longlong) value) != ((longlong) (*(double*) buffer));