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)