- From: Wayne Davison <wayned@users.sourceforge.net>
- Date: Wed, 23 Aug 2000 17:06:06 -0700 (PDT)
- To: www-lib <www-lib@w3.org>
I to be able to transfer some allocated memory to a chunk (to be able to hand off an ImageMagick blob) without having to allocate more memory, copy it into the blob, and then delete the original. To handle this, I wrote HTChunk_fromBuffer(). Here's a patch. I hope you like it. Also, I improved a comment in HTChunk.html so that it is clearer what gets destroyed when HTChunk_toCString() is called. ..wayne.. ---8<------8<------8<------8<---cut here--->8------>8------>8------>8--- Index: Library/src/HTChunk.c @@ -117,6 +117,22 @@ return ch; } +/* Create a chunk from an allocated buffer +** --------------------------------------- +*/ +PUBLIC HTChunk * HTChunk_fromBuffer (char * buf, int buflen, int size, int grow) +{ + HTChunk * ch; + ch = HTChunk_new(grow); + if (buf) { + ch->data = buf; + ch->size = ch->allocated = buflen; + if (size < buflen) + HTChunk_setSize(ch, size); /* This ensures the end is 0-filled */ + } + return ch; +} + /* Free a chunk but keep the data ** ------------------------------ */ Index: Library/src/HTChunk.html @@ -155,10 +155,23 @@ A Chunk may be built from an allocated string. The chunk assumes control of the passed string, eliminating the need for additional allocations and string copies.<BR> -When you take control of the CString from a chunk, it is destroyed. +When you take control of the CString from a chunk, the chunk is destroyed. <PRE> extern HTChunk * HTChunk_fromCString (char * str, int grow); extern char * HTChunk_toCString (HTChunk * ch); +</PRE> +<H2> + Creating a Chunk from an allocated buffer +</H2> +<P> +A Chunk may be built from an allocted buffer. You must specify how much +memory is allocated in the buffer (buflen) and what the size the new +Chunk should be (size). All memory between size and buflen is zeroed. +Note that is is legal to specify a size equal to the buflen if you don't +expect the Chunk to be null terminated. The chunk takes control of the +memory, and will free it when the Chunk is destroyed. +<PRE> +extern HTChunk * HTChunk_fromBuffer (char * buf, int buflen, int size, int grow); </PRE> <H2> Old Interface Names ---8<------8<------8<------8<---cut here--->8------>8------>8------>8---
Received on Wednesday, 23 August 2000 20:06:38 UTC