@@ -133,6 +133,20 @@ static inline void *membuf_space_(struct membuf *mb, size_t elemsize)
133
133
return mb -> elems + mb -> end * elemsize ;
134
134
}
135
135
136
+ /**
137
+ * membuf_added - declare that we've added this many elements.
138
+ * @mb: the MEMBUF() declared membuf.
139
+ * @n: the number of elements we added (must be < membuf_num_space()).
140
+ */
141
+ #define membuf_added (mb , num ) \
142
+ membuf_added_(tcon_unwrap(mb), (num))
143
+
144
+ static inline void membuf_added_ (struct membuf * mb , size_t num )
145
+ {
146
+ assert (num <= membuf_num_space_ (mb ));
147
+ mb -> end += num ;
148
+ }
149
+
136
150
/**
137
151
* membuf_prepare_space - internal routine to make sure we've got space.
138
152
* @mb: the MEMBUF() declared membuf.
@@ -181,12 +195,25 @@ static inline void *membuf_add_(struct membuf *mb, size_t num, size_t elemsize)
181
195
182
196
oldend = membuf_space_ (mb , elemsize );
183
197
/* We assume expandfn succeeded. */
184
- assert (num <= membuf_num_space_ (mb ));
185
- mb -> end += num ;
198
+ membuf_added_ (mb , num );
186
199
187
200
return oldend ;
188
201
}
189
202
203
+ /**
204
+ * membuf_unadd - remove this many added elements.
205
+ * @mb: the MEMBUF() declared membuf.
206
+ * @n: the number of elements we want to "unadd" (must be < membuf_num_elems()).
207
+ */
208
+ #define membuf_unadd (mb , num ) \
209
+ membuf_unadd_(tcon_unwrap(mb), (num))
210
+
211
+ static inline void membuf_unadd_ (struct membuf * mb , size_t num )
212
+ {
213
+ assert (num <= membuf_num_elems_ (mb ));
214
+ mb -> end -= num ;
215
+ }
216
+
190
217
/**
191
218
* membuf_cleanup - reset membuf, return elems array for freeing.
192
219
* @mb: the MEMBUF() declared membuf.
0 commit comments