json-c  0.13
Data Structures | Macros | Typedefs | Functions
printbuf.h File Reference

Internal string buffer handing. 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 printbuf_memappend_fast(p, bufptr, bufsize)
 
#define printbuf_length(p)   ((p)->bpos)
 
#define _printbuf_check_literal(mystr)   ("" mystr)
 
#define printbuf_strappend(pb, str)   printbuf_memappend ((pb), _printbuf_check_literal(str), sizeof(str) - 1)
 

Typedefs

typedef struct printbuf printbuf
 

Functions

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

Detailed Description

Internal string buffer handing. 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

◆ _printbuf_check_literal

#define _printbuf_check_literal (   mystr)    ("" mystr)

Results in a compile error if the argument is not a string literal.

◆ 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)
int printbuf_memappend(struct printbuf *p, const char *buf, int size)

◆ 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()

void printbuf_free ( struct printbuf p)

◆ printbuf_memappend()

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

◆ printbuf_memset()

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()

struct printbuf* printbuf_new ( void  )

◆ printbuf_reset()

void printbuf_reset ( struct printbuf p)

◆ sprintbuf()

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()