From 2c64b3fa1b30472dba90835a81a6d6c31ed878f5 Mon Sep 17 00:00:00 2001 From: "Bjarni R. Einarsson" Date: Thu, 15 Sep 2016 13:14:23 +0200 Subject: [PATCH] New utils: free_outside() and zero_nth_char() --- libpagekite/pkutils.c | 16 ++++++++++++++++ libpagekite/pkutils.h | 2 ++ 2 files changed, 18 insertions(+) diff --git a/libpagekite/pkutils.c b/libpagekite/pkutils.c index eb49c75..0e3bfc9 100644 --- a/libpagekite/pkutils.c +++ b/libpagekite/pkutils.c @@ -59,6 +59,22 @@ int zero_first_whitespace(int length, char* data) return 0; } +int zero_nth_char(int n, char c, int length, char* data) +{ + int i; + for (i = 0; i < length; i++) + { + if (data[i] == c) + { + if (--n < 1) { + data[i] = '\0'; + return i+1; + } + } + } + return 0; +} + char *skip_http_header(int length, const char* data) { int i, lfs; diff --git a/libpagekite/pkutils.h b/libpagekite/pkutils.h index e0176f1..51aac8a 100644 --- a/libpagekite/pkutils.h +++ b/libpagekite/pkutils.h @@ -19,9 +19,11 @@ Note: For alternate license terms, see the file COPYING.md. ******************************************************************************/ #define strncpyz(dest, src, len) { strncpy(dest, src, len); dest[len] = '\0'; } +#define free_outside(ptr, buf, len) { if ((ptr < buf) || (ptr >= buf+len)) free(ptr); } int zero_first_crlf(int, char*); int zero_first_whitespace(int, char*); +int zero_nth_char(int, char, int, char*); char* skip_http_header(int, const char*); char* collapse_whitespace(char*); int dbg_write(int, char *, int);