From: jongfoster Date: Mon, 21 Jan 2002 00:53:36 +0000 (+0000) Subject: Adding string_join() X-Git-Tag: v_2_9_11~22 X-Git-Url: http://www.privoxy.org/gitweb/?p=privoxy.git;a=commitdiff_plain;h=7dc8f26e69637d6277f961e1291f35fe9de45601 Adding string_join() --- diff --git a/miscutil.c b/miscutil.c index ed09ff8d..a9718668 100644 --- a/miscutil.c +++ b/miscutil.c @@ -1,10 +1,10 @@ -const char miscutil_rcs[] = "$Id: miscutil.c,v 1.25 2001/11/13 00:16:38 jongfoster Exp $"; +const char miscutil_rcs[] = "$Id: miscutil.c,v 1.26 2001/12/30 14:07:32 steudten Exp $"; /********************************************************************* * * File : $Source: /cvsroot/ijbswa/current/miscutil.c,v $ * * Purpose : zalloc, hash_string, safe_strerror, strcmpic, - * strncmpic, strsav, chomp, and MinGW32 strdup + * strncmpic, chomp, and MinGW32 strdup * functions. * These are each too small to deserve their own file * but don't really fit in any other file. @@ -36,6 +36,14 @@ const char miscutil_rcs[] = "$Id: miscutil.c,v 1.25 2001/11/13 00:16:38 jongfost * * Revisions : * $Log: miscutil.c,v $ + * Revision 1.26 2001/12/30 14:07:32 steudten + * - Add signal handling (unix) + * - Add SIGHUP handler (unix) + * - Add creation of pidfile (unix) + * - Add action 'top' in rc file (RH) + * - Add entry 'SIGNALS' to manpage + * - Add exit message to logfile (unix) + * * Revision 1.25 2001/11/13 00:16:38 jongfoster * Replacing references to malloc.h with the standard stdlib.h * (See ANSI or K&R 2nd Ed) @@ -518,8 +526,8 @@ char *strsav(char *old, const char *text_to_append) * * Description : Reallocate target_string and append text to it. * This makes it easier to append to malloc'd strings. - * This is similar to strsav(), but running out of - * memory isn't catastrophic. + * This is similar to the (removed) strsav(), but + * running out of memory isn't catastrophic. * * Programming style: * @@ -596,6 +604,59 @@ jb_err string_append(char **target_string, const char *text_to_append) } +/********************************************************************* + * + * Function : string_join + * + * Description : Join two strings together. Frees BOTH the original + * strings. If either or both input strings are NULL, + * fails as if it had run out of memory. + * + * For comparison, string_append requires that the + * second string is non-NULL, and doesn't free it. + * + * Rationale: Too often, we want to do + * string_append(s, html_encode(s2)). That assert()s + * if s2 is NULL or if html_encode() runs out of memory. + * It also leaks memory. Proper checking is cumbersome. + * The solution: string_join(s, html_encode(s2)) is safe, + * and will free the memory allocated by html_encode(). + * + * Parameters : + * 1 : target_string = Pointer to old text that is to be + * extended. *target_string will be free()d by this + * routine. target_string must be non-NULL. + * 2 : text_to_append = Text to be appended to old. + * + * Returns : JB_ERR_OK on success, and sets *target_string + * to newly malloc'ed appended string. Caller + * must free(*target_string). + * JB_ERR_MEMORY on out-of-memory, or if + * *target_string or text_to_append is NULL. (In + * this case, frees *target_string and text_to_append, + * sets *target_string to NULL). + * + *********************************************************************/ +jb_err string_join(char **target_string, char *text_to_append) +{ + jb_err err; + + assert(target_string); + + if (text_to_append == NULL) + { + freez(*target_string); + return JB_ERR_MEMORY; + } + + err = string_append(target_string, text_to_append); + + free(text_to_append); + + return err; +} + + /********************************************************************* * * Function : simplematch diff --git a/miscutil.h b/miscutil.h index bd34565c..eeae38e6 100644 --- a/miscutil.h +++ b/miscutil.h @@ -1,6 +1,6 @@ #ifndef MISCUTIL_H_INCLUDED #define MISCUTIL_H_INCLUDED -#define MISCUTIL_H_VERSION "$Id: miscutil.h,v 1.14 2001/11/05 21:43:48 steudten Exp $" +#define MISCUTIL_H_VERSION "$Id: miscutil.h,v 1.15 2001/12/30 14:07:32 steudten Exp $" /********************************************************************* * * File : $Source: /cvsroot/ijbswa/current/miscutil.h,v $ @@ -37,6 +37,14 @@ * * Revisions : * $Log: miscutil.h,v $ + * Revision 1.15 2001/12/30 14:07:32 steudten + * - Add signal handling (unix) + * - Add SIGHUP handler (unix) + * - Add creation of pidfile (unix) + * - Add action 'top' in rc file (RH) + * - Add entry 'SIGNALS' to manpage + * - Add exit message to logfile (unix) + * * Revision 1.14 2001/11/05 21:43:48 steudten * Add global var 'basedir' for unix os. * @@ -137,6 +145,7 @@ extern int strncmpic(const char *s1, const char *s2, size_t n); extern char *strsav(char *old, const char *text_to_append); extern jb_err string_append(char **target_string, const char *text_to_append); +extern jb_err string_join (char **target_string, char *text_to_append); extern char *chomp(char *string); extern int simplematch(char *pattern, char *text);