diff --git a/src/file_tree.c b/src/file_tree.c index 56b9262..483037d 100644 --- a/src/file_tree.c +++ b/src/file_tree.c @@ -366,6 +366,10 @@ int file_tree_write(FileTree *ft, string path, SHA256 *removed_hashes, int *num_removed) { + // Per protocol spec, WRITE operations cannot use expect_gen=0 + if (expect_gen == NO_GENERATION) + return FILETREE_BADGEN; + int num_comps; string comps[MAX_COMPS]; @@ -534,6 +538,7 @@ string file_tree_strerror(int code) case FILETREE_EXISTS : return S("File or directory already exists"); case FILETREE_BADPATH: return S("Invalid path"); case FILETREE_BADOP : return S("Invalid operation"); + case FILETREE_BADGEN : return S("Generation counter cannot be zero for write operations"); default:break; } return S("Unknown error"); diff --git a/src/file_tree.h b/src/file_tree.h index 75e7946..60e67fc 100644 --- a/src/file_tree.h +++ b/src/file_tree.h @@ -13,6 +13,7 @@ enum { FILETREE_EXISTS = -5, FILETREE_BADPATH = -6, FILETREE_BADOP = -7, + FILETREE_BADGEN = -8, }; typedef struct Entity Entity;