summaryrefslogtreecommitdiff
path: root/Build/source/libs/poppler/poppler-src/poppler/FileSpec.cc
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/libs/poppler/poppler-src/poppler/FileSpec.cc')
-rw-r--r--Build/source/libs/poppler/poppler-src/poppler/FileSpec.cc282
1 files changed, 0 insertions, 282 deletions
diff --git a/Build/source/libs/poppler/poppler-src/poppler/FileSpec.cc b/Build/source/libs/poppler/poppler-src/poppler/FileSpec.cc
deleted file mode 100644
index 2628c363193..00000000000
--- a/Build/source/libs/poppler/poppler-src/poppler/FileSpec.cc
+++ /dev/null
@@ -1,282 +0,0 @@
-//========================================================================
-//
-// FileSpec.cc
-//
-// All changes made under the Poppler project to this file are licensed
-// under GPL version 2 or later
-//
-// Copyright (C) 2008-2009 Carlos Garcia Campos <carlosgc@gnome.org>
-// Copyright (C) 2009 Kovid Goyal <kovid@kovidgoyal.net>
-// Copyright (C) 2012, 2017, 2018 Albert Astals Cid <aacid@kde.org>
-// Copyright (C) 2012 Hib Eris <hib@hiberis.nl>
-// Copyright (C) 2018 Klarälvdalens Datakonsult AB, a KDAB Group company, <info@kdab.com>. Work sponsored by the LiMux project of the city of Munich
-//
-// To see a description of the changes please see the Changelog file that
-// came with your tarball or type make ChangeLog if you are building from git
-//
-//========================================================================
-
-//========================================================================
-//
-// Most of the code from Link.cc and PSOutputDev.cc
-//
-// Copyright 1996-2003 Glyph & Cog, LLC
-//
-//========================================================================
-
-#include <config.h>
-
-#include "FileSpec.h"
-
-EmbFile::EmbFile(const Object *efStream)
-{
- m_size = -1;
- m_createDate = nullptr;
- m_modDate = nullptr;
- m_checksum = nullptr;
- m_mimetype = nullptr;
-
- m_objStr = efStream->copy();
-
- if (efStream->isStream()) {
- // dataDict corresponds to Table 3.41 in the PDF1.6 spec.
- Dict *dataDict = efStream->streamGetDict();
-
- // subtype is normally the mimetype
- Object subtypeName = dataDict->lookup("Subtype");
- if (subtypeName.isName()) {
- m_mimetype = new GooString(subtypeName.getName());
- }
-
- // paramDict corresponds to Table 3.42 in the PDF1.6 spec
- Object paramDict = dataDict->lookup("Params");
- if (paramDict.isDict()) {
- Object paramObj = paramDict.dictLookup("ModDate");
- if (paramObj.isString())
- m_modDate = new GooString(paramObj.getString());
-
- paramObj = paramDict.dictLookup("CreationDate");
- if (paramObj.isString())
- m_createDate = new GooString(paramObj.getString());
-
- paramObj = paramDict.dictLookup("Size");
- if (paramObj.isInt())
- m_size = paramObj.getInt();
-
- paramObj = paramDict.dictLookup("CheckSum");
- if (paramObj.isString())
- m_checksum = new GooString(paramObj.getString());
- }
- }
-}
-
-EmbFile::~EmbFile()
-{
- delete m_createDate;
- delete m_modDate;
- delete m_checksum;
- delete m_mimetype;
-}
-
-GBool EmbFile::save(const char *path) {
- FILE *f;
- GBool ret;
-
- if (!(f = fopen(path, "wb"))) {
- return gFalse;
- }
- ret = save2(f);
- fclose(f);
- return ret;
-}
-
-GBool EmbFile::save2(FILE *f) {
- int c;
-
- m_objStr.streamReset();
- while ((c = m_objStr.streamGetChar()) != EOF) {
- fputc(c, f);
- }
- return gTrue;
-}
-
-FileSpec::FileSpec(const Object *fileSpecA)
-{
- ok = gTrue;
- fileName = nullptr;
- platformFileName = nullptr;
- embFile = nullptr;
- desc = nullptr;
- fileSpec = fileSpecA->copy();
-
- Object obj1 = getFileSpecName(fileSpecA);
- if (!obj1.isString()) {
- ok = gFalse;
- error(errSyntaxError, -1, "Invalid FileSpec");
- return;
- }
-
- fileName = obj1.getString()->copy();
-
- if (fileSpec.isDict()) {
- obj1 = fileSpec.dictLookup("EF");
- if (obj1.isDict()) {
- fileStream = obj1.dictLookupNF("F");
- if (!fileStream.isRef()) {
- ok = gFalse;
- fileStream.setToNull();
- error(errSyntaxError, -1, "Invalid FileSpec: Embedded file stream is not an indirect reference");
- return;
- }
- }
- }
-
- obj1 = fileSpec.dictLookup("Desc");
- if (obj1.isString())
- desc = obj1.getString()->copy();
-}
-
-FileSpec::~FileSpec()
-{
- delete fileName;
- delete platformFileName;
- delete embFile;
- delete desc;
-}
-
-EmbFile *FileSpec::getEmbeddedFile()
-{
- if(!ok)
- return nullptr;
-
- if (embFile)
- return embFile;
-
- Object obj1;
- XRef *xref = fileSpec.getDict()->getXRef();
- obj1 = fileStream.fetch(xref);
- embFile = new EmbFile(&obj1);
-
- return embFile;
-}
-
-GooString *FileSpec::getFileNameForPlatform()
-{
- if (platformFileName)
- return platformFileName;
-
- Object obj1 = getFileSpecNameForPlatform(&fileSpec);
- if (obj1.isString())
- platformFileName = obj1.getString()->copy();
-
- return platformFileName;
-}
-
-Object getFileSpecName (const Object *fileSpec)
-{
- if (fileSpec->isString()) {
- return fileSpec->copy();
- }
-
- if (fileSpec->isDict()) {
- Object fileName = fileSpec->dictLookup("UF");
- if (fileName.isString()) {
- return fileName;
- }
- fileName = fileSpec->dictLookup("F");
- if (fileName.isString()) {
- return fileName;
- }
- fileName = fileSpec->dictLookup("DOS");
- if (fileName.isString()) {
- return fileName;
- }
- fileName = fileSpec->dictLookup("Mac");
- if (fileName.isString()) {
- return fileName;
- }
- fileName = fileSpec->dictLookup("Unix");
- if (fileName.isString()) {
- return fileName;
- }
- }
- return Object();
-}
-
-Object getFileSpecNameForPlatform (const Object *fileSpec)
-{
- if (fileSpec->isString()) {
- return fileSpec->copy();
- }
-
- Object fileName;
- if (fileSpec->isDict()) {
- fileName = fileSpec->dictLookup("UF");
- if (!fileName.isString ()) {
- fileName = fileSpec->dictLookup("F");
- if (!fileName.isString ()) {
-#ifdef _WIN32
- const char *platform = "DOS";
-#else
- const char *platform = "Unix";
-#endif
- fileName = fileSpec->dictLookup(platform);
- if (!fileName.isString ()) {
- error(errSyntaxError, -1, "Illegal file spec");
- return Object();
- }
- }
- }
- } else {
- error(errSyntaxError, -1, "Illegal file spec");
- return Object();
- }
-
- // system-dependent path manipulation
-#ifdef _WIN32
- int i, j;
- GooString *name = fileName.getString()->copy();
- // "//...." --> "\...."
- // "/x/...." --> "x:\...."
- // "/server/share/...." --> "\\server\share\...."
- // convert escaped slashes to slashes and unescaped slashes to backslashes
- i = 0;
- if (name->getChar(0) == '/') {
- if (name->getLength() >= 2 && name->getChar(1) == '/') {
- name->del(0);
- i = 0;
- } else if (name->getLength() >= 2 &&
- ((name->getChar(1) >= 'a' && name->getChar(1) <= 'z') ||
- (name->getChar(1) >= 'A' && name->getChar(1) <= 'Z')) &&
- (name->getLength() == 2 || name->getChar(2) == '/')) {
- name->setChar(0, name->getChar(1));
- name->setChar(1, ':');
- i = 2;
- } else {
- for (j = 2; j < name->getLength(); ++j) {
- if (name->getChar(j-1) != '\\' &&
- name->getChar(j) == '/') {
- break;
- }
- }
- if (j < name->getLength()) {
- name->setChar(0, '\\');
- name->insert(0, '\\');
- i = 2;
- }
- }
- }
- for (; i < name->getLength(); ++i) {
- if (name->getChar(i) == '/') {
- name->setChar(i, '\\');
- } else if (name->getChar(i) == '\\' &&
- i+1 < name->getLength() &&
- name->getChar(i+1) == '/') {
- name->del(i);
- }
- }
- fileName = Object(name);
-#endif /* _WIN32 */
-
- return fileName;
-}