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;
48struct 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);
61void fsobstack_grow_string(
struct fsobstack *o,
64void fsobstack_grow_char(
struct fsobstack *o,
67int fsobstack_grow_format(
struct fsobstack *o,
68 const char *fmt, ...);
70int fsobstack_grow_file(
struct fsobstack *o,
73int fsobstack_grow_syncobj_grant(
struct fsobstack *o,
75 struct fsobstack_syncops *ops);
77int fsobstack_grow_syncobj_drain(
struct fsobstack *o,
79 struct fsobstack_syncops *ops);
81ssize_t fsobstack_pull(
struct fsobstack *o,
82 char *buf,
size_t size);
84ssize_t fsobj_obstack_read(
struct fsobj *fsobj,
85 char *buf,
size_t size, off_t offset,
88int fsobj_obstack_release(
struct fsobj *fsobj,
void *priv);
94static inline void fsobstack_init(
struct fsobstack *o)
96 obstack_init(&o->obstack);
101static inline void fsobstack_destroy(
struct fsobstack *o)
103 obstack_free(&o->obstack, NULL);
106static inline void fsobstack_finish(
struct fsobstack *o)
108 o->len = obstack_object_size(&o->obstack);
109 o->data = obstack_finish(&o->obstack);
113void registry_init_file_obstack(
struct fsobj *fsobj,
114 const struct registry_operations *ops)
116 registry_init_file(fsobj, ops,
sizeof(
struct fsobstack));
122void registry_init_file_obstack(
struct fsobj *fsobj,
123 const struct registry_operations *ops)