00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #include <config.h>
00017
00018 #include <drizzled/internal/my_sys.h>
00019 #include <drizzled/error.h>
00020 #include <drizzled/internal/m_string.h>
00021
00022 namespace drizzled
00023 {
00024 namespace internal
00025 {
00026
00027
00028
00029 int my_rename(const char *from, const char *to, myf MyFlags)
00030 {
00031 int error = 0;
00032
00033 #if defined(HAVE_FILE_VERSIONS)
00034 {
00035 int save_errno;
00036 MY_STAT my_stat_result;
00037 save_errno=errno;
00038 if (my_stat(to,&my_stat_result,MYF(0)))
00039 {
00040 errno=EEXIST;
00041 error= -1;
00042 if (MyFlags & MY_FAE+MY_WME)
00043 my_error(EE_LINK, MYF(ME_BELL+ME_WAITTANG),from,to,errno);
00044 return(error);
00045 }
00046 errno=save_errno;
00047 }
00048 #endif
00049 if (rename(from,to))
00050 {
00051 errno=errno;
00052 error = -1;
00053 if (MyFlags & (MY_FAE+MY_WME))
00054 my_error(EE_LINK, MYF(ME_BELL+ME_WAITTANG),from,to,errno);
00055 }
00056 else if (MyFlags & MY_SYNC_DIR)
00057 {
00058 #ifdef NEED_EXPLICIT_SYNC_DIR
00059
00060 char dir_from[FN_REFLEN], dir_to[FN_REFLEN];
00061 size_t dir_from_length, dir_to_length;
00062 dirname_part(dir_from, from, &dir_from_length);
00063 dirname_part(dir_to, to, &dir_to_length);
00064 if (my_sync_dir(dir_from, MyFlags) ||
00065 (strcmp(dir_from, dir_to) &&
00066 my_sync_dir(dir_to, MyFlags)))
00067 error= -1;
00068 #endif
00069 }
00070 return(error);
00071 }
00072
00073 }
00074 }