/* vi: set sw=4 ts=4: */
/*
 * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
 */
#include <stdlib.h>
#include <unistd.h>
#include "libbb.h"
#include "unarchive.h" /* for external decl of check_header_gzip */

void check_header_gzip(int src_fd)
{
	union {
		unsigned char raw[8];
		struct {
			unsigned char method;
			unsigned char flags;
			unsigned int mtime;
			unsigned char xtra_flags;
			unsigned char os_flags;
		} formated;
	} header;

	xread(src_fd, header.raw, 8);

	/* Check the compression method */
	if (header.formated.method != 8) {
		bb_error_msg_and_die("Unknown compression method %d",
						  header.formated.method);
	}

	if (header.formated.flags & 0x04) {
		/* bit 2 set: extra field present */
		unsigned char extra_short;

		extra_short = xread_char(src_fd) + (xread_char(src_fd) << 8);
		while (extra_short > 0) {
			/* Ignore extra field */
			xread_char(src_fd);
			extra_short--;
		}
	}

	/* Discard original name if any */
	if (header.formated.flags & 0x08) {
		/* bit 3 set: original file name present */
		while(xread_char(src_fd) != 0);
	}

	/* Discard file comment if any */
	if (header.formated.flags & 0x10) {
		/* bit 4 set: file comment present */
		while(xread_char(src_fd) != 0);
	}

	/* Read the header checksum */
	if (header.formated.flags & 0x02) {
		xread_char(src_fd);
		xread_char(src_fd);
	}

	return;
}
