## ## Transcript of a working string_buffer implementation ## ## Refer to the solution web page and the code it refers to to ## understand the tests. The menu allows one to run some tests ## separately, but, below I chose option 0, which runs all tests. ## There is nothing peculiar or tricky about the tests: they ## essentially follow the specification in the API, except that the ## tests do not force the code to run out of heap memory, and they ## don't cover strbuff_destroy() (except to call it to demonstrate it ## doesn't crash). ## ## One test includes reading an entire file into a string buffer, ## printing out some status information every 5 characters. Then the ## string is printed. I used string_buffer.c as the input (and ## you'll see it below). The file is a bit over 3K, but I have ## tested my code on much larger files (up to 9MB). ## ## (The testing code has a bug: if the file you give it doesn't ## exist, then some tests will fail even if the string_buffer code is ## correct.) ## ## No student submission passed all the tests. ## ## midterm_test$ make clean rm -f test_string_buffer test_string_buffer.o string_buffer.o midterm_test$ cp mark_string_buffer.c string_buffer.c midterm_test$ make gcc -g -Wall -o test_string_buffer.o -c test_string_buffer.c gcc -g -Wall -c -o string_buffer.o string_buffer.c gcc -g -Wall -o test_string_buffer test_string_buffer.o string_buffer.o midterm_test$ test_string_buffer 0: all 1: test_mk_strbuff() 2: test_strbuff_size_and_capacity() 3: test_strbuff_append() 4: test_strbuff_to_string() 5: test_strbuff_append_str() 6: test_strbuff_getchar_setchar() 7: test_strbuff_truncate() q: quit : 0 passed: two string buffers, sb1 != sb2 passed: sb1 initial state passed: size and capacity of NULL => -1 passed: strbuff_append(NULL, 'c') == EINVAL Enter a file name: string_buffer.c nchars = 1, size = 1, sb1 capacity = 1 nchars = 6, size = 6, sb1 capacity = 10 nchars = 11, size = 11, sb1 capacity = 22 nchars = 16, size = 16, sb1 capacity = 22 nchars = 21, size = 21, sb1 capacity = 22 nchars = 26, size = 26, sb1 capacity = 46 nchars = 31, size = 31, sb1 capacity = 46 nchars = 36, size = 36, sb1 capacity = 46 nchars = 41, size = 41, sb1 capacity = 46 nchars = 46, size = 46, sb1 capacity = 46 nchars = 51, size = 51, sb1 capacity = 94 nchars = 56, size = 56, sb1 capacity = 94 nchars = 61, size = 61, sb1 capacity = 94 nchars = 66, size = 66, sb1 capacity = 94 nchars = 71, size = 71, sb1 capacity = 94 nchars = 76, size = 76, sb1 capacity = 94 nchars = 81, size = 81, sb1 capacity = 94 nchars = 86, size = 86, sb1 capacity = 94 nchars = 91, size = 91, sb1 capacity = 94 nchars = 96, size = 96, sb1 capacity = 190 nchars = 101, size = 101, sb1 capacity = 190 nchars = 106, size = 106, sb1 capacity = 190 nchars = 111, size = 111, sb1 capacity = 190 nchars = 116, size = 116, sb1 capacity = 190 nchars = 121, size = 121, sb1 capacity = 190 nchars = 126, size = 126, sb1 capacity = 190 nchars = 131, size = 131, sb1 capacity = 190 nchars = 136, size = 136, sb1 capacity = 190 nchars = 141, size = 141, sb1 capacity = 190 nchars = 146, size = 146, sb1 capacity = 190 nchars = 151, size = 151, sb1 capacity = 190 nchars = 156, size = 156, sb1 capacity = 190 nchars = 161, size = 161, sb1 capacity = 190 nchars = 166, size = 166, sb1 capacity = 190 nchars = 171, size = 171, sb1 capacity = 190 nchars = 176, size = 176, sb1 capacity = 190 nchars = 181, size = 181, sb1 capacity = 190 nchars = 186, size = 186, sb1 capacity = 190 nchars = 191, size = 191, sb1 capacity = 382 nchars = 196, size = 196, sb1 capacity = 382 nchars = 201, size = 201, sb1 capacity = 382 nchars = 206, size = 206, sb1 capacity = 382 nchars = 211, size = 211, sb1 capacity = 382 nchars = 216, size = 216, sb1 capacity = 382 nchars = 221, size = 221, sb1 capacity = 382 nchars = 226, size = 226, sb1 capacity = 382 nchars = 231, size = 231, sb1 capacity = 382 nchars = 236, size = 236, sb1 capacity = 382 nchars = 241, size = 241, sb1 capacity = 382 nchars = 246, size = 246, sb1 capacity = 382 nchars = 251, size = 251, sb1 capacity = 382 nchars = 256, size = 256, sb1 capacity = 382 nchars = 261, size = 261, sb1 capacity = 382 nchars = 266, size = 266, sb1 capacity = 382 nchars = 271, size = 271, sb1 capacity = 382 nchars = 276, size = 276, sb1 capacity = 382 nchars = 281, size = 281, sb1 capacity = 382 nchars = 286, size = 286, sb1 capacity = 382 nchars = 291, size = 291, sb1 capacity = 382 nchars = 296, size = 296, sb1 capacity = 382 nchars = 301, size = 301, sb1 capacity = 382 nchars = 306, size = 306, sb1 capacity = 382 nchars = 311, size = 311, sb1 capacity = 382 nchars = 316, size = 316, sb1 capacity = 382 nchars = 321, size = 321, sb1 capacity = 382 nchars = 326, size = 326, sb1 capacity = 382 nchars = 331, size = 331, sb1 capacity = 382 nchars = 336, size = 336, sb1 capacity = 382 nchars = 341, size = 341, sb1 capacity = 382 nchars = 346, size = 346, sb1 capacity = 382 nchars = 351, size = 351, sb1 capacity = 382 nchars = 356, size = 356, sb1 capacity = 382 nchars = 361, size = 361, sb1 capacity = 382 nchars = 366, size = 366, sb1 capacity = 382 nchars = 371, size = 371, sb1 capacity = 382 nchars = 376, size = 376, sb1 capacity = 382 nchars = 381, size = 381, sb1 capacity = 382 nchars = 386, size = 386, sb1 capacity = 766 nchars = 391, size = 391, sb1 capacity = 766 nchars = 396, size = 396, sb1 capacity = 766 nchars = 401, size = 401, sb1 capacity = 766 nchars = 406, size = 406, sb1 capacity = 766 nchars = 411, size = 411, sb1 capacity = 766 nchars = 416, size = 416, sb1 capacity = 766 nchars = 421, size = 421, sb1 capacity = 766 nchars = 426, size = 426, sb1 capacity = 766 nchars = 431, size = 431, sb1 capacity = 766 nchars = 436, size = 436, sb1 capacity = 766 nchars = 441, size = 441, sb1 capacity = 766 nchars = 446, size = 446, sb1 capacity = 766 nchars = 451, size = 451, sb1 capacity = 766 nchars = 456, size = 456, sb1 capacity = 766 nchars = 461, size = 461, sb1 capacity = 766 nchars = 466, size = 466, sb1 capacity = 766 nchars = 471, size = 471, sb1 capacity = 766 nchars = 476, size = 476, sb1 capacity = 766 nchars = 481, size = 481, sb1 capacity = 766 nchars = 486, size = 486, sb1 capacity = 766 nchars = 491, size = 491, sb1 capacity = 766 nchars = 496, size = 496, sb1 capacity = 766 nchars = 501, size = 501, sb1 capacity = 766 nchars = 506, size = 506, sb1 capacity = 766 nchars = 511, size = 511, sb1 capacity = 766 nchars = 516, size = 516, sb1 capacity = 766 nchars = 521, size = 521, sb1 capacity = 766 nchars = 526, size = 526, sb1 capacity = 766 nchars = 531, size = 531, sb1 capacity = 766 nchars = 536, size = 536, sb1 capacity = 766 nchars = 541, size = 541, sb1 capacity = 766 nchars = 546, size = 546, sb1 capacity = 766 nchars = 551, size = 551, sb1 capacity = 766 nchars = 556, size = 556, sb1 capacity = 766 nchars = 561, size = 561, sb1 capacity = 766 nchars = 566, size = 566, sb1 capacity = 766 nchars = 571, size = 571, sb1 capacity = 766 nchars = 576, size = 576, sb1 capacity = 766 nchars = 581, size = 581, sb1 capacity = 766 nchars = 586, size = 586, sb1 capacity = 766 nchars = 591, size = 591, sb1 capacity = 766 nchars = 596, size = 596, sb1 capacity = 766 nchars = 601, size = 601, sb1 capacity = 766 nchars = 606, size = 606, sb1 capacity = 766 nchars = 611, size = 611, sb1 capacity = 766 nchars = 616, size = 616, sb1 capacity = 766 nchars = 621, size = 621, sb1 capacity = 766 nchars = 626, size = 626, sb1 capacity = 766 nchars = 631, size = 631, sb1 capacity = 766 nchars = 636, size = 636, sb1 capacity = 766 nchars = 641, size = 641, sb1 capacity = 766 nchars = 646, size = 646, sb1 capacity = 766 nchars = 651, size = 651, sb1 capacity = 766 nchars = 656, size = 656, sb1 capacity = 766 nchars = 661, size = 661, sb1 capacity = 766 nchars = 666, size = 666, sb1 capacity = 766 nchars = 671, size = 671, sb1 capacity = 766 nchars = 676, size = 676, sb1 capacity = 766 nchars = 681, size = 681, sb1 capacity = 766 nchars = 686, size = 686, sb1 capacity = 766 nchars = 691, size = 691, sb1 capacity = 766 nchars = 696, size = 696, sb1 capacity = 766 nchars = 701, size = 701, sb1 capacity = 766 nchars = 706, size = 706, sb1 capacity = 766 nchars = 711, size = 711, sb1 capacity = 766 nchars = 716, size = 716, sb1 capacity = 766 nchars = 721, size = 721, sb1 capacity = 766 nchars = 726, size = 726, sb1 capacity = 766 nchars = 731, size = 731, sb1 capacity = 766 nchars = 736, size = 736, sb1 capacity = 766 nchars = 741, size = 741, sb1 capacity = 766 nchars = 746, size = 746, sb1 capacity = 766 nchars = 751, size = 751, sb1 capacity = 766 nchars = 756, size = 756, sb1 capacity = 766 nchars = 761, size = 761, sb1 capacity = 766 nchars = 766, size = 766, sb1 capacity = 766 nchars = 771, size = 771, sb1 capacity = 1534 nchars = 776, size = 776, sb1 capacity = 1534 nchars = 781, size = 781, sb1 capacity = 1534 nchars = 786, size = 786, sb1 capacity = 1534 nchars = 791, size = 791, sb1 capacity = 1534 nchars = 796, size = 796, sb1 capacity = 1534 nchars = 801, size = 801, sb1 capacity = 1534 nchars = 806, size = 806, sb1 capacity = 1534 nchars = 811, size = 811, sb1 capacity = 1534 nchars = 816, size = 816, sb1 capacity = 1534 nchars = 821, size = 821, sb1 capacity = 1534 nchars = 826, size = 826, sb1 capacity = 1534 nchars = 831, size = 831, sb1 capacity = 1534 nchars = 836, size = 836, sb1 capacity = 1534 nchars = 841, size = 841, sb1 capacity = 1534 nchars = 846, size = 846, sb1 capacity = 1534 nchars = 851, size = 851, sb1 capacity = 1534 nchars = 856, size = 856, sb1 capacity = 1534 nchars = 861, size = 861, sb1 capacity = 1534 nchars = 866, size = 866, sb1 capacity = 1534 nchars = 871, size = 871, sb1 capacity = 1534 nchars = 876, size = 876, sb1 capacity = 1534 nchars = 881, size = 881, sb1 capacity = 1534 nchars = 886, size = 886, sb1 capacity = 1534 nchars = 891, size = 891, sb1 capacity = 1534 nchars = 896, size = 896, sb1 capacity = 1534 nchars = 901, size = 901, sb1 capacity = 1534 nchars = 906, size = 906, sb1 capacity = 1534 nchars = 911, size = 911, sb1 capacity = 1534 nchars = 916, size = 916, sb1 capacity = 1534 nchars = 921, size = 921, sb1 capacity = 1534 nchars = 926, size = 926, sb1 capacity = 1534 nchars = 931, size = 931, sb1 capacity = 1534 nchars = 936, size = 936, sb1 capacity = 1534 nchars = 941, size = 941, sb1 capacity = 1534 nchars = 946, size = 946, sb1 capacity = 1534 nchars = 951, size = 951, sb1 capacity = 1534 nchars = 956, size = 956, sb1 capacity = 1534 nchars = 961, size = 961, sb1 capacity = 1534 nchars = 966, size = 966, sb1 capacity = 1534 nchars = 971, size = 971, sb1 capacity = 1534 nchars = 976, size = 976, sb1 capacity = 1534 nchars = 981, size = 981, sb1 capacity = 1534 nchars = 986, size = 986, sb1 capacity = 1534 nchars = 991, size = 991, sb1 capacity = 1534 nchars = 996, size = 996, sb1 capacity = 1534 nchars = 1001, size = 1001, sb1 capacity = 1534 nchars = 1006, size = 1006, sb1 capacity = 1534 nchars = 1011, size = 1011, sb1 capacity = 1534 nchars = 1016, size = 1016, sb1 capacity = 1534 nchars = 1021, size = 1021, sb1 capacity = 1534 nchars = 1026, size = 1026, sb1 capacity = 1534 nchars = 1031, size = 1031, sb1 capacity = 1534 nchars = 1036, size = 1036, sb1 capacity = 1534 nchars = 1041, size = 1041, sb1 capacity = 1534 nchars = 1046, size = 1046, sb1 capacity = 1534 nchars = 1051, size = 1051, sb1 capacity = 1534 nchars = 1056, size = 1056, sb1 capacity = 1534 nchars = 1061, size = 1061, sb1 capacity = 1534 nchars = 1066, size = 1066, sb1 capacity = 1534 nchars = 1071, size = 1071, sb1 capacity = 1534 nchars = 1076, size = 1076, sb1 capacity = 1534 nchars = 1081, size = 1081, sb1 capacity = 1534 nchars = 1086, size = 1086, sb1 capacity = 1534 nchars = 1091, size = 1091, sb1 capacity = 1534 nchars = 1096, size = 1096, sb1 capacity = 1534 nchars = 1101, size = 1101, sb1 capacity = 1534 nchars = 1106, size = 1106, sb1 capacity = 1534 nchars = 1111, size = 1111, sb1 capacity = 1534 nchars = 1116, size = 1116, sb1 capacity = 1534 nchars = 1121, size = 1121, sb1 capacity = 1534 nchars = 1126, size = 1126, sb1 capacity = 1534 nchars = 1131, size = 1131, sb1 capacity = 1534 nchars = 1136, size = 1136, sb1 capacity = 1534 nchars = 1141, size = 1141, sb1 capacity = 1534 nchars = 1146, size = 1146, sb1 capacity = 1534 nchars = 1151, size = 1151, sb1 capacity = 1534 nchars = 1156, size = 1156, sb1 capacity = 1534 nchars = 1161, size = 1161, sb1 capacity = 1534 nchars = 1166, size = 1166, sb1 capacity = 1534 nchars = 1171, size = 1171, sb1 capacity = 1534 nchars = 1176, size = 1176, sb1 capacity = 1534 nchars = 1181, size = 1181, sb1 capacity = 1534 nchars = 1186, size = 1186, sb1 capacity = 1534 nchars = 1191, size = 1191, sb1 capacity = 1534 nchars = 1196, size = 1196, sb1 capacity = 1534 nchars = 1201, size = 1201, sb1 capacity = 1534 nchars = 1206, size = 1206, sb1 capacity = 1534 nchars = 1211, size = 1211, sb1 capacity = 1534 nchars = 1216, size = 1216, sb1 capacity = 1534 nchars = 1221, size = 1221, sb1 capacity = 1534 nchars = 1226, size = 1226, sb1 capacity = 1534 nchars = 1231, size = 1231, sb1 capacity = 1534 nchars = 1236, size = 1236, sb1 capacity = 1534 nchars = 1241, size = 1241, sb1 capacity = 1534 nchars = 1246, size = 1246, sb1 capacity = 1534 nchars = 1251, size = 1251, sb1 capacity = 1534 nchars = 1256, size = 1256, sb1 capacity = 1534 nchars = 1261, size = 1261, sb1 capacity = 1534 nchars = 1266, size = 1266, sb1 capacity = 1534 nchars = 1271, size = 1271, sb1 capacity = 1534 nchars = 1276, size = 1276, sb1 capacity = 1534 nchars = 1281, size = 1281, sb1 capacity = 1534 nchars = 1286, size = 1286, sb1 capacity = 1534 nchars = 1291, size = 1291, sb1 capacity = 1534 nchars = 1296, size = 1296, sb1 capacity = 1534 nchars = 1301, size = 1301, sb1 capacity = 1534 nchars = 1306, size = 1306, sb1 capacity = 1534 nchars = 1311, size = 1311, sb1 capacity = 1534 nchars = 1316, size = 1316, sb1 capacity = 1534 nchars = 1321, size = 1321, sb1 capacity = 1534 nchars = 1326, size = 1326, sb1 capacity = 1534 nchars = 1331, size = 1331, sb1 capacity = 1534 nchars = 1336, size = 1336, sb1 capacity = 1534 nchars = 1341, size = 1341, sb1 capacity = 1534 nchars = 1346, size = 1346, sb1 capacity = 1534 nchars = 1351, size = 1351, sb1 capacity = 1534 nchars = 1356, size = 1356, sb1 capacity = 1534 nchars = 1361, size = 1361, sb1 capacity = 1534 nchars = 1366, size = 1366, sb1 capacity = 1534 nchars = 1371, size = 1371, sb1 capacity = 1534 nchars = 1376, size = 1376, sb1 capacity = 1534 nchars = 1381, size = 1381, sb1 capacity = 1534 nchars = 1386, size = 1386, sb1 capacity = 1534 nchars = 1391, size = 1391, sb1 capacity = 1534 nchars = 1396, size = 1396, sb1 capacity = 1534 nchars = 1401, size = 1401, sb1 capacity = 1534 nchars = 1406, size = 1406, sb1 capacity = 1534 nchars = 1411, size = 1411, sb1 capacity = 1534 nchars = 1416, size = 1416, sb1 capacity = 1534 nchars = 1421, size = 1421, sb1 capacity = 1534 nchars = 1426, size = 1426, sb1 capacity = 1534 nchars = 1431, size = 1431, sb1 capacity = 1534 nchars = 1436, size = 1436, sb1 capacity = 1534 nchars = 1441, size = 1441, sb1 capacity = 1534 nchars = 1446, size = 1446, sb1 capacity = 1534 nchars = 1451, size = 1451, sb1 capacity = 1534 nchars = 1456, size = 1456, sb1 capacity = 1534 nchars = 1461, size = 1461, sb1 capacity = 1534 nchars = 1466, size = 1466, sb1 capacity = 1534 nchars = 1471, size = 1471, sb1 capacity = 1534 nchars = 1476, size = 1476, sb1 capacity = 1534 nchars = 1481, size = 1481, sb1 capacity = 1534 nchars = 1486, size = 1486, sb1 capacity = 1534 nchars = 1491, size = 1491, sb1 capacity = 1534 nchars = 1496, size = 1496, sb1 capacity = 1534 nchars = 1501, size = 1501, sb1 capacity = 1534 nchars = 1506, size = 1506, sb1 capacity = 1534 nchars = 1511, size = 1511, sb1 capacity = 1534 nchars = 1516, size = 1516, sb1 capacity = 1534 nchars = 1521, size = 1521, sb1 capacity = 1534 nchars = 1526, size = 1526, sb1 capacity = 1534 nchars = 1531, size = 1531, sb1 capacity = 1534 nchars = 1536, size = 1536, sb1 capacity = 3070 nchars = 1541, size = 1541, sb1 capacity = 3070 nchars = 1546, size = 1546, sb1 capacity = 3070 nchars = 1551, size = 1551, sb1 capacity = 3070 nchars = 1556, size = 1556, sb1 capacity = 3070 nchars = 1561, size = 1561, sb1 capacity = 3070 nchars = 1566, size = 1566, sb1 capacity = 3070 nchars = 1571, size = 1571, sb1 capacity = 3070 nchars = 1576, size = 1576, sb1 capacity = 3070 nchars = 1581, size = 1581, sb1 capacity = 3070 nchars = 1586, size = 1586, sb1 capacity = 3070 nchars = 1591, size = 1591, sb1 capacity = 3070 nchars = 1596, size = 1596, sb1 capacity = 3070 nchars = 1601, size = 1601, sb1 capacity = 3070 nchars = 1606, size = 1606, sb1 capacity = 3070 nchars = 1611, size = 1611, sb1 capacity = 3070 nchars = 1616, size = 1616, sb1 capacity = 3070 nchars = 1621, size = 1621, sb1 capacity = 3070 nchars = 1626, size = 1626, sb1 capacity = 3070 nchars = 1631, size = 1631, sb1 capacity = 3070 nchars = 1636, size = 1636, sb1 capacity = 3070 nchars = 1641, size = 1641, sb1 capacity = 3070 nchars = 1646, size = 1646, sb1 capacity = 3070 nchars = 1651, size = 1651, sb1 capacity = 3070 nchars = 1656, size = 1656, sb1 capacity = 3070 nchars = 1661, size = 1661, sb1 capacity = 3070 nchars = 1666, size = 1666, sb1 capacity = 3070 nchars = 1671, size = 1671, sb1 capacity = 3070 nchars = 1676, size = 1676, sb1 capacity = 3070 nchars = 1681, size = 1681, sb1 capacity = 3070 nchars = 1686, size = 1686, sb1 capacity = 3070 nchars = 1691, size = 1691, sb1 capacity = 3070 nchars = 1696, size = 1696, sb1 capacity = 3070 nchars = 1701, size = 1701, sb1 capacity = 3070 nchars = 1706, size = 1706, sb1 capacity = 3070 nchars = 1711, size = 1711, sb1 capacity = 3070 nchars = 1716, size = 1716, sb1 capacity = 3070 nchars = 1721, size = 1721, sb1 capacity = 3070 nchars = 1726, size = 1726, sb1 capacity = 3070 nchars = 1731, size = 1731, sb1 capacity = 3070 nchars = 1736, size = 1736, sb1 capacity = 3070 nchars = 1741, size = 1741, sb1 capacity = 3070 nchars = 1746, size = 1746, sb1 capacity = 3070 nchars = 1751, size = 1751, sb1 capacity = 3070 nchars = 1756, size = 1756, sb1 capacity = 3070 nchars = 1761, size = 1761, sb1 capacity = 3070 nchars = 1766, size = 1766, sb1 capacity = 3070 nchars = 1771, size = 1771, sb1 capacity = 3070 nchars = 1776, size = 1776, sb1 capacity = 3070 nchars = 1781, size = 1781, sb1 capacity = 3070 nchars = 1786, size = 1786, sb1 capacity = 3070 nchars = 1791, size = 1791, sb1 capacity = 3070 nchars = 1796, size = 1796, sb1 capacity = 3070 nchars = 1801, size = 1801, sb1 capacity = 3070 nchars = 1806, size = 1806, sb1 capacity = 3070 nchars = 1811, size = 1811, sb1 capacity = 3070 nchars = 1816, size = 1816, sb1 capacity = 3070 nchars = 1821, size = 1821, sb1 capacity = 3070 nchars = 1826, size = 1826, sb1 capacity = 3070 nchars = 1831, size = 1831, sb1 capacity = 3070 nchars = 1836, size = 1836, sb1 capacity = 3070 nchars = 1841, size = 1841, sb1 capacity = 3070 nchars = 1846, size = 1846, sb1 capacity = 3070 nchars = 1851, size = 1851, sb1 capacity = 3070 nchars = 1856, size = 1856, sb1 capacity = 3070 nchars = 1861, size = 1861, sb1 capacity = 3070 nchars = 1866, size = 1866, sb1 capacity = 3070 nchars = 1871, size = 1871, sb1 capacity = 3070 nchars = 1876, size = 1876, sb1 capacity = 3070 nchars = 1881, size = 1881, sb1 capacity = 3070 nchars = 1886, size = 1886, sb1 capacity = 3070 nchars = 1891, size = 1891, sb1 capacity = 3070 nchars = 1896, size = 1896, sb1 capacity = 3070 nchars = 1901, size = 1901, sb1 capacity = 3070 nchars = 1906, size = 1906, sb1 capacity = 3070 nchars = 1911, size = 1911, sb1 capacity = 3070 nchars = 1916, size = 1916, sb1 capacity = 3070 nchars = 1921, size = 1921, sb1 capacity = 3070 nchars = 1926, size = 1926, sb1 capacity = 3070 nchars = 1931, size = 1931, sb1 capacity = 3070 nchars = 1936, size = 1936, sb1 capacity = 3070 nchars = 1941, size = 1941, sb1 capacity = 3070 nchars = 1946, size = 1946, sb1 capacity = 3070 nchars = 1951, size = 1951, sb1 capacity = 3070 nchars = 1956, size = 1956, sb1 capacity = 3070 nchars = 1961, size = 1961, sb1 capacity = 3070 nchars = 1966, size = 1966, sb1 capacity = 3070 nchars = 1971, size = 1971, sb1 capacity = 3070 nchars = 1976, size = 1976, sb1 capacity = 3070 nchars = 1981, size = 1981, sb1 capacity = 3070 nchars = 1986, size = 1986, sb1 capacity = 3070 nchars = 1991, size = 1991, sb1 capacity = 3070 nchars = 1996, size = 1996, sb1 capacity = 3070 nchars = 2001, size = 2001, sb1 capacity = 3070 nchars = 2006, size = 2006, sb1 capacity = 3070 nchars = 2011, size = 2011, sb1 capacity = 3070 nchars = 2016, size = 2016, sb1 capacity = 3070 nchars = 2021, size = 2021, sb1 capacity = 3070 nchars = 2026, size = 2026, sb1 capacity = 3070 nchars = 2031, size = 2031, sb1 capacity = 3070 nchars = 2036, size = 2036, sb1 capacity = 3070 nchars = 2041, size = 2041, sb1 capacity = 3070 nchars = 2046, size = 2046, sb1 capacity = 3070 nchars = 2051, size = 2051, sb1 capacity = 3070 nchars = 2056, size = 2056, sb1 capacity = 3070 nchars = 2061, size = 2061, sb1 capacity = 3070 nchars = 2066, size = 2066, sb1 capacity = 3070 nchars = 2071, size = 2071, sb1 capacity = 3070 nchars = 2076, size = 2076, sb1 capacity = 3070 nchars = 2081, size = 2081, sb1 capacity = 3070 nchars = 2086, size = 2086, sb1 capacity = 3070 nchars = 2091, size = 2091, sb1 capacity = 3070 nchars = 2096, size = 2096, sb1 capacity = 3070 nchars = 2101, size = 2101, sb1 capacity = 3070 nchars = 2106, size = 2106, sb1 capacity = 3070 nchars = 2111, size = 2111, sb1 capacity = 3070 nchars = 2116, size = 2116, sb1 capacity = 3070 nchars = 2121, size = 2121, sb1 capacity = 3070 nchars = 2126, size = 2126, sb1 capacity = 3070 nchars = 2131, size = 2131, sb1 capacity = 3070 nchars = 2136, size = 2136, sb1 capacity = 3070 nchars = 2141, size = 2141, sb1 capacity = 3070 nchars = 2146, size = 2146, sb1 capacity = 3070 nchars = 2151, size = 2151, sb1 capacity = 3070 nchars = 2156, size = 2156, sb1 capacity = 3070 nchars = 2161, size = 2161, sb1 capacity = 3070 nchars = 2166, size = 2166, sb1 capacity = 3070 nchars = 2171, size = 2171, sb1 capacity = 3070 nchars = 2176, size = 2176, sb1 capacity = 3070 nchars = 2181, size = 2181, sb1 capacity = 3070 nchars = 2186, size = 2186, sb1 capacity = 3070 nchars = 2191, size = 2191, sb1 capacity = 3070 nchars = 2196, size = 2196, sb1 capacity = 3070 nchars = 2201, size = 2201, sb1 capacity = 3070 nchars = 2206, size = 2206, sb1 capacity = 3070 nchars = 2211, size = 2211, sb1 capacity = 3070 nchars = 2216, size = 2216, sb1 capacity = 3070 nchars = 2221, size = 2221, sb1 capacity = 3070 nchars = 2226, size = 2226, sb1 capacity = 3070 nchars = 2231, size = 2231, sb1 capacity = 3070 nchars = 2236, size = 2236, sb1 capacity = 3070 nchars = 2241, size = 2241, sb1 capacity = 3070 nchars = 2246, size = 2246, sb1 capacity = 3070 nchars = 2251, size = 2251, sb1 capacity = 3070 nchars = 2256, size = 2256, sb1 capacity = 3070 nchars = 2261, size = 2261, sb1 capacity = 3070 nchars = 2266, size = 2266, sb1 capacity = 3070 nchars = 2271, size = 2271, sb1 capacity = 3070 nchars = 2276, size = 2276, sb1 capacity = 3070 nchars = 2281, size = 2281, sb1 capacity = 3070 nchars = 2286, size = 2286, sb1 capacity = 3070 nchars = 2291, size = 2291, sb1 capacity = 3070 nchars = 2296, size = 2296, sb1 capacity = 3070 nchars = 2301, size = 2301, sb1 capacity = 3070 nchars = 2306, size = 2306, sb1 capacity = 3070 nchars = 2311, size = 2311, sb1 capacity = 3070 nchars = 2316, size = 2316, sb1 capacity = 3070 nchars = 2321, size = 2321, sb1 capacity = 3070 nchars = 2326, size = 2326, sb1 capacity = 3070 nchars = 2331, size = 2331, sb1 capacity = 3070 nchars = 2336, size = 2336, sb1 capacity = 3070 nchars = 2341, size = 2341, sb1 capacity = 3070 nchars = 2346, size = 2346, sb1 capacity = 3070 nchars = 2351, size = 2351, sb1 capacity = 3070 nchars = 2356, size = 2356, sb1 capacity = 3070 nchars = 2361, size = 2361, sb1 capacity = 3070 nchars = 2366, size = 2366, sb1 capacity = 3070 nchars = 2371, size = 2371, sb1 capacity = 3070 nchars = 2376, size = 2376, sb1 capacity = 3070 nchars = 2381, size = 2381, sb1 capacity = 3070 nchars = 2386, size = 2386, sb1 capacity = 3070 nchars = 2391, size = 2391, sb1 capacity = 3070 nchars = 2396, size = 2396, sb1 capacity = 3070 nchars = 2401, size = 2401, sb1 capacity = 3070 nchars = 2406, size = 2406, sb1 capacity = 3070 nchars = 2411, size = 2411, sb1 capacity = 3070 nchars = 2416, size = 2416, sb1 capacity = 3070 nchars = 2421, size = 2421, sb1 capacity = 3070 nchars = 2426, size = 2426, sb1 capacity = 3070 nchars = 2431, size = 2431, sb1 capacity = 3070 nchars = 2436, size = 2436, sb1 capacity = 3070 nchars = 2441, size = 2441, sb1 capacity = 3070 nchars = 2446, size = 2446, sb1 capacity = 3070 nchars = 2451, size = 2451, sb1 capacity = 3070 nchars = 2456, size = 2456, sb1 capacity = 3070 nchars = 2461, size = 2461, sb1 capacity = 3070 nchars = 2466, size = 2466, sb1 capacity = 3070 nchars = 2471, size = 2471, sb1 capacity = 3070 nchars = 2476, size = 2476, sb1 capacity = 3070 nchars = 2481, size = 2481, sb1 capacity = 3070 nchars = 2486, size = 2486, sb1 capacity = 3070 nchars = 2491, size = 2491, sb1 capacity = 3070 nchars = 2496, size = 2496, sb1 capacity = 3070 nchars = 2501, size = 2501, sb1 capacity = 3070 nchars = 2506, size = 2506, sb1 capacity = 3070 nchars = 2511, size = 2511, sb1 capacity = 3070 nchars = 2516, size = 2516, sb1 capacity = 3070 nchars = 2521, size = 2521, sb1 capacity = 3070 nchars = 2526, size = 2526, sb1 capacity = 3070 nchars = 2531, size = 2531, sb1 capacity = 3070 nchars = 2536, size = 2536, sb1 capacity = 3070 nchars = 2541, size = 2541, sb1 capacity = 3070 nchars = 2546, size = 2546, sb1 capacity = 3070 nchars = 2551, size = 2551, sb1 capacity = 3070 nchars = 2556, size = 2556, sb1 capacity = 3070 nchars = 2561, size = 2561, sb1 capacity = 3070 nchars = 2566, size = 2566, sb1 capacity = 3070 nchars = 2571, size = 2571, sb1 capacity = 3070 nchars = 2576, size = 2576, sb1 capacity = 3070 nchars = 2581, size = 2581, sb1 capacity = 3070 nchars = 2586, size = 2586, sb1 capacity = 3070 nchars = 2591, size = 2591, sb1 capacity = 3070 nchars = 2596, size = 2596, sb1 capacity = 3070 nchars = 2601, size = 2601, sb1 capacity = 3070 nchars = 2606, size = 2606, sb1 capacity = 3070 nchars = 2611, size = 2611, sb1 capacity = 3070 nchars = 2616, size = 2616, sb1 capacity = 3070 nchars = 2621, size = 2621, sb1 capacity = 3070 nchars = 2626, size = 2626, sb1 capacity = 3070 nchars = 2631, size = 2631, sb1 capacity = 3070 nchars = 2636, size = 2636, sb1 capacity = 3070 nchars = 2641, size = 2641, sb1 capacity = 3070 nchars = 2646, size = 2646, sb1 capacity = 3070 nchars = 2651, size = 2651, sb1 capacity = 3070 nchars = 2656, size = 2656, sb1 capacity = 3070 nchars = 2661, size = 2661, sb1 capacity = 3070 nchars = 2666, size = 2666, sb1 capacity = 3070 nchars = 2671, size = 2671, sb1 capacity = 3070 nchars = 2676, size = 2676, sb1 capacity = 3070 nchars = 2681, size = 2681, sb1 capacity = 3070 nchars = 2686, size = 2686, sb1 capacity = 3070 nchars = 2691, size = 2691, sb1 capacity = 3070 nchars = 2696, size = 2696, sb1 capacity = 3070 nchars = 2701, size = 2701, sb1 capacity = 3070 nchars = 2706, size = 2706, sb1 capacity = 3070 nchars = 2711, size = 2711, sb1 capacity = 3070 nchars = 2716, size = 2716, sb1 capacity = 3070 nchars = 2721, size = 2721, sb1 capacity = 3070 nchars = 2726, size = 2726, sb1 capacity = 3070 nchars = 2731, size = 2731, sb1 capacity = 3070 nchars = 2736, size = 2736, sb1 capacity = 3070 nchars = 2741, size = 2741, sb1 capacity = 3070 nchars = 2746, size = 2746, sb1 capacity = 3070 nchars = 2751, size = 2751, sb1 capacity = 3070 nchars = 2756, size = 2756, sb1 capacity = 3070 nchars = 2761, size = 2761, sb1 capacity = 3070 nchars = 2766, size = 2766, sb1 capacity = 3070 nchars = 2771, size = 2771, sb1 capacity = 3070 nchars = 2776, size = 2776, sb1 capacity = 3070 nchars = 2781, size = 2781, sb1 capacity = 3070 nchars = 2786, size = 2786, sb1 capacity = 3070 nchars = 2791, size = 2791, sb1 capacity = 3070 nchars = 2796, size = 2796, sb1 capacity = 3070 nchars = 2801, size = 2801, sb1 capacity = 3070 nchars = 2806, size = 2806, sb1 capacity = 3070 nchars = 2811, size = 2811, sb1 capacity = 3070 nchars = 2816, size = 2816, sb1 capacity = 3070 nchars = 2821, size = 2821, sb1 capacity = 3070 nchars = 2826, size = 2826, sb1 capacity = 3070 nchars = 2831, size = 2831, sb1 capacity = 3070 nchars = 2836, size = 2836, sb1 capacity = 3070 nchars = 2841, size = 2841, sb1 capacity = 3070 nchars = 2846, size = 2846, sb1 capacity = 3070 nchars = 2851, size = 2851, sb1 capacity = 3070 nchars = 2856, size = 2856, sb1 capacity = 3070 nchars = 2861, size = 2861, sb1 capacity = 3070 nchars = 2866, size = 2866, sb1 capacity = 3070 nchars = 2871, size = 2871, sb1 capacity = 3070 nchars = 2876, size = 2876, sb1 capacity = 3070 nchars = 2881, size = 2881, sb1 capacity = 3070 nchars = 2886, size = 2886, sb1 capacity = 3070 nchars = 2891, size = 2891, sb1 capacity = 3070 nchars = 2896, size = 2896, sb1 capacity = 3070 nchars = 2901, size = 2901, sb1 capacity = 3070 nchars = 2906, size = 2906, sb1 capacity = 3070 nchars = 2911, size = 2911, sb1 capacity = 3070 nchars = 2916, size = 2916, sb1 capacity = 3070 nchars = 2921, size = 2921, sb1 capacity = 3070 nchars = 2926, size = 2926, sb1 capacity = 3070 nchars = 2931, size = 2931, sb1 capacity = 3070 nchars = 2936, size = 2936, sb1 capacity = 3070 nchars = 2941, size = 2941, sb1 capacity = 3070 nchars = 2946, size = 2946, sb1 capacity = 3070 nchars = 2951, size = 2951, sb1 capacity = 3070 nchars = 2956, size = 2956, sb1 capacity = 3070 nchars = 2961, size = 2961, sb1 capacity = 3070 nchars = 2966, size = 2966, sb1 capacity = 3070 nchars = 2971, size = 2971, sb1 capacity = 3070 nchars = 2976, size = 2976, sb1 capacity = 3070 nchars = 2981, size = 2981, sb1 capacity = 3070 nchars = 2986, size = 2986, sb1 capacity = 3070 nchars = 2991, size = 2991, sb1 capacity = 3070 nchars = 2996, size = 2996, sb1 capacity = 3070 nchars = 3001, size = 3001, sb1 capacity = 3070 nchars = 3006, size = 3006, sb1 capacity = 3070 nchars = 3011, size = 3011, sb1 capacity = 3070 nchars = 3016, size = 3016, sb1 capacity = 3070 nchars = 3021, size = 3021, sb1 capacity = 3070 nchars = 3026, size = 3026, sb1 capacity = 3070 nchars = 3031, size = 3031, sb1 capacity = 3070 nchars = 3036, size = 3036, sb1 capacity = 3070 nchars = 3041, size = 3041, sb1 capacity = 3070 nchars = 3046, size = 3046, sb1 capacity = 3070 nchars = 3051, size = 3051, sb1 capacity = 3070 nchars = 3056, size = 3056, sb1 capacity = 3070 nchars = 3061, size = 3061, sb1 capacity = 3070 nchars = 3066, size = 3066, sb1 capacity = 3070 nchars = 3071, size = 3071, sb1 capacity = 6142 nchars = 3076, size = 3076, sb1 capacity = 6142 nchars = 3081, size = 3081, sb1 capacity = 6142 nchars = 3086, size = 3086, sb1 capacity = 6142 nchars = 3091, size = 3091, sb1 capacity = 6142 nchars = 3096, size = 3096, sb1 capacity = 6142 nchars = 3101, size = 3101, sb1 capacity = 6142 nchars = 3106, size = 3106, sb1 capacity = 6142 nchars = 3111, size = 3111, sb1 capacity = 6142 nchars = 3116, size = 3116, sb1 capacity = 6142 nchars = 3121, size = 3121, sb1 capacity = 6142 nchars = 3126, size = 3126, sb1 capacity = 6142 nchars = 3131, size = 3131, sb1 capacity = 6142 nchars = 3136, size = 3136, sb1 capacity = 6142 nchars = 3141, size = 3141, sb1 capacity = 6142 nchars = 3146, size = 3146, sb1 capacity = 6142 nchars = 3151, size = 3151, sb1 capacity = 6142 nchars = 3156, size = 3156, sb1 capacity = 6142 nchars = 3161, size = 3161, sb1 capacity = 6142 nchars = 3166, size = 3166, sb1 capacity = 6142 nchars = 3171, size = 3171, sb1 capacity = 6142 nchars = 3176, size = 3176, sb1 capacity = 6142 nchars = 3181, size = 3181, sb1 capacity = 6142 nchars = 3186, size = 3186, sb1 capacity = 6142 nchars = 3191, size = 3191, sb1 capacity = 6142 nchars = 3196, size = 3196, sb1 capacity = 6142 nchars = 3201, size = 3201, sb1 capacity = 6142 nchars = 3206, size = 3206, sb1 capacity = 6142 nchars = 3211, size = 3211, sb1 capacity = 6142 nchars = 3216, size = 3216, sb1 capacity = 6142 nchars = 3221, size = 3221, sb1 capacity = 6142 nchars = 3226, size = 3226, sb1 capacity = 6142 nchars = 3231, size = 3231, sb1 capacity = 6142 nchars = 3236, size = 3236, sb1 capacity = 6142 nchars = 3241, size = 3241, sb1 capacity = 6142 nchars = 3246, size = 3246, sb1 capacity = 6142 nchars = 3251, size = 3251, sb1 capacity = 6142 nchars = 3256, size = 3256, sb1 capacity = 6142 nchars = 3261, size = 3261, sb1 capacity = 6142 nchars = 3266, size = 3266, sb1 capacity = 6142 nchars = 3271, size = 3271, sb1 capacity = 6142 nchars = 3276, size = 3276, sb1 capacity = 6142 nchars = 3281, size = 3281, sb1 capacity = 6142 nchars = 3286, size = 3286, sb1 capacity = 6142 nchars = 3291, size = 3291, sb1 capacity = 6142 nchars = 3296, size = 3296, sb1 capacity = 6142 nchars = 3301, size = 3301, sb1 capacity = 6142 nchars = 3306, size = 3306, sb1 capacity = 6142 nchars = 3311, size = 3311, sb1 capacity = 6142 nchars = 3316, size = 3316, sb1 capacity = 6142 nchars = 3321, size = 3321, sb1 capacity = 6142 nchars = 3326, size = 3326, sb1 capacity = 6142 nchars = 3331, size = 3331, sb1 capacity = 6142 nchars = 3336, size = 3336, sb1 capacity = 6142 nchars = 3341, size = 3341, sb1 capacity = 6142 nchars = 3346, size = 3346, sb1 capacity = 6142 nchars = 3351, size = 3351, sb1 capacity = 6142 nchars = 3356, size = 3356, sb1 capacity = 6142 nchars = 3361, size = 3361, sb1 capacity = 6142 nchars = 3366, size = 3366, sb1 capacity = 6142 nchars = 3371, size = 3371, sb1 capacity = 6142 nchars = 3376, size = 3376, sb1 capacity = 6142 nchars = 3381, size = 3381, sb1 capacity = 6142 nchars = 3386, size = 3386, sb1 capacity = 6142 nchars = 3391, size = 3391, sb1 capacity = 6142 nchars = 3396, size = 3396, sb1 capacity = 6142 nchars = 3401, size = 3401, sb1 capacity = 6142 nchars = 3406, size = 3406, sb1 capacity = 6142 nchars = 3411, size = 3411, sb1 capacity = 6142 nchars = 3416, size = 3416, sb1 capacity = 6142 nchars = 3421, size = 3421, sb1 capacity = 6142 nchars = 3426, size = 3426, sb1 capacity = 6142 nchars = 3431, size = 3431, sb1 capacity = 6142 nchars = 3436, size = 3436, sb1 capacity = 6142 nchars = 3441, size = 3441, sb1 capacity = 6142 nchars = 3446, size = 3446, sb1 capacity = 6142 nchars = 3451, size = 3451, sb1 capacity = 6142 nchars = 3456, size = 3456, sb1 capacity = 6142 nchars = 3461, size = 3461, sb1 capacity = 6142 nchars = 3466, size = 3466, sb1 capacity = 6142 nchars = 3471, size = 3471, sb1 capacity = 6142 nchars = 3476, size = 3476, sb1 capacity = 6142 nchars = 3481, size = 3481, sb1 capacity = 6142 nchars = 3486, size = 3486, sb1 capacity = 6142 nchars = 3491, size = 3491, sb1 capacity = 6142 nchars = 3496, size = 3496, sb1 capacity = 6142 nchars = 3501, size = 3501, sb1 capacity = 6142 nchars = 3506, size = 3506, sb1 capacity = 6142 nchars = 3511, size = 3511, sb1 capacity = 6142 nchars = 3516, size = 3516, sb1 capacity = 6142 nchars = 3521, size = 3521, sb1 capacity = 6142 nchars = 3526, size = 3526, sb1 capacity = 6142 nchars = 3531, size = 3531, sb1 capacity = 6142 nchars = 3536, size = 3536, sb1 capacity = 6142 nchars = 3541, size = 3541, sb1 capacity = 6142 nchars = 3546, size = 3546, sb1 capacity = 6142 nchars = 3551, size = 3551, sb1 capacity = 6142 nchars = 3556, size = 3556, sb1 capacity = 6142 nchars = 3561, size = 3561, sb1 capacity = 6142 nchars = 3566, size = 3566, sb1 capacity = 6142 nchars = 3571, size = 3571, sb1 capacity = 6142 nchars = 3576, size = 3576, sb1 capacity = 6142 nchars = 3581, size = 3581, sb1 capacity = 6142 nchars = 3586, size = 3586, sb1 capacity = 6142 nchars = 3591, size = 3591, sb1 capacity = 6142 nchars = 3596, size = 3596, sb1 capacity = 6142 nchars = 3601, size = 3601, sb1 capacity = 6142 nchars = 3606, size = 3606, sb1 capacity = 6142 nchars = 3611, size = 3611, sb1 capacity = 6142 nchars = 3616, size = 3616, sb1 capacity = 6142 nchars = 3621, size = 3621, sb1 capacity = 6142 nchars = 3626, size = 3626, sb1 capacity = 6142 nchars = 3631, size = 3631, sb1 capacity = 6142 nchars = 3636, size = 3636, sb1 capacity = 6142 nchars = 3641, size = 3641, sb1 capacity = 6142 nchars = 3646, size = 3646, sb1 capacity = 6142 nchars = 3651, size = 3651, sb1 capacity = 6142 nchars = 3656, size = 3656, sb1 capacity = 6142 nchars = 3661, size = 3661, sb1 capacity = 6142 nchars = 3666, size = 3666, sb1 capacity = 6142 nchars = 3671, size = 3671, sb1 capacity = 6142 nchars = 3676, size = 3676, sb1 capacity = 6142 nchars = 3681, size = 3681, sb1 capacity = 6142 nchars = 3686, size = 3686, sb1 capacity = 6142 nchars = 3691, size = 3691, sb1 capacity = 6142 nchars = 3696, size = 3696, sb1 capacity = 6142 nchars = 3701, size = 3701, sb1 capacity = 6142 nchars = 3706, size = 3706, sb1 capacity = 6142 nchars = 3711, size = 3711, sb1 capacity = 6142 nchars = 3716, size = 3716, sb1 capacity = 6142 nchars = 3721, size = 3721, sb1 capacity = 6142 nchars = 3726, size = 3726, sb1 capacity = 6142 nchars = 3731, size = 3731, sb1 capacity = 6142 nchars = 3736, size = 3736, sb1 capacity = 6142 nchars = 3741, size = 3741, sb1 capacity = 6142 nchars = 3746, size = 3746, sb1 capacity = 6142 nchars = 3751, size = 3751, sb1 capacity = 6142 nchars = 3756, size = 3756, sb1 capacity = 6142 nchars = 3761, size = 3761, sb1 capacity = 6142 nchars = 3766, size = 3766, sb1 capacity = 6142 nchars = 3771, size = 3771, sb1 capacity = 6142 nchars = 3776, size = 3776, sb1 capacity = 6142 nchars = 3781, size = 3781, sb1 capacity = 6142 nchars = 3786, size = 3786, sb1 capacity = 6142 nchars = 3791, size = 3791, sb1 capacity = 6142 nchars = 3796, size = 3796, sb1 capacity = 6142 nchars = 3801, size = 3801, sb1 capacity = 6142 nchars = 3806, size = 3806, sb1 capacity = 6142 nchars = 3811, size = 3811, sb1 capacity = 6142 nchars = 3816, size = 3816, sb1 capacity = 6142 nchars = 3821, size = 3821, sb1 capacity = 6142 nchars = 3826, size = 3826, sb1 capacity = 6142 nchars = 3831, size = 3831, sb1 capacity = 6142 nchars = 3836, size = 3836, sb1 capacity = 6142 nchars = 3841, size = 3841, sb1 capacity = 6142 nchars = 3846, size = 3846, sb1 capacity = 6142 nchars = 3851, size = 3851, sb1 capacity = 6142 nchars = 3856, size = 3856, sb1 capacity = 6142 nchars = 3861, size = 3861, sb1 capacity = 6142 passed: testing sb size == nchars /* Growable String Buffers * (c) Mark A. Sheldon, Spring 2007 */ #include #include #include /* #include "string_buffer.h" ommitted because of conflicting typedef, and I don't want to cast everything. */ #define INITIAL_BUFFSIZE 1 #define MAX(x, y) (x) > (y) ? (x) : (y) typedef struct strbuff { char *contents; int size, capacity; } *strbuff_t; strbuff_t mk_strbuff(void) { strbuff_t sb = (strbuff_t) malloc(sizeof(struct strbuff)); if (sb == NULL) return NULL; sb->contents = malloc(INITIAL_BUFFSIZE); if (sb->contents == NULL) { free(sb); return NULL; } sb->size = 0; sb->capacity = INITIAL_BUFFSIZE; return sb; } inline int strbuff_size(strbuff_t sb) { return (sb == NULL) ? -1 : sb->size; } inline int strbuff_capacity(strbuff_t sb) { return (sb == NULL) ? -1 : sb->capacity; } static inline char *strbuff_contents(strbuff_t sb) { return (sb == NULL) ? NULL : sb->contents; } char *strbuff_to_string(strbuff_t sb) { int size; char *s; if (sb == NULL) return NULL; size = strbuff_size(sb); s = malloc(size + 1); if (s == NULL) return NULL; memcpy(s, sb->contents, size); s[size] = '\0'; return s; } /* Follows the Java StringBuffer model: if new capacity is greater than current capacity, then allocate space equal to larger of new capacity or 2 + twice the current capacity. */ int strbuff_ensure_capacity(strbuff_t sb, int new_cap) { int curr_cap, req_cap; char *new_contents; if (sb == NULL) return EINVAL; curr_cap = strbuff_capacity(sb); if (curr_cap >= new_cap) /* quietly succeeds if new_cap < 0 */ return 0; req_cap = MAX(new_cap, (2 * curr_cap) + 2); new_contents = (char *) malloc(req_cap); if (new_contents == NULL) return ENOMEM; memcpy(new_contents, strbuff_contents(sb), strbuff_size(sb)); free(strbuff_contents(sb)); sb->contents = new_contents; sb->capacity = req_cap; return 0; } int strbuff_append(strbuff_t sb, char c) { int ret; if (sb == NULL) return EINVAL; if ((ret = strbuff_ensure_capacity(sb, strbuff_size(sb) + 1)) != 0) return ret; sb->contents[sb->size] = c; sb->size++; return 0; } int strbuff_append_str(strbuff_t sb, char *s) { int len, size, ret; if ( (sb == NULL) || (s == NULL) ) return EINVAL; len = strlen(s); size = strbuff_size(sb); ret = strbuff_ensure_capacity(sb, size + len); if (ret != 0) return ret; memcpy(&strbuff_contents(sb)[size], s, len); sb->size += len; return 0; } int strbuff_getchar(strbuff_t sb, int index) { if ((sb == NULL) || (index < 0) || (index >= strbuff_size(sb))) return -1; return strbuff_contents(sb)[index]; } int strbuff_setchar(strbuff_t sb, char c, int index) { if ((sb == NULL) || (index < 0) || (index >= strbuff_size(sb))) return -1; return strbuff_contents(sb)[index] = c; } /* Note: Does not actually free space, just resets size so current contents array is reused. */ int strbuff_truncate(strbuff_t sb, int newsize) { if (sb == NULL) return EINVAL; if ((newsize >= 0) && (newsize <= strbuff_size(sb))) { sb->size = newsize; return 0; } else return EINVAL; } void strbuff_destroy(strbuff_t sb) { if (sb == NULL) return; free(strbuff_contents(sb)); /* Invariant: contents never NULL */ free(sb); } passed: strbuff_to_string(NULL) == NULL passed: strbuff_to_string() results equal but not eq passed: strbuff_to_string() result disjoint w/ contents passed: strbuff_append_str() => EINVAL with arg NULL passed: strbuff_append_str(sb, s1) returns 0 passed: strbuff_append_str(sb, s1) doubles sb size passed: correct result in contents passed: strbuff_getchar(NULL, 0) == -1 passed: 8 chars in sb2 passed: strbuff_getchar(sb, -2) == -1 passed: strbuff_getchar(sb, toomuch) == -1 passed: strbuff_getchar() works passed: strbuff_setchar(NULL, 'c', 0) == -1 passed: strbuff_setchar(sb, 'c', -2) == -1 passed: strbuff_setchar(sb, toomuch) == -1 passed: strbuff_setchar() works passed: truncating NULL sb pointer returns EINVAL passed: truncating sb to negative size returns EINVAL passed: strbuff_truncate() works 0: all 1: test_mk_strbuff() 2: test_strbuff_size_and_capacity() 3: test_strbuff_append() 4: test_strbuff_to_string() 5: test_strbuff_append_str() 6: test_strbuff_getchar_setchar() 7: test_strbuff_truncate() q: quit ?: q midterm_test$