summaryrefslogtreecommitdiff
path: root/Build/source/libs/xpdf/xpdf-src/xpdf/PDFDoc.cc
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/libs/xpdf/xpdf-src/xpdf/PDFDoc.cc')
-rw-r--r--Build/source/libs/xpdf/xpdf-src/xpdf/PDFDoc.cc30
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) {