about summary refs log tree commit diff
path: root/rfc2045.c
diff options
context:
space:
mode:
authorChristian Neukirchen <chneukirchen@gmail.com>2016-07-16 22:18:46 +0200
committerChristian Neukirchen <chneukirchen@gmail.com>2016-07-16 22:18:46 +0200
commit248ed48727433736fdb37feee4968d9f5e38ce41 (patch)
tree313c1aca22be8baf7a47e9791378e6698421a6e1 /rfc2045.c
parentd1e4b5f503d32777a22ae2a17e019c5ba2584987 (diff)
downloadmblaze-248ed48727433736fdb37feee4968d9f5e38ce41.tar.gz
mblaze-248ed48727433736fdb37feee4968d9f5e38ce41.tar.xz
mblaze-248ed48727433736fdb37feee4968d9f5e38ce41.zip
rfc2045: add blaze822_mime_parameter
Diffstat (limited to 'rfc2045.c')
-rw-r--r--rfc2045.c41
1 files changed, 41 insertions, 0 deletions
diff --git a/rfc2045.c b/rfc2045.c
index c34d03f..881bd5f 100644
--- a/rfc2045.c
+++ b/rfc2045.c
@@ -59,6 +59,47 @@ blaze822_mime_body(struct message *msg,
 }
 
 int
+blaze822_mime_parameter(char *s, char *name, char **starto, char **stopo)
+{
+	s = strchr(s, ';');
+	if (!s)
+		return 0;
+	s++;
+
+	size_t namelen = strlen(name);
+
+	while (*s) {
+		while (iswsp(*s))
+			s++;
+		if (strncasecmp(s, name, namelen) == 0 && s[namelen] == '=') {
+			s += namelen + 1;
+			break;
+		}
+		s = strchr(s+1, ';');
+		if (!s)
+			return 0;
+		s++;
+	}
+	if (!s || !*s)
+		return 0;
+	char *e;
+	if (*s == '"') {
+		s++;
+		e = strchr(s, '"');
+		if (!e)
+			return 0;
+	} else {
+		e = s;
+		while (*e && !iswsp(*e) && *e != ';')
+			e++;
+	}
+
+	*starto = s;
+	*stopo = e;
+	return 1;
+}
+
+int
 blaze822_multipart(struct message *msg, struct message **imsg)
 {
 	char *s = blaze822_hdr(msg, "content-type");