summaryrefslogtreecommitdiff
path: root/sync.ha
diff options
context:
space:
mode:
Diffstat (limited to 'sync.ha')
-rw-r--r--sync.ha40
1 files changed, 16 insertions, 24 deletions
diff --git a/sync.ha b/sync.ha
index de35dc5..e0ecca5 100644
--- a/sync.ha
+++ b/sync.ha
@@ -12,21 +12,28 @@ use unix::signal;
use encoding::utf8;
use strings;
use regex;
-use strconv;
use fs;
use os;
use strings;
+use path;
type nofreefd = !void;
type invalidquery = !str;
type quit = void;
-type saveposerr = !(fs::error | io::error);
-type error = !(invalidquery | shlex::syntaxerr | utf8::invalid | strconv::overflow | strconv::invalid | saveposerr);
+type saveposerr = !(fs::error | io::error | path::error);
+type error = !(invalidquery | shlex::syntaxerr | utf8::invalid | saveposerr);
+
+const datafolder = "data";
fn savepos(filename: str, position: str) (void | saveposerr) = {
- let f = os::open(filename, fs::flag::WRONLY, fs::flag::CREATE, fs::flag::TRUNC)?;
+ if (!os::exists(datafolder)) {
+ os::mkdir(datafolder, fs::mode::USER_RWX | fs::mode::GROUP_RX | fs::mode::OTHER_RX)?;
+ };
+ let pbuf = path::init(datafolder, filename)?;
+ const name = path::string(&pbuf);
+ let f = os::open(name, fs::flag::WRONLY, fs::flag::CREATE, fs::flag::TRUNC)?;
defer io::close(f)!;
- os::chmod(filename, fs::mode::USER_RW | fs::mode::GROUP_R | fs::mode::OTHER_R)?;
+ os::chmod(name, fs::mode::USER_RW | fs::mode::GROUP_R | fs::mode::OTHER_R)?;
fmt::fprint(f, position)?;
};
@@ -43,28 +50,13 @@ fn handlequery(query: const []u8) (void | []u8 | quit | error) = {
if (len(spl) != 3) {
return "save takes 2 arguments (filename, position)": invalidquery;
};
- //let re = regex::compile("[0-9]{2}:[0-9]{2}:[0-9]{2}")?;
- //defer regex::finish(&re);
- //const res = regex::replace(&re, spl[2], "")?;
- //if (res != "") {
- // return "save position format: hh:mm:ss": invalidquery;
- //};
- //let re2 = regex::compile("[0-9]{2}")?;
- //defer regex::finish(&re2);
- //const result = regex::findall(&re2, spl[2]);
- //if (len(result) != 3) {
- // return "save position format: hh:mm:ss": invalidquery;
- //};
- //if (strconv::stou(result[1][0].content)? >= 60 || strconv::stou(result[2][0].content)? >= 60) {
- // return "save position format: hh:mm:ss (mm < 60 && ss < 60)": invalidquery;
- //};
- //log::printfln("Saving {} with position {}", spl[1], spl[2]);
savepos(spl[1], spl[2])?;
case "get" =>
if (len(spl) != 2) {
return "get takes 1 argument (filename)": invalidquery;
};
- let f = os::open(spl[1])?;
+ let pbuf = path::init(datafolder, spl[1])?;
+ let f = os::open(path::string(&pbuf))?;
let buf = io::drain(f)?;
log::printfln("sending buf: {}", strings::fromutf8_unsafe(buf));
return buf;
@@ -85,12 +77,12 @@ fn logerror(err: (void | error)) void = {
log::println("Syntax error");
case utf8::invalid =>
log::println("Invalid utf8");
- case let e: strconv::error =>
- log::println(strconv::strerror(e));
case let e: fs::error =>
log::println(fs::strerror(e));
case let e: io::error =>
log::println(io::strerror(e));
+ case let e: path::error =>
+ log::println(path::strerror(e));
};
};