]> mj.ucw.cz Git - libucw.git/blob - lib/fb-param.c
first experiments with parametrized fastbufs
[libucw.git] / lib / fb-param.c
1 /*
2  *      UCW Library -- FastIO on files with run-time parametrization
3  *
4  *      (c) 2007 Pavel Charvat <pchar@ucw.cz>
5  *
6  *      This software may be freely distributed and used according to the terms
7  *      of the GNU Lesser General Public License.
8  */
9
10 #include "lib/lib.h"
11 #include "lib/conf.h"
12 #include "lib/fastbuf.h"
13
14 static struct fb_params fbpar_defaults = {
15   .buffer_size = 65536,
16 }; 
17
18 struct cf_section fbpar_cf = {
19 # define F(x) PTR_TO(struct fb_params, x)
20   CF_TYPE(struct fb_params),
21   CF_ITEMS {
22     // FIXME
23     CF_UNS("DirectIO", F(odirect)),
24     CF_UNS("BufSize", F(buffer_size)),
25     CF_END
26   }
27 # undef F
28 };
29
30 static struct cf_section fbpar_global_cf = {
31   CF_ITEMS {
32     CF_SECTION("Defaults", &fbpar_defaults, &fbpar_cf),
33     CF_END
34   }
35 };
36
37 static void CONSTRUCTOR
38 fbpar_global_init(void)
39 {
40   cf_declare_section("FBParam", &fbpar_global_cf, 0);
41 }
42
43 struct fastbuf *
44 fbpar_open(byte *name, int mode, struct fb_params *params)
45 {
46   params = params ? : &fbpar_defaults;
47   if (!params->odirect)
48     return bopen(name, mode, params->buffer_size);
49   else
50     return fbdir_open(name, mode, NULL);
51 }
52
53 struct fastbuf *
54 fbpar_open_try(byte *name, int mode, struct fb_params *params)
55 {
56   params = params ? : &fbpar_defaults;
57   if (!params->odirect)
58     return bopen_try(name, mode, params->buffer_size);
59   else
60     return fbdir_open_try(name, mode, NULL);
61 }
62
63 struct fastbuf *
64 fbpar_open_fd(int fd, struct fb_params *params)
65 {
66   params = params ? : &fbpar_defaults;
67   if (!params->odirect)
68     return bfdopen(fd, params->buffer_size);
69   else
70     return fbdir_open_fd(fd, NULL);
71 }
72
73 struct fastbuf *
74 fbpar_open_tmp(struct fb_params *params)
75 {
76   params = params ? : &fbpar_defaults;
77   if (!params->odirect)
78     return bopen_tmp(params->buffer_size);
79   else
80     return fbdir_open_tmp(NULL);
81 }