Backed out changeset 9b49ef1d36dd
authorChris Pearce <chris@pearce.org.nz>
Thu, 10 Jun 2010 16:40:18 +1200
changeset 43448 8b2f4c1f0d67881157eed67fd7c1fd83eb695783
parent 43447 9b49ef1d36dd98cadd77f3e293eb1d01266855f1
child 43449 536b86bfc05fe649d7e79b2a7060b79c37c18f88
push idunknown
push userunknown
push dateunknown
milestone1.9.3a5pre
backs out9b49ef1d36dd98cadd77f3e293eb1d01266855f1
Backed out changeset 9b49ef1d36dd
media/libogg/CHANGES
media/libogg/README_MOZILLA
media/libogg/include/ogg/ogg.h
media/libogg/include/ogg/os_types.h
media/libogg/src/ogg_bitwise.c
media/libogg/src/ogg_framing.c
--- a/media/libogg/CHANGES
+++ b/media/libogg/CHANGES
@@ -1,15 +1,8 @@
-Version 1.2.0 (2010 March 25)
-
-* Alter default flushing behavior to span less often and use larger page 
-  sizes when packet sizes are large.
-* Build fixes for additional compilers
-* Documentation updates
-
 Version 1.1.4 (2009 June 24)
 
 * New async error reporting mechanism. Calls made after a fatal error are 
   now safely handled in the event an error code is ignored
 * Added allocation checks useful to some embedded applications
 * fix possible read past end of buffer when reading 0 bits
 * Updates to API documentation
 * Build fixes
--- a/media/libogg/README_MOZILLA
+++ b/media/libogg/README_MOZILLA
@@ -1,10 +1,10 @@
 The source from this directory was copied from the libogg subversion
 repository using the update.sh script. The only changes made were
 those applied by update.sh and the addition/upate of Makefile.in files
 for the Mozilla build system.
 
-The svn revision number used was r17270.
+The svn revision number used was r16911.
 
 The int-types.patch address a bug that config_types.h generated from
 Linux platform can't be used on OpenSolaris directly see Mozilla bug
 449754
--- a/media/libogg/include/ogg/ogg.h
+++ b/media/libogg/include/ogg/ogg.h
@@ -6,17 +6,17 @@
  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
  *                                                                  *
  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007             *
  * by the Xiph.Org Foundation http://www.xiph.org/                  *
  *                                                                  *
  ********************************************************************
 
  function: toplevel libogg include
- last mod: $Id: ogg.h 17098 2010-03-29 05:35:11Z gmaxwell $
+ last mod: $Id: ogg.h 16051 2009-05-27 05:00:06Z xiphmont $
 
  ********************************************************************/
 #ifndef _OGG_H
 #define _OGG_H
 
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -154,17 +154,16 @@ extern long  oggpackB_bits(oggpack_buffe
 extern unsigned char *oggpackB_get_buffer(oggpack_buffer *b);
 
 /* Ogg BITSTREAM PRIMITIVES: encoding **************************/
 
 extern int      ogg_stream_packetin(ogg_stream_state *os, ogg_packet *op);
 extern int      ogg_stream_iovecin(ogg_stream_state *os, ogg_iovec_t *iov,
                                    int count, long e_o_s, ogg_int64_t granulepos);
 extern int      ogg_stream_pageout(ogg_stream_state *os, ogg_page *og);
-extern int      ogg_stream_pageout_fill(ogg_stream_state *os, ogg_page *og, int nfill);
 extern int      ogg_stream_flush(ogg_stream_state *os, ogg_page *og);
 
 /* Ogg BITSTREAM PRIMITIVES: decoding **************************/
 
 extern int      ogg_sync_init(ogg_sync_state *oy);
 extern int      ogg_sync_clear(ogg_sync_state *oy);
 extern int      ogg_sync_reset(ogg_sync_state *oy);
 extern int      ogg_sync_destroy(ogg_sync_state *oy);
--- a/media/libogg/include/ogg/os_types.h
+++ b/media/libogg/include/ogg/os_types.h
@@ -6,42 +6,29 @@
  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
  *                                                                  *
  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
  * by the Xiph.Org Foundation http://www.xiph.org/                  *
  *                                                                  *
  ********************************************************************
 
  function: #ifdef jail to whip a few platforms into the UNIX ideal.
- last mod: $Id: os_types.h 17270 2010-06-04 06:01:33Z xiphmont $
+ last mod: $Id: os_types.h 16649 2009-10-25 00:49:58Z ds $
 
  ********************************************************************/
 #ifndef _OS_TYPES_H
 #define _OS_TYPES_H
 
 /* make it easy on the folks that want to compile the libs with a
    different malloc than stdlib */
 #define _ogg_malloc  malloc
 #define _ogg_calloc  calloc
 #define _ogg_realloc realloc
 #define _ogg_free    free
 
-/* get non-brittle portable type-based MIN/MAX. Assumes 2's-complement
-   math */
-#define TYPE_HALF_MAX_SIGNED(type) \
-  ((typeof(type))1 << (sizeof(type)*8-2))
-#define TYPE_MAX_SIGNED(type) \
-  (TYPE_HALF_MAX_SIGNED(type) - 1 + TYPE_HALF_MAX_SIGNED(type))
-#define TYPE_MIN_SIGNED(type) \
-  (-1 - TYPE_MAX_SIGNED(type))
-#define TYPE_MIN(type) \
-  ((typeof(type))-1 < 1?TYPE_MIN_SIGNED(type):(typeof(type))0)
-#define TYPE_MAX(type) \
-  ((typeof(type))~TYPE_MIN(type))
-
 #if defined(_WIN32) 
 
 #  if defined(__CYGWIN__)
 #    include <stdint.h>
      typedef int16_t ogg_int16_t;
      typedef uint16_t ogg_uint16_t;
      typedef int32_t ogg_int32_t;
      typedef uint32_t ogg_uint32_t;
--- a/media/libogg/src/ogg_bitwise.c
+++ b/media/libogg/src/ogg_bitwise.c
@@ -1,22 +1,22 @@
 /********************************************************************
  *                                                                  *
- * THIS FILE IS PART OF THE Ogg CONTAINER SOURCE CODE.              *
+ * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
  *                                                                  *
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2010             *
+ * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
  * by the Xiph.Org Foundation http://www.xiph.org/                  *
  *                                                                  *
  ********************************************************************
 
   function: packing variable sized words into an octet stream
-  last mod: $Id: bitwise.c 17270 2010-06-04 06:01:33Z xiphmont $
+  last mod: $Id: bitwise.c 16051 2009-05-27 05:00:06Z xiphmont $
 
  ********************************************************************/
 
 /* We're 'LSb' endian; if we write a word but read individual bits,
    then we'll read the lsb first */
 
 #include <string.h>
 #include <stdlib.h>
@@ -75,23 +75,24 @@ void oggpackB_writetrunc(oggpack_buffer 
     b->endbit=bits;
     b->endbyte=bytes;
     *b->ptr&=mask8B[bits];
   }
 }
 
 /* Takes only up to 32 bits. */
 void oggpack_write(oggpack_buffer *b,unsigned long value,int bits){
-  if(bits<0 || bits>32) goto err;
-  if(b->endbyte>=b->storage-4){
+  if(b->endbyte+4>=b->storage){
     void *ret;
     if(!b->ptr)return;
-    if(b->storage>TYPE_MAX(b->storage)-BUFFER_INCREMENT) goto err;
     ret=_ogg_realloc(b->buffer,b->storage+BUFFER_INCREMENT);
-    if(!ret) goto err;
+    if(!ret){
+      oggpack_writeclear(b);
+      return;
+    }
     b->buffer=ret;
     b->storage+=BUFFER_INCREMENT;
     b->ptr=b->buffer+b->endbyte;
   }
 
   value&=mask[bits]; 
   bits+=b->endbit;
 
@@ -111,30 +112,28 @@ void oggpack_write(oggpack_buffer *b,uns
         }
       }
     }
   }
 
   b->endbyte+=bits/8;
   b->ptr+=bits/8;
   b->endbit=bits&7;
-  return;
- err:
-  oggpack_writeclear(b);
 }
 
 /* Takes only up to 32 bits. */
 void oggpackB_write(oggpack_buffer *b,unsigned long value,int bits){
-  if(bits<0 || bits>32) goto err;
-  if(b->endbyte>=b->storage-4){
+  if(b->endbyte+4>=b->storage){
     void *ret;
     if(!b->ptr)return;
-    if(b->storage>TYPE_MAX(b->storage)-BUFFER_INCREMENT) goto err;
     ret=_ogg_realloc(b->buffer,b->storage+BUFFER_INCREMENT);
-    if(!ret) goto err;
+    if(!ret){
+      oggpack_writeclear(b);
+      return;
+    }
     b->buffer=ret;
     b->storage+=BUFFER_INCREMENT;
     b->ptr=b->buffer+b->endbyte;
   }
 
   value=(value&mask[bits])<<(32-bits); 
   bits+=b->endbit;
 
@@ -154,19 +153,16 @@ void oggpackB_write(oggpack_buffer *b,un
         }
       }
     }
   }
 
   b->endbyte+=bits/8;
   b->ptr+=bits/8;
   b->endbit=bits&7;
-  return;
- err:
-  oggpack_writeclear(b);
 }
 
 void oggpack_writealign(oggpack_buffer *b){
   int bits=8-b->endbit;
   if(bits<8)
     oggpack_write(b,0,bits);
 }
 
@@ -192,40 +188,39 @@ static void oggpack_writecopy_helper(ogg
     int i;
     /* unaligned copy.  Do it the hard way. */
     for(i=0;i<bytes;i++)
       w(b,(unsigned long)(ptr[i]),8);    
   }else{
     /* aligned block copy */
     if(b->endbyte+bytes+1>=b->storage){
       void *ret;
-      if(!b->ptr) goto err;
-      if(b->endbyte+bytes+BUFFER_INCREMENT>b->storage) goto err;
+      if(!b->ptr)return;
       b->storage=b->endbyte+bytes+BUFFER_INCREMENT;
       ret=_ogg_realloc(b->buffer,b->storage);
-      if(!ret) goto err;
+      if(!ret){
+        oggpack_writeclear(b);
+        return;
+      }
       b->buffer=ret;
       b->ptr=b->buffer+b->endbyte;
     }
 
     memmove(b->ptr,source,bytes);
     b->ptr+=bytes;
     b->endbyte+=bytes;
     *b->ptr=0;
 
   }
   if(bits){
     if(msb)
       w(b,(unsigned long)(ptr[bytes]>>(8-bits)),bits);    
     else
       w(b,(unsigned long)(ptr[bytes]),bits);    
   }
-  return;
- err:
-  oggpack_writeclear(b);
 }
 
 void oggpack_writecopy(oggpack_buffer *b,void *source,long bits){
   oggpack_writecopy_helper(b,source,bits,oggpack_write,0);
 }
 
 void oggpackB_writecopy(oggpack_buffer *b,void *source,long bits){
   oggpack_writecopy_helper(b,source,bits,oggpackB_write,1);
@@ -259,30 +254,25 @@ void oggpack_readinit(oggpack_buffer *b,
 
 void oggpackB_readinit(oggpack_buffer *b,unsigned char *buf,int bytes){
   oggpack_readinit(b,buf,bytes);
 }
 
 /* Read in bits without advancing the bitptr; bits <= 32 */
 long oggpack_look(oggpack_buffer *b,int bits){
   unsigned long ret;
-  unsigned long m;
+  unsigned long m=mask[bits];
 
-  if(bits<0 || bits>32) return -1;
-  m=mask[bits];
   bits+=b->endbit;
 
-  if(b->endbyte >= b->storage-4){
+  if(b->endbyte+4>=b->storage){
     /* not the main path */
-    if(b->endbyte > b->storage-((bits+7)>>3)) return -1;
-    /* special case to avoid reading b->ptr[0], which might be past the end of
-        the buffer; also skips some useless accounting */
-    else if(!bits)return(0L);
+    if(b->endbyte*8+bits>b->storage*8)return(-1);
   }
-
+  
   ret=b->ptr[0]>>b->endbit;
   if(bits>8){
     ret|=b->ptr[1]<<(8-b->endbit);  
     if(bits>16){
       ret|=b->ptr[2]<<(16-b->endbit);  
       if(bits>24){
         ret|=b->ptr[3]<<(24-b->endbit);  
         if(bits>32 && b->endbit)
@@ -293,27 +283,23 @@ long oggpack_look(oggpack_buffer *b,int 
   return(m&ret);
 }
 
 /* Read in bits without advancing the bitptr; bits <= 32 */
 long oggpackB_look(oggpack_buffer *b,int bits){
   unsigned long ret;
   int m=32-bits;
 
-  if(m<0 || m>32) return -1;
   bits+=b->endbit;
 
-  if(b->endbyte >= b->storage-4){
+  if(b->endbyte+4>=b->storage){
     /* not the main path */
-    if(b->endbyte > b->storage-((bits+7)>>3)) return -1;
-    /* special case to avoid reading b->ptr[0], which might be past the end of
-        the buffer; also skips some useless accounting */
-    else if(!bits)return(0L);
+    if(b->endbyte*8+bits>b->storage*8)return(-1);
   }
-
+  
   ret=b->ptr[0]<<(24+b->endbit);
   if(bits>8){
     ret|=b->ptr[1]<<(16+b->endbit);  
     if(bits>16){
       ret|=b->ptr[2]<<(8+b->endbit);  
       if(bits>24){
         ret|=b->ptr[3]<<(b->endbit);  
         if(bits>32 && b->endbit)
@@ -331,28 +317,19 @@ long oggpack_look1(oggpack_buffer *b){
 
 long oggpackB_look1(oggpack_buffer *b){
   if(b->endbyte>=b->storage)return(-1);
   return((b->ptr[0]>>(7-b->endbit))&1);
 }
 
 void oggpack_adv(oggpack_buffer *b,int bits){
   bits+=b->endbit;
-
-  if(b->endbyte > b->storage-((bits+7)>>3)) goto overflow;
-
   b->ptr+=bits/8;
   b->endbyte+=bits/8;
   b->endbit=bits&7;
-  return;
-
- overflow:
-  b->ptr=NULL;
-  b->endbyte=b->storage;
-  b->endbit=1;
 }
 
 void oggpackB_adv(oggpack_buffer *b,int bits){
   oggpack_adv(b,bits);
 }
 
 void oggpack_adv1(oggpack_buffer *b){
   if(++(b->endbit)>7){
@@ -364,140 +341,129 @@ void oggpack_adv1(oggpack_buffer *b){
 
 void oggpackB_adv1(oggpack_buffer *b){
   oggpack_adv1(b);
 }
 
 /* bits <= 32 */
 long oggpack_read(oggpack_buffer *b,int bits){
   long ret;
-  unsigned long m;
+  unsigned long m=mask[bits];
 
-  if(bits<0 || bits>32) goto err;
-  m=mask[bits];
   bits+=b->endbit;
 
-  if(b->endbyte >= b->storage-4){
+  if(b->endbyte+4>=b->storage){
     /* not the main path */
-    if(b->endbyte > b->storage-((bits+7)>>3)) goto overflow;
-    /* special case to avoid reading b->ptr[0], which might be past the end of
-        the buffer; also skips some useless accounting */
-    else if(!bits)return(0L);
+    ret=-1L;
+    if(b->endbyte*8+bits>b->storage*8)goto overflow;
   }
-
+  
   ret=b->ptr[0]>>b->endbit;
   if(bits>8){
     ret|=b->ptr[1]<<(8-b->endbit);  
     if(bits>16){
       ret|=b->ptr[2]<<(16-b->endbit);  
       if(bits>24){
         ret|=b->ptr[3]<<(24-b->endbit);  
         if(bits>32 && b->endbit){
           ret|=b->ptr[4]<<(32-b->endbit);
         }
       }
     }
   }
   ret&=m;
+  
+ overflow:
+
   b->ptr+=bits/8;
   b->endbyte+=bits/8;
   b->endbit=bits&7;
-  return ret;
-
- overflow:
- err:
-  b->ptr=NULL;
-  b->endbyte=b->storage;
-  b->endbit=1;
-  return -1L;
+  return(ret);
 }
 
 /* bits <= 32 */
 long oggpackB_read(oggpack_buffer *b,int bits){
   long ret;
   long m=32-bits;
-
-  if(m<0 || m>32) goto err;
+  
   bits+=b->endbit;
 
   if(b->endbyte+4>=b->storage){
     /* not the main path */
-    if(b->endbyte > b->storage-((bits+7)>>3)) goto overflow;
+    ret=-1L;
+    if(b->endbyte*8+bits>b->storage*8)goto overflow;
     /* special case to avoid reading b->ptr[0], which might be past the end of
         the buffer; also skips some useless accounting */
     else if(!bits)return(0L);
   }
-
+  
   ret=b->ptr[0]<<(24+b->endbit);
   if(bits>8){
     ret|=b->ptr[1]<<(16+b->endbit);  
     if(bits>16){
       ret|=b->ptr[2]<<(8+b->endbit);  
       if(bits>24){
         ret|=b->ptr[3]<<(b->endbit);  
         if(bits>32 && b->endbit)
           ret|=b->ptr[4]>>(8-b->endbit);
       }
     }
   }
   ret=((ret&0xffffffffUL)>>(m>>1))>>((m+1)>>1);
+  
+ overflow:
 
   b->ptr+=bits/8;
   b->endbyte+=bits/8;
   b->endbit=bits&7;
-  return ret;
-
- overflow:
- err:
-  b->ptr=NULL;
-  b->endbyte=b->storage;
-  b->endbit=1;
-  return -1L;
+  return(ret);
 }
 
 long oggpack_read1(oggpack_buffer *b){
   long ret;
+  
+  if(b->endbyte>=b->storage){
+    /* not the main path */
+    ret=-1L;
+    goto overflow;
+  }
 
-  if(b->endbyte >= b->storage) goto overflow;
   ret=(b->ptr[0]>>b->endbit)&1;
+  
+ overflow:
 
   b->endbit++;
   if(b->endbit>7){
     b->endbit=0;
     b->ptr++;
     b->endbyte++;
   }
-  return ret;
-
- overflow:
-  b->ptr=NULL;
-  b->endbyte=b->storage;
-  b->endbit=1;
-  return -1L;
+  return(ret);
 }
 
 long oggpackB_read1(oggpack_buffer *b){
   long ret;
+  
+  if(b->endbyte>=b->storage){
+    /* not the main path */
+    ret=-1L;
+    goto overflow;
+  }
 
-  if(b->endbyte >= b->storage) goto overflow;
   ret=(b->ptr[0]>>(7-b->endbit))&1;
+  
+ overflow:
 
   b->endbit++;
   if(b->endbit>7){
     b->endbit=0;
     b->ptr++;
     b->endbyte++;
   }
-  return ret;
-
- overflow:
-  b->ptr=NULL;
-  b->endbyte=b->storage;
-  b->endbit=1;
-  return -1L;
+  return(ret);
 }
 
 long oggpack_bytes(oggpack_buffer *b){
   return(b->endbyte+(b->endbit+7)/8);
 }
 
 long oggpack_bits(oggpack_buffer *b){
   return(b->endbyte*8+b->endbit);
@@ -721,29 +687,29 @@ int main(void){
   cliptest(testbuffer2,test2size,17,five,fivesize);
   fprintf(stderr,"ok.");
 
   fprintf(stderr,"\nSingle bit unclipped packing (LSb): ");
   cliptest(testbuffer3,test3size,1,six,sixsize);
   fprintf(stderr,"ok.");
 
   fprintf(stderr,"\nTesting read past end (LSb): ");
-  oggpack_readinit(&r,(unsigned char *)"\0\0\0\0\0\0\0\0",8);
+  oggpack_readinit(&r,"\0\0\0\0\0\0\0\0",8);
   for(i=0;i<64;i++){
     if(oggpack_read(&r,1)!=0){
       fprintf(stderr,"failed; got -1 prematurely.\n");
       exit(1);
     }
   }
   if(oggpack_look(&r,1)!=-1 ||
      oggpack_read(&r,1)!=-1){
       fprintf(stderr,"failed; read past end without -1.\n");
       exit(1);
   }
-  oggpack_readinit(&r,(unsigned char *)"\0\0\0\0\0\0\0\0",8);
+  oggpack_readinit(&r,"\0\0\0\0\0\0\0\0",8);
   if(oggpack_read(&r,30)!=0 || oggpack_read(&r,16)!=0){
       fprintf(stderr,"failed 2; got -1 prematurely.\n");
       exit(1);
   }
 
   if(oggpack_look(&r,18)!=0 ||
      oggpack_look(&r,18)!=0){
     fprintf(stderr,"failed 3; got -1 prematurely.\n");
@@ -807,29 +773,29 @@ int main(void){
   cliptestB(testbuffer2,test2size,17,fiveB,fivesize);
   fprintf(stderr,"ok.");
 
   fprintf(stderr,"\nSingle bit unclipped packing (MSb): ");
   cliptestB(testbuffer3,test3size,1,sixB,sixsize);
   fprintf(stderr,"ok.");
 
   fprintf(stderr,"\nTesting read past end (MSb): ");
-  oggpackB_readinit(&r,(unsigned char *)"\0\0\0\0\0\0\0\0",8);
+  oggpackB_readinit(&r,"\0\0\0\0\0\0\0\0",8);
   for(i=0;i<64;i++){
     if(oggpackB_read(&r,1)!=0){
       fprintf(stderr,"failed; got -1 prematurely.\n");
       exit(1);
     }
   }
   if(oggpackB_look(&r,1)!=-1 ||
      oggpackB_read(&r,1)!=-1){
       fprintf(stderr,"failed; read past end without -1.\n");
       exit(1);
   }
-  oggpackB_readinit(&r,(unsigned char *)"\0\0\0\0\0\0\0\0",8);
+  oggpackB_readinit(&r,"\0\0\0\0\0\0\0\0",8);
   if(oggpackB_read(&r,30)!=0 || oggpackB_read(&r,16)!=0){
       fprintf(stderr,"failed 2; got -1 prematurely.\n");
       exit(1);
   }
 
   if(oggpackB_look(&r,18)!=0 ||
      oggpackB_look(&r,18)!=0){
     fprintf(stderr,"failed 3; got -1 prematurely.\n");
--- a/media/libogg/src/ogg_framing.c
+++ b/media/libogg/src/ogg_framing.c
@@ -1,23 +1,23 @@
 /********************************************************************
  *                                                                  *
- * THIS FILE IS PART OF THE Ogg CONTAINER SOURCE CODE.              *
+ * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
  *                                                                  *
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2010             *
+ * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
  * by the Xiph.Org Foundation http://www.xiph.org/                  *
  *                                                                  *
  ********************************************************************
 
  function: code raw packets into framed OggSquish stream and
            decode Ogg streams back into raw packets
- last mod: $Id: framing.c 17269 2010-06-04 05:39:45Z xiphmont $
+ last mod: $Id: framing.c 16051 2009-05-27 05:00:06Z xiphmont $
 
  note: The CRC code is directly derived from public domain code by
  Ross Williams (ross@guest.adelaide.edu.au).  See docs/framing.html
  for details.
 
  ********************************************************************/
 
 #include <stdlib.h>
@@ -361,79 +361,69 @@ int ogg_stream_iovecin(ogg_stream_state 
 
 int ogg_stream_packetin(ogg_stream_state *os,ogg_packet *op){
   ogg_iovec_t iov;
   iov.iov_base = op->packet;
   iov.iov_len = op->bytes;
   return ogg_stream_iovecin(os, &iov, 1, op->e_o_s, op->granulepos);
 }
 
-/* Conditionally flush a page; force==0 will only flush nominal-size
-   pages, force==1 forces us to flush a page regardless of page size
-   so long as there's any data available at all. */
-static int ogg_stream_flush_i(ogg_stream_state *os,ogg_page *og, int force, int nfill){
+/* This will flush remaining packets into a page (returning nonzero),
+   even if there is not enough data to trigger a flush normally
+   (undersized page). If there are no packets or partial packets to
+   flush, ogg_stream_flush returns 0.  Note that ogg_stream_flush will
+   try to flush a normal sized page like ogg_stream_pageout; a call to
+   ogg_stream_flush does not guarantee that all packets have flushed.
+   Only a return value of 0 from ogg_stream_flush indicates all packet
+   data is flushed into pages.
+
+   since ogg_stream_flush will flush the last page in a stream even if
+   it's undersized, you almost certainly want to use ogg_stream_pageout
+   (and *not* ogg_stream_flush) unless you specifically need to flush 
+   an page regardless of size in the middle of a stream. */
+
+int ogg_stream_flush(ogg_stream_state *os,ogg_page *og){
   int i;
   int vals=0;
   int maxvals=(os->lacing_fill>255?255:os->lacing_fill);
   int bytes=0;
   long acc=0;
   ogg_int64_t granule_pos=-1;
 
-  if(ogg_stream_check(os)) return(0);
-  if(maxvals==0) return(0);
-
+  if(ogg_stream_check(os)) return 0;
+  if(maxvals==0)return 0;
+  
   /* construct a page */
   /* decide how many segments to include */
-
+  
   /* If this is the initial header case, the first page must only include
      the initial header packet */
   if(os->b_o_s==0){  /* 'initial header page' case */
     granule_pos=0;
     for(vals=0;vals<maxvals;vals++){
       if((os->lacing_vals[vals]&0x0ff)<255){
         vals++;
         break;
       }
     }
   }else{
-
-    /* The extra packets_done, packet_just_done logic here attempts to do two things:
-       1) Don't unneccessarily span pages.
-       2) Unless necessary, don't flush pages if there are less than four packets on
-          them; this expands page size to reduce unneccessary overhead if incoming packets
-          are large.
-       These are not necessary behaviors, just 'always better than naive flushing'
-       without requiring an application to explicitly request a specific optimized
-       behavior. We'll want an explicit behavior setup pathway eventually as well. */
-
-    int packets_done=0;
-    int packet_just_done=0;
     for(vals=0;vals<maxvals;vals++){
-      if(acc>nfill && packet_just_done>=8){
-        force=1;
-        break;
-      }
+      if(acc>4096)break;
       acc+=os->lacing_vals[vals]&0x0ff;
-      if((os->lacing_vals[vals]&0xff)<255){
+      if((os->lacing_vals[vals]&0xff)<255)
         granule_pos=os->granule_vals[vals];
-        packet_just_done=++packets_done;
-      }else
-        packet_just_done=0;
     }
-    if(vals==255)force=1;
   }
-
-  if(!force) return(0);
-
+  
   /* construct the header in temp storage */
   memcpy(os->header,"OggS",4);
-
+  
   /* stream structure version */
   os->header[4]=0x00;
-
+  
   /* continued packet flag? */
   os->header[5]=0x00;
   if((os->lacing_vals[0]&0x100)==0)os->header[5]|=0x01;
   /* first page flag? */
   if(os->b_o_s==0)os->header[5]|=0x02;
   /* last page flag? */
   if(os->e_o_s && os->lacing_fill==vals)os->header[5]|=0x04;
   os->b_o_s=1;
@@ -495,62 +485,34 @@ static int ogg_stream_flush_i(ogg_stream
   /* calculate the checksum */
   
   ogg_page_checksum_set(og);
 
   /* done */
   return(1);
 }
 
-/* This will flush remaining packets into a page (returning nonzero),
-   even if there is not enough data to trigger a flush normally
-   (undersized page). If there are no packets or partial packets to
-   flush, ogg_stream_flush returns 0.  Note that ogg_stream_flush will
-   try to flush a normal sized page like ogg_stream_pageout; a call to
-   ogg_stream_flush does not guarantee that all packets have flushed.
-   Only a return value of 0 from ogg_stream_flush indicates all packet
-   data is flushed into pages.
-
-   since ogg_stream_flush will flush the last page in a stream even if
-   it's undersized, you almost certainly want to use ogg_stream_pageout
-   (and *not* ogg_stream_flush) unless you specifically need to flush
-   an page regardless of size in the middle of a stream. */
-
-int ogg_stream_flush(ogg_stream_state *os,ogg_page *og){
-  return ogg_stream_flush_i(os,og,1,4096);
-}
 
 /* This constructs pages from buffered packet segments.  The pointers
 returned are to static buffers; do not free. The returned buffers are
 good only until the next call (using the same ogg_stream_state) */
 
 int ogg_stream_pageout(ogg_stream_state *os, ogg_page *og){
-  int force=0;
   if(ogg_stream_check(os)) return 0;
 
   if((os->e_o_s&&os->lacing_fill) ||          /* 'were done, now flush' case */
-     (os->lacing_fill&&!os->b_o_s))           /* 'initial header page' case */
-    force=1;
-
-  return(ogg_stream_flush_i(os,og,force,4096));
-}
-
-/* Like the above, but an argument is provided to adjust the nominal 
-page size for applications which are smart enough to provide their
-own delay based flushing */
-   
-int ogg_stream_pageout_fill(ogg_stream_state *os, ogg_page *og, int nfill){
-  int force=0;
-  if(ogg_stream_check(os)) return 0;
-
-  if((os->e_o_s&&os->lacing_fill) ||          /* 'were done, now flush' case */
-     (os->lacing_fill&&!os->b_o_s))           /* 'initial header page' case */
-    force=1;
-
-  return(ogg_stream_flush_i(os,og,force,nfill));
+     os->body_fill-os->body_returned > 4096 ||/* 'page nominal size' case */
+     os->lacing_fill>=255 ||                  /* 'segment table full' case */
+     (os->lacing_fill&&!os->b_o_s)){          /* 'initial header page' case */
+        
+    return(ogg_stream_flush(os,og));
+  }
+  
+  /* not enough data to construct a page and not end of stream */
+  return 0;
 }
 
 int ogg_stream_eos(ogg_stream_state *os){
   if(ogg_stream_check(os)) return 1;
   return os->e_o_s;
 }
 
 /* DECODING PRIMITIVES: packet streaming layer **********************/
@@ -967,17 +929,17 @@ static int _packetout(ogg_stream_state *
 
   if(!op && !adv)return(1); /* just using peek as an inexpensive way
                                to ask if there's a whole packet
                                waiting */
 
   /* Gather the whole packet. We'll have no holes or a partial packet */
   {
     int size=os->lacing_vals[ptr]&0xff;
-    long bytes=size;
+    int bytes=size;
     int eos=os->lacing_vals[ptr]&0x200; /* last packet of the stream? */
     int bos=os->lacing_vals[ptr]&0x100; /* first packet of the stream? */
 
     while(size==255){
       int val=os->lacing_vals[++ptr];
       size=val&0xff;
       if(val&0x200)eos=0x200;
       bytes+=size;
@@ -1017,27 +979,27 @@ void ogg_packet_clear(ogg_packet *op) {
 }
 
 #ifdef _V_SELFTEST
 #include <stdio.h>
 
 ogg_stream_state os_en, os_de;
 ogg_sync_state oy;
 
-void checkpacket(ogg_packet *op,long len, int no, long pos){
+void checkpacket(ogg_packet *op,int len, int no, int pos){
   long j;
   static int sequence=0;
   static int lastno=0;
 
   if(op->bytes!=len){
-    fprintf(stderr,"incorrect packet length (%ld != %ld)!\n",op->bytes,len);
+    fprintf(stderr,"incorrect packet length!\n");
     exit(1);
   }
   if(op->granulepos!=pos){
-    fprintf(stderr,"incorrect packet granpos (%ld != %ld)!\n",(long)op->granulepos,pos);
+    fprintf(stderr,"incorrect packet position!\n");
     exit(1);
   }
 
   /* packet number just follows sequence/gap; adjust the input number
      for that */
   if(no==0){
     sequence=0;
   }else{
@@ -1194,83 +1156,28 @@ const int head1_4[] = {0x4f,0x67,0x67,0x
                        0x01,0x02,0x03,0x04,0,0,0,0,
                        0xff,0x7b,0x23,0x17,
                        1,
                        0};
 
 const int head2_4[] = {0x4f,0x67,0x67,0x53,0,0x00,
                        0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
                        0x01,0x02,0x03,0x04,1,0,0,0,
-                       0xf8,0x3c,0x19,0x79,
-                       255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
+                       0x54,0x05,0x51,0xc8,
+                       17,
                        255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255};
+                       255,255,255,255,255,255,255,255,255};
 
 const int head3_4[] = {0x4f,0x67,0x67,0x53,0,0x05,
                        0x07,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,
                        0x01,0x02,0x03,0x04,2,0,0,0,
-                       0x38,0xe6,0xb6,0x28,
-                       6,
-                       255,220,255,4,255,0};
-
-
-/* spill expansion test */
-const int head1_4b[] = {0x4f,0x67,0x67,0x53,0,0x02,
-                        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-                        0x01,0x02,0x03,0x04,0,0,0,0,
-                        0xff,0x7b,0x23,0x17,
-                        1,
-                        0};
+                       0xc8,0xc3,0xcb,0xed,
+                       5,
+                       10,255,4,255,0};
 
-const int head2_4b[] = {0x4f,0x67,0x67,0x53,0,0x00,
-                        0x07,0x20,0x00,0x00,0x00,0x00,0x00,0x00,
-                        0x01,0x02,0x03,0x04,1,0,0,0,
-                        0xe6,0x54,0xfe,0x7d,
-                        27,
-                        255,255,255,255,255,255,255,255,
-                        255,255,255,255,255,255,255,255,
-                        255,10,255,4,255,0,0,0,0,0,0};
-
-
-const int head3_4b[] = {0x4f,0x67,0x67,0x53,0,0x04,
-                        0x07,0x24,0x00,0x00,0x00,0x00,0x00,0x00,
-                        0x01,0x02,0x03,0x04,2,0,0,0,
-                        0x77,0x62,0xe0,0x12,
-                        1,
-                        0};
 
 /* page with the 255 segment limit */
 const int head1_5[] = {0x4f,0x67,0x67,0x53,0,0x02,
                        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                        0x01,0x02,0x03,0x04,0,0,0,0,
                        0xff,0x7b,0x23,0x17,
                        1,
                        0};
@@ -1327,152 +1234,59 @@ const int head1_6[] = {0x4f,0x67,0x67,0x
                        0x01,0x02,0x03,0x04,0,0,0,0,
                        0xff,0x7b,0x23,0x17,
                        1,
                        0};
 
 const int head2_6[] = {0x4f,0x67,0x67,0x53,0,0x00,
                        0x07,0x04,0x00,0x00,0x00,0x00,0x00,0x00,
                        0x01,0x02,0x03,0x04,1,0,0,0,
-                       0x68,0x22,0x7c,0x3d,
-                       255,
-                       100,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255};
+                       0x3c,0xd9,0x4d,0x3f,
+                       17,
+                       100,255,255,255,255,255,255,255,255,
+                       255,255,255,255,255,255,255,255};
 
 const int head3_6[] = {0x4f,0x67,0x67,0x53,0,0x01,
                        0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
                        0x01,0x02,0x03,0x04,2,0,0,0,
-                       0xf4,0x87,0xba,0xf3,
-                       255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
+                       0x01,0xd2,0xe5,0xe5,
+                       17,
                        255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255};
+                       255,255,255,255,255,255,255,255,255};
 
 const int head4_6[] = {0x4f,0x67,0x67,0x53,0,0x05,
                        0x07,0x10,0x00,0x00,0x00,0x00,0x00,0x00,
                        0x01,0x02,0x03,0x04,3,0,0,0,
-                       0xf7,0x2f,0x6c,0x60,
-                       5,
-                       254,255,4,255,0};
+                       0xef,0xdd,0x88,0xde,
+                       7,
+                       255,255,75,255,4,255,0};
 
 /* packet that overspans over an entire page */
 const int head1_7[] = {0x4f,0x67,0x67,0x53,0,0x02,
                        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                        0x01,0x02,0x03,0x04,0,0,0,0,
                        0xff,0x7b,0x23,0x17,
                        1,
                        0};
 
 const int head2_7[] = {0x4f,0x67,0x67,0x53,0,0x00,
                        0x07,0x04,0x00,0x00,0x00,0x00,0x00,0x00,
                        0x01,0x02,0x03,0x04,1,0,0,0,
-                       0x68,0x22,0x7c,0x3d,
-                       255,
-                       100,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255,255,255,
-                       255,255,255,255,255,255};
+                       0x3c,0xd9,0x4d,0x3f,
+                       17,
+                       100,255,255,255,255,255,255,255,255,
+                       255,255,255,255,255,255,255,255};
 
 const int head3_7[] = {0x4f,0x67,0x67,0x53,0,0x05,
                        0x07,0x08,0x00,0x00,0x00,0x00,0x00,0x00,
                        0x01,0x02,0x03,0x04,2,0,0,0,
                        0xd4,0xe0,0x60,0xe5,
-                       1,
-                       0};
+                       1,0};
 
-void test_pack(const int *pl, const int **headers, int byteskip,
+void test_pack(const int *pl, const int **headers, int byteskip, 
                int pageskip, int packetskip){
   unsigned char *data=_ogg_malloc(1024*1024); /* for scripted test cases only */
   long inptr=0;
   long outptr=0;
   long deptr=0;
   long depacket=0;
   long granule_pos=7,pageno=0;
   int i,j,packets,pageout=pageskip;
@@ -1555,17 +1369,17 @@ void test_pack(const int *pl, const int 
           ogg_sync_wrote(&oy,next-buf);
 
           while(1){
             int ret=ogg_sync_pageout(&oy,&og_de);
             if(ret==0)break;
             if(ret<0)continue;
             /* got a page.  Happy happy.  Verify that it's good. */
             
-            fprintf(stderr,"(%d), ",pageout);
+            fprintf(stderr,"(%ld), ",pageout);
 
             check_page(data+deptr,headers[pageout],&og_de);
             deptr+=og_de.body_len;
             pageout++;
 
             /* submit it to deconstitution */
             ogg_stream_pagein(&os_de,&og_de);
 
@@ -1654,67 +1468,57 @@ int main(void){
 
   /* Exercise each code path in the framing code.  Also verify that
      the checksums are working.  */
 
   {
     /* 17 only */
     const int packets[]={17, -1};
     const int *headret[]={head1_0,NULL};
-
+    
     fprintf(stderr,"testing single page encoding... ");
     test_pack(packets,headret,0,0,0);
   }
 
   {
     /* 17, 254, 255, 256, 500, 510, 600 byte, pad */
     const int packets[]={17, 254, 255, 256, 500, 510, 600, -1};
     const int *headret[]={head1_1,head2_1,NULL};
-
+    
     fprintf(stderr,"testing basic page encoding... ");
     test_pack(packets,headret,0,0,0);
   }
 
   {
     /* nil packets; beginning,middle,end */
     const int packets[]={0,17, 254, 255, 0, 256, 0, 500, 510, 600, 0, -1};
     const int *headret[]={head1_2,head2_2,NULL};
-
+    
     fprintf(stderr,"testing basic nil packets... ");
     test_pack(packets,headret,0,0,0);
   }
 
   {
     /* large initial packet */
     const int packets[]={4345,259,255,-1};
     const int *headret[]={head1_3,head2_3,NULL};
-
+    
     fprintf(stderr,"testing initial-packet lacing > 4k... ");
     test_pack(packets,headret,0,0,0);
   }
 
   {
-    /* continuing packet test; with page spill expansion, we have to
-       overflow the lacing table. */
-    const int packets[]={0,65500,259,255,-1};
+    /* continuing packet test */
+    const int packets[]={0,4345,259,255,-1};
     const int *headret[]={head1_4,head2_4,head3_4,NULL};
-
+    
     fprintf(stderr,"testing single packet page span... ");
     test_pack(packets,headret,0,0,0);
   }
 
-  {
-    /* spill expand packet test */
-    const int packets[]={0,4345,259,255,0,0,0,0,0,0,-1};
-    const int *headret[]={head1_4b,head2_4b,head3_4b,NULL};
-
-    fprintf(stderr,"testing page spill expansion... ");
-    test_pack(packets,headret,0,0,0);
-  }
-
   /* page with the 255 segment limit */
   {
 
     const int packets[]={0,10,10,10,10,10,10,10,10,
                    10,10,10,10,10,10,10,10,
                    10,10,10,10,10,10,10,10,
                    10,10,10,10,10,10,10,10,
                    10,10,10,10,10,10,10,10,
@@ -1748,48 +1552,48 @@ int main(void){
     const int *headret[]={head1_5,head2_5,head3_5,NULL};
     
     fprintf(stderr,"testing max packet segments... ");
     test_pack(packets,headret,0,0,0);
   }
 
   {
     /* packet that overspans over an entire page */
-    const int packets[]={0,100,130049,259,255,-1};
+    const int packets[]={0,100,9000,259,255,-1};
     const int *headret[]={head1_6,head2_6,head3_6,head4_6,NULL};
     
     fprintf(stderr,"testing very large packets... ");
     test_pack(packets,headret,0,0,0);
   }
 
   {
     /* test for the libogg 1.1.1 resync in large continuation bug
        found by Josh Coalson)  */
-    const int packets[]={0,100,130049,259,255,-1};
+    const int packets[]={0,100,9000,259,255,-1};
     const int *headret[]={head1_6,head2_6,head3_6,head4_6,NULL};
     
     fprintf(stderr,"testing continuation resync in very large packets... ");
     test_pack(packets,headret,100,2,3);
   }
 
   {
     /* term only page.  why not? */
-    const int packets[]={0,100,64770,-1};
+    const int packets[]={0,100,4080,-1};
     const int *headret[]={head1_7,head2_7,head3_7,NULL};
     
     fprintf(stderr,"testing zero data page (1 nil packet)... ");
     test_pack(packets,headret,0,0,0);
   }
 
 
 
   {
     /* build a bunch of pages for testing */
     unsigned char *data=_ogg_malloc(1024*1024);
-    int pl[]={0, 0,0,0,0,1,1,98,4079, 0,0,0,0,1,1,2954,2057, 0,0,0,0,76,34,912,0,234,1000,1000, 1000,300,-1};
+    int pl[]={0,100,4079,2956,2057,76,34,912,0,234,1000,1000,1000,300,-1};
     int inptr=0,i,j;
     ogg_page og[5];
     
     ogg_stream_reset(&os_en);
 
     for(i=0;pl[i]!=-1;i++){
       ogg_packet op;
       int len=pl[i];
@@ -1840,47 +1644,27 @@ int main(void){
       ogg_sync_pageout(&oy,&temp);
       ogg_stream_pagein(&os_de,&temp);
 
       /* do we get the expected results/packets? */
       
       if(ogg_stream_packetout(&os_de,&test)!=1)error();
       checkpacket(&test,0,0,0);
       if(ogg_stream_packetout(&os_de,&test)!=1)error();
-      checkpacket(&test,0,1,-1);
-      if(ogg_stream_packetout(&os_de,&test)!=1)error();
-      checkpacket(&test,0,2,-1);
-      if(ogg_stream_packetout(&os_de,&test)!=1)error();
-      checkpacket(&test,0,3,-1);
-      if(ogg_stream_packetout(&os_de,&test)!=1)error();
-      checkpacket(&test,0,4,-1);
+      checkpacket(&test,100,1,-1);
       if(ogg_stream_packetout(&os_de,&test)!=1)error();
-      checkpacket(&test,1,5,-1);
-      if(ogg_stream_packetout(&os_de,&test)!=1)error();
-      checkpacket(&test,1,6,-1);
-      if(ogg_stream_packetout(&os_de,&test)!=1)error();
-      checkpacket(&test,98,7,-1);
-      if(ogg_stream_packetout(&os_de,&test)!=1)error();
-      checkpacket(&test,4079,8,9000);
+      checkpacket(&test,4079,2,3000);
       if(ogg_stream_packetout(&os_de,&test)!=-1){
         fprintf(stderr,"Error: loss of page did not return error\n");
         exit(1);
       }
       if(ogg_stream_packetout(&os_de,&test)!=1)error();
-      checkpacket(&test,0,17,-1);
-      if(ogg_stream_packetout(&os_de,&test)!=1)error();
-      checkpacket(&test,0,18,-1);
-      if(ogg_stream_packetout(&os_de,&test)!=1)error();
-      checkpacket(&test,0,19,-1);
+      checkpacket(&test,76,5,-1);
       if(ogg_stream_packetout(&os_de,&test)!=1)error();
-      checkpacket(&test,0,20,-1);
-      if(ogg_stream_packetout(&os_de,&test)!=1)error();
-      checkpacket(&test,76,21,-1);
-      if(ogg_stream_packetout(&os_de,&test)!=1)error();
-      checkpacket(&test,34,22,-1);
+      checkpacket(&test,34,6,-1);
       fprintf(stderr,"ok.\n");
     }
 
     /* Test lost pages on pagein/packetout: rollback with continuation */
     {
       ogg_page temp;
       ogg_packet test;
 
@@ -1903,107 +1687,81 @@ int main(void){
       ogg_sync_pageout(&oy,&temp);
       ogg_stream_pagein(&os_de,&temp);
       ogg_sync_pageout(&oy,&temp);
       /* skip */
       ogg_sync_pageout(&oy,&temp);
       ogg_stream_pagein(&os_de,&temp);
 
       /* do we get the expected results/packets? */
-
+      
       if(ogg_stream_packetout(&os_de,&test)!=1)error();
       checkpacket(&test,0,0,0);
       if(ogg_stream_packetout(&os_de,&test)!=1)error();
-      checkpacket(&test,0,1,-1);
-      if(ogg_stream_packetout(&os_de,&test)!=1)error();
-      checkpacket(&test,0,2,-1);
-      if(ogg_stream_packetout(&os_de,&test)!=1)error();
-      checkpacket(&test,0,3,-1);
-      if(ogg_stream_packetout(&os_de,&test)!=1)error();
-      checkpacket(&test,0,4,-1);
-      if(ogg_stream_packetout(&os_de,&test)!=1)error();
-      checkpacket(&test,1,5,-1);
-      if(ogg_stream_packetout(&os_de,&test)!=1)error();
-      checkpacket(&test,1,6,-1);
-      if(ogg_stream_packetout(&os_de,&test)!=1)error();
-      checkpacket(&test,98,7,-1);
-      if(ogg_stream_packetout(&os_de,&test)!=1)error();
-      checkpacket(&test,4079,8,9000);
+      checkpacket(&test,100,1,-1);
       if(ogg_stream_packetout(&os_de,&test)!=1)error();
-      checkpacket(&test,0,9,-1);
-      if(ogg_stream_packetout(&os_de,&test)!=1)error();
-      checkpacket(&test,0,10,-1);
-      if(ogg_stream_packetout(&os_de,&test)!=1)error();
-      checkpacket(&test,0,11,-1);
-      if(ogg_stream_packetout(&os_de,&test)!=1)error();
-      checkpacket(&test,0,12,-1);
+      checkpacket(&test,4079,2,3000);
       if(ogg_stream_packetout(&os_de,&test)!=1)error();
-      checkpacket(&test,1,13,-1);
-      if(ogg_stream_packetout(&os_de,&test)!=1)error();
-      checkpacket(&test,1,14,-1);
-      if(ogg_stream_packetout(&os_de,&test)!=1)error();
-      checkpacket(&test,2954,15,-1);
-      if(ogg_stream_packetout(&os_de,&test)!=1)error();
-      checkpacket(&test,2057,16,17000);
+      checkpacket(&test,2956,3,4000);
       if(ogg_stream_packetout(&os_de,&test)!=-1){
         fprintf(stderr,"Error: loss of page did not return error\n");
         exit(1);
       }
       if(ogg_stream_packetout(&os_de,&test)!=1)error();
-      checkpacket(&test,300,29,30000);
+      checkpacket(&test,300,13,14000);
       fprintf(stderr,"ok.\n");
     }
-
+    
     /* the rest only test sync */
     {
       ogg_page og_de;
       /* Test fractional page inputs: incomplete capture */
       fprintf(stderr,"Testing sync on partial inputs... ");
       ogg_sync_reset(&oy);
       memcpy(ogg_sync_buffer(&oy,og[1].header_len),og[1].header,
              3);
       ogg_sync_wrote(&oy,3);
       if(ogg_sync_pageout(&oy,&og_de)>0)error();
-
+      
       /* Test fractional page inputs: incomplete fixed header */
       memcpy(ogg_sync_buffer(&oy,og[1].header_len),og[1].header+3,
              20);
       ogg_sync_wrote(&oy,20);
       if(ogg_sync_pageout(&oy,&og_de)>0)error();
-
+      
       /* Test fractional page inputs: incomplete header */
       memcpy(ogg_sync_buffer(&oy,og[1].header_len),og[1].header+23,
              5);
       ogg_sync_wrote(&oy,5);
       if(ogg_sync_pageout(&oy,&og_de)>0)error();
-
+      
       /* Test fractional page inputs: incomplete body */
-
+      
       memcpy(ogg_sync_buffer(&oy,og[1].header_len),og[1].header+28,
              og[1].header_len-28);
       ogg_sync_wrote(&oy,og[1].header_len-28);
       if(ogg_sync_pageout(&oy,&og_de)>0)error();
-
+      
       memcpy(ogg_sync_buffer(&oy,og[1].body_len),og[1].body,1000);
       ogg_sync_wrote(&oy,1000);
       if(ogg_sync_pageout(&oy,&og_de)>0)error();
-
+      
       memcpy(ogg_sync_buffer(&oy,og[1].body_len),og[1].body+1000,
              og[1].body_len-1000);
       ogg_sync_wrote(&oy,og[1].body_len-1000);
       if(ogg_sync_pageout(&oy,&og_de)<=0)error();
-
+      
       fprintf(stderr,"ok.\n");
     }
 
     /* Test fractional page inputs: page + incomplete capture */
     {
       ogg_page og_de;
       fprintf(stderr,"Testing sync on 1+partial inputs... ");
-      ogg_sync_reset(&oy);
+      ogg_sync_reset(&oy); 
 
       memcpy(ogg_sync_buffer(&oy,og[1].header_len),og[1].header,
              og[1].header_len);
       ogg_sync_wrote(&oy,og[1].header_len);
 
       memcpy(ogg_sync_buffer(&oy,og[1].body_len),og[1].body,
              og[1].body_len);
       ogg_sync_wrote(&oy,og[1].body_len);