X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=lib%2Frfxswf.c;h=5f4993962d36423d13f57b2b5a846bc7568b219c;hb=91f07304c9e9687652450f53938d76e1f60ddf76;hp=605e63016f0831777d950ae29a1341fac62fc2d8;hpb=a05dff1a071e82d3817eddb45972900b3076997a;p=swftools.git diff --git a/lib/rfxswf.c b/lib/rfxswf.c index 605e630..5f49939 100644 --- a/lib/rfxswf.c +++ b/lib/rfxswf.c @@ -16,6 +16,7 @@ #ifdef HAVE_LIBJPEG #ifdef HAVE_JPEGLIB_H +#define HAVE_BOOLEAN #include #define _JPEGLIB_INCLUDED_ #endif // HAVE_JPEGLIB_H @@ -52,8 +53,8 @@ TAG * swf_NextTag(TAG * t) { return t->next; } TAG * swf_PrevTag(TAG * t) { return t->prev; } int swf_GetFrameNo(TAG * t) { return t->frame; } U16 swf_GetTagID(TAG * t) { return t->id; } -U32 swf_GetDataSize(TAG * t) { return t->len; } -U8* swf_GetDataSizePtr(TAG * t) { return &(t->data[t->len]); } +U32 swf_GetTagLen(TAG * t) { return t->len; } +U8* swf_GetTagLenPtr(TAG * t) { return &(t->data[t->len]); } U32 swf_GetTagPos(TAG * t) { return t->pos; } // Basic Data Access Functions @@ -544,12 +545,15 @@ TAG * RFXSWF_ReadTag(int handle,TAG * prev) int id; if (read(handle,&raw,2)!=2) return NULL; + raw = SWAP16(raw); len = raw&0x3f; id = raw>>6; if (len==0x3f) - { if (read(handle,&len,4)!=4) return NULL; + { + if (read(handle,&len,4)!=4) return NULL; + len = SWAP32(len); } if (id==ST_DEFINESPRITE) len = 2*sizeof(U16); @@ -609,7 +613,7 @@ int RFXSWF_WriteTag(int handle,TAG * t) if (handle>=0) { if (short_tag) - { raw[0] = len|((t->id&0x3ff)<<6); + { raw[0] = SWAP16(len|((t->id&0x3ff)<<6)); if (write(handle,raw,2)!=2) { #ifdef DEBUG_RFXSWF @@ -619,13 +623,21 @@ int RFXSWF_WriteTag(int handle,TAG * t) } } else - { raw[0] = (t->id<<6)|0x3f; - raw[1] = (U16)(len&0xffff); - raw[2] = (U16)(len>>16); - if (write(handle,raw,6)!=6) + { + raw[0] = SWAP16((t->id<<6)|0x3f); + if (write(handle,raw,2)!=2) + { +#ifdef DEBUG_RFXSWF + fprintf(stderr,"WriteTag() failed: Long Header (1).\n"); +#endif + return -1; + } + + len = SWAP32(len); + if (write(handle,&len,4)!=4) { #ifdef DEBUG_RFXSWF - fprintf(stderr,"WriteTag() failed: Long Header.\n"); + fprintf(stderr,"WriteTag() failed: Long Header (2).\n"); #endif return -1; } @@ -746,7 +758,7 @@ int swf_WriteSWF(int handle,SWF * swf) // Writes SWF to file, returns lengt swf_SetU16(&t1,swf->frameRate); swf_SetU16(&t1,swf->frameCount); - l = swf_GetDataSize(&t1); + l = swf_GetTagLen(&t1); swf->fileSize = l+len; t1.len = 4; // bad & ugly trick ! swf_SetU32(&t1,swf->fileSize);