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 #if USE_64BIT_API == 1
51 return ((toff_t
) lseek64((int) fd
, (off64_t
) off
, whence
));
53 return ((toff_t
) lseek((int) fd
, (off_t
) off
, whence
));
58 _tiffCloseProc(thandle_t fd
)
60 return (close((int) fd
));
66 _tiffSizeProc(thandle_t fd
)
70 return ((fsize
= lseek((int) fd
, 0, SEEK_END
)) < 0 ? 0 : fsize
);
72 #if USE_64BIT_API == 1
74 return (toff_t
) (fstat64((int) fd
, &sb
) < 0 ? 0 : sb
.st_size
);
77 return (toff_t
) (fstat((int) fd
, &sb
) < 0 ? 0 : sb
.st_size
);
86 _tiffMapProc(thandle_t fd
, tdata_t
* pbase
, toff_t
* psize
)
88 toff_t size
= _tiffSizeProc(fd
);
89 if (size
!= (toff_t
) -1) {
91 mmap(0, size
, PROT_READ
, MAP_SHARED
, (int) fd
, 0);
92 if (*pbase
!= (tdata_t
) -1) {
101 _tiffUnmapProc(thandle_t fd
, tdata_t base
, toff_t size
)
104 (void) munmap(base
, (off_t
) size
);
106 #else /* !HAVE_MMAP */
108 _tiffMapProc(thandle_t fd
, tdata_t
* pbase
, toff_t
* psize
)
110 (void) fd
; (void) pbase
; (void) psize
;
115 _tiffUnmapProc(thandle_t fd
, tdata_t base
, toff_t size
)
117 (void) fd
; (void) base
; (void) size
;
119 #endif /* !HAVE_MMAP */
122 * Open a TIFF file descriptor for read/writing.
125 TIFFFdOpen(int fd
, const char* name
, const char* mode
)
129 tif
= TIFFClientOpen(name
, mode
,
131 _tiffReadProc
, _tiffWriteProc
,
132 _tiffSeekProc
, _tiffCloseProc
, _tiffSizeProc
,
133 _tiffMapProc
, _tiffUnmapProc
);
140 * Open a TIFF file for read/writing.
143 TIFFOpen(const char* name
, const char* mode
)
145 static const char module[] = "TIFFOpen";
148 m
= _TIFFgetMode(mode
, module);
160 #if USE_64BIT_API == 1
161 fd
= open(name
, m
| O_LARGEFILE
, 0666);
163 fd
= open(name
, m
, 0666);
167 TIFFError(module, "%s: Cannot open", name
);
170 return (TIFFFdOpen(fd
, name
, mode
));
174 _TIFFmalloc(tsize_t s
)
176 return (malloc((size_t) s
));
186 _TIFFrealloc(tdata_t p
, tsize_t s
)
188 return (realloc(p
, (size_t) s
));
192 _TIFFmemset(tdata_t p
, int v
, tsize_t c
)
194 memset(p
, v
, (size_t) c
);
198 _TIFFmemcpy(tdata_t d
, const tdata_t s
, tsize_t c
)
200 memcpy(d
, s
, (size_t) c
);
204 _TIFFmemcmp(const tdata_t p1
, const tdata_t p2
, tsize_t c
)
206 return (memcmp(p1
, p2
, (size_t) c
));
210 unixWarningHandler(const char* module, const char* fmt
, va_list ap
)
213 fprintf(stderr
, "%s: ", module);
214 fprintf(stderr
, "Warning, ");
215 vfprintf(stderr
, fmt
, ap
);
216 fprintf(stderr
, ".\n");
218 TIFFErrorHandler _TIFFwarningHandler
= unixWarningHandler
;
221 unixErrorHandler(const char* module, const char* fmt
, va_list ap
)
224 fprintf(stderr
, "%s: ", module);
225 vfprintf(stderr
, fmt
, ap
);
226 fprintf(stderr
, ".\n");
228 TIFFErrorHandler _TIFFerrorHandler
= unixErrorHandler
;