diff options
author | David Oberhollenzer <david.oberhollenzer@sigma-star.at> | 2020-04-17 23:20:35 +0200 |
---|---|---|
committer | David Oberhollenzer <david.oberhollenzer@sigma-star.at> | 2020-04-17 23:31:32 +0200 |
commit | 1fe3f86230a970b3974f16a6bc2e819fdaf55b58 (patch) | |
tree | 7f9f097840a68e0e6605059c9ebb2f8ee2d3fbfd /lib/tar/read_retry.c | |
parent | 15250710c63a2c3d230304e46a03532f787759fb (diff) |
Cleanup: split read_header.c in libtar.a
Simply moving the pax header decoding to a separate file and splitting
out the common helper functions should be a good start.
Signed-off-by: David Oberhollenzer <david.oberhollenzer@sigma-star.at>
Diffstat (limited to 'lib/tar/read_retry.c')
-rw-r--r-- | lib/tar/read_retry.c | 27 |
1 files changed, 24 insertions, 3 deletions
diff --git a/lib/tar/read_retry.c b/lib/tar/read_retry.c index c76e5e5..2a2f82c 100644 --- a/lib/tar/read_retry.c +++ b/lib/tar/read_retry.c @@ -6,10 +6,8 @@ */ #include "config.h" -#include <errno.h> -#include <stdio.h> - #include "tar.h" +#include "internal.h" int read_retry(const char *errstr, FILE *fp, void *buffer, size_t size) { @@ -34,3 +32,26 @@ int read_retry(const char *errstr, FILE *fp, void *buffer, size_t size) return 0; } + +char *record_to_memory(FILE *fp, sqfs_u64 size) +{ + char *buffer = malloc(size + 1); + + if (buffer == NULL) + goto fail_errno; + + if (read_retry("reading tar record", fp, buffer, size)) + goto fail; + + if (skip_padding(fp, size)) + goto fail; + + buffer[size] = '\0'; + return buffer; +fail_errno: + perror("reading tar record"); + goto fail; +fail: + free(buffer); + return NULL; +} |