rcbench
Servo and ESC test bench: panel, IOmcu and shared C
Loading...
Searching...
No Matches
wa_zip.h
Go to the documentation of this file.
1
45
46#ifndef RCBENCH_WA_ZIP_H
47#define RCBENCH_WA_ZIP_H
48
49#include <stdbool.h>
50#include <stddef.h>
51#include <stdint.h>
52
53#include "wa_walk.h"
54
55#ifdef __cplusplus
56extern "C" {
57#endif
58
59#define WA_ZIP_MAX32 0xFFFFFFFFu
60#define WA_ZIP_MAX16 0xFFFFu
61
63uint32_t wa_crc32(uint32_t crc, const void *data, size_t n);
64
67void wa_dos_time(int64_t t, uint16_t *time, uint16_t *date);
68
69/* -------------------------------------------------- the pieces, by size */
70
72bool wa_zip_entry64(uint64_t size);
74bool wa_zip_end64(uint64_t entries, uint64_t cd_bytes, uint64_t cd_offset);
75
76uint32_t wa_zip_local_bytes(size_t name_len, uint64_t size);
77uint32_t wa_zip_desc_bytes(uint64_t size);
78uint32_t wa_zip_central_bytes(size_t name_len, uint64_t size,
79 uint64_t offset);
80uint32_t wa_zip_end_bytes(uint64_t entries, uint64_t cd_bytes,
81 uint64_t cd_offset);
82
83/* Each writes the piece into @p out, which holds the size above, and
84 * returns that size. */
85size_t wa_zip_local(uint8_t *out, const char *name, size_t name_len,
86 uint64_t size, int64_t mtime, bool dir);
87size_t wa_zip_desc(uint8_t *out, uint32_t crc, uint64_t size);
88size_t wa_zip_central(uint8_t *out, const char *name, size_t name_len,
89 uint64_t size, uint32_t crc, uint64_t offset,
90 int64_t mtime, bool dir);
91size_t wa_zip_end(uint8_t *out, uint64_t entries, uint64_t cd_bytes,
92 uint64_t cd_offset);
93
95#define WA_ZIP_PIECE_MAX (46u + (WA_PATH_MAX + 1u) + 28u + 56u + 20u + 22u)
96
97/* -------------------------------------------------------- the length */
98
100typedef struct {
101 uint64_t entries;
102 uint64_t at;
103 uint64_t cd;
105
106void wa_zip_len_init(wa_zip_len_t *l);
108void wa_zip_len_add(wa_zip_len_t *l, size_t name_len, uint64_t size);
110uint64_t wa_zip_len_total(const wa_zip_len_t *l);
111
112/* -------------------------------------------------------- the archive */
113
114typedef enum {
115 WA_ZIP_OK = 0,
116 WA_ZIP_NO_CARD,
120
121typedef struct {
122 uint64_t entries;
123 uint64_t files;
124 uint64_t file_bytes;
125 uint64_t bytes;
126 uint64_t cd_offset;
127 unsigned long left_out;
129
139
141typedef struct {
142 uint64_t size;
143 uint32_t crc;
144 uint32_t path;
145 uint32_t mtime;
146 uint16_t len;
147 uint16_t spare;
149
152#define WA_ZIP_SPARE 16u
153
155typedef struct {
156 const wa_fs_t *fs;
159 uint64_t index;
160 uint64_t at;
161 uint64_t cd_at;
162 uint64_t cd_bytes;
163 int phase;
164 bool in_file;
165 void *file;
166 uint64_t left;
167 uint64_t size;
168 uint32_t file_crc;
170 size_t piece_len;
171 size_t piece_off;
174} wa_zip_t;
175
190 uint64_t slots);
191
202int32_t wa_zip_next(wa_zip_t *z, uint8_t *buf, uint32_t cap);
203
206
207#ifdef __cplusplus
208}
209#endif
210
211#endif /* RCBENCH_WA_ZIP_H */
Definition wa_walk.h:53
A walk under way.
Definition wa_walk.h:84
Definition wa_zip.h:100
uint64_t cd
Definition wa_zip.h:103
uint64_t at
Definition wa_zip.h:102
Definition wa_zip.h:121
uint64_t cd_offset
Definition wa_zip.h:126
unsigned long left_out
Definition wa_zip.h:127
uint64_t entries
Definition wa_zip.h:122
uint64_t file_bytes
Definition wa_zip.h:124
uint64_t bytes
Definition wa_zip.h:125
One entry as the first walk found it, 24 bytes.
Definition wa_zip.h:141
uint32_t mtime
Definition wa_zip.h:145
uint16_t len
Definition wa_zip.h:146
uint32_t crc
Definition wa_zip.h:143
uint32_t path
Definition wa_zip.h:144
uint64_t size
Definition wa_zip.h:142
uint16_t spare
Definition wa_zip.h:147
One archive being sent. The fields are wa_zip.c's.
Definition wa_zip.h:155
wa_walk_t walk
Definition wa_zip.h:173
uint64_t left
Definition wa_zip.h:166
size_t piece_len
Definition wa_zip.h:170
void * file
Definition wa_zip.h:165
const wa_fs_t * fs
Definition wa_zip.h:156
uint64_t size
Definition wa_zip.h:167
uint8_t piece[WA_ZIP_PIECE_MAX]
Definition wa_zip.h:169
uint64_t cd_bytes
Definition wa_zip.h:162
wa_zip_slot_t * slot
Definition wa_zip.h:158
size_t piece_off
Definition wa_zip.h:171
wa_zip_plan_t plan
Definition wa_zip.h:157
uint64_t cd_at
Definition wa_zip.h:161
uint32_t file_crc
Definition wa_zip.h:168
wa_zip_err_t err
Definition wa_zip.h:172
uint64_t index
Definition wa_zip.h:159
uint64_t at
Definition wa_zip.h:160
bool in_file
Definition wa_zip.h:164
int phase
Definition wa_zip.h:163
Every file and folder on the card, one at a time.
uint64_t wa_zip_len_total(const wa_zip_len_t *l)
Definition wa_zip.c:288
uint32_t wa_crc32(uint32_t crc, const void *data, size_t n)
Definition wa_zip.c:39
wa_zip_err_t wa_zip_begin(wa_zip_t *z, const wa_fs_t *fs, wa_zip_slot_t *slot, uint64_t slots)
Begin the archive: the first walk, which fills z->plan and a slot for each entry. Nothing is sent; th...
Definition wa_zip.c:431
bool wa_zip_end64(uint64_t entries, uint64_t cd_bytes, uint64_t cd_offset)
Definition wa_zip.c:109
wa_zip_err_t wa_zip_plan(const wa_fs_t *fs, wa_zip_plan_t *out)
Walk the card and add up the archive it makes, keeping nothing per entry: the counts the page shows,...
Definition wa_zip.c:425
void wa_zip_len_add(wa_zip_len_t *l, size_t name_len, uint64_t size)
Definition wa_zip.c:280
void wa_zip_end_early(wa_zip_t *z)
Definition wa_zip.c:454
wa_zip_err_t
Definition wa_zip.h:114
@ WA_ZIP_MEMORY
Definition wa_zip.h:118
@ WA_ZIP_READ
Definition wa_zip.h:117
int32_t wa_zip_next(wa_zip_t *z, uint8_t *buf, uint32_t cap)
The next bytes of the archive.
Definition wa_zip.c:635
#define WA_ZIP_PIECE_MAX
Definition wa_zip.h:95
bool wa_zip_entry64(uint64_t size)
Definition wa_zip.c:104
void wa_dos_time(int64_t t, uint16_t *time, uint16_t *date)
Definition wa_zip.c:61