freebsd-ports/comms/hylafax/files/patch-FileTransfer.c++
2010-08-26 20:18:50 +00:00

102 lines
3.6 KiB
C++

--- hfaxd/FileTransfer.c++.orig 2009-12-28 20:05:40.000000000 +0100
+++ hfaxd/FileTransfer.c++ 2010-08-26 21:47:16.000000000 +0200
@@ -65,11 +65,31 @@
static const char* strunames[] = { "File", "Record", "Page", "TIFF" };
static const char* modenames[] = { "Stream", "Block", "Compressed", "ZIP" };
+extern "C" {
+/*
+ * TIFF Image File Directories are comprised of a table of field
+ * descriptors of the form shown below. The table is sorted in
+ * ascending order by tag. The values associated with each entry are
+ * disjoint and may appear anywhere in the file (so long as they are
+ * placed on a word boundary).
+ *
+ * If the value is 4 bytes or less, then it is placed in the offset
+ * field to save space. If the value is less than 4 bytes, it is
+ * left-justified in the offset field.
+ */
+typedef struct {
+ uint16 tdir_tag; /* see below */
+ uint16 tdir_type; /* data type; see below */
+ uint32 tdir_count; /* number of items; length in spec */
+ uint32 tdir_offset; /* byte offset to field data */
+} TIFFDirEntry;
+}
+
#define N(a) (sizeof (a) / sizeof (a[0]))
static bool
-isTIFF(const TIFFHeader& h)
+isTIFF(const TIFFHeaderClassic& h)
{
if (h.tiff_magic != TIFF_BIGENDIAN && h.tiff_magic != TIFF_LITTLEENDIAN)
return (false);
@@ -82,7 +102,7 @@
// byte swap version stamp if opposite byte order
if ((u.c[0] == 0) ^ (h.tiff_magic == TIFF_BIGENDIAN))
TIFFSwabShort(&version);
- return (version == TIFF_VERSION);
+ return (version == TIFF_VERSION_CLASSIC);
}
@@ -229,7 +249,7 @@
uint32* sb;
TIFFGetField(tif, TIFFTAG_STRIPBYTECOUNTS, &sb);
file_size = sizeof (DirTemplate) +
- sizeof (TIFFHeader) + sizeof (uint16);
+ sizeof (TIFFHeaderClassic) + sizeof (uint16);
for (tstrip_t s = 0, ns = TIFFNumberOfStrips(tif); s < ns; s++)
file_size += sb[s];
reply(code, "%s for %s (%lu bytes).",
@@ -261,10 +281,10 @@
if (fd >= 0) {
union {
char buf[512];
- TIFFHeader h;
+ TIFFHeaderClassic h;
} b;
ssize_t cc = Sys::read(fd, (char*) &b, sizeof (b));
- if (cc > (ssize_t)sizeof (b.h) && b.h.tiff_version == TIFF_VERSION &&
+ if (cc > (ssize_t)sizeof (b.h) && b.h.tiff_version == TIFF_VERSION_CLASSIC &&
(b.h.tiff_magic == TIFF_BIGENDIAN ||
b.h.tiff_magic == TIFF_LITTLEENDIAN)) {
(void) lseek(fd, 0L, SEEK_SET); // rewind
@@ -343,7 +363,7 @@
{
static DirTemplate templ = {
#define TIFFdiroff(v) \
- (uint32) (sizeof (TIFFHeader) + sizeof (uint16) + \
+ (uint32) (sizeof (TIFFHeaderClassic) + sizeof (uint16) + \
(intptr_t) &(((DirTemplate*) 0)->v))
{ TIFFTAG_SUBFILETYPE, TIFF_LONG, 1 },
{ TIFFTAG_IMAGEWIDTH, TIFF_LONG, 1 },
@@ -377,14 +397,14 @@
* of things about the contents of the TIFF file.
*/
struct {
- TIFFHeader h;
+ TIFFHeaderClassic h;
uint16 dircount;
u_char dirstuff[sizeof (templ)];
} buf;
union { int32 i; char c[4]; } u; u.i = 1;
buf.h.tiff_magic = (u.c[0] == 0 ? TIFF_BIGENDIAN : TIFF_LITTLEENDIAN);
- buf.h.tiff_version = TIFF_VERSION;
- buf.h.tiff_diroff = sizeof (TIFFHeader);
+ buf.h.tiff_version = TIFF_VERSION_CLASSIC;
+ buf.h.tiff_diroff = sizeof (TIFFHeaderClassic);
buf.dircount = (uint16) NTAGS;
getLong(tif, templ.SubFileType);
getLong(tif, templ.ImageWidth);
@@ -957,7 +977,7 @@
if (FileCache::lookup(docname, sb) && S_ISREG(sb.st_mode)) {
union {
char buf[512];
- TIFFHeader h;
+ TIFFHeaderClassic h;
} b;
ssize_t cc = Sys::read(fd, (char*) &b, sizeof (b));
if (cc > 2 && b.buf[0] == '%' && b.buf[1] == '!')