author | Michael Krelin <hacker@klever.net> | 2009-12-12 00:21:52 (UTC) |
---|---|---|
committer | Michael Krelin <hacker@klever.net> | 2009-12-12 00:21:52 (UTC) |
commit | 29ab361797d5677ce3296555efa7fe34dedaf0d4 (patch) (side-by-side diff) | |
tree | f0b328c790ddb405e56aa4c1653a73cbadd8135f /lib/hypnodata.cc | |
parent | f888c15a5df36dcd767823cf5c223540270524c3 (diff) | |
download | napkin-29ab361797d5677ce3296555efa7fe34dedaf0d4.zip napkin-29ab361797d5677ce3296555efa7fe34dedaf0d4.tar.gz napkin-29ab361797d5677ce3296555efa7fe34dedaf0d4.tar.bz2 |
Thanks to Kevin Turner for spotting and patching it.
-rw-r--r-- | lib/hypnodata.cc | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/lib/hypnodata.cc b/lib/hypnodata.cc index a64b7d7..376c7ff 100644 --- a/lib/hypnodata.cc +++ b/lib/hypnodata.cc @@ -1,66 +1,67 @@ -#include <stdlib.h> -#include <string.h> +#include <cstdio> +#include <cstdlib> +#include <cstring> #include <napkin/exception.h> #include <napkin/util.h> #include <napkin/types.h> namespace napkin { void hypnodata_t::clear() { to_bed = alarm = 0; data_a = window = 0; almost_awakes.clear(); } static time_t from_minute_w3c(const string& w3c) { struct tm t; memset(&t,0,sizeof(t)); t.tm_isdst=-1; if(sscanf(w3c.c_str(),"%04d-%02d-%02dT%02d:%02d", &t.tm_year,&t.tm_mon,&t.tm_mday,&t.tm_hour,&t.tm_min)!=5) throw exception("failed to parse w3c time"); --t.tm_mon;t.tm_year-=1900; time_t rv = mktime(&t); if(rv==(time_t)-1) throw exception("failed to mktime()"); return rv; } void hypnodata_t::set_to_bed(const string& w3c) { to_bed = from_minute_w3c(w3c); } void hypnodata_t::set_alarm(const string& w3c) { alarm = from_minute_w3c(w3c); } void hypnodata_t::set_window(const string& str) { window = strtol(str.c_str(),0,10); /* TODO: check for error */ } void hypnodata_t::set_data_a(const string& str) { data_a = strtol(str.c_str(),0,10); /* TODO: check for error */ } void hypnodata_t::set_almost_awakes(const string& str) { almost_awakes.clear(); static const char *significants = "0123456789-T:Z"; string::size_type p = str.find_first_of(significants); struct tm t; memset(&t,0,sizeof(t)); t.tm_isdst=-1; while(p!=string::npos) { string::size_type ns = str.find_first_not_of(significants,p); string w3c; if(ns==string::npos) { w3c = str.substr(p); p = string::npos; }else{ w3c = str.substr(p,ns-p); p = str.find_first_of(significants,ns); } if(w3c.empty()) continue; if(sscanf(w3c.c_str(),"%04d-%02d-%02dT%02d:%02d:%02d", &t.tm_year,&t.tm_mon,&t.tm_mday,&t.tm_hour,&t.tm_min,&t.tm_sec)!=6) throw exception("failed to parse w3c time"); --t.tm_mon;t.tm_year-=1900; time_t aa = mktime(&t); if(aa==(time_t)-1) throw exception("failed to mktime()"); almost_awakes.push_back(aa); } } const string hypnodata_t::w3c_to_bed() const { return strftime("%Y-%m-%dT%H:%M",to_bed); } const string hypnodata_t::w3c_alarm() const { |