From 0636a82ec23ca9fa9c65e52dbbf07c0d4ebf598d Mon Sep 17 00:00:00 2001 From: BlackLight Date: Thu, 10 Feb 2011 00:54:06 +0100 Subject: [PATCH] Fixing str_replace* and other 64 bit stuff --- geo.c | 2 +- regex.c | 72 +++++++++++++++++++++++++++++++++++++++++-------------- spp_ai.h | 4 ++-- webserv.c | 12 +++++----- 4 files changed, 63 insertions(+), 27 deletions(-) diff --git a/geo.c b/geo.c index 57c2856..20bfbc7 100644 --- a/geo.c +++ b/geo.c @@ -94,7 +94,7 @@ AI_geoinfobyaddr ( const char *ip, double **coord ) "Content-Type: application/x-www-form-urlencoded; charset=utf-8\r\n" "Connection: close\r\n\r\n" "%s\r\n", - strlen ( query ), query + (unsigned long int) strlen ( query ), query ); do diff --git a/regex.c b/regex.c index 5703e32..ce10576 100644 --- a/regex.c +++ b/regex.c @@ -158,37 +158,73 @@ preg_match ( const char* expr, char* str, char*** matches, int *nmatches ) */ char* -str_replace ( char *str, char *orig, char *rep ) +str_replace ( char *str, const char *pattern, const char *sub ) { - char *new_s = NULL; - unsigned long int new_len = 0; - unsigned long int pos = 0; + char *new_s = NULL; + unsigned int pos = 0, + new_len = 0; - if ( !( pos = (unsigned long int) strstr ( str, orig ))) - return str; + if ( !( pos = (unsigned int) strstr ( str, pattern ))) + { + return strdup ( str ); + } - new_len = strlen(str) - strlen(orig) + ((rep) ? strlen(rep) : 0) + 1; + pos -= (unsigned int) str; + new_len = strlen ( str ) - strlen ( pattern ) + ((sub) ? strlen ( sub ) : 0); - if ( !( new_s = (char*) malloc ( new_len ))) + if ( !( new_s = (char*) malloc ( new_len + 1 ))) + { return NULL; + } memset ( new_s, 0, new_len ); - strncpy ( new_s, str, pos - (unsigned long int) str ); - new_s[ pos - (unsigned long int) str] = 0; + strncpy ( new_s, str, pos ); - if ( rep ) + if ( sub ) { - if ( strlen ( rep ) != 0 ) - sprintf ( new_s + pos - (unsigned long int) str, "%s%s", rep, (char*) pos + strlen ( orig )); - else - sprintf ( new_s + pos - (unsigned long int) str, "%s", (char*) pos + strlen ( orig )); - } else { - sprintf ( new_s + pos - (unsigned long int) str, "%s", (char*) pos + strlen ( orig )); + if ( strlen ( sub ) > 0 ) + { + strcat ( new_s, sub ); + } } + strcat ( new_s, str + pos + strlen ( pattern ) ); + return new_s; } /* ----- end of function str_replace ----- */ +/* char* */ +/* str_replace ( char *str, char *orig, char *rep ) */ +/* { */ +/* char *new_s = NULL; */ +/* unsigned long int new_len = 0; */ +/* unsigned long int pos = 0; */ +/* */ +/* if ( !( pos = (unsigned long int) strstr ( str, orig ))) */ +/* return str; */ +/* */ +/* new_len = strlen(str) - strlen(orig) + ((rep) ? strlen(rep) : 0) + 1; */ +/* */ +/* if ( !( new_s = (char*) malloc ( new_len ))) */ +/* return NULL; */ +/* */ +/* memset ( new_s, 0, new_len ); */ +/* strncpy ( new_s, str, pos - (unsigned long int) str ); */ +/* new_s[ pos - (unsigned long int) str] = 0; */ +/* */ +/* if ( rep ) */ +/* { */ +/* if ( strlen ( rep ) != 0 ) */ +/* sprintf ( new_s + pos - (unsigned long int) str, "%s%s", rep, (char*) pos + strlen ( orig )); */ +/* else */ +/* sprintf ( new_s + pos - (unsigned long int) str, "%s", (char*) pos + strlen ( orig )); */ +/* } else { */ +/* sprintf ( new_s + pos - (unsigned long int) str, "%s", (char*) pos + strlen ( orig )); */ +/* } */ +/* */ +/* return new_s; */ +/* } */ + /** * \brief Replace all of the occurrences of 'orig' in 'str' with 'rep' * \param str String to work on @@ -198,7 +234,7 @@ str_replace ( char *str, char *orig, char *rep ) */ char* -str_replace_all ( char *str, char *orig, char *rep ) +str_replace_all ( char *str, const char *orig, const char *rep ) { char *buf = strdup ( str ); char *tmp = NULL; diff --git a/spp_ai.h b/spp_ai.h index 2ebd73b..74f8103 100644 --- a/spp_ai.h +++ b/spp_ai.h @@ -581,8 +581,8 @@ static const char *outdb_config[] __attribute__ (( unused )) = { /*****************************************************************/ int preg_match ( const char*, char*, char***, int* ); -char* str_replace ( char*, char*, char *); -char* str_replace_all ( char*, char*, char* ); +char* str_replace ( char*, const char*, const char* ); +char* str_replace_all ( char*, const char*, const char* ); void base64_encode ( const char*, size_t, char** ); void base64_decode ( const char*, char** ); diff --git a/webserv.c b/webserv.c index ac73e97..375db65 100644 --- a/webserv.c +++ b/webserv.c @@ -42,7 +42,7 @@ #define HTTP_ERR_RESPONSE_FORMAT "\n" \ "\n" \ - "%lu %s\n" \ + "%d %s\n" \ "\n" \ "

%s

\n" \ "

%s

\n" \ @@ -304,7 +304,7 @@ __AI_webservlet_thread ( void *arg ) strtime [ strlen(strtime) - 1 ] = 0; snprintf ( http_headers, max_headers_length, HTTP_RESPONSE_HEADERS_FORMAT, "HTTP/1.1", 400, "Bad Request", strtime, - config->webserv_banner, "text/html", strlen ( http_response )); + config->webserv_banner, "text/html", (unsigned long int) strlen ( http_response )); free ( strtime ); free ( line ); line = NULL; @@ -343,7 +343,7 @@ __AI_webservlet_thread ( void *arg ) strtime [ strlen(strtime) - 1 ] = 0; snprintf ( http_headers, max_headers_length, HTTP_RESPONSE_HEADERS_FORMAT, http_ver, 404, "Not Found", strtime, - config->webserv_banner, "text/html", strlen ( http_response )); + config->webserv_banner, "text/html", (unsigned long int) strlen ( http_response )); free ( strtime ); free ( line ); line = NULL; @@ -361,7 +361,7 @@ __AI_webservlet_thread ( void *arg ) strtime [ strlen(strtime) - 1 ] = 0; snprintf ( http_headers, max_headers_length, HTTP_RESPONSE_HEADERS_FORMAT, http_ver, 403, "Forbidden", strtime, - config->webserv_banner, "text/html", strlen ( http_response )); + config->webserv_banner, "text/html", (unsigned long int) strlen ( http_response )); free ( strtime ); free ( line ); line = NULL; @@ -483,7 +483,7 @@ __AI_webservlet_thread ( void *arg ) http_ver, 200, "Found", strtime, config->webserv_banner, content_type, /* strlen ( http_response )); */ - read_bytes ); + (unsigned long int) read_bytes ); } free ( strtime ); @@ -503,7 +503,7 @@ __AI_webservlet_thread ( void *arg ) strtime [ strlen(strtime) - 1 ] = 0; snprintf ( http_headers, max_headers_length, HTTP_RESPONSE_HEADERS_FORMAT, "HTTP/1.1", 405, "Method Not Allowed", strtime, "text/html", - config->webserv_banner, strlen ( http_response )); + config->webserv_banner, (unsigned long int) strlen ( http_response )); free ( strtime ); free ( line ); line = NULL;