From 6591c0a6c7a13fb431b8dd4e154ac7c87d6be67f Mon Sep 17 00:00:00 2001 From: Georg Hopp Date: Fri, 24 Feb 2012 16:26:36 +0100 Subject: [PATCH] changed callocs of memory not needed to be initialized to malloc --- include/http/header.h | 4 +- include/http/request/parser.h | 6 ++- src/Makefile.am | 2 +- src/http/header.c | 7 ++- src/http/header/add.c | 1 + src/http/header/to_string.c | 2 +- src/http/message/header_size_get.c | 2 +- src/http/request/parser/get_body.c | 4 +- src/http/request/parser/get_header.c | 6 +-- src/http/request/parser/get_request_line.c | 52 ++++++---------------- src/http/request/parser/parse.c | 2 +- src/http/response/404.c | 2 +- src/http/response/me.c | 2 +- 13 files changed, 37 insertions(+), 55 deletions(-) diff --git a/include/http/header.h b/include/http/header.h index 7959800..eac9dd8 100644 --- a/include/http/header.h +++ b/include/http/header.h @@ -38,13 +38,11 @@ CLASS(HttpHeader) { size_t nname; //!< len of name without \0 size_t nvalue[N_VALUES]; //!< len of value without \0 size_t cvalue; //!< count of values up to N_VALUE + size_t size; //!< full size of this header }; -HttpHeader httpHeaderParse(char * line); // @INFO: destructive - HttpHeader httpHeaderAdd(const HttpHeader *, HttpHeader); HttpHeader httpHeaderGet(const HttpHeader *, const char *, size_t); -size_t httpHeaderSizeGet(HttpHeader); size_t httpHeaderToString(HttpHeader, char *); #endif // __HTTP_HEADER_H__ diff --git a/include/http/request/parser.h b/include/http/request/parser.h index 2adb383..e16b7a2 100644 --- a/include/http/request/parser.h +++ b/include/http/request/parser.h @@ -63,8 +63,10 @@ CLASS(HttpRequestParser) { ssize_t httpRequestParserParse(HttpRequestParser, int); void httpRequestParserGetBody(HttpRequestParser); -void httpRequestParserGetRequestLine(HttpRequest, char *); -void httpRequestParserGetHeader(HttpRequest, char *, char *); +void httpRequestParserGetRequestLine( + HttpRequest, const char *, const char *); +void httpRequestParserGetHeader( + HttpRequest, const char *, const char *); #endif // __HTTP_REQUEST_PARSER_H__ diff --git a/src/Makefile.am b/src/Makefile.am index e9644a6..fc82844 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -29,7 +29,7 @@ WORKER = http/worker.c http/worker/process.c http/worker/write.c \ http/worker/get_asset.c http/worker/add_common_header.c WRITER = http/response/writer.c http/response/writer/write.c HEADER = http/header.c http/header/get.c http/header/add.c \ - http/header/size_get.c http/header/to_string.c + http/header/to_string.c PARSER = http/request/parser.c http/request/parser/get_header.c \ http/request/parser/parse.c http/request/parser/get_request_line.c \ http/request/parser/get_body.c diff --git a/src/http/header.c b/src/http/header.c index d732613..344ee87 100644 --- a/src/http/header.c +++ b/src/http/header.c @@ -43,14 +43,17 @@ httpHeaderCtor(void * _this, va_list * params) { value = va_arg(* params, char *); this->nvalue[0] = va_arg(* params, size_t); - this->name = malloc(this->nname); + this->name = malloc(this->nname + 1); + this->name[this->nname] = 0; memcpy(this->name, name, this->nname); this->hash = sdbm((unsigned char *)name, this->nname); - (this->value)[0] = malloc((this->nvalue)[0]); + (this->value)[0] = malloc((this->nvalue)[0] + 1); + (this->value)[0][(this->nvalue)[0]] = 0; memcpy((this->value)[0], value, (this->nvalue)[0]); this->cvalue = 1; + this->size = this->nname + 2 + (this->nvalue)[0] + 2; return 0; } diff --git a/src/http/header/add.c b/src/http/header/add.c index d69a38a..b8eda6a 100644 --- a/src/http/header/add.c +++ b/src/http/header/add.c @@ -58,6 +58,7 @@ httpHeaderAdd(const HttpHeader * root, HttpHeader header) } (found->nvalue)[found->cvalue] = (header->nvalue)[0]; (found->value)[(found->cvalue)++] = (header->value)[0]; + found->size += header->size; (header->value)[0] = NULL; delete(header); } diff --git a/src/http/header/to_string.c b/src/http/header/to_string.c index 1c6675a..124e804 100644 --- a/src/http/header/to_string.c +++ b/src/http/header/to_string.c @@ -28,7 +28,7 @@ size_t httpHeaderToString(HttpHeader header, char * string) { - size_t size = httpHeaderSizeGet(header); + size_t size = header->size; int i; for (i=0; icvalue; i++) { diff --git a/src/http/message/header_size_get.c b/src/http/message/header_size_get.c index b53ed7b..e46ab25 100644 --- a/src/http/message/header_size_get.c +++ b/src/http/message/header_size_get.c @@ -37,7 +37,7 @@ void addHeaderSize(const void * node, const VISIT which, const int depth) { if (endorder == which || leaf == which) { - size += httpHeaderSizeGet(*(HttpHeader *)node); + size += (*(HttpHeader *)node)->size; } } diff --git a/src/http/request/parser/get_body.c b/src/http/request/parser/get_body.c index a6477b0..c5758a1 100644 --- a/src/http/request/parser/get_body.c +++ b/src/http/request/parser/get_body.c @@ -55,7 +55,9 @@ httpRequestParserGetBody(HttpRequestParser this) else { message->type = HTTP_MESSAGE_BUFFERED; message->nbody = atoi((clen->value)[0]); - message->body = calloc(1, message->nbody); + if (0 < message->nbody) { + message->body = malloc(message->nbody); + } message->dbody = 0; } } diff --git a/src/http/request/parser/get_header.c b/src/http/request/parser/get_header.c index 84835bd..eadb079 100644 --- a/src/http/request/parser/get_header.c +++ b/src/http/request/parser/get_header.c @@ -36,15 +36,15 @@ httpRequestParserGetHeader( const char * line, const char * line_end) { - char * name = line; - char * value = strchr(line, ':'); + const char * name = line; + char * value = memchr(line, ':', line_end - line); size_t nname = (value++) - name; for (; *value == ' ' && *value != 0; value++); httpHeaderAdd( &(message->header), - new(HttpHeader, name, nname, value, line_end-value)); + new(HttpHeader, name, nname, value, line_end - value)); } // vim: set ts=4 sw=4: diff --git a/src/http/request/parser/get_request_line.c b/src/http/request/parser/get_request_line.c index 51a26e0..ed35c17 100644 --- a/src/http/request/parser/get_request_line.c +++ b/src/http/request/parser/get_request_line.c @@ -27,45 +27,18 @@ #include "http/request.h" #include "http/message.h" -#define MAX(x,y) ((x) > (y) ? (x) : (y)) -#define MIN(x,y) ((x) < (y) ? (x) : (y)) -#define MIN_SIZE(x,y) (MAX(strlen((x)), (y))) - -enum e_method { - OPTIONS=0, - GET, - HEAD, - POST, - PUT, - DELETE, - TRACE, - CONNECT -}; - -#define N_METHODS 8 - -static -const -char * method[N_METHODS] = { - "OPTIONS", - "GET", - "HEAD", - "POST", - "PUT", - "DELETE", - "TRACE", - "CONNECT" -}; - -ssize_t -httpRequestParserGetRequestLine(HttpRequestParser this, char * cr) +void +httpRequestParserGetRequestLine( + HttpRequest request, + const char * line, + const char * line_end) { char * method, * uri, * version; HttpMessage message = (HttpMessage)request; int mlen, ulen, vlen; method = line; - uri = strchr(line, ' '); + uri = memchr(line, ' ', line_end - line); if (NULL == uri) return; @@ -73,7 +46,7 @@ httpRequestParserGetRequestLine(HttpRequestParser this, char * cr) mlen = uri - method; for (; *uri == ' ' && *uri != 0; uri++); - version = strchr(uri, ' '); + version = memchr(uri, ' ', line_end - uri); if (NULL == version) return; @@ -81,13 +54,16 @@ httpRequestParserGetRequestLine(HttpRequestParser this, char * cr) ulen = version - uri; for (; *version == ' ' && *version != 0; version++); - vlen = strlen(version); + vlen = line_end - uri; - request->method = calloc(1, mlen + 1); + request->method = malloc(mlen + 1); + request->method[mlen] = 0; memcpy(request->method, method, mlen); - request->uri = calloc(1, ulen + 1); + request->uri = malloc(ulen + 1); + request->uri[ulen] = 0; memcpy(request->uri, uri, ulen); - message->version = calloc(1, vlen + 1); + message->version = malloc(vlen + 1); + message->version[vlen] = 0; memcpy(message->version, version, vlen); } diff --git a/src/http/request/parser/parse.c b/src/http/request/parser/parse.c index c7788b1..0ccfb0a 100644 --- a/src/http/request/parser/parse.c +++ b/src/http/request/parser/parse.c @@ -86,7 +86,7 @@ httpRequestParserParse(HttpRequestParser this, int fd) break; } - httpRequestParserGetRequestLine(this->cur_request, line); + httpRequestParserGetRequestLine(this->cur_request, line, line_end); if (! httpRequestHasValidMethod(this->cur_request)) { cbufRelease(this->buffer); this->ourLock = FALSE; diff --git a/src/http/response/404.c b/src/http/response/404.c index 4a85e4d..e17ac1c 100644 --- a/src/http/response/404.c +++ b/src/http/response/404.c @@ -62,7 +62,7 @@ httpResponse404() message->type = HTTP_MESSAGE_BUFFERED; message->nbody = sizeof(RESP_DATA) - 1; - message->body = calloc(1, sizeof(RESP_DATA)); + message->body = malloc(sizeof(RESP_DATA)); memcpy(message->body, RESP_DATA, sizeof(RESP_DATA)); nbuf = sprintf(buffer, "%d", message->nbody); diff --git a/src/http/response/me.c b/src/http/response/me.c index e743bc5..b20f6e4 100644 --- a/src/http/response/me.c +++ b/src/http/response/me.c @@ -90,7 +90,7 @@ httpResponseMe(int value) message->type = HTTP_MESSAGE_BUFFERED; message->nbody = sizeof(RESP_DATA)-1-2; - message->body = calloc(1, sizeof(RESP_DATA)-2); + message->body = malloc(sizeof(RESP_DATA)-2); sprintf(message->body, RESP_DATA, value); nbuf = sprintf(buffer, "%d", message->nbody);