plan9port

fork of plan9port with libvec, libstr and libsdb
Log | Files | Refs | README | LICENSE

sdb_next.c (602B)


      1 #include "std.h"
      2 
      3 int
      4 sdb_next(Sdb *db)
      5 {
      6 	String s;
      7 	ulong n;
      8 	char c;
      9 
     10 	if (db->n + 1 < Vecsiz(db->r))
     11 		return ++db->n;
     12 	if (!db->ln.n)
     13 		for (;;) {
     14 			if (!Strgets(&db->ln, db->b))
     15 				return 0;
     16 			for (n = 0; n < db->ln.n
     17 				&& isspace(db->ln.s[n]); ++n);
     18 			if (n < db->ln.n && db->ln.s[n] != '#')
     19 				break;
     20 		}
     21 	if (Vecsiz(db->r) && Vecsiz(db->r[db->n].attr))
     22 		++db->n;
     23 	Strinit(&s);
     24 	for (;;) {
     25 		Stradds(&s, db->ln);
     26 		if (!Strgets(&db->ln, db->b))
     27 			break;
     28 		c = db->ln.s[0];
     29 		if (!isspace(c) && c != '#')
     30 			break;
     31 	}
     32 	sdbr_str2r(Vecadd(&db->r), s);
     33 	Strclose(&s);
     34 	return db->n + 1;
     35 }