From 85f499d367d3936e6d0aff5d4b429b406bf29030 Mon Sep 17 00:00:00 2001 From: Art Cancro Date: Sat, 19 Nov 2022 17:21:06 -0500 Subject: [PATCH] don't make me smack you --- libcitadel/lib/html_to_ascii.c | 38 ++++--- libcitadel/lib/tools.c | 176 +++++++++++++-------------------- 2 files changed, 88 insertions(+), 126 deletions(-) diff --git a/libcitadel/lib/html_to_ascii.c b/libcitadel/lib/html_to_ascii.c index 251f1adea..3c1012f00 100644 --- a/libcitadel/lib/html_to_ascii.c +++ b/libcitadel/lib/html_to_ascii.c @@ -68,7 +68,7 @@ char *html_to_ascii(const char *inputmsg, int msglen, int screenwidth, int ansi) output_len = 0; do { - /* Fill the input buffer */ + // Fill the input buffer inbuf_len = strlen(inbuf); if ( (done_reading == 0) && (inbuf_len < (SIZ-128)) ) { @@ -88,11 +88,10 @@ char *html_to_ascii(const char *inputmsg, int msglen, int screenwidth, int ansi) } - /* Do some parsing */ + // Do some parsing if (!IsEmptyStr(inbuf)) { - - /* Fold in all the spacing */ + // Fold in all the spacing for (i=0; !IsEmptyStr(&inbuf[i]); ++i) { if (inbuf[i]==10) inbuf[i]=32; if (inbuf[i]==13) inbuf[i]=32; @@ -113,10 +112,10 @@ char *html_to_ascii(const char *inputmsg, int msglen, int screenwidth, int ansi) strcpy(tag, ""); } - else if (ch == '>') { /* We have a tag. */ + else if (ch == '>') { // We have a tag. if (nest > 0) --nest; - /* Unqualify the tag (truncate at first space) */ + // Unqualify the tag (truncate at first space) if (strchr(tag, ' ') != NULL) { strcpy(strchr(tag, ' '), ""); } @@ -294,10 +293,10 @@ char *html_to_ascii(const char *inputmsg, int msglen, int screenwidth, int ansi) strcpy(inbuf, &inbuf[i]); } - /* Convert &; tags to the forbidden characters */ + // Convert &; tags to the forbidden characters if (!IsEmptyStr(outbuf)) for (i=0; !IsEmptyStr(&outbuf[i]); ++i) { - /* Character entity references */ + // Character entity references if (!strncasecmp(&outbuf[i], " ", 6)) { outbuf[i] = ' '; strcpy(&outbuf[i+1], &outbuf[i+6]); @@ -492,7 +491,7 @@ char *html_to_ascii(const char *inputmsg, int msglen, int screenwidth, int ansi) strcpy(&outbuf[i+1], &outbuf[i+7]); } - /* two-digit decimal equivalents */ + // two-digit decimal equivalents else if (outbuf[i] == '&' && outbuf[i + 1] == '#' && isdigit(outbuf[i + 2]) && @@ -505,7 +504,7 @@ char *html_to_ascii(const char *inputmsg, int msglen, int screenwidth, int ansi) strcpy(&outbuf[i+1], &outbuf[i+5]); } - /* three-digit decimal equivalents */ + // three-digit decimal equivalents else if (outbuf[i] == '&' && outbuf[i + 1] == '#' && isdigit(outbuf[i + 2]) && @@ -519,7 +518,7 @@ char *html_to_ascii(const char *inputmsg, int msglen, int screenwidth, int ansi) strcpy(&outbuf[i+1], &outbuf[i+6]); } - /* four-digit decimal equivalents */ + // four-digit decimal equivalents else if (outbuf[i] == '&' && outbuf[i + 1] == '#' && isdigit(outbuf[i + 2]) && @@ -536,7 +535,7 @@ char *html_to_ascii(const char *inputmsg, int msglen, int screenwidth, int ansi) } - /* Make sure the output buffer is big enough */ + // Make sure the output buffer is big enough if ((output_len + strlen(outbuf) + SIZ) > outptr_buffer_size) { outptr_buffer_size += SIZ; outptr = realloc(outptr, outptr_buffer_size); @@ -545,7 +544,7 @@ char *html_to_ascii(const char *inputmsg, int msglen, int screenwidth, int ansi) } } - /* Output any lines terminated with hard line breaks */ + // Output any lines terminated with hard line breaks do { did_out = 0; if (strlen(outbuf) > 0) { @@ -563,7 +562,7 @@ char *html_to_ascii(const char *inputmsg, int msglen, int screenwidth, int ansi) } } while (did_out); - /* Add soft line breaks */ + // Add soft line breaks if (strlen(outbuf) > (screenwidth - 2 )) { rb = (-1); for (i=0; i<(screenwidth-2); ++i) { @@ -575,9 +574,9 @@ char *html_to_ascii(const char *inputmsg, int msglen, int screenwidth, int ansi) strcpy(&outptr[output_len], nl); output_len += strlen(nl); strcpy(outbuf, &outbuf[rb+1]); - } else { - strncpy(&outptr[output_len], outbuf, - screenwidth-2); + } + else { + strncpy(&outptr[output_len], outbuf, screenwidth-2); output_len += (screenwidth-2); strcpy(&outptr[output_len], nl); output_len += strlen(nl); @@ -590,9 +589,7 @@ char *html_to_ascii(const char *inputmsg, int msglen, int screenwidth, int ansi) strcpy(&outptr[output_len], outbuf); output_len += strlen(outbuf); - /* Strip leading/trailing whitespace. We can't do this with - * string_trim() because it uses too many strlen()'s - */ + // Strip leading/trailing whitespace. while ((output_len > 0) && (isspace(outptr[0]))) { strcpy(outptr, &outptr[1]); --output_len; @@ -602,6 +599,7 @@ char *html_to_ascii(const char *inputmsg, int msglen, int screenwidth, int ansi) --output_len; } + // Make sure the final line ends with a newline character. if ((output_len > 0) && (outptr[output_len-1] != '\n')) { strcat(outptr, "\n"); ++output_len; diff --git a/libcitadel/lib/tools.c b/libcitadel/lib/tools.c index 8971b30e6..7523b17e3 100644 --- a/libcitadel/lib/tools.c +++ b/libcitadel/lib/tools.c @@ -34,7 +34,7 @@ #define TRUE 1 #define FALSE 0 -typedef unsigned char byte; /* Byte type */ +typedef unsigned char byte; // Byte type // copy a string into a buffer of a known size. abort if we exceed the limits // @@ -129,7 +129,7 @@ void remove_token(char *source, int parmnum, char separator) { char *d, *s; // dest, source int count = 0; - /* Find desired parameter */ + // Find desired parameter d = source; while (count < parmnum) { // End of string, bail! @@ -200,7 +200,7 @@ char *rfc2047encode(const char *line, long length) { long end; #define UTF8_HEADER "=?UTF-8?B?" - /* check if we're already done */ + // check if we're already done AlreadyEncoded = strstr(line, "=?"); if ((AlreadyEncoded != NULL) && ((strstr(AlreadyEncoded, "?B?") != NULL)|| (strstr(AlreadyEncoded, "?Q?") != NULL))) { return strdup(line); @@ -244,7 +244,7 @@ void StripSlashes(char *Dir, int TrailingSlash) { } -// Strip leading and trailing spaces from a string +// Trim leading and trailing whitespace from a string size_t string_trim(char *buf) { char *first_nonspace = NULL; char *last_nonspace = NULL; @@ -276,12 +276,10 @@ size_t string_trim(char *buf) { } -/* - * check for the presence of a character within a string (returns count) - * st the string to examine - * ch the char to search - * returns the number of times ch appears in st - */ +// check for the presence of a character within a string (returns count) +// st the string to examine +// ch the char to search +// returns the number of times ch appears in st int haschar(const char *st, int ch) { const char *ptr; int b; @@ -297,10 +295,7 @@ int haschar(const char *st, int ch) { } -/* - * Determine whether the specified message number is contained within the - * specified sequence set. - */ +// Determine whether the specified message number is contained within the specified sequence set. int is_msg_in_sequence_set(const char *mset, long msgnum) { int num_sets; int s; @@ -312,16 +307,13 @@ int is_msg_in_sequence_set(const char *mset, long msgnum) { extract_token(setstr, mset, s, ',', sizeof setstr); extract_token(lostr, setstr, 0, ':', sizeof lostr); - if (num_tokens(setstr, ':') >= 2) - { + if (num_tokens(setstr, ':') >= 2) { extract_token(histr, setstr, 1, ':', sizeof histr); - if (!strcmp(histr, "*")) - { + if (!strcmp(histr, "*")) { snprintf(histr, sizeof histr, "%ld", LONG_MAX); } } - else - { + else { strcpy(histr, lostr); } lo = atol(lostr); @@ -333,17 +325,15 @@ int is_msg_in_sequence_set(const char *mset, long msgnum) { return(0); } -/* - * Utility function to "readline" from memory - * start Location in memory from which we are reading. - * buf the buffer to place the string in. - * maxlen Size of string buffer - * returns pointer to the source memory right after we stopped reading. - */ +// Utility function to "readline" from memory +// start Location in memory from which we are reading. +// buf the buffer to place the string in. +// maxlen Size of string buffer +// returns pointer to the source memory right after we stopped reading. char *memreadline(char *start, char *buf, int maxlen) { char ch; char *ptr; - int len = 0; /* tally our own length to avoid strlen() delays */ + int len = 0; // tally our own length to avoid strlen() delays ptr = start; @@ -360,30 +350,25 @@ char *memreadline(char *start, char *buf, int maxlen) { } -/* - * Utility function to "readline" from memory - * start Location in memory from which we are reading. - * buf the buffer to place the string in. - * maxlen Size of string buffer - * retlen the length of the returned string - * returns a pointer to the source memory right after we stopped reading. - */ +// Utility function to "readline" from memory +// start Location in memory from which we are reading. +// buf the buffer to place the string in. +// maxlen Size of string buffer +// retlen the length of the returned string +// returns a pointer to the source memory right after we stopped reading. char *memreadlinelen(char *start, char *buf, int maxlen, int *retlen) { char ch; char *ptr; - int len = 0; /* tally our own length to avoid strlen() delays */ + int len = 0; // tally our own length to avoid strlen() delays ptr = start; - while (1) - { + while (1) { ch = *ptr++; - if ((len + 1 < (maxlen)) && (ch != 13) && (ch != 10)) - { + if ((len + 1 < (maxlen)) && (ch != 13) && (ch != 10)) { buf[len++] = ch; } - if ((ch == 10) || (ch == 0)) - { + if ((ch == 10) || (ch == 0)) { buf[len] = 0; *retlen = len; return ptr; @@ -392,18 +377,15 @@ char *memreadlinelen(char *start, char *buf, int maxlen, int *retlen) { } -/** - * \brief Utility function to "readline" from memory - * \param start Location in memory from which we are reading. - * \param buf the buffer to place the string in. - * \param maxlen Size of string buffer - * \return Pointer to the source memory right after we stopped reading. - */ -const char *cmemreadline(const char *start, char *buf, int maxlen) -{ +// Utility function to "readline" from memory +// start Location in memory from which we are reading. +// buf the buffer to place the string in. +// maxlen Size of string buffer +// return Pointer to the source memory right after we stopped reading. +const char *cmemreadline(const char *start, char *buf, int maxlen) { char ch; const char *ptr; - int len = 0; /**< tally our own length to avoid strlen() delays */ + int len = 0; // tally our own length to avoid strlen() delays ptr = start; @@ -420,19 +402,16 @@ const char *cmemreadline(const char *start, char *buf, int maxlen) } -/** - * \brief Utility function to "readline" from memory - * \param start Location in memory from which we are reading. - * \param buf the buffer to place the string in. - * \param maxlen Size of string buffer - * \param retlen the length of the returned string - * \return Pointer to the source memory right after we stopped reading. - */ -const char *cmemreadlinelen(const char *start, char *buf, int maxlen, int *retlen) -{ +// Utility function to "readline" from memory +// start Location in memory from which we are reading. +// buf the buffer to place the string in. +// maxlen Size of string buffer +// retlen the length of the returned string +// return Pointer to the source memory right after we stopped reading. +const char *cmemreadlinelen(const char *start, char *buf, int maxlen, int *retlen) { char ch; const char *ptr; - int len = 0; /**< tally our own length to avoid strlen() delays */ + int len = 0; // tally our own length to avoid strlen() delays ptr = start; @@ -450,10 +429,7 @@ const char *cmemreadlinelen(const char *start, char *buf, int maxlen, int *retle } -/* - * Strip a boundarized substring out of a string (for example, remove - * parentheses and anything inside them). - */ +// Strip a boundarized substring out of a string (for example, remove parentheses and anything inside them). int stripout(char *str, char leftboundary, char rightboundary) { int a; int lb = (-1); @@ -477,10 +453,8 @@ int stripout(char *str, char leftboundary, char rightboundary) { } -/* - * Reduce a string down to a boundarized substring (for example, remove - * parentheses and anything outside them). - */ +// Reduce a string down to a boundarized substring (for example, remove +// parentheses and anything outside them). long stripallbut(char *str, char leftboundary, char rightboundary) { long len = 0; @@ -519,14 +493,12 @@ char *myfgets(char *s, int size, FILE *stream) { return ret; } -/** - * \brief Escape a string for feeding out as a URL. - * \param outbuf the output buffer - * \param oblen the size of outbuf to sanitize - * \param strbuf the input buffer - */ -void urlesc(char *outbuf, size_t oblen, char *strbuf) -{ + +// Escape a string for feeding out as a URL. +// outbuf the output buffer +// oblen the size of outbuf to sanitize +// strbuf the input buffer +void urlesc(char *outbuf, size_t oblen, char *strbuf) { int a, b, c, len, eclen, olen; char *ec = " +#&;`'|*?-~<>^()[]{}/$\"\\"; @@ -551,10 +523,7 @@ void urlesc(char *outbuf, size_t oblen, char *strbuf) } - -/* - * In our world, we want strcpy() to be able to work with overlapping strings. - */ +// In our world, we want strcpy() to be able to work with overlapping strings. #ifdef strcpy #undef strcpy #endif @@ -564,14 +533,12 @@ char *strcpy(char *dest, const char *src) { } -/* - * Generate a new, globally unique UID parameter for a calendar etc. object - */ +// Generate a new, globally unique UID parameter for a calendar etc. object void generate_uuid(char *buf) { static int seq = (-1); static int no_kernel_uuid = 0; - /* If we are running on Linux then we have a kernelspace uuid generator available */ + // If we are running on Linux then we have a kernelspace uuid generator available if (no_kernel_uuid == 0) { FILE *fp; @@ -587,7 +554,7 @@ void generate_uuid(char *buf) { } } - /* If the kernel didn't provide us with a uuid, we generate a pseudo-random one */ + // If the kernel didn't provide us with a uuid, we generate a pseudo-random one no_kernel_uuid = 1; @@ -606,13 +573,12 @@ void generate_uuid(char *buf) { ); } -/* - * bmstrcasestr() -- case-insensitive substring search - * - * This uses the Boyer-Moore search algorithm and is therefore quite fast. - * The code is roughly based on the strstr() replacement from 'tin' written - * by Urs Jannsen. - */ + +// bmstrcasestr() -- case-insensitive substring search +// +// This uses the Boyer-Moore search algorithm and is therefore quite fast. +// The code is roughly based on the strstr() replacement from 'tin' written +// by Urs Jannsen. inline static char *_bmstrcasestr_len(char *text, size_t textlen, const char *pattern, size_t patlen) { register unsigned char *p, *t; @@ -623,28 +589,26 @@ inline static char *_bmstrcasestr_len(char *text, size_t textlen, const char *pa if (!text) return(NULL); if (!pattern) return(NULL); - /* algorithm fails if pattern is empty */ + // algorithm fails if pattern is empty if ((p1 = patlen) == 0) return (text); - /* code below fails (whenever i is unsigned) if pattern too long */ + // code below fails (whenever i is unsigned) if pattern too long if (p1 > textlen) return (NULL); - /* set up deltas */ + // set up deltas delta = deltaspace; for (i = 0; i <= 255; i++) delta[i] = p1; for (p = (unsigned char *) pattern, i = p1; --i > 0;) delta[tolower(*p++)] = i; - /* - * From now on, we want patlen - 1. - * In the loop below, p points to the end of the pattern, - * t points to the end of the text to be tested against the - * pattern, and i counts the amount of text remaining, not - * including the part to be tested. - */ + // From now on, we want patlen - 1. + // In the loop below, p points to the end of the pattern, + // t points to the end of the text to be tested against the + // pattern, and i counts the amount of text remaining, not + // including the part to be tested. p1--; p = (unsigned char *) pattern + p1; t = (unsigned char *) text + p1; -- 2.30.2