struct cap_hdr {
struct cap_hdr *next;
- char *name; /* header name, case insensitive */
- int namelen; /* length of the header name, to speed-up lookups */
+ char *name; /* header name, case insensitive, NULL if not header */
+ int namelen; /* length of the header name, to speed-up lookups, 0 if !name */
int len; /* capture length, not including terminal zero */
int index; /* index in the output array */
struct pool_head *pool; /* pool of pre-allocated memory area of (len+1) bytes */
/*
* Capture headers from message starting at <som> according to header list
- * <cap_hdr>, and fill the <idx> structure appropriately.
+ * <cap_hdr>, and fill the <cap> pointers appropriately.
*/
void capture_headers(char *som, struct hdr_idx *idx,
char **cap, struct cap_hdr *cap_hdr)
sov++;
for (h = cap_hdr; h; h = h->next) {
- if ((h->namelen == col - sol) &&
+ if (h->namelen && (h->namelen == col - sol) &&
(strncasecmp(sol, h->name, h->namelen) == 0)) {
if (cap[h->index] == NULL)
cap[h->index] =