fixing the untar code

This commit is contained in:
hyung-hwan 2022-11-30 05:01:25 +00:00
parent 5273e9fca2
commit d5c15b9377

View File

@ -261,7 +261,13 @@ printf("process_header...\n");
tar->hi.fp = HIO_NULL; tar->hi.fp = HIO_NULL;
} }
printf ("file size = %u [%s]\n", (unsigned int)tar->hi.filesize, hdr->name); printf ("file size = %u [%s] [%s]\n", (unsigned int)tar->hi.filesize, hdr->name, hdr->prefix);
/*{
int i;
for (i = 0; i < 512; i++) printf ("%05d %c\n", i, tar->blk.buf[i]);
printf ("\n");
}*/
switch (hdr->typeflag) switch (hdr->typeflag)
{ {
case HIO_TAR_LNKTYPE: case HIO_TAR_LNKTYPE:
@ -296,7 +302,6 @@ printf ("file size = %u [%s]\n", (unsigned int)tar->hi.filesize, hdr->name);
default: /* HIO_TAR_REGTYPE */ default: /* HIO_TAR_REGTYPE */
{ {
FILE* fp; FILE* fp;
printf(" Extracting file %s\n", hdr->name); printf(" Extracting file %s\n", hdr->name);
@ -306,6 +311,7 @@ printf ("file size = %u [%s]\n", (unsigned int)tar->hi.filesize, hdr->name);
fp = fopen(hdr->name, "w"); fp = fopen(hdr->name, "w");
if (!fp) if (!fp)
{ {
printf ("unable to openf ile...\n");
hio_seterrwithsyserr (tar->hio, 0, errno); hio_seterrwithsyserr (tar->hio, 0, errno);
return -1; return -1;
} }
@ -322,7 +328,6 @@ printf ("file size = %u [%s]\n", (unsigned int)tar->hi.filesize, hdr->name);
} }
done: done:
tar->blk.len = 0; /* consumed the block */
return 0; return 0;
} }
@ -334,7 +339,7 @@ static int process_content (hio_tar_t* tar)
HIO_ASSERT (tar->hio, tar->hi.filesize > 0); HIO_ASSERT (tar->hio, tar->hi.filesize > 0);
printf("process_content...\n"); //printf("process_content...\n");
chunksize = tar->hi.filesize < tar->blk.len? tar->hi.filesize: tar->blk.len; chunksize = tar->hi.filesize < tar->blk.len? tar->hi.filesize: tar->blk.len;
/* TODO: error check */ /* TODO: error check */
@ -351,7 +356,6 @@ printf("process_content...\n");
} }
} }
tar->blk.len = 0; /* consumed the block */
return 0; return 0;
} }
@ -368,7 +372,6 @@ int hio_tar_feed (hio_tar_t* tar, const void* ptr, hio_oow_t len)
} }
} }
printf ("feeding %d\n", len);
while (len > 0) while (len > 0)
{ {
hio_oow_t cplen; hio_oow_t cplen;
@ -379,6 +382,7 @@ printf ("feeding %d\n", len);
HIO_MEMCPY (&tar->blk.buf[tar->blk.len], ptr, cplen); HIO_MEMCPY (&tar->blk.buf[tar->blk.len], ptr, cplen);
tar->blk.len += cplen; tar->blk.len += cplen;
len -= cplen; len -= cplen;
ptr += cplen;
if (tar->blk.len == HIO_COUNTOF(tar->blk.buf)) if (tar->blk.len == HIO_COUNTOF(tar->blk.buf))
{ {
@ -398,6 +402,8 @@ printf ("feeding %d\n", len);
hio_seterrbfmt (tar->hio, HIO_EINVAL, "trailing garbage at the end of feed"); hio_seterrbfmt (tar->hio, HIO_EINVAL, "trailing garbage at the end of feed");
return -1; return -1;
} }
tar->blk.len = 0;
} }
} }