perl 5.0 alpha 9
[p5sagit/p5-mst-13.2.git] / ext / dbm / GDBM_File.xs.bak
CommitLineData
463ee0b2 1#include "EXTERN.h"
2#include "perl.h"
3#include "XSUB.h"
4#include <gdbm.h>
5
6#include <fcntl.h>
7
8typedef 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
14typedef datum gdatum;
15
16typedef struct gdbm_file_desc {
17 GDBM_File ptr;
18 SV* curkey;
19} GDBM_FILE_DESC;
20
21GDBM_FILE_DESC* GDBM_File_desc;
22
23GDBM_FILE_DESC*
24newGDBM_FILE_DESC(ptr)
25void* 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
33void
34deleteGDBM_FILE_DESC()
35{
36 sv_free(GDBM_File_desc->curkey);
37 Safefree(GDBM_File_desc);
38}
39
40typedef void (*FATALFUNC)();
41
42static datum
43get_current_key()
44{
45 datum key;
46 key.dptr = SvPVn( GDBM_File_desc->curkey, key.dsize);
47 return key;
48}
49
50static void
51set_current_key(sv)
52SV *sv;
53{
54 sv_free(GDBM_File_desc->curkey);
55 GDBM_File_desc->curkey = sv_ref(sv);
56}
57
58
59MODULE = GDBM_File PACKAGE = GDBM_File PREFIX = gdbm_
60
61GDBM_File
62gdbm_new(dbtype, filename, flags, mode)
63 char * dbtype
64 char * filename
65 int flags
66 int mode
67
68GDBM_File
69gdbm_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
76void
77gdbm_close(db)
78 GDBM_File db
79 CLEANUP:
80 deleteGDBM_FILE_DESC();
81
82void
83gdbm_DESTROY(db)
84 GDBM_File db
85 CODE:
86 gdbm_close(db);
87 deleteGDBM_FILE_DESC();
88
89gdatum
90gdbm_fetch(db, key)
91 GDBM_File db
92 datum key
93
94int
95gdbm_store(db, key, value, flags = GDBM_REPLACE)
96 GDBM_File db
97 datum key
98 datum value
99 int flags
100
101int
102gdbm_delete(db, key)
103 GDBM_File db
104 datum key
105
106gdatum
107gdbm_firstkey(db)
108 GDBM_File db
109 CLEANUP:
110 set_current_key(ST(0));
111
112gdatum
113gdbm_nextkey(db, key = get_current_key())
114 GDBM_File db
115 datum key
116 CLEANUP:
117 set_current_key(ST(0));
118
119int
120gdbm_reorganize(db)
121 GDBM_File db
122