summaryrefslogtreecommitdiffstats
path: root/tools/rfc822parse.c
diff options
context:
space:
mode:
authorWerner Koch <wk@gnupg.org>2004-07-20 13:21:53 +0200
committerWerner Koch <wk@gnupg.org>2004-07-20 13:21:53 +0200
commit224da037849fd7dd30a221db9e1c6eba037c5689 (patch)
treeb524bf93b5128bf8e4ae94feebf67f518bb2ef4e /tools/rfc822parse.c
parent(gpgsm_validate_chain): The trust check didn't (diff)
downloadgnupg2-224da037849fd7dd30a221db9e1c6eba037c5689.tar.xz
gnupg2-224da037849fd7dd30a221db9e1c6eba037c5689.zip
* rfc822parse.c (rfc822parse_get_field): Add arg VALUEOFF.
Diffstat (limited to 'tools/rfc822parse.c')
-rw-r--r--tools/rfc822parse.c25
1 files changed, 22 insertions, 3 deletions
diff --git a/tools/rfc822parse.c b/tools/rfc822parse.c
index be1cf4a47..3379886de 100644
--- a/tools/rfc822parse.c
+++ b/tools/rfc822parse.c
@@ -1,6 +1,6 @@
/* rfc822parse.c - Simple mail and MIME parser
* Copyright (C) 1999, 2000 Werner Koch, Duesseldorf
- * Copyright (C) 2003, g10 Code GmbH
+ * Copyright (C) 2003, 2004 g10 Code GmbH
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
@@ -509,7 +509,7 @@ rfc822parse_finish (rfc822parse_t msg)
/****************
* Get a copy of a header line. The line is returned as one long
* string with LF to separate the continuation line. Caller must free
- * the return buffer. which may be used to enumerate over all lines.
+ * the return buffer. WHICH may be used to enumerate over all lines.
* Wildcards are allowed. This function works on the current headers;
* i.e. the regular mail headers or the MIME headers of the current
* part.
@@ -521,9 +521,13 @@ rfc822parse_finish (rfc822parse_t msg)
* Returns a newly allocated buffer or NULL on error. errno is set in
* case of a memory failure or set to 0 if the requested field is not
* available.
+ *
+ * If VALUEOFF is not NULL it will receive the offset of the first non
+ * space character in th value of the line.
*/
char *
-rfc822parse_get_field (rfc822parse_t msg, const char *name, int which)
+rfc822parse_get_field (rfc822parse_t msg, const char *name, int which,
+ size_t *valueoff)
{
HDR_LINE h, h2;
char *buf, *p;
@@ -552,6 +556,21 @@ rfc822parse_get_field (rfc822parse_t msg, const char *name, int which)
}
p[-1] = 0;
}
+
+ if (valueoff)
+ {
+ p = strchr (buf, ':');
+ if (!p)
+ *valueoff = 0; /* Oops: should never happen. */
+ else
+ {
+ p++;
+ while (*p == ' ' || *p == '\t' || *p == '\r' || *p == '\n')
+ p++;
+ *valueoff = p - buf;
+ }
+ }
+
return buf;
}