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
;