source: MondoRescue/branches/stable/mindi-busybox/archival/libunarchive/check_header_gzip.c@ 821

Last change on this file since 821 was 821, checked in by Bruno Cornec, 18 years ago

Addition of busybox 1.2.1 as a mindi-busybox new package
This should avoid delivering binary files in mindi not built there (Fedora and Debian are quite serious about that)

File size: 1.3 KB
Line 
1#include <stdlib.h>
2#include <unistd.h>
3#include "libbb.h"
4#include "unarchive.h" /* for external decl of check_header_gzip */
5
6void check_header_gzip(int src_fd)
7{
8 union {
9 unsigned char raw[8];
10 struct {
11 unsigned char method;
12 unsigned char flags;
13 unsigned int mtime;
14 unsigned char xtra_flags;
15 unsigned char os_flags;
16 } formated;
17 } header;
18
19 bb_xread_all(src_fd, header.raw, 8);
20
21 /* Check the compression method */
22 if (header.formated.method != 8) {
23 bb_error_msg_and_die("Unknown compression method %d",
24 header.formated.method);
25 }
26
27 if (header.formated.flags & 0x04) {
28 /* bit 2 set: extra field present */
29 unsigned char extra_short;
30
31 extra_short = bb_xread_char(src_fd) + (bb_xread_char(src_fd) << 8);
32 while (extra_short > 0) {
33 /* Ignore extra field */
34 bb_xread_char(src_fd);
35 extra_short--;
36 }
37 }
38
39 /* Discard original name if any */
40 if (header.formated.flags & 0x08) {
41 /* bit 3 set: original file name present */
42 while(bb_xread_char(src_fd) != 0);
43 }
44
45 /* Discard file comment if any */
46 if (header.formated.flags & 0x10) {
47 /* bit 4 set: file comment present */
48 while(bb_xread_char(src_fd) != 0);
49 }
50
51 /* Read the header checksum */
52 if (header.formated.flags & 0x02) {
53 bb_xread_char(src_fd);
54 bb_xread_char(src_fd);
55 }
56
57 return;
58}
Note: See TracBrowser for help on using the repository browser.