summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <hf@deer.(none)>2004-09-07 11:55:34 +0500
committerunknown <hf@deer.(none)>2004-09-07 11:55:34 +0500
commit89ee639541a36aef7be25855b5bdc24b890108f8 (patch)
treee7c329902080841ee5657b450f9c954f44bb920a
parent3c3db07321d1a75a241e1d6689dc56d9415519a5 (diff)
downloadmariadb-git-89ee639541a36aef7be25855b5bdc24b890108f8.tar.gz
A set of mysql_home_path-related fixes
mysys/mf_format.c: I think here i fixed a bug sql/item_strfunc.cc: mysql_real_data_home added sql/sql_class.cc: it's more closer to what manual says sql/sql_load.cc: code rewritten to be similar sql/sql_table.cc: mysql_real_data_home added to the path
-rw-r--r--mysys/mf_format.c2
-rw-r--r--sql/item_strfunc.cc15
-rw-r--r--sql/sql_class.cc11
-rw-r--r--sql/sql_load.cc13
-rw-r--r--sql/sql_table.cc4
5 files changed, 31 insertions, 14 deletions
diff --git a/mysys/mf_format.c b/mysys/mf_format.c
index 114e19759c8..d1ca1108d02 100644
--- a/mysys/mf_format.c
+++ b/mysys/mf_format.c
@@ -42,7 +42,7 @@ my_string fn_format(my_string to, const char *name, const char *dir,
/* Use given directory */
convert_dirname(dev,dir,NullS); /* Fix to this OS */
}
- else if ((flag & MY_RELATIVE_PATH) && !test_if_hard_path(name))
+ else if ((flag & MY_RELATIVE_PATH) && !test_if_hard_path(dev))
{
/* Put 'dir' before the given path */
strmake(buff,dev,sizeof(buff)-1);
diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc
index fac73a1a759..5e4db6f392b 100644
--- a/sql/item_strfunc.cc
+++ b/sql/item_strfunc.cc
@@ -2412,14 +2412,23 @@ String *Item_load_file::val_str(String *str)
String *file_name;
File file;
MY_STAT stat_info;
+ char path[FN_REFLEN];
DBUG_ENTER("load_file");
- if (!(file_name= args[0]->val_str(str)) ||
+ if (!(file_name= args[0]->val_str(str))
#ifndef NO_EMBEDDED_ACCESS_CHECKS
- !(current_thd->master_access & FILE_ACL) ||
+ || !(current_thd->master_access & FILE_ACL)
#endif
- !my_stat(file_name->c_ptr(), &stat_info, MYF(MY_WME)))
+ )
goto err;
+
+ (void) fn_format(path, file_name->c_ptr(),
+ mysql_real_data_home, "", MY_RELATIVE_PATH);
+ unpack_filename(path, path); /* Convert to system format */
+
+ if (!my_stat(path, &stat_info, MYF(MY_WME)))
+ goto err;
+
if (!(stat_info.st_mode & S_IROTH))
{
/* my_error(ER_TEXTFILE_NOT_READABLE, MYF(0), file_name->c_ptr()); */
diff --git a/sql/sql_class.cc b/sql/sql_class.cc
index 36b1b89f6bf..69a543d9863 100644
--- a/sql/sql_class.cc
+++ b/sql/sql_class.cc
@@ -891,8 +891,15 @@ static File create_file(THD *thd, char *path, sql_exchange *exchange,
option|= MY_REPLACE_DIR; // Force use of db directory
#endif
- strxnmov(path, FN_REFLEN, mysql_real_data_home, thd->db ? thd->db : "");
- (void) fn_format(path, exchange->file_name, path, "", option);
+ if (!dirname_length(path))
+ {
+ strxnmov(path, FN_REFLEN, mysql_real_data_home, thd->db ? thd->db : "", NullS);
+ (void) fn_format(path, exchange->file_name, path, "", option);
+ }
+ else
+ (void) fn_format(path, exchange->file_name, mysql_real_data_home, "", option);
+
+
if (!access(path, F_OK))
{
my_error(ER_FILE_EXISTS_ERROR, MYF(0), exchange->file_name);
diff --git a/sql/sql_load.cc b/sql/sql_load.cc
index 1f4905837f0..8ffd73e7ea1 100644
--- a/sql/sql_load.cc
+++ b/sql/sql_load.cc
@@ -179,17 +179,16 @@ int mysql_load(THD *thd,sql_exchange *ex,TABLE_LIST *table_list,
#ifdef DONT_ALLOW_FULL_LOAD_DATA_PATHS
ex->file_name+=dirname_length(ex->file_name);
#endif
- if (!dirname_length(ex->file_name) &&
- strlen(ex->file_name)+strlen(mysql_real_data_home)+strlen(tdb)+3 <
- FN_REFLEN)
+ if (!dirname_length(ex->file_name))
{
- (void) sprintf(name,"%s/%s/%s",mysql_data_home,tdb,ex->file_name);
- unpack_filename(name,name); /* Convert to system format */
+ strxnmov(name, FN_REFLEN, mysql_real_data_home, tdb, NullS);
+ (void) fn_format(name, ex->file_name, name, "", MY_RELATIVE_PATH);
+ unpack_filename(name,name);
}
else
{
- my_load_path(name, ex->file_name, mysql_real_data_home);
- unpack_filename(name, name);
+ (void) fn_format(name, ex->file_name, mysql_real_data_home, "", MY_RELATIVE_PATH);
+ unpack_filename(name,name);
#if !defined(__WIN__) && !defined(OS2) && ! defined(__NETWARE__)
MY_STAT stat_info;
if (!my_stat(name,&stat_info,MYF(MY_WME)))
diff --git a/sql/sql_table.cc b/sql/sql_table.cc
index 408f3408346..7fff338df1c 100644
--- a/sql/sql_table.cc
+++ b/sql/sql_table.cc
@@ -2602,7 +2602,9 @@ int mysql_alter_table(THD *thd,char *new_db, char *new_name,
}
else
{
- if (!access(fn_format(new_name_buff,new_name_buff,new_db,reg_ext,0),
+ char dir_buff[FN_REFLEN];
+ strxnmov(dir_buff, FN_REFLEN, mysql_real_data_home, new_db, NullS);
+ if (!access(fn_format(new_name_buff,new_name_buff,dir_buff,reg_ext,0),
F_OK))
{
/* Table will be closed in do_command() */