DeleteTag now takes two arguments
[swftools.git] / lib / rfxswf.c
index 6a7ba4c..d75868d 100644 (file)
@@ -863,15 +863,18 @@ TAG* swf_CopyTag(TAG*tag, TAG*to_copy)
     return tag;
 }
 
-int swf_DeleteTag(TAG * t)
-{ if (!t) return -1;
+TAG* swf_DeleteTag(SWF*swf, TAG * t)
+{
+  TAG*next = t->next;
 
+  if (swf && swf->firstTag==t) 
+    swf->firstTag = t->next;
   if (t->prev) t->prev->next = t->next;
   if (t->next) t->next->prev = t->prev;
 
   if (t->data) rfx_free(t->data);
   rfx_free(t);
-  return 0;
+  return next;
 }
 
 TAG * swf_ReadTag(reader_t*reader, TAG * prev)
@@ -938,7 +941,12 @@ int swf_WriteTag2(writer_t*writer, TAG * t)
      t->id!=ST_DEFINEBITSJPEG&&t->id!=ST_DEFINEBITSJPEG2&&t->id!=ST_DEFINEBITSJPEG3);
 
   if (writer)
-  { if (short_tag)
+  {
+#ifdef MEASURE
+  int oldpos = writer->pos;
+#endif
+    
+    if (short_tag)
     { raw[0] = SWAP16(len|((t->id&0x3ff)<<6));
       if (writer->write(writer,raw,2)!=2)
       {
@@ -981,6 +989,11 @@ int swf_WriteTag2(writer_t*writer, TAG * t)
     #ifdef DEBUG_RFXSWF
       else if (t->len) fprintf(stderr,"WriteTag(): Tag Data Error, id=%i\n",t->id);
     #endif
+
+#ifdef MEASURE
+  writer->flush(writer);
+  printf("TAG %s costs %d bytes\n", swf_TagGetName(t), writer->pos-oldpos);
+#endif
   }
 
   return t->len+(short_tag?2:6);
@@ -1129,7 +1142,7 @@ void swf_FoldSprite(TAG * t)
     if(t->id == ST_END)
        level--;
     t = swf_NextTag(t);
-    swf_DeleteTag(tmp);
+    swf_DeleteTag(0, tmp);
   } 
   while (t && level);
   if(level)