140266059SGregory Neil Shapiro /* 2c1bfccf7SGregory Neil Shapiro * Copyright (c) 2001 Proofpoint, Inc. and its suppliers. 340266059SGregory Neil Shapiro * All rights reserved. 440266059SGregory Neil Shapiro * 540266059SGregory Neil Shapiro * By using this file, you agree to the terms and conditions set 640266059SGregory Neil Shapiro * forth in the LICENSE file which can be found at the top level of 740266059SGregory Neil Shapiro * the sendmail distribution. 840266059SGregory Neil Shapiro * 940266059SGregory Neil Shapiro */ 1040266059SGregory Neil Shapiro 1140266059SGregory Neil Shapiro #include <sm/gen.h> 124a67213fSGregory Neil Shapiro SM_RCSID("@(#)$Id: string.c,v 1.4 2013-11-22 20:51:43 ca Exp $") 1340266059SGregory Neil Shapiro 1440266059SGregory Neil Shapiro #include <ctype.h> 1540266059SGregory Neil Shapiro #include <errno.h> 1640266059SGregory Neil Shapiro 1740266059SGregory Neil Shapiro #include <sm/string.h> 1840266059SGregory Neil Shapiro 1940266059SGregory Neil Shapiro /* 2040266059SGregory Neil Shapiro ** STRIPQUOTES -- Strip quotes & quote bits from a string. 2140266059SGregory Neil Shapiro ** 2240266059SGregory Neil Shapiro ** Runs through a string and strips off unquoted quote 2340266059SGregory Neil Shapiro ** characters and quote bits. This is done in place. 2440266059SGregory Neil Shapiro ** 2540266059SGregory Neil Shapiro ** Parameters: 2640266059SGregory Neil Shapiro ** s -- the string to strip. 2740266059SGregory Neil Shapiro ** 2840266059SGregory Neil Shapiro ** Returns: 2940266059SGregory Neil Shapiro ** none. 3040266059SGregory Neil Shapiro */ 3140266059SGregory Neil Shapiro 3240266059SGregory Neil Shapiro void 3340266059SGregory Neil Shapiro stripquotes(s) 3440266059SGregory Neil Shapiro char *s; 3540266059SGregory Neil Shapiro { 3640266059SGregory Neil Shapiro register char *p; 3740266059SGregory Neil Shapiro register char *q; 3840266059SGregory Neil Shapiro register char c; 3940266059SGregory Neil Shapiro 4040266059SGregory Neil Shapiro if (s == NULL) 4140266059SGregory Neil Shapiro return; 4240266059SGregory Neil Shapiro 4340266059SGregory Neil Shapiro p = q = s; 4440266059SGregory Neil Shapiro do 4540266059SGregory Neil Shapiro { 4640266059SGregory Neil Shapiro c = *p++; 4740266059SGregory Neil Shapiro if (c == '\\') 4840266059SGregory Neil Shapiro c = *p++; 4940266059SGregory Neil Shapiro else if (c == '"') 5040266059SGregory Neil Shapiro continue; 5140266059SGregory Neil Shapiro *q++ = c; 5240266059SGregory Neil Shapiro } while (c != '\0'); 5340266059SGregory Neil Shapiro } 54cee0d44aSGregory Neil Shapiro 55cee0d44aSGregory Neil Shapiro /* 56cee0d44aSGregory Neil Shapiro ** UNFOLDSTRIPQUOTES -- Strip quotes & quote bits from a string. 57cee0d44aSGregory Neil Shapiro ** 58cee0d44aSGregory Neil Shapiro ** Parameters: 59cee0d44aSGregory Neil Shapiro ** s -- the string to strip. 60cee0d44aSGregory Neil Shapiro ** 61cee0d44aSGregory Neil Shapiro ** Returns: 62cee0d44aSGregory Neil Shapiro ** none. 63cee0d44aSGregory Neil Shapiro */ 64cee0d44aSGregory Neil Shapiro 65cee0d44aSGregory Neil Shapiro void unfoldstripquotes(s)66cee0d44aSGregory Neil Shapirounfoldstripquotes(s) 67cee0d44aSGregory Neil Shapiro char *s; 68cee0d44aSGregory Neil Shapiro { 69cee0d44aSGregory Neil Shapiro char *p, *q, c; 70cee0d44aSGregory Neil Shapiro 71cee0d44aSGregory Neil Shapiro if (s == NULL) 72cee0d44aSGregory Neil Shapiro return; 73cee0d44aSGregory Neil Shapiro 74cee0d44aSGregory Neil Shapiro p = q = s; 75cee0d44aSGregory Neil Shapiro do 76cee0d44aSGregory Neil Shapiro { 77cee0d44aSGregory Neil Shapiro c = *p++; 78cee0d44aSGregory Neil Shapiro if (c == '\\' || c == '\n') 79cee0d44aSGregory Neil Shapiro c = *p++; 80cee0d44aSGregory Neil Shapiro else if (c == '"') 81cee0d44aSGregory Neil Shapiro continue; 82cee0d44aSGregory Neil Shapiro *q++ = c; 83cee0d44aSGregory Neil Shapiro } while (c != '\0'); 84cee0d44aSGregory Neil Shapiro } 85