X-Git-Url: https://git.exim.org/exim.git/blobdiff_plain/0a49a7a4f1090b6f1ce1d0f9d969804c9226b53e..d12746bc15d83ab821be36975da0179672708bc1:/src/src/header.c diff --git a/src/src/header.c b/src/src/header.c index 1b6bf56d1..74df32ca1 100644 --- a/src/src/header.c +++ b/src/src/header.c @@ -1,10 +1,8 @@ -/* $Cambridge: exim/src/src/header.c,v 1.8 2009/11/16 19:50:37 nm4 Exp $ */ - /************************************************* * Exim - an Internet mail transport agent * *************************************************/ -/* Copyright (c) University of Cambridge 1995 - 2009 */ +/* Copyright (c) University of Cambridge 1995 - 2016 */ /* See the file NOTICE for conditions of use and distribution. */ @@ -30,7 +28,7 @@ Returns: TRUE or FALSE */ BOOL -header_testname(header_line *h, uschar *name, int len, BOOL notdel) +header_testname(header_line *h, const uschar *name, int len, BOOL notdel) { uschar *tt; if (h->type == '*' && notdel) return FALSE; @@ -46,7 +44,8 @@ return *tt == ':'; header_testname() above. */ BOOL -header_testname_incomplete(header_line *h, uschar *name, int len, BOOL notdel) +header_testname_incomplete(header_line *h, const uschar *name, + int len, BOOL notdel) { if (h->type == '*' && notdel) return FALSE; if (h->text == NULL || strncmpic(h->text, name, len) != 0) return FALSE; @@ -92,23 +91,25 @@ Returns: nothing static void header_add_backend(BOOL after, uschar *name, BOOL topnot, int type, - char *format, va_list ap) + const char *format, va_list ap) { header_line *h, *new; header_line **hptr; uschar *p, *q; uschar buffer[HEADER_ADD_BUFFER_SIZE]; +gstring gs = { .size = HEADER_ADD_BUFFER_SIZE, .ptr = 0, .s = buffer }; -if (header_last == NULL) return; +if (!header_last) return; -if (!string_vformat(buffer, sizeof(buffer), format, ap)) +if (!string_vformat(&gs, FALSE, format, ap)) log_write(0, LOG_MAIN|LOG_PANIC_DIE, "string too long in header_add: " - "%.100s ...", buffer); + "%.100s ...", string_from_gstring(&gs)); +string_from_gstring(&gs); /* Find where to insert this header */ -if (name == NULL) +if (!name) { if (after) { @@ -120,10 +121,10 @@ if (name == NULL) hptr = &header_list; /* header_list->text can be NULL if we get here between when the new - received header is allocated and when it is acutally filled in. We want + received header is allocated and when it is actually filled in. We want that header to be first, so skip it for now. */ - if (header_list->text == NULL) + if (!header_list->text) hptr = &header_list->next; h = *hptr; } @@ -133,17 +134,16 @@ else { int len = Ustrlen(name); - /* Find the first non-deleted header witht the correct name. */ + /* Find the first non-deleted header with the correct name. */ - for (hptr = &header_list; (h = *hptr) != NULL; hptr = &(h->next)) - { - if (header_testname(h, name, len, TRUE)) break; - } + for (hptr = &header_list; (h = *hptr); hptr = &h->next) + if (header_testname(h, name, len, TRUE)) + break; /* Handle the case where no header is found. To insert at the bottom, nothing needs to be done. */ - if (h == NULL) + if (!h) { if (topnot) { @@ -156,14 +156,12 @@ else true. In this case, we want to include deleted headers in the block. */ else if (after) - { for (;;) { - if (h->next == NULL || !header_testname(h, name, len, FALSE)) break; + if (!h->next || !header_testname(h, name, len, FALSE)) break; hptr = &(h->next); h = h->next; } - } } /* Loop for multiple header lines, taking care about continuations. At this @@ -175,7 +173,7 @@ for (p = q = buffer; *p != 0; ) for (;;) { q = Ustrchr(q, '\n'); - if (q == NULL) q = p + Ustrlen(p); + if (!q) q = p + Ustrlen(p); if (*(++q) != ' ' && *q != '\t') break; } @@ -188,7 +186,7 @@ for (p = q = buffer; *p != 0; ) *hptr = new; hptr = &(new->next); - if (h == NULL) header_last = new; + if (!h) header_last = new; p = q; } } @@ -213,7 +211,7 @@ Returns: nothing void header_add_at_position(BOOL after, uschar *name, BOOL topnot, int type, - char *format, ...) + const char *format, ...) { va_list ap; va_start(ap, format); @@ -238,7 +236,7 @@ Returns: nothing */ void -header_add(int type, char *format, ...) +header_add(int type, const char *format, ...) { va_list ap; va_start(ap, format); @@ -264,7 +262,7 @@ Returns: nothing */ void -header_remove(int occ, uschar *name) +header_remove(int occ, const uschar *name) { header_line *h; int hcount = 0; @@ -451,10 +449,11 @@ for (s = strings; s != NULL; s = s->next) va_start(ap, count); for (i = 0; i < count; i++) - { if (one_pattern_match(name, slen, has_addresses, va_arg(ap, uschar *))) + { + va_end(ap); return cond; - } + } va_end(ap); return !cond;