Patchs to unzipbsd
Michael Enkelis
michaele at vice.ICO.TEK.COM
Fri Apr 14 03:50:08 AEST 1989
patches should remove that littly proublem.
I am willing to accept any other patches, and try them out
and repost any context diff's needed to update the unzipbsd program.
Now all i need to do is to try to find time to make a zip archiver
for unix.
*** unzipbsd.c Wed Apr 12 21:01:01 1989
--- ../unzipbsd.c Thu Apr 13 10:41:03 1989
***************
*** 56,65 ****
typedef longint signature_type;
!
! #define local_file_header_signature 0x04034b50L
!
!
typedef struct local_file_header {
word version_needed_to_extract;
word general_purpose_bit_flag;
--- 56,62 ----
typedef longint signature_type;
! char local_file_header_signature[] = {0x50,0x4b,0x03,0x04};
typedef struct local_file_header {
word version_needed_to_extract;
word general_purpose_bit_flag;
***************
*** 73,80 ****
word extra_field_length;
} local_file_header;
- #define central_file_header_signature 0x02014b50L
typedef struct central_directory_file_header {
word version_made_by;
word version_needed_to_extract;
--- 70,77 ----
word extra_field_length;
} local_file_header;
+ char central_file_header_signature[] = {0x50,0x4b,0x01,0x02};
typedef struct central_directory_file_header {
word version_made_by;
word version_needed_to_extract;
***************
*** 94,101 ****
longint relative_offset_local_header;
} central_directory_file_header;
- #define end_central_dir_signature 0x06054b50L
typedef struct end_central_dir_record {
word number_this_disk;
word number_disk_with_start_central_directory;
--- 91,98 ----
longint relative_offset_local_header;
} central_directory_file_header;
+ char end_central_dir_signature[] = {0x50,0x4b,0x05,0x06};
typedef struct end_central_dir_record {
word number_this_disk;
word number_disk_with_start_central_directory;
***************
*** 267,273 ****
get_string(len, s)
int len;
! char *s[];
{
read(zipfd,s,len);
s[len] = 0;
--- 264,270 ----
get_string(len, s)
int len;
! char *s;
{
read(zipfd,s,len);
s[len] = 0;
***************
*** 811,817 ****
while ((!zipeof))
{
ReadByte(&b);
! OutByte(b);
}
}
break;
--- 808,815 ----
while ((!zipeof))
{
ReadByte(&b);
! if (!zipeof) /* bob at dhw68k.cts.com */
! OutByte(b);
}
}
break;
***************
*** 862,868 ****
/* UNIX support routines: Michael Enkelis */
get_byte()
{
! unsigned int nibble;
read(zipfd,&nibble,1);
return (nibble & 0xff);
}
--- 860,866 ----
/* UNIX support routines: Michael Enkelis */
get_byte()
{
! byte nibble;
read(zipfd,&nibble,1);
return (nibble & 0xff);
}
***************
*** 906,911 ****
--- 904,910 ----
get_string(lrec.extra_field_length,extra);
if (debugging) {
+ printf("Process LOCAL file header.\n");
printf("Version used : %d\n",lrec.version_needed_to_extract);
printf("Bit flags : %d\n",lrec.general_purpose_bit_flag);
printf("Compression : %d\n",lrec.compression_method);
***************
*** 956,961 ****
--- 955,964 ----
get_string(rec.extra_field_length,extra);
get_string(rec.file_comment_length,comment);
+ if (debugging) {
+ printf("Process CENTRAL file header.\n");
+ }
+
crccode = INITCRC;
}
***************
*** 976,981 ****
--- 979,988 ----
rec.zipfile_comment_length = get_word();
get_string(rec.zipfile_comment_length,comment);
+
+ if (debugging) {
+ printf("Process END_CENTRAL directory header.\n");
+ }
}
***************
*** 983,1019 ****
process_headers()
{
! longint sig;
while (1)
{
! if (read(zipfd,&sig,sizeof(sig)) != sizeof(sig))
! return;
! else
! if (sig == local_file_header_signature)
! process_local_file_header();
! else
! if (sig == central_file_header_signature)
! process_central_file_header();
else
!
! if (sig == end_central_dir_signature)
! {
! process_end_central_dir();
! return;
}
!
! else
! {
! printf("Invalid Zipfile Header\n");
! return;
! }
! }
!
! }
!
/* ---------------------------------------------------------- */
--- 990,1029 ----
process_headers()
{
! int i;
! char sig[4];
while (1)
{
! for (i=0; i<4; i++)
! sig[i] = get_byte();
! if (debugging) {
! printf("\n");
! for (i=0; i<4; i++) {
! printf("%x=%x ",sig[i],local_file_header_signature[i]);
! }
! printf("\n");
! }
! if (strncmp(sig,local_file_header_signature,4) == 0)
! process_local_file_header();
! else
! if (strncmp(sig,central_file_header_signature,4) == 0)
! process_central_file_header();
! else
! if (strncmp(sig,end_central_dir_signature,4) == 0)
! {
! process_end_central_dir();
! return;
! }
else
! {
! printf("Invalid Zipfile Header\n");
! return;
! }
}
! }
/* ---------------------------------------------------------- */
--
_ _ _ __
' ) ) ) / /) / ` / /) Michael Enkelis
/ / / o _. /_ __. _ // /-- __ /_ _ // o _ tektronix!vice!michaele
/ ' (_(_(__/ /_(_(_(<_(/_ (___, /) )_/ <_(<_(/_(_/_)_ (503) 627-4099
More information about the Alt.sources
mailing list