+value_init_pool (struct pool *pool, union value *value, int width)
+{
+ if (width > 0)
+ value->s = pool_alloc_unaligned (pool, width);
+}
+
+/* Same as value_clone(), except that memory for VALUE (if necessary) is
+ allocated from POOL and will be freed automatically when POOL is destroyed.
+
+ VALUE must not be freed manually by calling value_destroy(). If it needs to
+ be resized, it must be done using value_resize_pool() instead of
+ value_resize(). */
+void
+value_clone_pool (struct pool *pool,
+ union value *value, const union value *src, int width)
+{
+ if (width > 0)
+ value->s = pool_clone_unaligned (pool, src->s, width);
+ else
+ value->f = src->f;
+}
+
+/* Same as value_resize, except that VALUE must have been
+ allocated from POOL using value_init_pool.
+
+ This function causes some memory in POOL to be wasted in some
+ cases (until the pool is freed), so it should only be done if
+ this is acceptable. */
+void
+value_resize_pool (struct pool *pool, union value *value,
+ int old_width, int new_width)