X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=pdf2swf%2Fxpdf%2Fgfile.cc;h=5fa0762d418f39f8fd82ddb4ff6ecd5fbc212ec6;hb=9d6aba0a1d20e4aa8306a073691a6c294f20fff3;hp=bf020e7d9d19e2e0c2416a0a7451eeada245b796;hpb=a99083c972c3464b16cb2d488f7e8b2519c48c41;p=swftools.git diff --git a/pdf2swf/xpdf/gfile.cc b/pdf2swf/xpdf/gfile.cc index bf020e7..5fa0762 100644 --- a/pdf2swf/xpdf/gfile.cc +++ b/pdf2swf/xpdf/gfile.cc @@ -4,20 +4,13 @@ // // Miscellaneous file and directory name manipulation. // -// Copyright 1996-2002 Glyph & Cog, LLC +// Copyright 1996-2003 Glyph & Cog, LLC // //======================================================================== #include -#include "../../config.h" -#ifdef WIN32 - extern "C" { -//# ifndef _MSC_VER -//# include -//# endif - } -#else // !WIN32 +#ifndef WIN32 # if defined(MACOS) # include # elif !defined(ACORN) @@ -443,30 +436,57 @@ time_t getModTime(char *fileName) { return statBuf.st_mtime; #endif } - -static char tmpbuf[128]; + +static char* getTempDir() +{ +#ifdef WIN32 + char*dir = getenv("TMP"); + if(!dir) dir = getenv("TEMP"); + if(!dir) dir = getenv("tmp"); + if(!dir) dir = getenv("temp"); + if(!dir) dir = "C:\\"; +#else + char* dir = "/tmp/"; +#endif + return dir; +} char* mktmpname(char*ptr) { + static char tmpbuf[128]; + char*dir = getTempDir(); + int l = strlen(dir); + char*sep = ""; + if(!ptr) + ptr = tmpbuf; + if(l && dir[l-1]!='/' && dir[l-1]!='\\') { +#ifdef WIN32 + sep = "\\"; +#else + sep = "/"; +#endif + } + // used to be mktemp. This does remove the warnings, but // It's not exactly an improvement. #ifdef HAVE_LRAND48 - sprintf(tmpbuf, "/tmp/%08x%08x",lrand48(),lrand48()); + sprintf(ptr, "%s%s%08x%08x",dir,sep,lrand48(),lrand48()); #else # ifdef HAVE_RAND - sprintf(tmpbuf, "/tmp/%08x%08x",rand(),rand()); + sprintf(ptr, "%s%s%08x%08x",dir,sep,rand(),rand()); # else - sprintf(tmpbuf, "/tmp/%08x%08x",time(0),(unsigned int)tmpbuf); + static int count = 1; + sprintf(ptr, "%s%s%08x%04x%04x",dir,sep,time(0),(unsigned int)tmpbuf^((unsigned int)tmpbuf)>>16,count); + count ++; # endif #endif - return tmpbuf; + return ptr; } + GBool openTempFile(GString **name, FILE **f, char *mode, char *ext) { #if defined(WIN32) //---------- Win32 ---------- char *s; - char buf[_MAX_PATH]; - char *fp; if (!(s = _tempnam(getenv("TEMP"), NULL))) { return gFalse; @@ -489,7 +509,7 @@ GBool openTempFile(GString **name, FILE **f, char *mode, char *ext) { // with this file name after the tmpnam call and before the fopen // call. I will happily accept fixes to this function for non-Unix // OSs. - if (!(s = mktmpname(NULL))) { //was: tmpnam + if (!(s = mktmpname(NULL))) { return gFalse; } *name = new GString(s); @@ -516,7 +536,7 @@ GBool openTempFile(GString **name, FILE **f, char *mode, char *ext) { (*name)->append("/XXXXXX")->append(ext); fd = mkstemps((*name)->getCString(), strlen(ext)); #else - if (!(s = mktmpname(NULL))) { //was: tmpnam + if (!(s = mktmpname(NULL))) { return gFalse; } *name = new GString(s); @@ -533,7 +553,7 @@ GBool openTempFile(GString **name, FILE **f, char *mode, char *ext) { (*name)->append("/XXXXXX"); fd = mkstemp((*name)->getCString()); #else // HAVE_MKSTEMP - if (!(s = mktmpname(NULL))) { //was: tmpnam + if (!(s = mktmpname(NULL))) { return gFalse; } *name = new GString(s); @@ -664,36 +684,48 @@ GDir::~GDir() { } GDirEntry *GDir::getNextEntry() { - struct dirent *ent; GDirEntry *e; - e = NULL; #if defined(WIN32) - e = new GDirEntry(path->getCString(), ffd.cFileName, doStat); - if (hnd && !FindNextFile(hnd, &ffd)) { - FindClose(hnd); - hnd = NULL; + if (hnd) { + e = new GDirEntry(path->getCString(), ffd.cFileName, doStat); + if (hnd && !FindNextFile(hnd, &ffd)) { + FindClose(hnd); + hnd = NULL; + } + } else { + e = NULL; } #elif defined(ACORN) #elif defined(MACOS) -#else +#elif defined(VMS) + struct dirent *ent; + e = NULL; if (dir) { -#ifdef VMS if (needParent) { e = new GDirEntry(path->getCString(), "-", doStat); needParent = gFalse; return e; } -#endif ent = readdir(dir); -#ifndef VMS - if (ent && !strcmp(ent->d_name, ".")) + if (ent) { + e = new GDirEntry(path->getCString(), ent->d_name, doStat); + } + } +#else + struct dirent *ent; + e = NULL; + if (dir) { + ent = readdir(dir); + if (ent && !strcmp(ent->d_name, ".")) { ent = readdir(dir); -#endif - if (ent) + } + if (ent) { e = new GDirEntry(path->getCString(), ent->d_name, doStat); + } } #endif + return e; } @@ -706,6 +738,7 @@ void GDir::rewind() { tmp = path->copy(); tmp->append("/*.*"); hnd = FindFirstFile(tmp->getCString(), &ffd); + delete tmp; #elif defined(ACORN) #elif defined(MACOS) #else