summaryrefslogtreecommitdiffstats
path: root/rfc2045/rfc2045decode.c
diff options
context:
space:
mode:
authorSam Varshavchik2013-08-19 16:39:41 -0400
committerSam Varshavchik2013-08-25 14:43:51 -0400
commit9c45d9ad13fdf439d44d7443ae75da15ea0223ed (patch)
tree7a81a04cb51efb078ee350859a64be2ebc6b8813 /rfc2045/rfc2045decode.c
parenta9520698b770168d1f33d6301463bb70a19655ec (diff)
downloadcourier-libs-9c45d9ad13fdf439d44d7443ae75da15ea0223ed.tar.bz2
Initial checkin
Imported from subversion report, converted to git. Updated all paths in scripts and makefiles, reflecting the new directory hierarchy.
Diffstat (limited to 'rfc2045/rfc2045decode.c')
-rw-r--r--rfc2045/rfc2045decode.c40
1 files changed, 40 insertions, 0 deletions
diff --git a/rfc2045/rfc2045decode.c b/rfc2045/rfc2045decode.c
new file mode 100644
index 0000000..1fa2d79
--- /dev/null
+++ b/rfc2045/rfc2045decode.c
@@ -0,0 +1,40 @@
+/*
+** Copyright 1998 - 1999 Double Precision, Inc. See COPYING for
+** distribution information.
+*/
+
+/*
+*/
+#include "rfc2045.h"
+
+static void decode(struct rfc2045id *topid,
+ struct rfc2045id **childidptr,
+ struct rfc2045 *r,
+ void (*func)(struct rfc2045 *, struct rfc2045id *, void *),
+ void *ptr)
+{
+struct rfc2045id nextid;
+
+ *childidptr=0;
+ (*func)(r, topid, ptr);
+ *childidptr=&nextid;
+ nextid.idnum=1;
+ if (r->content_type && strncmp(r->content_type, "multipart/", 10) == 0)
+ nextid.idnum=0;
+ for (r=r->firstpart; r; r=r->next)
+ {
+ if (nextid.idnum)
+ decode(topid, &nextid.next, r, func, ptr);
+ ++nextid.idnum;
+ }
+}
+
+void rfc2045_decode(struct rfc2045 *p,
+ void (*func)(struct rfc2045 *, struct rfc2045id *, void *),
+ void *ptr)
+{
+struct rfc2045id topid;
+
+ topid.idnum=1;
+ decode(&topid, &topid.next, p, func, ptr);
+}