18 #ifndef _COPPERPLATE_REGISTRY_OBSTACK_H 19 #define _COPPERPLATE_REGISTRY_OBSTACK_H 21 #include <copperplate/registry.h> 23 #ifdef CONFIG_XENO_REGISTRY 25 #include <boilerplate/obstack.h> 26 #include <copperplate/heapobj.h> 35 #define obstack_chunk_alloc pvmalloc 36 #define obstack_chunk_free pvfree 41 struct obstack obstack;
46 struct fsobstack_syncops {
47 int (*prepare_cache)(
struct fsobstack *o,
48 struct obstack *cache,
int item_count);
49 size_t (*collect_data)(
void *p,
struct threadobj *thobj);
50 size_t (*format_data)(
struct fsobstack *o,
void *p);
59 void fsobstack_grow_string(
struct fsobstack *o,
62 void fsobstack_grow_char(
struct fsobstack *o,
65 int fsobstack_grow_format(
struct fsobstack *o,
66 const char *fmt, ...);
68 int fsobstack_grow_file(
struct fsobstack *o,
71 int fsobstack_grow_syncobj_grant(
struct fsobstack *o,
73 struct fsobstack_syncops *ops);
75 int fsobstack_grow_syncobj_drain(
struct fsobstack *o,
77 struct fsobstack_syncops *ops);
79 ssize_t fsobstack_pull(
struct fsobstack *o,
80 char *buf,
size_t size);
82 ssize_t fsobj_obstack_read(
struct fsobj *fsobj,
83 char *buf,
size_t size, off_t offset,
86 int fsobj_obstack_release(
struct fsobj *fsobj,
void *priv);
92 static inline void fsobstack_init(
struct fsobstack *o)
94 obstack_init(&o->obstack);
99 static inline void fsobstack_destroy(
struct fsobstack *o)
101 obstack_free(&o->obstack, NULL);
104 static inline void fsobstack_finish(
struct fsobstack *o)
106 o->len = obstack_object_size(&o->obstack);
107 o->data = obstack_finish(&o->obstack);
111 void registry_init_file_obstack(
struct fsobj *fsobj,
112 const struct registry_operations *ops)
114 registry_init_file(fsobj, ops,
sizeof(
struct fsobstack));
120 void registry_init_file_obstack(
struct fsobj *fsobj,
121 const struct registry_operations *ops)