#include "db_config.h"
#include "db_int.h"
#ifdef HAVE_SYSTEM_INCLUDE_FILES
#ifdef macintosh
#include <TFileSpec.h>
#endif
#endif
int
__os_tmpdir(dbenv, flags)
DB_ENV *dbenv;
u_int32_t flags;
{
int isdir, ret;
char *tdir, tdir_buf[DB_MAXPATHLEN];
if (LF_ISSET(DB_USE_ENVIRON) ||
(LF_ISSET(DB_USE_ENVIRON_ROOT) && __os_isroot())) {
tdir = tdir_buf;
if ((ret = __os_getenv(
dbenv, "TMPDIR", &tdir, sizeof(tdir_buf))) != 0)
return (ret);
if (tdir != NULL && tdir[0] != '\0')
goto found;
tdir = tdir_buf;
if ((ret = __os_getenv(
dbenv, "TEMP", &tdir, sizeof(tdir_buf))) != 0)
return (ret);
if (tdir != NULL && tdir[0] != '\0')
goto found;
tdir = tdir_buf;
if ((ret = __os_getenv(
dbenv, "TMP", &tdir, sizeof(tdir_buf))) != 0)
return (ret);
if (tdir != NULL && tdir[0] != '\0')
goto found;
tdir = tdir_buf;
if ((ret = __os_getenv(
dbenv, "TempFolder", &tdir, sizeof(tdir_buf))) != 0)
return (ret);
if (tdir != NULL && tdir[0] != '\0')
found: return (__os_strdup(dbenv, tdir, &dbenv->db_tmp_dir));
}
#ifdef macintosh
{FSSpec spec;
if (!Special2FSSpec(kTemporaryFolderType,
kOnSystemDisk, 0, &spec))
return (__os_strdup(dbenv,
FSp2FullPath(&spec), &dbenv->db_tmp_dir));
}
#endif
#ifdef DB_WIN32
{
_TCHAR tpath[DB_MAXPATHLEN + 1];
char *path, *eos;
if (GetTempPath(DB_MAXPATHLEN, tpath) > 2) {
FROM_TSTRING(dbenv, tpath, path, ret);
if (ret != 0)
return (ret);
eos = path + strlen(path) - 1;
if (*eos == '\\' || *eos == '/')
*eos = '\0';
if (__os_exists(dbenv, path, &isdir) == 0 && isdir) {
ret = __os_strdup(dbenv,
path, &dbenv->db_tmp_dir);
FREE_STRING(dbenv, path);
return (ret);
}
FREE_STRING(dbenv, path);
}
}
#endif
#define DB_TEMP_DIRECTORY(n) { \
char *__p = n; \
if (__os_exists(dbenv, __p, &isdir) == 0 && isdir != 0) \
return (__os_strdup(dbenv, __p, &dbenv->db_tmp_dir)); \
}
#ifdef DB_WIN32
DB_TEMP_DIRECTORY("/temp");
DB_TEMP_DIRECTORY("C:/temp");
DB_TEMP_DIRECTORY("C:/tmp");
#else
DB_TEMP_DIRECTORY("/var/tmp");
DB_TEMP_DIRECTORY("/usr/tmp");
DB_TEMP_DIRECTORY("/tmp");
#endif
return (__os_strdup(dbenv, "", &dbenv->db_tmp_dir));
}