ra8-firmware 0.1.0
Bare-metal firmware for the Renesas RA8 family (RA8D2 / RA8P1)
Loading...
Searching...
No Matches
unarch_tar.h
Go to the documentation of this file.
1
55#pragma once
56
57#include <stddef.h>
58#include <stdint.h>
59
60#include "ra8_decomp_limits.h"
61#include "ra8_err.h"
62#include "unarch_io.h"
63
64#ifdef __cplusplus
65extern "C" {
66#endif
67
81
104
122typedef struct {
123 uint64_t data_off;
124 uint64_t size;
125 uint64_t next_off;
126 uint16_t name_len;
127 uint8_t is_file;
128 uint8_t is_dir;
130
157[[nodiscard]] bool unarch_tar_probe(const uint8_t* block, size_t len);
158
190[[nodiscard]] ra8_err_t unarch_tar_open(unarch_tar_t* t,
191 unarch_read_fn read,
192 void* ctx,
193 uint64_t size,
194 const ra8_decomp_limits_t* limits);
195
240[[nodiscard]] ra8_err_t unarch_tar_next(unarch_tar_t* t,
241 uint64_t off,
242 char* name_buf,
243 uint16_t name_cap,
244 unarch_tar_entry_t* out);
245
280[[nodiscard]] ra8_err_t unarch_tar_read(const unarch_tar_t* t,
281 const unarch_tar_entry_t* ent,
282 uint8_t* buf,
283 size_t cap,
284 size_t* got);
285
286#ifdef __cplusplus
287}
288#endif
Unified decompression-limits policy: one bound set for every decoder.
Error Code Definitions for ra8-firmware.
ra8_err_codes_t ra8_err_t
Canonical error-return type used by every ra8-firmware API.
Definition ra8_err.h:546
Running consumption tracker charged by a decoder against its policy.
One decompression policy: the five resource bounds decoders enforce.
One decoded tar member: a file, a directory, or a skipped block.
Definition unarch_tar.h:122
uint64_t data_off
Absolute offset of the member's data area.
Definition unarch_tar.h:123
uint64_t size
Member data length in bytes (stored verbatim).
Definition unarch_tar.h:124
uint64_t next_off
Absolute offset of the next member's first block.
Definition unarch_tar.h:125
uint8_t is_file
1 if this member is a regular file.
Definition unarch_tar.h:127
uint16_t name_len
Name bytes copied into the caller buffer (clamped).
Definition unarch_tar.h:126
uint8_t is_dir
1 if this member is a directory.
Definition unarch_tar.h:128
One open tar archive: the backing plus the walk's running budget.
Definition unarch_tar.h:97
void * ctx
Context for read.
Definition unarch_tar.h:99
uint64_t size
Archive length in bytes.
Definition unarch_tar.h:100
bool live
Open succeeded and not superseded.
Definition unarch_tar.h:102
unarch_read_fn read
Byte reader over the archive.
Definition unarch_tar.h:98
ra8_decomp_budget_t budget
Entry / iteration budget for the walk.
Definition unarch_tar.h:101
Shared seek+read seam and flat-memory backing for the unarchivers.
size_t(* unarch_read_fn)(void *ctx, uint64_t offset, void *buf, size_t len)
Seek+read backing over an archive's bytes.
Definition unarch_io.h:55
ra8_err_t unarch_tar_open(unarch_tar_t *t, unarch_read_fn read, void *ctx, uint64_t size, const ra8_decomp_limits_t *limits)
Bind a walker to an archive and validate its first header block.
Definition unarch_tar.c:74
ra8_err_t unarch_tar_next(unarch_tar_t *t, uint64_t off, char *name_buf, uint16_t name_cap, unarch_tar_entry_t *out)
Decode the member at off and advance to the next member.
Definition unarch_tar.c:419
ra8_err_t unarch_tar_read(const unarch_tar_t *t, const unarch_tar_entry_t *ent, uint8_t *buf, size_t cap, size_t *got)
Copy a file member's data area into the caller buffer.
Definition unarch_tar.c:486
bool unarch_tar_probe(const uint8_t *block, size_t len)
Whether a leading header block looks like a tar archive.
Definition unarch_tar.c:60
unarch_tar_dims_t
Fixed sizes of the tar on-disk grammar and the walker's bounds.
Definition unarch_tar.h:76
@ k_unarch_tar_pax_max
Max pax / longname data bytes.
Definition unarch_tar.h:79
@ k_unarch_tar_block
On-disk block / header size.
Definition unarch_tar.h:77
@ k_unarch_tar_meta_max
Max meta (x/g/L/K) blocks per member.
Definition unarch_tar.h:78