00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #include "db_config.h"
00011
00012 #ifndef NO_SYSTEM_INCLUDES
00013 #include <sys/types.h>
00014
00015 #include <stdlib.h>
00016 #endif
00017
00018 #include "db_int.h"
00019
00020 #ifdef macintosh
00021 #include <TFileSpec.h>
00022 #endif
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 int
00034 __os_tmpdir(dbenv, flags)
00035 DB_ENV *dbenv;
00036 u_int32_t flags;
00037 {
00038 int isdir;
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048 static const char * list[] = {
00049 "/var/tmp",
00050 "/usr/tmp",
00051 "/temp",
00052 "/tmp",
00053 "C:/temp",
00054 "C:/tmp",
00055 NULL
00056 };
00057 const char * const *lp, *p;
00058
00059
00060 if (LF_ISSET(DB_USE_ENVIRON) ||
00061 (LF_ISSET(DB_USE_ENVIRON_ROOT) && __os_isroot())) {
00062 if ((p = getenv("TMPDIR")) != NULL && p[0] == '\0') {
00063 __db_err(dbenv, "illegal TMPDIR environment variable");
00064 return (EINVAL);
00065 }
00066
00067 if (p == NULL && (p = getenv("TEMP")) != NULL && p[0] == '\0') {
00068 __db_err(dbenv, "illegal TEMP environment variable");
00069 return (EINVAL);
00070 }
00071
00072 if (p == NULL && (p = getenv("TMP")) != NULL && p[0] == '\0') {
00073 __db_err(dbenv, "illegal TMP environment variable");
00074 return (EINVAL);
00075 }
00076
00077 if (p == NULL &&
00078 (p = getenv("TempFolder")) != NULL && p[0] == '\0') {
00079 __db_err(dbenv,
00080 "illegal TempFolder environment variable");
00081 return (EINVAL);
00082 }
00083 if (p != NULL)
00084 return (__os_strdup(dbenv, p, &dbenv->db_tmp_dir));
00085 }
00086
00087 #ifdef macintosh
00088
00089 {FSSpec spec;
00090
00091 if (!Special2FSSpec(kTemporaryFolderType,
00092 kOnSystemDisk, 0, &spec))
00093 return (__os_strdup(dbenv,
00094 FSp2FullPath(&spec), &dbenv->db_tmp_dir));
00095 }
00096 #endif
00097 #ifdef DB_WIN32
00098
00099 {
00100 int ret;
00101 _TCHAR tpath[MAXPATHLEN + 1];
00102 char *path, *eos;
00103
00104 if (GetTempPath(MAXPATHLEN, tpath) > 2) {
00105 FROM_TSTRING(dbenv, tpath, path, ret);
00106 if (ret != 0)
00107 return (ret);
00108 eos = path + strlen(path) - 1;
00109 if (*eos == '\\' || *eos == '/')
00110 *eos = '\0';
00111 if (__os_exists(path, &isdir) == 0 && isdir) {
00112 ret = __os_strdup(dbenv,
00113 path, &dbenv->db_tmp_dir);
00114 FREE_STRING(dbenv, path);
00115 return (ret);
00116 }
00117 FREE_STRING(dbenv, path);
00118 }
00119 }
00120 #endif
00121
00122
00123 for (lp = list; *lp != NULL; ++lp)
00124 if (__os_exists(*lp, &isdir) == 0 && isdir != 0)
00125 return (__os_strdup(dbenv, *lp, &dbenv->db_tmp_dir));
00126 return (0);
00127 }