I think this project is very useful.
I tar a text file then try to decompress that.
However, the output file is not correct.
Here is my code.
Is here any wrong, thank you.
#include <stdio.h>
#include <stdlib.h>
#include "tarlib/tarlib.h"
#define BLOCK_SIZE 1024
int main() {
tar_stream stream;
tar_inflateInit( &stream );
FILE *in = fopen("test.tar", "rb");
FILE *out = fopen("tmp.txt", "wb" );
unsigned char buffer[BLOCK_SIZE];
unsigned char outbuff[BLOCK_SIZE];
size_t read = 0;
size_t total = 0;
int ret;
while((read = fread(buffer, 1, BLOCK_SIZE, in)) > 0) {
if(ferror(in)) {
printf("Read block failed\n");
tar_inflateEnd(&stream);
return 0;
}
stream.avail_in = read;
stream.next_in = buffer;
do {
stream.len_out = BLOCK_SIZE;
stream.ptr_out = outbuff;
ret = tar_inflate(&stream, TAR_SYNC_FLUSH);
if (ret < 0) {
printf("tarlib error %d\n", ret);
tar_inflateEnd(&stream);
return 0;
}
unsigned have = BLOCK_SIZE - stream.len_out;
if(fwrite(outbuff, 1, have, out) != have || ferror(out)) {
printf("Writing block failed\n");
tar_inflateEnd(&stream);
return 0;
}
}
while(stream.len_out == 0);
total += read;
}
printf("Finish\n");
tar_inflateEnd( &stream );
fclose(out);
fclose(in);
return 0;
}