#include "vsdb.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
static FILE *_vs_fp;
static struct vsdb _vs_vsdb;
static int
vsdbscan()
{
char *cp, *p;
#define MAXLINELENGTH 1024
static char line[MAXLINELENGTH];
for (;;) {
if (!(p = fgets(line, sizeof(line), _vs_fp)))
return(0);
if (!(cp = strsep(&p, ":")) || *cp == '\0')
continue;
_vs_vsdb.vs_spec = cp;
if (!(cp = strsep(&p, "\n")) || *cp == '\0')
continue;
_vs_vsdb.vs_ops = strtol(cp, &p, 16);
if (*p == '\0')
return(1);
}
}
struct vsdb *
getvsent()
{
if ((!_vs_fp && !setvsent()) || !vsdbscan())
return((struct vsdb *)NULL);
return(&_vs_vsdb);
}
struct vsdb *
getvsspec(name)
const char *name;
{
if (setvsent())
while (vsdbscan())
if (!strcmp(_vs_vsdb.vs_spec, name))
return(&_vs_vsdb);
return((struct vsdb *)NULL);
}
int
setvsent()
{
if (_vs_fp) {
rewind(_vs_fp);
return(1);
}
if ((_vs_fp = fopen(_PATH_VSDB, "r")) != NULL) {
return(1);
}
return(0);
}
void
endvsent()
{
if (_vs_fp) {
(void)fclose(_vs_fp);
_vs_fp = NULL;
}
}