commit d5fd5c61e34c1b9af1c2f61ebe0cc810a976ea64
parent f0bd771b3a03309ea3ba0bff0c8bba377bc1afa9
Author: ssnf <ssnf@ssnf.xyz>
Date: Thu, 28 Aug 2025 21:53:08 +0000
fix sdb comment handling
Diffstat:
3 files changed, 12 insertions(+), 16 deletions(-)
diff --git a/src/libsdb/sdb_next.c b/src/libsdb/sdb_next.c
@@ -5,10 +5,11 @@ sdb_next(Sdb *db)
{
String s;
ulong n;
+ char c;
if (db->n + 1 < Vecsiz(db->r))
return ++db->n;
- if (!db->ln.n) {
+ if (!db->ln.n)
for (;;) {
if (!Strgets(&db->ln, db->b))
return 0;
@@ -17,22 +18,15 @@ sdb_next(Sdb *db)
if (n < db->ln.n && db->ln.s[n] != '#')
break;
}
- }
if (Vecsiz(db->r) && Vecsiz(db->r[db->n].attr))
++db->n;
Strinit(&s);
for (;;) {
- for (n = 0; n < db->ln.n; ++n)
- if (db->ln.s[n] == '#') {
- Strdelete(&db->ln, n, db->ln.n);
- break;
- }
Stradds(&s, db->ln);
- if (!Strgets(&db->ln, db->b)) {
- Strzero(&db->ln);
+ if (!Strgets(&db->ln, db->b))
break;
- }
- if (!isspace(db->ln.s[0]))
+ c = db->ln.s[0];
+ if (!isspace(c) && c != '#')
break;
}
sdbr_str2r(Vecadd(&db->r), s);
diff --git a/src/libsdbr/sdbr_print.c b/src/libsdbr/sdbr_print.c
@@ -4,7 +4,6 @@ void
sdbr_print(Sdbr r)
{
String s;
- ulong i;
if (!Vecsiz(r.attr))
sysfatal("sdbr_print: empty record");
diff --git a/src/libsdbr/sdbr_str2r.c b/src/libsdbr/sdbr_str2r.c
@@ -4,11 +4,12 @@ static char*
parsetuple(char *p, Sdbr *r)
{
char *k, *v, *q;
- ulong vn;
for (;isspace(*p); ++p);
k = p;
- for (;*p && !isspace(*p) && *p != '='; ++p);
+ for (;*p && !isspace(*p) && *p != '='; ++p)
+ if (*p == '#')
+ *p-- = '\0';
if (!*p || *p != '=') {
if (k != p)
sdbr_add(r, Strn(k, p - k), Str(nil));
@@ -17,7 +18,9 @@ parsetuple(char *p, Sdbr *r)
*p++ = '\0';
if (*p != '"') {
v = p;
- for (;*p && !isspace(*p); ++p);
+ for (;*p && !isspace(*p); ++p)
+ if (*p == '#')
+ *p-- = '\0';
if (v != p)
sdbr_add(r, Str(k), Strn(v, p - v));
else
@@ -47,7 +50,7 @@ void
sdbr_str2r(Sdbr *sr, String s)
{
String t;
- char *p, *q;
+ char *p;
Strinit(&t);
Strdup(&t, s);