• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /freebsd-12-stable/usr.bin/gzip/

Lines Matching defs:unpackd

102 unpack_descriptor_fini(unpack_descriptor_t *unpackd)
105 free(unpackd->symbolsin);
106 free(unpackd->inodesin);
107 free(unpackd->symbol);
108 free(unpackd->tree);
110 fclose(unpackd->fpIn);
111 fclose(unpackd->fpOut);
118 unpackd_fill_inodesin(const unpack_descriptor_t *unpackd, int level)
126 if (level < unpackd->treelevels) {
127 unpackd_fill_inodesin(unpackd, level + 1);
128 unpackd->inodesin[level] = (unpackd->inodesin[level + 1] +
129 unpackd->symbolsin[level + 1]) / 2;
131 unpackd->inodesin[level] = 0;
153 unpack_descriptor_t *unpackd)
172 unpackd->uncompressed_size = 0;
174 unpackd->uncompressed_size <<= 8;
175 unpackd->uncompressed_size |= hdr[i];
179 unpackd->treelevels = hdr[6];
180 if (unpackd->treelevels > HTREE_MAXLEVEL || unpackd->treelevels < 1)
184 if ((unpackd->fpIn = fdopen(in, "r")) == NULL)
186 if ((unpackd->fpOut = fdopen(out, "w")) == NULL)
190 unpackd->inodesin =
191 calloc(unpackd->treelevels, sizeof(*(unpackd->inodesin)));
192 unpackd->symbolsin =
193 calloc(unpackd->treelevels, sizeof(*(unpackd->symbolsin)));
194 unpackd->tree =
195 calloc(unpackd->treelevels, (sizeof(*(unpackd->tree))));
196 if (unpackd->inodesin == NULL || unpackd->symbolsin == NULL ||
197 unpackd->tree == NULL)
201 unpackd->treelevels--;
204 unpackd->symbol_size = 1; /* EOB */
205 for (i = 0; i <= unpackd->treelevels; i++) {
206 if ((thisbyte = fgetc(unpackd->fpIn)) == EOF)
208 unpackd->symbolsin[i] = (unsigned char)thisbyte;
209 unpackd->symbol_size += unpackd->symbolsin[i];
211 accepted_bytes(bytes_in, unpackd->treelevels);
212 if (unpackd->symbol_size > 256)
214 infile_newdata(unpackd->treelevels);
217 unpackd->symbol_eob = unpackd->symbol = calloc(1, unpackd->symbol_size);
218 if (unpackd->symbol == NULL)
230 unpackd->symbolsin[unpackd->treelevels]++;
231 for (i = 0; i <= unpackd->treelevels; i++) {
232 unpackd->tree[i] = unpackd->symbol_eob;
233 for (j = 0; j < unpackd->symbolsin[i]; j++) {
234 if ((thisbyte = fgetc(unpackd->fpIn)) == EOF)
236 *unpackd->symbol_eob++ = (char)thisbyte;
238 infile_newdata(unpackd->symbolsin[i]);
239 accepted_bytes(bytes_in, unpackd->symbolsin[i]);
243 unpackd->symbolsin[unpackd->treelevels]++;
249 unpackd_fill_inodesin(unpackd, 0);
256 unpack_decode(const unpack_descriptor_t *unpackd, off_t *bytes_in)
274 while ((thisbyte = fgetc(unpackd->fpIn)) != EOF) {
288 if (thiscode >= unpackd->inodesin[thislevel]) {
290 thiscode - unpackd->inodesin[thislevel];
291 if (inlevelindex > unpackd->symbolsin[thislevel])
295 &(unpackd->tree[thislevel][inlevelindex]);
296 if ((thissymbol == unpackd->symbol_eob) &&
297 (bytes_out == unpackd->uncompressed_size))
300 fputc((*thissymbol), unpackd->fpOut);
307 if (thislevel > unpackd->treelevels)
314 if (bytes_out != unpackd->uncompressed_size)
322 unpack_descriptor_t unpackd;
331 unpack_parse_header(in, out, pre, prelen, bytes_in, &unpackd);
332 unpack_decode(&unpackd, bytes_in);
333 unpack_descriptor_fini(&unpackd);
336 return (unpackd.uncompressed_size);