diff options
Diffstat (limited to 'mysys')
-rw-r--r-- | mysys/array.c | 43 | ||||
-rw-r--r-- | mysys/errors.c | 2 | ||||
-rw-r--r-- | mysys/mf_radix.c | 2 | ||||
-rw-r--r-- | mysys/mf_sort.c | 2 | ||||
-rw-r--r-- | mysys/my_getopt.c | 2 | ||||
-rw-r--r-- | mysys/my_init.c | 26 | ||||
-rw-r--r-- | mysys/my_symlink.c | 8 |
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 { |