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);
 | 
						|
}
 |