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