json-c: printbuf.h File Reference

json-c 0.18

Data Structures | Macros | Typedefs | Functions
printbuf.h File Reference

Internal string buffer handling. Unless you're writing a json_object_to_json_string_fn implementation for use with json_object_set_serializer() direct use of this is not recommended. More...

## Data Structures
struct | printbuf

## Macros
#define | JSON_EXPORT extern
#define | printbuf_memappend_fast(p, bufptr, bufsize)
#define | printbuf_length(p) ((p)->bpos)
#define | printbuf_strappend(pb, str) printbuf_memappend((pb), _printbuf_check_literal(str), sizeof(str) - 1)

## Typedefs
typedef struct printbuf | printbuf

## Functions
JSON_EXPORT struct printbuf * | printbuf_new (void)
JSON_EXPORT int | printbuf_memappend (struct printbuf *p, const char *buf, int size)
JSON_EXPORT int | printbuf_memset (struct printbuf *pb, int offset, int charvalue, int len)
JSON_EXPORT int | sprintbuf (struct printbuf *p, const char *msg,...)
JSON_EXPORT void | printbuf_reset (struct printbuf *p)
JSON_EXPORT void | printbuf_free (struct printbuf *p)

## Detailed Description

Internal string buffer handling. Unless you're writing a json_object_to_json_string_fn implementation for use with json_object_set_serializer() direct use of this is not recommended.

## Macro Definition Documentation

## ◆ JSON_EXPORT

#define JSON_EXPORT extern

## ◆ printbuf_length

#define printbuf_length | ( |  | p | ) | ((p)->bpos)

## ◆ printbuf_memappend_fast

#define printbuf_memappend_fast | ( |  | p,
|  |  | bufptr,
|  |  | bufsize
| ) |  |

Value:
do \
{ \
if ((p->size - p->bpos) > bufsize) \
{ \
memcpy(p->buf + p->bpos, (bufptr), bufsize); \
p->bpos += bufsize; \
p->buf[p->bpos] = '\0'; \
} \
else \
{ \
printbuf_memappend(p, (bufptr), bufsize); \
} \
} while (0)

## ◆ printbuf_strappend

#define printbuf_strappend | ( |  | pb,
|  |  | str
| ) |  | printbuf_memappend((pb), _printbuf_check_literal(str), sizeof(str) - 1)

This is an optimization wrapper around printbuf_memappend() that is useful for appending string literals. Since the size of string constants is known at compile time, using this macro can avoid a costly strlen() call. This is especially helpful when a constant string must be appended many times. If you got here because of a compilation error caused by passing something other than a string literal, use printbuf_memappend_fast() in conjunction with strlen().

See also: printbuf_memappend_fast() printbuf_memappend() sprintbuf()

## Typedef Documentation

## ◆ printbuf

typedef struct printbuf printbuf

## Function Documentation

## ◆ printbuf_free()

JSON_EXPORT void printbuf_free | ( | struct printbuf * | p | ) |

## ◆ printbuf_memappend()

JSON_EXPORT int printbuf_memappend | ( | struct printbuf * | p,
|  | const char * | buf,
|  | int | size
| ) |  |

## ◆ printbuf_memset()

JSON_EXPORT int printbuf_memset | ( | struct printbuf * | pb,
|  | int | offset,
|  | int | charvalue,
|  | int | len
| ) |  |

Set len bytes of the buffer to charvalue, starting at offset offset. Similar to calling memset(x, charvalue, len);

The memory allocated for the buffer is extended as necessary.

If offset is -1, this starts at the end of the current data in the buffer.

## ◆ printbuf_new()

JSON_EXPORT struct printbuf * printbuf_new | ( | void |  | ) |

## ◆ printbuf_reset()

JSON_EXPORT void printbuf_reset | ( | struct printbuf * | p | ) |

## ◆ sprintbuf()

JSON_EXPORT int sprintbuf | ( | struct printbuf * | p,
|  | const char * | msg,
|  |  | ...
| ) |  |

Formatted print to printbuf.

This function is the most expensive of the available functions for appending string data to a printbuf and should be used only where convenience is more important than speed. Avoid using this function in high performance code or tight loops; in these scenarios, consider using snprintf() with a static buffer in conjunction with one of the printbuf_*append() functions.

See also: printbuf_memappend_fast() printbuf_memappend() printbuf_strappend()