2
1
mirror of https://github.com/qpdf/qpdf.git synced 2025-01-03 15:17:29 +00:00

Change QPDF_Integer from int to long long

This makes it possible to store offsets that are larger than 2 GB in
the trailer dictionary.
This commit is contained in:
Jay Berkenbilt 2012-06-23 15:08:21 -04:00
parent 4ef95dbda4
commit 781c313058
7 changed files with 16 additions and 15 deletions

View File

@ -529,8 +529,8 @@ class QPDF
void setTrailer(QPDFObjectHandle obj);
void read_xref(qpdf_offset_t offset);
void reconstruct_xref(QPDFExc& e);
int read_xrefTable(qpdf_offset_t offset);
int read_xrefStream(qpdf_offset_t offset);
qpdf_offset_t read_xrefTable(qpdf_offset_t offset);
qpdf_offset_t read_xrefStream(qpdf_offset_t offset);
int processXRefStream(qpdf_offset_t offset, QPDFObjectHandle& xref_stream);
void insertXrefEntry(int obj, int f0, int f1, int f2,
bool overwrite = false);

View File

@ -98,7 +98,7 @@ class QPDFObjectHandle
QPDF_DLL
static QPDFObjectHandle newBool(bool value);
QPDF_DLL
static QPDFObjectHandle newInteger(int value);
static QPDFObjectHandle newInteger(long long value);
QPDF_DLL
static QPDFObjectHandle newReal(std::string const& value);
QPDF_DLL
@ -150,7 +150,7 @@ class QPDFObjectHandle
// Methods for integer objects
QPDF_DLL
int getIntValue();
long long getIntValue();
// Methods for real objects
QPDF_DLL

View File

@ -659,7 +659,7 @@ QPDF::read_xref(qpdf_offset_t xref_offset)
this->deleted_objects.clear();
}
int
qpdf_offset_t
QPDF::read_xrefTable(qpdf_offset_t xref_offset)
{
PCRE xref_first_re("^\\s*(\\d+)\\s+(\\d+)");
@ -816,7 +816,7 @@ QPDF::read_xrefTable(qpdf_offset_t xref_offset)
return xref_offset;
}
int
qpdf_offset_t
QPDF::read_xrefStream(qpdf_offset_t xref_offset)
{
bool found = false;
@ -1247,7 +1247,7 @@ QPDF::readObjectInternal(PointerHolder<InputSource> input,
case QPDFTokenizer::tt_integer:
object = QPDFObjectHandle::newInteger(
atoi(token.getValue().c_str()));
QUtil::string_to_ll(token.getValue().c_str()));
break;
case QPDFTokenizer::tt_real:
@ -1892,7 +1892,7 @@ QPDF::resolveObjectsInStream(int obj_stream_number)
}
int num = atoi(tnum.getValue().c_str());
int offset = atoi(toffset.getValue().c_str());
int offset = QUtil::string_to_ll(toffset.getValue().c_str());
offsets[num] = offset + first;
}

View File

@ -189,7 +189,7 @@ QPDFObjectHandle::getBoolValue()
// Integer accessors
int
long long
QPDFObjectHandle::getIntValue()
{
assertType("Integer", isInteger());
@ -592,7 +592,7 @@ QPDFObjectHandle::newNull()
}
QPDFObjectHandle
QPDFObjectHandle::newInteger(int value)
QPDFObjectHandle::newInteger(long long value)
{
return QPDFObjectHandle(new QPDF_Integer(value));
}

View File

@ -881,6 +881,7 @@ QPDFWriter::writeTrailer(trailer_e which, int size, bool xref_stream, int prev)
writeString(" /Prev ");
qpdf_offset_t pos = this->pipeline->getCount();
writeString(QUtil::int_to_string(prev));
// XXX
int nspaces = (int)(pos - this->pipeline->getCount() + 11);
assert(nspaces >= 0);
writePad(nspaces);

View File

@ -2,7 +2,7 @@
#include <qpdf/QUtil.hh>
QPDF_Integer::QPDF_Integer(int val) :
QPDF_Integer::QPDF_Integer(long long val) :
val(val)
{
}
@ -17,7 +17,7 @@ QPDF_Integer::unparse()
return QUtil::int_to_string(this->val);
}
int
long long
QPDF_Integer::getVal() const
{
return this->val;

View File

@ -6,13 +6,13 @@
class QPDF_Integer: public QPDFObject
{
public:
QPDF_Integer(int val);
QPDF_Integer(long long val);
virtual ~QPDF_Integer();
virtual std::string unparse();
int getVal() const;
long long getVal() const;
private:
int val;
long long val;
};
#endif // __QPDF_INTEGER_HH__