1 #ifndef	SETTINGS_H
2 #define	SETTINGS_H
3 
4 /*
5  *  Copyright (C) 2006-2010  Anders Gavare.  All rights reserved.
6  *
7  *  Redistribution and use in source and binary forms, with or without
8  *  modification, are permitted provided that the following conditions are met:
9  *
10  *  1. Redistributions of source code must retain the above copyright
11  *     notice, this list of conditions and the following disclaimer.
12  *  2. Redistributions in binary form must reproduce the above copyright
13  *     notice, this list of conditions and the following disclaimer in the
14  *     documentation and/or other materials provided with the distribution.
15  *  3. The name of the author may not be used to endorse or promote products
16  *     derived from this software without specific prior written permission.
17  *
18  *  THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
19  *  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20  *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21  *  ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
22  *  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23  *  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24  *  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25  *  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26  *  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27  *  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28  *  SUCH DAMAGE.
29  */
30 
31 #include <inttypes.h>
32 
33 #define	GLOBAL_SETTINGS_NAME	"settings"
34 
35 struct settings;
36 
37 /*  Storage types:  */
38 #define	SETTINGS_TYPE_SUBSETTINGS	1
39 #define	SETTINGS_TYPE_STRING		2
40 #define	SETTINGS_TYPE_INT		3
41 #define	SETTINGS_TYPE_INT8		4
42 #define	SETTINGS_TYPE_INT16		5
43 #define	SETTINGS_TYPE_INT32		6
44 #define	SETTINGS_TYPE_INT64		7
45 #define	SETTINGS_TYPE_UINT		8
46 #define	SETTINGS_TYPE_UINT8		9
47 #define	SETTINGS_TYPE_UINT16		10
48 #define	SETTINGS_TYPE_UINT32		11
49 #define	SETTINGS_TYPE_UINT64		12
50 
51 /*  Presentation formats:  */
52 #define	SETTINGS_FORMAT_DECIMAL		1	/*  -123  */
53 #define	SETTINGS_FORMAT_HEX8		2	/*  0x12  */
54 #define	SETTINGS_FORMAT_HEX16		3	/*  0x1234  */
55 #define	SETTINGS_FORMAT_HEX32		4	/*  0x80000000  */
56 #define	SETTINGS_FORMAT_HEX64		5	/*  0xffffffff80000000  */
57 #define	SETTINGS_FORMAT_BOOL		6	/*  true, false  */
58 #define	SETTINGS_FORMAT_YESNO		7	/*  yes, no  */
59 #define	SETTINGS_FORMAT_STRING		8	/*  %s  */
60 
61 
62 /*
63  *  settings.c:
64  */
65 
66 struct settings *settings_new(void);
67 void settings_destroy(struct settings *settings);
68 
69 void settings_debugdump(struct settings *settings, const char *prefix,
70 	int recurse);
71 
72 void settings_add(struct settings *settings, const char *name, int writable,
73 	int type, int format, void *ptr);
74 void settings_remove(struct settings *settings, const char *name);
75 void settings_remove_all(struct settings *settings);
76 
77 int settings_access(struct settings *settings, const char *fullname,
78 	int writeflag, uint64_t *valuep);
79 
80 /*  Result codes from settings_access:  */
81 #define	SETTINGS_OK			1
82 #define	SETTINGS_NAME_NOT_FOUND		2
83 #define	SETTINGS_READONLY		3
84 
85 
86 #endif	/*  SETTINGS_H  */
87