This is a set of functions used in the postfix MTA daemon but obviously well abstracted so that they can be easily used in other applications. It works on a pointer and length model, although it also has "end pointer" and "amount left" variables. The abstraction seems somewhat weird to me, as the underlying objects want to look and act like (FILE *) and so have IO error flags ... and then on top of this are built Objects that are variable length strings and they'll never do any IO. It is upto the user of the library whether you have a fixed or dynamically sized buffer, and I think you can return failure if memory isn't available but the vstream.c and vstring.c implementations just assumes this can't happen. The functions to act on the buffer are just copied APIs of ISO C (FILE *) manipulators, str* and mem* (with the addition of memcat()). Importantly there are no interfaces for removing data or substituting data in the string (you could probably do remove from the end of the string easily by playing with the pointers and counters, but you'd have to write your own function for it). There is no way to access anything but the entire string, using the API, or add data anywhere but the end of the string. There is an interface for using netstrings, but instead of the simple begin and end semantics in Vstr the interface overloads the string interface ... so you have to say netstring_memcpy( ... ) which will copy data and encapsulate it as a netstring. It's also worth noting that the counters are of type "int", and the negative bit is used in the code ... so it's not possible to have a string bigger than INT_MAX. The printf like functions are implemented by parsing the format string and then passing known good formats through to the host implementation sprintf() (after requesting enough space to hold them). It doesn't accept long long or long doulbe types, i18n argument number specifiers or thousand seperator modifiers.