diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2013-05-14 10:16:09 +0000 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2013-05-14 10:16:09 +0000 |
commit | e0fba6888fc9ee90d27ac03a06844b22bad101be (patch) | |
tree | 873f30cd678e3d2bfad4fd5e3ce4a9d878156037 /src/datconv.c | |
parent | 10201217d141314a78a7937027bfdbdb7c994a43 (diff) | |
download | gdbm-e0fba6888fc9ee90d27ac03a06844b22bad101be.tar.gz gdbm-e0fba6888fc9ee90d27ac03a06844b22bad101be.tar.bz2 |
Cleanup.
* src/datconv.c (s_float): Use strtod.
(datum_scan_notag, datum_scan_tag): Made static.
(dsprint): New function.
* src/gdbmtool.c (status_handler): Print ket and
content definitions.
(slist_new): Bugfix (missing return statement).
* src/gdbmtool.h: Add new prototypes.
* src/lex.l: Remove unused variables, set option
nounput.
Diffstat (limited to 'src/datconv.c')
-rw-r--r-- | src/datconv.c | 39 |
1 files changed, 35 insertions, 4 deletions
diff --git a/src/datconv.c b/src/datconv.c index 6f5e2f5..cf17011 100644 --- a/src/datconv.c +++ b/src/datconv.c @@ -128,7 +128,7 @@ s_float (struct xdatum *xd, char *str) char *p; errno = 0; - d = strtof (str, &p); + d = strtod (str, &p); if (errno || *p) return 1; xd_store (xd, &d, sizeof (d)); @@ -302,11 +302,11 @@ xd_store (struct xdatum *xd, void *val, size_t size) xd->dsize = xd->off; } -int +static int datum_scan_notag (datum *dat, struct dsegm *ds, struct kvpair *kv) { struct xdatum xd; - int i, n; + int i; struct slist *s; int err = 0; @@ -377,7 +377,7 @@ datum_scan_notag (datum *dat, struct dsegm *ds, struct kvpair *kv) return 0; } -int +static int datum_scan_tag (datum *dat, struct dsegm *ds, struct kvpair *kv) { parse_error (&kv->loc, "tagged values are not yet supported"); @@ -389,3 +389,34 @@ datum_scan (datum *dat, struct dsegm *ds, struct kvpair *kv) { return (kv->key ? datum_scan_tag : datum_scan_notag) (dat, ds, kv); } + +void +dsprint (FILE *fp, int what, struct dsegm *ds) +{ + static char *dsstr[] = { "key", "content" }; + + fprintf (fp, "define %s {\n", dsstr[what]); + for (; ds; ds = ds->next) + { + switch (ds->type) + { + case FDEF_FLD: + fprintf (fp, "\t%s", ds->v.field.type->name); + if (ds->v.field.name) + fprintf (fp, " %s", ds->v.field.type->name); + if (ds->v.field.dim > 1) + fprintf (fp, "[%d]", ds->v.field.dim); + fprintf (fp, ",\n"); + break; + + case FDEF_OFF: + fprintf (fp, "\toff %d,\n", ds->v.n); + break; + + case FDEF_PAD: + fprintf (fp, "\tpad %d,\n", ds->v.n); + break; + } + } + fprintf (fp, "}\n"); +} |