c9e8a61a97c6ec6fc40689ca26cdf0c79d5b5204
[idzebra-moved-to-github.git] / rset / rsnull.c
1 /* This file is part of the Zebra server.
2    Copyright (C) 2004-2013 Index Data
3
4 Zebra is free software; you can redistribute it and/or modify it under
5 the terms of the GNU General Public License as published by the Free
6 Software Foundation; either version 2, or (at your option) any later
7 version.
8
9 Zebra is distributed in the hope that it will be useful, but WITHOUT ANY
10 WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12 for more details.
13
14 You should have received a copy of the GNU General Public License
15 along with this program; if not, write to the Free Software
16 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
17
18 */
19
20 #if HAVE_CONFIG_H
21 #include <config.h>
22 #endif
23 #include <stdio.h>
24 #include <assert.h>
25 #include <idzebra/util.h>
26 #include <rset.h>
27
28 static RSFD r_open(RSET ct, int flag);
29 static void r_close(RSFD rfd);
30 static void r_delete(RSET ct);
31 static void r_pos(RSFD rfd, double *current, double *total);
32 static int r_read(RSFD rfd, void *buf, TERMID *term);
33 static int r_write(RSFD rfd, const void *buf);
34
35 static const struct rset_control control =
36 {
37     "null",
38     r_delete,
39     rset_get_one_term,
40     r_open,
41     r_close,
42     0, /* no forward */
43     r_pos,
44     r_read,
45     r_write,
46 };
47
48 RSET rset_create_null(NMEM nmem, struct rset_key_control *kcontrol,
49                       TERMID term)
50 {
51     RSET rnew = rset_create_base(&control, nmem, kcontrol, 0, term, 0, 0);
52     rnew->priv = 0;
53     return rnew;
54 }
55
56 static RSFD r_open(RSET ct, int flag)
57 {
58     RSFD rfd;
59     if (flag & RSETF_WRITE)
60     {
61         yaz_log (YLOG_FATAL, "NULL set type is read-only");
62         return NULL;
63     }
64     rfd = rfd_create_base(ct);
65     rfd->priv = 0;
66     return rfd;
67 }
68
69 static void r_close(RSFD rfd)
70 {
71 }
72
73 static void r_delete(RSET ct)
74 {
75 }
76
77 static void r_pos(RSFD rfd, double *current, double *total)
78 {
79     assert(rfd);
80     assert(current);
81     assert(total);
82     *total = 0;
83     *current = 0;
84 }
85
86 static int r_read(RSFD rfd, void *buf, TERMID *term)
87 {
88     if (term)
89         *term = 0;
90     return 0;
91 }
92
93 static int r_write(RSFD rfd, const void *buf)
94 {
95     yaz_log(YLOG_FATAL, "NULL set type is read-only");
96     return -1;
97 }
98 /*
99  * Local variables:
100  * c-basic-offset: 4
101  * c-file-style: "Stroustrup"
102  * indent-tabs-mode: nil
103  * End:
104  * vim: shiftwidth=4 tabstop=8 expandtab
105  */
106