summaryrefslogtreecommitdiff
path: root/mysys
diff options
context:
space:
mode:
authorAlexander Barkov <bar@mariadb.org>2015-12-29 19:37:11 +0400
committerAlexander Barkov <bar@mariadb.org>2015-12-29 19:37:11 +0400
commit2ba7ed77aab05004f0c853a77850e325b78a1892 (patch)
tree943659d76215e16d0d1946c28683c562debeff34 /mysys
parent63f0669fd6dc430b60ffd5de0bff9854622a1c1a (diff)
parent1bb66ea88c4679d6bd3ad1472d75983e66f679ae (diff)
downloadmariadb-git-2ba7ed77aab05004f0c853a77850e325b78a1892.tar.gz
Merge remote-tracking branch 'origin/10.1' into 10.2
Diffstat (limited to 'mysys')
-rw-r--r--mysys/ma_dyncol.c11
-rw-r--r--mysys/mf_iocache.c6
-rw-r--r--mysys/my_getopt.c2
-rw-r--r--mysys/my_rdtsc.c9
-rw-r--r--mysys/my_static.c1
-rw-r--r--mysys/string.c3
6 files changed, 22 insertions, 10 deletions
diff --git a/mysys/ma_dyncol.c b/mysys/ma_dyncol.c
index e6e04efe121..ffe818e12b9 100644
--- a/mysys/ma_dyncol.c
+++ b/mysys/ma_dyncol.c
@@ -3724,7 +3724,8 @@ mariadb_dyncol_check(DYNAMIC_COLUMN *str)
/* It is not first entry */
if (prev_data_offset > data_offset ||
((prev_type != DYN_COL_INT &&
- prev_type != DYN_COL_UINT) && prev_data_offset == data_offset))
+ prev_type != DYN_COL_UINT &&
+ prev_type != DYN_COL_DECIMAL) && prev_data_offset == data_offset))
{
DBUG_PRINT("info", ("Field order: %u Previous data offset: %u"
" >(=) Current data offset: %u",
@@ -3836,14 +3837,12 @@ mariadb_dyncol_val_str(DYNAMIC_STRING *str, DYNAMIC_COLUMN_VALUE *val,
return ER_DYNCOL_RESOURCE;
break;
case DYN_COL_DOUBLE:
- len= my_snprintf(buff, sizeof(buff), "%g", val->x.double_value);
+
+ len= my_gcvt(val->x.double_value, MY_GCVT_ARG_DOUBLE,
+ sizeof(buff) - 1, buff, NULL);
if (dynstr_realloc(str, len + (quote ? 2 : 0)))
return ER_DYNCOL_RESOURCE;
- if (quote)
- str->str[str->length++]= quote;
dynstr_append_mem(str, buff, len);
- if (quote)
- str->str[str->length++]= quote;
break;
case DYN_COL_DYNCOL:
case DYN_COL_STRING:
diff --git a/mysys/mf_iocache.c b/mysys/mf_iocache.c
index 28e5e72130d..db8d0b51ada 100644
--- a/mysys/mf_iocache.c
+++ b/mysys/mf_iocache.c
@@ -663,7 +663,11 @@ int _my_b_cache_read(IO_CACHE *info, uchar *Buffer, size_t Count)
info->error= (int) left_length;
DBUG_RETURN(1);
}
- length=0; /* Didn't read any chars */
+ else
+ {
+ info->error= 0;
+ DBUG_RETURN(0); /* EOF */
+ }
}
else if ((length= mysql_file_read(info->file,info->buffer, max_length,
info->myflags)) < Count ||
diff --git a/mysys/my_getopt.c b/mysys/my_getopt.c
index 02a8b20a72f..3f75f6553a2 100644
--- a/mysys/my_getopt.c
+++ b/mysys/my_getopt.c
@@ -1,6 +1,6 @@
/*
Copyright (c) 2002, 2013, Oracle and/or its affiliates
- Copyright (c) 2009, 2013, Monty Program Ab
+ Copyright (c) 2009, 2015, MariaDB
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
diff --git a/mysys/my_rdtsc.c b/mysys/my_rdtsc.c
index 82e560944f9..4228973caa8 100644
--- a/mysys/my_rdtsc.c
+++ b/mysys/my_rdtsc.c
@@ -249,6 +249,13 @@ ulonglong my_timer_cycles(void)
clock_gettime(CLOCK_SGI_CYCLE, &tp);
return (ulonglong) tp.tv_sec * 1000000000 + (ulonglong) tp.tv_nsec;
}
+#elif defined(__GNUC__) && defined(__s390__)
+ /* covers both s390 and s390x */
+ {
+ ulonglong result;
+ __asm__ __volatile__ ("stck %0" : "=Q" (result) : : "cc");
+ return result;
+ }
#elif defined(HAVE_SYS_TIMES_H) && defined(HAVE_GETHRTIME)
/* gethrtime may appear as either cycle or nanosecond counter */
return (ulonglong) gethrtime();
@@ -558,6 +565,8 @@ void my_timer_init(MY_TIMER_INFO *mti)
mti->cycles.routine= MY_TIMER_ROUTINE_ASM_GCC_SPARC32;
#elif defined(__sgi) && defined(HAVE_CLOCK_GETTIME) && defined(CLOCK_SGI_CYCLE)
mti->cycles.routine= MY_TIMER_ROUTINE_SGI_CYCLE;
+#elif defined(__GNUC__) && defined(__s390__)
+ mti->cycles.routine= MY_TIMER_ROUTINE_ASM_S390;
#elif defined(HAVE_SYS_TIMES_H) && defined(HAVE_GETHRTIME)
mti->cycles.routine= MY_TIMER_ROUTINE_GETHRTIME;
#else
diff --git a/mysys/my_static.c b/mysys/my_static.c
index 84d2dc64fc6..4aca78e30a9 100644
--- a/mysys/my_static.c
+++ b/mysys/my_static.c
@@ -72,7 +72,6 @@ ulong my_time_to_wait_for_lock=2; /* In seconds */
#ifdef SHARED_LIBRARY
const char *globerrs[GLOBERRS]; /* my_error_messages is here */
#endif
-void (*my_abort_hook)(int) = (void(*)(int)) exit;
void (*error_handler_hook)(uint error, const char *str, myf MyFlags)=
my_message_stderr;
void (*fatal_error_handler_hook)(uint error, const char *str, myf MyFlags)=
diff --git a/mysys/string.c b/mysys/string.c
index 42fe83ed4e1..cc73d18c601 100644
--- a/mysys/string.c
+++ b/mysys/string.c
@@ -208,7 +208,8 @@ my_bool dynstr_append_quoted(DYNAMIC_STRING *str,
void dynstr_free(DYNAMIC_STRING *str)
{
- my_free(str->str);
+ if (str->str) /* Safety to allow double free */
+ my_free(str->str);
str->str= NULL;
}