busted, but really must move along...

cat-town
Dan Buch 13 years ago
parent ab98180af0
commit 314faf66f8

@ -15,9 +15,10 @@ struct Address {
}; };
struct Database { struct Database {
size_t size;
int max_data; int max_data;
int max_rows; int max_rows;
struct Address rows[]; struct Address *rows;
}; };
struct Connection { struct Connection {
@ -48,11 +49,19 @@ void Address_print(struct Address *addr)
void Database_load(struct Connection *conn) void Database_load(struct Connection *conn)
{ {
int rc = fread(conn->db, sizeof(struct Database), 1, conn->file); rewind(conn->file);
if(rc != 1) die("Failed to load database.", conn);
int rc = fread(&conn->db->max_rows, sizeof(int), 1, conn->file);
if(rc != 1) die("Failed to load database max_rows.", conn);
rc = fread(&conn->db->max_data, sizeof(int), 1, conn->file);
if(rc != 1) die("Failed to load database max_data.", conn);
rc = fread(conn->db->rows, sizeof(struct Address), conn->db->max_rows, conn->file);
if(rc != 1) die("Failed to load database rows.", conn);
} }
struct Connection* Database_open(const char *filename, char mode) struct Connection* Database_open(const char *filename, char mode, int max_rows)
{ {
struct Connection *conn = malloc(sizeof(struct Connection)); struct Connection *conn = malloc(sizeof(struct Connection));
if(!conn) die("Memory error", conn); if(!conn) die("Memory error", conn);
@ -60,6 +69,11 @@ struct Connection* Database_open(const char *filename, char mode)
conn->db = malloc(sizeof(struct Database)); conn->db = malloc(sizeof(struct Database));
if(!conn->db) die("Memory error", conn); if(!conn->db) die("Memory error", conn);
size_t rowsize = max_rows * sizeof(struct Address);
conn->db->size = rowsize;
conn->db->rows = malloc(rowsize);
if(!conn->db->rows) die("Memory error", conn);
if(mode == 'c') { if(mode == 'c') {
conn->file = fopen(filename, "w"); conn->file = fopen(filename, "w");
} else { } else {
@ -88,8 +102,17 @@ void Database_write(struct Connection *conn)
{ {
rewind(conn->file); rewind(conn->file);
int rc = fwrite(conn->db, sizeof(struct Database), 1, conn->file); int rc = fwrite(&conn->db->size, sizeof(size_t), 1, conn->file);
if(rc != 1) die("Failed to write database.", conn); if(rc != 1) die("Failed to write database size.", conn);
rc = fwrite(&conn->db->max_rows, sizeof(int), 1, conn->file);
if(rc != 1) die("Failed to write database max_rows.", conn);
rc = fwrite(&conn->db->max_data, sizeof(int), 1, conn->file);
if(rc != 1) die("Failed to write database max_data.", conn);
rc = fwrite(conn->db->rows, conn->db->size, 1, conn->file);
if(rc != 1) die("Failed to write database rows.", conn);
rc = fflush(conn->file); rc = fflush(conn->file);
if(rc == -1) die("Cannot flush database.", conn); if(rc == -1) die("Cannot flush database.", conn);
@ -170,7 +193,7 @@ int main(int argc, char *argv[])
sscanf(argv[2], "%c:%d,%d", &action, &max_data, &max_rows); sscanf(argv[2], "%c:%d,%d", &action, &max_data, &max_rows);
} }
struct Connection *conn = Database_open(filename, action); struct Connection *conn = Database_open(filename, action, max_rows);
int id = 0; int id = 0;
if(argc > 3) id = atoi(argv[3]); if(argc > 3) id = atoi(argv[3]);

Loading…
Cancel
Save