1*7c478bd9Sstevel@tonic-gate /* 2*7c478bd9Sstevel@tonic-gate * Copyright (c) 2000-2001 Sendmail, Inc. and its suppliers. 3*7c478bd9Sstevel@tonic-gate * All rights reserved. 4*7c478bd9Sstevel@tonic-gate * 5*7c478bd9Sstevel@tonic-gate * By using this file, you agree to the terms and conditions set 6*7c478bd9Sstevel@tonic-gate * forth in the LICENSE file which can be found at the top level of 7*7c478bd9Sstevel@tonic-gate * the sendmail distribution. 8*7c478bd9Sstevel@tonic-gate * 9*7c478bd9Sstevel@tonic-gate */ 10*7c478bd9Sstevel@tonic-gate 11*7c478bd9Sstevel@tonic-gate #include <sm/gen.h> 12*7c478bd9Sstevel@tonic-gate SM_IDSTR(id, "@(#)$Id: t-strl.c,v 1.13 2001/08/27 23:00:05 gshapiro Exp $") 13*7c478bd9Sstevel@tonic-gate 14*7c478bd9Sstevel@tonic-gate #include <stdlib.h> 15*7c478bd9Sstevel@tonic-gate #include <stdio.h> 16*7c478bd9Sstevel@tonic-gate #include <sm/heap.h> 17*7c478bd9Sstevel@tonic-gate #include <sm/string.h> 18*7c478bd9Sstevel@tonic-gate #include <sm/test.h> 19*7c478bd9Sstevel@tonic-gate 20*7c478bd9Sstevel@tonic-gate #define MAXL 16 21*7c478bd9Sstevel@tonic-gate #define N 5 22*7c478bd9Sstevel@tonic-gate #define SIZE 128 23*7c478bd9Sstevel@tonic-gate 24*7c478bd9Sstevel@tonic-gate int 25*7c478bd9Sstevel@tonic-gate main(argc, argv) 26*7c478bd9Sstevel@tonic-gate int argc; 27*7c478bd9Sstevel@tonic-gate char *argv[]; 28*7c478bd9Sstevel@tonic-gate { 29*7c478bd9Sstevel@tonic-gate char *s1, *s2, *s3; 30*7c478bd9Sstevel@tonic-gate int one, two, k; 31*7c478bd9Sstevel@tonic-gate char src1[N][SIZE], dst1[SIZE], dst2[SIZE]; 32*7c478bd9Sstevel@tonic-gate char *r; 33*7c478bd9Sstevel@tonic-gate 34*7c478bd9Sstevel@tonic-gate sm_test_begin(argc, argv, "test strl* string functions"); 35*7c478bd9Sstevel@tonic-gate s1 = "abc"; 36*7c478bd9Sstevel@tonic-gate s2 = "123"; 37*7c478bd9Sstevel@tonic-gate s3 = sm_malloc_x(MAXL); 38*7c478bd9Sstevel@tonic-gate 39*7c478bd9Sstevel@tonic-gate SM_TEST(sm_strlcpy(s3, s1, 4) == 3); 40*7c478bd9Sstevel@tonic-gate SM_TEST(strcmp(s1, s3) == 0); 41*7c478bd9Sstevel@tonic-gate 42*7c478bd9Sstevel@tonic-gate SM_TEST(sm_strlcat(s3, s2, 8) == 6); 43*7c478bd9Sstevel@tonic-gate r ="abc123"; 44*7c478bd9Sstevel@tonic-gate SM_TEST(strcmp(s3, r) == 0); 45*7c478bd9Sstevel@tonic-gate 46*7c478bd9Sstevel@tonic-gate SM_TEST(sm_strlcpy(s3, s1, 2) == 3); 47*7c478bd9Sstevel@tonic-gate r = "a"; 48*7c478bd9Sstevel@tonic-gate SM_TEST(strcmp(s3, r) == 0); 49*7c478bd9Sstevel@tonic-gate 50*7c478bd9Sstevel@tonic-gate SM_TEST(sm_strlcat(s3, s2, 3) == 4); 51*7c478bd9Sstevel@tonic-gate r = "a1"; 52*7c478bd9Sstevel@tonic-gate SM_TEST(strcmp(s3, r) == 0); 53*7c478bd9Sstevel@tonic-gate 54*7c478bd9Sstevel@tonic-gate SM_TEST(sm_strlcpy(s3, s1, 4) == 3); 55*7c478bd9Sstevel@tonic-gate r = ":"; 56*7c478bd9Sstevel@tonic-gate SM_TEST(sm_strlcat2(s3, r, s2, MAXL) == 7); 57*7c478bd9Sstevel@tonic-gate r = "abc:123"; 58*7c478bd9Sstevel@tonic-gate SM_TEST(strcmp(s3, r) == 0); 59*7c478bd9Sstevel@tonic-gate 60*7c478bd9Sstevel@tonic-gate SM_TEST(sm_strlcpy(s3, s1, 4) == 3); 61*7c478bd9Sstevel@tonic-gate r = ":"; 62*7c478bd9Sstevel@tonic-gate SM_TEST(sm_strlcat2(s3, r, s2, 6) == 7); 63*7c478bd9Sstevel@tonic-gate r = "abc:1"; 64*7c478bd9Sstevel@tonic-gate SM_TEST(strcmp(s3, r) == 0); 65*7c478bd9Sstevel@tonic-gate 66*7c478bd9Sstevel@tonic-gate SM_TEST(sm_strlcpy(s3, s1, 4) == 3); 67*7c478bd9Sstevel@tonic-gate r = ":"; 68*7c478bd9Sstevel@tonic-gate SM_TEST(sm_strlcat2(s3, r, s2, 2) == 7); 69*7c478bd9Sstevel@tonic-gate r = "abc"; 70*7c478bd9Sstevel@tonic-gate SM_TEST(strcmp(s3, r) == 0); 71*7c478bd9Sstevel@tonic-gate 72*7c478bd9Sstevel@tonic-gate SM_TEST(sm_strlcpy(s3, s1, 4) == 3); 73*7c478bd9Sstevel@tonic-gate r = ":"; 74*7c478bd9Sstevel@tonic-gate SM_TEST(sm_strlcat2(s3, r, s2, 4) == 7); 75*7c478bd9Sstevel@tonic-gate r = "abc"; 76*7c478bd9Sstevel@tonic-gate SM_TEST(strcmp(s3, r) == 0); 77*7c478bd9Sstevel@tonic-gate 78*7c478bd9Sstevel@tonic-gate SM_TEST(sm_strlcpy(s3, s1, 4) == 3); 79*7c478bd9Sstevel@tonic-gate r = ":"; 80*7c478bd9Sstevel@tonic-gate SM_TEST(sm_strlcat2(s3, r, s2, 5) == 7); 81*7c478bd9Sstevel@tonic-gate r = "abc:"; 82*7c478bd9Sstevel@tonic-gate SM_TEST(strcmp(s3, r) == 0); 83*7c478bd9Sstevel@tonic-gate 84*7c478bd9Sstevel@tonic-gate SM_TEST(sm_strlcpy(s3, s1, 4) == 3); 85*7c478bd9Sstevel@tonic-gate r = ":"; 86*7c478bd9Sstevel@tonic-gate SM_TEST(sm_strlcat2(s3, r, s2, 6) == 7); 87*7c478bd9Sstevel@tonic-gate r = "abc:1"; 88*7c478bd9Sstevel@tonic-gate SM_TEST(strcmp(s3, r) == 0); 89*7c478bd9Sstevel@tonic-gate 90*7c478bd9Sstevel@tonic-gate for (k = 0; k < N; k++) 91*7c478bd9Sstevel@tonic-gate { 92*7c478bd9Sstevel@tonic-gate (void) sm_strlcpy(src1[k], "abcdef", sizeof src1); 93*7c478bd9Sstevel@tonic-gate } 94*7c478bd9Sstevel@tonic-gate 95*7c478bd9Sstevel@tonic-gate one = sm_strlcpyn(dst1, sizeof dst1, 3, src1[0], "/", src1[1]); 96*7c478bd9Sstevel@tonic-gate two = sm_snprintf(dst2, sizeof dst2, "%s/%s", src1[0], src1[1]); 97*7c478bd9Sstevel@tonic-gate SM_TEST(one == two); 98*7c478bd9Sstevel@tonic-gate SM_TEST(strcmp(dst1, dst2) == 0); 99*7c478bd9Sstevel@tonic-gate one = sm_strlcpyn(dst1, 10, 3, src1[0], "/", src1[1]); 100*7c478bd9Sstevel@tonic-gate two = sm_snprintf(dst2, 10, "%s/%s", src1[0], src1[1]); 101*7c478bd9Sstevel@tonic-gate SM_TEST(one == two); 102*7c478bd9Sstevel@tonic-gate SM_TEST(strcmp(dst1, dst2) == 0); 103*7c478bd9Sstevel@tonic-gate one = sm_strlcpyn(dst1, 5, 3, src1[0], "/", src1[1]); 104*7c478bd9Sstevel@tonic-gate two = sm_snprintf(dst2, 5, "%s/%s", src1[0], src1[1]); 105*7c478bd9Sstevel@tonic-gate SM_TEST(one == two); 106*7c478bd9Sstevel@tonic-gate SM_TEST(strcmp(dst1, dst2) == 0); 107*7c478bd9Sstevel@tonic-gate one = sm_strlcpyn(dst1, 0, 3, src1[0], "/", src1[1]); 108*7c478bd9Sstevel@tonic-gate two = sm_snprintf(dst2, 0, "%s/%s", src1[0], src1[1]); 109*7c478bd9Sstevel@tonic-gate SM_TEST(one == two); 110*7c478bd9Sstevel@tonic-gate SM_TEST(strcmp(dst1, dst2) == 0); 111*7c478bd9Sstevel@tonic-gate one = sm_strlcpyn(dst1, sizeof dst1, 5, src1[0], "/", src1[1], "/", src1[2]); 112*7c478bd9Sstevel@tonic-gate two = sm_snprintf(dst2, sizeof dst2, "%s/%s/%s", src1[0], src1[1], src1[2]); 113*7c478bd9Sstevel@tonic-gate SM_TEST(one == two); 114*7c478bd9Sstevel@tonic-gate SM_TEST(strcmp(dst1, dst2) == 0); 115*7c478bd9Sstevel@tonic-gate one = sm_strlcpyn(dst1, 15, 5, src1[0], "/", src1[1], "/", src1[2]); 116*7c478bd9Sstevel@tonic-gate two = sm_snprintf(dst2, 15, "%s/%s/%s", src1[0], src1[1], src1[2]); 117*7c478bd9Sstevel@tonic-gate SM_TEST(one == two); 118*7c478bd9Sstevel@tonic-gate SM_TEST(strcmp(dst1, dst2) == 0); 119*7c478bd9Sstevel@tonic-gate one = sm_strlcpyn(dst1, 20, 5, src1[0], "/", src1[1], "/", src1[2]); 120*7c478bd9Sstevel@tonic-gate two = sm_snprintf(dst2, 20, "%s/%s/%s", src1[0], src1[1], src1[2]); 121*7c478bd9Sstevel@tonic-gate SM_TEST(one == two); 122*7c478bd9Sstevel@tonic-gate SM_TEST(strcmp(dst1, dst2) == 0); 123*7c478bd9Sstevel@tonic-gate 124*7c478bd9Sstevel@tonic-gate one = sm_strlcpyn(dst1, sizeof dst1, 0); 125*7c478bd9Sstevel@tonic-gate SM_TEST(one == 0); 126*7c478bd9Sstevel@tonic-gate r = ""; 127*7c478bd9Sstevel@tonic-gate SM_TEST(strcmp(dst1, r) == 0); 128*7c478bd9Sstevel@tonic-gate one = sm_strlcpyn(dst1, 20, 1, src1[0]); 129*7c478bd9Sstevel@tonic-gate two = sm_snprintf(dst2, 20, "%s", src1[0]); 130*7c478bd9Sstevel@tonic-gate SM_TEST(one == two); 131*7c478bd9Sstevel@tonic-gate one = sm_strlcpyn(dst1, 2, 1, src1[0]); 132*7c478bd9Sstevel@tonic-gate two = sm_snprintf(dst2, 2, "%s", src1[0]); 133*7c478bd9Sstevel@tonic-gate SM_TEST(one == two); 134*7c478bd9Sstevel@tonic-gate 135*7c478bd9Sstevel@tonic-gate return sm_test_end(); 136*7c478bd9Sstevel@tonic-gate } 137