summaryrefslogtreecommitdiff
path: root/mysys
diff options
context:
space:
mode:
Diffstat (limited to 'mysys')
-rw-r--r--mysys/array.c43
-rw-r--r--mysys/errors.c2
-rw-r--r--mysys/mf_radix.c2
-rw-r--r--mysys/mf_sort.c2
-rw-r--r--mysys/my_getopt.c2
-rw-r--r--mysys/my_init.c26
-rw-r--r--mysys/my_symlink.c8
7 files changed, 76 insertions, 9 deletions
diff --git a/mysys/array.c b/mysys/array.c
index 6e871ee6343..02a54d44656 100644
--- a/mysys/array.c
+++ b/mysys/array.c
@@ -92,7 +92,7 @@ my_bool init_dynamic_array2(PSI_memory_key psi_key, DYNAMIC_ARRAY *array,
my_bool insert_dynamic(DYNAMIC_ARRAY *array, const void * element)
{
void *buffer;
- if (array->elements == array->max_element)
+ if (unlikely(array->elements == array->max_element))
{ /* Call only when necessary */
if (!(buffer=alloc_dynamic(array)))
return TRUE;
@@ -102,7 +102,42 @@ my_bool insert_dynamic(DYNAMIC_ARRAY *array, const void * element)
buffer=array->buffer+(array->elements * array->size_of_element);
array->elements++;
}
- memcpy(buffer,element,(size_t) array->size_of_element);
+ memcpy(buffer, element, array->size_of_element);
+ return FALSE;
+}
+
+
+/* Fast version of appending to dynamic array */
+
+void init_append_dynamic(DYNAMIC_ARRAY_APPEND *append,
+ DYNAMIC_ARRAY *array)
+{
+ append->array= array;
+ append->pos= array->buffer + array->elements * array->size_of_element;
+ append->end= array->buffer + array->max_element * array->size_of_element;
+}
+
+
+my_bool append_dynamic(DYNAMIC_ARRAY_APPEND *append,
+ const void *element)
+{
+ DYNAMIC_ARRAY *array= append->array;
+ size_t size_of_element= array->size_of_element;
+ if (unlikely(append->pos == append->end))
+ {
+ void *buffer;
+ if (!(buffer=alloc_dynamic(array)))
+ return TRUE;
+ append->pos= (uchar*)buffer + size_of_element;
+ append->end= array->buffer + array->max_element * size_of_element;
+ memcpy(buffer, element, size_of_element);
+ }
+ else
+ {
+ array->elements++;
+ memcpy(append->pos, element, size_of_element);
+ append->pos+= size_of_element;
+ }
return FALSE;
}
@@ -281,7 +316,7 @@ my_bool allocate_dynamic(DYNAMIC_ARRAY *array, size_t max_elements)
void get_dynamic(DYNAMIC_ARRAY *array, void *element, size_t idx)
{
- if (idx >= array->elements)
+ if (unlikely(idx >= array->elements))
{
DBUG_PRINT("warning",("To big array idx: %d, array size is %d",
idx,array->elements));
@@ -306,7 +341,7 @@ void delete_dynamic(DYNAMIC_ARRAY *array)
/*
Just mark as empty if we are using a static buffer
*/
- if (!(array->malloc_flags & MY_INIT_BUFFER_USED) && array->buffer)
+ if (array->buffer && !(array->malloc_flags & MY_INIT_BUFFER_USED))
my_free(array->buffer);
array->buffer= 0;
diff --git a/mysys/errors.c b/mysys/errors.c
index d88540fe277..b522590ae7b 100644
--- a/mysys/errors.c
+++ b/mysys/errors.c
@@ -60,6 +60,7 @@ const char *globerrs[GLOBERRS]=
"Lock Pages in memory access rights required",
"Memcntl %s cmd %s error",
"Warning: Charset id '%d' csname '%s' trying to replace existing csname '%s'",
+ "Deprecated program name. It will be removed in a future release, use '%s' instead"
};
void init_glob_errs(void)
@@ -109,6 +110,7 @@ void init_glob_errs()
EE(EE_PERM_LOCK_MEMORY)= "Lock Pages in memory access rights required";
EE(EE_MEMCNTL) = "Memcntl %s cmd %s error";
EE(EE_DUPLICATE_CHARSET)= "Warning: Charset id %d trying to replace csname %s with %s";
+ EE(EE_NAME_DEPRECATED) = "Notice: %s is deprecated and will be removed in a future release, use command '%s'"
}
#endif
diff --git a/mysys/mf_radix.c b/mysys/mf_radix.c
index 8f044cf9b29..89a3c4ac6ce 100644
--- a/mysys/mf_radix.c
+++ b/mysys/mf_radix.c
@@ -26,7 +26,7 @@
/* Radixsort */
-my_bool radixsort_is_appliccable(uint n_items, size_t size_of_element)
+my_bool radixsort_is_applicable(uint n_items, size_t size_of_element)
{
return size_of_element <= 20 && n_items >= 1000 && n_items < 100000;
}
diff --git a/mysys/mf_sort.c b/mysys/mf_sort.c
index 24e875b813e..79bdfdd23aa 100644
--- a/mysys/mf_sort.c
+++ b/mysys/mf_sort.c
@@ -23,7 +23,7 @@ void my_string_ptr_sort(uchar *base, uint items, size_t size)
#if INT_MAX > 65536L
uchar **ptr=0;
- if (radixsort_is_appliccable(items, size) &&
+ if (radixsort_is_applicable(items, size) &&
(ptr= (uchar**) my_malloc(PSI_NOT_INSTRUMENTED,
items * sizeof(char*),MYF(0))))
{
diff --git a/mysys/my_getopt.c b/mysys/my_getopt.c
index 9f13ca7a424..d1b2c599372 100644
--- a/mysys/my_getopt.c
+++ b/mysys/my_getopt.c
@@ -897,7 +897,9 @@ static int setval(const struct my_option *opts, void *value, char *argument,
goto ret;
};
}
+
validate_value(opts->name, argument, option_file);
+
DBUG_RETURN(0);
ret:
diff --git a/mysys/my_init.c b/mysys/my_init.c
index 44488e5848a..138b4697f97 100644
--- a/mysys/my_init.c
+++ b/mysys/my_init.c
@@ -43,6 +43,13 @@ static void setup_codepages();
#define _SC_PAGESIZE _SC_PAGE_SIZE
#endif
+#if defined(__linux__)
+#define EXE_LINKPATH "/proc/self/exe"
+#elif defined(__FreeBSD__)
+/* unfortunately, not mounted by default */
+#define EXE_LINKPATH "/proc/curproc/file"
+#endif
+
extern pthread_key(struct st_my_thread_var*, THR_KEY_mysys);
#define SCALE_SEC 100
@@ -170,7 +177,26 @@ my_bool my_init(void)
my_progname_short= "unknown";
if (my_progname)
+ {
+ char link_name[FN_REFLEN];
my_progname_short= my_progname + dirname_length(my_progname);
+ /*
+ if my_progname_short doesn't start from "mariadb", but it's
+ a symlink to an actual executable, that does - warn the user.
+ First try to find the actual name via /proc, but if it's unmounted
+ (which it usually is on FreeBSD) resort to my_progname
+ */
+ if (strncmp(my_progname_short, "mariadb", 7))
+ {
+ int res= 1;
+#ifdef EXE_LINKPATH
+ res= my_readlink(link_name, EXE_LINKPATH, MYF(0));
+#endif
+ if ((res == 0 || my_readlink(link_name, my_progname, MYF(0)) == 0) &&
+ strncmp(link_name + dirname_length(link_name), "mariadb", 7) == 0)
+ my_error(EE_NAME_DEPRECATED, MYF(MY_WME), link_name);
+ }
+ }
/* Initialize our mutex handling */
my_mutex_init();
diff --git a/mysys/my_symlink.c b/mysys/my_symlink.c
index 8238e501e7f..e7833992f0d 100644
--- a/mysys/my_symlink.c
+++ b/mysys/my_symlink.c
@@ -45,7 +45,7 @@ int (*mysys_test_invalid_symlink)(const char *filename)= always_valid;
int my_readlink(char *to, const char *filename, myf MyFlags)
{
#ifndef HAVE_READLINK
- strmov(to,filename);
+ strnmov(to, filename, FN_REFLEN);
return 1;
#else
int result=0;
@@ -54,11 +54,13 @@ int my_readlink(char *to, const char *filename, myf MyFlags)
if ((length=readlink(filename, to, FN_REFLEN-1)) < 0)
{
+ if (my_thread_var)
+ my_errno= errno;
/* Don't give an error if this wasn't a symlink */
- if ((my_errno=errno) == EINVAL)
+ if (errno == EINVAL)
{
result= 1;
- strmov(to,filename);
+ strnmov(to, filename, FN_REFLEN);
}
else
{