int getTempPath(char *buff) { static const char *envname[] = { "TMPDIR", "TEMP", "TMP", 0 }; static const char *dirname[] = { "/tmp", "/var/tmp", "/usr/tmp", 0 }; int i; char *p; for ( i=0; envname[i]; i++ ) { p = getenv(envname[i]); if (p) { strcpy(buff, p); if (testTempPath(buff)) return 1; } } for ( i=0; dirname[i]; i++ ) { strcpy(buff, dirname[i]); if (testTempPath(buff)) return 1; } return 0; }
int testTempPath(char *buff) { char base[16]; int n; n = strlen(buff); if ( buff[n-1] == '/' || buff[n-1] == '\\' ) sprintf(base, "_MEI%d", getpid()); else sprintf(base, "%s_MEI%d", SEP, getpid()); strcat(buff, base); #ifdef WIN32 if (mkdir(buff) == 0) { #else if (mkdir(buff, 0700) == 0) { #endif strcat(buff, SEP); return 1; } return 0; } void getTempPath(char *buff) { #ifdef WIN32 GetTempPath(MAX_PATH, buff); testTempPath(buff); #else static const char *envname[] = { "TMPDIR", "TEMP", "TMP", 0 }; static const char *dirname[] = { "/tmp", "/var/tmp", "/usr/tmp", 0 }; int i; char *p; for ( i=0; envname[i]; i++ ) { p = getenv(envname[i]); if (p) { strcpy(buff, p); if (testTempPath(buff)) return; } } for ( i=0; dirname[i]; i++ ) { strcpy(buff, dirname[i]); if (testTempPath(buff)) return; } buff[0] = '\0'; #endif }