logswan

Fast Web log analyzer using probabilistic data structures
Log | Files | Refs | README | LICENSE

commit cdf6d5cadab4266d1d61ab9dbb762e0c157e48d8
parent 4c1c3b96db929d0aef211e4cf06d9fef5be8a3ca
Author: Frederic Cambus <fred@statdns.com>
Date:   Sun, 30 Oct 2016 21:05:21 +0100

Use strtok_r instead of strtok to tokenize lines

Diffstat:
MTODO | 1-
Msrc/parse.c | 37+++++++++++++++++++++----------------
2 files changed, 21 insertions(+), 17 deletions(-)

diff --git a/TODO b/TODO @@ -1,2 +1 @@ -- Use strtok_r instead of strtok to tokenize lines? - Companion tool to split logs by day diff --git a/src/parse.c b/src/parse.c @@ -5,7 +5,7 @@ /* http://www.logswan.org */ /* */ /* Created: 2015-05-31 */ -/* Last Updated: 2016-07-18 */ +/* Last Updated: 2016-10-30 */ /* */ /* Logswan is released under the BSD 2-Clause license. */ /* See LICENSE file for details. */ @@ -17,45 +17,50 @@ #include "parse.h" void parseDate(struct date* parsedDate, char *date) { - parsedDate->day = strtok(date, "/"); - parsedDate->month = strtok(NULL, "/"); - parsedDate->year = strtok(NULL, ":"); - parsedDate->hour = strtok(NULL, ":"); - parsedDate->minute = strtok(NULL, ":"); - parsedDate->second = strtok(NULL, " "); + char *last; + + parsedDate->day = strtok_r(date, "/", &last); + parsedDate->month = strtok_r(NULL, "/", &last); + parsedDate->year = strtok_r(NULL, ":", &last); + parsedDate->hour = strtok_r(NULL, ":", &last); + parsedDate->minute = strtok_r(NULL, ":", &last); + parsedDate->second = strtok_r(NULL, " ", &last); } void parseLine(struct logLine* parsedLine, char *lineBuffer) { + char *last; + if (*lineBuffer) { /* Remote host */ - parsedLine->remoteHost = strtok(lineBuffer, " "); + parsedLine->remoteHost = strtok_r(lineBuffer, " ", &last); /* User-identifier */ - strtok(NULL, " "); + strtok_r(NULL, " ", &last); /* User ID */ - strtok(NULL, "["); + strtok_r(NULL, "[", &last); /* Date */ - parsedLine->date = strtok(NULL, "]"); + parsedLine->date = strtok_r(NULL, "]", &last); /* Requested resource */ - strtok(NULL, "\""); - parsedLine->request = strtok(NULL, "\""); + strtok_r(NULL, "\"", &last); + parsedLine->request = strtok_r(NULL, "\"", &last); /* HTTP status codes */ - parsedLine->statusCode = strtok(NULL, " "); + parsedLine->statusCode = strtok_r(NULL, " ", &last); /* Returned object size */ - parsedLine->objectSize = strtok(NULL, " \""); + parsedLine->objectSize = strtok_r(NULL, " \"", &last); } } void parseRequest(struct request* parsedRequest, char *request) { + char *last; char *pch = strrchr(request, ' '); if (pch) { parsedRequest->protocol = pch + 1; - parsedRequest->method = strtok(request, " "); + parsedRequest->method = strtok_r(request, " ", &last); } }