jim 00/02/19 17:14:49
Modified: . STATUS src/include ap_mmn.h httpd.h src/main http_protocol.c util.c Log: Hrm Revision Changes Path 1.808 +3 -5 apache-1.3/STATUS Index: STATUS =================================================================== RCS file: /home/cvs/apache-1.3/STATUS,v retrieving revision 1.807 retrieving revision 1.808 diff -u -r1.807 -r1.808 --- STATUS 2000/02/19 12:51:11 1.807 +++ STATUS 2000/02/20 01:14:45 1.808 @@ -1,5 +1,5 @@ 1.3 STATUS: - Last modified at [$Date: 2000/02/19 12:51:11 $] + Last modified at [$Date: 2000/02/20 01:14:45 $] Release: @@ -28,10 +28,8 @@ RELEASE SHOWSTOPPERS: * general/5766: AddDefaultCharset bug with CGI scripts - STATUS: Still not fixed. Jim has a patch that adds the - default charset iff AddDefaultCharset is enabled AND - the type is text/plain or text/html, but he's not sure - if that's correct... Comments? + STATUS: Patch available. + Message-ID: <[EMAIL PROTECTED]> general/5760: Use of text type "t" in fopen call... RELEASE NON-SHOWSTOPPERS BUT WOULD BE REAL NICE TO WRAP THESE UP: 1.44 +2 -1 apache-1.3/src/include/ap_mmn.h Index: ap_mmn.h =================================================================== RCS file: /home/cvs/apache-1.3/src/include/ap_mmn.h,v retrieving revision 1.43 retrieving revision 1.44 diff -u -r1.43 -r1.44 --- ap_mmn.h 2000/01/12 15:54:56 1.43 +++ ap_mmn.h 2000/02/20 01:14:46 1.44 @@ -226,6 +226,7 @@ * ap_base64encode_len(), ap_base64decode(), * ap_base64decode_binary(), ap_base64decode_len(), * ap_pbase64decode(), ap_pbase64encode() + * 19990320.7 - add ap_strcasestr() */ #define MODULE_MAGIC_COOKIE 0x41503133UL /* "AP13" */ @@ -233,7 +234,7 @@ #ifndef MODULE_MAGIC_NUMBER_MAJOR #define MODULE_MAGIC_NUMBER_MAJOR 19990320 #endif -#define MODULE_MAGIC_NUMBER_MINOR 6 /* 0...n */ +#define MODULE_MAGIC_NUMBER_MINOR 7 /* 0...n */ #define MODULE_MAGIC_NUMBER MODULE_MAGIC_NUMBER_MAJOR /* backward compat */ /* Useful for testing for features. */ 1.305 +1 -0 apache-1.3/src/include/httpd.h Index: httpd.h =================================================================== RCS file: /home/cvs/apache-1.3/src/include/httpd.h,v retrieving revision 1.304 retrieving revision 1.305 diff -u -r1.304 -r1.305 --- httpd.h 2000/02/02 20:43:43 1.304 +++ httpd.h 2000/02/20 01:14:46 1.305 @@ -1008,6 +1008,7 @@ API_EXPORT(int) ap_is_matchexp(const char *str); API_EXPORT(int) ap_strcmp_match(const char *str, const char *exp); API_EXPORT(int) ap_strcasecmp_match(const char *str, const char *exp); +API_EXPORT(char *) ap_strcasestr(const char *s1, const char *s2); API_EXPORT(char *) ap_pbase64decode(pool *p, const char *bufcoded); API_EXPORT(char *) ap_pbase64encode(pool *p, char *string); API_EXPORT(char *) ap_uudecode(pool *p, const char *bufcoded); 1.289 +17 -9 apache-1.3/src/main/http_protocol.c Index: http_protocol.c =================================================================== RCS file: /home/cvs/apache-1.3/src/main/http_protocol.c,v retrieving revision 1.288 retrieving revision 1.289 diff -u -r1.288 -r1.289 --- http_protocol.c 2000/02/08 00:34:36 1.288 +++ http_protocol.c 2000/02/20 01:14:47 1.289 @@ -112,22 +112,30 @@ * - return type */ static const char *make_content_type(request_rec *r, const char *type) { - const char *i; + char *needcset[] = { + "text/plain", + "text/html", + NULL }; + char **pcset; core_dir_config *conf = (core_dir_config *)ap_get_module_config( r->per_dir_config, &core_module); if (!type) type = ap_default_type(r); if (conf->add_default_charset != ADD_DEFAULT_CHARSET_ON) return type; - i = type; - while (*i && *i != ';') i++; - if (*i && *i == ';') { + if (ap_strcasestr(type, "charset=") != NULL) { /* already has parameter, do nothing */ - /* XXX should check for actual charset=, but then we need real - * parsing code - */ + /* XXX we don't check the validity */ + ; } else { - type = ap_pstrcat(r->pool, type, "; charset=", - conf->add_default_charset_name, NULL); + /* see if it makes sense to add the charset. At present, + * we only add it if the Content-type is one of needcset[] + */ + for (pcset = needcset; *pcset ; pcset++) + if (ap_strcasestr(type, *pcset) != NULL) { + type = ap_pstrcat(r->pool, type, "; charset=", + conf->add_default_charset_name, NULL); + break; + } } return type; } 1.178 +32 -0 apache-1.3/src/main/util.c Index: util.c =================================================================== RCS file: /home/cvs/apache-1.3/src/main/util.c,v retrieving revision 1.177 retrieving revision 1.178 diff -u -r1.177 -r1.178 --- util.c 2000/02/02 20:43:51 1.177 +++ util.c 2000/02/20 01:14:48 1.178 @@ -303,6 +303,38 @@ return 0; } +/* + * Similar to standard strstr() but we ignore case in this version. + * Based on the strstr() implementation further below. + */ +API_EXPORT(char *) ap_strcasestr(const char *s1, const char *s2) +{ + char *p1, *p2; + if (*s2 == '\0') { + /* an empty s2 */ + return((char *)s1); + } + while(1) { + for ( ; (*s1 != '\0') && (ap_tolower(*s1) != ap_tolower(*s2)); s1++); + if (*s1 == '\0') return(NULL); + /* found first character of s2, see if the rest matches */ + p1 = (char *)s1; + p2 = (char *)s2; + while (ap_tolower(*++p1) == ap_tolower(*++p2)) { + if (*p1 == '\0') { + /* both strings ended together */ + return((char *)s1); + } + } + if (*p2 == '\0') { + /* second string ended, a match */ + break; + } + /* didn't find a match here, try starting at next character in s1 */ + s1++; + } + return((char *)s1); +} /* * Apache stub function for the regex libraries regexec() to make sure the * whole regex(3) API is available through the Apache (exported) namespace.