diff --git a/include/utility.cpp b/include/utility.cpp index d90a13911..f19eccdbc 100755 --- a/include/utility.cpp +++ b/include/utility.cpp @@ -267,3 +267,33 @@ int stricmp(const char* s1, const char* s2) } #endif +#ifdef __WATCOMC__ +char * tempnam(const char * dir , const char * prefix) + +{ + TFilename tmpdir(getenv("TMP")); + static word counter = 1; + + if (tmpdir.empty() || !fexist(tmpdir)) + { + tmpdir = dir; + if (tmpdir.empty() || !fexist(tmpdir)) + tmpdir = ""; + } + if (is_not_slash(tmpdir.right(1)[0])) + tmpdir << '/'; + tmpdir << prefix ; + const int lastpos = tmpdir.len() ; + tmpdir << format("%ud", counter); + + while (!fexist(tmpdir)) + { + counter++; + if (counter == 0) counter = 1; + tmpdir.cut(lastpos); + tmpdir << format("%ud", counter); + } + return strdup(tmpdir); +} +#endif + diff --git a/include/utility.h b/include/utility.h index f2dd7ff52..1ba7c829b 100755 --- a/include/utility.h +++ b/include/utility.h @@ -14,10 +14,14 @@ bool fcopy(const char* orig, const char* dest, bool append=FALSE); bool fexist(const char* file); const char * encode(const char * data); const char * decode(const char * data); +inline bool is_not_slash(char s) { return s != '\\' && s != '/'; } #if XVT_OS == XVT_OS_SCOUNIX int stricmp(const char*, const char*); #endif +#ifdef __WATCOMC__ +char * tempnam(const char * dir, const char * prefix); +#endif const char* esc(const char*); @@ -32,5 +36,5 @@ extern char __tmp_string[1024]; /* @END */ -#endif // __UTILITY_H +#endif /* __UTILITY_H */