1 #ifndef _STATEFS_PROVIDER_H_
2 #define _STATEFS_PROVIDER_H_
10 #include <sys/types.h>
16 #define EXTERN_C_BEGIN extern "C" {
17 #define EXTERN_C_END }
18 #define EXTERN_C extern "C"
20 #define EXTERN_C_BEGIN
35 typedef unsigned long statefs_size_t;
36 typedef long statefs_ssize_t;
37 typedef unsigned long statefs_off_t;
38 typedef intptr_t statefs_handle_t;
48 statefs_variant_tags_end
49 } statefs_variant_tag;
53 statefs_variant_tag tag;
64 #define STATEFS_INT(v) { .tag = statefs_variant_int, .i = (v) }
65 #define STATEFS_UINT(v) { .tag = statefs_variant_uint, .i = (v) }
66 #define STATEFS_REAL(v) { .tag = statefs_variant_real, .r = (v) }
67 #define STATEFS_BOOL(v) { .tag = statefs_variant_bool, .b = (v) }
68 #define STATEFS_CSTR(v) { .tag = statefs_variant_cstr, .s = (v) }
84 statefs_node_prop = 1,
86 statefs_node_root = statefs_node_ns | 4
156 #define STATEFS_ATTR_READ (1)
158 #define STATEFS_ATTR_WRITE (1 << 1)
160 #define STATEFS_ATTR_DISCRETE (1 << 2)
192 int (*
read)(statefs_handle_t h,
char *dst, statefs_size_t len, statefs_off_t off);
197 int (*
write)(statefs_handle_t,
char const*, statefs_size_t, statefs_off_t);
245 statefs_event_reload,
270 static inline char const *statefs_provider_accessor()
272 return "statefs_provider_get";
275 #define STATEFS_MK_VERSION(major, minor) \
276 (((unsigned)major << (sizeof(unsigned) * 4)) | ((unsigned)minor))
278 #define STATEFS_GET_VERSION(version, major, minor) \
280 major = (version) >> (sizeof(unsigned) * 4); \
281 minor = (version) & ((unsigned)-1 >> (sizeof(unsigned) * 4)); \
288 #define STATEFS_CURRENT_VERSION STATEFS_MK_VERSION(3, 0)
290 static inline bool statefs_is_version_compatible
291 (
unsigned own_version,
unsigned lib_ver)
293 unsigned short maj, min;
294 unsigned short prov_maj, prov_min;
295 STATEFS_GET_VERSION(lib_ver, prov_maj, prov_min);
296 STATEFS_GET_VERSION(own_version, maj, min);
297 return (prov_maj == maj) && (prov_min <= min);
306 return statefs_is_version_compatible(own_version, provider->
version);
315 #endif // _STATEFS_PROVIDER_H_