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
;