diff options
| author | tanaka takashi <isazaka@gmail.com> | 2026-07-04 17:21:32 +0900 |
|---|---|---|
| committer | tanaka takashi <isazaka@gmail.com> | 2026-07-04 17:21:32 +0900 |
| commit | 0634f2048c7c9a474aab1d8104b964b3bf70a064 (patch) | |
| tree | 508c305a64cbd3b01f5146776e22865d283d5dbb /src/storage/store.c | |
| parent | eb5e9d9f37bda7d78f69614da70402357794168a (diff) | |
feat(P1-002): migrate offline JSONL import/export to dedicated CLI
- Replace the MCP import_messages tool with standalone CLI commands:
iny-convmem-mcp --data-dir <path> --import <file>
iny-convmem-mcp --data-dir <path> --export <file>
- Add src/cli/{import,export,cli.h} and a CTest process test (tiny-convmem-mcp.cli)
covering round-trip, manifest generation, overwrite/reject policies, and
include_deleted export.
- Fix Debug heap corruption in iny_store_import() by deep-copying imported
messages instead of taking ownership of caller-allocated records, which were
later freed by the caller.
- Remove the now-redundant src/mcp/tools/import_messages.c and keep the tool
registry at 7 MCP tools.
- Update docs/development-plan.md (P1-002 complete) and
docs/implementation-status.md with CLI test coverage.
Diffstat (limited to 'src/storage/store.c')
| -rw-r--r-- | src/storage/store.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/src/storage/store.c b/src/storage/store.c index 45621d1..5701578 100644 --- a/src/storage/store.c +++ b/src/storage/store.c @@ -1957,16 +1957,26 @@ tiny_store_import(tiny_store_t *store, } if (existing != NULL) { + tiny_message_t replacement; + tiny_message_init(&replacement); + if (tiny_message_copy(&replacement, &record->message) != 0) + { + status = TINY_STORE_NO_MEMORY; + break; + } tiny_message_free(&existing->message); existing->deleted = record->deleted; existing->sequence = (uint64_t)record->message.timestamp_ms; - existing->message = record->message; + existing->message = replacement; (*imported_count)++; } else { - if (!ensure_entries(store)) + tiny_message_t copied; + tiny_message_init(&copied); + if (!ensure_entries(store) || tiny_message_copy(&copied, &record->message) != 0) { + tiny_message_free(&copied); status = TINY_STORE_NO_MEMORY; break; } @@ -1974,7 +1984,7 @@ tiny_store_import(tiny_store_t *store, &store->entries[store->entry_count], 0, sizeof(store->entries[store->entry_count])); store->entries[store->entry_count].deleted = record->deleted; store->entries[store->entry_count].sequence = (uint64_t)record->message.timestamp_ms; - store->entries[store->entry_count].message = record->message; + store->entries[store->entry_count].message = copied; store->entry_count++; (*imported_count)++; } |
