diff options
author | unknown <hf@deer.(none)> | 2004-09-14 10:04:35 +0500 |
---|---|---|
committer | unknown <hf@deer.(none)> | 2004-09-14 10:04:35 +0500 |
commit | 5bdd52baaf6932841b55f38f02feca679e6818a5 (patch) | |
tree | 680ecd15801b71ed4fcc541dbb70b72366817e99 | |
parent | 11acc78e6cd8bb5b66d1dd7552c8234de9f784ee (diff) | |
parent | e9dd98cc1cb0d468fd9870861f0dbd5971214e73 (diff) | |
download | mariadb-git-5bdd52baaf6932841b55f38f02feca679e6818a5.tar.gz |
Merging
sql/sql_table.cc:
Auto merged
-rw-r--r-- | mysys/mf_format.c | 2 | ||||
-rw-r--r-- | sql/item_strfunc.cc | 14 | ||||
-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, 29 insertions, 15 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..91fd3b145bc 100644 --- a/sql/item_strfunc.cc +++ b/sql/item_strfunc.cc @@ -2412,14 +2412,22 @@ 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 | MY_UNPACK_FILENAME); + + 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 b564775703c..349fc792a2a 100644 --- a/sql/sql_class.cc +++ b/sql/sql_class.cc @@ -892,9 +892,14 @@ 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 : "", - NullS); - (void) fn_format(path, exchange->file_name, path, "", option); + if (!dirname_length(exchange->file_name)) + { + 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 1ba96fa3663..78d89ef7aa9 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_real_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 | MY_UNPACK_FILENAME); } 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 | MY_UNPACK_FILENAME); #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 5929e8c4289..65e26346834 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -2610,7 +2610,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() */ |