|
|
1.1 ! root 1: /* The Plum Hall Validation Suite for C ! 2: * Unpublished copyright (c) 1986-1991, Chiron Systems Inc and Plum Hall Inc. ! 3: * VERSION: 4 ! 4: * DATE: 1993-01-01 ! 5: * The "ANSI" mode of this suite corresponds to official ANSI C, X3.159-1989. ! 6: * As per your license agreement, your distribution is not to be moved or copied outside the Designated Site ! 7: * without specific permission from Plum Hall Inc. ! 8: */ ! 9: ! 10: ! 11: #include "flags.h" ! 12: #ifndef SKIP411 ! 13: #define LIB_TEST 1 ! 14: #include "defs.h" ! 15: ! 16: /* ! 17: * 4.11 - String Handling ! 18: */ ! 19: ! 20: #if ANSI ! 21: #include <stddef.h> ! 22: #include <string.h> ! 23: #else ! 24: #if ALL_STRING_FNS ! 25: char *memcpy(); ! 26: char *memset(); ! 27: char *strcpy(); ! 28: char *strncpy(); ! 29: char *strcat(); ! 30: char *strncat(); ! 31: char *memchr(); ! 32: char *strchr(); ! 33: char *strrchr(); ! 34: char *strpbrk(); ! 35: char *strtok(); ! 36: int strspn(); ! 37: int strcspn(); ! 38: #endif ! 39: #endif ! 40: ! 41: static void d4_11_2(); ! 42: static void d4_11_3(); ! 43: void d4_11b(); ! 44: ! 45: ! 46: ! 47: ! 48: ! 49: ! 50: ! 51: ! 52: ! 53: static char mem1[15] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}; ! 54: static char mem2[15] = {9,9,9,9,9,9,9,9,9,9,9,9,9,9,9}; ! 55: static char string1[] = "aaaaaaaaaa"; ! 56: static char string2[] = "bbbb\0bbbb"; ! 57: static char string3[] = "cccccccccc"; ! 58: static char string4[21] = "dddddddddd"; ! 59: static char string5[] = "abcdefgX\0Y"; ! 60: static char string6[] = "abcXabcX\0Y"; ! 61: static char string7[] = "oneXtwoYXthreeYYXXZZfourGFGF"; ! 62: static char string8[] = "oneXtwoYXthreeYYXXZZfourGFGF"; ! 63: static char string9[60]; ! 64: void d4_11() ! 65: { ! 66: ! 67: Filename = "d411.c"; ! 68: d4_11_2(); ! 69: d4_11_3(); ! 70: d4_11b(); ! 71: } ! 72: ! 73: /* ! 74: * 4.11.2 - Copying functions ! 75: */ ! 76: static void d4_11_2() ! 77: { ! 78: #ifndef SKIP4_112 ! 79: int i; ! 80: char *p; ! 81: ! 82: /* 4.11.2.1 memcpy ! 83: * basic copy ! 84: */ ! 85: p = memcpy(mem2, mem1, 15); ! 86: aequals(__LINE__, mem2, p); ! 87: for (i = 0; i < 15; ++i) ! 88: iequals(__LINE__, mem1[i], mem2[i]); ! 89: ! 90: #if ANSI ! 91: /* 4.11.2.2 memmove ! 92: * "correct" memory copy. ! 93: * First, shift left copy ! 94: */ ! 95: memmove(mem2, mem2+1, 14); ! 96: for (i = 0; i < 14; ++i) ! 97: iequals(__LINE__, mem2[i], mem1[i+1]); ! 98: iequals(__LINE__, mem2[14], mem1[14]); ! 99: ! 100: /* Then shift right copy */ ! 101: memmove(mem2+1, mem2, 14); ! 102: for (i = 1; i < 15; ++i) ! 103: iequals(__LINE__, mem2[i], mem1[i]); ! 104: iequals(__LINE__, mem2[0], mem2[1]); ! 105: #endif ! 106: /* 4.11.2.3 strcpy ! 107: * string copy ! 108: */ ! 109: p = strcpy(string1+1, string2); ! 110: aequals(__LINE__, p, string1+1); ! 111: iequals(__LINE__, string1[0], 'a'); ! 112: for (i = 1; i < 10; ++i) ! 113: if (i < 5) ! 114: iequals(__LINE__, string1[i], 'b'); ! 115: else if (i == 5) ! 116: iequals(__LINE__, string1[i], 0); ! 117: else ! 118: iequals(__LINE__, string1[i], 'a'); ! 119: iequals(__LINE__, string1[10], 0); ! 120: ! 121: /* 4.11.2.4 strncpy ! 122: * string copy with count ! 123: */ ! 124: p = strncpy(string1, string3, 9); ! 125: aequals(__LINE__, p, string1); ! 126: for (i = 0; i < 9; ++i) ! 127: iequals(__LINE__, string1[i], 'c'); ! 128: iequals(__LINE__, string1[9], 'a'); ! 129: iequals(__LINE__, string1[10], 0); ! 130: ! 131: /* fill with nulls if too few */ ! 132: strncpy(string1, string2, 8); ! 133: for (i = 0; i < 8; ++i) ! 134: if (i < 4) ! 135: iequals(__LINE__, string1[i], 'b'); ! 136: else ! 137: iequals(__LINE__, string1[i], 0); ! 138: iequals(__LINE__, string1[9], 'a'); ! 139: iequals(__LINE__, string1[10], 0); ! 140: #endif /* SKIP4_112 */ ! 141: } ! 142: ! 143: /* ! 144: * 4.11.3 - Concatenation functions ! 145: */ ! 146: static void d4_11_3() ! 147: { ! 148: #ifndef SKIP4_113 ! 149: int i; ! 150: char *p; ! 151: ! 152: /* 4.11.3.1 strcat ! 153: * string concatenation ! 154: */ ! 155: p = strcat(string4, string3); ! 156: aequals(__LINE__, p, string4); ! 157: for (i = 0; i < 20; ++i) ! 158: if (i < 10) ! 159: iequals(__LINE__, string4[i], 'd'); ! 160: else ! 161: iequals(__LINE__, string4[i], 'c'); ! 162: iequals(__LINE__, string4[20], 0); ! 163: ! 164: /* 4.11.3.2 strncat ! 165: * string concatenation with maximum length ! 166: */ ! 167: string4[10] = 0; ! 168: /* if there are not enough chars, then it is the same as strcat */ ! 169: p = strncat(string4, string3, 12); ! 170: aequals(__LINE__, p, string4); ! 171: for (i = 0; i < 20; ++i) ! 172: if (i < 10) ! 173: iequals(__LINE__, string4[i], 'd'); ! 174: else ! 175: iequals(__LINE__, string4[i], 'c'); ! 176: iequals(__LINE__, string4[20], 0); ! 177: string4[10] = 0; ! 178: /* otherwise concatenate fewer characters */ ! 179: strncat(string4, string3, 4); ! 180: for (i = 0; i < 14; ++i) ! 181: if (i < 10) ! 182: iequals(__LINE__, string4[i], 'd'); ! 183: else ! 184: iequals(__LINE__, string4[i], 'c'); ! 185: iequals(__LINE__, string4[14], 0); ! 186: #endif /* SKIP4_113 */ ! 187: } ! 188: ! 189: #else /* if SKIP411 */ ! 190: void d4_11() { pr_skip("d4_11: SKIPPED ENTIRELY\n"); } ! 191: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.