#include #include #include #include #include "db.h" sqlite3_stmt * byid(int id, char *sql) { sqlite3_stmt *stmt; if(sqlite3_prepare(db, sql, -1, &stmt, 0) != SQLITE_OK) return NULL; if(sqlite3_bind_int(stmt, 1, id) != SQLITE_OK) return NULL; if(sqlite3_step(stmt) != SQLITE_ROW) return NULL; return stmt; } char * textdup(const unsigned char *s) { return s? strdup((char *)s): NULL; } struct post * getpost(int id) { sqlite3_stmt *stmt; struct post *post; if(!(stmt = byid(id, "SELECT parent, user, created, edited, subject, text FROM posts WHERE oid = ?"))){ sqlite3_finalize(stmt); return NULL; } if(!(post = malloc(sizeof(struct post)))) err(1, "malloc"); post->parent = sqlite3_column_int(stmt, 0); post->user = sqlite3_column_int(stmt, 1); post->created = sqlite3_column_int(stmt, 2); post->edited = sqlite3_column_int(stmt, 3); post->subject = textdup(sqlite3_column_text(stmt, 4)); post->text = textdup(sqlite3_column_text(stmt, 5)); sqlite3_finalize(stmt); return post; } struct user * getuser(int id) { sqlite3_stmt *stmt; struct user *user; if(!(stmt = byid(id, "SELECT name, full, hash FROM users WHERE oid = ?"))){ sqlite3_finalize(stmt); return NULL; } if(!(user = malloc(sizeof(struct user)))) err(1, "malloc"); user->id = id; user->name = textdup(sqlite3_column_text(stmt, 0)); user->full = textdup(sqlite3_column_text(stmt, 1)); user->hash = textdup(sqlite3_column_text(stmt, 2)); sqlite3_finalize(stmt); return user; }