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