1
0
Fork 0
mirror of https://github.com/borgbackup/borg.git synced 2025-02-20 21:27:32 +00:00

cache sync: move stat initialization to main unpack

This commit is contained in:
Marian Beermann 2017-06-02 19:28:50 +02:00
parent cb98cb838d
commit 795cdfc9ab
3 changed files with 16 additions and 5 deletions

View file

@ -19,11 +19,8 @@ cache_sync_init(HashIndex *chunks)
}
unpack_init(&ctx->ctx);
/* needs to be set only once */
ctx->ctx.user.chunks = chunks;
ctx->ctx.user.last_error = NULL;
ctx->ctx.user.level = 0;
ctx->ctx.user.inside_chunks = false;
ctx->buf = NULL;
ctx->head = 0;
ctx->tail = 0;

View file

@ -89,6 +89,8 @@ typedef struct unpack_user {
expect_csize,
/* next thing must be the end of the CLE (array_end) */
expect_entry_end,
expect_item_begin
} expect;
struct {
@ -108,6 +110,14 @@ typedef int (*execute_fn)(unpack_context *ctx, const char* data, size_t len, siz
return -1; \
}
static inline void unpack_init_user_state(unpack_user *u)
{
u->last_error = NULL;
u->level = 0;
u->inside_chunks = false;
u->expect = expect_item_begin;
}
static inline int unpack_callback_int64(unpack_user* u, int64_t d)
{
switch(u->expect) {
@ -282,8 +292,11 @@ static inline int unpack_callback_map(unpack_user* u, unsigned int n)
{
(void)n;
if(u->level == 0) {
if(u->expect != expect_item_begin) {
set_last_error("Invalid state transition"); /* unreachable */
return -1;
}
/* This begins a new Item */
u->expect = expect_chunks_map_key;
}

View file

@ -42,6 +42,7 @@ static inline void unpack_init(unpack_context* ctx)
ctx->cs = CS_HEADER;
ctx->trail = 0;
ctx->top = 0;
unpack_init_user_state(&ctx->user);
}
#define construct 1