Changeset 24608 for trunk/gdal/frmts/gif


Ignore:
Timestamp:
Jun 24, 2012, 2:55:29 PM (12 years ago)
Author:
Even Rouault
Message:

Add compatibility with giflib 5.0

Location:
trunk/gdal/frmts/gif
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/gdal/frmts/gif/biggifdataset.cpp

    r22684 r24608  
    372372
    373373    nLastLineRead = -1;
     374#if defined(GIFLIB_MAJOR) && GIFLIB_MAJOR >= 5
     375    int nError;
     376    hGifFile = DGifOpen( fp, VSIGIFReadFunc, &nError );
     377#else
    374378    hGifFile = DGifOpen( fp, VSIGIFReadFunc );
     379#endif
    375380    if( hGifFile == NULL )
    376381    {
  • trunk/gdal/frmts/gif/gifdataset.cpp

    r24490 r24608  
    3737void    GDALRegister_GIF(void);
    3838
     39#if !(defined(GIFLIB_MAJOR) && GIFLIB_MAJOR >= 5)
     40
    3941// This prototype seems to have been messed up!
    4042GifFileType * EGifOpen(void* userData, OutputFunc writeFunc);
     43
     44// Define alias compatible with giflib >= 5.0.0
     45#define GifMakeMapObject MakeMapObject
     46#define GifFreeMapObject FreeMapObject
     47
     48#endif // defined(GIFLIB_MAJOR) && GIFLIB_MAJOR < 5
     49
    4150CPL_C_END
    4251
     
    323332        return NULL;
    324333
     334#if defined(GIFLIB_MAJOR) && GIFLIB_MAJOR >= 5
     335    int nError;
     336    hGifFile = DGifOpen( fp, VSIGIFReadFunc, &nError );
     337#else
    325338    hGifFile = DGifOpen( fp, VSIGIFReadFunc );
     339#endif
    326340    if( hGifFile == NULL )
    327341    {
     
    381395
    382396    VSIFSeekL( fp, 0, SEEK_SET);
     397
     398#if defined(GIFLIB_MAJOR) && GIFLIB_MAJOR >= 5
     399    hGifFile = DGifOpen( fp, VSIGIFReadFunc, &nError );
     400#else
    383401    hGifFile = DGifOpen( fp, VSIGIFReadFunc );
     402#endif
    384403    if( hGifFile == NULL )
    385404    {
     
    474493/************************************************************************/
    475494
    476 static void GDALPrintGifError(const char* pszMsg)
     495static void GDALPrintGifError(GifFileType *hGifFile, const char* pszMsg)
    477496{
    478497/* GIFLIB_MAJOR is only defined in libgif >= 4.2.0 */
     
    481500        ((GIFLIB_MAJOR == 4 && GIFLIB_MINOR >= 2) || GIFLIB_MAJOR > 4)
    482501    /* Static string actually, hence the const char* cast */
     502
     503#if GIFLIB_MAJOR >= 5
     504    const char* pszGIFLIBError = (const char*) GifErrorString(hGifFile->Error);
     505#else
    483506    const char* pszGIFLIBError = (const char*) GifErrorString();
     507#endif
    484508    if (pszGIFLIBError == NULL)
    485509        pszGIFLIBError = "Unknown error";
     
    558582    }
    559583
     584#if defined(GIFLIB_MAJOR) && GIFLIB_MAJOR >= 5
     585    int nError;
     586    hGifFile = EGifOpen( fp, VSIGIFWriteFunc, &nError );
     587#else
    560588    hGifFile = EGifOpen( fp, VSIGIFWriteFunc );
     589#endif
    561590    if( hGifFile == NULL )
    562591    {
     
    578607    if( poBand->GetColorTable() == NULL )
    579608    {
    580         psGifCT = MakeMapObject( 256, NULL );
     609        psGifCT = GifMakeMapObject( 256, NULL );
    581610        for( iColor = 0; iColor < 256; iColor++ )
    582611        {
     
    594623            nFullCount = nFullCount * 2;
    595624
    596         psGifCT = MakeMapObject( nFullCount, NULL );
     625        psGifCT = GifMakeMapObject( nFullCount, NULL );
    597626        for( iColor = 0; iColor < poCT->GetColorEntryCount(); iColor++ )
    598627        {
     
    618647                          psGifCT->ColorCount, 255, psGifCT) == GIF_ERROR)
    619648    {
    620         FreeMapObject(psGifCT);
    621         GDALPrintGifError("Error writing gif file.");
     649        GifFreeMapObject(psGifCT);
     650        GDALPrintGifError(hGifFile, "Error writing gif file.");
    622651        EGifCloseFile(hGifFile);
    623652        VSIFCloseL( fp );
     
    625654    }
    626655   
    627     FreeMapObject(psGifCT);
     656    GifFreeMapObject(psGifCT);
    628657    psGifCT = NULL;
    629658
     
    643672    if (EGifPutImageDesc(hGifFile, 0, 0, nXSize, nYSize, bInterlace, NULL) == GIF_ERROR )
    644673    {
    645         GDALPrintGifError("Error writing gif file.");
     674        GDALPrintGifError(hGifFile, "Error writing gif file.");
    646675        EGifCloseFile(hGifFile);
    647676        VSIFCloseL( fp );
Note: See TracChangeset for help on using the changeset viewer.