42 lines
839 B
C
42 lines
839 B
C
|
/*
|
||
|
** Copyright 1998 - 1999 Double Precision, Inc. See COPYING for
|
||
|
** distribution information.
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
** $Id$
|
||
|
*/
|
||
|
#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);
|
||
|
}
|