modernc.org/ccgo/v3@v3.16.14/lib/testdata/gcc-9.1.0/gcc/testsuite/gcc.c-torture/execute/builtins/strncpy.c (about) 1 /* Copyright (C) 2000, 2005 Free Software Foundation. 2 3 Ensure all expected transformations of builtin strncpy occur and 4 perform correctly. 5 6 Written by Kaveh R. Ghazi, 11/25/2000. */ 7 8 extern void abort (void); 9 typedef __SIZE_TYPE__ size_t; 10 extern char *strncpy (char *, const char *, size_t); 11 extern int memcmp (const void *, const void *, size_t); 12 extern void *memset (void *, int, size_t); 13 14 /* Reset the destination buffer to a known state. */ 15 #define RESET_DST memset(dst, 'X', sizeof(dst)) 16 17 int i; 18 19 void 20 main_test (void) 21 { 22 const char *const src = "hello world"; 23 const char *src2; 24 char dst[64], *dst2; 25 26 RESET_DST; 27 if (strncpy (dst, src, 4) != dst || memcmp (dst, "hellXXX", 7)) 28 abort(); 29 30 RESET_DST; 31 if (strncpy (dst+16, src, 4) != dst+16 || memcmp (dst+16, "hellXXX", 7)) 32 abort(); 33 34 RESET_DST; 35 if (strncpy (dst+32, src+5, 4) != dst+32 || memcmp (dst+32, " worXXX", 7)) 36 abort(); 37 38 RESET_DST; 39 dst2 = dst; 40 if (strncpy (++dst2, src+5, 4) != dst+1 || memcmp (dst2, " worXXX", 7) 41 || dst2 != dst+1) 42 abort(); 43 44 RESET_DST; 45 if (strncpy (dst, src, 0) != dst || memcmp (dst, "XXX", 3)) 46 abort(); 47 48 RESET_DST; 49 dst2 = dst; src2 = src; 50 if (strncpy (++dst2, ++src2, 0) != dst+1 || memcmp (dst2, "XXX", 3) 51 || dst2 != dst+1 || src2 != src+1) 52 abort(); 53 54 RESET_DST; 55 dst2 = dst; src2 = src; 56 if (strncpy (++dst2+5, ++src2+5, 0) != dst+6 || memcmp (dst2+5, "XXX", 3) 57 || dst2 != dst+1 || src2 != src+1) 58 abort(); 59 60 RESET_DST; 61 if (strncpy (dst, src, 12) != dst || memcmp (dst, "hello world\0XXX", 15)) 62 abort(); 63 64 /* Test at least one instance of the __builtin_ style. We do this 65 to ensure that it works and that the prototype is correct. */ 66 RESET_DST; 67 if (__builtin_strncpy (dst, src, 4) != dst || memcmp (dst, "hellXXX", 7)) 68 abort(); 69 70 RESET_DST; 71 if (strncpy (dst, i++ ? "xfoo" + 1 : "bar", 4) != dst 72 || memcmp (dst, "bar\0XXX", 7) 73 || i != 1) 74 abort (); 75 }