From ade7b08c894dd0f50e53849ee222b3798995aba5 Mon Sep 17 00:00:00 2001 From: skeezix Date: Thu, 25 Feb 2010 11:00:11 -0500 Subject: [PATCH] Make libpnd a little more tolerant of padding at end of PXML, when looking for icon --- lib/pnd_discovery.c | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/lib/pnd_discovery.c b/lib/pnd_discovery.c index 594a03e..73ed18e 100644 --- a/lib/pnd_discovery.c +++ b/lib/pnd_discovery.c @@ -122,11 +122,27 @@ static int pnd_disco_callback ( const char *fpath, const struct stat *sb, char pngbuffer [ 16 ]; // \211 P N G \r \n \032 \n pngbuffer [ 0 ] = 137; pngbuffer [ 1 ] = 80; pngbuffer [ 2 ] = 78; pngbuffer [ 3 ] = 71; pngbuffer [ 4 ] = 13; pngbuffer [ 5 ] = 10; pngbuffer [ 6 ] = 26; pngbuffer [ 7 ] = 10; - if ( fread ( pngbuffer + 8, 8, 1, f ) == 1 ) { - if ( memcmp ( pngbuffer, pngbuffer + 8, 8 ) == 0 ) { - pxml_close_pos = pos; - } + + unsigned char padtests = 10; + unsigned int padstart = ftell ( f ); + while ( padtests ) { + + if ( fread ( pngbuffer + 8, 8, 1, f ) == 1 ) { + if ( memcmp ( pngbuffer, pngbuffer + 8, 8 ) == 0 ) { + pxml_close_pos = pos; + break; + } // if + fseek ( f, -7, SEEK_CUR ); // seek back 7 (so we're 1 further than we started, since PNG header is 8b) + } // if read + + padtests --; + } // while + + if ( ! padtests ) { + // no icon found, so back to where we started looking + fseek ( f, padstart, SEEK_SET ); } + } // icon #endif -- 2.39.5