|
|
|
@ -1,42 +1,7 @@
@@ -1,42 +1,7 @@
|
|
|
|
|
#ifndef STRBUF_H |
|
|
|
|
#define STRBUF_H |
|
|
|
|
|
|
|
|
|
/* |
|
|
|
|
* Strbuf's can be use in many ways: as a byte array, or to store arbitrary |
|
|
|
|
* long, overflow safe strings. |
|
|
|
|
* |
|
|
|
|
* Strbufs has some invariants that are very important to keep in mind: |
|
|
|
|
* |
|
|
|
|
* 1. the ->buf member is always malloc-ed, hence strbuf's can be used to |
|
|
|
|
* build complex strings/buffers whose final size isn't easily known. |
|
|
|
|
* |
|
|
|
|
* It is NOT legal to copy the ->buf pointer away. |
|
|
|
|
* `strbuf_detach' is the operation that detaches a buffer from its shell |
|
|
|
|
* while keeping the shell valid wrt its invariants. |
|
|
|
|
* |
|
|
|
|
* 2. the ->buf member is a byte array that has at least ->len + 1 bytes |
|
|
|
|
* allocated. The extra byte is used to store a '\0', allowing the ->buf |
|
|
|
|
* member to be a valid C-string. Every strbuf function ensures this |
|
|
|
|
* invariant is preserved. |
|
|
|
|
* |
|
|
|
|
* Note that it is OK to "play" with the buffer directly if you work it |
|
|
|
|
* that way: |
|
|
|
|
* |
|
|
|
|
* strbuf_grow(sb, SOME_SIZE); |
|
|
|
|
* ... Here, the memory array starting at sb->buf, and of length |
|
|
|
|
* ... strbuf_avail(sb) is all yours, and you are sure that |
|
|
|
|
* ... strbuf_avail(sb) is at least SOME_SIZE. |
|
|
|
|
* strbuf_setlen(sb, sb->len + SOME_OTHER_SIZE); |
|
|
|
|
* |
|
|
|
|
* Of course, SOME_OTHER_SIZE must be smaller or equal to strbuf_avail(sb). |
|
|
|
|
* |
|
|
|
|
* Doing so is safe, though if it has to be done in many places, adding the |
|
|
|
|
* missing API to the strbuf module is the way to go. |
|
|
|
|
* |
|
|
|
|
* XXX: do _not_ assume that the area that is yours is of size ->alloc - 1 |
|
|
|
|
* even if it's true in the current implementation. Alloc is somehow a |
|
|
|
|
* "private" member that should not be messed with. |
|
|
|
|
*/ |
|
|
|
|
/* See Documentation/technical/api-strbuf.txt */ |
|
|
|
|
|
|
|
|
|
#include <assert.h> |
|
|
|
|
|
|
|
|
|