xref: /freebsd/contrib/sendmail/libsm/t-ixlen.c (revision d39bd2c1388b520fcba9abed1932acacead60fba)
12fb4f839SGregory Neil Shapiro /*
22fb4f839SGregory Neil Shapiro  * Copyright (c) 2020 Proofpoint, Inc. and its suppliers.
32fb4f839SGregory Neil Shapiro  *	All rights reserved.
42fb4f839SGregory Neil Shapiro  *
52fb4f839SGregory Neil Shapiro  * By using this file, you agree to the terms and conditions set
62fb4f839SGregory Neil Shapiro  * forth in the LICENSE file which can be found at the top level of
72fb4f839SGregory Neil Shapiro  * the sendmail distribution.
82fb4f839SGregory Neil Shapiro  */
92fb4f839SGregory Neil Shapiro 
102fb4f839SGregory Neil Shapiro #include <sm/gen.h>
112fb4f839SGregory Neil Shapiro SM_IDSTR(id, "@(#)$Id: t-qic.c,v 1.10 2013-11-22 20:51:43 ca Exp $")
122fb4f839SGregory Neil Shapiro 
132fb4f839SGregory Neil Shapiro #include <stdio.h>
142fb4f839SGregory Neil Shapiro #include <stdlib.h>
152fb4f839SGregory Neil Shapiro #include <unistd.h>
162fb4f839SGregory Neil Shapiro #include <sm/sendmail.h>
172fb4f839SGregory Neil Shapiro #include <sm/ixlen.h>
182fb4f839SGregory Neil Shapiro #include <sm/test.h>
192fb4f839SGregory Neil Shapiro 
202fb4f839SGregory Neil Shapiro #if _FFR_8BITENVADDR
212fb4f839SGregory Neil Shapiro extern bool SmTestVerbose;
22*d39bd2c1SGregory Neil Shapiro static int Verbose = 0;
232fb4f839SGregory Neil Shapiro 
242fb4f839SGregory Neil Shapiro static void
chkilenx(str,len)252fb4f839SGregory Neil Shapiro chkilenx(str, len)
262fb4f839SGregory Neil Shapiro 	const char *str;
272fb4f839SGregory Neil Shapiro 	int len;
282fb4f839SGregory Neil Shapiro {
292fb4f839SGregory Neil Shapiro 	int xlen;
302fb4f839SGregory Neil Shapiro 
312fb4f839SGregory Neil Shapiro 	xlen = ilenx(str);
322fb4f839SGregory Neil Shapiro 	SM_TEST(len == xlen);
332fb4f839SGregory Neil Shapiro 	if (len != xlen)
34*d39bd2c1SGregory Neil Shapiro 		fprintf(stderr, "str=\"%s\", len=%d, expected=%d\n",
352fb4f839SGregory Neil Shapiro 			str, xlen, len);
362fb4f839SGregory Neil Shapiro }
372fb4f839SGregory Neil Shapiro 
382fb4f839SGregory Neil Shapiro static void
chkilen(str)39*d39bd2c1SGregory Neil Shapiro chkilen(str)
40*d39bd2c1SGregory Neil Shapiro 	char *str;
41*d39bd2c1SGregory Neil Shapiro {
42*d39bd2c1SGregory Neil Shapiro 	char *obp;
43*d39bd2c1SGregory Neil Shapiro 	int outlen, leni, lenx, ilen;
44*d39bd2c1SGregory Neil Shapiro 	char line_in[1024];
45*d39bd2c1SGregory Neil Shapiro 	XLENDECL
46*d39bd2c1SGregory Neil Shapiro 
47*d39bd2c1SGregory Neil Shapiro 	lenx = strlen(str);
48*d39bd2c1SGregory Neil Shapiro 	sm_strlcpy(line_in, str, sizeof(line_in));
49*d39bd2c1SGregory Neil Shapiro 	obp = quote_internal_chars(str, NULL, &outlen, NULL);
50*d39bd2c1SGregory Neil Shapiro 	leni = strlen(obp);
51*d39bd2c1SGregory Neil Shapiro 
52*d39bd2c1SGregory Neil Shapiro 	for (ilen = 0; *obp != '\0'; obp++, ilen++)
53*d39bd2c1SGregory Neil Shapiro 	{
54*d39bd2c1SGregory Neil Shapiro 		XLEN(*obp);
55*d39bd2c1SGregory Neil Shapiro 	}
56*d39bd2c1SGregory Neil Shapiro 	if (Verbose)
57*d39bd2c1SGregory Neil Shapiro 		fprintf(stderr, "str=\"%s\", ilen=%d, xlen=%d\n",
58*d39bd2c1SGregory Neil Shapiro 			str, ilen, xlen);
59*d39bd2c1SGregory Neil Shapiro 	SM_TEST(ilen == leni);
60*d39bd2c1SGregory Neil Shapiro 	if (ilen != leni)
61*d39bd2c1SGregory Neil Shapiro 		fprintf(stderr, "str=\"%s\", ilen=%d, leni=%d\n",
62*d39bd2c1SGregory Neil Shapiro 			str, ilen, leni);
63*d39bd2c1SGregory Neil Shapiro 	SM_TEST(xlen == lenx);
64*d39bd2c1SGregory Neil Shapiro 	if (xlen != lenx)
65*d39bd2c1SGregory Neil Shapiro 		fprintf(stderr, "str=\"%s\", xlen=%d, lenx=%d\n",
66*d39bd2c1SGregory Neil Shapiro 			str, xlen, lenx);
67*d39bd2c1SGregory Neil Shapiro }
68*d39bd2c1SGregory Neil Shapiro 
69*d39bd2c1SGregory Neil Shapiro static void
chkxleni(str,len)702fb4f839SGregory Neil Shapiro chkxleni(str, len)
712fb4f839SGregory Neil Shapiro 	const char *str;
722fb4f839SGregory Neil Shapiro 	int len;
732fb4f839SGregory Neil Shapiro {
742fb4f839SGregory Neil Shapiro 	int ilen;
752fb4f839SGregory Neil Shapiro 
762fb4f839SGregory Neil Shapiro 	ilen = xleni(str);
772fb4f839SGregory Neil Shapiro 	SM_TEST(len == ilen);
782fb4f839SGregory Neil Shapiro 	if (len != ilen)
79*d39bd2c1SGregory Neil Shapiro 		fprintf(stderr, "str=\"%s\", len=%d, expected=%d\n",
802fb4f839SGregory Neil Shapiro 			str, ilen, len);
812fb4f839SGregory Neil Shapiro }
822fb4f839SGregory Neil Shapiro 
832fb4f839SGregory Neil Shapiro 
842fb4f839SGregory Neil Shapiro static void
usage(prg)852fb4f839SGregory Neil Shapiro usage(prg)
862fb4f839SGregory Neil Shapiro 	const char *prg;
872fb4f839SGregory Neil Shapiro {
882fb4f839SGregory Neil Shapiro 	fprintf(stderr, "usage: %s [options]\n", prg);
892fb4f839SGregory Neil Shapiro 	fprintf(stderr, "options:\n");
902fb4f839SGregory Neil Shapiro 	fprintf(stderr, "-x    xleni\n");
912fb4f839SGregory Neil Shapiro }
922fb4f839SGregory Neil Shapiro 
932fb4f839SGregory Neil Shapiro int
main(argc,argv)942fb4f839SGregory Neil Shapiro main(argc, argv)
952fb4f839SGregory Neil Shapiro 	int argc;
962fb4f839SGregory Neil Shapiro 	char *argv[];
972fb4f839SGregory Neil Shapiro {
982fb4f839SGregory Neil Shapiro 	int o, len;
99*d39bd2c1SGregory Neil Shapiro 	bool x, both;
1002fb4f839SGregory Neil Shapiro 	char line[1024];
1012fb4f839SGregory Neil Shapiro 
102*d39bd2c1SGregory Neil Shapiro 	x = both = false;
103*d39bd2c1SGregory Neil Shapiro 	while ((o = getopt(argc, argv, "bxV")) != -1)
1042fb4f839SGregory Neil Shapiro 	{
1052fb4f839SGregory Neil Shapiro 		switch ((char) o)
1062fb4f839SGregory Neil Shapiro 		{
107*d39bd2c1SGregory Neil Shapiro 		  case 'b':
108*d39bd2c1SGregory Neil Shapiro 			both = true;
109*d39bd2c1SGregory Neil Shapiro 			break;
110*d39bd2c1SGregory Neil Shapiro 
1112fb4f839SGregory Neil Shapiro 		  case 'x':
1122fb4f839SGregory Neil Shapiro 			x = true;
1132fb4f839SGregory Neil Shapiro 			break;
1142fb4f839SGregory Neil Shapiro 
115*d39bd2c1SGregory Neil Shapiro 		  case 'V':
116*d39bd2c1SGregory Neil Shapiro 			Verbose++;
117*d39bd2c1SGregory Neil Shapiro 			break;
118*d39bd2c1SGregory Neil Shapiro 
1192fb4f839SGregory Neil Shapiro 		  default:
1202fb4f839SGregory Neil Shapiro 			usage(argv[0]);
1212fb4f839SGregory Neil Shapiro 			exit(1);
1222fb4f839SGregory Neil Shapiro 		}
1232fb4f839SGregory Neil Shapiro 	}
1242fb4f839SGregory Neil Shapiro 
1252fb4f839SGregory Neil Shapiro 	sm_test_begin(argc, argv, "test ilenx");
1262fb4f839SGregory Neil Shapiro 
127*d39bd2c1SGregory Neil Shapiro 	if (both)
128*d39bd2c1SGregory Neil Shapiro 	{
129*d39bd2c1SGregory Neil Shapiro 		while (fscanf(stdin, "%s\n", line) == 1)
130*d39bd2c1SGregory Neil Shapiro 			chkilen(line);
131*d39bd2c1SGregory Neil Shapiro 		return sm_test_end();
132*d39bd2c1SGregory Neil Shapiro 	}
1332fb4f839SGregory Neil Shapiro 	while (fscanf(stdin, "%d:%s\n", &len, line) == 2)
1342fb4f839SGregory Neil Shapiro 	{
1352fb4f839SGregory Neil Shapiro 		if (x)
1362fb4f839SGregory Neil Shapiro 			chkxleni(line, len);
1372fb4f839SGregory Neil Shapiro 		else
1382fb4f839SGregory Neil Shapiro 			chkilenx(line, len);
1392fb4f839SGregory Neil Shapiro 	}
1402fb4f839SGregory Neil Shapiro 
1412fb4f839SGregory Neil Shapiro 	return sm_test_end();
1422fb4f839SGregory Neil Shapiro }
1432fb4f839SGregory Neil Shapiro #else /* _FFR_8BITENVADDR */
1442fb4f839SGregory Neil Shapiro int
1452fb4f839SGregory Neil Shapiro main(argc, argv)
1462fb4f839SGregory Neil Shapiro 	int argc;
1472fb4f839SGregory Neil Shapiro 	char *argv[];
1482fb4f839SGregory Neil Shapiro {
1492fb4f839SGregory Neil Shapiro 	return 0;
1502fb4f839SGregory Neil Shapiro }
1512fb4f839SGregory Neil Shapiro #endif /* _FFR_8BITENVADDR */
152