X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=pdf2swf%2Fxpdf%2Fgfile.cc;h=9c7d789e514c2bdbdb32892526ca6dcf64a293e2;hb=5e72a09d691c2d063c86c39f760f68ffc2710828;hp=4c93a790fdda6acdebb3a1fd180603198d47345e;hpb=9350e4b95093616e99db42b5610a8ce99d4ecb3e;p=swftools.git diff --git a/pdf2swf/xpdf/gfile.cc b/pdf2swf/xpdf/gfile.cc index 4c93a79..9c7d789 100644 --- a/pdf2swf/xpdf/gfile.cc +++ b/pdf2swf/xpdf/gfile.cc @@ -4,11 +4,13 @@ // // Miscellaneous file and directory name manipulation. // -// Copyright 1996 Derek B. Noonburg +// Copyright 1996-2002 Glyph & Cog, LLC // //======================================================================== +#include #include "../../config.h" + #ifdef WIN32 extern "C" { # ifndef _MSC_VER @@ -441,10 +443,12 @@ time_t getModTime(char *fileName) { return statBuf.st_mtime; #endif } + static char tmpbuf[128]; -static char* mktmpname(char*ptr) { -// used to be mktemp. This does remove the warnings, but -// It's not exactly an improvement. + +char* mktmpname(char*ptr) { + // 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()); #else @@ -454,10 +458,30 @@ static char* mktmpname(char*ptr) { sprintf(tmpbuf, "/tmp/%08x%08x",time(0),(unsigned int)tmpbuf); # endif #endif - return tmpbuf; + return tmpbuf; } + GBool openTempFile(GString **name, FILE **f, char *mode, char *ext) { -#if defined(VMS) || defined(__EMX__) || defined(WIN32) || defined(ACORN) || defined(MACOS) +#if defined(WIN32) + //---------- Win32 ---------- + char *s; + char buf[_MAX_PATH]; + char *fp; + + if (!(s = _tempnam(getenv("TEMP"), NULL))) { + return gFalse; + } + *name = new GString(s); + free(s); + if (ext) { + (*name)->append(ext); + } + if (!(*f = fopen((*name)->getCString(), mode))) { + delete (*name); + return gFalse; + } + return gTrue; +#elif defined(VMS) || defined(__EMX__) || defined(ACORN) || defined(MACOS) //---------- non-Unix ---------- char *s; @@ -465,7 +489,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))) { + if (!(s = mktmpname(NULL))) { //was: tmpnam return gFalse; } *name = new GString(s); @@ -479,20 +503,26 @@ GBool openTempFile(GString **name, FILE **f, char *mode, char *ext) { return gTrue; #else //---------- Unix ---------- - char *s, *p; + char *s; int fd; if (ext) { - if (!(s = mktmpname(NULL))) { +#if HAVE_MKSTEMPS + if ((s = getenv("TMPDIR"))) { + *name = new GString(s); + } else { + *name = new GString("/tmp"); + } + (*name)->append("/XXXXXX")->append(ext); + fd = mkstemps((*name)->getCString(), strlen(ext)); +#else + if (!(s = mktmpname(NULL))) { //was: tmpnam return gFalse; } *name = new GString(s); - s = (*name)->getCString(); - if ((p = strrchr(s, '.'))) { - (*name)->del(p - s, (*name)->getLength() - (p - s)); - } (*name)->append(ext); fd = open((*name)->getCString(), O_WRONLY | O_CREAT | O_EXCL, 0600); +#endif } else { #if HAVE_MKSTEMP if ((s = getenv("TMPDIR"))) { @@ -503,7 +533,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))) { + if (!(s = mktmpname(NULL))) { //was: tmpnam return gFalse; } *name = new GString(s); @@ -518,11 +548,48 @@ GBool openTempFile(GString **name, FILE **f, char *mode, char *ext) { #endif } +GBool executeCommand(char *cmd) { +#ifdef VMS + return system(cmd) ? gTrue : gFalse; +#else + return system(cmd) ? gFalse : gTrue; +#endif +} + +char *getLine(char *buf, int size, FILE *f) { + int c, i; + + i = 0; + while (i < size - 1) { + if ((c = fgetc(f)) == EOF) { + break; + } + buf[i++] = (char)c; + if (c == '\x0a') { + break; + } + if (c == '\x0d') { + c = fgetc(f); + if (c == '\x0a' && i < size - 1) { + buf[i++] = (char)c; + } else if (c != EOF) { + ungetc(c, f); + } + break; + } + } + buf[i] = '\0'; + if (i == 0) { + return NULL; + } + return buf; +} + //------------------------------------------------------------------------ // GDir and GDirEntry //------------------------------------------------------------------------ -GDirEntry::GDirEntry(char *dirPath, char *name1, GBool doStat) { +GDirEntry::GDirEntry(char *dirPath, char *nameA, GBool doStat) { #ifdef VMS char *p; #elif defined(WIN32) @@ -534,17 +601,17 @@ GDirEntry::GDirEntry(char *dirPath, char *name1, GBool doStat) { GString *s; #endif - name = new GString(name1); + name = new GString(nameA); dir = gFalse; if (doStat) { #ifdef VMS - if (!strcmp(name1, "-") || - ((p = strrchr(name1, '.')) && !strncmp(p, ".DIR;", 5))) + if (!strcmp(nameA, "-") || + ((p = strrchr(nameA, '.')) && !strncmp(p, ".DIR;", 5))) dir = gTrue; #elif defined(ACORN) #else s = new GString(dirPath); - appendToPath(s, name1); + appendToPath(s, nameA); #ifdef WIN32 fa = GetFileAttributes(s->getCString()); dir = (fa != 0xFFFFFFFF && (fa & FILE_ATTRIBUTE_DIRECTORY)); @@ -561,9 +628,9 @@ GDirEntry::~GDirEntry() { delete name; } -GDir::GDir(char *name, GBool doStat1) { +GDir::GDir(char *name, GBool doStatA) { path = new GString(name); - doStat = doStat1; + doStat = doStatA; #if defined(WIN32) GString *tmp;