--- a/lib/archive.c +++ b/lib/archive.c @@ -387,7 +387,8 @@ return NULL; } - XAR(ret)->heap_offset = xar_get_heap_offset(ret) + offset; + XAR(ret)->heap_offset = + XAR(ret)->toc_count + sizeof(xar_header_t) + offset; if( lseek(XAR(ret)->fd, XAR(ret)->heap_offset, SEEK_SET) == -1 ) { xar_close(ret); return NULL; --- a/src/xar.c +++ a/src/xar.c @@ -783,7 +783,7 @@ int main(int argc, char *argv[]) { int ret; char *filename = NULL; - char command = 0, c; + signed char command = 0, c; char **args; const char *tocfile = NULL; int arglen, i, err;