summaryrefslogtreecommitdiff
path: root/lib/libc/db/test/dbtest.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libc/db/test/dbtest.c')
-rw-r--r--lib/libc/db/test/dbtest.c213
1 files changed, 63 insertions, 150 deletions
diff --git a/lib/libc/db/test/dbtest.c b/lib/libc/db/test/dbtest.c
index 4341b4c4709c..c526415a7a09 100644
--- a/lib/libc/db/test/dbtest.c
+++ b/lib/libc/db/test/dbtest.c
@@ -1,5 +1,5 @@
/*-
- * Copyright (c) 1992, 1993, 1994
+ * Copyright (c) 1992, 1993
* The Regents of the University of California. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -33,12 +33,12 @@
#ifndef lint
static char copyright[] =
-"@(#) Copyright (c) 1992, 1993, 1994\n\
+"@(#) Copyright (c) 1992, 1993\n\
The Regents of the University of California. All rights reserved.\n";
#endif /* not lint */
#ifndef lint
-static char sccsid[] = "@(#)dbtest.c 8.17 (Berkeley) 9/1/94";
+static char sccsid[] = "@(#)dbtest.c 8.8 (Berkeley) 2/21/94";
#endif /* not lint */
#include <sys/param.h>
@@ -65,8 +65,6 @@ void get __P((DB *, DBT *));
void getdata __P((DB *, DBT *, DBT *));
void put __P((DB *, DBT *, DBT *));
void rem __P((DB *, DBT *));
-char *sflags __P((int));
-void synk __P((DB *));
void *rfile __P((char *, size_t *));
void seq __P((DB *, DBT *));
u_int setflags __P((char *));
@@ -74,14 +72,13 @@ void *setinfo __P((DBTYPE, char *));
void usage __P((void));
void *xmalloc __P((char *, size_t));
-DBTYPE type; /* Database type. */
-void *infop; /* Iflags. */
-u_long lineno; /* Current line in test script. */
-u_int flags; /* Current DB flags. */
-int ofd = STDOUT_FILENO; /* Standard output fd. */
+DBTYPE type;
+void *infop;
+u_long lineno;
+u_int flags;
+int ofd = STDOUT_FILENO;
DB *XXdbp; /* Global for gdb. */
-int XXlineno; /* Fast breakpoint for gdb. */
int
main(argc, argv)
@@ -94,15 +91,14 @@ main(argc, argv)
DB *dbp;
DBT data, key, keydata;
size_t len;
- int ch, oflags, sflag;
- char *fname, *infoarg, *p, *t, buf[8 * 1024];
+ int ch, oflags;
+ char *fname, *infoarg, *p, buf[8 * 1024];
infoarg = NULL;
fname = NULL;
oflags = O_CREAT | O_RDWR;
- sflag = 0;
- while ((ch = getopt(argc, argv, "f:i:lo:s")) != EOF)
- switch (ch) {
+ while ((ch = getopt(argc, argv, "f:i:lo:")) != EOF)
+ switch(ch) {
case 'f':
fname = optarg;
break;
@@ -117,9 +113,6 @@ main(argc, argv)
O_WRONLY|O_CREAT|O_TRUNC, 0666)) < 0)
err("%s: %s", optarg, strerror(errno));
break;
- case 's':
- sflag = 1;
- break;
case '?':
default:
usage();
@@ -134,8 +127,8 @@ main(argc, argv)
type = dbtype(*argv++);
/* Open the descriptor file. */
- if (strcmp(*argv, "-") && freopen(*argv, "r", stdin) == NULL)
- err("%s: %s", *argv, strerror(errno));
+ if (freopen(*argv, "r", stdin) == NULL)
+ err("%s: %s", *argv, strerror(errno));
/* Set up the db structure as necessary. */
if (infoarg == NULL)
@@ -146,10 +139,7 @@ main(argc, argv)
if (*p != '\0')
infop = setinfo(type, p);
- /*
- * Open the DB. Delete any preexisting copy, you almost never
- * want it around, and it often screws up tests.
- */
+ /* Open the DB. */
if (fname == NULL) {
p = getenv("TMPDIR");
if (p == NULL)
@@ -157,9 +147,7 @@ main(argc, argv)
(void)sprintf(buf, "%s/__dbtest", p);
fname = buf;
(void)unlink(buf);
- } else if (!sflag)
- (void)unlink(fname);
-
+ }
if ((dbp = dbopen(fname,
oflags, S_IRUSR | S_IWUSR, type, infop)) == NULL)
err("dbopen: %s", strerror(errno));
@@ -168,16 +156,8 @@ main(argc, argv)
state = COMMAND;
for (lineno = 1;
(p = fgets(buf, sizeof(buf), stdin)) != NULL; ++lineno) {
- /* Delete the newline, displaying the key/data is easier. */
- if (ofd == STDOUT_FILENO && (t = strchr(p, '\n')) != NULL)
- *t = '\0';
- if ((len = strlen(buf)) == 0 || isspace(*p) || *p == '#')
- continue;
-
- /* Convenient gdb break point. */
- if (XXlineno == lineno)
- XXlineno = 1;
- switch (*p) {
+ len = strlen(buf);
+ switch(*p) {
case 'c': /* compare */
if (state != COMMAND)
err("line %lu: not expecting command", lineno);
@@ -190,8 +170,7 @@ main(argc, argv)
/* Don't display the newline, if CR at EOL. */
if (p[len - 2] == '\r')
--len;
- if (write(ofd, p + 1, len - 1) != len - 1 ||
- write(ofd, "\n", 1) != 1)
+ if (write(ofd, p + 1, len - 1) != len - 1)
err("write: %s", strerror(errno));
break;
case 'g': /* get */
@@ -209,19 +188,8 @@ main(argc, argv)
case 'r': /* remove */
if (state != COMMAND)
err("line %lu: not expecting command", lineno);
- if (flags == R_CURSOR) {
- rem(dbp, &key);
- state = COMMAND;
- } else {
- state = KEY;
- command = REMOVE;
- }
- break;
- case 'S': /* sync */
- if (state != COMMAND)
- err("line %lu: not expecting command", lineno);
- synk(dbp);
- state = COMMAND;
+ state = KEY;
+ command = REMOVE;
break;
case 's': /* seq */
if (state != COMMAND)
@@ -245,7 +213,7 @@ main(argc, argv)
err("line %lu: not expecting data", lineno);
data.data = xmalloc(p + 1, len - 1);
data.size = len - 1;
-ldata: switch (command) {
+ldata: switch(command) {
case COMPARE:
compare(&keydata, &data);
break;
@@ -281,7 +249,7 @@ ldata: switch (command) {
key.data = xmalloc(p + 1, len - 1);
key.size = len - 1;
}
-lkey: switch (command) {
+lkey: switch(command) {
case COMPARE:
getdata(dbp, &key, &keydata);
state = DATA;
@@ -297,13 +265,13 @@ lkey: switch (command) {
break;
case REMOVE:
rem(dbp, &key);
- if ((type != DB_RECNO) && (flags != R_CURSOR))
+ if (type != DB_RECNO)
free(key.data);
state = COMMAND;
break;
case SEQ:
seq(dbp, &key);
- if ((type != DB_RECNO) && (flags != R_CURSOR))
+ if (type != DB_RECNO)
free(key.data);
state = COMMAND;
break;
@@ -317,15 +285,11 @@ lkey: switch (command) {
break;
default:
err("line %lu: %s: unknown command character",
- lineno, p);
+ p, lineno);
}
}
#ifdef STATISTICS
- /*
- * -l must be used (DB_LOCK must be set) for this to be
- * used, otherwise a page will be locked and it will fail.
- */
- if (type == DB_BTREE && oflags & DB_LOCK)
+ if (type == DB_BTREE)
__bt_stat(dbp);
#endif
if (dbp->close(dbp))
@@ -335,6 +299,7 @@ lkey: switch (command) {
}
#define NOOVERWRITE "put failed, would overwrite key\n"
+#define NOSUCHKEY "get failed, no such key\n"
void
compare(db1, db2)
@@ -363,23 +328,17 @@ get(dbp, kp)
{
DBT data;
- switch (dbp->get(dbp, kp, &data, flags)) {
+ switch(dbp->get(dbp, kp, &data, flags)) {
case 0:
(void)write(ofd, data.data, data.size);
- if (ofd == STDOUT_FILENO)
- (void)write(ofd, "\n", 1);
break;
case -1:
err("line %lu: get: %s", lineno, strerror(errno));
/* NOTREACHED */
case 1:
-#define NOSUCHKEY "get failed, no such key\n"
- if (ofd != STDOUT_FILENO)
- (void)write(ofd, NOSUCHKEY, sizeof(NOSUCHKEY) - 1);
- else
- (void)fprintf(stderr, "%d: %.*s: %s",
- lineno, MIN(kp->size, 20), kp->data, NOSUCHKEY);
-#undef NOSUCHKEY
+ (void)write(ofd, NOSUCHKEY, sizeof(NOSUCHKEY) - 1);
+ (void)fprintf(stderr, "%d: %.*s: %s\n",
+ lineno, kp->size, kp->data, NOSUCHKEY);
break;
}
}
@@ -389,14 +348,14 @@ getdata(dbp, kp, dp)
DB *dbp;
DBT *kp, *dp;
{
- switch (dbp->get(dbp, kp, dp, flags)) {
+ switch(dbp->get(dbp, kp, dp, flags)) {
case 0:
return;
case -1:
err("line %lu: getdata: %s", lineno, strerror(errno));
/* NOTREACHED */
case 1:
- err("line %lu: getdata failed, no such key", lineno);
+ err("line %lu: get failed, no such key", lineno);
/* NOTREACHED */
}
}
@@ -406,7 +365,7 @@ put(dbp, kp, dp)
DB *dbp;
DBT *kp, *dp;
{
- switch (dbp->put(dbp, kp, dp, flags)) {
+ switch(dbp->put(dbp, kp, dp, flags)) {
case 0:
break;
case -1:
@@ -423,67 +382,34 @@ rem(dbp, kp)
DB *dbp;
DBT *kp;
{
- switch (dbp->del(dbp, kp, flags)) {
+ switch(dbp->del(dbp, kp, flags)) {
case 0:
break;
case -1:
- err("line %lu: rem: %s", lineno, strerror(errno));
+ err("line %lu: get: %s", lineno, strerror(errno));
/* NOTREACHED */
case 1:
-#define NOSUCHKEY "rem failed, no such key\n"
- if (ofd != STDOUT_FILENO)
- (void)write(ofd, NOSUCHKEY, sizeof(NOSUCHKEY) - 1);
- else if (flags != R_CURSOR)
- (void)fprintf(stderr, "%d: %.*s: %s",
- lineno, MIN(kp->size, 20), kp->data, NOSUCHKEY);
- else
- (void)fprintf(stderr,
- "%d: rem of cursor failed\n", lineno);
-#undef NOSUCHKEY
+ (void)write(ofd, NOSUCHKEY, sizeof(NOSUCHKEY) - 1);
break;
}
}
void
-synk(dbp)
- DB *dbp;
-{
- switch (dbp->sync(dbp, flags)) {
- case 0:
- break;
- case -1:
- err("line %lu: synk: %s", lineno, strerror(errno));
- /* NOTREACHED */
- }
-}
-
-void
seq(dbp, kp)
DB *dbp;
DBT *kp;
{
DBT data;
- switch (dbp->seq(dbp, kp, &data, flags)) {
+ switch(dbp->seq(dbp, kp, &data, flags)) {
case 0:
(void)write(ofd, data.data, data.size);
- if (ofd == STDOUT_FILENO)
- (void)write(ofd, "\n", 1);
break;
case -1:
err("line %lu: seq: %s", lineno, strerror(errno));
/* NOTREACHED */
case 1:
-#define NOSUCHKEY "seq failed, no such key\n"
- if (ofd != STDOUT_FILENO)
- (void)write(ofd, NOSUCHKEY, sizeof(NOSUCHKEY) - 1);
- else if (flags == R_CURSOR)
- (void)fprintf(stderr, "%d: %.*s: %s",
- lineno, MIN(kp->size, 20), kp->data, NOSUCHKEY);
- else
- (void)fprintf(stderr,
- "%d: seq (%s) failed\n", lineno, sflags(flags));
-#undef NOSUCHKEY
+ (void)write(ofd, NOSUCHKEY, sizeof(NOSUCHKEY) - 1);
break;
}
}
@@ -504,11 +430,9 @@ dump(dbp, rev)
nflags = R_NEXT;
}
for (;; flags = nflags)
- switch (dbp->seq(dbp, &key, &data, flags)) {
+ switch(dbp->seq(dbp, &key, &data, flags)) {
case 0:
(void)write(ofd, data.data, data.size);
- if (ofd == STDOUT_FILENO)
- (void)write(ofd, "\n", 1);
break;
case 1:
goto done;
@@ -519,7 +443,7 @@ dump(dbp, rev)
}
done: return;
}
-
+
u_int
setflags(s)
char *s;
@@ -527,43 +451,32 @@ setflags(s)
char *p, *index();
for (; isspace(*s); ++s);
- if (*s == '\n' || *s == '\0')
+ if (*s == '\n')
return (0);
if ((p = index(s, '\n')) != NULL)
*p = '\0';
- if (!strcmp(s, "R_CURSOR")) return (R_CURSOR);
- if (!strcmp(s, "R_FIRST")) return (R_FIRST);
- if (!strcmp(s, "R_IAFTER")) return (R_IAFTER);
- if (!strcmp(s, "R_IBEFORE")) return (R_IBEFORE);
- if (!strcmp(s, "R_LAST")) return (R_LAST);
- if (!strcmp(s, "R_NEXT")) return (R_NEXT);
- if (!strcmp(s, "R_NOOVERWRITE")) return (R_NOOVERWRITE);
- if (!strcmp(s, "R_PREV")) return (R_PREV);
- if (!strcmp(s, "R_SETCURSOR")) return (R_SETCURSOR);
-
+ if (!strcmp(s, "R_CURSOR"))
+ return (R_CURSOR);
+ if (!strcmp(s, "R_FIRST"))
+ return (R_FIRST);
+ if (!strcmp(s, "R_IAFTER"))
+ return (R_IAFTER);
+ if (!strcmp(s, "R_IBEFORE"))
+ return (R_IBEFORE);
+ if (!strcmp(s, "R_LAST"))
+ return (R_LAST);
+ if (!strcmp(s, "R_NEXT"))
+ return (R_NEXT);
+ if (!strcmp(s, "R_NOOVERWRITE"))
+ return (R_NOOVERWRITE);
+ if (!strcmp(s, "R_PREV"))
+ return (R_PREV);
+ if (!strcmp(s, "R_SETCURSOR"))
+ return (R_SETCURSOR);
err("line %lu: %s: unknown flag", lineno, s);
/* NOTREACHED */
}
-char *
-sflags(flags)
- int flags;
-{
- switch (flags) {
- case R_CURSOR: return ("R_CURSOR");
- case R_FIRST: return ("R_FIRST");
- case R_IAFTER: return ("R_IAFTER");
- case R_IBEFORE: return ("R_IBEFORE");
- case R_LAST: return ("R_LAST");
- case R_NEXT: return ("R_NEXT");
- case R_NOOVERWRITE: return ("R_NOOVERWRITE");
- case R_PREV: return ("R_PREV");
- case R_SETCURSOR: return ("R_SETCURSOR");
- }
-
- return ("UNKNOWN!");
-}
-
DBTYPE
dbtype(s)
char *s;
@@ -593,8 +506,8 @@ setinfo(type, s)
*eq++ = '\0';
if (!isdigit(*eq))
err("%s: structure set statement must be a number", s);
-
- switch (type) {
+
+ switch(type) {
case DB_BTREE:
if (!strcmp("flags", s)) {
ib.flags = atoi(eq);