author | Michael Krelin <hacker@klever.net> | 2008-07-18 22:59:53 (UTC) |
---|---|---|
committer | Michael Krelin <hacker@klever.net> | 2008-07-18 22:59:53 (UTC) |
commit | d1d3203e351e51cf905b3166f88c1a4d72140555 (patch) (side-by-side diff) | |
tree | 92a89f798591faacb3c8d2f3543971cb98b0b71e /src | |
parent | 04fb190243442e83349f129b523ab747e58100bf (diff) | |
download | napkin-d1d3203e351e51cf905b3166f88c1a4d72140555.zip napkin-d1d3203e351e51cf905b3166f88c1a4d72140555.tar.gz napkin-d1d3203e351e51cf905b3166f88c1a4d72140555.tar.bz2 |
make it build on Mac OS X with macports
Signed-off-by: Michael Krelin <hacker@klever.net>
-rw-r--r-- | src/db.cc | 19 |
1 files changed, 19 insertions, 0 deletions
@@ -1,48 +1,67 @@ #include <unistd.h> #include <sys/stat.h> #include <sys/types.h> #include <cassert> #include <napkin/exception.h> #include "db.h" #include "config.h" namespace napkin { extern const char *sql_bootstrap; db_t::db_t() { const char *h = getenv("HOME"); if(h) { datadir = h; datadir += "/."PACKAGE_NAME"/"; }else{ +#if defined(HAVE_GET_CURRENT_DIR_NAME) char *cwd = get_current_dir_name(); if(!cwd) throw napkin::exception("failed to get_current_dir_name()"); datadir = cwd; free(cwd); +#elif defined(HAVE_GETCWD) + { + char cwd[ +# if defined(MAXPATH) + MAXPATH +# elif defined(MAXPATHLEN) + MAXPATHLEN +# else /* maxpath */ + 512 +#endif /* maxpath */ + ]; + if(!getcwd(cwd,sizeof(cwd))) + throw napkin::exception("failed to getcwd()"); + datadir = cwd; + } +#else /* get cwd */ +# error dunno how to get current workdir +#endif /* get cwd */ datadir += "/."PACKAGE_NAME"/"; } if(access(datadir.c_str(),R_OK|W_OK) && mkdir(datadir.c_str(),0700)) throw napkin::exception("no access to '"+datadir+"' directory"); open((datadir+PACKAGE_NAME".db").c_str()); assert(_D); char **resp; int nr,nc; char *errm; if(sqlite3_get_table( _D, "SELECT s_tobed FROM sleeps LIMIT 0", &resp,&nr,&nc,&errm)!=SQLITE_OK) { if(sqlite3_exec(_D,sql_bootstrap,NULL,NULL,&errm)!=SQLITE_OK) throw napkin::exception(string("failed to bootstrap sqlite database: ")+errm); }else sqlite3_free_table(resp); } void db_t::store(const hypnodata_t& hd) { sqlite::mem_t<char*> S = sqlite3_mprintf( "INSERT INTO sleeps (" "s_tobed,s_alarm," "s_window,s_data_a," "s_almost_awakes," |