Commit 4a634059 authored by monty@hundin.mysql.fi's avatar monty@hundin.mysql.fi
Browse files

Corrected fix for DROP DATABASE on symbolic link

parent 24b2d57f
Loading
Loading
Loading
Loading
+14 −13
Original line number Diff line number Diff line
@@ -271,20 +271,20 @@ static long mysql_rm_known_files(THD *thd, MY_DIR *dirp, const char *org_path,
  */
  if (!found_other_files)
  {
    char tmp_path[FN_REFLEN], lnk_path[FN_REFLEN];
    char tmp_path[FN_REFLEN], *pos;
    char *path=unpack_filename(tmp_path,org_path);
#ifdef HAVE_READLINK
    if (path[0] == FN_CURLIB)
    {
      int length = (strxmov(lnk_path,curr_dir,path + 2, NullS) - lnk_path) - 1;
      path=lnk_path;
      if (path[length] == FN_LIBCHAR)
	path[length]='\0';
    }
    int linkcount = readlink(path,filePath,sizeof(filePath)-1);
    if (linkcount > 0)			// If the path was a symbolic link
    int error;

    /* Remove end FN_LIBCHAR as this causes problem on Linux in readlink */
    pos=strend(path);
    if (pos > path && pos[-1] == FN_LIBCHAR)
      *--pos=0;

    if ((error=my_readlink(filePath, path, MYF(MY_WME))) < 0)
      DBUG_RETURN(-1);
    if (!error)
    {
      *(filePath + linkcount) = '\0';
      if (my_delete(path,MYF(!level ? MY_WME : 0)))
      {
	/* Don't give errors if we can't delete 'RAID' directory */
@@ -293,11 +293,12 @@ static long mysql_rm_known_files(THD *thd, MY_DIR *dirp, const char *org_path,
	send_error(&thd->net);
	DBUG_RETURN(-1);
      }
      /* Delete directory symbolic link pointed at */
      path= filePath;
    }
#endif
    /* Remove last FN_LIBCHAR to not cause a probelm on OS/2 */
    char *pos=strend(path);
    pos=strend(path);
    if (pos > path && pos[-1] == FN_LIBCHAR)
      *--pos=0;
    /* Don't give errors if we can't delete 'RAID' directory */