void Indexer_commit(Indexer *self) { // Safety check. if ( !self->write_lock ) { THROW(ERR, "Can't call commit() more than once"); } if (!self->prepared) { Indexer_Prepare_Commit(self); } if (self->needs_commit) { bool_t success; // Rename temp snapshot file. CharBuf *temp_snapfile = CB_Clone(self->snapfile); CB_Chop(self->snapfile, sizeof(".temp") - 1); Snapshot_Set_Path(self->snapshot, self->snapfile); success = Folder_Rename(self->folder, temp_snapfile, self->snapfile); DECREF(temp_snapfile); if (!success) { RETHROW(INCREF(Err_get_error())); } // Purge obsolete files. FilePurger_Purge(self->file_purger); } // Release locks, invalidating the Indexer. S_release_merge_lock(self); S_release_write_lock(self); }
void Err_add_frame(Err *self, const char *file, int line, const char *func) { if (CB_Ends_With_Str(self->mess, "\n", 1)) { CB_Chop(self->mess, 1); } if (func != NULL) { CB_catf(self->mess, "\n\t%s at %s line %i32\n", func, file, (int32_t)line); } else { CB_catf(self->mess, "\n\tat %s line %i32\n", file, (int32_t)line); } }
static void test_Nip_and_Chop(TestBatch *batch) { CharBuf *wanted; CharBuf *got; wanted = CB_newf("%sb%sc", smiley, smiley); got = CB_newf("a%s%sb%sc", smiley, smiley, smiley); CB_Nip(got, 2); TEST_TRUE(batch, CB_Equals(wanted, (Obj*)got), "Nip"); DECREF(wanted); DECREF(got); wanted = CB_newf("a%s%s", smiley, smiley); got = CB_newf("a%s%sb%sc", smiley, smiley, smiley); CB_Chop(got, 3); TEST_TRUE(batch, CB_Equals(wanted, (Obj*)got), "Chop"); DECREF(wanted); DECREF(got); }
Folder* Folder_init(Folder *self, const CharBuf *path) { // Init. self->entries = Hash_new(16); // Copy. if (path == NULL) { self->path = CB_new_from_trusted_utf8("", 0); } else { // Copy path, strip trailing slash or equivalent. self->path = CB_Clone(path); if (CB_Ends_With_Str(self->path, DIR_SEP, strlen(DIR_SEP))) { CB_Chop(self->path, 1); } } ABSTRACT_CLASS_CHECK(self, FOLDER); return self; }