sdb_open.c (672B)
1 #include "std.h" 2 3 void 4 sdb_Bopen(Sdb *db, Biobuf *b) 5 { 6 Strinit(&db->ln); 7 Vecinitf(&db->r, sdbr_init, sdbr_close); 8 db->b = b; 9 db->n = 0; 10 } 11 12 void 13 sdb_close(Sdb *db) 14 { 15 Strclose(&db->ln); 16 Vecclose(&db->r); 17 Bterm(db->b); 18 } 19 20 void 21 sdb_open(Sdb *db, char *file) 22 { 23 Biobuf *b; 24 25 if (!file || file[0] == '\0') 26 b = Bfdopen(0, OREAD); 27 else 28 b = Bopen(file, OREAD); 29 if (!b) 30 sysfatal("Bopen(%s): %r", file); 31 sdb_Bopen(db, b); 32 } 33 34 void 35 sdb_openf(Sdb *db, char *fmt, ...) 36 { 37 va_list ap; 38 char *p; 39 40 va_start(ap, fmt); 41 p = vsmprint(fmt, ap); 42 va_end(ap); 43 sdb_open(db, p); 44 free(p); 45 } 46 47 ulong 48 sdb_n(Sdb db) 49 { 50 return Vecsiz(db.r); 51 } 52 53 void 54 sdb_rewind(Sdb *db) 55 { 56 db->n = 0; 57 }