|
|
1.1 root 1: /*---------------------------------------------------------------------------
2:
3: file_io.c
4:
5: This file contains routines for doing direct input/output, file-related
6: sorts of things. Most of the system-specific code for unzip is contained
7: here, including the non-echoing password code for decryption (bottom).
8:
9: Modified: 24 Jun 92 - HAJK
10: Fix VMS support
11: ---------------------------------------------------------------------------*/
12:
13:
14: #include "zunzip.h"
15:
16: /****************************/
17: /* Function FillBitBuffer() */
18: /****************************/
19:
20: int FillBitBuffer()
21: {
22: /*
23: * Fill bitbuf, which is 32 bits. This function is only used by the
24: * READBIT and PEEKBIT macros (which are used by all of the uncompression
25: * routines).
26: */
27: UWORD temp;
28:
29: zipeof = 1;
30: while (bits_left < 25 && ReadByte(&temp) == 8)
31: {
32: bitbuf |= (ULONG)temp << bits_left;
33: bits_left += 8;
34: zipeof = 0;
35: }
36: return 0;
37: }
38:
39: /***********************/
40: /* Function ReadByte() */
41: /***********************/
42:
43: int ReadByte(x)
44: UWORD *x;
45: {
46: /*
47: * read a byte; return 8 if byte available, 0 if not
48: */
49:
50:
51: if (csize-- <= 0)
52: return 0;
53:
54: if (incnt == 0) {
55: if ((incnt = read(zipfd, inbuf, INBUFSIZ)) <= 0)
56: return 0;
57: /* buffer ALWAYS starts on a block boundary: */
58: inptr = inbuf;
59: }
60: *x = *inptr++;
61: --incnt;
62: return 8;
63: }
64:
65:
66: /**************************/
67: /* Function FlushOutput() */
68: /**************************/
69:
70: int FlushOutput()
71: {
72: /*
73: * flush contents of output buffer; return PK-type error code
74: */
75: int len;
76:
77: if (outcnt) {
78: len = outcnt;
79: if (write(outfd, outout, len) != len)
80: #ifdef MINIX
81: if (errno == EFBIG)
82: if (write(fd, outout, len/2) != len/2 ||
83: write(fd, outout+len/2, len/2) != len/2)
84: #endif /* MINIX */
85: {
86: return 50; /* 50: disk full */
87: }
88: outpos += outcnt;
89: outcnt = 0;
90: outptr = outbuf;
91: }
92: return (0); /* 0: no error */
93: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.