Home | History | Annotate | Line # | Download | only in gzip
unbzip2.c revision 1.1.2.1
      1  1.1.2.1  grant /*	$NetBSD: unbzip2.c,v 1.1.2.1 2004/03/31 09:05:36 grant Exp $	*/
      2      1.1    mrg 
      3      1.1    mrg /* This file is #included by gzip.c */
      4      1.1    mrg 
      5      1.1    mrg static off_t
      6      1.1    mrg unbzip2(int in, int out)
      7      1.1    mrg {
      8  1.1.2.1  grant 	FILE		*f_in;
      9  1.1.2.1  grant 	BZFILE		*b_in;
     10  1.1.2.1  grant 	int		bzerror, n;
     11      1.1    mrg 	off_t		bytes_out = 0;
     12  1.1.2.1  grant 	char            buffer[64 * 1024];
     13  1.1.2.1  grant 
     14  1.1.2.1  grant 	if ((in = dup(in)) < 0)
     15  1.1.2.1  grant 		maybe_err(1, "dup");
     16  1.1.2.1  grant 
     17  1.1.2.1  grant 	if ((f_in = fdopen(in, "r")) == NULL)
     18  1.1.2.1  grant 		maybe_err(1, "fdopen");
     19  1.1.2.1  grant 
     20  1.1.2.1  grant 	if ((b_in = BZ2_bzReadOpen(&bzerror, f_in, 0, 0, NULL, 0)) == NULL)
     21  1.1.2.1  grant 		maybe_err(1, "BZ2_bzReadOpen");
     22  1.1.2.1  grant 
     23  1.1.2.1  grant 	do {
     24  1.1.2.1  grant 		n = BZ2_bzRead(&bzerror, b_in, buffer, sizeof (buffer));
     25  1.1.2.1  grant 
     26  1.1.2.1  grant 		switch (bzerror) {
     27  1.1.2.1  grant 		case BZ_IO_ERROR:
     28  1.1.2.1  grant 			maybe_errx(1, "bzip2 I/O error");
     29  1.1.2.1  grant 		case BZ_UNEXPECTED_EOF:
     30  1.1.2.1  grant 			maybe_errx(1, "bzip2 unexpected end of file");
     31  1.1.2.1  grant 		case BZ_DATA_ERROR:
     32  1.1.2.1  grant 			maybe_errx(1, "bzip2 data integrity error");
     33  1.1.2.1  grant 		case BZ_DATA_ERROR_MAGIC:
     34  1.1.2.1  grant 			maybe_errx(1, "bzip2 magic number error");
     35  1.1.2.1  grant 		case BZ_MEM_ERROR:
     36  1.1.2.1  grant 			maybe_errx(1, "bzip2 out of memory");
     37  1.1.2.1  grant 		case BZ_OK:
     38  1.1.2.1  grant 		case BZ_STREAM_END:
     39  1.1.2.1  grant 			break;
     40  1.1.2.1  grant 		default:
     41  1.1.2.1  grant 			maybe_errx(1, "bzip2 unknown error");
     42  1.1.2.1  grant 		}
     43  1.1.2.1  grant 
     44  1.1.2.1  grant 		if ((n = write(out, buffer, n)) < 0)
     45  1.1.2.1  grant 			maybe_err(1, "write");
     46  1.1.2.1  grant 		bytes_out += n;
     47  1.1.2.1  grant 	} while (bzerror != BZ_STREAM_END);
     48      1.1    mrg 
     49  1.1.2.1  grant 	(void)BZ2_bzReadClose(&bzerror, b_in);
     50  1.1.2.1  grant 	(void)fclose(f_in);
     51      1.1    mrg 
     52      1.1    mrg 
     53      1.1    mrg 	return (bytes_out);
     54      1.1    mrg }
     55