This commit was generated by cvs2svn to track changes on a CVS vendor
[unix-history] / gnu / usr.bin / gzip / unlzw.c
index 0687c1b..15d2a31 100644 (file)
@@ -7,11 +7,10 @@
  * to accommodate in-memory decompression.
  */
 
  * to accommodate in-memory decompression.
  */
 
-#ifndef lint
-static char rcsid[] = "$Id: unlzw.c,v 0.13 1993/05/27 10:32:55 jloup Exp $";
+#ifdef RCSID
+static char rcsid[] = "$Id: unlzw.c,v 0.15 1993/06/10 13:28:35 jloup Exp $";
 #endif
 
 #endif
 
-#include <stdio.h>
 #include <sys/types.h>
 
 #include "tailor.h"
 #include <sys/types.h>
 
 #include "tailor.h"
@@ -263,6 +262,7 @@ int unlzw(in, out)
                read_error();
            }
            insize += rsize;
                read_error();
            }
            insize += rsize;
+           bytes_in += (ulg)rsize;
        }
        inbits = ((rsize != 0) ? ((long)insize - insize%n_bits)<<3 : 
                  ((long)insize<<3)-(n_bits-1));
        }
        inbits = ((rsize != 0) ? ((long)insize - insize%n_bits)<<3 : 
                  ((long)insize<<3)-(n_bits-1));
@@ -281,8 +281,10 @@ int unlzw(in, out)
                goto resetbuf;
            }
            input(inbuf,posbits,code,n_bits,bitmask);
                goto resetbuf;
            }
            input(inbuf,posbits,code,n_bits,bitmask);
-           
+           Tracev((stderr, "%d ", code));
+
            if (oldcode == -1) {
            if (oldcode == -1) {
+               if (code >= 256) error("corrupt input.");
                outbuf[outpos++] = (char_type)(finchar = (int)(oldcode=code));
                continue;
            }
                outbuf[outpos++] = (char_type)(finchar = (int)(oldcode=code));
                continue;
            }
@@ -313,9 +315,11 @@ int unlzw(in, out)
                            posbits, p[-1],p[0],p[1],p[2],p[3]);
 #endif
                    if (!test && outpos > 0) {
                            posbits, p[-1],p[0],p[1],p[2],p[3]);
 #endif
                    if (!test && outpos > 0) {
-                       write_buf(out, outbuf, outpos);
+                       write_buf(out, (char*)outbuf, outpos);
+                       bytes_out += (ulg)outpos;
                    }
                    }
-                   error("corrupt input. Use zcat to recover some data.");
+                   error(to_stdout ? "corrupt input." :
+                         "corrupt input. Use zcat to recover some data.");
                }
                *--stackp = (char_type)finchar;
                code = oldcode;
                }
                *--stackp = (char_type)finchar;
                code = oldcode;
@@ -341,7 +345,10 @@ int unlzw(in, out)
                            outpos += i;
                        }
                        if (outpos >= OUTBUFSIZ) {
                            outpos += i;
                        }
                        if (outpos >= OUTBUFSIZ) {
-                           if (!test) write_buf(out, outbuf, outpos);
+                           if (!test) {
+                               write_buf(out, (char*)outbuf, outpos);
+                               bytes_out += (ulg)outpos;
+                           }
                            outpos = 0;
                        }
                        stackp+= i;
                            outpos = 0;
                        }
                        stackp+= i;
@@ -360,10 +367,11 @@ int unlzw(in, out)
            } 
            oldcode = incode;   /* Remember previous code.      */
        }
            } 
            oldcode = incode;   /* Remember previous code.      */
        }
-       bytes_in += rsize;
-
     } while (rsize != 0);
     
     } while (rsize != 0);
     
-    if (!test && outpos > 0) write_buf(out, outbuf, outpos);
+    if (!test && outpos > 0) {
+       write_buf(out, (char*)outbuf, outpos);
+       bytes_out += (ulg)outpos;
+    }
     return OK;
 }
     return OK;
 }