author | Michael Krelin <hacker@klever.net> | 2009-01-21 18:41:55 (UTC) |
---|---|---|
committer | Michael Krelin <hacker@klever.net> | 2009-01-21 18:41:55 (UTC) |
commit | a141dd88e782636ca6894939a019528d5d46518a (patch) (unidiff) | |
tree | cc02a12a89c860a324563d95b2e8711aa8522dc6 /src/db.cc | |
parent | 1bd0bb1abcfdb7b9ad296aa06284f05f66a61d98 (diff) | |
download | napkin-a141dd88e782636ca6894939a019528d5d46518a.zip napkin-a141dd88e782636ca6894939a019528d5d46518a.tar.gz napkin-a141dd88e782636ca6894939a019528d5d46518a.tar.bz2 |
add missing includes for gcc 4.3public/master
Thanks to Stas Bekman for spotting the problem.
Signed-off-by: Michael Krelin <hacker@klever.net>
-rw-r--r-- | src/db.cc | 2 |
1 files changed, 2 insertions, 0 deletions
@@ -1,120 +1,122 @@ | |||
1 | #include <unistd.h> | 1 | #include <unistd.h> |
2 | #include <sys/stat.h> | 2 | #include <sys/stat.h> |
3 | #include <sys/types.h> | 3 | #include <sys/types.h> |
4 | #include <stdlib.h> | ||
5 | #include <string.h> | ||
4 | #include <cassert> | 6 | #include <cassert> |
5 | #include <napkin/exception.h> | 7 | #include <napkin/exception.h> |
6 | #include "db.h" | 8 | #include "db.h" |
7 | 9 | ||
8 | #include "config.h" | 10 | #include "config.h" |
9 | 11 | ||
10 | namespace napkin { | 12 | namespace napkin { |
11 | 13 | ||
12 | extern const char *sql_bootstrap; | 14 | extern const char *sql_bootstrap; |
13 | 15 | ||
14 | db_t::db_t() { | 16 | db_t::db_t() { |
15 | const char *h = getenv("HOME"); | 17 | const char *h = getenv("HOME"); |
16 | if(h) { | 18 | if(h) { |
17 | datadir = h; | 19 | datadir = h; |
18 | datadir += "/."PACKAGE_NAME"/"; | 20 | datadir += "/."PACKAGE_NAME"/"; |
19 | }else{ | 21 | }else{ |
20 | #if defined(HAVE_GET_CURRENT_DIR_NAME) | 22 | #if defined(HAVE_GET_CURRENT_DIR_NAME) |
21 | char *cwd = get_current_dir_name(); | 23 | char *cwd = get_current_dir_name(); |
22 | if(!cwd) | 24 | if(!cwd) |
23 | throw napkin::exception("failed to get_current_dir_name()"); | 25 | throw napkin::exception("failed to get_current_dir_name()"); |
24 | datadir = cwd; | 26 | datadir = cwd; |
25 | free(cwd); | 27 | free(cwd); |
26 | #elif defined(HAVE_GETCWD) | 28 | #elif defined(HAVE_GETCWD) |
27 | { | 29 | { |
28 | char cwd[ | 30 | char cwd[ |
29 | # if defined(MAXPATH) | 31 | # if defined(MAXPATH) |
30 | MAXPATH | 32 | MAXPATH |
31 | # elif defined(MAXPATHLEN) | 33 | # elif defined(MAXPATHLEN) |
32 | MAXPATHLEN | 34 | MAXPATHLEN |
33 | # else /* maxpath */ | 35 | # else /* maxpath */ |
34 | 512 | 36 | 512 |
35 | # endif /* maxpath */ | 37 | # endif /* maxpath */ |
36 | ]; | 38 | ]; |
37 | if(!getcwd(cwd,sizeof(cwd))) | 39 | if(!getcwd(cwd,sizeof(cwd))) |
38 | throw napkin::exception("failed to getcwd()"); | 40 | throw napkin::exception("failed to getcwd()"); |
39 | datadir = cwd; | 41 | datadir = cwd; |
40 | } | 42 | } |
41 | #else /* get cwd */ | 43 | #else /* get cwd */ |
42 | # error dunno how to get current workdir | 44 | # error dunno how to get current workdir |
43 | #endif /* get cwd */ | 45 | #endif /* get cwd */ |
44 | datadir += "/."PACKAGE_NAME"/"; | 46 | datadir += "/."PACKAGE_NAME"/"; |
45 | } | 47 | } |
46 | if(access(datadir.c_str(),R_OK|W_OK) | 48 | if(access(datadir.c_str(),R_OK|W_OK) |
47 | && mkdir(datadir.c_str(),0700)) | 49 | && mkdir(datadir.c_str(),0700)) |
48 | throw napkin::exception("no access to '"+datadir+"' directory"); | 50 | throw napkin::exception("no access to '"+datadir+"' directory"); |
49 | open((datadir+PACKAGE_NAME".db").c_str()); | 51 | open((datadir+PACKAGE_NAME".db").c_str()); |
50 | assert(_D); | 52 | assert(_D); |
51 | char **resp; int nr,nc; char *errm; | 53 | char **resp; int nr,nc; char *errm; |
52 | if(sqlite3_get_table( | 54 | if(sqlite3_get_table( |
53 | _D, | 55 | _D, |
54 | "SELECT s_tobed FROM sleeps LIMIT 0", | 56 | "SELECT s_tobed FROM sleeps LIMIT 0", |
55 | &resp,&nr,&nc,&errm)!=SQLITE_OK) { | 57 | &resp,&nr,&nc,&errm)!=SQLITE_OK) { |
56 | if(sqlite3_exec(_D,sql_bootstrap,NULL,NULL,&errm)!=SQLITE_OK) | 58 | if(sqlite3_exec(_D,sql_bootstrap,NULL,NULL,&errm)!=SQLITE_OK) |
57 | throw napkin::exception(string("failed to bootstrap sqlite database: ")+errm); | 59 | throw napkin::exception(string("failed to bootstrap sqlite database: ")+errm); |
58 | }else | 60 | }else |
59 | sqlite3_free_table(resp); | 61 | sqlite3_free_table(resp); |
60 | } | 62 | } |
61 | 63 | ||
62 | void db_t::store(const hypnodata_t& hd) { | 64 | void db_t::store(const hypnodata_t& hd) { |
63 | sqlite::mem_t<char*> S = sqlite3_mprintf( | 65 | sqlite::mem_t<char*> S = sqlite3_mprintf( |
64 | "INSERT INTO sleeps (" | 66 | "INSERT INTO sleeps (" |
65 | "s_tobed,s_alarm," | 67 | "s_tobed,s_alarm," |
66 | "s_window,s_data_a," | 68 | "s_window,s_data_a," |
67 | "s_almost_awakes," | 69 | "s_almost_awakes," |
68 | "s_timezone" | 70 | "s_timezone" |
69 | ") VALUES (" | 71 | ") VALUES (" |
70 | "%Q,%Q,%d,%d,%Q,%ld" | 72 | "%Q,%Q,%d,%d,%Q,%ld" |
71 | ")", | 73 | ")", |
72 | hd.w3c_to_bed().c_str(), | 74 | hd.w3c_to_bed().c_str(), |
73 | hd.w3c_alarm().c_str(), | 75 | hd.w3c_alarm().c_str(), |
74 | hd.window,hd.data_a, | 76 | hd.window,hd.data_a, |
75 | hd.w3c_almostawakes().c_str(), | 77 | hd.w3c_almostawakes().c_str(), |
76 | timezone ); | 78 | timezone ); |
77 | try { | 79 | try { |
78 | exec(S); | 80 | exec(S); |
79 | }catch(sqlite::exception& se) { | 81 | }catch(sqlite::exception& se) { |
80 | if(se.rcode==SQLITE_CONSTRAINT) | 82 | if(se.rcode==SQLITE_CONSTRAINT) |
81 | throw exception_db_already("The record seems to be already in the database"); | 83 | throw exception_db_already("The record seems to be already in the database"); |
82 | throw exception_db("Well, some error occured"); | 84 | throw exception_db("Well, some error occured"); |
83 | } | 85 | } |
84 | } | 86 | } |
85 | 87 | ||
86 | void db_t::remove(const hypnodata_t& hd) { | 88 | void db_t::remove(const hypnodata_t& hd) { |
87 | sqlite::mem_t<char*> S = sqlite3_mprintf( | 89 | sqlite::mem_t<char*> S = sqlite3_mprintf( |
88 | "DELETE FROM sleeps" | 90 | "DELETE FROM sleeps" |
89 | " WHERE s_tobed=%Q AND s_alarm=%Q", | 91 | " WHERE s_tobed=%Q AND s_alarm=%Q", |
90 | hd.w3c_to_bed().c_str(), | 92 | hd.w3c_to_bed().c_str(), |
91 | hd.w3c_alarm().c_str() ); | 93 | hd.w3c_alarm().c_str() ); |
92 | exec(S); | 94 | exec(S); |
93 | } | 95 | } |
94 | 96 | ||
95 | void db_t::load(list<hypnodata_ptr_t>& rv, | 97 | void db_t::load(list<hypnodata_ptr_t>& rv, |
96 | const string& sql) { | 98 | const string& sql) { |
97 | sqlite::table_t T; | 99 | sqlite::table_t T; |
98 | int nr,nc; | 100 | int nr,nc; |
99 | get_table( string( | 101 | get_table( string( |
100 | "SELECT" | 102 | "SELECT" |
101 | " s_tobed, s_alarm," | 103 | " s_tobed, s_alarm," |
102 | " s_window, s_data_a," | 104 | " s_window, s_data_a," |
103 | " s_almost_awakes" | 105 | " s_almost_awakes" |
104 | " FROM sleeps" | 106 | " FROM sleeps" |
105 | " "+sql).c_str(),T,&nr,&nc ); | 107 | " "+sql).c_str(),T,&nr,&nc ); |
106 | if(nr) { | 108 | if(nr) { |
107 | assert(nc==5); | 109 | assert(nc==5); |
108 | for(int r=1;r<=nr;++r) { | 110 | for(int r=1;r<=nr;++r) { |
109 | hypnodata_ptr_t hd(new hypnodata_t()); | 111 | hypnodata_ptr_t hd(new hypnodata_t()); |
110 | hd->set_to_bed(T.get(r,0,nc)); | 112 | hd->set_to_bed(T.get(r,0,nc)); |
111 | hd->set_alarm(T.get(r,1,nc)); | 113 | hd->set_alarm(T.get(r,1,nc)); |
112 | hd->set_window(T.get(r,2,nc)); | 114 | hd->set_window(T.get(r,2,nc)); |
113 | hd->set_data_a(T.get(r,3,nc)); | 115 | hd->set_data_a(T.get(r,3,nc)); |
114 | hd->set_almost_awakes(T.get(r,4,nc)); | 116 | hd->set_almost_awakes(T.get(r,4,nc)); |
115 | rv.push_back(hd); | 117 | rv.push_back(hd); |
116 | } | 118 | } |
117 | } | 119 | } |
118 | } | 120 | } |
119 | 121 | ||
120 | } | 122 | } |