/* $Id: cleanfrom.c 6135 2003-01-19 01:15:40Z rra $
**
*/
#include "config.h"
#include "clibrary.h"
#include "libinn.h"
#define LPAREN '('
#define RPAREN ')'
/*
** Clean up a from line, making the following transformations:
** address address
** address (stuff) address
** stuff <address> address
*/
void HeaderCleanFrom(char *from)
{
char *p;
char *end;
int len;
if ((len = strlen(from)) == 0)
return;
/* concatenate folded header */
for (p = end = from ; p < from + len ;) {
if (*p == '\n') {
if ((p + 1 < from + len) && ISWHITE(p[1])) {
if ((p - 1 >= from) && (p[-1] == '\r')) {
end--;
*end = p[1];
p += 2;
} else {
*end = p[1];
p++;
}
} else {
*end = '\0';
break;
}
} else
*end++ = *p++;
}
if (end != from)
*end = '\0';
/* Do pretty much the equivalent of sed's "s/(.*)//g"; */
while ((p = strchr(from, LPAREN)) && (end = strchr(p, RPAREN))) {
while (*++end)
*p++ = *end;
*p = '\0';
}
/* Do pretty much the equivalent of sed's "s/\".*\"//g"; */
while ((p = strchr(from, '"')) && (end = strchr(p, '"'))) {
while (*++end)
*p++ = *end;
*p = '\0';
}
/* Do the equivalent of sed's "s/.*<\(.*\)>/\1/" */
if ((p = strrchr(from, '<')) && (end = strrchr(p, '>'))) {
while (++p < end)
*from++ = *p;
*from = '\0';
}
/* drop white spaces */
if ((len = strlen(from)) == 0)
return;
for (p = end = from ; p < from + len ;) {
if (ISWHITE(*p)) {
p++;
continue;
}
*end++ = *p++;
}
if (end != from)
*end = '\0';
}
syntax highlighted by Code2HTML, v. 0.9.1