Commit e6f3e65a authored by Timothy Smith's avatar Timothy Smith
Browse files

Merge in changes from 5.0.66a (via mysql-5.0)

parents 7077d5aa 6eacf838
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -693,6 +693,7 @@ extern char * fn_format(char * to,const char *name,const char *dir,
			   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);
+2 −3
Original line number Diff line number Diff line
@@ -974,8 +974,7 @@ static int add_directory(MEM_ROOT *alloc, const char *dir, const char **dirs)
  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 */
@@ -1026,7 +1025,7 @@ static const char *my_get_module_parent(char *buf, size_t size)
{
  char *last= NULL;
  char *end;
  if (!GetModuleFileName(NULL, buf, size))
  if (!GetModuleFileName(NULL, buf, (DWORD) size))
    return NULL;
  end= strend(buf);

+55 −24
Original line number Diff line number Diff line
@@ -277,32 +277,34 @@ void symdirget(char *dir)
#endif /* USE_SYMDIR */


/*
  Fixes a directroy name so that can be used by open()

  SYNOPSIS
    unpack_dirname()
    to			result-buffer, FN_REFLEN characters. may be == from
    from		'Packed' directory name (may contain ~)
/**
  Convert a directory name to a format which can be compared as strings

 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

  Changes a UNIX filename to system filename (replaces / with \ on windows)
  @details
  - Ensures that last char is FN_LIBCHAR, unless it is FN_DEVCHAR
  - Uses cleanup_dirname

  RETURN
   Length of new directory name (= length of to)
  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.
*/

size_t unpack_dirname(char * to, const char *from)
size_t normalize_dirname(char *to, const char *from)
{
  size_t length, h_length;
  char buff[FN_REFLEN+1+4],*suffix,*tilde_expansion;
  DBUG_ENTER("unpack_dirname");
  size_t length;
  char buff[FN_REFLEN];
  DBUG_ENTER("normalize_dirname");

  (void) intern_filename(buff,from);	    /* Change to intern name */
  /*
    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
@@ -314,7 +316,36 @@ size_t unpack_dirname(char * to, const char *from)
    buff[length + 1]= '\0';
  }

  length=cleanup_dirname(buff,buff);
  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 length, h_length;
  char buff[FN_REFLEN+1+4],*suffix,*tilde_expansion;
  DBUG_ENTER("unpack_dirname");

  length= normalize_dirname(buff, from);

  if (buff[0] == FN_HOMELIB)
  {
    suffix=buff+1; tilde_expansion=expand_tilde(&suffix);