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

MySQL数据库

开发平台:

Visual C++

  1. /*-
  2.  * See the file LICENSE for redistribution information.
  3.  *
  4.  * Copyright (c) 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_tmpdir.c,v 11.16 2001/01/08 20:42:06 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. /*
  34.  * !!!
  35.  * Don't change this to:
  36.  *
  37.  * static const char * const list[]
  38.  *
  39.  * because it creates a text relocation in position independent code.
  40.  */
  41. static const char * list[] = {
  42. "/var/tmp",
  43. "/usr/tmp",
  44. "/temp", /* Windows. */
  45. "/tmp",
  46. "C:/temp", /* Windows. */
  47. "C:/tmp", /* Windows. */
  48. NULL
  49. };
  50. const char * const *lp, *p;
  51. /* Use the environment if it's permitted and initialized. */
  52. if (LF_ISSET(DB_USE_ENVIRON) ||
  53.     (LF_ISSET(DB_USE_ENVIRON_ROOT) && __os_isroot())) {
  54. if ((p = getenv("TMPDIR")) != NULL && p[0] == '') {
  55. __db_err(dbenv, "illegal TMPDIR environment variable");
  56. return (EINVAL);
  57. }
  58. /* Windows */
  59. if (p == NULL && (p = getenv("TEMP")) != NULL && p[0] == '') {
  60. __db_err(dbenv, "illegal TEMP environment variable");
  61. return (EINVAL);
  62. }
  63. /* Windows */
  64. if (p == NULL && (p = getenv("TMP")) != NULL && p[0] == '') {
  65. __db_err(dbenv, "illegal TMP environment variable");
  66. return (EINVAL);
  67. }
  68. /* Macintosh */
  69. if (p == NULL &&
  70.     (p = getenv("TempFolder")) != NULL && p[0] == '') {
  71. __db_err(dbenv,
  72.     "illegal TempFolder environment variable");
  73. return (EINVAL);
  74. }
  75. if (p != NULL)
  76. return (__os_strdup(dbenv, p, &dbenv->db_tmp_dir));
  77. }
  78. #ifdef macintosh
  79. /* Get the path to the temporary folder. */
  80. {FSSpec spec;
  81. if (!Special2FSSpec(kTemporaryFolderType,
  82.     kOnSystemDisk, 0, &spec))
  83. return (__os_strdup(dbenv,
  84.     FSp2FullPath(&spec), &dbenv->db_tmp_dir));
  85. }
  86. #endif
  87. #ifdef DB_WIN32
  88. /* Get the path to the temporary directory. */
  89. {int isdir, len;
  90. char *eos, temp[MAXPATHLEN + 1];
  91. if ((len = GetTempPath(sizeof(temp) - 1, temp)) > 2) {
  92. eos = &temp[len];
  93. *eos-- = '';
  94. if (*eos == '\' || *eos == '/')
  95. *eos = '';
  96. if (__os_exists(temp, &isdir) == 0 && isdir != 0)
  97. return (__os_strdup(dbenv,
  98.     temp, &dbenv->db_tmp_dir));
  99. }
  100. }
  101. #endif
  102. /* Step through the static list looking for a possibility. */
  103. for (lp = list; *lp != NULL; ++lp)
  104. if (__os_exists(*lp, NULL) == 0)
  105. return (__os_strdup(dbenv, *lp, &dbenv->db_tmp_dir));
  106. return (0);
  107. }