140266059SGregory Neil Shapiro /* 25dd76dd0SGregory 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> 124313cc83SGregory 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 } 54*5b0945b5SGregory Neil Shapiro 55*5b0945b5SGregory Neil Shapiro /* 56*5b0945b5SGregory Neil Shapiro ** UNFOLDSTRIPQUOTES -- Strip quotes & quote bits from a string. 57*5b0945b5SGregory Neil Shapiro ** 58*5b0945b5SGregory Neil Shapiro ** Parameters: 59*5b0945b5SGregory Neil Shapiro ** s -- the string to strip. 60*5b0945b5SGregory Neil Shapiro ** 61*5b0945b5SGregory Neil Shapiro ** Returns: 62*5b0945b5SGregory Neil Shapiro ** none. 63*5b0945b5SGregory Neil Shapiro */ 64*5b0945b5SGregory Neil Shapiro 65*5b0945b5SGregory Neil Shapiro void unfoldstripquotes(s)66*5b0945b5SGregory Neil Shapirounfoldstripquotes(s) 67*5b0945b5SGregory Neil Shapiro char *s; 68*5b0945b5SGregory Neil Shapiro { 69*5b0945b5SGregory Neil Shapiro char *p, *q, c; 70*5b0945b5SGregory Neil Shapiro 71*5b0945b5SGregory Neil Shapiro if (s == NULL) 72*5b0945b5SGregory Neil Shapiro return; 73*5b0945b5SGregory Neil Shapiro 74*5b0945b5SGregory Neil Shapiro p = q = s; 75*5b0945b5SGregory Neil Shapiro do 76*5b0945b5SGregory Neil Shapiro { 77*5b0945b5SGregory Neil Shapiro c = *p++; 78*5b0945b5SGregory Neil Shapiro if (c == '\\' || c == '\n') 79*5b0945b5SGregory Neil Shapiro c = *p++; 80*5b0945b5SGregory Neil Shapiro else if (c == '"') 81*5b0945b5SGregory Neil Shapiro continue; 82*5b0945b5SGregory Neil Shapiro *q++ = c; 83*5b0945b5SGregory Neil Shapiro } while (c != '\0'); 84*5b0945b5SGregory Neil Shapiro } 85