51 lines
		
	
	
		
			921 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			51 lines
		
	
	
		
			921 B
		
	
	
	
		
			C
		
	
	
	
	
	
/*
 | 
						|
** Copyright 1998 - 1999 Double Precision, Inc.  See COPYING for
 | 
						|
** distribution information.
 | 
						|
*/
 | 
						|
 | 
						|
/*
 | 
						|
** $Id$
 | 
						|
*/
 | 
						|
#include	"rfc2045.h"
 | 
						|
#include	<ctype.h>
 | 
						|
 | 
						|
struct rfc2045findstruct {
 | 
						|
 | 
						|
	const char *partnum;
 | 
						|
	struct rfc2045 *ptr;
 | 
						|
	} ;
 | 
						|
 | 
						|
static void do_decode(struct rfc2045 *p, struct rfc2045id *id, void *ptr)
 | 
						|
{
 | 
						|
struct rfc2045findstruct *fs=(struct rfc2045findstruct *)ptr;
 | 
						|
const char *partnum=fs->partnum;
 | 
						|
unsigned n;
 | 
						|
 | 
						|
	while (id)
 | 
						|
	{
 | 
						|
		if (!isdigit((int)(unsigned char)*partnum))	return;
 | 
						|
		n=0;
 | 
						|
		while (isdigit((int)(unsigned char)*partnum))
 | 
						|
			n=n*10 + *partnum++ - '0';
 | 
						|
		if (*partnum)
 | 
						|
		{
 | 
						|
			if (*partnum != '.')	return;
 | 
						|
			++partnum;
 | 
						|
		}
 | 
						|
		if (n != (unsigned)id->idnum)	return;
 | 
						|
		id=id->next;
 | 
						|
	}
 | 
						|
	if ( *partnum == '\0')	fs->ptr=p;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
struct rfc2045 *rfc2045_find(struct rfc2045 *p, const char *str)
 | 
						|
{
 | 
						|
struct	rfc2045findstruct fs;
 | 
						|
 | 
						|
	fs.partnum=str;
 | 
						|
	fs.ptr=0;
 | 
						|
	rfc2045_decode(p, &do_decode, &fs);
 | 
						|
	return (fs.ptr);
 | 
						|
}
 |