os_unlink.c
上传用户:tsgydb
上传日期:2007-04-14
资源大小:10674k
文件大小:2k
源码类别:

MySQL数据库

开发平台:

Visual C++

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