summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authorunknown <monty@hundin.mysql.fi>2002-05-14 19:06:23 +0300
committerunknown <monty@hundin.mysql.fi>2002-05-14 19:06:23 +0300
commit3051d8bbc15ef775dcb549fd00be596d61131fcf (patch)
tree1d4d86307794b05528013d1e46933432e21bd973 /sql
parentf876e01f9d7c92d3dd61dbaaf708789442cc07e1 (diff)
downloadmariadb-git-3051d8bbc15ef775dcb549fd00be596d61131fcf.tar.gz
Corrected fix for DROP DATABASE on symbolic link
Diffstat (limited to 'sql')
-rw-r--r--sql/sql_db.cc27
1 files changed, 14 insertions, 13 deletions
diff --git a/sql/sql_db.cc b/sql/sql_db.cc
index 372dff85007..451a48042b5 100644
--- a/sql/sql_db.cc
+++ b/sql/sql_db.cc
@@ -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);
}
- path=filePath;
+ /* 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 */