2672 Timothy Smith 2008-07-18
Cherry-pick fix for Bug #38180, from mysql-5.0.66a-release branch.
modified:
include/my_sys.h
mysys/default.c
mysys/mf_pack.c
2671 Rafal Somla 2008-07-16
Disabling backup_no_be test which triggers valgrind warnings (about using
uninitialized memory)
inside the core server. The issue is reported as a bug and must be resolved by
runtime team.
modified:
mysql-test/t/disabled.def
=== modified file 'include/my_sys.h'
--- a/include/my_sys.h 2008-07-09 07:12:43 +0000
+++ b/include/my_sys.h 2008-07-18 21:46:31 +0000
@@ -722,6 +722,7 @@ extern char * fn_format(char * to,const
const char *form, uint flag);
extern size_t strlength(const char *str);
extern void pack_dirname(char * to,const char *from);
+extern size_t normalize_dirname(char * to, const char *from);
extern size_t unpack_dirname(char * to,const char *from);
extern size_t cleanup_dirname(char * to,const char *from);
extern size_t system_filename(char * to,const char *from);
=== modified file 'mysys/default.c'
--- a/mysys/default.c 2008-07-02 15:54:54 +0000
+++ b/mysys/default.c 2008-07-18 21:46:31 +0000
@@ -974,8 +974,7 @@ static int add_directory(MEM_ROOT *alloc
char *p;
my_bool err __attribute__((unused));
- /* Normalize directory name */
- len= unpack_dirname(buf, dir);
+ len= normalize_dirname(buf, dir);
if (!(p= strmake_root(alloc, buf, len)))
return 1; /* Failure */
/* Should never fail if DEFAULT_DIRS_SIZE is correct size */
=== modified file 'mysys/mf_pack.c'
--- a/mysys/mf_pack.c 2007-12-17 08:16:47 +0000
+++ b/mysys/mf_pack.c 2008-07-18 21:46:31 +0000
@@ -277,44 +277,75 @@ void symdirget(char *dir)
#endif /* USE_SYMDIR */
-/*
- Fixes a directroy name so that can be used by open()
+/**
+ Convert a directory name to a format which can be compared as strings
- SYNOPSIS
- unpack_dirname()
- to result-buffer, FN_REFLEN characters. may be == from
- from 'Packed' directory name (may contain ~)
-
- IMPLEMENTATION
- Make that last char of to is '/' if from not empty and
- from doesn't end in FN_DEVCHAR
- Uses cleanup_dirname and changes ~/.. to home_dir/..
+ @param to result buffer, FN_REFLEN chars in length; may be == from
+ @param from 'packed' directory name, in whatever format
+ @returns size of the normalized name
+
+ @details
+ - Ensures that last char is FN_LIBCHAR, unless it is FN_DEVCHAR
+ - Uses cleanup_dirname
+
+ It does *not* expand ~/ (although, see cleanup_dirname). Nor does it do
+ any case folding. All case-insensitive normalization should be done by
+ the caller.
+*/
- Changes a UNIX filename to system filename (replaces / with \ on windows)
+size_t normalize_dirname(char *to, const char *from)
+{
+ size_t length;
+ char buff[FN_REFLEN];
+ DBUG_ENTER("normalize_dirname");
- RETURN
+ /*
+ Despite the name, this actually converts the name to the system's
+ format (TODO: rip out the non-working VMS stuff and name this
+ properly).
+ */
+ (void) intern_filename(buff, from);
+ length= strlen(buff); /* Fix that '/' is last */
+ if (length &&
+#ifdef FN_DEVCHAR
+ buff[length - 1] != FN_DEVCHAR &&
+#endif
+ buff[length - 1] != FN_LIBCHAR && buff[length - 1] != '/')
+ {
+ buff[length]= FN_LIBCHAR;
+ buff[length + 1]= '\0';
+ }
+
+ length=cleanup_dirname(to, buff);
+
+ DBUG_RETURN(length);
+}
+
+
+/**
+ Fixes a directory name so that can be used by open()
+
+ @param to Result buffer, FN_REFLEN characters. May be == from
+ @param from 'Packed' directory name (may contain ~)
+
+ @details
+ - Uses normalize_dirname()
+ - Expands ~/... to home_dir/...
+ - Resolves MySQL's fake "foo.sym" symbolic directory names (if USE_SYMDIR)
+ - Changes a UNIX filename to system filename (replaces / with \ on windows)
+
+ @returns
Length of new directory name (= length of to)
*/
-size_t unpack_dirname(char * to, const char *from)
+size_t unpack_dirname(char *to, const char *from)
{
size_t length, h_length;
char buff[FN_REFLEN+1+4],*suffix,*tilde_expansion;
DBUG_ENTER("unpack_dirname");
- (void) intern_filename(buff,from); /* Change to intern name */
- length= strlen(buff); /* Fix that '/' is last */
- if (length &&
-#ifdef FN_DEVCHAR
- buff[length-1] != FN_DEVCHAR &&
-#endif
- buff[length-1] != FN_LIBCHAR && buff[length-1] != '/')
- {
- buff[length]=FN_LIBCHAR;
- buff[length+1]= '\0';
- }
+ length= normalize_dirname(buff, from);
- length=cleanup_dirname(buff,buff);
if (buff[0] == FN_HOMELIB)
{
suffix=buff+1; tilde_expansion=expand_tilde(&suffix);
| Thread |
|---|
| • bzr push into mysql-6.0-backup branch (timothy.smith:2671 to 2672) Bug#38180 | Timothy Smith | 19 Jul |