summaryrefslogtreecommitdiffstats
path: root/contrib/perl5/ext/SDBM_File/sdbm/dbm.c
blob: 321ac3ef6061e02ab49d4c82dcd8ec4d7c011f62 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
/*
 * Copyright (c) 1985 The Regents of the University of California.
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms are permitted
 * provided that the above copyright notice and this notice are
 * duplicated in all such forms.
 *
 * [additional clause stricken -- see below]
 *
 * The name of the University may not be used to endorse or promote
 * products derived from this software without specific prior written
 * permission.  THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE.
 *
 * This notice previously contained the additional clause:
 *
 *   and that any documentation, advertising materials, and other
 *   materials related to such distribution and use acknowledge that
 *   the software was developed by the University of California,
 *   Berkeley.
 *
 * Pursuant to the licensing change made by the Office of Technology
 * Licensing of the University of California, Berkeley on July 22,
 * 1999 and documented in:
 *
 *   ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change
 *
 * this clause has been stricken and no longer is applicable to this
 * software.
 */

#ifndef lint
static char sccsid[] = "@(#)dbm.c    5.4 (Berkeley) 5/24/89";
#endif /* not lint */

#include    "dbm.h"

#define    NODB    ((DBM *)0)

static DBM *cur_db = NODB;

static char no_db[] = "dbm: no open database\n";

int
dbminit(char *file)
{
    if (cur_db != NODB)
        dbm_close(cur_db);

    cur_db = dbm_open(file, 2, 0);
    if (cur_db == NODB) {
        cur_db = dbm_open(file, 0, 0);
        if (cur_db == NODB)
            return (-1);
    }
    return (0);
}

long
forder(datum key)
{
    if (cur_db == NODB) {
        printf(no_db);
        return (0L);
    }
    return (dbm_forder(cur_db, key));
}

datum
fetch(datum key)
{
    datum item;

    if (cur_db == NODB) {
        printf(no_db);
        item.dptr = 0;
        return (item);
    }
    return (dbm_fetch(cur_db, key));
}

int
delete(datum key)
{
    if (cur_db == NODB) {
        printf(no_db);
        return (-1);
    }
    if (dbm_rdonly(cur_db))
        return (-1);
    return (dbm_delete(cur_db, key));
}

int
store(datum key, datum dat)
{
    if (cur_db == NODB) {
        printf(no_db);
        return (-1);
    }
    if (dbm_rdonly(cur_db))
        return (-1);

    return (dbm_store(cur_db, key, dat, DBM_REPLACE));
}

datum
firstkey(void)
{
    datum item;

    if (cur_db == NODB) {
        printf(no_db);
        item.dptr = 0;
        return (item);
    }
    return (dbm_firstkey(cur_db));
}

datum
nextkey(datum key)
{
    datum item;

    if (cur_db == NODB) {
        printf(no_db);
        item.dptr = 0;
        return (item);
    }
    return (dbm_nextkey(cur_db, key));
}
OpenPOWER on IntegriCloud