LCOV - code coverage report
Current view: top level - frmts/gtiff/libtiff - tif_vsi.c (source / functions) Hit Total Coverage
Test: gdal_filtered.info Lines: 25 78 32.1 %
Date: 2024-11-21 22:18:42 Functions: 8 19 42.1 %

          Line data    Source code
       1             : /******************************************************************************
       2             :  * $Id$
       3             :  *
       4             :  * Project:  GeoTIFF Driver
       5             :  * Purpose:  Implement system hook functions for libtiff on top of CPL/VSI,
       6             :  *           including > 2GB support.  Based on tif_unix.c from libtiff
       7             :  *           distribution.
       8             :  * Author:   Frank Warmerdam, warmerdam@pobox.com
       9             :  *
      10             :  ******************************************************************************
      11             :  * Copyright (c) 2000, Frank Warmerdam, warmerdam@pobox.com
      12             :  *
      13             :  * SPDX-License-Identifier: MIT
      14             :  ****************************************************************************/
      15             : 
      16             : /*
      17             :  * TIFF Library UNIX-specific Routines.
      18             :  */
      19             : #include "tiffiop.h"
      20             : #include "cpl_vsi.h"
      21             : 
      22           0 : CPL_INLINE static void CPL_IGNORE_RET_VAL_INT(CPL_UNUSED int unused) {}
      23             : 
      24             : static tsize_t
      25           0 : _tiffReadProc(thandle_t fd, tdata_t buf, tsize_t size)
      26             : {
      27           0 :     return VSIFReadL( buf, 1, size, (VSILFILE *) fd );
      28             : }
      29             : 
      30             : static tsize_t
      31           0 : _tiffWriteProc(thandle_t fd, tdata_t buf, tsize_t size)
      32             : {
      33           0 :     return VSIFWriteL( buf, 1, size, (VSILFILE *) fd );
      34             : }
      35             : 
      36             : static toff_t
      37           0 : _tiffSeekProc(thandle_t fd, toff_t off, int whence)
      38             : {
      39           0 :     if( VSIFSeekL( (VSILFILE *) fd, off, whence ) == 0 )
      40           0 :         return (toff_t) VSIFTellL( (VSILFILE *) fd );
      41             :     else
      42           0 :         return (toff_t) -1;
      43             : }
      44             : 
      45             : static int
      46           0 : _tiffCloseProc(thandle_t fd)
      47             : {
      48           0 :     return VSIFCloseL( (VSILFILE *) fd );
      49             : }
      50             : 
      51             : static toff_t
      52           0 : _tiffSizeProc(thandle_t fd)
      53             : {
      54             :     vsi_l_offset  old_off;
      55             :     toff_t        file_size;
      56             : 
      57           0 :     old_off = VSIFTellL( (VSILFILE *) fd );
      58           0 :     CPL_IGNORE_RET_VAL_INT(VSIFSeekL( (VSILFILE *) fd, 0, SEEK_END ));
      59             : 
      60           0 :     file_size = (toff_t) VSIFTellL( (VSILFILE *) fd );
      61           0 :     CPL_IGNORE_RET_VAL_INT(VSIFSeekL( (VSILFILE *) fd, old_off, SEEK_SET ));
      62             : 
      63           0 :     return file_size;
      64             : }
      65             : 
      66             : static int
      67           0 : _tiffMapProc(thandle_t fd, tdata_t* pbase, toff_t* psize)
      68             : {
      69             :   (void) fd; (void) pbase; (void) psize;
      70           0 :   return (0);
      71             : }
      72             : 
      73             : static void
      74           0 : _tiffUnmapProc(thandle_t fd, tdata_t base, toff_t size)
      75             : {
      76             :   (void) fd; (void) base; (void) size;
      77           0 : }
      78             : 
      79             : /*
      80             :  * Open a TIFF file descriptor for read/writing.
      81             :  */
      82             : TIFF*
      83           0 : TIFFFdOpen(CPL_UNUSED int fd, CPL_UNUSED const char* name, CPL_UNUSED const char* mode)
      84             : {
      85           0 :   return NULL;
      86             : }
      87             : 
      88             : /*
      89             :  * Open a TIFF file for read/writing.
      90             :  */
      91             : TIFF*
      92           0 : TIFFOpen(const char* name, const char* mode)
      93             : {
      94             :   static const char module[] = "TIFFOpen";
      95             :   int           i, a_out;
      96             :         char          szAccess[32];
      97             :         VSILFILE          *fp;
      98             :         TIFF          *tif;
      99           0 :         char         *pszAccess = szAccess;
     100             : 
     101           0 :         a_out = 0;
     102           0 :         pszAccess[0] = '\0';
     103           0 :         for( i = 0; mode[i] != '\0'; i++ )
     104             :         {
     105           0 :             if( mode[i] == 'r'
     106           0 :                 || mode[i] == 'w'
     107           0 :                 || mode[i] == '+'
     108           0 :                 || mode[i] == 'a' )
     109             :             {
     110           0 :                 szAccess[a_out++] = mode[i];
     111           0 :                 szAccess[a_out] = '\0';
     112             :             }
     113             :         }
     114             : 
     115           0 :         strcat( szAccess, "b" );
     116             : 
     117           0 :         fp = VSIFOpenL( name, szAccess );
     118           0 :   if (fp == NULL) {
     119           0 :             if( errno >= 0 )
     120           0 :                 TIFFError(module,"%s: %s", name, VSIStrerror( errno ) );
     121             :             else
     122           0 :     TIFFError(module, "%s: Cannot open", name);
     123           0 :             return ((TIFF *)0);
     124             :   }
     125             : 
     126           0 :   tif = TIFFClientOpen(name, mode,
     127             :       (thandle_t) fp,
     128             :       _tiffReadProc, _tiffWriteProc,
     129             :       _tiffSeekProc, _tiffCloseProc, _tiffSizeProc,
     130             :       _tiffMapProc, _tiffUnmapProc);
     131             : 
     132           0 :         if( tif != NULL )
     133           0 :             tif->tif_fd = 0;
     134             :         else
     135           0 :             CPL_IGNORE_RET_VAL_INT(VSIFCloseL( fp ));
     136             :         
     137           0 :   return tif;
     138             : }
     139             : 
     140             : void*
     141      784843 : _TIFFmalloc(tsize_t s)
     142             : {
     143      784843 :     return VSIMalloc((size_t) s);
     144             : }
     145             : 
     146       71196 : void* _TIFFcalloc(tmsize_t nmemb, tmsize_t siz)
     147             : {
     148       71196 :     if( nmemb == 0 || siz == 0 )
     149           4 :         return ((void *) NULL);
     150             : 
     151       71192 :     return VSICalloc((size_t) nmemb, (size_t)siz);
     152             : }
     153             : 
     154             : void
     155     1913180 : _TIFFfree(tdata_t p)
     156             : {
     157     1913180 :     VSIFree( p );
     158     1913390 : }
     159             : 
     160             : void*
     161     1598330 : _TIFFrealloc(tdata_t p, tsize_t s)
     162             : {
     163     1598330 :     return VSIRealloc( p, s );
     164             : }
     165             : 
     166             : void
     167     1032830 : _TIFFmemset(void* p, int v, tmsize_t c)
     168             : {
     169     1032830 :   memset(p, v, (size_t) c);
     170     1032830 : }
     171             : 
     172             : void
     173     1952720 : _TIFFmemcpy(void* d, const void* s, tmsize_t c)
     174             : {
     175     1952720 :   memcpy(d, s, (size_t) c);
     176     1952720 : }
     177             : 
     178             : int
     179           8 : _TIFFmemcmp(const void* p1, const void* p2, tmsize_t c)
     180             : {
     181           8 :   return (memcmp(p1, p2, (size_t) c));
     182             : }
     183             : 
     184             : static void
     185           0 : unixWarningHandler(const char* module, const char* fmt, va_list ap)
     186             : {
     187           0 :   if (module != NULL)
     188           0 :     fprintf(stderr, "%s: ", module);
     189           0 :   fprintf(stderr, "Warning, ");
     190           0 :   vfprintf(stderr, fmt, ap);
     191           0 :   fprintf(stderr, ".\n");
     192           0 : }
     193             : TIFFErrorHandler _TIFFwarningHandler = unixWarningHandler;
     194             : 
     195             : static void
     196          73 : unixErrorHandler(const char* module, const char* fmt, va_list ap)
     197             : {
     198          73 :   if (module != NULL)
     199          73 :     fprintf(stderr, "%s: ", module);
     200          73 :   vfprintf(stderr, fmt, ap);
     201          73 :   fprintf(stderr, ".\n");
     202          73 : }
     203             : TIFFErrorHandler _TIFFerrorHandler = unixErrorHandler;

Generated by: LCOV version 1.14