gecko-dev/db/test/tcl_dbm.c

201 строка
3.6 KiB
C

/*-
* See the file LICENSE for redistribution information.
*
* Copyright (c) 1996, 1997, 1998
* Sleepycat Software. All rights reserved.
*/
#include "config.h"
#ifndef lint
static const char sccsid[] = "@(#)tcl_dbm.c 10.8 (Sleepycat) 4/27/98";
#endif /* not lint */
/*
* This file is divided up into 2 sets of functions:
* 1. The dbminit command.
* 3. The dbm support functions (e.g. fetch, store, delete)
*/
#include <string.h>
#include <tcl.h>
#define DB_DBM_HSEARCH 1
#include <db.h>
#include "dbtest.h"
#include "test_ext.h"
/*
* dbminit_cmd --
* Implements dbminit for dbtest. Dbminit creates a widget that
* implements all the commands found off in the historical dbm interface.
*/
#define DBMINIT_USAGE "dbminit file"
int
dbminit_cmd(notused, interp, argc, argv)
ClientData notused;
Tcl_Interp *interp;
int argc;
char *argv[];
{
char *name;
int ret;
notused = NULL;
/* Check number of arguments. */
USAGE_GE(argc, 2, DBMINIT_USAGE, 0);
name = strcmp(argv[1], "NULL") == 0 ? NULL : argv[1];
debug_check();
/* Call dbminit. */
ret = dbminit(name);
if (ret != 0) {
Tcl_SetResult(interp, "dbminit: ", TCL_STATIC);
Tcl_AppendResult(interp, Tcl_PosixError(interp), NULL);
return (TCL_OK);
}
Tcl_SetResult(interp, "0", TCL_STATIC);
return (TCL_OK);
}
/* DBM support functions. */
#define DBMDEL_USAGE "delete key"
int
dbm_delete_cmd(notused, interp, argc, argv)
ClientData notused;
Tcl_Interp *interp;
int argc;
char *argv[];
{
datum key;
USAGE(argc, 2, DBMDEL_USAGE, 0);
notused = NULL;
key.dptr = argv[1];
key.dsize = (int)strlen(argv[1]) + 1; /* Add NULL on end. */
debug_check();
if (delete(key) == 0)
Tcl_SetResult(interp, "0", TCL_STATIC);
else
Tcl_SetResult(interp, "-1", TCL_STATIC);
return (TCL_OK);
}
#define DBMFETCH_USAGE "fetch key"
int
dbm_fetch_cmd(notused, interp, argc, argv)
ClientData notused;
Tcl_Interp *interp;
int argc;
char *argv[];
{
datum data, key;
USAGE_GE(argc, 2, DBMFETCH_USAGE, 0);
notused = NULL;
key.dptr = argv[1];
key.dsize = strlen(argv[1]) + 1; /* Add Null on end */
debug_check();
data = fetch(key);
if (data.dptr == NULL)
Tcl_SetResult(interp, "-1", TCL_STATIC);
else
Tcl_SetResult(interp, data.dptr, TCL_VOLATILE);
return (TCL_OK);
}
#define DBMSTORE_USAGE "store key data"
int
dbm_store_cmd(notused, interp, argc, argv)
ClientData notused;
Tcl_Interp *interp;
int argc;
char *argv[];
{
datum data, key;
USAGE_GE(argc, 3, DBMSTORE_USAGE, 0);
notused = NULL;
key.dptr = argv[1];
key.dsize = strlen(argv[1]) + 1; /* Add Null on end */
data.dptr = argv[2];
data.dsize = strlen(argv[2]) + 1;
debug_check();
if (store(key, data) == 0)
Tcl_SetResult(interp, "0", TCL_STATIC);
else
Tcl_SetResult(interp, "-1", TCL_STATIC);
return (TCL_OK);
}
#define DBMFIRST_USAGE "firstkey"
int
dbm_first_cmd(notused, interp, argc, argv)
ClientData notused;
Tcl_Interp *interp;
int argc;
char *argv[];
{
datum key;
USAGE(argc, 1, DBMFIRST_USAGE, 0);
argv = argv;
notused = NULL;
key = firstkey();
if (key.dptr != 0)
Tcl_SetResult(interp, key.dptr, TCL_VOLATILE);
else
Tcl_SetResult(interp, "-1", TCL_STATIC);
return (TCL_OK);
}
#define DBMNEXT_USAGE "nextkey key"
int
dbm_next_cmd(notused, interp, argc, argv)
ClientData notused;
Tcl_Interp *interp;
int argc;
char *argv[];
{
datum nkey, key;
USAGE(argc, 2, DBMNEXT_USAGE, 0);
notused = NULL;
key.dptr = argv[1];
key.dsize = strlen(argv[1]) + 1;
nkey = nextkey(key);
if (nkey.dptr != 0)
Tcl_SetResult(interp, nkey.dptr, TCL_VOLATILE);
else
Tcl_SetResult(interp, "-1", TCL_STATIC);
return (TCL_OK);
}