Lines Matching defs:gzio

0 /* gzio.c - decompression support for gzip */
184 grub_gzio_t gzio = file->data;
186 if (grub_file_tell (gzio->file) != 0)
187 grub_file_seek (gzio->file, 0);
194 if (grub_file_read (gzio->file, &hdr, 10) != 10
210 && (grub_file_read (gzio->file, &extra_len, 2) != 2
211 || eat_field (gzio->file,
213 || ((hdr.flags & ORIG_NAME) && eat_field (gzio->file, -1))
214 || ((hdr.flags & COMMENT) && eat_field (gzio->file, -1)))
220 gzio->data_offset = grub_file_tell (gzio->file);
222 if (gzio->file->not_easily_seekable == 0 ||
226 grub_file_seek (gzio->file, grub_file_size (gzio->file) - 4);
227 if (grub_file_read (gzio->file, &orig_len, 4) != 4)
234 grub_dprintf("gzio", "Original file size = %u\n", orig_len);
235 grub_dprintf("gzio", "backing file size = %u\n", (unsigned)gzio->file->size);
239 file->size = grub_file_size (gzio->file);
240 grub_dprintf("gzio", "backing file size = %llu\n",
245 initialize_tables (gzio);
385 #define NEEDBITS(n) do {while(k<(n)){b|=((ulg)get_byte(gzio))<<k;k+=8;}} while (0)
389 get_byte (grub_gzio_t gzio)
391 if (gzio->mem_input)
393 if (gzio->mem_input_off < gzio->mem_input_size)
394 return gzio->mem_input[gzio->mem_input_off++];
398 if (gzio->file && (grub_file_tell (gzio->file)
399 == (grub_off_t) gzio->data_offset
400 || gzio->inbuf_d == INBUFSIZ))
402 gzio->inbuf_d = 0;
403 grub_file_read (gzio->file, gzio->inbuf, INBUFSIZ);
406 return gzio->inbuf[gzio->inbuf_d++];
410 gzio_seek (grub_gzio_t gzio, grub_off_t off)
412 if (gzio->mem_input)
414 if (off > gzio->mem_input_size)
418 gzio->mem_input_off = off;
421 grub_file_seek (gzio->file, off);
655 inflate_codes_in_window (grub_gzio_t gzio)
666 d = gzio->inflate_d;
667 n = gzio->inflate_n;
668 b = gzio->bb; /* initialize bit buffer */
669 k = gzio->bk;
670 w = gzio->wp; /* initialize window position */
673 ml = mask_bits[gzio->bl]; /* precompute masks for speed */
674 md = mask_bits[gzio->bd];
677 if (! gzio->code_state)
679 NEEDBITS ((unsigned) gzio->bl);
680 if ((e = (t = gzio->tl + ((unsigned) b & ml))->e) > 16)
698 gzio->slide[w++] = (uch) t->v.n;
708 gzio->block_len = 0;
718 NEEDBITS ((unsigned) gzio->bd);
719 if ((e = (t = gzio->td + ((unsigned) b & md))->e) > 16)
738 gzio->code_state++;
742 if (gzio->code_state)
752 grub_memmove (gzio->slide + w, gzio->slide + d, e);
760 gzio->slide[w++] = gzio->slide[d++];
769 gzio->code_state--;
778 gzio->inflate_d = d;
779 gzio->inflate_n = n;
780 gzio->wp = w; /* restore global window pointer */
781 gzio->bb = b; /* restore global bit buffer */
782 gzio->bk = k;
784 return ! gzio->block_len;
791 init_stored_block (grub_gzio_t gzio)
797 b = gzio->bb; /* initialize bit buffer */
798 k = gzio->bk;
805 gzio->block_len = ((unsigned) b & 0xffff);
808 if (gzio->block_len != (int) ((~b) & 0xffff))
814 gzio->bb = b;
815 gzio->bk = k;
824 init_fixed_block (grub_gzio_t gzio)
838 gzio->bl = 7;
839 if (huft_build (l, 288, 257, cplens, cplext, &gzio->tl, &gzio->bl) != 0)
850 gzio->bd = 5;
851 if (huft_build (l, 30, 0, cpdist, cpdext, &gzio->td, &gzio->bd) > 1)
856 huft_free (gzio->tl);
857 gzio->tl = 0;
862 gzio->code_state = 0;
863 gzio->block_len++;
870 init_dynamic_block (grub_gzio_t gzio)
885 b = gzio->bb;
886 k = gzio->bk;
915 gzio->bl = 7;
916 if (huft_build (ll, 19, 19, NULL, NULL, &gzio->tl, &gzio->bl) != 0)
925 m = mask_bits[gzio->bl];
929 NEEDBITS ((unsigned) gzio->bl);
930 j = (gzio->td = gzio->tl + ((unsigned) b & m))->b;
932 j = gzio->td->v.n;
980 huft_free (gzio->tl);
981 gzio->td = 0;
982 gzio->tl = 0;
985 gzio->bb = b;
986 gzio->bk = k;
989 gzio->bl = lbits;
990 if (huft_build (ll, nl, 257, cplens, cplext, &gzio->tl, &gzio->bl) != 0)
996 gzio->bd = dbits;
997 if (huft_build (ll + nl, nd, 0, cpdist, cpdext, &gzio->td, &gzio->bd) != 0)
999 huft_free (gzio->tl);
1000 gzio->tl = 0;
1007 gzio->code_state = 0;
1008 gzio->block_len++;
1013 get_new_block (grub_gzio_t gzio)
1019 b = gzio->bb;
1020 k = gzio->bk;
1024 gzio->last_block = (int) b & 1;
1029 gzio->block_type = (unsigned) b & 3;
1033 gzio->bb = b;
1034 gzio->bk = k;
1036 switch (gzio->block_type)
1039 init_stored_block (gzio);
1042 init_fixed_block (gzio);
1045 init_dynamic_block (gzio);
1054 inflate_window (grub_gzio_t gzio)
1057 gzio->wp = 0;
1063 while (gzio->wp < WSIZE && grub_errno == GRUB_ERR_NONE)
1065 if (! gzio->block_len)
1067 if (gzio->last_block)
1070 get_new_block (gzio);
1073 if (gzio->block_type > INFLATE_DYNAMIC)
1075 "unknown block type %d", gzio->block_type);
1083 if (gzio->block_type == INFLATE_STORED)
1085 int w = gzio->wp;
1091 while (gzio->block_len && w < WSIZE && grub_errno == GRUB_ERR_NONE)
1093 gzio->slide[w++] = get_byte (gzio);
1094 gzio->block_len--;
1097 gzio->wp = w;
1106 if (inflate_codes_in_window (gzio))
1108 huft_free (gzio->tl);
1109 huft_free (gzio->td);
1110 gzio->tl = 0;
1111 gzio->td = 0;
1115 gzio->saved_offset += WSIZE;
1122 initialize_tables (grub_gzio_t gzio)
1124 gzio->saved_offset = 0;
1125 gzio_seek (gzio, gzio->data_offset);
1128 gzio->bk = 0;
1129 gzio->bb = 0;
1132 gzio->last_block = 0;
1133 gzio->block_len = 0;
1136 huft_free (gzio->tl);
1137 huft_free (gzio->td);
1148 grub_gzio_t gzio = 0;
1154 gzio = grub_zalloc (sizeof (*gzio));
1155 if (! gzio)
1161 gzio->file = io;
1165 file->data = gzio;
1172 grub_free (gzio);
1184 test_zlib_header (grub_gzio_t gzio)
1188 cmf = get_byte (gzio);
1189 flg = get_byte (gzio);
1211 gzio->data_offset = 2;
1212 initialize_tables (gzio);
1218 grub_gzio_read_real (grub_gzio_t gzio, grub_off_t offset,
1224 if (gzio->saved_offset > offset + WSIZE)
1225 initialize_tables (gzio);
1233 while ((!gzio->last_block || gzio->block_len > 0) &&
1239 while (offset >= gzio->saved_offset)
1240 inflate_window (gzio);
1242 srcaddr = (char *) ((offset & (WSIZE - 1)) + gzio->slide);
1243 size = gzio->saved_offset - offset;
1244 if (gzio->last_block && gzio->block_len == 0 && size > gzio->wp)
1245 size = gzio->wp;
1274 grub_gzio_t gzio = file->data;
1276 grub_file_close (gzio->file);
1277 huft_free (gzio->tl);
1278 huft_free (gzio->td);
1279 grub_free (gzio);
1291 grub_gzio_t gzio = 0;
1294 gzio = grub_zalloc (sizeof (*gzio));
1295 if (! gzio)
1297 gzio->mem_input = (grub_uint8_t *) inbuf;
1298 gzio->mem_input_size = insize;
1299 gzio->mem_input_off = 0;
1301 if (!test_zlib_header (gzio))
1303 grub_free (gzio);
1307 ret = grub_gzio_read_real (gzio, off, outbuf, outsize);
1308 grub_free (gzio);
1319 .name = "gzio",
1328 GRUB_MOD_INIT(gzio)
1333 GRUB_MOD_FINI(gzio)