diff options
Diffstat (limited to 'Build/source/libs/xpdf/xpdf-src/xpdf/PDFDoc.cc')
-rw-r--r-- | Build/source/libs/xpdf/xpdf-src/xpdf/PDFDoc.cc | 30 |
1 files changed, 19 insertions, 11 deletions
diff --git a/Build/source/libs/xpdf/xpdf-src/xpdf/PDFDoc.cc b/Build/source/libs/xpdf/xpdf-src/xpdf/PDFDoc.cc index 8bc14eb47ad..a130b164f91 100644 --- a/Build/source/libs/xpdf/xpdf-src/xpdf/PDFDoc.cc +++ b/Build/source/libs/xpdf/xpdf-src/xpdf/PDFDoc.cc @@ -46,6 +46,15 @@ #define headerSearchSize 1024 // read this many bytes at beginning of // file to look for '%PDF' +// Avoid sharing files with child processes on Windows, where sharing +// can cause problems. +#ifdef _WIN32 +# define fopenReadMode "rbN" +# define wfopenReadMode L"rbN" +#else +# define fopenReadMode "rb" +#endif + //------------------------------------------------------------------------ // PDFDoc //------------------------------------------------------------------------ @@ -75,18 +84,18 @@ PDFDoc::PDFDoc(GString *fileNameA, GString *ownerPassword, // try to open file fileName2 = NULL; #ifdef VMS - if (!(file = fopen(fileName1->getCString(), "rb", "ctx=stm"))) { + if (!(file = fopen(fileName1->getCString(), fopenReadMode, "ctx=stm"))) { error(errIO, -1, "Couldn't open file '{0:t}'", fileName1); errCode = errOpenFile; return; } #else - if (!(file = fopen(fileName1->getCString(), "rb"))) { + if (!(file = fopen(fileName1->getCString(), fopenReadMode))) { fileName2 = fileName->copy(); fileName2->lowerCase(); - if (!(file = fopen(fileName2->getCString(), "rb"))) { + if (!(file = fopen(fileName2->getCString(), fopenReadMode))) { fileName2->upperCase(); - if (!(file = fopen(fileName2->getCString(), "rb"))) { + if (!(file = fopen(fileName2->getCString(), fopenReadMode))) { error(errIO, -1, "Couldn't open file '{0:t}'", fileName); delete fileName2; errCode = errOpenFile; @@ -127,9 +136,9 @@ PDFDoc::PDFDoc(wchar_t *fileNameA, int fileNameLen, GString *ownerPassword, version.dwOSVersionInfoSize = sizeof(version); GetVersionEx(&version); if (version.dwPlatformId == VER_PLATFORM_WIN32_NT) { - file = _wfopen(fileNameU, L"rb"); + file = _wfopen(fileNameU, wfopenReadMode); } else { - file = fopen(fileName->getCString(), "rb"); + file = fopen(fileName->getCString(), fopenReadMode); } if (!file) { error(errIO, -1, "Couldn't open file '{0:t}'", fileName); @@ -181,18 +190,17 @@ PDFDoc::PDFDoc(char *fileNameA, GString *ownerPassword, version.dwOSVersionInfoSize = sizeof(version); GetVersionEx(&version); if (version.dwPlatformId == VER_PLATFORM_WIN32_NT) { - file = _wfopen(fileNameU, L"rb"); + file = _wfopen(fileNameU, wfopenReadMode); } else { #endif /* 0 */ - file = fopen(fileName->getCString(), "rb"); + file = fopen(fileName->getCString(), fopenReadMode); #if 0 } #endif /* 0 */ - #elif defined(VMS) - file = fopen(fileName->getCString(), "rb", "ctx=stm"); + file = fopen(fileName->getCString(), fopenReadMode, "ctx=stm"); #else - file = fopen(fileName->getCString(), "rb"); + file = fopen(fileName->getCString(), fopenReadMode); #endif if (!file) { |