package main import "core:fmt" import "core:mem" import "core:os" DEFAULT_DB_PATH :: "~/.local/share/data-goblin/goblin.db" run_app :: proc() -> bool { if len(os.args) < 2 { command_usage(os.args[:1]) return true } store: Storage if err := storage_open(&store, "data.db"); err != nil { fmt.eprintf("run_app: storage.open error -> %v\n", err) return false } if err := storage_ensure_schema(&store); err != nil { fmt.eprintf("run_app: storage.ensure_schema error -> %v\n", err) return false } cmd := command_from_string(os.args[1]) cmd_data := Command_Data[cmd] cmd_data.func(os.args[1:]) if err := storage_close(&store); err != nil { fmt.eprintf("run_app: storage.close error -> %v\n", err) return false } return true } main :: proc() { when ODIN_DEBUG { track: mem.Tracking_Allocator mem.tracking_allocator_init(&track, context.allocator) context.allocator = mem.tracking_allocator(&track) defer { for _, leak in track.allocation_map { fmt.printf("%v leaked %m\n", leak.location, leak.size) } mem.tracking_allocator_destroy(&track) } } if !run_app() { fmt.eprintf("internal error\n") } free_all(context.temp_allocator) fmt.printf("BYE\n") }