Hi… I am well aware that this diff view is very suboptimal. It will be fixed when the refactored server comes along!
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;