diff options
Diffstat (limited to 'mysys')
-rw-r--r-- | mysys/hash.c | 2 | ||||
-rw-r--r-- | mysys/mf_dirname.c | 5 | ||||
-rw-r--r-- | mysys/mf_pack.c | 27 | ||||
-rw-r--r-- | mysys/mf_tempdir.c | 26 | ||||
-rw-r--r-- | mysys/my_alloc.c | 1 |
5 files changed, 43 insertions, 18 deletions
diff --git a/mysys/hash.c b/mysys/hash.c index 45cf7d5ff1d..d9084ed4fd3 100644 --- a/mysys/hash.c +++ b/mysys/hash.c @@ -109,7 +109,7 @@ static inline void hash_free_elements(HASH *hash) void hash_free(HASH *hash) { DBUG_ENTER("hash_free"); - DBUG_PRINT("enter",("hash: 0x%lxd",hash)); + DBUG_PRINT("enter",("hash: 0x%lx", hash)); hash_free_elements(hash); hash->free= 0; diff --git a/mysys/mf_dirname.c b/mysys/mf_dirname.c index 45bf4d56c31..98da72a206c 100644 --- a/mysys/mf_dirname.c +++ b/mysys/mf_dirname.c @@ -73,7 +73,7 @@ uint dirname_part(my_string to, const char *name) SYNPOSIS convert_dirname() to Store result here - from Original filename + from Original filename. May be == to from_end Pointer at end of filename (normally end \0) IMPLEMENTATION @@ -101,6 +101,7 @@ char *convert_dirname(char *to, const char *from, const char *from_end) #ifdef BACKSLASH_MBTAIL CHARSET_INFO *fs= fs_character_set(); #endif + DBUG_ENTER("convert_dirname"); /* We use -2 here, becasue we need place for the last FN_LIBCHAR */ if (!from_end || (from_end - from) > FN_REFLEN-2) @@ -149,5 +150,5 @@ char *convert_dirname(char *to, const char *from, const char *from_end) *to++=FN_LIBCHAR; *to=0; } - return to; /* Pointer to end of dir */ + DBUG_RETURN(to); /* Pointer to end of dir */ } /* convert_dirname */ diff --git a/mysys/mf_pack.c b/mysys/mf_pack.c index 049aa59a578..9dd2a6a8276 100644 --- a/mysys/mf_pack.c +++ b/mysys/mf_pack.c @@ -107,16 +107,27 @@ void pack_dirname(my_string to, const char *from) } /* pack_dirname */ - /* remove unwanted chars from dirname */ - /* if "/../" removes prev dir; "/~/" removes all before ~ */ - /* "//" is same as "/", except on Win32 at start of a file */ - /* "/./" is removed */ - /* Unpacks home_dir if "~/.." used */ - /* Unpacks current dir if if "./.." used */ +/* + remove unwanted chars from dirname -uint cleanup_dirname(register my_string to, const char *from) - /* to may be == from */ + SYNOPSIS + cleanup_dirname() + to Store result here + from Dirname to fix. May be same as to + + IMPLEMENTATION + "/../" removes prev dir + "/~/" removes all before ~ + //" is same as "/", except on Win32 at start of a file + "/./" is removed + Unpacks home_dir if "~/.." used + Unpacks current dir if if "./.." used + RETURN + # length of new name +*/ + +uint cleanup_dirname(register my_string to, const char *from) { reg5 uint length; reg2 my_string pos; diff --git a/mysys/mf_tempdir.c b/mysys/mf_tempdir.c index 4d244aa7d74..f7c6fbb29a6 100644 --- a/mysys/mf_tempdir.c +++ b/mysys/mf_tempdir.c @@ -28,9 +28,12 @@ my_bool init_tmpdir(MY_TMPDIR *tmpdir, const char *pathlist) char *end, *copy; char buff[FN_REFLEN]; DYNAMIC_ARRAY t_arr; + DBUG_ENTER("init_tmpdir"); + DBUG_PRINT("enter", ("pathlist: %s", pathlist ? pathlist : "NULL")); + pthread_mutex_init(&tmpdir->mutex, MY_MUTEX_INIT_FAST); if (my_init_dynamic_array(&t_arr, sizeof(char*), 1, 5)) - return TRUE; + goto err; if (!pathlist || !pathlist[0]) { /* Get default temporary directory */ @@ -46,12 +49,13 @@ my_bool init_tmpdir(MY_TMPDIR *tmpdir, const char *pathlist) } do { + uint length; end=strcend(pathlist, DELIM); - convert_dirname(buff, pathlist, end); - if (!(copy=my_strdup(buff, MYF(MY_WME)))) - return TRUE; - if (insert_dynamic(&t_arr, (gptr)©)) - return TRUE; + strmake(buff, pathlist, (uint) (end-pathlist)); + length= cleanup_dirname(buff, buff); + if (!(copy= my_strdup_with_length(buff, length, MYF(MY_WME))) || + insert_dynamic(&t_arr, (gptr) ©)) + DBUG_RETURN(TRUE) pathlist=end+1; } while (*end); @@ -59,12 +63,20 @@ my_bool init_tmpdir(MY_TMPDIR *tmpdir, const char *pathlist) tmpdir->list=(char **)t_arr.buffer; tmpdir->max=t_arr.elements-1; tmpdir->cur=0; - return FALSE; + DBUG_RETURN(FALSE); + +err: + delete_dynamic(&t_arr); /* Safe to free */ + pthread_mutex_destroy(&tmpdir->mutex); + DBUG_RETURN(TRUE); } + char *my_tmpdir(MY_TMPDIR *tmpdir) { char *dir; + if (!tmpdir->max) + return tmpdir->list[0]; pthread_mutex_lock(&tmpdir->mutex); dir=tmpdir->list[tmpdir->cur]; tmpdir->cur= (tmpdir->cur == tmpdir->max) ? 0 : tmpdir->cur+1; diff --git a/mysys/my_alloc.c b/mysys/my_alloc.c index d5346d530c3..9f3676618eb 100644 --- a/mysys/my_alloc.c +++ b/mysys/my_alloc.c @@ -396,6 +396,7 @@ char *strdup_root(MEM_ROOT *root,const char *str) return strmake_root(root, str, (uint) strlen(str)); } + char *strmake_root(MEM_ROOT *root,const char *str, uint len) { char *pos; |