X-Git-Url: http://code.vuplus.com/gitweb/?p=vuplus_dvbapp;a=blobdiff_plain;f=lib%2Fgdi%2Fpicexif.cpp;h=50469d4736760ca05b1e69eefab75fd9743a19da;hp=2daeeffd862d8b7994715c7e572463a727b470d8;hb=aec5e445292c99eee68512e83337015fcece434d;hpb=6e860dd76f06031b31bac9280e9b85ab7abfdadf diff --git a/lib/gdi/picexif.cpp b/lib/gdi/picexif.cpp index 2daeeff..50469d4 100644 --- a/lib/gdi/picexif.cpp +++ b/lib/gdi/picexif.cpp @@ -90,9 +90,9 @@ void Cexif::ClearExif() bool Cexif::DecodeExif(const char *filename, int Thumb) { + bool ret = false; FILE * hFile = fopen(filename, "r"); - if(!hFile) return false; - + if(!hFile) return ret; m_exifinfo = new EXIFINFO; memset(m_exifinfo,0,sizeof(EXIFINFO)); @@ -107,7 +107,8 @@ bool Cexif::DecodeExif(const char *filename, int Thumb) int a = fgetc(hFile); strcpy(m_szLastError,"EXIF-Data not found"); - if (a != 0xff || fgetc(hFile) != M_SOI) return false; + if (a != 0xff || fgetc(hFile) != M_SOI) + goto decode_exif_out; for(;;) { @@ -117,7 +118,8 @@ bool Cexif::DecodeExif(const char *filename, int Thumb) if (SectionsRead >= MAX_SECTIONS) { - strcpy(m_szLastError,"Too many sections in jpg file"); return false; + strcpy(m_szLastError,"Too many sections in jpg file"); + goto decode_exif_out; } for (a=0;a<7;a++) @@ -127,13 +129,15 @@ bool Cexif::DecodeExif(const char *filename, int Thumb) if (a >= 6) { - strcpy(m_szLastError,"too many padding unsigned chars\n"); return false; + strcpy(m_szLastError,"too many padding unsigned chars\n"); + goto decode_exif_out; } } if (marker == 0xff) { - strcpy(m_szLastError,"too many padding unsigned chars!"); return false; + strcpy(m_szLastError,"too many padding unsigned chars!"); + goto decode_exif_out; } Sections[SectionsRead].Type = marker; @@ -145,14 +149,16 @@ bool Cexif::DecodeExif(const char *filename, int Thumb) if (itemlen < 2) { - strcpy(m_szLastError,"invalid marker"); return false; + strcpy(m_szLastError,"invalid marker"); + goto decode_exif_out; } Sections[SectionsRead].Size = itemlen; Data = (unsigned char *)malloc(itemlen); if (Data == NULL) { - strcpy(m_szLastError,"Could not allocate memory"); return false; + strcpy(m_szLastError,"Could not allocate memory"); + goto decode_exif_out; } Sections[SectionsRead].Data = Data; @@ -163,17 +169,18 @@ bool Cexif::DecodeExif(const char *filename, int Thumb) got = fread(Data+2, 1, itemlen-2,hFile); if (got != itemlen-2) { - strcpy(m_szLastError,"Premature end of file?"); return false; + strcpy(m_szLastError,"Premature end of file?"); + goto decode_exif_out; } SectionsRead += 1; switch(marker) { case M_SOS: - return true; + goto decode_exif_out; case M_EOI: printf("No image in jpeg!\n"); - return false; + goto decode_exif_out; case M_COM: if (HaveCom) { @@ -220,9 +227,11 @@ bool Cexif::DecodeExif(const char *filename, int Thumb) break; } } + ret = true; +decode_exif_out: fclose(hFile); - return true; + return ret; } bool Cexif::process_EXIF(unsigned char * CharBuf, unsigned int length)