4 * Copyright (c) 1988-1997 Sam Leffler
5 * Copyright (c) 1991-1997 Silicon Graphics, Inc.
7 * Permission to use, copy, modify, distribute, and sell this software and
8 * its documentation for any purpose is hereby granted without fee, provided
9 * that (i) the above copyright notices and this permission notice appear in
10 * all copies of the software and related documentation, and (ii) the names of
11 * Sam Leffler and Silicon Graphics may not be used in any advertising or
12 * publicity relating to the software without the specific, prior written
13 * permission of Sam Leffler and Silicon Graphics.
15 * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
16 * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
17 * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
19 * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
20 * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
21 * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
22 * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
23 * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
28 * TIFF Library UNIX-specific Routines.
31 #include <sys/types.h>
36 _tiffReadProc(thandle_t fd
, tdata_t buf
, tsize_t size
)
38 return ((tsize_t
) read((int) fd
, buf
, (size_t) size
));
42 _tiffWriteProc(thandle_t fd
, tdata_t buf
, tsize_t size
)
44 return ((tsize_t
) write((int) fd
, buf
, (size_t) size
));
48 _tiffSeekProc(thandle_t fd
, toff_t off
, int whence
)
50 return ((toff_t
) lseek((int) fd
, (off_t
) off
, whence
));
54 _tiffCloseProc(thandle_t fd
)
56 return (close((int) fd
));
62 _tiffSizeProc(thandle_t fd
)
66 return ((fsize
= lseek((int) fd
, 0, SEEK_END
)) < 0 ? 0 : fsize
);
69 return (toff_t
) (fstat((int) fd
, &sb
) < 0 ? 0 : sb
.st_size
);
77 _tiffMapProc(thandle_t fd
, tdata_t
* pbase
, toff_t
* psize
)
79 toff_t size
= _tiffSizeProc(fd
);
80 if (size
!= (toff_t
) -1) {
82 mmap(0, size
, PROT_READ
, MAP_SHARED
, (int) fd
, 0);
83 if (*pbase
!= (tdata_t
) -1) {
92 _tiffUnmapProc(thandle_t fd
, tdata_t base
, toff_t size
)
95 (void) munmap(base
, (off_t
) size
);
97 #else /* !HAVE_MMAP */
99 _tiffMapProc(thandle_t fd
, tdata_t
* pbase
, toff_t
* psize
)
101 (void) fd
; (void) pbase
; (void) psize
;
106 _tiffUnmapProc(thandle_t fd
, tdata_t base
, toff_t size
)
108 (void) fd
; (void) base
; (void) size
;
110 #endif /* !HAVE_MMAP */
113 * Open a TIFF file descriptor for read/writing.
116 TIFFFdOpen(int fd
, const char* name
, const char* mode
)
120 tif
= TIFFClientOpen(name
, mode
,
122 _tiffReadProc
, _tiffWriteProc
,
123 _tiffSeekProc
, _tiffCloseProc
, _tiffSizeProc
,
124 _tiffMapProc
, _tiffUnmapProc
);
131 * Open a TIFF file for read/writing.
134 TIFFOpen(const char* name
, const char* mode
)
136 static const char module[] = "TIFFOpen";
139 m
= _TIFFgetMode(mode
, module);
151 fd
= open(name
, m
, 0666);
154 TIFFError(module, "%s: Cannot open", name
);
157 return (TIFFFdOpen(fd
, name
, mode
));
161 _TIFFmalloc(tsize_t s
)
163 return (malloc((size_t) s
));
173 _TIFFrealloc(tdata_t p
, tsize_t s
)
175 return (realloc(p
, (size_t) s
));
179 _TIFFmemset(tdata_t p
, int v
, tsize_t c
)
181 memset(p
, v
, (size_t) c
);
185 _TIFFmemcpy(tdata_t d
, const tdata_t s
, tsize_t c
)
187 memcpy(d
, s
, (size_t) c
);
191 _TIFFmemcmp(const tdata_t p1
, const tdata_t p2
, tsize_t c
)
193 return (memcmp(p1
, p2
, (size_t) c
));
197 unixWarningHandler(const char* module, const char* fmt
, va_list ap
)
200 fprintf(stderr
, "%s: ", module);
201 fprintf(stderr
, "Warning, ");
202 vfprintf(stderr
, fmt
, ap
);
203 fprintf(stderr
, ".\n");
205 TIFFErrorHandler _TIFFwarningHandler
= unixWarningHandler
;
208 unixErrorHandler(const char* module, const char* fmt
, va_list ap
)
211 fprintf(stderr
, "%s: ", module);
212 vfprintf(stderr
, fmt
, ap
);
213 fprintf(stderr
, ".\n");
215 TIFFErrorHandler _TIFFerrorHandler
= unixErrorHandler
;