cvs: php4 /ext/exif exif.c
| From: | Marcus B�rger | Date: | Fri, 05 Apr 2002 16:02:54 +0000 |
| Subject: | cvs: php4 /ext/exif exif.c | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-10904@lists.php.net to get a copy of this message | ||
helly Fri Apr 5 11:02:54 2002 EDT
Modified files:
/php4/ext/exif exif.c
Log:
aligning #
#mentioned by derick
Index: php4/ext/exif/exif.c diff -u php4/ext/exif/exif.c:1.83 php4/ext/exif/exif.c:1.84 --- php4/ext/exif/exif.c:1.83 Thu Apr 4 20:25:53 2002 +++ php4/ext/exif/exif.c Fri Apr 5 11:02:54 2002 @@ -17,11 +17,10 @@ +----------------------------------------------------------------------+ */ -/* $Id: exif.c,v 1.83 2002/04/05 01:25:53 helly Exp $ */ +/* $Id: exif.c,v 1.84 2002/04/05 16:02:54 helly Exp $ */ /* ToDos * - * JIS encoding for comments * See if example images from http://www.exif.org have illegal * thumbnail sizes or if code is corrupt. * Create/Update exif headers. @@ -86,12 +85,12 @@ typedef unsigned char uchar; #ifndef TRUE - #define TRUE 1 - #define FALSE 0 +# define TRUE 1 +# define FALSE 0 #endif #ifndef max - #define max(a,b) ((a)>(b) ? (a) : (b)) +# define max(a,b) ((a)>(b) ? (a) : (b)) #endif /* {{{ exif_functions[] @@ -106,7 +105,7 @@ }; /* }}} */ -#define EXIF_VERSION "1.3 $Id: exif.c,v 1.83 2002/04/05 01:25:53 helly Exp $" +#define EXIF_VERSION "1.3 $Id: exif.c,v 1.84 2002/04/05 16:02:54 helly Exp $" PHP_MINFO_FUNCTION(exif); @@ -917,7 +916,7 @@ int motorola_intel; /* 1 Motorola; 0 Intel */ char *UserComment; - int UserCommentLength; + int UserCommentLength; char *UserCommentEncoding; char *Copyright; char *CopyrightPhotographer; @@ -1840,9 +1839,9 @@ int i, byte_count; image_info_list *info_list; image_info_data *info_data; - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG char tagname[64]; - #endif +#endif if ( !ImageInfo->read_thumbnail || !ImageInfo->Thumbnail.offset || !ImageInfo->Thumbnail.size) { @@ -1857,9 +1856,9 @@ case IMAGE_FILETYPE_TIFF_MM: info_list = &ImageInfo->info_list[SECTION_THUMBNAIL]; new_size = 8 + 2 + info_list->count * 12 + 4; - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"thumbnail: size of signature + directory(%d): 0x%02X", info_list->count, new_size); - #endif +#endif new_value= new_size; /* offset for ifd values outside ifd directory */ for (i=0; i<info_list->count; i++) { info_data = &info_list->list[i]; @@ -1892,9 +1891,9 @@ for (i=0; i<info_list->count; i++) { info_data = &info_list->list[i]; byte_count = php_tiff_bytes_per_format[info_data->format] * info_data->length; - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"thumbnail: process tag(x%04X=%s): %s%s (%d bytes)", info_data->tag, exif_get_tagname(info_data->tag,tagname,-12), (info_data->length>1)&&info_data->format!=TAG_FMT_UNDEFINED&&info_data->format!=TAG_FMT_STRING?"ARRAY OF ":"", exif_get_tagformat(info_data->format), byte_count); - #endif +#endif if ( info_data->tag==TAG_STRIP_OFFSETS || info_data->tag==TAG_JPEG_INTERCHANGE_FORMAT) { php_ifd_set16u( new_data + 0, info_data->tag, ImageInfo->motorola_intel); php_ifd_set16u( new_data + 2, TAG_FMT_ULONG, ImageInfo->motorola_intel); @@ -1916,9 +1915,9 @@ memmove( new_data+8, value_ptr, 4); } else { php_ifd_set32u( new_data+8, new_value, ImageInfo->motorola_intel); - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"thumbnail: writing with value offset: 0x%04X + 0x%02X", new_value, byte_count); - #endif +#endif memmove( ImageInfo->Thumbnail.data+new_value, value_ptr, byte_count); new_value += byte_count; } @@ -1927,9 +1926,9 @@ new_data += 12; } memset( new_data, 0, 4); /* next ifd pointer */ - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"thumbnail: created"); - #endif +#endif break; } } @@ -1985,6 +1984,7 @@ /* {{{ exif_process_string_raw * Copy a string in Exif header to a character string returns length of allocated buffer if any. */ +#ifdef EXIF_DEBUG static int exif_process_string_raw(char **result,char *value,size_t byte_count) { /* we cannot use strlcpy - here the problem is that we have to copy NUL * chars up to byte_count, we also have to add a single NUL character to @@ -1998,6 +1998,7 @@ } return 0; } +#endif /* }}} */ /* {{{ exif_process_string @@ -2029,9 +2030,9 @@ { int a; - #ifdef HAVE_MBSTRING +#ifdef HAVE_MBSTRING size_t len;; - #endif +#endif /* Copy the comment */ if ( ByteCount>=8) { @@ -2039,16 +2040,16 @@ *szEncoding= estrdup((const char*)szValuePtr); szValuePtr = szValuePtr+8; ByteCount -= 8; - #ifdef HAVE_MBSTRING +#ifdef HAVE_MBSTRING if ( motorola_intel) { *pszInfoPtr = php_mb_convert_encoding(szValuePtr, ByteCount, "ISO-8859-15", "UCS-2BE", &len TSRMLS_CC); } else { *pszInfoPtr = php_mb_convert_encoding(szValuePtr, ByteCount, "ISO-8859-15", "UCS-2LE", &len TSRMLS_CC); } return len; - #else +#else return exif_process_string_raw(pszInfoPtr, szValuePtr, ByteCount); - #endif +#endif } else if ( !memcmp(szValuePtr, "ASCII\0\0\0", 8)) { *szEncoding= estrdup((const char*)szValuePtr); @@ -2159,9 +2160,9 @@ } ImageInfo->sections_found |= FOUND_ANY_TAG; - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"process tag(x%04X=%s,@x%04X + x%04X(=%d)): %s%s", tag, exif_get_tagname(tag,tagname,-12), offset_val, byte_count, byte_count, (components>1)&&format!=TAG_FMT_UNDEFINED&&format!=TAG_FMT_STRING?"ARRAY OF ":"", format==TAG_FMT_STRING?(value_ptr?value_ptr:"<no data>"):exif_get_tagformat(format)); - #endif +#endif if (section_index==SECTION_THUMBNAIL) { switch(tag) { case TAG_IMAGEWIDTH: @@ -2294,23 +2295,23 @@ int sub_section_index; switch(tag) { case TAG_EXIF_IFD_POINTER: - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"found EXIF"); - #endif +#endif ImageInfo->sections_found |= FOUND_EXIF; sub_section_index = SECTION_EXIF; break; case TAG_GPS_IFD_POINTER: - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"found GPS"); - #endif +#endif ImageInfo->sections_found |= FOUND_GPS; sub_section_index = SECTION_GPS; break; case TAG_INTEROP_IFD_POINTER: - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"found INTEROPERABILITY"); - #endif +#endif ImageInfo->sections_found |= FOUND_INTEROP; sub_section_index = SECTION_INTEROP; break; @@ -2321,9 +2322,9 @@ return FALSE; } exif_process_IFD_in_JPEG(ImageInfo, SubdirStart, offset_base, IFDlength, sub_section_index TSRMLS_CC); - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"subsection %s done", exif_get_sectionname(sub_section_index)); - #endif +#endif } } } @@ -2341,9 +2342,9 @@ int NumDirEntries; int NextDirOffset; - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"exif_process_IFD_in_JPEG(x%04X(=%d))", IFDlength, IFDlength); - #endif +#endif ImageInfo->sections_found |= FOUND_IFD0; @@ -2372,14 +2373,14 @@ return FALSE; } /* That is the IFD for the first thumbnail */ - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"expect next IFD to be thumbnail"); - #endif +#endif if (exif_process_IFD_in_JPEG(ImageInfo, OffsetBase + NextDirOffset, OffsetBase, IFDlength, SECTION_THUMBNAIL TSRMLS_CC)) { - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"thumbnail size: 0x%04X", ImageInfo->Thumbnail.size); - #endif +#endif if ( ImageInfo->Thumbnail.filetype != IMAGE_FILETYPE_UNKNOWN && ImageInfo->Thumbnail.size && ImageInfo->Thumbnail.offset @@ -2422,9 +2423,9 @@ /* First directory starts at offset 8. Offsets starts at 0. */ exif_process_IFD_in_JPEG(ImageInfo, CharBuf+8, CharBuf, length/*-14*/, SECTION_IFD0 TSRMLS_CC); - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"exif_process_TIFF_in_JPEG, done"); - #endif +#endif /* Compute the CCD width, in milimeters. */ if (ImageInfo->FocalplaneXRes != 0) { @@ -2446,9 +2447,9 @@ return; } exif_process_TIFF_in_JPEG(ImageInfo,CharBuf + 8, length - 8 TSRMLS_CC); - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"process Exif done"); - #endif +#endif } /* }}} */ @@ -2466,9 +2467,9 @@ exif_iif_add_tag( ImageInfo, SECTION_APP12, "Info", TAG_NONE, TAG_FMT_STRING, l2, buffer+2+l1+1); } } - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"process section APP12 with l1=%d, l2=%d done", l1, l2); - #endif +#endif } /* }}} */ @@ -2485,10 +2486,10 @@ for(section=0;;section++) { - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG fpos = php_stream_tell(ImageInfo->infile); php_error(E_NOTICE,"needing section %d @ 0x%08X", ImageInfo->file.count, fpos); - #endif +#endif /* get marker byte, swallowing possible padding */ /* some software does not count the length bytes of COM section */ @@ -2514,9 +2515,9 @@ if ( last_marker==M_COM && comment_correction) return M_EOI; /* ah illegal: char after COM section not 0xFF */ - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG fpos = php_stream_tell(ImageInfo->infile); - #endif +#endif if (marker == 0xff) { /* 0xff is legal padding, but if we get that many, something's wrong. */ php_error(E_WARNING, "too many padding bytes!"); @@ -2550,9 +2551,9 @@ return FALSE; } - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"process section(x%02X=%s) @ x%04X + x%04X(=%d)", marker, exif_get_markername(marker), fpos, itemlen, itemlen); - #endif +#endif switch(marker) { case M_SOS: /* stop before hitting compressed data */ /* If reading entire image is requested, read the rest of the data. */ @@ -2626,9 +2627,9 @@ /* keep track of last marker */ last_marker = marker; } - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE, "exif_scan_JPEG_header, done"); - #endif +#endif return TRUE; } /* }}} */ @@ -2670,9 +2671,9 @@ marker = c; length = php_jpg_get16(data+pos); if ( pos+length>=ImageInfo->Thumbnail.size) return FALSE; - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"Thumnail: process section(x%02X=%s) @ x%04X + x%04X", marker, exif_get_markername(marker), pos, length); - #endif +#endif switch (marker) { case M_SOF0: case M_SOF1: @@ -2691,9 +2692,9 @@ exif_process_SOFn(data+pos, marker, &sof_info); ImageInfo->Thumbnail.height = sof_info.height; ImageInfo->Thumbnail.width = sof_info.width; - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"Thumnail: size: %d * %d", sof_info.width, sof_info.height); - #endif +#endif return TRUE; case M_SOS: @@ -2727,26 +2728,26 @@ EXIF_ERRLOG_EALLOC return FALSE; } - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"Read from TIFF: filesize(x%04X), IFD dir(x%04X + x%04X)", ImageInfo->FileSize, dir_offset, 2); - #endif +#endif php_stream_seek(ImageInfo->infile,dir_offset,SEEK_SET); /* we do not know the order of sections */ php_stream_read(ImageInfo->infile, ImageInfo->file.list[sn].data, 2); num_entries = php_ifd_get16u(ImageInfo->file.list[sn].data, ImageInfo->motorola_intel); dir_size = 2/*num dir entries*/ +12/*length of entry*/*num_entries +4/* offset to next ifd (points to thumbnail or NULL)*/; if ( ImageInfo->FileSize >= dir_offset+dir_size) { - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"Read from TIFF: filesize(x%04X), IFD dir(x%04X + x%04X), IFD entries(%d)", ImageInfo->FileSize, dir_offset+2, dir_size-2, num_entries); - #endif +#endif if ( exif_file_sections_realloc(ImageInfo, sn, dir_size)) { return FALSE; } php_stream_read(ImageInfo->infile, ImageInfo->file.list[sn].data+2, dir_size-2); /*php_error(E_NOTICE,"Dump: %s", exif_char_dump(ImageInfo->file.list[sn].data, dir_size, 1));*/ next_offset = php_ifd_get32u(ImageInfo->file.list[sn].data + dir_size - 4, ImageInfo->motorola_intel); - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"Read from TIFF done, next offset x%04X", next_offset); - #endif +#endif /* now we have the directory we can look how long it should be */ ifd_size = dir_size; for(i=0;i<num_entries;i++) { @@ -2807,9 +2808,9 @@ && entry_offset == dir_offset + ifd_size) { ifd_size = entry_offset + entry_length - dir_offset; - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"Correcting: 0x%08X + 0x%08X - 0x%08X", entry_offset, entry_length, dir_offset); - #endif +#endif } } } @@ -2823,13 +2824,13 @@ return FALSE; } /* read values not stored in directory itself */ - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"Read from TIFF: filesize(x%04X), IFD(x%04X + x%04X)", ImageInfo->FileSize, dir_offset, ifd_size); - #endif +#endif php_stream_read(ImageInfo->infile, ImageInfo->file.list[sn].data+dir_size, ifd_size-dir_size); - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"Read from TIFF, done"); - #endif +#endif } /* now process the tags */ for(i=0;i<num_entries;i++) { @@ -2857,13 +2858,13 @@ break; } entry_offset = php_ifd_get32u(dir_entry+8, ImageInfo->motorola_intel); - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"Next IFD %s at x%04X", exif_get_sectionname(sub_section_index), entry_offset); - #endif +#endif exif_process_IFD_in_TIFF(ImageInfo, entry_offset,sub_section_index TSRMLS_CC); - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"Next IFD %s done", exif_get_sectionname(sub_section_index)); - #endif +#endif } else { if (!exif_process_IFD_TAG(ImageInfo, dir_entry, ImageInfo->file.list[sn].data-dir_offset, @@ -2875,13 +2876,13 @@ if (next_offset && section_index != SECTION_THUMBNAIL) { /* this should be a thumbnail IFD */ /* the thumbnail itself is stored at Tag=StripOffsets */ - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"Read next IFD (THUMBNAIL) at x%04X", next_offset); - #endif +#endif exif_process_IFD_in_TIFF(ImageInfo, next_offset,SECTION_THUMBNAIL TSRMLS_CC); - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"Read THUMBNAIL @0x%04X + 0x%04X", ImageInfo->Thumbnail.offset, ImageInfo->Thumbnail.size); - #endif +#endif if (ImageInfo->Thumbnail.offset && ImageInfo->Thumbnail.size && ImageInfo->read_thumbnail) { ImageInfo->Thumbnail.data = emalloc(ImageInfo->Thumbnail.size); if (!ImageInfo->Thumbnail.data) { @@ -2896,9 +2897,9 @@ exif_thumbnail_build( ImageInfo); } } - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"Read next IFD (THUMBNAIL) done"); - #endif +#endif } return TRUE; } else { @@ -2941,9 +2942,9 @@ { ImageInfo->FileType = IMAGE_FILETYPE_TIFF_II; ImageInfo->motorola_intel = 0; - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"File(%s) has TIFF/II format", ImageInfo->FileName); - #endif +#endif ImageInfo->sections_found |= FOUND_IFD0; if (exif_process_IFD_in_TIFF(ImageInfo, php_ifd_get32u(file_header + 4, ImageInfo->motorola_intel), @@ -2958,9 +2959,9 @@ { ImageInfo->FileType = IMAGE_FILETYPE_TIFF_MM; ImageInfo->motorola_intel = 1; - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"File(%s) has TIFF/MM format", ImageInfo->FileName); - #endif +#endif ImageInfo->sections_found |= FOUND_IFD0; if (exif_process_IFD_in_TIFF(ImageInfo, php_ifd_get32u(file_header + 4, ImageInfo->motorola_intel), @@ -3091,14 +3092,14 @@ } if ( sections_str) efree(sections_str); /* now see what we need */ - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG sections_str = exif_get_sectionlist(sections_needed); if ( !sections_str) { RETURN_FALSE; } php_error(E_NOTICE,"Sections needed: %s", sections_str[0] ? sections_str : "None"); if ( sections_str) efree(sections_str); - #endif +#endif } if(ac >= 3) { convert_to_long_ex(p_sub_arrays); @@ -3119,9 +3120,9 @@ sections_str = exif_get_sectionlist(ImageInfo.sections_found); - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG if ( sections_str) php_error(E_NOTICE,"sections found: %s", sections_str[0] ? sections_str : "None"); - #endif +#endif ImageInfo.sections_found |= FOUND_COMPUTED;/* do not inform about in debug*/ @@ -3132,9 +3133,9 @@ RETURN_FALSE; } - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"generate section FILE"); - #endif +#endif /* now we can add our information */ exif_iif_add_str( &ImageInfo, SECTION_FILE, "FileName", ImageInfo.FileName); @@ -3143,9 +3144,9 @@ exif_iif_add_int( &ImageInfo, SECTION_FILE, "FileType", ImageInfo.FileType); exif_iif_add_str( &ImageInfo, SECTION_FILE, "SectionsFound", sections_str ? sections_str : "NONE"); - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"generate section COMPUTED"); - #endif +#endif if (ImageInfo.Width>0 && ImageInfo.Height>0) { exif_iif_add_str( &ImageInfo, SECTION_COMPUTED, "html", "width=\"%d\" height=\"%d\"", ImageInfo.Width, ImageInfo.Height); @@ -3206,9 +3207,9 @@ } if ( sections_str) efree(sections_str); - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"adding image infos"); - #endif +#endif add_assoc_image_info( return_value, sub_arrays, &ImageInfo, SECTION_FILE); add_assoc_image_info( return_value, 1, &ImageInfo, SECTION_COMPUTED); @@ -3222,15 +3223,15 @@ add_assoc_image_info( return_value, sub_arrays, &ImageInfo, SECTION_FPIX); add_assoc_image_info( return_value, sub_arrays, &ImageInfo, SECTION_APP12); - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"Discarding info"); - #endif +#endif exif_discard_imageinfo(&ImageInfo); - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"read_exif_data done"); - #endif +#endif } /* }}} */ @@ -3261,9 +3262,9 @@ } if ( !ImageInfo.Thumbnail.data || !ImageInfo.Thumbnail.size) { - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"No thumbnail data %d %d, %d x %d", ImageInfo.Thumbnail.data, ImageInfo.Thumbnail.size, ImageInfo.Thumbnail.width, ImageInfo.Thumbnail.height); - #endif +#endif if ( arg_c == 3) { ZVAL_LONG( *p_width, ImageInfo.Thumbnail.width); @@ -3273,9 +3274,9 @@ RETURN_FALSE; } - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"Returning thumbnail(%d)", ImageInfo.Thumbnail.size); - #endif +#endif ZVAL_STRINGL( return_value, ImageInfo.Thumbnail.data, ImageInfo.Thumbnail.size, 1); if ( arg_c == 3) @@ -3288,15 +3289,15 @@ ZVAL_LONG( *p_height, ImageInfo.Thumbnail.height); } - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"Discarding info"); - #endif +#endif exif_discard_imageinfo(&ImageInfo); - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"exif_thumbnail done"); - #endif +#endif } /* }}} */
Index: php4/ext/exif/exif.c diff -u php4/ext/exif/exif.c:1.83 php4/ext/exif/exif.c:1.84 --- php4/ext/exif/exif.c:1.83 Thu Apr 4 20:25:53 2002 +++ php4/ext/exif/exif.c Fri Apr 5 11:02:54 2002 @@ -17,11 +17,10 @@ +----------------------------------------------------------------------+ */ -/* $Id: exif.c,v 1.83 2002/04/05 01:25:53 helly Exp $ */ +/* $Id: exif.c,v 1.84 2002/04/05 16:02:54 helly Exp $ */ /* ToDos * - * JIS encoding for comments * See if example images from http://www.exif.org have illegal * thumbnail sizes or if code is corrupt. * Create/Update exif headers. @@ -86,12 +85,12 @@ typedef unsigned char uchar; #ifndef TRUE - #define TRUE 1 - #define FALSE 0 +# define TRUE 1 +# define FALSE 0 #endif #ifndef max - #define max(a,b) ((a)>(b) ? (a) : (b)) +# define max(a,b) ((a)>(b) ? (a) : (b)) #endif /* {{{ exif_functions[] @@ -106,7 +105,7 @@ }; /* }}} */ -#define EXIF_VERSION "1.3 $Id: exif.c,v 1.83 2002/04/05 01:25:53 helly Exp $" +#define EXIF_VERSION "1.3 $Id: exif.c,v 1.84 2002/04/05 16:02:54 helly Exp $" PHP_MINFO_FUNCTION(exif); @@ -917,7 +916,7 @@ int motorola_intel; /* 1 Motorola; 0 Intel */ char *UserComment; - int UserCommentLength; + int UserCommentLength; char *UserCommentEncoding; char *Copyright; char *CopyrightPhotographer; @@ -1840,9 +1839,9 @@ int i, byte_count; image_info_list *info_list; image_info_data *info_data; - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG char tagname[64]; - #endif +#endif if ( !ImageInfo->read_thumbnail || !ImageInfo->Thumbnail.offset || !ImageInfo->Thumbnail.size) { @@ -1857,9 +1856,9 @@ case IMAGE_FILETYPE_TIFF_MM: info_list = &ImageInfo->info_list[SECTION_THUMBNAIL]; new_size = 8 + 2 + info_list->count * 12 + 4; - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"thumbnail: size of signature + directory(%d): 0x%02X", info_list->count, new_size); - #endif +#endif new_value= new_size; /* offset for ifd values outside ifd directory */ for (i=0; i<info_list->count; i++) { info_data = &info_list->list[i]; @@ -1892,9 +1891,9 @@ for (i=0; i<info_list->count; i++) { info_data = &info_list->list[i]; byte_count = php_tiff_bytes_per_format[info_data->format] * info_data->length; - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"thumbnail: process tag(x%04X=%s): %s%s (%d bytes)", info_data->tag, exif_get_tagname(info_data->tag,tagname,-12), (info_data->length>1)&&info_data->format!=TAG_FMT_UNDEFINED&&info_data->format!=TAG_FMT_STRING?"ARRAY OF ":"", exif_get_tagformat(info_data->format), byte_count); - #endif +#endif if ( info_data->tag==TAG_STRIP_OFFSETS || info_data->tag==TAG_JPEG_INTERCHANGE_FORMAT) { php_ifd_set16u( new_data + 0, info_data->tag, ImageInfo->motorola_intel); php_ifd_set16u( new_data + 2, TAG_FMT_ULONG, ImageInfo->motorola_intel); @@ -1916,9 +1915,9 @@ memmove( new_data+8, value_ptr, 4); } else { php_ifd_set32u( new_data+8, new_value, ImageInfo->motorola_intel); - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"thumbnail: writing with value offset: 0x%04X + 0x%02X", new_value, byte_count); - #endif +#endif memmove( ImageInfo->Thumbnail.data+new_value, value_ptr, byte_count); new_value += byte_count; } @@ -1927,9 +1926,9 @@ new_data += 12; } memset( new_data, 0, 4); /* next ifd pointer */ - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"thumbnail: created"); - #endif +#endif break; } } @@ -1985,6 +1984,7 @@ /* {{{ exif_process_string_raw * Copy a string in Exif header to a character string returns length of allocated buffer if any. */ +#ifdef EXIF_DEBUG static int exif_process_string_raw(char **result,char *value,size_t byte_count) { /* we cannot use strlcpy - here the problem is that we have to copy NUL * chars up to byte_count, we also have to add a single NUL character to @@ -1998,6 +1998,7 @@ } return 0; } +#endif /* }}} */ /* {{{ exif_process_string @@ -2029,9 +2030,9 @@ { int a; - #ifdef HAVE_MBSTRING +#ifdef HAVE_MBSTRING size_t len;; - #endif +#endif /* Copy the comment */ if ( ByteCount>=8) { @@ -2039,16 +2040,16 @@ *szEncoding= estrdup((const char*)szValuePtr); szValuePtr = szValuePtr+8; ByteCount -= 8; - #ifdef HAVE_MBSTRING +#ifdef HAVE_MBSTRING if ( motorola_intel) { *pszInfoPtr = php_mb_convert_encoding(szValuePtr, ByteCount, "ISO-8859-15", "UCS-2BE", &len TSRMLS_CC); } else { *pszInfoPtr = php_mb_convert_encoding(szValuePtr, ByteCount, "ISO-8859-15", "UCS-2LE", &len TSRMLS_CC); } return len; - #else +#else return exif_process_string_raw(pszInfoPtr, szValuePtr, ByteCount); - #endif +#endif } else if ( !memcmp(szValuePtr, "ASCII\0\0\0", 8)) { *szEncoding= estrdup((const char*)szValuePtr); @@ -2159,9 +2160,9 @@ } ImageInfo->sections_found |= FOUND_ANY_TAG; - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"process tag(x%04X=%s,@x%04X + x%04X(=%d)): %s%s", tag, exif_get_tagname(tag,tagname,-12), offset_val, byte_count, byte_count, (components>1)&&format!=TAG_FMT_UNDEFINED&&format!=TAG_FMT_STRING?"ARRAY OF ":"", format==TAG_FMT_STRING?(value_ptr?value_ptr:"<no data>"):exif_get_tagformat(format)); - #endif +#endif if (section_index==SECTION_THUMBNAIL) { switch(tag) { case TAG_IMAGEWIDTH: @@ -2294,23 +2295,23 @@ int sub_section_index; switch(tag) { case TAG_EXIF_IFD_POINTER: - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"found EXIF"); - #endif +#endif ImageInfo->sections_found |= FOUND_EXIF; sub_section_index = SECTION_EXIF; break; case TAG_GPS_IFD_POINTER: - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"found GPS"); - #endif +#endif ImageInfo->sections_found |= FOUND_GPS; sub_section_index = SECTION_GPS; break; case TAG_INTEROP_IFD_POINTER: - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"found INTEROPERABILITY"); - #endif +#endif ImageInfo->sections_found |= FOUND_INTEROP; sub_section_index = SECTION_INTEROP; break; @@ -2321,9 +2322,9 @@ return FALSE; } exif_process_IFD_in_JPEG(ImageInfo, SubdirStart, offset_base, IFDlength, sub_section_index TSRMLS_CC); - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"subsection %s done", exif_get_sectionname(sub_section_index)); - #endif +#endif } } } @@ -2341,9 +2342,9 @@ int NumDirEntries; int NextDirOffset; - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"exif_process_IFD_in_JPEG(x%04X(=%d))", IFDlength, IFDlength); - #endif +#endif ImageInfo->sections_found |= FOUND_IFD0; @@ -2372,14 +2373,14 @@ return FALSE; } /* That is the IFD for the first thumbnail */ - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"expect next IFD to be thumbnail"); - #endif +#endif if (exif_process_IFD_in_JPEG(ImageInfo, OffsetBase + NextDirOffset, OffsetBase, IFDlength, SECTION_THUMBNAIL TSRMLS_CC)) { - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"thumbnail size: 0x%04X", ImageInfo->Thumbnail.size); - #endif +#endif if ( ImageInfo->Thumbnail.filetype != IMAGE_FILETYPE_UNKNOWN && ImageInfo->Thumbnail.size && ImageInfo->Thumbnail.offset @@ -2422,9 +2423,9 @@ /* First directory starts at offset 8. Offsets starts at 0. */ exif_process_IFD_in_JPEG(ImageInfo, CharBuf+8, CharBuf, length/*-14*/, SECTION_IFD0 TSRMLS_CC); - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"exif_process_TIFF_in_JPEG, done"); - #endif +#endif /* Compute the CCD width, in milimeters. */ if (ImageInfo->FocalplaneXRes != 0) { @@ -2446,9 +2447,9 @@ return; } exif_process_TIFF_in_JPEG(ImageInfo,CharBuf + 8, length - 8 TSRMLS_CC); - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"process Exif done"); - #endif +#endif } /* }}} */ @@ -2466,9 +2467,9 @@ exif_iif_add_tag( ImageInfo, SECTION_APP12, "Info", TAG_NONE, TAG_FMT_STRING, l2, buffer+2+l1+1); } } - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"process section APP12 with l1=%d, l2=%d done", l1, l2); - #endif +#endif } /* }}} */ @@ -2485,10 +2486,10 @@ for(section=0;;section++) { - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG fpos = php_stream_tell(ImageInfo->infile); php_error(E_NOTICE,"needing section %d @ 0x%08X", ImageInfo->file.count, fpos); - #endif +#endif /* get marker byte, swallowing possible padding */ /* some software does not count the length bytes of COM section */ @@ -2514,9 +2515,9 @@ if ( last_marker==M_COM && comment_correction) return M_EOI; /* ah illegal: char after COM section not 0xFF */ - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG fpos = php_stream_tell(ImageInfo->infile); - #endif +#endif if (marker == 0xff) { /* 0xff is legal padding, but if we get that many, something's wrong. */ php_error(E_WARNING, "too many padding bytes!"); @@ -2550,9 +2551,9 @@ return FALSE; } - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"process section(x%02X=%s) @ x%04X + x%04X(=%d)", marker, exif_get_markername(marker), fpos, itemlen, itemlen); - #endif +#endif switch(marker) { case M_SOS: /* stop before hitting compressed data */ /* If reading entire image is requested, read the rest of the data. */ @@ -2626,9 +2627,9 @@ /* keep track of last marker */ last_marker = marker; } - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE, "exif_scan_JPEG_header, done"); - #endif +#endif return TRUE; } /* }}} */ @@ -2670,9 +2671,9 @@ marker = c; length = php_jpg_get16(data+pos); if ( pos+length>=ImageInfo->Thumbnail.size) return FALSE; - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"Thumnail: process section(x%02X=%s) @ x%04X + x%04X", marker, exif_get_markername(marker), pos, length); - #endif +#endif switch (marker) { case M_SOF0: case M_SOF1: @@ -2691,9 +2692,9 @@ exif_process_SOFn(data+pos, marker, &sof_info); ImageInfo->Thumbnail.height = sof_info.height; ImageInfo->Thumbnail.width = sof_info.width; - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"Thumnail: size: %d * %d", sof_info.width, sof_info.height); - #endif +#endif return TRUE; case M_SOS: @@ -2727,26 +2728,26 @@ EXIF_ERRLOG_EALLOC return FALSE; } - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"Read from TIFF: filesize(x%04X), IFD dir(x%04X + x%04X)", ImageInfo->FileSize, dir_offset, 2); - #endif +#endif php_stream_seek(ImageInfo->infile,dir_offset,SEEK_SET); /* we do not know the order of sections */ php_stream_read(ImageInfo->infile, ImageInfo->file.list[sn].data, 2); num_entries = php_ifd_get16u(ImageInfo->file.list[sn].data, ImageInfo->motorola_intel); dir_size = 2/*num dir entries*/ +12/*length of entry*/*num_entries +4/* offset to next ifd (points to thumbnail or NULL)*/; if ( ImageInfo->FileSize >= dir_offset+dir_size) { - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"Read from TIFF: filesize(x%04X), IFD dir(x%04X + x%04X), IFD entries(%d)", ImageInfo->FileSize, dir_offset+2, dir_size-2, num_entries); - #endif +#endif if ( exif_file_sections_realloc(ImageInfo, sn, dir_size)) { return FALSE; } php_stream_read(ImageInfo->infile, ImageInfo->file.list[sn].data+2, dir_size-2); /*php_error(E_NOTICE,"Dump: %s", exif_char_dump(ImageInfo->file.list[sn].data, dir_size, 1));*/ next_offset = php_ifd_get32u(ImageInfo->file.list[sn].data + dir_size - 4, ImageInfo->motorola_intel); - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"Read from TIFF done, next offset x%04X", next_offset); - #endif +#endif /* now we have the directory we can look how long it should be */ ifd_size = dir_size; for(i=0;i<num_entries;i++) { @@ -2807,9 +2808,9 @@ && entry_offset == dir_offset + ifd_size) { ifd_size = entry_offset + entry_length - dir_offset; - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"Correcting: 0x%08X + 0x%08X - 0x%08X", entry_offset, entry_length, dir_offset); - #endif +#endif } } } @@ -2823,13 +2824,13 @@ return FALSE; } /* read values not stored in directory itself */ - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"Read from TIFF: filesize(x%04X), IFD(x%04X + x%04X)", ImageInfo->FileSize, dir_offset, ifd_size); - #endif +#endif php_stream_read(ImageInfo->infile, ImageInfo->file.list[sn].data+dir_size, ifd_size-dir_size); - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"Read from TIFF, done"); - #endif +#endif } /* now process the tags */ for(i=0;i<num_entries;i++) { @@ -2857,13 +2858,13 @@ break; } entry_offset = php_ifd_get32u(dir_entry+8, ImageInfo->motorola_intel); - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"Next IFD %s at x%04X", exif_get_sectionname(sub_section_index), entry_offset); - #endif +#endif exif_process_IFD_in_TIFF(ImageInfo, entry_offset,sub_section_index TSRMLS_CC); - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"Next IFD %s done", exif_get_sectionname(sub_section_index)); - #endif +#endif } else { if (!exif_process_IFD_TAG(ImageInfo, dir_entry, ImageInfo->file.list[sn].data-dir_offset, @@ -2875,13 +2876,13 @@ if (next_offset && section_index != SECTION_THUMBNAIL) { /* this should be a thumbnail IFD */ /* the thumbnail itself is stored at Tag=StripOffsets */ - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"Read next IFD (THUMBNAIL) at x%04X", next_offset); - #endif +#endif exif_process_IFD_in_TIFF(ImageInfo, next_offset,SECTION_THUMBNAIL TSRMLS_CC); - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"Read THUMBNAIL @0x%04X + 0x%04X", ImageInfo->Thumbnail.offset, ImageInfo->Thumbnail.size); - #endif +#endif if (ImageInfo->Thumbnail.offset && ImageInfo->Thumbnail.size && ImageInfo->read_thumbnail) { ImageInfo->Thumbnail.data = emalloc(ImageInfo->Thumbnail.size); if (!ImageInfo->Thumbnail.data) { @@ -2896,9 +2897,9 @@ exif_thumbnail_build( ImageInfo); } } - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"Read next IFD (THUMBNAIL) done"); - #endif +#endif } return TRUE; } else { @@ -2941,9 +2942,9 @@ { ImageInfo->FileType = IMAGE_FILETYPE_TIFF_II; ImageInfo->motorola_intel = 0; - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"File(%s) has TIFF/II format", ImageInfo->FileName); - #endif +#endif ImageInfo->sections_found |= FOUND_IFD0; if (exif_process_IFD_in_TIFF(ImageInfo, php_ifd_get32u(file_header + 4, ImageInfo->motorola_intel), @@ -2958,9 +2959,9 @@ { ImageInfo->FileType = IMAGE_FILETYPE_TIFF_MM; ImageInfo->motorola_intel = 1; - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"File(%s) has TIFF/MM format", ImageInfo->FileName); - #endif +#endif ImageInfo->sections_found |= FOUND_IFD0; if (exif_process_IFD_in_TIFF(ImageInfo, php_ifd_get32u(file_header + 4, ImageInfo->motorola_intel), @@ -3091,14 +3092,14 @@ } if ( sections_str) efree(sections_str); /* now see what we need */ - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG sections_str = exif_get_sectionlist(sections_needed); if ( !sections_str) { RETURN_FALSE; } php_error(E_NOTICE,"Sections needed: %s", sections_str[0] ? sections_str : "None"); if ( sections_str) efree(sections_str); - #endif +#endif } if(ac >= 3) { convert_to_long_ex(p_sub_arrays); @@ -3119,9 +3120,9 @@ sections_str = exif_get_sectionlist(ImageInfo.sections_found); - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG if ( sections_str) php_error(E_NOTICE,"sections found: %s", sections_str[0] ? sections_str : "None"); - #endif +#endif ImageInfo.sections_found |= FOUND_COMPUTED;/* do not inform about in debug*/ @@ -3132,9 +3133,9 @@ RETURN_FALSE; } - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"generate section FILE"); - #endif +#endif /* now we can add our information */ exif_iif_add_str( &ImageInfo, SECTION_FILE, "FileName", ImageInfo.FileName); @@ -3143,9 +3144,9 @@ exif_iif_add_int( &ImageInfo, SECTION_FILE, "FileType", ImageInfo.FileType); exif_iif_add_str( &ImageInfo, SECTION_FILE, "SectionsFound", sections_str ? sections_str : "NONE"); - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"generate section COMPUTED"); - #endif +#endif if (ImageInfo.Width>0 && ImageInfo.Height>0) { exif_iif_add_str( &ImageInfo, SECTION_COMPUTED, "html", "width=\"%d\" height=\"%d\"", ImageInfo.Width, ImageInfo.Height); @@ -3206,9 +3207,9 @@ } if ( sections_str) efree(sections_str); - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"adding image infos"); - #endif +#endif add_assoc_image_info( return_value, sub_arrays, &ImageInfo, SECTION_FILE); add_assoc_image_info( return_value, 1, &ImageInfo, SECTION_COMPUTED); @@ -3222,15 +3223,15 @@ add_assoc_image_info( return_value, sub_arrays, &ImageInfo, SECTION_FPIX); add_assoc_image_info( return_value, sub_arrays, &ImageInfo, SECTION_APP12); - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"Discarding info"); - #endif +#endif exif_discard_imageinfo(&ImageInfo); - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"read_exif_data done"); - #endif +#endif } /* }}} */ @@ -3261,9 +3262,9 @@ } if ( !ImageInfo.Thumbnail.data || !ImageInfo.Thumbnail.size) { - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"No thumbnail data %d %d, %d x %d", ImageInfo.Thumbnail.data, ImageInfo.Thumbnail.size, ImageInfo.Thumbnail.width, ImageInfo.Thumbnail.height); - #endif +#endif if ( arg_c == 3) { ZVAL_LONG( *p_width, ImageInfo.Thumbnail.width); @@ -3273,9 +3274,9 @@ RETURN_FALSE; } - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"Returning thumbnail(%d)", ImageInfo.Thumbnail.size); - #endif +#endif ZVAL_STRINGL( return_value, ImageInfo.Thumbnail.data, ImageInfo.Thumbnail.size, 1); if ( arg_c == 3) @@ -3288,15 +3289,15 @@ ZVAL_LONG( *p_height, ImageInfo.Thumbnail.height); } - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"Discarding info"); - #endif +#endif exif_discard_imageinfo(&ImageInfo); - #ifdef EXIF_DEBUG +#ifdef EXIF_DEBUG php_error(E_NOTICE,"exif_thumbnail done"); - #endif +#endif } /* }}} */