This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
[5.005_56] Add EXISTS to SDBM_File and libsdbm
[perl5.git] / ext / SDBM_File / SDBM_File.xs
1 #include "EXTERN.h"
2 #include "perl.h"
3 #include "XSUB.h"
4 #include "sdbm/sdbm.h"
5
6 typedef DBM* SDBM_File;
7 #define sdbm_TIEHASH(dbtype,filename,flags,mode) sdbm_open(filename,flags,mode)
8 #define sdbm_FETCH(db,key)                      sdbm_fetch(db,key)
9 #define sdbm_STORE(db,key,value,flags)          sdbm_store(db,key,value,flags)
10 #define sdbm_DELETE(db,key)                     sdbm_delete(db,key)
11 #define sdbm_EXISTS(db,key)                     sdbm_exists(db,key)
12 #define sdbm_FIRSTKEY(db)                       sdbm_firstkey(db)
13 #define sdbm_NEXTKEY(db,key)                    sdbm_nextkey(db)
14
15
16 MODULE = SDBM_File      PACKAGE = SDBM_File     PREFIX = sdbm_
17
18 SDBM_File
19 sdbm_TIEHASH(dbtype, filename, flags, mode)
20         char *          dbtype
21         char *          filename
22         int             flags
23         int             mode
24
25 void
26 sdbm_DESTROY(db)
27         SDBM_File       db
28         CODE:
29         sdbm_close(db);
30
31 datum
32 sdbm_FETCH(db, key)
33         SDBM_File       db
34         datum           key
35
36 int
37 sdbm_STORE(db, key, value, flags = DBM_REPLACE)
38         SDBM_File       db
39         datum           key
40         datum           value
41         int             flags
42     CLEANUP:
43         if (RETVAL) {
44             if (RETVAL < 0 && errno == EPERM)
45                 croak("No write permission to sdbm file");
46             croak("sdbm store returned %d, errno %d, key \"%s\"",
47                         RETVAL,errno,key.dptr);
48             sdbm_clearerr(db);
49         }
50
51 int
52 sdbm_DELETE(db, key)
53         SDBM_File       db
54         datum           key
55
56 int
57 sdbm_EXISTS(db,key)
58         SDBM_File       db
59         datum           key
60
61 datum
62 sdbm_FIRSTKEY(db)
63         SDBM_File       db
64
65 datum
66 sdbm_NEXTKEY(db, key)
67         SDBM_File       db
68         datum           key
69
70 int
71 sdbm_error(db)
72         SDBM_File       db
73
74 int
75 sdbm_clearerr(db)
76         SDBM_File       db
77