Fix broken buffered I/O (to make cjpeg work)



git-svn-id: svn+ssh://svn.code.sf.net/p/libjpeg-turbo/code/trunk@30 632fc199-4ca6-4c93-a231-07263d6284db
diff --git a/jchuff.c b/jchuff.c
index 94a66c5..23b29b8 100644
--- a/jchuff.c
+++ b/jchuff.c
@@ -311,6 +311,8 @@
 {
   struct jpeg_destination_mgr * dest = state->cinfo->dest;
 
+  dest->free_in_buffer = state->free_in_buffer;
+
   if (! (*dest->empty_output_buffer) (state->cinfo))
     return FALSE;
   /* After a successful buffer dump, must reset buffer pointers */
@@ -380,8 +382,10 @@
   unsigned char *buffer;
   int put_buffer, put_bits;
 
-  if ((state)->free_in_buffer < DCTSIZE2 * 2)
+  if ((state)->free_in_buffer < 1)
     if (! dump_buffer(state)) return FALSE;
+  if ((state)->free_in_buffer < 1)
+    ERREXIT(state->cinfo, JERR_BUFFER_SIZE);
 
   buffer = state->next_output_byte;
   put_buffer = state->cur.put_buffer;
@@ -394,9 +398,6 @@
   state->free_in_buffer -= (buffer - state->next_output_byte);
   state->next_output_byte = buffer;
 
-  if ((state)->free_in_buffer < DCTSIZE2 * 2) 
-    if (! dump_buffer(state)) return FALSE;
-
   return TRUE;
 }
 
@@ -415,6 +416,8 @@
 
   if ((state)->free_in_buffer < DCTSIZE2 * 2)
     if (! dump_buffer(state)) return FALSE;
+  if ((state)->free_in_buffer < DCTSIZE2 * 2)
+    ERREXIT(state->cinfo, JERR_BUFFER_SIZE);
 
   buffer = state->next_output_byte;
   put_buffer = state->cur.put_buffer;
@@ -474,9 +477,6 @@
   state->free_in_buffer -= (buffer - state->next_output_byte);
   state->next_output_byte = buffer;
 
-  if ((state)->free_in_buffer < DCTSIZE2 * 2)
-    if (! dump_buffer(state)) return FALSE;
-
   return TRUE;
 }