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