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

MySQL数据库

开发平台:

Visual C++

  1. /*-
  2.  * See the file LICENSE for redistribution information.
  3.  *
  4.  * Copyright (c) 1997-2002
  5.  * Sleepycat Software.  All rights reserved.
  6.  */
  7. #include "db_config.h"
  8. #ifndef lint
  9. static const char revid[] = "$Id: os_rename.c,v 1.12 2002/07/12 18:56:55 bostic Exp $";
  10. #endif /* not lint */
  11. #include "db_int.h"
  12. /*
  13.  * __os_rename --
  14.  * Rename a file.
  15.  */
  16. int
  17. __os_rename(dbenv, oldname, newname, flags)
  18. DB_ENV *dbenv;
  19. const char *oldname, *newname;
  20. u_int32_t flags;
  21. {
  22. int ret;
  23. char oldbuf[MAX_PATH], newbuf[MAX_PATH];
  24. ret = 0;
  25. if (DB_GLOBAL(j_rename) != NULL) {
  26. if (DB_GLOBAL(j_rename)(oldname, newname) == -1)
  27. ret = __os_get_errno();
  28. goto done;
  29. }
  30. if (!MoveFile(oldname, newname))
  31. ret = __os_win32_errno();
  32. if (ret == EEXIST) {
  33. ret = 0;
  34. if (__os_is_winnt()) {
  35. if (!MoveFileEx(
  36.     oldname, newname, MOVEFILE_REPLACE_EXISTING))
  37. ret = __os_win32_errno();
  38. } else {
  39. /*
  40.  * There is no MoveFileEx for Win9x/Me, so we have to
  41.  * do the best we can.
  42.  */
  43. LPTSTR FilePath;
  44. if (!GetFullPathName(oldname, sizeof(oldbuf), oldbuf,
  45.      &FilePath) ||
  46.     !GetFullPathName(newname, sizeof(newbuf), newbuf,
  47.      &FilePath)) {
  48. ret = __os_win32_errno();
  49. goto done;
  50. }
  51. /*
  52.  * If the old and new names differ only in case, we're
  53.  * done.
  54.  */
  55. if (strcasecmp(oldbuf, newbuf) == 0)
  56. goto done;
  57. (void)DeleteFile(newname);
  58. if (!MoveFile(oldname, newname))
  59. ret = __os_win32_errno();
  60. }
  61. }
  62. done: if (ret != 0 && flags == 0)
  63. __db_err(dbenv,
  64.     "Rename %s %s: %s", oldname, newname, strerror(ret));
  65. return (ret);
  66. }