From d5c15b93772cd08420cc45685c75742a7a7f0f89 Mon Sep 17 00:00:00 2001 From: hyung-hwan Date: Wed, 30 Nov 2022 05:01:25 +0000 Subject: [PATCH] fixing the untar code --- lib/tar.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/lib/tar.c b/lib/tar.c index d6d1bea..0304da6 100644 --- a/lib/tar.c +++ b/lib/tar.c @@ -261,7 +261,13 @@ printf("process_header...\n"); 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) { 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 */ { - FILE* fp; 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"); if (!fp) { + printf ("unable to openf ile...\n"); hio_seterrwithsyserr (tar->hio, 0, errno); return -1; } @@ -322,7 +328,6 @@ printf ("file size = %u [%s]\n", (unsigned int)tar->hi.filesize, hdr->name); } done: - tar->blk.len = 0; /* consumed the block */ return 0; } @@ -334,7 +339,7 @@ static int process_content (hio_tar_t* tar) 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; /* TODO: error check */ @@ -351,7 +356,6 @@ printf("process_content...\n"); } } - tar->blk.len = 0; /* consumed the block */ 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) { hio_oow_t cplen; @@ -379,6 +382,7 @@ printf ("feeding %d\n", len); HIO_MEMCPY (&tar->blk.buf[tar->blk.len], ptr, cplen); tar->blk.len += cplen; len -= cplen; + ptr += cplen; 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"); return -1; } + + tar->blk.len = 0; } }