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: 2025-01-18 12:42:00 Functions: 8 19 42.1 %

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

Generated by: LCOV version 1.14