mirror of
https://github.com/borgbackup/borg.git
synced 2024-12-23 00:07:38 +00:00
c786a5941e
This is a (relatively) simple state machine running in the data callbacks invoked by the msgpack unpacking stack machine (the same machine is used in msgpack-c and msgpack-python, changes are minor and cosmetic, e.g. removal of msgpack_unpack_object, removal of the C++ template thus porting to C and so on). Compared to the previous solution this has multiple advantages - msgpack-c dependency is removed - this approach is faster and requires fewer and smaller memory allocations Testability of the two solutions does not differ in my professional opinion(tm). Two other changes were rolled up; _hashindex.c can be compiled without Python.h again (handy for fuzzing and testing); a "small" bug in the cache sync was fixed which allocated too large archive indices, leading to excessive archive.chunks.d disk usage (that actually gave me an idea).
30 lines
680 B
C
30 lines
680 B
C
#include "../../src/borg/_hashindex.c"
|
|
#include "../../src/borg/cache_sync/cache_sync.c"
|
|
|
|
#define BUFSZ 32768
|
|
|
|
int main() {
|
|
char buf[BUFSZ];
|
|
int len, ret;
|
|
CacheSyncCtx *ctx;
|
|
HashIndex *idx;
|
|
|
|
/* capacity, key size, value size */
|
|
idx = hashindex_init(0, 32, 12);
|
|
ctx = cache_sync_init(idx);
|
|
|
|
while (1) {
|
|
len = read(0, buf, BUFSZ);
|
|
if (!len) {
|
|
break;
|
|
}
|
|
ret = cache_sync_feed(ctx, buf, len);
|
|
if(!ret && cache_sync_error(ctx)) {
|
|
fprintf(stderr, "error: %s\n", cache_sync_error(ctx));
|
|
return 1;
|
|
}
|
|
}
|
|
hashindex_free(idx);
|
|
cache_sync_free(ctx);
|
|
return 0;
|
|
}
|