AWARE [SYSTEMS] Imaging expertise for the Delphi developer
AWare Systems, Imaging expertise for the Delphi developer, Home TIFF and LibTiff Mailing List Archive

LibTiff Mailing List

TIFF and LibTiff Mailing List Archive
November 2004

Previous Thread
Next Thread

Previous by Thread
Next by Thread

Previous by Date
Next by Date

Contact

The TIFF Mailing List Homepage
This list is run by Frank Warmerdam
Archive maintained by AWare Systems



Valid HTML 4.01!



Thread

2004.11.17 18:13 "compatibility patch", by Jeff Breidenbach
2004.11.23 20:34 "Re: compatibility patch", by Andrey Kiselev
2004.11.23 20:58 "Re: compatibility patch", by Bob Friesenhahn
2004.11.23 21:24 "Re: compatibility patch", by Edward Lam
2004.11.23 21:28 "Re: compatibility patch", by Edward Lam
2004.11.23 21:51 "Re: compatibility patch", by Bob Friesenhahn
2004.11.23 22:04 "Re: compatibility patch", by Edward Lam
2004.11.23 22:33 "Re: compatibility patch", by Jeff Breidenbach
2004.11.23 23:16 "Re: compatibility patch", by Bob Friesenhahn
2004.11.24 06:33 "Re: compatibility patch", by Andrey Kiselev
2004.11.24 19:39 "Re: compatibility patch", by Jeff Breidenbach
2004.11.24 20:37 "Re: compatibility patch", by Andrey Kiselev
2004.11.24 20:58 "Re: compatibility patch", by Edward Lam
2004.11.24 21:12 "Re: compatibility patch", by Andrey Kiselev
2004.11.24 14:45 "Re: compatibility patch", by Frank Warmerdam
2004.11.24 18:37 "Re: compatibility patch", by Andrey Kiselev
2004.11.28 14:46 "Re: compatibility patch", by Andrey Kiselev

2004.11.17 18:13 "compatibility patch", by Jeff Breidenbach

We submitted this patch a few years ago, didn't hear much.
What do people think now? This makes file I/O interfaces in
libtiff/win32 and libtiff/*nix compatible, which is handy
when writing cross platform applications.

Cheers,
Jeff

-- 
Jeff Breidenbach <jbreiden@parc.com>
Palo Alto Research Center (PARC)



diff -uNr tiff-3.7.0/libtiff/Makefile.vc /tilde/jbreiden/tiff-3.7.0/libtiff/Makefile.vc
--- tiff-3.7.0/libtiff/Makefile.vc	2004-09-12 08:00:27.000000000 -0700
+++ /tilde/jbreiden/tiff-3.7.0/libtiff/Makefile.vc	2004-11-16 19:13:31.000000000 -0800
@@ -63,7 +63,7 @@
 	tif_strip.obj \
 	tif_thunder.obj \
 	tif_tile.obj \
-	tif_win32.obj \
+	tif_win32CRT.obj \
 	tif_version.obj \
 	tif_warning.obj \
 	tif_write.obj \

diff -uNr tiff-3.7.0/libtiff/tif_win32CRT.c /tilde/jbreiden/tiff-3.7.0/libtiff/tif_win32CRT.c
--- tiff-3.7.0/libtiff/tif_win32CRT.c	1969-12-31 16:00:00.000000000 -0800
+++ /tilde/jbreiden/tiff-3.7.0/libtiff/tif_win32CRT.c	2004-11-16 19:13:31.000000000 -0800
@@ -0,0 +1,241 @@
+/* $Header: /cvsroot/dataglyphs/dataglyph3/src/libtiff-v3.5.5.diff,v 1.1 2000/08/03 21:06:57 jbreiden Exp $ */
+
+/*
+ * Copyright (c) 1988-1997 Sam Leffler
+ * Copyright (c) 1991-1997 Silicon Graphics, Inc.
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and
+ * its documentation for any purpose is hereby granted without fee, provided
+ * that (i) the above copyright notices and this permission notice appear in
+ * all copies of the software and related documentation, and (ii) the names of
+ * Sam Leffler and Silicon Graphics may not be used in any advertising or
+ * publicity relating to the software without the specific, prior written
+ * permission of Sam Leffler and Silicon Graphics.
+ *
+ * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
+ * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
+ * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
+ * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
+ * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THIS SOFTWARE.
+ */
+
+/*
+ * TIFF Library Windows-specific Routines.
+ *     (they're much less windows specific now.)
+ */
+
+/* This file is a replacement for tif_win32.c and greatly improves the
+ * application writer's ability to produce portable code. For example,
+ * the following code snippet will now run on both unix and win32.
+ * 
+ * fp = fopen( "foo.tif", "rb")
+ * TIFFFdOpen(fileno(fp),"r");
+ *
+ * This is actually an important case, as (FILE *) fp's are often
+ * passed through programming interfaces.
+ *
+ * The previous situation had us using OS interfaces for win32 file
+ * i/o (like FileCreate) which produced a strange mixture of file
+ * descriptors and OS file handles and forces portable application
+ * writers to pepper their code with platform specific #ifdef's.
+ *
+ * This file was derived from tif_unix.c and uses the c runtime access
+ * to access the file system.
+ *
+ * Dan Larner
+ * larner@parc.xerox.com
+ * 12-2-99 
+ *
+ */
+
+#include "tiffiop.h"
+#include <sys/types.h>
+#include <io.h>
+#include <stdlib.h>
+
+static tsize_t
+_tiffReadProc(thandle_t fd, tdata_t buf, tsize_t size)
+{
+        return ((tsize_t) _read((int) fd, buf, (size_t) size));
+}
+
+static tsize_t
+_tiffWriteProc(thandle_t fd, tdata_t buf, tsize_t size)
+{
+        return ((tsize_t) _write((int) fd, buf, (size_t) size));
+}
+
+static toff_t
+_tiffSeekProc(thandle_t fd, toff_t off, int whence)
+{
+        return ((toff_t) _lseek((int) fd, (off_t) off, whence));
+}
+
+static int
+_tiffCloseProc(thandle_t fd)
+{
+        return (_close((int) fd));
+}
+
+#include <sys/stat.h>
+
+static toff_t
+_tiffSizeProc(thandle_t fd)
+{
+#ifdef _AM29K
+        long fsize;
+        return ((fsize = _lseek((int) fd, 0, SEEK_END)) < 0 ? 0 : fsize);
+#else
+        struct _stat sb;
+        return (toff_t) (_fstat((int) fd, &sb) < 0 ? 0 : sb.st_size);
+#endif
+}
+
+#ifdef HAVE_MMAP
+#include <sys/mman.h>
+
+static int
+_tiffMapProc(thandle_t fd, tdata_t* pbase, toff_t* psize)
+{
+        toff_t size = _tiffSizeProc(fd);
+        if (size != (toff_t) -1) {
+                *pbase = (tdata_t)
+                    mmap(0, size, PROT_READ, MAP_SHARED, (int) fd, 0);
+                if (*pbase != (tdata_t) -1) {
+                        *psize = size;
+                        return (1);
+                }
+        }
+        return (0);
+}
+
+static void
+_tiffUnmapProc(thandle_t fd, tdata_t base, toff_t size)
+{
+        (void) fd;
+        (void) munmap(base, (off_t) size);
+}
+#else /* !HAVE_MMAP */
+static int
+_tiffMapProc(thandle_t fd, tdata_t* pbase, toff_t* psize)
+{
+        (void) fd; (void) pbase; (void) psize;
+        return (0);
+}
+
+static void
+_tiffUnmapProc(thandle_t fd, tdata_t base, toff_t size)
+{
+        (void) fd; (void) base; (void) size;
+}
+#endif /* !HAVE_MMAP */
+
+/*
+ * Open a TIFF file descriptor for read/writing.
+ */
+TIFF*
+TIFFFdOpen(int fd, const char* name, const char* mode)
+{
+        TIFF* tif;
+
+        tif = TIFFClientOpen(name, mode,
+            (thandle_t) fd,
+            _tiffReadProc, _tiffWriteProc,
+            _tiffSeekProc, _tiffCloseProc, _tiffSizeProc,
+            _tiffMapProc, _tiffUnmapProc);
+        if (tif)
+                tif->tif_fd = fd;
+        return (tif);
+}
+
+/*
+ * Open a TIFF file for read/writing.
+ */
+TIFF*
+TIFFOpen(const char* name, const char* mode)
+{
+        static const char module[] = "TIFFOpen";
+        int m, fd;
+
+        m = _TIFFgetMode(mode, module);
+        if (m == -1)
+                return ((TIFF*)0);
+
+/* for cygwin */
+#ifdef O_BINARY
+        m |= O_BINARY;
+#endif
+
+#ifdef _AM29K
+        fd = open(name, m);
+#else
+        fd = open(name, m, 0666);
+#endif
+        if (fd < 0) {
+                TIFFError(module, "%s: Cannot open", name);
+                return ((TIFF *)0);
+        }
+        return (TIFFFdOpen(fd, name, mode));
+}
+
+void*
+_TIFFmalloc(tsize_t s)
+{
+        return (malloc((size_t) s));
+}
+
+void
+_TIFFfree(tdata_t p)
+{
+        free(p);
+}
+
+void*
+_TIFFrealloc(tdata_t p, tsize_t s)
+{
+        return (realloc(p, (size_t) s));
+}
+
+void
+_TIFFmemset(tdata_t p, int v, tsize_t c)
+{
+        memset(p, v, (size_t) c);
+}
+
+void
+_TIFFmemcpy(tdata_t d, const tdata_t s, tsize_t c)
+{
+        memcpy(d, s, (size_t) c);
+}
+
+int
+_TIFFmemcmp(const tdata_t p1, const tdata_t p2, tsize_t c)
+{
+        return (memcmp(p1, p2, (size_t) c));
+}
+
+static void
+unixWarningHandler(const char* module, const char* fmt, va_list ap)
+{
+        if (module != NULL)
+                fprintf(stderr, "%s: ", module);
+        fprintf(stderr, "Warning, ");
+        vfprintf(stderr, fmt, ap);
+        fprintf(stderr, ".\n");
+}
+TIFFErrorHandler _TIFFwarningHandler = unixWarningHandler;
+
+static void
+unixErrorHandler(const char* module, const char* fmt, va_list ap)
+{
+        if (module != NULL)
+                fprintf(stderr, "%s: ", module);
+        vfprintf(stderr, fmt, ap);
+        fprintf(stderr, ".\n");
+}
+TIFFErrorHandler _TIFFerrorHandler = unixErrorHandler;