2
1
mirror of https://github.com/qpdf/qpdf.git synced 2024-09-30 14:09:09 +00:00
qpdf/libtests/qutil.cc
Jay Berkenbilt 6b9297882e Mark secure CRT warnings with comment
Put a specific comment marker next to every piece of code that MSVC
gives warning 4996 for.  This warning is generated for calls to
functions that Microsoft considers insecure or deprecated.  This
change is in preparation for fixing all these cases even though none
of them are actually incorrect or insecure as used in qpdf.  The
comment marker makes them easier to find so they can be fixed in
subsequent commits.
2013-03-05 13:33:32 -05:00

153 lines
3.6 KiB
C++

#include <iostream>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <qpdf/QUtil.hh>
#include <string.h>
#ifdef _WIN32
# include <io.h>
#else
# include <unistd.h>
#endif
void string_conversion_test()
{
std::cout << QUtil::int_to_string(16059) << std::endl
<< QUtil::int_to_string(16059, 7) << std::endl
<< QUtil::int_to_string(16059, -7) << std::endl
<< QUtil::double_to_string(3.14159) << std::endl
<< QUtil::double_to_string(3.14159, 3) << std::endl
<< QUtil::double_to_string(1000.123, -1024) << std::endl
<< QUtil::double_to_string(.1234, 5) << std::endl
<< QUtil::double_to_string(.0001234, 5) << std::endl
<< QUtil::double_to_string(.123456, 5) << std::endl
<< QUtil::double_to_string(.000123456, 5) << std::endl;
std::string embedded_null = "one";
embedded_null += '\0';
embedded_null += "two";
std::cout << embedded_null.c_str() << std::endl;
std::cout << embedded_null.length() << std::endl;
char* tmp = QUtil::copy_string(embedded_null);
if (memcmp(tmp, embedded_null.c_str(), 7) == 0)
{
std::cout << "compare okay" << std::endl;
}
else
{
std::cout << "compare failed" << std::endl;
}
delete [] tmp;
}
void os_wrapper_test()
{
int fd = -1;
try
{
std::cout << "before open" << std::endl;
fd = QUtil::os_wrapper("open file",
open("/this/file/does/not/exist", O_RDONLY));
std::cout << "after open" << std::endl;
(void) close(fd);
}
catch (std::runtime_error& s)
{
std::cout << "exception: " << s.what() << std::endl;
}
}
void fopen_wrapper_test()
{
FILE* f = 0;
try
{
std::cout << "before fopen" << std::endl;
f = QUtil::fopen_wrapper("fopen file",
fopen("/this/file/does/not/exist", "r")); // XXXX
std::cout << "after fopen" << std::endl;
(void) fclose(f);
}
catch (std::runtime_error& s)
{
std::cout << "exception: " << s.what() << std::endl;
}
}
void getenv_test()
{
std::string val;
std::cout << "IN_TESTSUITE: " << QUtil::get_env("IN_TESTSUITE", &val)
<< ": " << val << std::endl;
// Hopefully this environment variable is not defined.
std::cout << "HAGOOGAMAGOOGLE: " << QUtil::get_env("HAGOOGAMAGOOGLE")
<< std::endl;
}
static void print_utf8(unsigned long val)
{
char t[20];
sprintf(t, "%lx", val); // XXXX
std::string result = QUtil::toUTF8(val);
std::cout << "0x" << t << " ->";
if (val < 0xfffe)
{
std::cout << " " << result;
}
else
{
// Emacs has trouble with utf-8 encoding files with characters
// outside the 16-bit portion, so just show the character
// values.
for (std::string::iterator iter = result.begin();
iter != result.end(); ++iter)
{
char t[3];
sprintf(t, "%02x", static_cast<unsigned char>(*iter)); // XXXX
std::cout << " " << t;
}
}
std::cout << std::endl;
}
void to_utf8_test()
{
print_utf8(0x41UL);
print_utf8(0xF7UL);
print_utf8(0x3c0UL);
print_utf8(0x16059UL);
print_utf8(0x7fffffffUL);
try
{
print_utf8(0x80000000UL);
}
catch (std::runtime_error& e)
{
std::cout << "0x80000000: " << e.what() << std::endl;
}
}
int main(int argc, char* argv[])
{
try
{
string_conversion_test();
std::cout << "----" << std::endl;
os_wrapper_test();
std::cout << "----" << std::endl;
fopen_wrapper_test();
std::cout << "----" << std::endl;
getenv_test();
std::cout << "----" << std::endl;
to_utf8_test();
}
catch (std::exception& e)
{
std::cout << "unexpected exception: " << e.what() << std::endl;
}
return 0;
}