From: Wilfried Goesgens Date: Sun, 3 Jul 2011 13:47:55 +0000 (+0000) Subject: Add ability to hex encode binary strings X-Git-Tag: v8.01~73 X-Git-Url: https://code.citadel.org/?p=citadel.git;a=commitdiff_plain;h=53d9b46861650835b0994566a728c4ba3da8413a Add ability to hex encode binary strings - when encoding plain md5 binary buffers we have to pass the length into the hex encoder, add parameter - add wrapper providing old schematic - fix documentation of StrBufSipLine() --- diff --git a/libcitadel/lib/libcitadel.h b/libcitadel/lib/libcitadel.h index 802d35257..2ca28bb76 100644 --- a/libcitadel/lib/libcitadel.h +++ b/libcitadel/lib/libcitadel.h @@ -287,6 +287,7 @@ int StrBufSanitizeAscii(StrBuf *Buf, const char Mute); #define QU (3) void StrBufUrlescAppend(StrBuf *OutBuf, const StrBuf *In, const char *PlainIn); void StrBufHexescAppend(StrBuf *OutBuf, const StrBuf *In, const char *PlainIn); +void StrBufHexEscAppend(StrBuf *OutBuf, const StrBuf *In, const unsigned char *PlainIn, long PlainInLen); long StrEscAppend(StrBuf *Target, const StrBuf *Source, const char *PlainIn, int nbsp, int nolinebreaks); long StrECMAEscAppend(StrBuf *Target, const StrBuf *Source, const char *PlainIn); long StrHtmlEcmaEscAppend(StrBuf *Target, const StrBuf *Source, const char *PlainIn, int nbsp, int nolinebreaks); diff --git a/libcitadel/lib/stringbuf.c b/libcitadel/lib/stringbuf.c index 257a0bebb..f3cd8c543 100644 --- a/libcitadel/lib/stringbuf.c +++ b/libcitadel/lib/stringbuf.c @@ -1819,22 +1819,26 @@ void StrBufUrlescAppend(StrBuf *OutBuf, const StrBuf *In, const char *PlainIn) * @param OutBuf the output buffer * @param In Buffer to encode * @param PlainIn way in from plain old c strings + * @param PlainInLen way in from plain old c strings; maybe you've got binary data or know the length? */ -void StrBufHexescAppend(StrBuf *OutBuf, const StrBuf *In, const char *PlainIn) +void StrBufHexEscAppend(StrBuf *OutBuf, const StrBuf *In, const unsigned char *PlainIn, long PlainInLen) { - const char *pch, *pche; + const unsigned char *pch, *pche; char *pt, *pte; int len; if (((In == NULL) && (PlainIn == NULL)) || (OutBuf == NULL) ) return; if (PlainIn != NULL) { - len = strlen(PlainIn); + if (PlainInLen < 0) + len = strlen((const char*)PlainIn); + else + len = PlainInLen; pch = PlainIn; pche = pch + len; } else { - pch = In->buf; + pch = (const unsigned char*)In->buf; pche = pch + In->BufUsed; len = In->BufUsed; } @@ -1852,14 +1856,26 @@ void StrBufHexescAppend(StrBuf *OutBuf, const StrBuf *In, const char *PlainIn) pt = OutBuf->buf + OutBuf->BufUsed; } - *pt = HexList[(unsigned char)*pch][0]; + *pt = HexList[*pch][0]; pt ++; - *pt = HexList[(unsigned char)*pch][1]; + *pt = HexList[*pch][1]; pt ++; pch ++; OutBuf->BufUsed += 2; } *pt = '\0'; } +/** + * @ingroup StrBuf_DeEnCoder + * @brief append a string in hex encoding to the buffer + * @param OutBuf the output buffer + * @param In Buffer to encode + * @param PlainIn way in from plain old c strings + */ +void StrBufHexescAppend(StrBuf *OutBuf, const StrBuf *In, const char *PlainIn) +{ + StrBufHexEscAppend(OutBuf, In, (const unsigned char*) PlainIn, -1); +} + /** * @ingroup StrBuf_DeEnCoder * @brief Append a string, escaping characters which have meaning in HTML. @@ -4124,7 +4140,7 @@ int StrBufReadBLOBBuffered(StrBuf *Blob, * @param Buf BLOB with lines of text... * @param Ptr moved arround to keep the next-line across several iterations * has to be &NULL on start; will be &NotNULL on end of buffer - * @returns size of copied buffer + * @returns size of remaining buffer */ int StrBufSipLine(StrBuf *LineBuf, const StrBuf *Buf, const char **Ptr) {