140266059SGregory Neil Shapiro /* 25dd76dd0SGregory Neil Shapiro * Copyright (c) 2000-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> 12*4313cc83SGregory Neil Shapiro SM_IDSTR(id, "@(#)$Id: t-strl.c,v 1.16 2013-11-22 20:51:44 ca Exp $") 1340266059SGregory Neil Shapiro 1440266059SGregory Neil Shapiro #include <stdlib.h> 1540266059SGregory Neil Shapiro #include <stdio.h> 1640266059SGregory Neil Shapiro #include <sm/heap.h> 1740266059SGregory Neil Shapiro #include <sm/string.h> 1840266059SGregory Neil Shapiro #include <sm/test.h> 1940266059SGregory Neil Shapiro 2040266059SGregory Neil Shapiro #define MAXL 16 2140266059SGregory Neil Shapiro #define N 5 2240266059SGregory Neil Shapiro #define SIZE 128 2340266059SGregory Neil Shapiro 2440266059SGregory Neil Shapiro int 2540266059SGregory Neil Shapiro main(argc, argv) 2640266059SGregory Neil Shapiro int argc; 2740266059SGregory Neil Shapiro char *argv[]; 2840266059SGregory Neil Shapiro { 2940266059SGregory Neil Shapiro char *s1, *s2, *s3; 3040266059SGregory Neil Shapiro int one, two, k; 3140266059SGregory Neil Shapiro char src1[N][SIZE], dst1[SIZE], dst2[SIZE]; 3240266059SGregory Neil Shapiro char *r; 3340266059SGregory Neil Shapiro 3440266059SGregory Neil Shapiro sm_test_begin(argc, argv, "test strl* string functions"); 3540266059SGregory Neil Shapiro s1 = "abc"; 3640266059SGregory Neil Shapiro s2 = "123"; 3740266059SGregory Neil Shapiro s3 = sm_malloc_x(MAXL); 3840266059SGregory Neil Shapiro 3940266059SGregory Neil Shapiro SM_TEST(sm_strlcpy(s3, s1, 4) == 3); 4040266059SGregory Neil Shapiro SM_TEST(strcmp(s1, s3) == 0); 4140266059SGregory Neil Shapiro 4240266059SGregory Neil Shapiro SM_TEST(sm_strlcat(s3, s2, 8) == 6); 4340266059SGregory Neil Shapiro r ="abc123"; 4440266059SGregory Neil Shapiro SM_TEST(strcmp(s3, r) == 0); 4540266059SGregory Neil Shapiro 4640266059SGregory Neil Shapiro SM_TEST(sm_strlcpy(s3, s1, 2) == 3); 4740266059SGregory Neil Shapiro r = "a"; 4840266059SGregory Neil Shapiro SM_TEST(strcmp(s3, r) == 0); 4940266059SGregory Neil Shapiro 5040266059SGregory Neil Shapiro SM_TEST(sm_strlcat(s3, s2, 3) == 4); 5140266059SGregory Neil Shapiro r = "a1"; 5240266059SGregory Neil Shapiro SM_TEST(strcmp(s3, r) == 0); 5340266059SGregory Neil Shapiro 5440266059SGregory Neil Shapiro SM_TEST(sm_strlcpy(s3, s1, 4) == 3); 5540266059SGregory Neil Shapiro r = ":"; 5640266059SGregory Neil Shapiro SM_TEST(sm_strlcat2(s3, r, s2, MAXL) == 7); 5740266059SGregory Neil Shapiro r = "abc:123"; 5840266059SGregory Neil Shapiro SM_TEST(strcmp(s3, r) == 0); 5940266059SGregory Neil Shapiro 6040266059SGregory Neil Shapiro SM_TEST(sm_strlcpy(s3, s1, 4) == 3); 6140266059SGregory Neil Shapiro r = ":"; 6240266059SGregory Neil Shapiro SM_TEST(sm_strlcat2(s3, r, s2, 6) == 7); 6340266059SGregory Neil Shapiro r = "abc:1"; 6440266059SGregory Neil Shapiro SM_TEST(strcmp(s3, r) == 0); 6540266059SGregory Neil Shapiro 6640266059SGregory Neil Shapiro SM_TEST(sm_strlcpy(s3, s1, 4) == 3); 6740266059SGregory Neil Shapiro r = ":"; 6840266059SGregory Neil Shapiro SM_TEST(sm_strlcat2(s3, r, s2, 2) == 7); 6940266059SGregory Neil Shapiro r = "abc"; 7040266059SGregory Neil Shapiro SM_TEST(strcmp(s3, r) == 0); 7140266059SGregory Neil Shapiro 7240266059SGregory Neil Shapiro SM_TEST(sm_strlcpy(s3, s1, 4) == 3); 7340266059SGregory Neil Shapiro r = ":"; 7440266059SGregory Neil Shapiro SM_TEST(sm_strlcat2(s3, r, s2, 4) == 7); 7540266059SGregory Neil Shapiro r = "abc"; 7640266059SGregory Neil Shapiro SM_TEST(strcmp(s3, r) == 0); 7740266059SGregory Neil Shapiro 7840266059SGregory Neil Shapiro SM_TEST(sm_strlcpy(s3, s1, 4) == 3); 7940266059SGregory Neil Shapiro r = ":"; 8040266059SGregory Neil Shapiro SM_TEST(sm_strlcat2(s3, r, s2, 5) == 7); 8140266059SGregory Neil Shapiro r = "abc:"; 8240266059SGregory Neil Shapiro SM_TEST(strcmp(s3, r) == 0); 8340266059SGregory Neil Shapiro 8440266059SGregory Neil Shapiro SM_TEST(sm_strlcpy(s3, s1, 4) == 3); 8540266059SGregory Neil Shapiro r = ":"; 8640266059SGregory Neil Shapiro SM_TEST(sm_strlcat2(s3, r, s2, 6) == 7); 8740266059SGregory Neil Shapiro r = "abc:1"; 8840266059SGregory Neil Shapiro SM_TEST(strcmp(s3, r) == 0); 8940266059SGregory Neil Shapiro 9040266059SGregory Neil Shapiro for (k = 0; k < N; k++) 9140266059SGregory Neil Shapiro { 9240266059SGregory Neil Shapiro (void) sm_strlcpy(src1[k], "abcdef", sizeof src1); 9340266059SGregory Neil Shapiro } 9440266059SGregory Neil Shapiro 9540266059SGregory Neil Shapiro one = sm_strlcpyn(dst1, sizeof dst1, 3, src1[0], "/", src1[1]); 9640266059SGregory Neil Shapiro two = sm_snprintf(dst2, sizeof dst2, "%s/%s", src1[0], src1[1]); 9740266059SGregory Neil Shapiro SM_TEST(one == two); 9840266059SGregory Neil Shapiro SM_TEST(strcmp(dst1, dst2) == 0); 9940266059SGregory Neil Shapiro one = sm_strlcpyn(dst1, 10, 3, src1[0], "/", src1[1]); 10040266059SGregory Neil Shapiro two = sm_snprintf(dst2, 10, "%s/%s", src1[0], src1[1]); 10140266059SGregory Neil Shapiro SM_TEST(one == two); 10240266059SGregory Neil Shapiro SM_TEST(strcmp(dst1, dst2) == 0); 10340266059SGregory Neil Shapiro one = sm_strlcpyn(dst1, 5, 3, src1[0], "/", src1[1]); 10440266059SGregory Neil Shapiro two = sm_snprintf(dst2, 5, "%s/%s", src1[0], src1[1]); 10540266059SGregory Neil Shapiro SM_TEST(one == two); 10640266059SGregory Neil Shapiro SM_TEST(strcmp(dst1, dst2) == 0); 10740266059SGregory Neil Shapiro one = sm_strlcpyn(dst1, 0, 3, src1[0], "/", src1[1]); 10840266059SGregory Neil Shapiro two = sm_snprintf(dst2, 0, "%s/%s", src1[0], src1[1]); 10940266059SGregory Neil Shapiro SM_TEST(one == two); 11040266059SGregory Neil Shapiro SM_TEST(strcmp(dst1, dst2) == 0); 11140266059SGregory Neil Shapiro one = sm_strlcpyn(dst1, sizeof dst1, 5, src1[0], "/", src1[1], "/", src1[2]); 11240266059SGregory Neil Shapiro two = sm_snprintf(dst2, sizeof dst2, "%s/%s/%s", src1[0], src1[1], src1[2]); 11340266059SGregory Neil Shapiro SM_TEST(one == two); 11440266059SGregory Neil Shapiro SM_TEST(strcmp(dst1, dst2) == 0); 11540266059SGregory Neil Shapiro one = sm_strlcpyn(dst1, 15, 5, src1[0], "/", src1[1], "/", src1[2]); 11640266059SGregory Neil Shapiro two = sm_snprintf(dst2, 15, "%s/%s/%s", src1[0], src1[1], src1[2]); 11740266059SGregory Neil Shapiro SM_TEST(one == two); 11840266059SGregory Neil Shapiro SM_TEST(strcmp(dst1, dst2) == 0); 11940266059SGregory Neil Shapiro one = sm_strlcpyn(dst1, 20, 5, src1[0], "/", src1[1], "/", src1[2]); 12040266059SGregory Neil Shapiro two = sm_snprintf(dst2, 20, "%s/%s/%s", src1[0], src1[1], src1[2]); 12140266059SGregory Neil Shapiro SM_TEST(one == two); 12240266059SGregory Neil Shapiro SM_TEST(strcmp(dst1, dst2) == 0); 12340266059SGregory Neil Shapiro 12440266059SGregory Neil Shapiro one = sm_strlcpyn(dst1, sizeof dst1, 0); 12540266059SGregory Neil Shapiro SM_TEST(one == 0); 12640266059SGregory Neil Shapiro r = ""; 12740266059SGregory Neil Shapiro SM_TEST(strcmp(dst1, r) == 0); 12840266059SGregory Neil Shapiro one = sm_strlcpyn(dst1, 20, 1, src1[0]); 12940266059SGregory Neil Shapiro two = sm_snprintf(dst2, 20, "%s", src1[0]); 13040266059SGregory Neil Shapiro SM_TEST(one == two); 13140266059SGregory Neil Shapiro one = sm_strlcpyn(dst1, 2, 1, src1[0]); 13240266059SGregory Neil Shapiro two = sm_snprintf(dst2, 2, "%s", src1[0]); 13340266059SGregory Neil Shapiro SM_TEST(one == two); 13440266059SGregory Neil Shapiro 13540266059SGregory Neil Shapiro return sm_test_end(); 13640266059SGregory Neil Shapiro } 137