18 #ifndef _COPPERPLATE_REGISTRY_OBSTACK_H 19 #define _COPPERPLATE_REGISTRY_OBSTACK_H 21 #include <copperplate/registry.h> 23 #ifdef CONFIG_XENO_REGISTRY 26 #include <boilerplate/obstack.h> 27 #include <copperplate/heapobj.h> 37 #define obstack_chunk_alloc malloc 38 #define obstack_chunk_free free 43 struct obstack obstack;
48 struct fsobstack_syncops {
49 int (*prepare_cache)(
struct fsobstack *o,
50 struct obstack *cache,
int item_count);
51 size_t (*collect_data)(
void *p,
struct threadobj *thobj);
52 size_t (*format_data)(
struct fsobstack *o,
void *p);
61 void fsobstack_grow_string(
struct fsobstack *o,
64 void fsobstack_grow_char(
struct fsobstack *o,
67 int fsobstack_grow_format(
struct fsobstack *o,
68 const char *fmt, ...);
70 int fsobstack_grow_file(
struct fsobstack *o,
73 int fsobstack_grow_syncobj_grant(
struct fsobstack *o,
75 struct fsobstack_syncops *ops);
77 int fsobstack_grow_syncobj_drain(
struct fsobstack *o,
79 struct fsobstack_syncops *ops);
81 ssize_t fsobstack_pull(
struct fsobstack *o,
82 char *buf,
size_t size);
84 ssize_t fsobj_obstack_read(
struct fsobj *fsobj,
85 char *buf,
size_t size, off_t offset,
88 int fsobj_obstack_release(
struct fsobj *fsobj,
void *priv);
94 static inline void fsobstack_init(
struct fsobstack *o)
96 obstack_init(&o->obstack);
101 static inline void fsobstack_destroy(
struct fsobstack *o)
103 obstack_free(&o->obstack, NULL);
106 static inline void fsobstack_finish(
struct fsobstack *o)
108 o->len = obstack_object_size(&o->obstack);
109 o->data = obstack_finish(&o->obstack);
113 void registry_init_file_obstack(
struct fsobj *fsobj,
114 const struct registry_operations *ops)
116 registry_init_file(fsobj, ops,
sizeof(
struct fsobstack));
122 void registry_init_file_obstack(
struct fsobj *fsobj,
123 const struct registry_operations *ops)