static char rcsid[] = "@(#)$Id: len_next.c,v 1.2 1995/09/29 17:41:15 wfp5p Exp $";
/*******************************************************************************
* The Elm Mail System - $Revision: 1.2 $ $State: Exp $
*
* Copyright (c) 1988-1995 USENET Community Trust
*******************************************************************************
* Bug reports, patches, comments, suggestions should be sent to:
*
* Bill Pemberton, Elm Coordinator
* flash@virginia.edu
*
*******************************************************************************
* $Log: len_next.c,v $
* Revision 1.2 1995/09/29 17:41:15 wfp5p
* Alpha 8 (Chip's big changes)
*
* Revision 1.1.1.1 1995/04/19 20:38:32 wfp5p
* Initial import of elm 2.4 PL0 as base for elm 2.5.
*
******************************************************************************/
/** get the length of the next part of the address/data field
This code returns the length of the next part of the
string field containing address/data. It takes into account
quoting via " as well as \ escapes.
Quoting via ' is not taken into account, as RFC-822 does not
consider a ' character a valid 'quoting character'
A 1 is returned for a single character unless:
A 0 is returned at end of string.
A 2 is returned for strings that start \
The length of quoted sections is returned for quoted fields
**/
#include "elm_defs.h"
int
len_next_part(str)
register const char *str;
{
register const char *s;
switch (*str) {
case '\0':
return 0;
case '\\':
return (*++str != '\0' ? 2 : 1);
case '"':
for (s = str+1 ; *s != '\0' ; ++s) {
if (*s == '\\') {
if (*++s == '\0')
break;
} else if (*s == '"') {
++s;
break;
}
}
return (s - str);
default:
return 1;
}
/*NOTREACHED*/
}
#ifdef _TEST
main()
{
char buf[256], *s;
int len;
while (gets(buf) != NULL) {
for (s = buf ; (len = len_next_part(s)) > 0 ; s += len)
printf("%4d %-.*s\n", len, len, s);
}
exit(0);
}
#endif
syntax highlighted by Code2HTML, v. 0.9.1