## buf buf — a string you can append to |

## Stability Level

Stable, unless otherwise indicated

## Functions

#define | VIPS_BUF_STATIC()
void | vips_buf_rewind ()
void | vips_buf_destroy ()
void | vips_buf_init ()
void | vips_buf_set_static ()
void | vips_buf_set_dynamic ()
void | vips_buf_init_static ()
void | vips_buf_init_dynamic ()
gboolean | vips_buf_appendns ()
gboolean | vips_buf_appends ()
gboolean | vips_buf_appendf ()
gboolean | vips_buf_vappendf ()
gboolean | vips_buf_appendc ()
gboolean | vips_buf_appendgv ()
gboolean | vips_buf_append_size ()
gboolean | vips_buf_removec ()
gboolean | vips_buf_change ()
gboolean | vips_buf_is_empty ()
gboolean | vips_buf_is_full ()
const char * | vips_buf_all ()
const char * | vips_buf_firstline ()
gboolean | vips_buf_appendg ()
gboolean | vips_buf_appendd ()
int | vips_buf_len ()

## Types and Values

| VipsBuf

## Includes

    #include <vips/vips.h>

## Description

A message buffer you can append stuff to safely and quickly. If the message gets too long, you get "..." and truncation. Message buffers can be on the stack or heap.

For example:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    char txt[256];
    VipsBuf buf = VIPS_BUF_STATIC(txt);
    int i;

    vips_buf_appends(&buf, "Numbers are: ");
    for (i = 0; i < array_length; i++) {
      if (i > 0)
        vips_buf_appends(&buf, ", ");
      vips_buf_appendg(&buf, array[i]);
    }
    printf("%s", vips_buf_all(&buf));

## Functions

### VIPS_BUF_STATIC()

    #define             VIPS_BUF_STATIC(TEXT)

Initialize a heap buffer. For example:

    1
    2
    char txt[256];
    VipsBuf buf = VIPS_BUF_STATIC(txt);

#### Parameters

TEXT | the storage area to use |

### vips_buf_rewind ()

    void
    vips_buf_rewind (VipsBuf *buf);

Reset the buffer to the empty string.

#### Parameters

buf | the buffer |

### vips_buf_destroy ()

    void
    vips_buf_destroy (VipsBuf *buf);

Destroy a buffer. Only needed for heap buffers. Leaves the buffer in the _init state.

#### Parameters

buf | the buffer |

### vips_buf_init ()

    void
    vips_buf_init (VipsBuf *buf);

Initialize a buffer.

#### Parameters

buf | the buffer |

### vips_buf_set_static ()

    void
    vips_buf_set_static (VipsBuf *buf,
                         char *base,
                         int mx);

Attach the buffer to a static memory area. The buffer needs to have been initialised. The memory area needs to be at least 4 bytes long.

#### Parameters

buf | the buffer |
base | the start of the memory area to use for storage |
mx | the size of the storage area |

### vips_buf_set_dynamic ()

    void
    vips_buf_set_dynamic (VipsBuf *buf,
                          int mx);

Attach the buffer to a heap memory area. The buffer needs to have been initialised. The memory area needs to be at least 4 bytes long.

#### Parameters

buf | the buffer |
mx | the size of the storage area |

### vips_buf_init_static ()

    void
    vips_buf_init_static (VipsBuf *buf,
                          char *base,
                          int mx);

Initialise and attach to a static memory area. `VIPS_BUF_STATIC()` is usually more convenient.

For example:

    1
    2
    3
    4
    char txt[256];
    VipsBuf buf;

    vips_buf_init_static(&buf, txt, 256);

Static buffers don't need to be freed when they go out of scope, but their size must be set at compile-time.

#### Parameters

buf | the buffer |
base | the start of the memory area to use for storage |
mx | the size of the storage area |

### vips_buf_init_dynamic ()

    void
    vips_buf_init_dynamic (VipsBuf *buf,
                           int mx);

Initialise and attach to a heap memory area. The memory area needs to be at least 4 bytes long.

    1
    2
    3
    VipsBuf buf;

    vips_buf_init_synamic(&buf, 256);

Dynamic buffers must be freed with `vips_buf_destroy()`, but their size can be set at runtime.

#### Parameters

buf | the buffer |
mx | the size of the storage area |

### vips_buf_appendns ()

    gboolean
    vips_buf_appendns (VipsBuf *buf,
                       const char *str,
                       int sz);

Append at most `sz` chars from `str` to `buf` . `sz` < 0 means unlimited. This is the low-level append operation: functions like `vips_buf_appendf()` build on top of this.

#### Parameters

buf | the buffer |
str | the string to append to the buffer |
sz | the size of the string to append |

#### Returns

`FALSE` on overflow, `TRUE` otherwise.

### vips_buf_appends ()

    gboolean
    vips_buf_appends (VipsBuf *buf,
                      const char *str);

Append the whole of `str` to `buf` .

#### Parameters

buf | the buffer |
str | the string to append to the buffer |

#### Returns

`FALSE` on overflow, `TRUE` otherwise.

### vips_buf_appendf ()

    gboolean
    vips_buf_appendf (VipsBuf *buf,
                      const char *fmt,
                      ...);

Format the string and append to `buf` .

#### Parameters

buf | the buffer |
fmt | ``printf()``-style format string |
... | arguments to format string |

#### Returns

`FALSE` on overflow, `TRUE` otherwise.

### vips_buf_vappendf ()

    gboolean
    vips_buf_vappendf (VipsBuf *buf,
                       const char *fmt,
                       va_list ap);

Append to `buf` , args as ``vprintf()``.

#### Parameters

buf | the buffer |
fmt | ``printf()``-style format string |
ap | arguments to format string |

#### Returns

`FALSE` on overflow, `TRUE` otherwise.

### vips_buf_appendc ()

    gboolean
    vips_buf_appendc (VipsBuf *buf,
                      char ch);

Append a single character `ch` to `buf` .

#### Parameters

buf | the buffer |
ch | the character to append to the buffer |

#### Returns

`FALSE` on overflow, `TRUE` otherwise.

### vips_buf_appendgv ()

    gboolean
    vips_buf_appendgv (VipsBuf *buf,
                       GValue *value);

Format and append a GValue as a printable thing. We display text line "3144 bytes of binary data" for BLOBs like icc-profile-data.

Use `vips_image_get_as_string()` to make a text representation of a field. That will base64-encode blobs, for example.

#### Parameters

buf | the buffer |
value | GValue to format and append |

#### Returns

`FALSE` on overflow, `TRUE` otherwise.

### vips_buf_append_size ()

    gboolean
    vips_buf_append_size (VipsBuf *buf,
                          size_t n);

Turn a number of bytes into a sensible string ... eg "12", "12KB", "12MB", "12GB" etc.

#### Parameters

buf | the buffer |
n | the number of bytes |

#### Returns

`FALSE` on overflow, `TRUE` otherwise.

### vips_buf_removec ()

    gboolean
    vips_buf_removec (VipsBuf *buf,
                      char ch);

Remove the last character, if it's `ch` .

#### Parameters

buf | the buffer |
ch | the character to remove |

#### Returns

`FALSE` on failure, `TRUE` otherwise.

### vips_buf_change ()

    gboolean
    vips_buf_change (VipsBuf *buf,
                     const char *o,
                     const char *n);

Swap the rightmost occurrence of `o` for `n` .

#### Parameters

buf | the buffer |
o | the string to search for |
n | the string to substitute |

#### Returns

`FALSE` on overflow, `TRUE` otherwise.

### vips_buf_is_empty ()

    gboolean
    vips_buf_is_empty (VipsBuf *buf);

#### Parameters

buf | the buffer |

#### Returns

`TRUE` if the buffer is empty.

### vips_buf_is_full ()

    gboolean
    vips_buf_is_full (VipsBuf *buf);

#### Parameters

buf | the buffer |

#### Returns

`TRUE` if the buffer is full.

### vips_buf_all ()

    const char *
    vips_buf_all (VipsBuf *buf);

Return the contents of the buffer as a C string.

#### Parameters

buf | the buffer |

#### Returns

the `NULL`-terminated contents of the buffer. This is a pointer to the memory managed by the buffer and must not be freed.

### vips_buf_firstline ()

    const char *
    vips_buf_firstline (VipsBuf *buf);

Trim to just the first line (excluding "\n").

#### Parameters

buf | the buffer |

#### Returns

the `NULL`-terminated contents of the buffer. This is a pointer to the memory managed by the buffer and must not be freed.

### vips_buf_appendg ()

    gboolean
    vips_buf_appendg (VipsBuf *buf,
                      double g);

Append a double, non-localised. Useful for config files etc.

#### Parameters

buf | the buffer |
g | value to format and append |

#### Returns

`FALSE` on overflow, `TRUE` otherwise.

### vips_buf_appendd ()

    gboolean
    vips_buf_appendd (VipsBuf *buf,
                      int d);

Append a number. If the number is -ve, add brackets. Needed for building function arguments.

#### Parameters

buf | the buffer |
d | value to format and append |

#### Returns

`FALSE` on overflow, `TRUE` otherwise.

### vips_buf_len ()

    int
    vips_buf_len (VipsBuf *buf);

#### Parameters

buf | the buffer |

#### Returns

the number of characters currently in the buffer.

## Types and Values

### VipsBuf

    typedef struct {
    	/* All fields are private.
    	 */
    } VipsBuf;

## See Also

vips