X-Git-Url: http://code.vuplus.com/gitweb/?p=vuplus_dvbapp;a=blobdiff_plain;f=lib%2Fgdi%2Fpicexif.cpp;h=50469d4736760ca05b1e69eefab75fd9743a19da;hp=f9e8055f8c02cf7b42ca560449f5adb531fd1370;hb=aec5e445292c99eee68512e83337015fcece434d;hpb=5eb41508927a7f48d09d52e158e136fa07252dac diff --git a/lib/gdi/picexif.cpp b/lib/gdi/picexif.cpp index f9e8055..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) @@ -428,7 +437,7 @@ bool Cexif::ProcessExifDir(unsigned char * DirStart, unsigned char * OffsetBase, case 6: strcpy(m_exifinfo->Orientation,"Right-Top"); break; case 7: strcpy(m_exifinfo->Orientation,"Right-Bottom"); break; case 8: strcpy(m_exifinfo->Orientation,"Left-Bottom"); break; - default: strcpy(m_exifinfo->Orientation,"Undefined rotation value"); + default: strcpy(m_exifinfo->Orientation,"Undefined"); break; } break; case TAG_EXIF_IMAGELENGTH: