diff --git a/src/file_tree.c b/src/file_tree.c index aafccb4..87db650 100644 --- a/src/file_tree.c +++ b/src/file_tree.c @@ -318,8 +318,9 @@ int file_tree_delete_entity(FileTree *ft, string path) } int file_tree_write(FileTree *ft, string path, - uint64_t off, uint64_t len, SHA256 *prev_hashes, - SHA256 *hashes, SHA256 *removed_hashes, int *num_removed) + uint64_t off, uint64_t len, uint32_t num_chunks, + SHA256 *prev_hashes, SHA256 *hashes, + SHA256 *removed_hashes, int *num_removed) { int num_comps; string comps[MAX_COMPS]; @@ -341,6 +342,8 @@ int file_tree_write(FileTree *ft, string path, uint64_t first_chunk_index = off / f->chunk_size; uint64_t last_chunk_index = first_chunk_index + (len - 1) / f->chunk_size; + assert(last_chunk_index - first_chunk_index + 1 == num_chunks); + if (last_chunk_index >= f->num_chunks) { uint64_t old_num_chunks = f->num_chunks; SHA256 *new_chunks = sys_malloc((last_chunk_index+1) * sizeof(SHA256)); diff --git a/src/file_tree.h b/src/file_tree.h index 7cdb05b..a81aef4 100644 --- a/src/file_tree.h +++ b/src/file_tree.h @@ -55,7 +55,7 @@ bool file_tree_uses_hash(FileTree *ft, SHA256 hash); int file_tree_list(FileTree *ft, string path, ListItem *items, int max_items); int file_tree_create_entity(FileTree *ft, string path, bool is_dir, uint64_t chunk_size); int file_tree_delete_entity(FileTree *ft, string path); -int file_tree_write(FileTree *ft, string path, uint64_t off, uint64_t len, SHA256 *prev_hashes, SHA256 *hashes, SHA256 *removed_hashes, int *num_removed); +int file_tree_write(FileTree *ft, string path, uint64_t off, uint64_t len, uint32_t num_chunks, SHA256 *prev_hashes, SHA256 *hashes, SHA256 *removed_hashes, int *num_removed); int file_tree_read(FileTree *ft, string path, uint64_t off, uint64_t len, uint64_t *chunk_size, SHA256 *hashes, int max_hashes); string file_tree_strerror(int code); diff --git a/src/message.c b/src/message.c index f328aa1..87e934d 100644 --- a/src/message.c +++ b/src/message.c @@ -1,5 +1,10 @@ #include + +#ifdef _WIN32 +#include +#else #include // inet_ntop +#endif #include "message.h" diff --git a/src/metadata_server.c b/src/metadata_server.c index 6998dee..cd34422 100644 --- a/src/metadata_server.c +++ b/src/metadata_server.c @@ -628,7 +628,7 @@ process_client_write(MetadataServer *state, int conn_idx, ByteView msg) } int ret = file_tree_write(&state->file_tree, path, offset, length, - old_hashes, new_hashes, removed_hashes, &num_removed); + num_chunks, old_hashes, new_hashes, removed_hashes, &num_removed); if (ret < 0) { diff --git a/src/system.h b/src/system.h index 2e580fd..b532c92 100644 --- a/src/system.h +++ b/src/system.h @@ -9,7 +9,6 @@ #define WIN32_LEAN_AND_MEAN #include // _mkdir -#include #include #include #include