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

MySQL数据库

开发平台:

Visual C++

  1. /*-
  2.  * See the file LICENSE for redistribution information.
  3.  *
  4.  * Copyright (c) 1998-2002
  5.  * Sleepycat Software.  All rights reserved.
  6.  */
  7. #include "db_config.h"
  8. #ifndef lint
  9. static const char revid[] = "$Id: os_tmpdir.c,v 11.19 2002/01/11 15:53:02 bostic Exp $";
  10. #endif /* not lint */
  11. #ifndef NO_SYSTEM_INCLUDES
  12. #include <sys/types.h>
  13. #include <stdlib.h>
  14. #endif
  15. #include "db_int.h"
  16. #ifdef macintosh
  17. #include <TFileSpec.h>
  18. #endif
  19. /*
  20.  * __os_tmpdir --
  21.  * Set the temporary directory path.
  22.  *
  23.  * The order of items in the list structure and the order of checks in
  24.  * the environment are documented.
  25.  *
  26.  * PUBLIC: int __os_tmpdir __P((DB_ENV *, u_int32_t));
  27.  */
  28. int
  29. __os_tmpdir(dbenv, flags)
  30. DB_ENV *dbenv;
  31. u_int32_t flags;
  32. {
  33. int isdir;
  34. /*
  35.  * !!!
  36.  * Don't change this to:
  37.  *
  38.  * static const char * const list[]
  39.  *
  40.  * because it creates a text relocation in position independent code.
  41.  */
  42. static const char * list[] = {
  43. "/var/tmp",
  44. "/usr/tmp",
  45. "/temp", /* Windows. */
  46. "/tmp",
  47. "C:/temp", /* Windows. */
  48. "C:/tmp", /* Windows. */
  49. NULL
  50. };
  51. const char * const *lp, *p;
  52. /* Use the environment if it's permitted and initialized. */
  53. if (LF_ISSET(DB_USE_ENVIRON) ||
  54.     (LF_ISSET(DB_USE_ENVIRON_ROOT) && __os_isroot())) {
  55. if ((p = getenv("TMPDIR")) != NULL && p[0] == '') {
  56. __db_err(dbenv, "illegal TMPDIR environment variable");
  57. return (EINVAL);
  58. }
  59. /* Windows */
  60. if (p == NULL && (p = getenv("TEMP")) != NULL && p[0] == '') {
  61. __db_err(dbenv, "illegal TEMP environment variable");
  62. return (EINVAL);
  63. }
  64. /* Windows */
  65. if (p == NULL && (p = getenv("TMP")) != NULL && p[0] == '') {
  66. __db_err(dbenv, "illegal TMP environment variable");
  67. return (EINVAL);
  68. }
  69. /* Macintosh */
  70. if (p == NULL &&
  71.     (p = getenv("TempFolder")) != NULL && p[0] == '') {
  72. __db_err(dbenv,
  73.     "illegal TempFolder environment variable");
  74. return (EINVAL);
  75. }
  76. if (p != NULL)
  77. return (__os_strdup(dbenv, p, &dbenv->db_tmp_dir));
  78. }
  79. #ifdef macintosh
  80. /* Get the path to the temporary folder. */
  81. {FSSpec spec;
  82. if (!Special2FSSpec(kTemporaryFolderType,
  83.     kOnSystemDisk, 0, &spec))
  84. return (__os_strdup(dbenv,
  85.     FSp2FullPath(&spec), &dbenv->db_tmp_dir));
  86. }
  87. #endif
  88. #ifdef DB_WIN32
  89. /* Get the path to the temporary directory. */
  90. {int len;
  91. char *eos, temp[MAXPATHLEN + 1];
  92. if ((len = GetTempPath(sizeof(temp) - 1, temp)) > 2) {
  93. eos = &temp[len];
  94. *eos-- = '';
  95. if (*eos == '\' || *eos == '/')
  96. *eos = '';
  97. if (__os_exists(temp, &isdir) == 0 && isdir != 0)
  98. return (__os_strdup(dbenv,
  99.     temp, &dbenv->db_tmp_dir));
  100. }
  101. }
  102. #endif
  103. /* Step through the static list looking for a possibility. */
  104. for (lp = list; *lp != NULL; ++lp)
  105. if (__os_exists(*lp, &isdir) == 0 && isdir != 0)
  106. return (__os_strdup(dbenv, *lp, &dbenv->db_tmp_dir));
  107. return (0);
  108. }