190792Sgshapiro/* 2261363Sgshapiro * Copyright (c) 2000-2001 Proofpoint, Inc. and its suppliers. 390792Sgshapiro * All rights reserved. 490792Sgshapiro * 590792Sgshapiro * By using this file, you agree to the terms and conditions set 690792Sgshapiro * forth in the LICENSE file which can be found at the top level of 790792Sgshapiro * the sendmail distribution. 890792Sgshapiro * 990792Sgshapiro */ 1090792Sgshapiro 1190792Sgshapiro#include <sm/gen.h> 12266692SgshapiroSM_IDSTR(id, "@(#)$Id: t-strl.c,v 1.16 2013-11-22 20:51:44 ca Exp $") 1390792Sgshapiro 1490792Sgshapiro#include <stdlib.h> 1590792Sgshapiro#include <stdio.h> 1690792Sgshapiro#include <sm/heap.h> 1790792Sgshapiro#include <sm/string.h> 1890792Sgshapiro#include <sm/test.h> 1990792Sgshapiro 2090792Sgshapiro#define MAXL 16 2190792Sgshapiro#define N 5 2290792Sgshapiro#define SIZE 128 2390792Sgshapiro 2490792Sgshapiroint 2590792Sgshapiromain(argc, argv) 2690792Sgshapiro int argc; 2790792Sgshapiro char *argv[]; 2890792Sgshapiro{ 2990792Sgshapiro char *s1, *s2, *s3; 3090792Sgshapiro int one, two, k; 3190792Sgshapiro char src1[N][SIZE], dst1[SIZE], dst2[SIZE]; 3290792Sgshapiro char *r; 3390792Sgshapiro 3490792Sgshapiro sm_test_begin(argc, argv, "test strl* string functions"); 3590792Sgshapiro s1 = "abc"; 3690792Sgshapiro s2 = "123"; 3790792Sgshapiro s3 = sm_malloc_x(MAXL); 3890792Sgshapiro 3990792Sgshapiro SM_TEST(sm_strlcpy(s3, s1, 4) == 3); 4090792Sgshapiro SM_TEST(strcmp(s1, s3) == 0); 4190792Sgshapiro 4290792Sgshapiro SM_TEST(sm_strlcat(s3, s2, 8) == 6); 4390792Sgshapiro r ="abc123"; 4490792Sgshapiro SM_TEST(strcmp(s3, r) == 0); 4590792Sgshapiro 4690792Sgshapiro SM_TEST(sm_strlcpy(s3, s1, 2) == 3); 4790792Sgshapiro r = "a"; 4890792Sgshapiro SM_TEST(strcmp(s3, r) == 0); 4990792Sgshapiro 5090792Sgshapiro SM_TEST(sm_strlcat(s3, s2, 3) == 4); 5190792Sgshapiro r = "a1"; 5290792Sgshapiro SM_TEST(strcmp(s3, r) == 0); 5390792Sgshapiro 5490792Sgshapiro SM_TEST(sm_strlcpy(s3, s1, 4) == 3); 5590792Sgshapiro r = ":"; 5690792Sgshapiro SM_TEST(sm_strlcat2(s3, r, s2, MAXL) == 7); 5790792Sgshapiro r = "abc:123"; 5890792Sgshapiro SM_TEST(strcmp(s3, r) == 0); 5990792Sgshapiro 6090792Sgshapiro SM_TEST(sm_strlcpy(s3, s1, 4) == 3); 6190792Sgshapiro r = ":"; 6290792Sgshapiro SM_TEST(sm_strlcat2(s3, r, s2, 6) == 7); 6390792Sgshapiro r = "abc:1"; 6490792Sgshapiro SM_TEST(strcmp(s3, r) == 0); 6590792Sgshapiro 6690792Sgshapiro SM_TEST(sm_strlcpy(s3, s1, 4) == 3); 6790792Sgshapiro r = ":"; 6890792Sgshapiro SM_TEST(sm_strlcat2(s3, r, s2, 2) == 7); 6990792Sgshapiro r = "abc"; 7090792Sgshapiro SM_TEST(strcmp(s3, r) == 0); 7190792Sgshapiro 7290792Sgshapiro SM_TEST(sm_strlcpy(s3, s1, 4) == 3); 7390792Sgshapiro r = ":"; 7490792Sgshapiro SM_TEST(sm_strlcat2(s3, r, s2, 4) == 7); 7590792Sgshapiro r = "abc"; 7690792Sgshapiro SM_TEST(strcmp(s3, r) == 0); 7790792Sgshapiro 7890792Sgshapiro SM_TEST(sm_strlcpy(s3, s1, 4) == 3); 7990792Sgshapiro r = ":"; 8090792Sgshapiro SM_TEST(sm_strlcat2(s3, r, s2, 5) == 7); 8190792Sgshapiro r = "abc:"; 8290792Sgshapiro SM_TEST(strcmp(s3, r) == 0); 8390792Sgshapiro 8490792Sgshapiro SM_TEST(sm_strlcpy(s3, s1, 4) == 3); 8590792Sgshapiro r = ":"; 8690792Sgshapiro SM_TEST(sm_strlcat2(s3, r, s2, 6) == 7); 8790792Sgshapiro r = "abc:1"; 8890792Sgshapiro SM_TEST(strcmp(s3, r) == 0); 8990792Sgshapiro 9090792Sgshapiro for (k = 0; k < N; k++) 9190792Sgshapiro { 9290792Sgshapiro (void) sm_strlcpy(src1[k], "abcdef", sizeof src1); 9390792Sgshapiro } 9490792Sgshapiro 9590792Sgshapiro one = sm_strlcpyn(dst1, sizeof dst1, 3, src1[0], "/", src1[1]); 9690792Sgshapiro two = sm_snprintf(dst2, sizeof dst2, "%s/%s", src1[0], src1[1]); 9790792Sgshapiro SM_TEST(one == two); 9890792Sgshapiro SM_TEST(strcmp(dst1, dst2) == 0); 9990792Sgshapiro one = sm_strlcpyn(dst1, 10, 3, src1[0], "/", src1[1]); 10090792Sgshapiro two = sm_snprintf(dst2, 10, "%s/%s", src1[0], src1[1]); 10190792Sgshapiro SM_TEST(one == two); 10290792Sgshapiro SM_TEST(strcmp(dst1, dst2) == 0); 10390792Sgshapiro one = sm_strlcpyn(dst1, 5, 3, src1[0], "/", src1[1]); 10490792Sgshapiro two = sm_snprintf(dst2, 5, "%s/%s", src1[0], src1[1]); 10590792Sgshapiro SM_TEST(one == two); 10690792Sgshapiro SM_TEST(strcmp(dst1, dst2) == 0); 10790792Sgshapiro one = sm_strlcpyn(dst1, 0, 3, src1[0], "/", src1[1]); 10890792Sgshapiro two = sm_snprintf(dst2, 0, "%s/%s", src1[0], src1[1]); 10990792Sgshapiro SM_TEST(one == two); 11090792Sgshapiro SM_TEST(strcmp(dst1, dst2) == 0); 11190792Sgshapiro one = sm_strlcpyn(dst1, sizeof dst1, 5, src1[0], "/", src1[1], "/", src1[2]); 11290792Sgshapiro two = sm_snprintf(dst2, sizeof dst2, "%s/%s/%s", src1[0], src1[1], src1[2]); 11390792Sgshapiro SM_TEST(one == two); 11490792Sgshapiro SM_TEST(strcmp(dst1, dst2) == 0); 11590792Sgshapiro one = sm_strlcpyn(dst1, 15, 5, src1[0], "/", src1[1], "/", src1[2]); 11690792Sgshapiro two = sm_snprintf(dst2, 15, "%s/%s/%s", src1[0], src1[1], src1[2]); 11790792Sgshapiro SM_TEST(one == two); 11890792Sgshapiro SM_TEST(strcmp(dst1, dst2) == 0); 11990792Sgshapiro one = sm_strlcpyn(dst1, 20, 5, src1[0], "/", src1[1], "/", src1[2]); 12090792Sgshapiro two = sm_snprintf(dst2, 20, "%s/%s/%s", src1[0], src1[1], src1[2]); 12190792Sgshapiro SM_TEST(one == two); 12290792Sgshapiro SM_TEST(strcmp(dst1, dst2) == 0); 12390792Sgshapiro 12490792Sgshapiro one = sm_strlcpyn(dst1, sizeof dst1, 0); 12590792Sgshapiro SM_TEST(one == 0); 12690792Sgshapiro r = ""; 12790792Sgshapiro SM_TEST(strcmp(dst1, r) == 0); 12890792Sgshapiro one = sm_strlcpyn(dst1, 20, 1, src1[0]); 12990792Sgshapiro two = sm_snprintf(dst2, 20, "%s", src1[0]); 13090792Sgshapiro SM_TEST(one == two); 13190792Sgshapiro one = sm_strlcpyn(dst1, 2, 1, src1[0]); 13290792Sgshapiro two = sm_snprintf(dst2, 2, "%s", src1[0]); 13390792Sgshapiro SM_TEST(one == two); 13490792Sgshapiro 13590792Sgshapiro return sm_test_end(); 13690792Sgshapiro} 137