writer_t zwriter;
int fileSize = 0;
int inSprite = 0;
- int writer_lastpos = 0;
int ret;
+ writer_t*original_writer = writer;
+ int writer_lastpos = 0;
if (!swf) return -1;
if (!writer) return -1; // the caller should provide a nullwriter, not 0, for querying SWF size
- if(writer) writer_lastpos = writer->pos;
+ if(original_writer) writer_lastpos = original_writer->pos;
// Insert REFLEX Tag
}
if(swf->fileVersion >= 9) {
+ TAG*tag = swf->firstTag;
+ U32 flags = 0x08; // | 128 = usenetwork, | 16 = hasmetadata | 8 = actionscript3
+ int has_version_8_action=0;
+ int has_version_9_action=0;
+ while(tag) {
+ /* FIXME: this doesn't find actionscript in buttons */
+ if(tag->id == ST_DOACTION || tag->id == ST_DOINITACTION)
+ has_version_8_action=1;
+ if(tag->id == ST_DOABC)
+ has_version_9_action=1;
+ tag = tag->next;
+ }
+ if(has_version_8_action && !has_version_9_action)
+ flags = 0x00;
+
if (swf->firstTag && swf->firstTag->id != ST_FILEATTRIBUTES)
{
- U32 flags = 0x8; // | 128 = usenetwork, | 16 = Actionscript3 | 8 = hasmetadata
swf_SetU32(swf_InsertTagBefore(swf, swf->firstTag,ST_FILEATTRIBUTES),flags);
}
}
if(swf->compressed==1 || (swf->compressed==0 && swf->fileVersion>=6) || swf->compressed==8) {
if(swf->compressed != 8) {
zwriter.finish(&zwriter);
- return writer->pos - writer_lastpos;
+ return original_writer->pos - writer_lastpos;
}
return (int)fileSize;
} else {