mirror of
https://github.com/qpdf/qpdf.git
synced 2024-12-22 19:08:59 +00:00
Fix a few compiler errors reported correctly my MSVC 9.0.
Fix libtests test suites to pass on Windows, mostly by dealing with ascii vs. binary and NL vs. CRNL change ($td->NORMALIZE_NEWLINES). Convert some test suites to use fread instead of read. PCRE.hh: define PCRE_STATIC if on Windows. Provide cross-platform function for getting current time instead of using time(0). git-svn-id: svn+q:///qpdf/trunk@678 71b93d88-0707-0410-a8cf-f5a4172ac649
This commit is contained in:
parent
0b87334a61
commit
a9987ab570
@ -37,6 +37,8 @@ namespace QUtil
|
|||||||
// non-null, initializes it with the value of the variable.
|
// non-null, initializes it with the value of the variable.
|
||||||
bool get_env(std::string const& var, std::string* value = 0);
|
bool get_env(std::string const& var, std::string* value = 0);
|
||||||
|
|
||||||
|
time_t get_current_time();
|
||||||
|
|
||||||
// Return a string containing the byte representation of the UTF-8
|
// Return a string containing the byte representation of the UTF-8
|
||||||
// encoding for the unicode value passed in.
|
// encoding for the unicode value passed in.
|
||||||
std::string toUTF8(unsigned long uval);
|
std::string toUTF8(unsigned long uval);
|
||||||
|
@ -241,7 +241,7 @@ QPDF::ObjGen::ObjGen(int o = 0, int g = 0) :
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
QPDF::ObjGen::ObjGen::operator<(ObjGen const& rhs) const
|
QPDF::ObjGen::operator<(ObjGen const& rhs) const
|
||||||
{
|
{
|
||||||
return ((this->obj < rhs.obj) ||
|
return ((this->obj < rhs.obj) ||
|
||||||
((this->obj == rhs.obj) && (this->gen < rhs.gen)));
|
((this->obj == rhs.obj) && (this->gen < rhs.gen)));
|
||||||
|
@ -1110,7 +1110,7 @@ QPDFWriter::generateID()
|
|||||||
// the file yet. This scheme should be fine though.
|
// the file yet. This scheme should be fine though.
|
||||||
|
|
||||||
std::string seed;
|
std::string seed;
|
||||||
seed += QUtil::int_to_string((int)time(0));
|
seed += QUtil::int_to_string((int)QUtil::get_current_time());
|
||||||
seed += " QPDF ";
|
seed += " QPDF ";
|
||||||
seed += filename;
|
seed += filename;
|
||||||
seed += " ";
|
seed += " ";
|
||||||
|
@ -45,7 +45,7 @@ QPDF::trim_user_password(std::string& user_password)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
char* p = 0;
|
char const* p = 0;
|
||||||
while ((p = strchr(cstr, '\x28')) != 0)
|
while ((p = strchr(cstr, '\x28')) != 0)
|
||||||
{
|
{
|
||||||
if (memcmp(p, padding_string, len - (p - cstr)) == 0)
|
if (memcmp(p, padding_string, len - (p - cstr)) == 0)
|
||||||
|
@ -624,7 +624,7 @@ QPDF::maxEnd(ObjUser const& ou)
|
|||||||
assert(this->obj_user_to_objects.count(ou) > 0);
|
assert(this->obj_user_to_objects.count(ou) > 0);
|
||||||
std::set<ObjGen> const& ogs = this->obj_user_to_objects[ou];
|
std::set<ObjGen> const& ogs = this->obj_user_to_objects[ou];
|
||||||
int end = 0;
|
int end = 0;
|
||||||
for (std::set<ObjGen>::iterator iter = ogs.begin();
|
for (std::set<ObjGen>::const_iterator iter = ogs.begin();
|
||||||
iter != ogs.end(); ++iter)
|
iter != ogs.end(); ++iter)
|
||||||
{
|
{
|
||||||
ObjGen const& og = *iter;
|
ObjGen const& og = *iter;
|
||||||
|
@ -141,6 +141,32 @@ QUtil::get_env(std::string const& var, std::string* value)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
time_t
|
||||||
|
QUtil::get_current_time()
|
||||||
|
{
|
||||||
|
#ifdef _WIN32
|
||||||
|
// The procedure to get local time at this resolution comes from
|
||||||
|
// the Microsoft documentation. It says to convert a SYSTEMTIME
|
||||||
|
// to a FILETIME, and to copy the FILETIME to a ULARGE_INTEGER.
|
||||||
|
// The resulting number is the number of 100-nanosecond intervals
|
||||||
|
// between January 1, 1601 and now. POSIX threads wants a time
|
||||||
|
// based on January 1, 1970, so we adjust by subtracting the
|
||||||
|
// number of seconds in that time period from the result we get
|
||||||
|
// here.
|
||||||
|
SYSTEMTIME sysnow;
|
||||||
|
GetSystemTime(&sysnow);
|
||||||
|
FILETIME filenow;
|
||||||
|
SystemTimeToFileTime(&sysnow, &filenow);
|
||||||
|
ULARGE_INTEGER uinow;
|
||||||
|
uinow.LowPart = filenow.dwLowDateTime;
|
||||||
|
uinow.HighPart = filenow.dwHighDateTime;
|
||||||
|
ULONGLONG now = uinow.QuadPart;
|
||||||
|
return ((now / 10000000LL) - 11644473600LL);
|
||||||
|
#else
|
||||||
|
return time(0);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
std::string
|
std::string
|
||||||
QUtil::toUTF8(unsigned long uval)
|
QUtil::toUTF8(unsigned long uval)
|
||||||
{
|
{
|
||||||
|
@ -5,6 +5,9 @@
|
|||||||
#ifndef __PCRE_HH__
|
#ifndef __PCRE_HH__
|
||||||
#define __PCRE_HH__
|
#define __PCRE_HH__
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
# define PCRE_STATIC
|
||||||
|
#endif
|
||||||
#include <pcre.h>
|
#include <pcre.h>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
|
@ -15,7 +15,7 @@ int main()
|
|||||||
bool done = false;
|
bool done = false;
|
||||||
while (! done)
|
while (! done)
|
||||||
{
|
{
|
||||||
int len = read(0, buf, sizeof(buf));
|
int len = fread(buf, 1, sizeof(buf), stdin);
|
||||||
if (len <= 0)
|
if (len <= 0)
|
||||||
{
|
{
|
||||||
done = true;
|
done = true;
|
||||||
|
@ -15,7 +15,7 @@ int main()
|
|||||||
bool done = false;
|
bool done = false;
|
||||||
while (! done)
|
while (! done)
|
||||||
{
|
{
|
||||||
int len = read(0, buf, sizeof(buf));
|
int len = fread(buf, 1, sizeof(buf), stdin);
|
||||||
if (len <= 0)
|
if (len <= 0)
|
||||||
{
|
{
|
||||||
done = true;
|
done = true;
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
#include <qpdf/Pl_LZWDecoder.hh>
|
#include <qpdf/Pl_LZWDecoder.hh>
|
||||||
|
|
||||||
#include <qpdf/Pl_StdioFile.hh>
|
#include <qpdf/Pl_StdioFile.hh>
|
||||||
|
#include <qpdf/QUtil.hh>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
@ -8,21 +9,36 @@
|
|||||||
int main(int argc, char* argv[])
|
int main(int argc, char* argv[])
|
||||||
{
|
{
|
||||||
bool early_code_change = true;
|
bool early_code_change = true;
|
||||||
if ((argc == 2) && (strcmp(argv[1], "--no-early-code-change") == 0))
|
if ((argc == 4) && (strcmp(argv[3], "--no-early-code-change") == 0))
|
||||||
{
|
{
|
||||||
early_code_change = false;
|
early_code_change = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
Pl_StdioFile out("stdout", stdout);
|
if (argc < 3)
|
||||||
Pl_LZWDecoder decode("decode", &out, early_code_change);
|
{
|
||||||
|
std::cerr << "Usage: lzw infile outfile [ --no-early-code-change ]"
|
||||||
|
<< std::endl;
|
||||||
|
exit(2);
|
||||||
|
}
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
char* infilename = argv[1];
|
||||||
|
char* outfilename = argv[2];
|
||||||
|
|
||||||
|
FILE* infile = QUtil::fopen_wrapper("open input file",
|
||||||
|
fopen(infilename, "rb"));
|
||||||
|
FILE* outfile = QUtil::fopen_wrapper("open output file",
|
||||||
|
fopen(outfilename, "wb"));
|
||||||
|
|
||||||
|
Pl_StdioFile out("output", outfile);
|
||||||
|
Pl_LZWDecoder decode("decode", &out, early_code_change);
|
||||||
|
|
||||||
unsigned char buf[10000];
|
unsigned char buf[10000];
|
||||||
bool done = false;
|
bool done = false;
|
||||||
while (! done)
|
while (! done)
|
||||||
{
|
{
|
||||||
int len = read(0, buf, sizeof(buf));
|
int len = fread(buf, 1, sizeof(buf), infile);
|
||||||
if (len <= 0)
|
if (len <= 0)
|
||||||
{
|
{
|
||||||
done = true;
|
done = true;
|
||||||
|
@ -17,6 +17,7 @@ $td->runtest("decode",
|
|||||||
$td->runtest("partial decode",
|
$td->runtest("partial decode",
|
||||||
{$td->COMMAND => "echo '\@<5skEHbu7\$3~>' | ascii85"},
|
{$td->COMMAND => "echo '\@<5skEHbu7\$3~>' | ascii85"},
|
||||||
{$td->STRING => "asdfqwer\n",
|
{$td->STRING => "asdfqwer\n",
|
||||||
$td->EXIT_STATUS => 0});
|
$td->EXIT_STATUS => 0},
|
||||||
|
$td->NORMALIZE_NEWLINES);
|
||||||
|
|
||||||
$td->report(2);
|
$td->report(2);
|
||||||
|
@ -12,6 +12,7 @@ my $td = new TestDriver('bits');
|
|||||||
$td->runtest("bits",
|
$td->runtest("bits",
|
||||||
{$td->COMMAND => "bits"},
|
{$td->COMMAND => "bits"},
|
||||||
{$td->FILE => "bits.out",
|
{$td->FILE => "bits.out",
|
||||||
$td->EXIT_STATUS => 0});
|
$td->EXIT_STATUS => 0},
|
||||||
|
$td->NORMALIZE_NEWLINES);
|
||||||
|
|
||||||
$td->report(1);
|
$td->report(1);
|
||||||
|
@ -12,6 +12,7 @@ my $td = new TestDriver('buffer');
|
|||||||
$td->runtest("buffer",
|
$td->runtest("buffer",
|
||||||
{$td->COMMAND => "buffer"},
|
{$td->COMMAND => "buffer"},
|
||||||
{$td->FILE => "buffer.out",
|
{$td->FILE => "buffer.out",
|
||||||
$td->EXIT_STATUS => 0});
|
$td->EXIT_STATUS => 0},
|
||||||
|
$td->NORMALIZE_NEWLINES);
|
||||||
|
|
||||||
$td->report(1);
|
$td->report(1);
|
||||||
|
@ -12,7 +12,7 @@ my $td = new TestDriver('lzw');
|
|||||||
cleanup();
|
cleanup();
|
||||||
|
|
||||||
$td->runtest("decode: early code change",
|
$td->runtest("decode: early code change",
|
||||||
{$td->COMMAND => "lzw < lzw1.in > tmp"},
|
{$td->COMMAND => "lzw lzw1.in tmp"},
|
||||||
{$td->STRING => "",
|
{$td->STRING => "",
|
||||||
$td->EXIT_STATUS => 0});
|
$td->EXIT_STATUS => 0});
|
||||||
|
|
||||||
@ -21,7 +21,7 @@ $td->runtest("check output",
|
|||||||
{$td->FILE => "lzw1.out"});
|
{$td->FILE => "lzw1.out"});
|
||||||
|
|
||||||
$td->runtest("decode: no early code change",
|
$td->runtest("decode: no early code change",
|
||||||
{$td->COMMAND => "lzw --no-early-code-change < lzw2.in > tmp"},
|
{$td->COMMAND => "lzw lzw2.in tmp --no-early-code-change"},
|
||||||
{$td->STRING => "",
|
{$td->STRING => "",
|
||||||
$td->EXIT_STATUS => 0});
|
$td->EXIT_STATUS => 0});
|
||||||
|
|
||||||
|
@ -12,6 +12,7 @@ my $td = new TestDriver('md5');
|
|||||||
$td->runtest("md5",
|
$td->runtest("md5",
|
||||||
{$td->COMMAND => "md5"},
|
{$td->COMMAND => "md5"},
|
||||||
{$td->FILE => "md5.out",
|
{$td->FILE => "md5.out",
|
||||||
$td->EXIT_STATUS => 0});
|
$td->EXIT_STATUS => 0},
|
||||||
|
$td->NORMALIZE_NEWLINES);
|
||||||
|
|
||||||
$td->report(1);
|
$td->report(1);
|
||||||
|
@ -16,7 +16,7 @@ $td->runtest("PCRE",
|
|||||||
$td->NORMALIZE_NEWLINES);
|
$td->NORMALIZE_NEWLINES);
|
||||||
|
|
||||||
chop(my $supported = `pcre --unicode-classes-supported`);
|
chop(my $supported = `pcre --unicode-classes-supported`);
|
||||||
if ($supported)
|
if ($supported =~ m/^1/)
|
||||||
{
|
{
|
||||||
$td->runtest("unicode character classes",
|
$td->runtest("unicode character classes",
|
||||||
{$td->COMMAND => "pcre --unicode-classes"},
|
{$td->COMMAND => "pcre --unicode-classes"},
|
||||||
|
@ -12,6 +12,7 @@ my $td = new TestDriver('ph');
|
|||||||
$td->runtest("PointerHolder",
|
$td->runtest("PointerHolder",
|
||||||
{$td->COMMAND => "pointer_holder"},
|
{$td->COMMAND => "pointer_holder"},
|
||||||
{$td->FILE => "ph.out",
|
{$td->FILE => "ph.out",
|
||||||
$td->EXIT_STATUS => 0});
|
$td->EXIT_STATUS => 0},
|
||||||
|
$td->NORMALIZE_NEWLINES);
|
||||||
|
|
||||||
$td->report(1);
|
$td->report(1);
|
||||||
|
@ -12,6 +12,7 @@ my $td = new TestDriver('qutil');
|
|||||||
$td->runtest("QUtil",
|
$td->runtest("QUtil",
|
||||||
{$td->COMMAND => "qutil"},
|
{$td->COMMAND => "qutil"},
|
||||||
{$td->FILE => "qutil.out",
|
{$td->FILE => "qutil.out",
|
||||||
$td->EXIT_STATUS => 0});
|
$td->EXIT_STATUS => 0},
|
||||||
|
$td->NORMALIZE_NEWLINES);
|
||||||
|
|
||||||
$td->report(1);
|
$td->report(1);
|
||||||
|
@ -532,7 +532,7 @@ int main(int argc, char* argv[])
|
|||||||
// Be lax about -arg vs --arg
|
// Be lax about -arg vs --arg
|
||||||
++arg;
|
++arg;
|
||||||
}
|
}
|
||||||
char* parameter = strchr(arg, '=');
|
char* parameter = (char*)strchr(arg, '=');
|
||||||
if (parameter)
|
if (parameter)
|
||||||
{
|
{
|
||||||
*parameter++ = 0;
|
*parameter++ = 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user