From f9dbb7c7ba2ee2811a1e7dafbe2c2e04dcd9a7d3 Mon Sep 17 00:00:00 2001 From: oes Date: Tue, 29 May 2001 23:10:09 +0000 Subject: [PATCH] - Introduced chomp() - Moved strsav() from showargs to miscutil --- miscutil.c | 145 +++++++++++++++++++++++++++++++++++++++++++++++++++-- miscutil.h | 28 ++++++++++- 2 files changed, 168 insertions(+), 5 deletions(-) diff --git a/miscutil.c b/miscutil.c index 63a87eac..2afa5cf7 100644 --- a/miscutil.c +++ b/miscutil.c @@ -1,12 +1,13 @@ -const char miscutil_rcs[] = "$Id: miscutil.c,v 1.1.1.1 2001/05/15 13:59:00 oes Exp $"; +const char miscutil_rcs[] = "$Id: miscutil.c,v 1.2 2001/05/29 09:50:24 jongfoster Exp $"; /********************************************************************* * * File : $Source: /cvsroot/ijbswa/current/miscutil.c,v $ * * Purpose : zalloc, hash_string, safe_strerror, strcmpic, - * strncmpic, and MinGW32 strdup functions. These are - * each too small to deserve their own file but don't - * really fit in any other file. + * strncmpic, strsav, chomp, and MinGW32 strdup + * functions. + * These are each too small to deserve their own file + * but don't really fit in any other file. * * Copyright : Written by and Copyright (C) 2001 the SourceForge * IJBSWA team. http://ijbswa.sourceforge.net @@ -35,6 +36,29 @@ const char miscutil_rcs[] = "$Id: miscutil.c,v 1.1.1.1 2001/05/15 13:59:00 oes E * * Revisions : * $Log: miscutil.c,v $ + * Revision 1.2 2001/05/29 09:50:24 jongfoster + * Unified blocklist/imagelist/permissionslist. + * File format is still under discussion, but the internal changes + * are (mostly) done. + * + * Also modified interceptor behaviour: + * - We now intercept all URLs beginning with one of the following + * prefixes (and *only* these prefixes): + * * http://i.j.b/ + * * http://ijbswa.sf.net/config/ + * * http://ijbswa.sourceforge.net/config/ + * - New interceptors "home page" - go to http://i.j.b/ to see it. + * - Internal changes so that intercepted and fast redirect pages + * are not replaced with an image. + * - Interceptors now have the option to send a binary page direct + * to the client. (i.e. ijb-send-banner uses this) + * - Implemented show-url-info interceptor. (Which is why I needed + * the above interceptors changes - a typical URL is + * "http://i.j.b/show-url-info?url=www.somesite.com/banner.gif". + * The previous mechanism would not have intercepted that, and + * if it had been intercepted then it then it would have replaced + * it with an image.) + * * Revision 1.1.1.1 2001/05/15 13:59:00 oes * Initial import of version 2.9.3 source tree * @@ -51,6 +75,7 @@ const char miscutil_rcs[] = "$Id: miscutil.c,v 1.1.1.1 2001/05/15 13:59:00 oes E #include #include "miscutil.h" +#include "errlog.h" const char miscutil_h_rcs[] = MISCUTIL_H_VERSION; @@ -62,6 +87,7 @@ const char miscutil_h_rcs[] = MISCUTIL_H_VERSION; * the argument match the declared parameter type of "int". */ #define ijb_tolower(__X) tolower((int)(unsigned char)(__X)) +#define ijb_isspace(__X) isspace((int)(unsigned char)(__X)) /********************************************************************* * @@ -248,6 +274,117 @@ int strncmpic(const char *s1, const char *s2, size_t n) } +/********************************************************************* + * + * Function : chomp + * + * Description : In-situ-eliminate all leading and trailing whitespace + * from a string. + * + * Parameters : + * 1 : s : string to be chomped. + * + * Returns : chomped string + * + *********************************************************************/ +char *chomp(char *string) +{ + char *p, *q, *r; + + /* + * strip trailing whitespace + */ + p = string + strlen(string); + while (p > string && ijb_isspace(*(p-1))) + { + p--; + } + *p = '\0'; + + /* + * find end of leading whitespace + */ + q = r = string; + while (*q && ijb_isspace(*q)) + { + q++; + } + + /* + * if there was any, move the rest forwards + */ + if (q != string) + { + while (q <= p) + { + *r++ = *q++; + } + } + + return(string); + +} + +/********************************************************************* + * + * Function : strsav + * + * Description : Reallocate "old" and append text to it. This makes + * it easier to append to malloc'd strings. + * + * Parameters : + * 1 : old = Old text that is to be extended. Will be + * free()d by this routine. + * 2 : text_to_append = Text to be appended to old. + * + * Returns : Pointer to newly malloc'ed appended string. + * If there is no text to append, return old. Caller + * must free(). + * + *********************************************************************/ +char *strsav(char *old, const char *text_to_append) +{ + int old_len, new_len; + char *p; + + if (( text_to_append == NULL) || (*text_to_append == '\0')) + { + return(old); + } + + if (NULL != old) + { + old_len = strlen(old); + } + else + { + old_len = 0; + } + + new_len = old_len + strlen(text_to_append) + 1; + + if (old) + { + if ((p = realloc(old, new_len)) == NULL) + { + log_error(LOG_LEVEL_FATAL, "realloc(%d) bytes failed!", new_len); + /* Never get here - LOG_LEVEL_FATAL causes program exit */ + } + } + else + { + if ((p = (char *)malloc(new_len)) == NULL) + { + log_error(LOG_LEVEL_FATAL, "malloc(%d) bytes failed!", new_len); + /* Never get here - LOG_LEVEL_FATAL causes program exit */ + } + } + + strcpy(p + old_len, text_to_append); + return(p); + +} + /* Local Variables: tab-width: 3 diff --git a/miscutil.h b/miscutil.h index 6b04adce..8dd55b11 100644 --- a/miscutil.h +++ b/miscutil.h @@ -1,6 +1,6 @@ #ifndef _MISCUTIL_H #define _MISCUTIL_H -#define MISCUTIL_H_VERSION "$Id: miscutil.h,v 1.1.1.1 2001/05/15 13:59:00 oes Exp $" +#define MISCUTIL_H_VERSION "$Id: miscutil.h,v 1.2 2001/05/29 09:50:24 jongfoster Exp $" /********************************************************************* * * File : $Source: /cvsroot/ijbswa/current/miscutil.h,v $ @@ -37,6 +37,29 @@ * * Revisions : * $Log: miscutil.h,v $ + * Revision 1.2 2001/05/29 09:50:24 jongfoster + * Unified blocklist/imagelist/permissionslist. + * File format is still under discussion, but the internal changes + * are (mostly) done. + * + * Also modified interceptor behaviour: + * - We now intercept all URLs beginning with one of the following + * prefixes (and *only* these prefixes): + * * http://i.j.b/ + * * http://ijbswa.sf.net/config/ + * * http://ijbswa.sourceforge.net/config/ + * - New interceptors "home page" - go to http://i.j.b/ to see it. + * - Internal changes so that intercepted and fast redirect pages + * are not replaced with an image. + * - Interceptors now have the option to send a binary page direct + * to the client. (i.e. ijb-send-banner uses this) + * - Implemented show-url-info interceptor. (Which is why I needed + * the above interceptors changes - a typical URL is + * "http://i.j.b/show-url-info?url=www.somesite.com/banner.gif". + * The previous mechanism would not have intercepted that, and + * if it had been intercepted then it then it would have replaced + * it with an image.) + * * Revision 1.1.1.1 2001/05/15 13:59:00 oes * Initial import of version 2.9.3 source tree * @@ -57,6 +80,9 @@ extern char *safe_strerror(int err); extern int strcmpic(const char *s1, const char *s2); extern int strncmpic(const char *s1, const char *s2, size_t n); +extern char *strsav(char *old, const char *text_to_append); +extern char *chomp(char *string); + #ifdef __MINGW32__ extern char *strdup(const char *s); #endif /* def __MINGW32__ */ -- 2.39.2