Lindenii Project Forge
Add strerror
use fmt; use io; use lmdb_ffi = lmdb::ffi; use lmdb; use strings; use types; use types::c; use os; export fn main() void = { if (len(os::args) != 3) {
abort("need two arguments (db dir, key)");
fmt::fprintln(os::stderr, "need two arguments (db dir, key)")!; return;
};
match (real()) { case void => void; case let e: lmdb::error => fmt::fprintln(os::stderr, lmdb::strerror(e))!; case let e: io::error => fmt::fprintln(os::stderr, io::strerror(e))!; }; }; export fn real() (void | lmdb::error | io::error) = {
const key = lmdb::val{ mv_size = len(strings::toutf8(os::args[2])), mv_data = c::unterminatedstr(os::args[2]): *opaque, };
let env = lmdb::env_create()!;
let env = lmdb::env_create()?;
lmdb::env_open(env, os::args[1], 0, 0o644)!;
lmdb::env_open(env, os::args[1], 0, 0o644)?;
let txn = lmdb::txn_begin(env, 0)!;
let txn = lmdb::txn_begin(env, 0)?;
let dbi = lmdb::dbi_open(txn, null, lmdb_ffi::CREATE)!;
let dbi = lmdb::dbi_open(txn, null, lmdb_ffi::CREATE)?;
let val = lmdb::get(dbi, &key)!;
let val = lmdb::get(dbi, &key)?;
let data = lmdb::val_u8s(&val);
io::write(os::stdout, data)!;
io::write(os::stdout, data)?;
lmdb::txn_abort(txn)!;
lmdb::txn_abort(txn)?;
};
use fmt; use io; use lmdb; use lmdb_ffi = lmdb::ffi; use strings; use types; use types::c; use os; export fn main() void = { if (len(os::args) != 3) {
abort("need two arguments (db dir, key)");
fmt::fprintln(os::stderr, "need two arguments (db dir, key)")!; return; }; match (real()) { case void => void; case let e: lmdb::error => fmt::fprintln(os::stderr, lmdb::strerror(e))!; case let e: io::error => fmt::fprintln(os::stderr, io::strerror(e))!;
};
};
export fn real() (void | lmdb::error | io::error) = {
const key = lmdb::val { mv_size = len(strings::toutf8(os::args[2])), mv_data = c::unterminatedstr(os::args[2]): *opaque, }; let v = io::drain(os::stdin)!; defer free(v); const val = lmdb::u8s_val(v);
let env = lmdb::env_create()!;
let env = lmdb::env_create()?;
lmdb::env_open(env, os::args[1], 0, 0o644)!;
lmdb::env_open(env, os::args[1], 0, 0o644)?;
let txn = lmdb::txn_begin(env, 0)!;
let txn = lmdb::txn_begin(env, 0)?;
let dbi = lmdb::dbi_open(txn, null, lmdb_ffi::CREATE)!;
let dbi = lmdb::dbi_open(txn, null, lmdb_ffi::CREATE)?;
let val = lmdb::put(dbi, &key, &val, 0)!;
let val = lmdb::put(dbi, &key, &val, 0)?;
lmdb::txn_commit(txn)!;
lmdb::txn_commit(txn)?;
};
use lmdb::ffi; use types::c;
// Any error returned by LMDB. export type error = !int;
// Create a human-readable error message from an [[error]]. export fn strerror(err: error) str = { return c::tostr_unsafe(ffi::strerror(err: int)); };
use types::c; export @symbol("mdb_strerror") fn strerror(err: int) *c::char;