os_unlink.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_unlink.c,v 11.24 2002/07/12 18:56:53 bostic Exp $";
  10. #endif /* not lint */
  11. #ifndef NO_SYSTEM_INCLUDES
  12. #include <sys/types.h>
  13. #include <string.h>
  14. #include <unistd.h>
  15. #endif
  16. #include "db_int.h"
  17. /*
  18.  * __os_region_unlink --
  19.  * Remove a shared memory object file.
  20.  *
  21.  * PUBLIC: int __os_region_unlink __P((DB_ENV *, const char *));
  22.  */
  23. int
  24. __os_region_unlink(dbenv, path)
  25. DB_ENV *dbenv;
  26. const char *path;
  27. {
  28. #ifdef HAVE_QNX
  29. int ret;
  30. char *newname;
  31. if ((ret = __os_shmname(dbenv, path, &newname)) != 0)
  32. goto err;
  33. if ((ret = shm_unlink(newname)) != 0) {
  34. ret = __os_get_errno();
  35. if (ret != ENOENT)
  36. __db_err(dbenv, "shm_unlink: %s: %s",
  37.     newname, strerror(ret));
  38. }
  39. err:
  40. if (newname != NULL)
  41. __os_free(dbenv, newname);
  42. return (ret);
  43. #else
  44. if (F_ISSET(dbenv, DB_ENV_OVERWRITE))
  45. (void)__db_overwrite(dbenv, path);
  46. return (__os_unlink(dbenv, path));
  47. #endif
  48. }
  49. /*
  50.  * __os_unlink --
  51.  * Remove a file.
  52.  *
  53.  * PUBLIC: int __os_unlink __P((DB_ENV *, const char *));
  54.  */
  55. int
  56. __os_unlink(dbenv, path)
  57. DB_ENV *dbenv;
  58. const char *path;
  59. {
  60. int ret;
  61. retry: ret = DB_GLOBAL(j_unlink) != NULL ?
  62.     DB_GLOBAL(j_unlink)(path) :
  63. #ifdef HAVE_VXWORKS
  64.     unlink((char *)path);
  65. #else
  66.     unlink(path);
  67. #endif
  68. if (ret == -1) {
  69. if ((ret = __os_get_errno()) == EINTR)
  70. goto retry;
  71. /*
  72.  * XXX
  73.  * We really shouldn't be looking at this value ourselves,
  74.  * but ENOENT usually signals that a file is missing, and
  75.  * we attempt to unlink things (such as v. 2.x environment
  76.  * regions, in DB_ENV->remove) that we're expecting not to
  77.  * be there.  Reporting errors in these cases is annoying.
  78.  */
  79. #ifdef HAVE_VXWORKS
  80. /*
  81.  * XXX
  82.  * The results of unlink are file system driver specific
  83.  * on VxWorks.  In the case of removing a file that did
  84.  * not exist, some, at least, return an error, but with
  85.  * an errno of 0, not ENOENT.
  86.  *
  87.  * Code below falls through to original if-statement only
  88.  * we didn't get a "successful" error.
  89.  */
  90. if (ret != 0)
  91. /* FALLTHROUGH */
  92. #endif
  93. if (ret != ENOENT)
  94. __db_err(dbenv, "unlink: %s: %s", path, strerror(ret));
  95. }
  96. return (ret);
  97. }