my_rename.c
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:2k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* Copyright (C) 2000 MySQL AB
  2.    This program is free software; you can redistribute it and/or modify
  3.    it under the terms of the GNU General Public License as published by
  4.    the Free Software Foundation; either version 2 of the License, or
  5.    (at your option) any later version.
  6.    This program is distributed in the hope that it will be useful,
  7.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  8.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  9.    GNU General Public License for more details.
  10.    You should have received a copy of the GNU General Public License
  11.    along with this program; if not, write to the Free Software
  12.    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
  13. #define USES_TYPES
  14. #include "mysys_priv.h"
  15. #include <my_dir.h>
  16. #include "mysys_err.h"
  17. #undef my_rename
  18. /* On unix rename deletes to file if it exists */
  19. int my_rename(const char *from, const char *to, myf MyFlags)
  20. {
  21.   int error = 0;
  22.   DBUG_ENTER("my_rename");
  23.   DBUG_PRINT("my",("from %s to %s MyFlags %d", from, to, MyFlags));
  24. #if defined(HAVE_FILE_VERSIONS)
  25.   { /* Check that there isn't a old file */
  26.     int save_errno;
  27.     MY_STAT my_stat_result;
  28.     save_errno=my_errno;
  29.     if (my_stat(to,&my_stat_result,MYF(0)))
  30.     {
  31.       my_errno=EEXIST;
  32.       error= -1;
  33.       if (MyFlags & MY_FAE+MY_WME)
  34. my_error(EE_LINK, MYF(ME_BELL+ME_WAITTANG),from,to,my_errno);
  35.       DBUG_RETURN(error);
  36.     }
  37.     my_errno=save_errno;
  38.   }
  39. #endif
  40. #if defined(HAVE_RENAME)
  41. #if defined(__WIN__) || defined(__NETWARE__)
  42.   /*
  43.     On windows we can't rename over an existing file:
  44.     Remove any conflicting files:
  45.   */
  46.   (void) my_delete(to, MYF(0));
  47. #endif
  48.   if (rename(from,to))
  49. #else
  50.   if (link(from, to) || unlink(from))
  51. #endif
  52.   {
  53.     my_errno=errno;
  54.     error = -1;
  55.     if (MyFlags & (MY_FAE+MY_WME))
  56.       my_error(EE_LINK, MYF(ME_BELL+ME_WAITTANG),from,to,my_errno);
  57.   }
  58.   DBUG_RETURN(error);
  59. } /* my_rename */