diff options
author | unknown <hf@deer.(none)> | 2004-09-07 11:55:34 +0500 |
---|---|---|
committer | unknown <hf@deer.(none)> | 2004-09-07 11:55:34 +0500 |
commit | 89ee639541a36aef7be25855b5bdc24b890108f8 (patch) | |
tree | e7c329902080841ee5657b450f9c954f44bb920a | |
parent | 3c3db07321d1a75a241e1d6689dc56d9415519a5 (diff) | |
download | mariadb-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.c | 2 | ||||
-rw-r--r-- | sql/item_strfunc.cc | 15 | ||||
-rw-r--r-- | sql/sql_class.cc | 11 | ||||
-rw-r--r-- | sql/sql_load.cc | 13 | ||||
-rw-r--r-- | sql/sql_table.cc | 4 |
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() */ |