Commit | Line | Data |
463ee0b2 |
1 | #include "EXTERN.h" |
2 | #include "perl.h" |
3 | #include "XSUB.h" |
4 | #include <gdbm.h> |
5 | |
6 | #include <fcntl.h> |
7 | |
8 | typedef GDBM_FILE GDBM_File; |
9 | |
10 | #define gdbm_new(dbtype,filename,flags,mode) \ |
11 | gdbm_open(filename, 0, flags & O_CREAT ? GDBM_WRCREAT : GDBM_WRITER, \ |
12 | mode, fatal) |
13 | |
14 | typedef datum gdatum; |
15 | |
16 | typedef struct gdbm_file_desc { |
17 | GDBM_File ptr; |
18 | SV* curkey; |
19 | } GDBM_FILE_DESC; |
20 | |
21 | GDBM_FILE_DESC* GDBM_File_desc; |
22 | |
23 | GDBM_FILE_DESC* |
24 | newGDBM_FILE_DESC(ptr) |
25 | void* ptr; |
26 | { |
27 | New(0, GDBM_File_desc, 1, GDBM_FILE_DESC); |
28 | GDBM_File_desc->ptr = ptr; |
29 | GDBM_File_desc->curkey = 0; |
30 | return GDBM_File_desc; |
31 | } |
32 | |
33 | void |
34 | deleteGDBM_FILE_DESC() |
35 | { |
36 | sv_free(GDBM_File_desc->curkey); |
37 | Safefree(GDBM_File_desc); |
38 | } |
39 | |
40 | typedef void (*FATALFUNC)(); |
41 | |
42 | static datum |
43 | get_current_key() |
44 | { |
45 | datum key; |
46 | key.dptr = SvPVn( GDBM_File_desc->curkey, key.dsize); |
47 | return key; |
48 | } |
49 | |
50 | static void |
51 | set_current_key(sv) |
52 | SV *sv; |
53 | { |
54 | sv_free(GDBM_File_desc->curkey); |
55 | GDBM_File_desc->curkey = sv_ref(sv); |
56 | } |
57 | |
58 | |
59 | MODULE = GDBM_File PACKAGE = GDBM_File PREFIX = gdbm_ |
60 | |
61 | GDBM_File |
62 | gdbm_new(dbtype, filename, flags, mode) |
63 | char * dbtype |
64 | char * filename |
65 | int flags |
66 | int mode |
67 | |
68 | GDBM_File |
69 | gdbm_open(name, block_size, read_write, mode, fatal_func = (FATALFUNC)fatal) |
70 | char * name |
71 | int block_size |
72 | int read_write |
73 | int mode |
74 | FATALFUNC fatal_func |
75 | |
76 | void |
77 | gdbm_close(db) |
78 | GDBM_File db |
79 | CLEANUP: |
80 | deleteGDBM_FILE_DESC(); |
81 | |
82 | void |
83 | gdbm_DESTROY(db) |
84 | GDBM_File db |
85 | CODE: |
86 | gdbm_close(db); |
87 | deleteGDBM_FILE_DESC(); |
88 | |
89 | gdatum |
90 | gdbm_fetch(db, key) |
91 | GDBM_File db |
92 | datum key |
93 | |
94 | int |
95 | gdbm_store(db, key, value, flags = GDBM_REPLACE) |
96 | GDBM_File db |
97 | datum key |
98 | datum value |
99 | int flags |
100 | |
101 | int |
102 | gdbm_delete(db, key) |
103 | GDBM_File db |
104 | datum key |
105 | |
106 | gdatum |
107 | gdbm_firstkey(db) |
108 | GDBM_File db |
109 | CLEANUP: |
110 | set_current_key(ST(0)); |
111 | |
112 | gdatum |
113 | gdbm_nextkey(db, key = get_current_key()) |
114 | GDBM_File db |
115 | datum key |
116 | CLEANUP: |
117 | set_current_key(ST(0)); |
118 | |
119 | int |
120 | gdbm_reorganize(db) |
121 | GDBM_File db |
122 | |