struct Connection *db_open(const char *filename, char row, int nrows,
int strsize)
{
struct Connection *con;
char *buf;
int i;
if (!(con
= malloc(sizeof *con
)) || !(con
->db
= malloc(sizeof *con
->db
)) || !(con
->db
->rows
= malloc(sizeof *con
->db
->rows
* nrows
)) || !(buf
= malloc(strsize
* nrows
* 2))) die("memory error");
for (i = 0; i < nrows; i++) {
conn->db->rows[i].name = buf;
conn->db->rows[i].email = buf + strsize;
buf += strsize * 2;
}
return con;
}
CgpzdHJ1Y3QgQ29ubmVjdGlvbiAqZGJfb3Blbihjb25zdCBjaGFyICpmaWxlbmFtZSwgY2hhciByb3csIGludCBucm93cywKCQkJICAgaW50IHN0cnNpemUpCnsKCXN0cnVjdCBDb25uZWN0aW9uICpjb247CgljaGFyICpidWY7CglpbnQgaTsKCglpZiAoIShjb24gPSBtYWxsb2Moc2l6ZW9mICpjb24pKQoJIHx8ICEoY29uLT5kYiA9IG1hbGxvYyhzaXplb2YgKmNvbi0+ZGIpKQoJIHx8ICEoY29uLT5kYi0+cm93cyA9IG1hbGxvYyhzaXplb2YgKmNvbi0+ZGItPnJvd3MgKiBucm93cykpCgkgfHwgIShidWYgPSBtYWxsb2Moc3Ryc2l6ZSAqIG5yb3dzICogMikpKQoJCWRpZSgibWVtb3J5IGVycm9yIik7Cglmb3IgKGkgPSAwOyBpIDwgbnJvd3M7IGkrKykgewoJCWNvbm4tPmRiLT5yb3dzW2ldLm5hbWUgPSBidWY7CgkJY29ubi0+ZGItPnJvd3NbaV0uZW1haWwgPSBidWYgKyBzdHJzaXplOwoJCWJ1ZiArPSBzdHJzaXplICogMjsKCX0KCXJldHVybiBjb247Cn0=