Training courses

Kernel and Embedded Linux

Bootlin training courses

Embedded Linux, kernel,
Yocto Project, Buildroot, real-time,
graphics, boot time, debugging...

Bootlin logo

Elixir Cross Referencer

   1
   2
   3
   4
   5
   6
   7
   8
   9
  10
  11
  12
  13
  14
  15
  16
  17
  18
  19
  20
  21
  22
  23
  24
  25
  26
  27
  28
  29
  30
  31
  32
  33
  34
  35
  36
  37
  38
  39
  40
  41
  42
  43
  44
  45
  46
  47
  48
  49
  50
  51
  52
  53
  54
  55
  56
  57
  58
  59
  60
  61
  62
  63
  64
  65
  66
  67
  68
  69
  70
  71
  72
  73
  74
  75
  76
  77
  78
  79
  80
  81
  82
  83
  84
  85
  86
  87
  88
  89
  90
  91
  92
  93
  94
  95
  96
  97
  98
  99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
 110
 111
 112
 113
 114
 115
 116
 117
 118
 119
 120
 121
 122
 123
 124
 125
 126
 127
 128
 129
 130
 131
 132
 133
 134
 135
 136
 137
 138
 139
 140
 141
 142
 143
 144
 145
 146
 147
 148
 149
 150
 151
 152
 153
 154
 155
 156
 157
 158
 159
 160
 161
 162
 163
 164
 165
 166
 167
 168
 169
 170
 171
 172
 173
 174
 175
 176
 177
 178
 179
 180
 181
 182
 183
 184
 185
 186
 187
 188
 189
 190
 191
 192
 193
 194
 195
 196
 197
 198
 199
 200
 201
 202
 203
 204
 205
 206
 207
 208
 209
 210
 211
 212
 213
 214
 215
 216
 217
 218
 219
 220
 221
 222
 223
 224
 225
 226
 227
 228
 229
 230
 231
 232
 233
 234
 235
 236
 237
 238
 239
 240
 241
 242
 243
 244
 245
 246
 247
 248
 249
 250
 251
 252
 253
 254
 255
 256
 257
 258
 259
 260
 261
 262
 263
 264
 265
 266
 267
 268
 269
 270
 271
 272
 273
 274
 275
 276
 277
 278
 279
 280
 281
 282
 283
 284
 285
 286
 287
 288
 289
 290
 291
 292
 293
 294
 295
 296
 297
 298
 299
 300
 301
 302
 303
 304
 305
 306
 307
 308
 309
 310
 311
 312
 313
 314
 315
 316
 317
 318
 319
 320
 321
 322
 323
 324
 325
 326
 327
 328
 329
 330
 331
 332
 333
 334
 335
 336
 337
 338
 339
 340
 341
 342
 343
 344
 345
 346
 347
 348
 349
 350
 351
 352
 353
 354
 355
 356
 357
 358
 359
 360
 361
 362
 363
 364
 365
 366
 367
 368
 369
 370
 371
 372
 373
 374
 375
 376
 377
 378
 379
 380
 381
 382
 383
 384
 385
 386
 387
 388
 389
 390
 391
 392
 393
 394
 395
 396
 397
 398
 399
 400
 401
 402
 403
 404
 405
 406
 407
 408
 409
 410
 411
 412
 413
 414
 415
 416
 417
 418
 419
 420
 421
 422
 423
 424
 425
 426
 427
 428
 429
 430
 431
 432
 433
 434
 435
 436
 437
 438
 439
 440
 441
 442
 443
 444
 445
 446
 447
 448
 449
 450
 451
 452
 453
 454
 455
 456
 457
 458
 459
 460
 461
 462
 463
 464
 465
 466
 467
 468
 469
 470
 471
 472
 473
 474
 475
 476
 477
 478
 479
 480
 481
 482
 483
 484
 485
 486
 487
 488
 489
 490
 491
 492
 493
 494
 495
 496
 497
 498
 499
 500
 501
 502
 503
 504
 505
 506
 507
 508
 509
 510
 511
 512
 513
 514
 515
 516
 517
 518
 519
 520
 521
 522
 523
 524
 525
 526
 527
 528
 529
 530
 531
 532
 533
 534
 535
 536
 537
 538
 539
 540
 541
 542
 543
 544
 545
 546
 547
 548
 549
 550
 551
 552
 553
 554
 555
 556
 557
 558
 559
 560
 561
 562
 563
 564
 565
 566
 567
 568
 569
 570
 571
 572
 573
 574
 575
 576
 577
 578
 579
 580
 581
 582
 583
 584
 585
 586
 587
 588
 589
 590
 591
 592
 593
 594
 595
 596
 597
 598
 599
 600
 601
 602
 603
 604
 605
 606
 607
 608
 609
 610
 611
 612
 613
 614
 615
 616
 617
 618
 619
 620
 621
 622
 623
 624
 625
 626
 627
 628
 629
 630
 631
 632
 633
 634
 635
 636
 637
 638
 639
 640
 641
 642
 643
 644
 645
 646
 647
 648
 649
 650
 651
 652
 653
 654
 655
 656
 657
 658
 659
 660
 661
 662
 663
 664
 665
 666
 667
 668
 669
 670
 671
 672
 673
 674
 675
 676
 677
 678
 679
 680
 681
 682
 683
 684
 685
 686
 687
 688
 689
 690
 691
 692
 693
 694
 695
 696
 697
 698
 699
 700
 701
 702
 703
 704
 705
 706
 707
 708
 709
 710
 711
 712
 713
 714
 715
 716
 717
 718
 719
 720
 721
 722
 723
 724
 725
 726
 727
 728
 729
 730
 731
 732
 733
 734
 735
 736
 737
 738
 739
 740
 741
 742
 743
 744
 745
 746
 747
 748
 749
 750
 751
 752
 753
 754
 755
 756
 757
 758
 759
 760
 761
 762
 763
 764
 765
 766
 767
 768
 769
 770
 771
 772
 773
 774
 775
 776
 777
 778
 779
 780
 781
 782
 783
 784
 785
 786
 787
 788
 789
 790
 791
 792
 793
 794
 795
 796
 797
 798
 799
 800
 801
 802
 803
 804
 805
 806
 807
 808
 809
 810
 811
 812
 813
 814
 815
 816
 817
 818
 819
 820
 821
 822
 823
 824
 825
 826
 827
 828
 829
 830
 831
 832
 833
 834
 835
 836
 837
 838
 839
 840
 841
 842
 843
 844
 845
 846
 847
 848
 849
 850
 851
 852
 853
 854
 855
 856
 857
 858
 859
 860
 861
 862
 863
 864
 865
 866
 867
 868
 869
 870
 871
 872
 873
 874
 875
 876
 877
 878
 879
 880
 881
 882
 883
 884
 885
 886
 887
 888
 889
 890
 891
 892
 893
 894
 895
 896
 897
 898
 899
 900
 901
 902
 903
 904
 905
 906
 907
 908
 909
 910
 911
 912
 913
 914
 915
 916
 917
 918
 919
 920
 921
 922
 923
 924
 925
 926
 927
 928
 929
 930
 931
 932
 933
 934
 935
 936
 937
 938
 939
 940
 941
 942
 943
 944
 945
 946
 947
 948
 949
 950
 951
 952
 953
 954
 955
 956
 957
 958
 959
 960
 961
 962
 963
 964
 965
 966
 967
 968
 969
 970
 971
 972
 973
 974
 975
 976
 977
 978
 979
 980
 981
 982
 983
 984
 985
 986
 987
 988
 989
 990
 991
 992
 993
 994
 995
 996
 997
 998
 999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097
3098
3099
3100
3101
3102
3103
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122
3123
3124
3125
3126
3127
3128
3129
3130
3131
3132
3133
3134
3135
3136
3137
3138
3139
3140
3141
3142
3143
3144
3145
3146
3147
3148
3149
3150
3151
3152
3153
3154
3155
3156
3157
3158
3159
3160
3161
3162
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
3181
3182
3183
3184
3185
3186
3187
3188
3189
3190
3191
3192
3193
3194
3195
3196
3197
3198
3199
3200
3201
3202
3203
3204
3205
3206
3207
3208
3209
3210
3211
3212
3213
3214
3215
3216
3217
3218
3219
3220
3221
3222
3223
3224
3225
3226
3227
3228
3229
3230
3231
3232
3233
3234
3235
3236
3237
3238
3239
3240
3241
3242
3243
3244
3245
3246
3247
3248
3249
3250
3251
3252
3253
3254
3255
3256
3257
3258
3259
3260
3261
3262
3263
3264
3265
3266
3267
3268
3269
3270
3271
3272
3273
3274
3275
3276
3277
3278
3279
3280
3281
3282
3283
3284
3285
3286
3287
3288
3289
3290
3291
3292
3293
3294
3295
3296
3297
3298
3299
3300
3301
3302
3303
3304
3305
3306
3307
3308
3309
3310
3311
3312
3313
3314
3315
3316
3317
3318
3319
3320
3321
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331
3332
3333
3334
3335
3336
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352
3353
3354
3355
3356
3357
3358
3359
3360
3361
3362
3363
3364
3365
3366
3367
3368
3369
3370
3371
3372
3373
3374
3375
3376
3377
3378
3379
3380
3381
3382
3383
3384
3385
3386
3387
3388
3389
3390
3391
3392
3393
3394
3395
3396
3397
3398
3399
3400
3401
3402
3403
3404
3405
3406
3407
3408
3409
3410
3411
3412
3413
3414
3415
3416
3417
3418
3419
3420
3421
3422
3423
3424
3425
3426
3427
3428
3429
3430
3431
3432
3433
3434
3435
3436
3437
3438
3439
3440
3441
3442
3443
3444
3445
3446
3447
3448
3449
3450
3451
3452
3453
3454
3455
3456
3457
3458
3459
3460
3461
3462
3463
3464
3465
3466
3467
3468
3469
3470
3471
3472
3473
3474
3475
3476
3477
3478
3479
3480
3481
3482
3483
3484
3485
3486
3487
3488
3489
3490
3491
3492
3493
3494
3495
3496
3497
3498
3499
3500
3501
3502
3503
3504
3505
3506
3507
3508
3509
3510
3511
3512
3513
3514
3515
3516
3517
3518
3519
3520
3521
3522
3523
3524
3525
3526
3527
3528
3529
3530
3531
3532
3533
3534
3535
3536
3537
3538
3539
3540
3541
3542
3543
3544
3545
3546
3547
3548
3549
3550
3551
3552
3553
3554
3555
3556
3557
3558
3559
3560
3561
3562
3563
3564
3565
3566
3567
3568
3569
3570
3571
3572
3573
3574
3575
3576
3577
3578
3579
3580
3581
3582
3583
3584
3585
3586
3587
3588
3589
3590
3591
3592
3593
3594
3595
3596
3597
3598
3599
3600
3601
3602
3603
3604
3605
3606
3607
3608
3609
3610
3611
3612
3613
3614
3615
3616
3617
3618
3619
3620
3621
3622
3623
3624
3625
3626
3627
3628
3629
3630
3631
3632
3633
3634
3635
3636
3637
3638
3639
3640
3641
3642
3643
3644
3645
3646
3647
3648
3649
3650
3651
3652
3653
3654
3655
3656
3657
3658
3659
3660
3661
3662
3663
3664
3665
3666
3667
3668
3669
3670
3671
3672
3673
3674
3675
3676
3677
3678
3679
3680
3681
3682
3683
3684
3685
3686
3687
3688
3689
3690
3691
3692
3693
3694
3695
3696
3697
3698
3699
3700
3701
3702
3703
3704
3705
3706
3707
3708
3709
3710
3711
3712
3713
3714
3715
3716
3717
3718
3719
3720
3721
3722
3723
3724
3725
3726
3727
3728
3729
3730
3731
3732
3733
3734
3735
3736
3737
3738
3739
3740
3741
3742
3743
3744
3745
3746
3747
3748
3749
3750
3751
3752
3753
3754
3755
3756
3757
3758
3759
3760
3761
3762
3763
3764
3765
3766
3767
3768
3769
3770
3771
3772
3773
3774
3775
3776
3777
3778
3779
3780
3781
3782
3783
3784
3785
3786
3787
3788
3789
3790
3791
3792
3793
3794
3795
3796
3797
3798
3799
3800
3801
3802
3803
3804
3805
3806
3807
3808
3809
3810
3811
3812
3813
3814
3815
3816
3817
3818
3819
3820
3821
3822
3823
3824
3825
3826
3827
3828
3829
3830
3831
3832
3833
3834
3835
3836
3837
3838
3839
3840
3841
3842
3843
3844
3845
3846
3847
3848
3849
3850
3851
3852
3853
3854
3855
3856
3857
3858
3859
3860
3861
3862
3863
3864
3865
3866
3867
3868
3869
3870
3871
3872
3873
3874
3875
3876
3877
3878
3879
3880
3881
3882
3883
3884
3885
3886
3887
3888
3889
3890
3891
3892
3893
3894
3895
3896
3897
3898
3899
3900
3901
3902
3903
3904
3905
3906
3907
3908
3909
3910
3911
3912
3913
3914
3915
3916
3917
3918
3919
3920
3921
3922
3923
3924
3925
3926
3927
3928
3929
3930
3931
3932
3933
3934
3935
3936
3937
3938
3939
3940
3941
3942
3943
3944
3945
3946
3947
3948
3949
3950
3951
3952
3953
3954
3955
3956
3957
3958
3959
3960
3961
3962
3963
3964
3965
3966
3967
3968
3969
3970
3971
3972
3973
3974
3975
3976
3977
3978
3979
3980
3981
3982
3983
3984
3985
3986
3987
3988
3989
3990
3991
3992
3993
3994
3995
3996
3997
3998
3999
4000
4001
4002
4003
4004
4005
4006
4007
4008
4009
4010
4011
4012
4013
4014
4015
4016
4017
4018
4019
4020
4021
4022
4023
4024
4025
4026
4027
4028
4029
4030
4031
4032
4033
4034
4035
4036
4037
4038
4039
4040
4041
4042
4043
4044
4045
4046
4047
4048
4049
4050
4051
4052
4053
4054
4055
4056
4057
4058
4059
4060
4061
4062
4063
4064
4065
4066
4067
4068
4069
4070
4071
4072
4073
4074
4075
4076
4077
4078
4079
4080
4081
4082
4083
4084
4085
4086
4087
4088
4089
4090
4091
4092
4093
4094
4095
4096
4097
4098
4099
4100
4101
4102
4103
4104
4105
4106
4107
4108
4109
4110
4111
4112
4113
4114
4115
4116
4117
4118
4119
4120
4121
4122
4123
4124
4125
4126
4127
4128
4129
4130
4131
4132
4133
4134
4135
4136
4137
4138
4139
4140
4141
4142
4143
4144
4145
4146
4147
4148
4149
4150
4151
4152
4153
4154
4155
4156
4157
4158
4159
4160
4161
4162
4163
4164
4165
4166
4167
4168
4169
4170
4171
4172
4173
4174
4175
4176
4177
4178
4179
4180
4181
4182
4183
4184
4185
4186
4187
4188
4189
4190
4191
4192
4193
4194
4195
4196
4197
4198
4199
4200
4201
4202
4203
4204
4205
4206
4207
4208
4209
4210
4211
4212
4213
4214
4215
4216
4217
4218
4219
4220
4221
4222
4223
4224
4225
4226
4227
4228
4229
4230
4231
4232
4233
4234
4235
4236
4237
4238
4239
4240
4241
4242
4243
4244
4245
4246
4247
4248
4249
4250
4251
4252
4253
4254
4255
4256
4257
4258
4259
4260
4261
4262
4263
4264
4265
4266
4267
4268
4269
4270
4271
4272
4273
4274
4275
4276
4277
4278
4279
4280
4281
4282
4283
4284
4285
4286
4287
4288
4289
4290
4291
4292
4293
4294
4295
4296
4297
4298
4299
4300
4301
4302
4303
4304
4305
4306
4307
4308
4309
4310
4311
4312
4313
4314
4315
4316
4317
4318
4319
4320
4321
4322
4323
4324
4325
4326
4327
4328
4329
4330
4331
4332
4333
4334
4335
4336
4337
4338
4339
4340
4341
4342
4343
4344
4345
4346
4347
4348
4349
4350
4351
4352
4353
4354
4355
4356
4357
4358
4359
4360
4361
4362
4363
4364
4365
4366
4367
4368
4369
4370
4371
4372
4373
4374
4375
4376
4377
4378
4379
4380
4381
4382
4383
4384
4385
4386
4387
4388
4389
4390
4391
4392
4393
4394
4395
4396
4397
4398
4399
4400
4401
4402
4403
4404
4405
4406
4407
4408
4409
4410
4411
4412
4413
4414
4415
4416
4417
4418
4419
4420
4421
4422
4423
4424
4425
4426
4427
4428
4429
4430
4431
4432
4433
4434
Mon Dec 30 15:43:48 1996  Abe Feldman  <feldman@harvey.cyclic.com>

	* checkout.c (build_dirs_and_chdir): Reproduced block containing
	Create_Admin, placing it before Subdir_Register.
	* sanity.sh (basicb): Added tests 1a and 9a to test above changes
	to the checkout command.

Mon Dec 30 13:29:14 1996  uz@wuschel.ibb.schwaben.com (Ullrich von Bassewitz)
			  and Jim Kingdon  <kingdon@harvey.cyclic.com>

	* cvs.h (CVSEDITPREFIXLEN): New define.
	* logmsg.c (do_editor): Use CVSEDITPREFIXLEN when deciding whether
	to strip off CVSEDITPREFIX and when telling the user what we will
	strip off.

Sun Dec 22 22:06:49 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* logmsg.c (do_verify): If noexec, skip the verification *without*
	printing a message.  Use cvs_output not printf.  Skip verification
	for client_active.

Wed Dec 18 12:27:35 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* repos.c (Name_Repository): Add comment regarding wording of
	"*PANIC*" error message.

1996-12-18  Jim Kingdon

	* client.c (call_in_directory): If the directory we are about
	to create is the same as CVSADM as seen by fncmp (for example,
	it is "cvs" and filenames are case-insensitive), then give a
	fatal error.

Tue Dec 17 13:14:22 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* options.h.in: Add comments about SETXID security holes.

	* logmsg.c (do_verify): Reindent comments.  Check errno if return
	code from run_exec is -1, not if it is 1.
	* sanity.sh (info): Move tests info-4 and info-8 to end and rename
	them.  Add verifymsg tests.  Instead of forcibly removing loginfo,
	remove it nicely (test info-11).

Tue Dec 17 12:45:32 1996  Abe Feldman  <feldman@cyclic.com>

	* commit.c, import.c: Call do_verify as well as do_editor.
	* cvs.h (CVSROOTADM_VERIFYMSG): Define.
	* logmsg.c, cvs.h (do_verify, verifymsg_proc): New functions.
	(verifymsg_script): New variable.
	* mkmodules.c (filelist): Add CVSROOTADM_VERIFYMSG.

Mon Dec 16 13:24:47 1996  Ian Lance Taylor  <ian@cygnus.com>

	* lock.c (remove_locks): New static function, copied from part of
	Lock_Cleanup.
	(Lock_Cleanup): Call remove_locks.
	(Writer_Lock): Call remove_locks rather than Lock_Cleanup when
	waiting for a lock.

Thu Dec 12 10:36:37 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* login.c (get_cvs_password): If CVS_PASSWORD is set, print a
	warning (and then proceed to ignore it).  It was a documented
	feature, so we should point people who were using it to the
	replacement.

Mon Dec  9 12:35:43 1996  Ian Lance Taylor  <ian@cygnus.com>

	* server.c (server_updated): Change comment to only worry about
	umask in the rsh case.
	(server): Create the temporary directory, and change the mode to
	S_IRWXU.
	(switch_to_user): Set the umask to 0, not 077.

Mon Dec  9 10:58:28 1996  Jim Blandy  <jimb@floss.cyclic.com>

	* login.c (get_cvs_password): Remove code to check for value of
	CVS_PASSWORD.  Keeping cleartext passwords in environment
	variables is a really bad idea on Unix, since anyone can print
	out a processes' environment using 'ps' (on BSD variants
	anyway).  Update help message.

Fri Dec  6 15:59:40 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* sanity.sh: When matching "use .cvs commit. to remove this file
	permanently" messages, change "cvs" to "${PROG}".
	(rdiff, binfiles): Likewise.
	This fixes testing a program named something other than "cvs", e.g.
	$ cp cvs cvs-test
	$ /bin/sh <srcdir>/sanity.sh `pwd`/cvs-test

1996-12-02  Jim Kingdon

	* client.c: In comment saying that socket buffers don't
	implement the blocking routine, say they are blocking.
	* buffer.h (struct buffer): In description of input function,
	describe blocking, non-blocking, and NEED more fully.  Say
	what happens if we read a nonzero amount less than NEED and
	then get end of file.
	* client.c (socket_buffer_input): If NEED == 0, still call
	recv (once).  Handle the case where recv returns 0.

Sat Nov 30 15:10:07 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* subr.c, cvs.h (file_has_markers): New function.
	* rcs.h (RCS_MERGE_PAT): Now a fixed string not a regexp.
	* options.h.in (GREP): Removed; no longer used.
	* update.c (update_fileproc), commit.c (check_fileproc): Call
	file_has_markers rather than GREP.
	* rcscmds.c (RCS_merge): Just give a fatal error in the case where
	we had been calling GREP.  I suspect noone is using this code
	any more.
	* sanity.sh (conflicts): Rewrite tests 131, 132, and 133 to use
	dotest; tests that the above changes didn't break anything.

Fri Nov 29 09:06:41 1996  fnf@ninemoons.com (Fred Fish)
			  and Jim Kingdon  <kingdon@harvey.cyclic.com>

	* checkout.c (safe_location): Only call readlink if HAVE_READLINK.

	* run.c (piped_child, filter_stream_through_program): If
	HAVE_VFORK, call vfork not fork.
	* run.c (run_exec): Add comment about why we use vfork.

Mon Nov 25 12:48:31 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* release.c (release): Don't return after processing the first
	argument; that kind of defeats the purpose of having a loop, eh?
	For client, close the connection after we've processed them all.
	* sanity.sh: Remove workaround for modules2-8 test; tests for
	above fix.  Adjust modules2-6 test to answer both questions.

	* login.c: Reindent (all of get_cvs_password, a handful of lines
	elsewhere).

	Cleanups to release, mostly cosmetic:
	* release.c (release_server): New function; breaks out server code
	from the release function.
	* release.c: Move delete_flag inside the release function.
	* release.c (release): Reindent.  Rewrite comments about how the
	implementation could be improved.  Don't declare variables as
	"register".  Include errno in error message.  Don't cast result of
	printf to void.  Remove unused variable srepos.
	* release.c: Remove comments at top of file about what it does.
	They were not particularly coherent and they were also out of date
	(I think).  Likewise for comment in release function about "if we
	are in a repository".
	* release.c: Change "module" to "directory" in a few messages
	since that is what is meant.
	* sanity.sh: In tests ignore-195 and ignore-193, change expected
	message accordingly.

Sun Nov 24 11:30:55 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* sanity.sh: Clarify a few items in the todo list.

	* log.c (log_parse_date): Use the "end" of the epoch not "next
	week" as the time which means "no end time".
	* sanity.sh (rcs): New test, tests dates and importing RCS files.

1996-11-19  Jim Kingdon

	Visual C++ lint:
	* hash.c: Declare qsort_comp.
	* update.c: Declare isremoved.
	
1996-11-19  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* root.c, repos.c, modules.c, create_adm.c: Change all calls to
	strip_path to strip_trailing_slashes.  Basically strip_path is
	just an unneeded complication (we should keep the pathname the way
	the user specifies it, and the system can worry about things like
	consecutive /'s if it wants to).  Stripping trailing slashes is
	potentially dubious for the same reason, but it is a somewhat
	different case which I won't try to tackle now.
	* cvs.h (strip_path): Remove declaration.

Tue Nov 19 15:18:13 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	There are a lot of details to this change, but the concept is
	relatively simple: make it so that for every CVSLCK lock that we
	might take out, there is a flag which is set iff we have created
	the CVSLCK directory.
	* lock.c (struct lock): New structure.
	* lock.c: Remove static variables repository and cleanup_lckdir.
 	They are replaced by global_readlock.repository and
	global_readlock.have_lckdir, respectively (except insofar as the
	rest of these changes change the concept of cleanup_lckdir).
	New static variable global_readlock.
	(Reader_Lock, Lock_Cleanup): Use global_readlock in place of
	repository.
	(lock_simple_remove, set_lock, clear_lock, write_lock): Take a
	struct lock * instead of just a repository.  Set/clear
	lock->have_lckdir instead of cleanup_lckdir.
	(set_writelock_proc, unlock_proc): Pass ->data, not ->key, to
	write_lock or lock_simple_remove.
	(lock_filesdoneproc,lock_dir_for_write): Allocate a struct lock,
	put it in the ->data field, and fill in its fields.
	(lock_simple_remove): Use lock->have_lckdir as the sole test for
	whether the CVSLCK directory needs to be removed.  Add
	comments about why readlock and writelock variables don't tell us
	for sure whether locks exist.
	(lock_simple_remove, clear_lock): Use SIG_beginCrSect and
	SIG_endCrSect to ensure that ->have_lckdir is set to 0 iff the
	CVSLCK directory was really removed.
	(lock_simple_remove): Check for errors removing CVSLCK directory.
	(lock_simple_remove, Check_Owner, set_lock): Remove all code which
	checks userids (including all of Check_Owner and all the AFCVS
	code).  It was bogus if several CVS processes with the same userid
	were running (common if several users share a userid; a common
	practice with remote CVS), and with the rest of the changes here
	should not be needed.

1996-11-16  Paul Eggert  <eggert@twinsun.com>

	* rcs.c (RCS_deltas): Fix unintended trigraphs.

Fri Nov 15 13:06:03 1996  Tom Hageman  <tom@basil.icce.rug.nl>

	* diff.c (diff_fileproc): In printing error messages, use the
	correct filename for which the error occurred.

Sun Nov 10 21:13:38 1996  Paul Sanders <p.sanders@dial.pipex.com>
			  and Jim Kingdon  <kingdon@harvey.cyclic.com>

	* server.c: Use all the right cruft which goes along with
	including sys/time.h.

	* server.c: Include a "copyright" notice.

	* server.c: If HAVE_WINSOCK_H, include winsock.h.

	* server.c (server): Only set a handler for SIGHUP if it is
	defined.  Likewise for all the other signals.

	* server.c (do_cvs_command): Use DEVNULL not /dev/null.

Fri Nov 08 12:14:20 1996  Jim Kingdon

	IBM ICC (OS/2) lint:
	* add.c (add): Only declare begin_added_files if
	SERVER_SUPPORT.
	* client.c (init_sockaddr): Change port argument from
	unsigned short to unsigned int.  Change hostname
	argument from const char * to char *.

Sun Nov  3 18:24:28 1996  Noel Cragg  <noel@gargle.rain.org>

	* sanity.sh (info): add new tests that check behavior of format
 	string substitution in loginfo file.

Sat Nov  2 09:39:09 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* client.c (do_deferred_progs): Don't access memory once it is
	freed (we already did it right for checkin_progs; do the same
	thing for update_progs).

	* update.c, client.c, classify.c, client.h, diff.c, commit.c,
	create_adm.c: Nuke more PATH_MAX.

Fri Nov  1 18:22:32 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* error.h: Define PROTO if it is not defined.

Wed Oct 30 08:53:20 1996  jalving@ibm.net

	* patch.c (patch_fileproc): Set line1 and line2 to NULL up-front
	(before the first "goto out") so we don't try to free them.

Wed Oct 30 08:53:20 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* commit.c (remove_file, commit_filesdoneproc), run.c (run_print,
	run_exec), modules.c (open_module, cat_module, do_module), update.c
	(update_dirleave_proc), tag.c (tag_fileproc): Call cvs_out* rather
	than stdio.
	* server.c (serve_expand_modules): Remove comment about do_module
	writing to stdout/stderr; above changes should fix this.

Tue Oct 29 17:23:59 1996  Ian Lance Taylor  <ian@cygnus.com>

	* status.c (tag_list_proc): When printing the tag name, don't
	truncate it to 25 characters.

Tue Oct 29 12:49:07 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* add.c, checkin.c, checkout.c, filesubr.c: Nuke arbitrary limit
	of PATH_MAX.  Many more such limits surely remain.

	* fileattr.c (fileattr_set): Set attrs_modified *after* we might
	call fileattr_read, because fileattr_read clears it.
	* sanity.sh (devcom2): New tests, test for above fix and other
	behaviors I discovered in the process of looking into it.

Mon Oct 28 08:55:57 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	The following changes are to ensure that SYSTEM_CLEANUP is always
	called.
	* error.c, cvs.h, main.c: Remove error_set_cleanup and related
	machinery.  It was for a time when error.c was intended to be
	shared with other programs, but that is no longer true.
	* error.c, error.h (error_exit): New function; like error_cleanup
	from main.c but also calls SYSTEM_CLEANUP and exit (EXIT_FAILURE).
	* error.c (error, fperror): Call error_exit instead of doing it
	ourself.
	* server.c (server, serve_valid_responses, switch_to_user,
	check_password, pserver_authenticate_connection, 
	kserver_authenticate_connection): Call SYSTEM_CLEANUP before exit.
	* add.c, client.c, import.c, main.c, mkmodules.c, modules.c,
	recurse.c, server.c, tag.c, update.c: Call error_exit ()
	instead of exit (EXIT_FAILURE).

Sun Oct 27 08:34:16 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* sanity.sh (conflicts): New test 128.5 tests "cvs co -p" in an empty
	directory (like 126.5), but when the file has nonempty contents.
	* rcs.c (RCS_checkout): If writing to stdout, use cvs_output
	rather than fwrite.
	* update.c (checkout_file): Call cvs_stderr not fprintf.
	These changes should fix some out-of-order bugs which show up in
	situations like conflicts-126.5 and conflicts-128.5.

	* mkmodules.c (checkout_file): Call RCS_checkout rather than
	run_exec on RCS_CO.

Sat Oct 26 18:29:46 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* sanity.sh (rdiff): cd out of testimport directory and remove it
	when done.

	* sanity.sh (info): Adjust tests to reflect fact that loginfo was
	created by cvs init.

	* sanity.sh (ignore): Change test 187a1 to allow any number of
	files in CVSROOT, not just modules.

	* sanity.sh (modules): In tests 148a0 and 148a1, don't expect a
	module which defines CVSROOT to itself, since we don't define one
	any more.  Also change test to rewrite modules rather than append
	to it (in case any previous tests are changed to do something with
	modules).  Change test 155b to allow any number of files in
	CVSROOT, not just modules.

	* add.c (add_directory): Set rev_old and rev_new fields of struct
	logfile_info to NULL (prevents us from trying to free them later).
	* commit.c (find_fileproc), import.c (import): Likewise.

	* sanity.sh (crerepos): New tests, to test alternate ways of
	creating a repository and related matters.
	* sanity.sh: Remove tests 1 through 3 and related cruft; replace
	them with a new test 1 which merely tests "cvs init".  By doing
	the obscure stuff in crerepos we avoid having to do all this stuff
	any time we run any single test.

Sat Oct 26 16:19:48 1996  Jim Blandy  <jimb@totoro.cyclic.com>

	* main.c (main): If HAVE_TZSET is #defined, call tzset.  This is
	harmless on all systems I know of, and required on some.

Fri Oct 25 13:20:44 1996  Ian Lance Taylor  <ian@cygnus.com>

	* diff.c (diff_file_nodiff): When setting use_rev1, only return
	DIFF_SAME if empty_file is DIFF_DIFFERENT and ts_user is not
	NULL.  Don't get confused by a vn_user field of "0" or one
	starting with '-'.
	* sanity.sh (death2): Add new death2-diff-{1,2,7,8} tests for
	above patch.  Renumber existing death2-diff tests to make room.

Fri Oct 25 12:38:29 1996  Jim Wilson  <wilson@cygnus.com>

	* sanity.sh (death2): In tests death2-diff-{2,4,6,8,10}, allow "_"
	in temp file names.  The system (tmpnam or whatever) generates
	these names so they vary from system to system.

Fri Oct 25 07:52:44 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* logmsg.c (logfile_write): Give an error for several cases which
	should not be legal.  Adjust comments accordingly.
	* mkmodules.c (loginfo_contents): Make description of loginfo much
	more concise.  This should be a reminder, not full documentation.

Tue Oct 22 10:37:37 1996  Noel Cragg  <noel@gargle.rain.org>

	* commit.c (update_delproc): free structure members rev_old and
 	rev_new if they have been allocated.

	* mkmodules.c: change loginfo_contents to include a description of
 	the new format string.

	* logmsg.c (logfile_write): change syntax of format string.

Sat Oct 19 16:09:55 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	For reference, this takes CVS's text segment from 348348 bytes to
	347420 bytes.
	* server.c (requests): Change Directory to rq_essential
	per change in doc/cvsclient.texi.
	* client.c: Remove use_directory and all code which executed if
	it wasn't set.  This includes the get_short_pathname function.
	* server.c: Likewise, for use_dir_and_repos.
	(serve_repository): Give a fatal error.
	* server.c (requests): Remove Lost.  Change Unchanged to rq_essential.
	(serve_lost): Removed.
	* server.c, server.h, client.c, vers_ts.c: Remove use_unchanged,
	code to set it, and all code which executed if it wasn't set.

Sat Oct 19 12:44:08 1996  J. Richard Sladkey  <jrs@world.std.com>
			  and Jim Kingdon  <kingdon@harvey.cyclic.com>

	* hash.c (sortlist, new function qsort_comp): Rewrite to use qsort
	instead of insert sort.  Changes algorithm from n^2 to n log n
	(assuming qsort is implemented with quicksort or similar).

Sat Oct 19 12:44:08 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* sanity.sh (basic2): In test basic2-64, use -x and specify types
	which exclude E; the test is not built to deal with E (or any
	other new types).

Sat Oct 19 12:00:00 1996  Mark Mitchell <mmitchell@usa.net>
			  and Jim Kingdon  <kingdon@harvey.cyclic.com>

	* update.c (isemptydir, new function isremoved): Avoid pruning
	directories that contain files marked for removal but not
	comitted.
	* update.c, update.h (isemptydir): Now extern, not static.
	* update.c (isemptydir): New parameter might_not_exist handles
	difference in functionality from old client_isemptydir.  Bring
	over the improved error checking from client_isemptydir.
	* client.c (client_isemptydir): Removed; isemptydir now suffices.
	* update.c (update_dirleave_proc), client.c
	(process_prune_candidates): Update callers.
	* sanity.sh (deep): Add tests deep-rm* for above fix.

Fri Oct 18 15:53:41 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* sanity.sh (devcom): Add tests devcom-some* to test watching just
	a single file.

	* root.c (Name_Root): Use isabsolute to test whether a pathname is
	absolute instead of checking for the first character being '/'.
	(Reported by Antoine P. Brusseau <brusseau@jprc.com>).

	* commit.c (checkaddfile): Free rev only if it is non-NULL (thanks
	to cwong@world.std.com (Christopher Wong) for diagnosing this; the
	death2-15 test in sanity.sh hits it).

Thu Oct 17 15:21:56 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* sanity.sh: Reenable rdiff tests.  Delete rdiff-9 test to reflect
	the fact that the change to add a -K option has not been
	incorporated.  Adjust rdiff-8 test to reflect the fact that the
	change to change the default keyword expansion for the first
	revision has not been incorporated.
	* patch.c (patch_fileproc): Pass the symbolic revision to
	RCS_checkout so that Name can be expanded correctly.  Reinstates
	one of the 30 Sep 96 changes and fixes a bug which the sanity.sh
	rdiff test tests for.

	Reinstate change from 30 Sep 96:
	* patch.c (patch): CLIENT_SUPPORT: send '-f' if NOT force_tag_match

	* client.c (process_prune_candidates): Do not ignore errors from
	unlink_file_dir.

	* filesubr.c (deep_remove_dir): If rmdir returns an error other
	than ENOTEMPTY or EEXIST, return -1 not 0.  Add workaround for AIX
	header bug.

Tue Apr 30 08:21:27 1996  Mike Sutton <mike_sutton@dayton.saic.com>

	* checkout.c, history.c: added logging/reporting of cvs export
	command

Wed Oct 16 10:16:57 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* sanity.sh: Remove tests 4, 4.5, and 4.75; this functionality is
	already tested by 45, 45.5 and other tests.
	(ignore): New tests ignore-192, ignore-193, ignore-194, and
	ignore-195 test output from "cvs release".
	(modules2): New tests modules2-6, modules2-7, and modules2-8 test
	ability of cvs release to handle multiple arguments.  Since it
	currently doesn't, the tests are kludged.

	* server.c, cvs.h (cvs_flushout): New function.
	* recurse.c (do_file_proc): Call it.
	* server.c (cvs_outerr): Call fflush (stdout) in non-server case.
	* main.c (main): Don't call setvbuf.  The code was incorrectly
	checking for "patch" (it really is "rdiff"); the concern about
	slowing down large amounts of output is not specific to rdiff
	(it applies to "log" for example); and the above changes should
	meet the need.

Tue Oct 15 10:22:10 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	This is intended to facilitate some future cleanups to the
	locking, but by itself it is a simple, conversative rearrangement:
	* tag.c (locked_dir, locked_list): Move from here...
	* lock.c: ...to here.
	* lock.c (Lock_Cleanup): If locked_dir is set clean it up too.
	* tag.c (tag_unlockdir): Removed; with the above change
	Lock_Cleanup suffices.
	* tag.c (tag_lockdir): Move from here...
	* lock.c (lock_dir_for_write): ...to here.
	* tag.c (tag_fileproc), rtag.c (rtag_fileproc): Update callers.
	Move comments concerning why we are locking what we are from
	tag_lockdir to here.
	* tag.c (tag_filesdoneproc), rtag.c (rtag_filesdoneproc):
	Update callers.
	* lock.c (Writer_Lock): Made static.
	* cvs.h: Update declarations.
	* server.c (server_notify): Call lock_dir_for_write rather than
	calling Writer_Lock ourselves.

	This is intended to facilitate some future cleanups to the
	locking, but by itself it is a simple, conversative rearrangement:
	* lock.c (Lock_Cleanup): Also dellist (lock_tree_list).
	* lock.c, cvs.h (lock_tree_cleanup): Removed; with the above change
	Lock_Cleanup suffices.
	* commit.c, edit.c, watch.c: Change callers.

Sat Oct 12 21:41:46 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* sanity.sh (deep): Add comment about whether the deep-4b behavior
	is considered desirable.

Sat Oct 12 20:36:36 1996  Ian Lance Taylor  <ian@cygnus.com>

	* client.c (client_send_expansions): Add build_dirs parameter.
	Change all callers.
	(send_dirent_proc): Get build_dirs from callerdat; if it is
	zero, don't send a nonexistent directory to the server.
	(send_files): Add build_dirs parameter.  Change all callers.
	* client.h (send_files): Update prototype.
	(send_files_contents): Remove prototype for nonexistent function.
	(client_send_expansions): Update prototype.
	* sanity.sh (deep): Add deep-4b test for above patch.

Fri Oct 11 14:07:12 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	gcc -Wall lint:
	* logmsg.c (title_proc): Remove unused variables title and comma.

	* sanity.sh (modules2): Don't be picky about whether we are
	checking in 1.3 or 1.2 of modules; it depends on whether we are
	running all the tests or just some.

Thu Oct 10 14:52:06 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* server.c, server.h (server_dir): New variable.
	(output_dir): If it is set, send it before the directory name.
	* modules.c (do_module): Set it, in the case of & modules, and
	restore it when done.
	* sanity.sh (modules): Don't clean up first-dir before starting;
	tests now clean up for themselves at the end.
	(modules2): New tests, for above fix.

Wed Oct  9 15:52:34 1996  Jim Blandy  <jimb@totoro.cyclic.com>

	* sanity.sh: Barf immediately if run as root. 

	* rcs.c (RCS_getrevtime): When giving a date to get_date, use the full
	year, not the year - 1900, so that dates after 1999 are parsed
	correctly.  (Change thanks to Paul Eggert.)

Wed Oct  9 10:59:11 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	Clean up gcc -Wmissing-prototypes lint:
	* cvs.h (admin, add, checkout, commit, diff, history, import,
	cvslog, login, patch, release, cvsremove, rtag, status, tag):
	Declare.
	* server.c, main.c: Don't declare them here.  Don't declare update
	either (which is already declared in cvs.h).
	* tag.c, cvs.h, main.c, server.c: Rename tag to cvstag to avoid
	name conflicts.
	* client.c (init_sockaddr, auth_server_port_number), entries.c
	(Entnode_Create, Entnode_Destroy), hash.c (nodetypestring),
	login.c (construct_cvspass_filename), server.c
	(supported_response), wrapper.c (wrap_matching_entry): Make static;
	prototype.
	* hash.c (printlist): Prototype.
	* myndbm.c (mydbm_load_file): Change declaration to prototype.

Tue Oct  8 22:35:34 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* sanity.sh (log2): Re-add these tests; they were deleted for 1.9
	(because they were thought to be destabilizing and/or due to
	confusion/accident), but they can be put back now.

	* sanity.sh (death2): In tests death2-diff-{2,4,6,8,10}, allow "-"
	or "%" in temp file names.  The system (tmpnam or whatever)
	generates these names so they vary from system to system.

Tue Oct  8 12:37:09 1996  Ian Lance Taylor  <ian@cygnus.com>

	* options.h.in (HAD_RCS4): Remove; no longer used.

Sun Oct  6 15:58:11 1996  Noel Cragg  <noel@gargle.rain.org>

	* The following changes address problem #56 in the GNATS database
 	on harvey.cyclic.com:

	* logmsg.c (str_list_format): new global -- contains the format
 	for items to be placed in str_list.
	(Update_Logfile): move code that creates the "title" string...
	(logfile_write): ...to here.  Pull apart the filter program and
 	look for a format string, extracting it if there is one.
	(title_proc): write a given filename/value based on the format
 	string.

	* commit.c (classify_file_internal): new routine, old code (needed
 	to use the code in more than one place).  Determines the status
 	and version information about a file.
	(check_fileproc): use classify_file_internal.  Fill in the rev_old
 	field for the struct logfile_info.
	(commit_fileproc): Fill in the rev_new field.

	* cvs.h (struct logfile_info): add two new fields -- rev_old and
 	rev_new -- that keep track of revision numbers across commits.

Fri Sep 27 15:21:47 1996  Peter Wemm  <peter@spinner.dialix.com>

	* logmsg.c (do_editor): Do not use editinfo if running on the client.

Fri Oct  4 15:11:46 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* server.c (server_cleanup): Temporarily clear noexec when calling
	unlink_file_dir.  This is so we clean up the temp directory even
	when the -n global option is specified.

Wed Oct  2 10:47:33 1996  Norbert Kiesel  <nk@col.sw-ley.de>

	* client.c (send_repository): initialize some variables before
 	first usage

Tue Oct  1 13:01:24 1996  Jim Blandy  <jimb@floss.cyclic.com>

	Revert some of Greg's changes; they're welcome later, but we're
	trying to keep CVS stable for pre-release testing at the moment. 
	* checkin.c, commit.c, cvs.h, diff.c, import.c, main.c, no_diff.c,
	options.h.in, patch.c, rcs.c, rcs.h, rcscmds.c, sanity.sh, update.c:
	Revert changes of Sep 29 and 30.

Tue Oct  1 13:17:31 1996  Ian Lance Taylor  <ian@cygnus.com>

	Make sure the server temporary directory is removed even if
	Max-dotdot is used.
	* server.c (orig_server_temp_dir): New static variable.
	(serve_max_dotdot): Don't free server_temp_dir if it is the same
	as orig_server_temp_dir.
	(do_cvs_command): Use orig_server_temp_dir in error message.
	(server_cleanup): Remove orig_server_temp_dir.
	(server): Set orig_server_temp_dir.  Remove incorrect indentation
	of error message.

	* import.c (update_rcs_file): Restore new argument to
	RCS_checkout, removed in last patch.

Tue Oct  1 00:32:55 1996  Jim Blandy  <jimb@floss.cyclic.com>

	* import.c: Revert Greg Woods' changes of Sep 30.  We may want
	them later, but not before 1.9.

Mon Sep 30 23:31:01 1996  Jim Blandy  <jimb@floss.cyclic.com>

	* log.c (log_fileproc): Now that we might actually find a "desc"
 	node in rcsfile->other, thanks to Ian's change below, we had
 	better deal correctly if we find a null pointer in it.

Mon Sep 30 13:55:03 1996  Greg A. Woods  <woods@most.weird.com>

	* main.c (main): don't set need_to_create_root for "cvs init"
	either, just in case it's run from within a valid working
	directory.

	* sanity.sh (testcvs): oops, forgot to comment out test version I
 	was using...

	* diff.c (diff_fileproc): use Diffbin instead of DIFF (3).
	* patch.c (patch_fileproc): use Diffbin instead of DIFF.
	* commit.c (check_fileproc): use Grepbin instead of GREP.
	* rcscmds.c (RCS_merge): use Grepbin instead of GREP.
	* update.c (patch_file): use Diffbin instead of DIFF.
	(update_fileproc): use Grepbin instead of GREP.
	* cvs.h (Diffbin): new declaration.
	(Grepbin): new declaration.
	(DIFFBIN_ENV): new manifest to name DIFFBIN environ var.
	(GREPBIN_ENV): new manifest to name GREPBIN environ var.
	* option.h.in (DIFFBIN_DFLT): renamed from DIFF.
	(GREPBIN_DFLT): renamed from GREP.
	* main.c (main): new variables diffbin_update_env and
	grepbin_update_inv, ala rcsbin_update_env.
	(main): new options -D diffbin and -g grepbin
	(usg): describe new options -D diffbin and -g grepbin.
	(Diffbin): new global variable for DIFF path.
	(Grepfbin): new global variable for GREP path.

	* options.h.in (RCSBIN_DFLT): mention this needs to be set if
	your PATH isn't set properly by rshd.

	* sanity.sh (rdiff): re-do Jim's change, but with the original
	keywords I had intended (should be a bit more like real life), and
	Jim's better RCS date and user matching form.
	[I guess that's what I get for checking things in at 3am! ;-)]

Mon Sep 30 17:00:20 1996  Ian Lance Taylor  <ian@cygnus.com>

	* rcs.c (RCS_reparsercsfile): Store desc field value in main RCS
	node data, not in version specific data.
	* sanity.sh: Enable log2 test (for local CVS only).

Mon Sep 30 13:01:45 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* sanity.sh (log2): New test, tests cvs add -m.  Not yet enabled
	in "tests" because CVS currently flunks this test.

	* sanity.sh (rdiff, basic2): Allow "cvs server" as well as "cvs
	checkout" and friends in messages.  In testing output of cvs
	status, don't require a tab which isn't there for remote.  Skip
	test rdiff-9 for remote.  In test basic2-64, add missing slash in
	the pattern which gets used for remote.

	* sanity.sh (rdiff): Fix strings we were matching against which
	got keyword-expanded in checking in sanity.sh.

Mon Sep 30 03:21:37 1996  Greg A. Woods  <woods@most.weird.com>

	* sanity.sh: change all regexpr literal '.' to '\.'
 	(basic2): why are tests 34 & 42 commented out (because
	of 'diff -u'?)?
	add tests 56[abc], 57a, and 58a to test import to the main
	branch (i.e. branch '1').
	(rdiff): new test section for rdiff -K, etc.
	(dotest): remove dotest.ex? before running a new test.
	(dotest_fail): remove dotest.ex? before running a new test.
	(dotest_internal): write expected output to dotest.exp, or if $4
	also used, to dotest.ex1 and dotest.ex2.
	(patch): renamed this test to 'serverpatch'.
	(dotest_lit): rename dotest.res to dotest.exp ala dotest().
	remove dotest.ex? before running a new test.
	(DOTSTAR): mention the bug exists up to 1.12
	(ENDANCHOR): mention the bug exists up to 1.12
	(dotest_all_in_one): new function for debugging.
	(dotest_line_by_line): new function for debugging.
	(dotest_internal_debug): new function for debugging.
	(dotest_internal): stop emulating the ancient tests and don't spew
	the dotest.tmp contents onto $LOGFILE -- it's just too much
	meaningless noise.  Only do this if the test fails.  Many tests
	don't use dotest() yet, so this isn't quite so helpful as it might
	otherwise be.
	(TODO): mention CVS/* files, especially CVS/Root.
	
	* main.c (main): add a commented out piece of code to suggest that
	there should be a function lookup_command_attribute() that could
	tell us various things about internal commands, such as whether
	they use CVS/Root, or if they're repository-only, or if they need
	a working directory, etc....
	(main): don't set need_to_create_root if command doesn't use a
	local working directory.

	* patch.c (patch): CLIENT_SUPPORT: send '-f' if NOT force_tag_match

	* error.c (fperror): protect declaration for un-defined __STDC__

	* import.c (import): permit imports to a branch with zero dots,
	i.e. the trunk.
	(update_rcs_file): don't detect conflicts if importing to the
	trunk.
	(import): add hint that we should allow a module name, instead of
	just a pathname relative to $CVSROOT.
	(add_rcs_file): if importing to trunk, do it with ci(1).

	* import.c: XXX the following are all #if 0'ed out until a full
	implementation can be designed....
	(cbranch): new variable to support conflict detection on another
	branch set by -c.
	(import): truncate -b and -c optarg if to fit in static storage.
	(import_usage): describe -c

	* rcscmds.c (RCS_checkout): add new argument 'rcsver'.  If rcsver
	is set, turn on 'keywords' to force call to RCS_exec_checkout.
	* rcs.c (RCS_exec_checkout): add new argument 'rcsver'.  Pass
	'rcsver' to "co" with run_arg().
	* cvs.h: (RCS_checkout): add new argument 'rcsver' to prototype.
	(RCS_exec_checkout): add new argument 'rcsver' to prototype.
	* commit.c (remove_file): supply new argument to RCS_checkout.
	* checkin.c (Checkin): supply new argument to RCS_checkout.
	* diff.c (diff_fileproc): supply new argument to RCS_checkout.
	(diff_file_nodiff): supply new argument to RCS_checkout.
	* no_diff.c (No_Difference): supply new argument to RCS_checkout.
	* update.c (checkout_file): supply new argument to RCS_checkout.
	(patch_file): supply new argument to RCS_checkout.
	(join_file): supply new argument to RCS_checkout.

	* patch.c: (o_options): new variable for -K
	(rcsver): new variable for -V.
	(patch): add -K flag which sets o_options, change -V to set
	rcsver, send o_options and rcsver if in client mode.
	(patch_fileproc): use RCS_checkout instead of RCS_fast_checkout in
	order to ensure $Name is expanded, use o_options if set, or
	options if set, or by default "-ko" when getting "old" file.

Sun Sep 29 16:43:28 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* rcscmds.c: Replace comment at top of file concerning RCS library
	with a reworded version based on discussion between me, Ian, Paul
	Eggert, and JimB.

Sun Sep 29 13:09:45 1996  Noel Cragg  <noel@kiva.rain.org>

	* main.c (main): don't create/update CVS/Root when doing the "cvs
 	login" command.  Consider: if the user executes "cvs login" with
 	the working directory inside an already checked out module, we'd
 	incorrectly change the CVS/Root file to reflect the CVSROOT of the
 	"cvs login" command.

	* login.c (login): if we're re-logging into a server for which a
 	.cvspass entry already exists, copy the temporary file to its home
 	location rather than renaming.  Renaming doesn't work between
 	filesystems.  After copying, unlink the temporary file.

Fri Sep 27 05:24:56 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* diff.c: Add comment about --brief option.

	* README-rm-add: Removed; the information which was here is now in
	cvs.texinfo.
	* Makefile.in (DISTFILES): Remove README-rm-add.

Wed Sep 25 10:00:00 1996  Larry Jones  <larry.jones@sdrc.com>

	* Makefile.in (cvsbug): Add dependency on version.c.

Wed Sep 25 09:01:48 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* filesubr.c (get_homedir), update.c (update): Reindent.

Wed Sep 25 04:44:54 1996  Jim Blandy  <jimb@totoro.cyclic.com>

	* version.c (version_string): Bump to 1.8.86.

Wed Sep 25 05:17:50 1996  Jim Blandy  <jimb@floss.cyclic.com>

	* update.c (update): Don't neglect to pass the -kmumble options
	to the server.
	* sanity.sh (binfiles-sticky): New tests for above.

	* cvsrc.c (read_cvsrc): Deal correctly with lines that specify a
	command, but no options; don't corrupt argv.

	* sanity.sh: When testing rsh, use the program specified by
 	the CVS_RSH environment variable, if it's set.  Move test to top
	of file, so it runs before all other tests (it's really a
	meta-test).

	* filesubr.c (get_homedir): Use getpwuid to find the home
	directory, if the HOME environment variable isn't set.
	* ignore.c (ign_add_file): Call get_homedir to find the user's
	home directory; this is more portable than calling getpwuid.

Tue Sep 24 09:08:17 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* log.c (log_tree): When walking through branches, follow the
	->prev field rather than following ->next which insures that the
	loop only executes once and we only see the last branch.
	* sanity.sh (multibranch): Test "cvs log" too; tests for above fix.

Mon Sep 23 09:55:22 1996  Norbert Kiesel  <nk@col.sw-ley.de>

	* options.h.in: Fixed some typos in the comments and reindented
 	them.

Sat Sep 21 02:33:26 1996  Jim Blandy  <jimb@totoro.cyclic.com>

	* sanity.sh: If we're testing remote CVS, make sure rsh itself is
	working before running any tests.  It's confusing when basica-1
	fails just because you don't have the local host in your .rhosts
	file.

	* version.c (version_string): Bump to 1.8.85.

Thu Sep 19 09:15:41 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* options.h.in: Define SERVER_FLOWCONTROL, SERVER_HI_WATER,
	SERVER_LO_WATER.  Several large sites (FreeBSD, Cygnus) have been
	pounding on this code without problems, and it doesn't seem to
	have any significant downsides.

Tue Sep 17 01:13:41 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* status.c (status_fileproc): Instead of a default case, set sstat
	before the switch.  This way gcc -Wall can detect a missed case.
	Add explicit T_TITLE case.

Tue Sep 17 00:09:44 1996  Assar Westerlund  <assar@pdc.kth.se>

	* login.c (login): Print usage if argc < 0.

Tue Sep 17 00:09:44 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* lock.c: In comment, mention one more function of readlocks
	(fileattr not updated atomically).  Note similarity between
	solutions #2 and #5.

	* checkout.c (safe_location): Do not reject a location merely
	because it textually starts with hardpath; insist that it be
	hardpath or a subdirectory thereof.

Mon Sep 16 11:46:36 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* server.c (server_cleanup): Add comment about ignoring errors
	from unlink_file_dir.

Mon Sep 16 10:31:48 1996  Norbert Kiesel  <nk@col.sw-ley.de>

	* main.c: Add support for -T <tmpdir> command line option.  This
 	is needed for servers started via inetd.
	(usg): Added line for -T.  Improved -z documentation.
	(main): Read default for tmpdir from the environment. Test for 'T'
	in getopt loop.  Use '/tmp' as ultimative fallback.  Update
	environment if possible.

	* cvs.h (TMPDIR_ENV): Added for -T <tmpdir> command line option.

	* options.h.in: Add TMPDIR_DFLT

	* import.c (update_rcs_file): Use global variable Tmpdir instead
 	of reading the environment.

	* server.c (server_cleanup): Use global variable Tmpdir instead of
 	reading the environment.  Also, replace system("rm -rf") with
 	unlink_file_dir.
	(server): Use global variable Tmpdir instead of reading the
 	environment.

Thu Sep 12 1996  Jim Kingdon  <kingdon@cyclic.com>

	* main.c (main): If ARGV0_NOT_PROGRAM_NAME, then just set
	program_name to "cvs" rather than argv[0].

Thu Sep 12 12:06:56 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* client.c (update_entries): If we can't write the file, don't
	make it a fatal error.

Wed Sep 11 12:46:23 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* client.c (start_server): Move START_SERVER_RETURNS_SOCKET code
	so that it is only run for server_method.  It is wrong for
	pserver_method (in which connect_to_pserver sets server_sock).

	* login.c (construct_cvspass_filename): If NO_SLASH_AFTER_HOME,
	don't put a '/' between $HOME and .cvspass.  Reindent function.
	* build_src.com: Add zlib.c, login.c, and scramble.c.

	* rcs.c (RCS_deltas): When looking for our branch in ->branches,
	check the branch number.
	* sanity.sh (multibranch): New tests test for above fix.

	* commit.c (precommit_list_proc): Fix typo in last change
	(->status to ->type).

Tue Sep 10 23:05:41 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* Makefile.in (DISTFILES): Add build_src.com.
	* build_src.com: Add buffer.c, buffer.obj, and zlib.olb.

Tue Sep 10 20:35:23 1996  Juergen Renz  <renz@conware.de>
			  and Jim Kingdon  <kingdon@harvey.cyclic.com>

	* commit.c (precommit_list_proc): Update to reflect Jul 22 change
	in which p->data was changed from a Ctype to a struct
	logfile_info *.  This means that commitinfo scripts again get
	passed the file	list like they should.

Tue Sep 10 20:35:23 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* client.c (auth_server_port_number): Change name of service from
	"cvs" to "cvspserver".  The latter is what the manual has always
	recommended, and it is also officially registered with IANA.

Tue Sep 10 11:12:42 1996  Mark A. Solinski <markso@mcs.com>
			  and Jim Kingdon  <kingdon@harvey.cyclic.com>

	* client.c (socket_buffer_output): Change ifdef VMS to ifdef
	SEND_NEVER_PARTIAL. 
	(start_server): Change ifdef VMS to ifdef START_SERVER_RETURNS_SOCKET.

Tue Sep 10 17:15:21 1996  Jim Blandy  <jimb@totoro.cyclic.com>

	* client.c (auth_server_port_number): Look up "cvs" in the
 	services database, and use the value it returns; fall back to
	CVS_AUTH_PORT if no entry is present.
	(connect_to_pserver): Use the correct port number in any error
	messages.

Tue Sep 10 11:12:42 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* sanity.sh (newb): New test newb-123j0 tests for another "cvs
	status" case.

Sun Sep  8 15:20:37 1996  Ian Lance Taylor  <ian@cygnus.com>

	* rcs.c (RCS_checkout): Clarify handling of options parameter.

	* rcs.c (RCS_checkout): Free buffer allocated by RCS_deltas.

Sat Sep  7 21:28:27 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* main.c (struct cmd): Add comment concerning recognizing unique
	abbreviations.

Fri Sep  6 22:31:52 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* rcs.c (RCS_checkout): Fix indentation.

Fri Sep  6 11:48:08 1996  Ian Lance Taylor  <ian@cygnus.com>

	* rcs.c (RCS_checkout): Replace tag parameter with rev and nametag
	parameters.  Change all callers.
	* rcs.h (RCS_checkout): Update declaration.

	* rcs.c (RCS_getversion): Replace return_both parameter with
	simple_tag.  Change all callers.
	(RCS_gettag): Likewise.
	* rcs.h (RCS_getversion, RCS_gettag): Update declarations.
	* vers_ts.c (Version_TS): Simplify vn_tag initialization using new
	simple_tag rather than old return_both.
	* cvs.h (struct vers_ts): Clarify vn_tag comment a bit.

	* main.c (usg): Only mention -x if ENCRYPTION is defined.
	(main): Mention ENCRYPTION define in comment for -x.
	* client.h (krb_encrypt_buffer_initialize): Only declare if
	ENCRYPTION is defined.
	* client.c (start_server): Only encrypt if ENCRYPTION is defined.
	* server.c (serve_kerberos_encrypt): Only define if ENCRYPTION is
	defined.
	(requests): Only include Kerberos-encrypt is ENCRYPTION is
	defined.
	(krb_encrypt_*): Only define if ENCRYPTION is defined.

Thu Sep  5 17:32:39 1996  Ian Lance Taylor  <ian@cygnus.com>

	* sanity.sh: When testing remote, use :ext: instead of :server: to
 	match change made earlier today.

Thu Sep  5 13:57:47 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* client.c (start_tcp_server): Don't allow :kserver: to mean
	"direct tcp" (root.c already takes care of this, but I want to
	make it clear what is intended, and not intended, here).
	(start_server): Handle ext_method (external rsh program) and
	server_method (internal rsh client) separately.
	* client.c: Take rsh_pid and start_rsh_server out of
	RSH_NOT_TRANSPARENT ifdefs.  It is useful for things like SSH on NT.
	* cvs.h (CVSmethod), root.c (method_names): Add ext_method.
	* root.c (parse_cvsroot): Recognize "ext" access method.
	If access method is not specified and CVSROOT contains a colon,
	use either ext_method or server_method depending on
	RSH_NOT_TRANSPARENT.

Thu Sep  5 00:09:49 1996  Ian Lance Taylor  <ian@cygnus.com>

	* rcs.c (RCS_checkout): Remove flags parameter, which was not
	serving any useful purpose.  Change all callers.
	* rcscmds.c (RCS_exec_checkout): Likewise.

	* rcscmds.c (RCS_exec_checkout): Rename from RCS_checkout.  Change
	all callers.
	* rcs.c (RCS_checkout): Rename from RCS_fast_checkout.  Change all
	callers.

Wed Sep  4 14:42:28 1996  Ian Lance Taylor  <ian@cygnus.com>

	* rcs.c (RCS_fast_checkout): If tracing, output a message.  If
	noexec, and workfile is not NULL, just return immediately.  Assert
	that sout is RUN_TTY or workfile is NULL, rather than using it as
	a conditional.  Replace found variable with two variables--gothead
	and keywords--reflecting what it actually means.

	* rcs.c (RCS_fast_checkout): Don't handle the case of workfile set
	to "".
	* rcscmds.c (RCS_checkout): Likewise.
	* checkin.c (Checkin): Pass explicit file name, not "", to
	RCS_fast_checkout.
	* update.c (join_file): Likewise.
	* commit.c (remove_file): Pass explicit file name to
	RCS_fast_checkout and RCS_checkin.

	* rcs.c (RCS_reparsercsfile): Always continue after seeing
	RCSSYMBOLS, even if the value is NULL.  Clear the NODELTA flag
	after setting delta_pos.
	(free_rcsnode_contents): New static function.
	(freercsnode): Call free_rcsnode_contents.
	(RCS_fast_checkout): If NODELTA is set, reparse the RCS file.
	(RCS_settag): New function.  Change all callers to old function.
	(RCS_deltag, RCS_setbranch): Likewise.
	(RCS_lock, RCS_unlock): Likewise.
	(RCS_deltas): If NODELTA is set, reparse the RCS file.
	* rcs.h (NODELTA): Define.
	(RCS_settag, RCS_deltag, RCS_setbranch): Declare.
	(RCS_lock, RCS_unlock): Declare.
	* rcscmds.c (RCS_exec_settag): Rename from RCS_settag.  Don't
	check tag against BASE or HEAD (now done in new RCS_settag).
	(RCS_exec_deltag): Rename from RCS_deltag.
	(RCS_exec_setbranch): Rename from RCS_setbranch.
	(RCS_exec_lock): Rename from RCS_lock.
	(RCS_exec_unlock): Rename from RCS_unlock.
	* cvs.h: Update declarations of renamed functions.
	* checkin.c (Checkin): Remove rcscopy variable (no longer needed
	because of change in RCS_unlock call).
	* commit.c: Include <assert.h>.
	(remove_file): Update RCSNode path if the file is renamed.
	(unblockrcs): Change rcs parameter to RCSNode.  Change all
	callers.
	(fixbranch): Likewise.
	(lock_RCS): Likewise.  Don't call RCS_parsercsfile.
	(checkaddfile): Update RCSNode path if the file is renamed.  After
	creating a new file, call RCS_parse.  When stubbing a branch, use
	the passed in RCSNode if there is one, rather than calling
	RCS_Parse.  Don't call RCS_Parse again after calling RCS_settag.
	Free head and magicrev even if RCS_settag fails.
	* import.c (add_rev): Change rcs parameter to RCSNode.  Change all
	callers.
	(add_tag): Likewise.

	* rcs.c (RCS_fast_checkout): Amend last patch: if workfile is
	NULL, but sout is not NULL, use sout in error message.

Wed Sep  4 13:35:09 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* version.c: Increment version number to 1.8.8.

	* Version 1.8.7.

Wed Sep  4 1996  Jim Kingdon  <kingdon@cyclic.com>

	* client.c (send_file_names): Look for the name to send in
	Entries even if the file doesn't exist; we should send the
	name as it appears in Entries in the "rm foo; cvs update FOO"
	case.

Tue Sep  3 20:50:11 1996  William A. Hoffman  <hoffman@albirio.crd.ge.com>

	* rcs.c (RCS_fast_checkout): If workfile is NULL, don't try to
	include it in error message.

Mon Aug 26 12:27:38 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* mkmodules.c (mkdir_if_needed): Move from here ...
	* filesubr.c, cvs.h (mkdir_if_needed): ... to here.  Have it
	return a value saying whether the directory was created.
	* client.c (call_in_directory), edit.c (edit_fileproc): Call it.

Fri Aug 23 19:19:44 1996  Ian Lance Taylor  <ian@cygnus.com>

	* checkin.c (Checkin): Copy rcs parameter in case it is freed when
	finfo->rcs is freed.

Fri Aug 23 14:55:41 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* remove.c (remove_fileproc): Revert change of 23 Aug to print
	getwd and finfo->file in message.  The latter is redundant with
	fullname and the former is redundant with fullname and the working
	directory when CVS was invoked.  The implementation was also
	lacking as the getwd call could overflow the buffer.

Fri Aug 23 18:40:35 1996  Norbert Kiesel  <nk@col.sw-ley.de>

	* remove.c (cvsremove): fix remove -f for client/server

Fri Aug 23 11:28:27 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* wrapper.c, cvs.h: Remove conflictHook field of WrapperEntry,
	WRAP_CONFLICT in WrapMergeHas, and 'c' option in wrap_add; they
	are never used.

Fri Aug 23 11:41:46 1996  Norbert Kiesel  <nk@col.sw-ley.de>

	* server.c (switch_to_user): use #ifdef SETXID_SUPPORT instead of
 	#if SETXID_SUPPORT

Thu Aug 22 14:18:43 1996  Ian Lance Taylor  <ian@cygnus.com>

	* checkin.c (Checkin): Remove local variable xfinfo.  Reparse the
	RCS file after the checkin.  Call RCS_fast_checkout rather than
	RCS_checkout.

	* cvs.h (RCS_FLAGS_LOCK): Don't define.
	(RCS_FLAGS_*): Adjust values to fill in hole left by removal of
	RCS_FLAGS_LOCK.
	* rcs.c (RCS_fast_checkout): Don't check for RCS_FLAGS_LOCK.
	* rcscmds.c (RCS_checkout): Likewise.
	* commit.c (commit_fileproc): Remove rcs local variable.  If
	status is T_MODIFIED, require that finfo->rcs be set, call
	Lock_RCS directly, and don't call locate_rcs.  If adding to a tag,
	require that finfo->rcs be set, and don't call locate_rcs.
	(remove_file): Remove rcs local variable.  Require that finfo->rcs
	be set.  Don't call locate_rcs.  Don't pass RCS_FLAGS_LOCK to
	RCS_checkout; use RCS_lock instead.  Call RCS_fast_checkout rather
	than RCS_checkout.
	(unlockrcs): Use a single rcs parameter rather than two parameters
	for file and repository.  Change all callers.  Don't call
	locate_rcs.
	(fixbranch): Likewise.
	(lockrcsfile): Remove; no more callers.

Tue Aug 20 10:13:59 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* buffer.c, rcs.c: Don't use inline.  It wasn't being used in a
	loop or any such place where it would matter for performance, and
	it was a (minor) portability hassle.

	* server.c (server): Change "Dummy argument 0" to "cvs server" and
	add comment explaining why.

	* rcs.c (linevector_add): Add comment regarding changing \n to \0.

Tue Aug 20 09:19:19 1996  Norbert Kiesel  <nk@col.sw-ley.de>

	* checkout.c (checkout_proc): Call RCS_parse to get the default
 	options from the RCS file.

	* sanity.sh (binfiles): Add tests 5.5b0 and 5.5b1 for the above fix

Mon Aug 19 18:13:32 1996  Ian Lance Taylor  <ian@cygnus.com>

	* rcs.c (linevector_init): Make inline.  Set lines_alloced to 0,
	not 10.  Set vector to NULL.
	(linevector_add): Remove assertion that lines_alloced is greater
	than zero.  Initialize lines_alloced if necessary.
	(linevector_copy): Initialize lines_alloced if necessary.
	(linevector_free): Only free vector if it is not NULL.
	(RCS_deltas): Always call linevector_init and linevector_free on
	curlines, headlines, and trunklines.
 	(RCS_fast_checkout): Remove #if 0 around code that calls
	RCS_deltas.

Fri Aug 16 17:52:54 1996  Ian Lance Taylor  <ian@cygnus.com>

	* rcs.c (linevector_add): Handle zero length correctly.
	(RCS_deltas): In RCS_FETCH case, the data is in headlines, not
	curlines.
	(RCS_fast_checkout): Update comment about RCS_deltas: the
	testsuite now passes.

	* rcs.c (RCS_fully_parse): Use the length of the value, rather
	than assuming that there are no embedded zero bytes.
	(struct line): Add len field.
	(linevector_add): Add len parameter.  Change all callers.  Use
	len, rather than assuming that there are no embedded zero bytes.
	Set the len field in new lines.
	(RCS_deltas): Use the length of the value, rather than assuming
	that there are no embedded zero bytes.  Use the line length when
	outputting it and when copying it.
	(RCS_fast_checkout): Update comment about RCS_deltas to remove
	note about supporting zero bytes correctly.

Thu Aug 15 23:38:48 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* commit.c, import.c: Revise comments regarding the fact that we
	call start_server before do_editor.

Thu Aug 15 11:30:55 1996  Ian Lance Taylor  <ian@cygnus.com>

	* server.c: Include <sys/socket.h> if AUTH_SERVER_SUPPORT.
	(pserver_authenticate_connection): Set SO_KEEPALIVE on
	STDIN_FILENO.
	(kserver_authenticate_connection): Likewise.

Thu Aug 15 10:26:41 1996  Norbert Kiesel  <nk@col.sw-ley.de>

	* server.c (switch_to_user): Fix previous patch to compile it for
 	both HAVE_KERBEROS and AUTH_SERVER_SUPPORT

Wed Aug 14 14:02:00 1996  Norbert Kiesel  <nk@col.sw-ley.de>

	* server.c (check_password): if available use getspnam instead of
 	getpwnam when reading system passwords.  This allows cvs pserver
 	to run on systems with shadow passwords.
	(switch_to_user): new static function.  Contains the extracted
 	common tail of kserver_authenticate_connection and
 	pserver_authenticate_connection.  If compiled with SETXID_SUPPORT,
 	honor the setgid bit if it is set.
	(check_repository_password): turn into a static function
	(check_password): ditto
	(pserver_authenticate_connection): little code cleanup

Wed Aug 14 01:07:10 1996  Greg A. Woods  <woods@most.weird.com>

	* history.c (history): apply fix posted by Steven Meyer
	<steve@blacksmith.com> to info-cvs to correct handling of '-D'
	argument.  Message-Id: <9608122335.AA01385@nijel.blacksmith.com>

Tue Aug 13 13:42:36 1996  Ian Lance Taylor  <ian@cygnus.com>

	* log.c (cvslog): Remove comment about calling rlog.
	* rcs.c (translate_symtag): Correct typo in comment (l ist ->
	list).
	* server.c (server_write_entries): Add omitted word (lists) in
	comment.

Tue Aug 13 14:01:49 1996  Norbert Kiesel  <nk@col.sw-ley.de>

	* wrapper.c (wrap_rcsoption): fix memory access error

	* rcs.c (RCS_fast_checkout): fix memory access error (triggered
	by an empty option string)

Mon Aug 12 17:45:15 1996  Jim Kingdon  (unknown@beezley)

	* buffer.c, zlib.c: If EIO is not defined, try to define it.

Mon Aug 12 10:33:27 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* import.c (comtable): Add comment concerning applicability with
	RCS 5.7.

	* server.c (server): If TMPDIR is not an absolute pathname, give
	an error.

Mon Aug 12 10:34:43 1996  Norbert Kiesel  <nk@col.sw-ley.de>

	* main.c: add synonym "ann" for "annotate" again

Sun Aug 11 17:54:11 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* rcs.h (RCS_RLOG): Removed; no longer used.

Fri Aug  9 20:16:20 1996  Ian Lance Taylor  <ian@cygnus.com>

	* server.c (dirswitch): Open the Entries file with mode "a" rather
 	than "w+".
	(server_write_entries): Open the Entries file with mode "a" rather
	than "w".
	* sanity.sh (modules): Add topfiles module and 155cN tests for
	above patch.

Fri Aug  9 12:11:25 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* main.c (cmd): Add comment regarding synonyms.

Thu Aug  8 14:40:10 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* main.c: Remove synonyms for "cvs annotate".  Synonyms create
	user confusion.

Thu Aug  8 10:24:04 1996  Norbert Kiesel  <nk@col.sw-ley.de>

	* main.c: Revert (undocumented) change to rename the cvs history
	alias "his" to "hist"

Wed Aug  7 18:26:25 1996  Ian Lance Taylor  <ian@cygnus.com>

	* server.c (cvs_output): Change str parameter to const char *.
	Correct loop to print from p, not str.
	(cvs_outerr): Likewise.
	* cvs.h (cvs_output, cvs_outerr): Update declarations.

	* server.c (receive_partial_file): Read and discard remaining file
	data on a write error.
	(serve_modified): Discard data while size > 0, not >=.

Wed Aug  7 15:11:40 1996  Norbert Kiesel  <nk@col.sw-ley.de>

	* main.c (cmds): Add some aliases for "annotate".
	(usg): Improve usage message text
	(cmd_synonyms): New function to print the command synonym list
	(main): Add new option --help-synonyms

Wed Aug  7 00:07:31 1996  Ian Lance Taylor  <ian@cygnus.com>

	Keep track of subdirectories in the Entries file.
	* cvs.h (enum ent_type): Define.
	(struct entnode): Add type field.
	(struct stickydirtag): Add subdirs field.
	(Subdirs_Known, Subdir_Register, Subdir_Deregister): Declare.
	(ignore_files): Update declaration for new parameter.
	(FILESDONEPROC): Add entries parameter.
	(DIRENTPROC, DIRLEAVEPROC): Likewise.
	* entries.c (Entnode_Create): Add type parameter.  Change all
	callers.
	(write_ent_proc): If closure is not NULL, treat it as a pointer to
	an int, and set it to 1 if a node is seen which is not ENT_FILE.
	(write_entries): If subdirectory information is known, but no
	subdirectories were written, write an unadorned D to the file.
	(Scratch_Entry): Write an R command to Entries.Log.  Don't rewrite
	the Entries file.
	(Register): Set entfilename.  Write an A command rather than an
	unadorned entries line.
	(fgetentent): Add cmd and sawdir parameters.  Change all callers.
	If CMD is not NULL, expect and return a single character command.
	Handle an initial D by setting the type to ENT_SUBDIR.
	(fputentent): Output an initial D for an ENT_SUBDIR entry.
	(Entries_Open): Handle removal commands in Entries.Log.  Record
	whether subdirectory information is known in the list private
	data.
	(Subdirs_Known): New function.
	(subdir_record): New static function.
	(Subdir_Register, Subdir_Deregister): New functions.
	* find_names.c (add_entries_proc): Skip entries that are not
	ENT_FILE.
	(add_subdir_proc): New static function.
	(register_subdir_proc): New static function.
	(Find_Directories): If the Entries file has subdirectory
	information, get the directories out of it.  Otherwise, call
	find_dirs, and add the information to the Entries file.
	* recurse.c (struct frame_and_entries): Define.
	(do_recursion): Don't call Entries_Close until after processing
	dirlist.  Pass entries to filesdoneproc.  Pass a frame_and_entries
	structure to do_dir_proc via walklist.
	(do_dir_proc): Expect a frame_and_entries structure in closure,
	not a recursion_frame.  Pass entries to direntproc and
	dirleaveproc.
	* ignore.c (ignore_files): Add entries parameter.  Change all
	callers.  If we have subdirectory information, check for
	directories in entries.
	* add.c (add): If client_active, call Subdir_Register on each new
	directory.
	(add_directory): Add entries parameter.  Change caller.  Call
	Subdir_Register.
	* checkout.c (build_dirs_and_chdir): Call Subdir_Register.
	* client.c (call_in_directory): Call Subdir_Register for newly
	created directories.  Call Subdirs_Known or Find_Directories after
	calling Entries_Open.
	(process_prune_candidates): Call Subdir_Deregister.
	* commit.c (findmaxrev): Skip entries that are not ENT_FILE.
	* server.c (dirswitch): Call Subdir_Register.
	* update.c (update_dirent_proc): Call Subdir_Register.
	(update_dirleave_proc): Call Subdir_Deregister.
	* Several files: Change direntproc, dirleaveproc, and
	filesdoneproc routines to expect an entries argument.

	* rcs.c (translate_symtag): New static function.
	(RCS_gettag): Use translate_symtag rather than RCS_symbols.
	(RCS_nodeisbranch, RCS_whatbranch): Likewise.

Tue Aug  6 15:36:09 1996  Ian Lance Taylor  <ian@cygnus.com>

	Finish the conversion of cvs log so that it never invokes rlog.
	* log.c (struct log_data): Remove dorlog field.  Add nameonly,
	header, long_header, statelist, and authorlist fields.
	(log_usage): Remove rlog-options.  Add -R, -h, -t, -b, -s, -w.
	(cvslog): Don't clear opterr.  Handle -h, -R, -s, -t, -w.  If an
	unrecognized option is seen, call usage.
	(log_parse_list): New static function.
	(log_fileproc): Remove code that called rlog.  Check nameonly,
	header, and long_header fields in log_data.
	(log_version_requested): Check statelist and authorlist.

	* log.c (struct datelist): Define.
	(struct log_data): Add datelist and singledatelist fields.
	(log_usage): Add -d.
	(cvslog): Handle -d.
	(log_parse_date): New static function.
	(log_fileproc): Do special single date handling.
	(log_version_requested): Check datelist and singledatelist.
	(log_fix_singledate): New static function.

Mon Aug  5 23:48:16 1996  Ian Lance Taylor  <ian@cygnus.com>

	* log.c (struct option_revlist): Define.
	(struct revlist): Define.
	(struct log_data): Add default_branch and revlist fields.
	(struct log_data_and_rcs): Define.
	(log_usage): Add -N and -r.
	(cvslog): Handle -N and -r.
	(log_parse_revlist): New static function.
	(log_fileproc): Call log_expand_revlist and log_free_revlist.
	Pass log_data_and_rcs structure to log_count_print via walklist.
	(log_expand_revlist, log_free_revlist): New static functions.
	(log_version_requested): New static function.
	(log_count_print): New static function.
	(log_tree): Add log_data and revlist parameter.  Change all
	callers.
	(log_abranch): Likewise.
	(log_version): Likewise.  Call log_version_requested.
	(version_compare): New static function.
	* sanity.sh (log): New tests for -r, -b, and -N options to log.

Sun Aug  4 11:19:30 1996  Ian Lance Taylor  <ian@cygnus.com>

	Handle simple cases of cvs log without invoking rlog.
	* log.c (struct log_data): Define.
	(cvslog): Use getopt to parse options.  Set up a log_data
	structure, and pass it to start_recursion.
	(log_fileproc): Get arguments form callerdat rather than static
	variables.  In simple cases, print the log information directly,
	rather than invoking rlog.
	(log_symbol, log_count, log_tree): New static functions.
	(log_abranch, log_version, log_branch): New static functions.
	* rcs.h (struct rcsnode): Add other field.
	(struct rcsversnode): Add other field.
	(RCS_fully_parse): Declare.
	* rcs.c (getrcsrev): Move declaration to start of file.
 	(RCS_reparsercsfile): Add all parameter.  Change all callers.
	(RCS_fully_parse): New function.
	(freercsnode): Free other list.
	(rcsvers_delproc): Free other list.
	* hash.h (enum ntype): Add RCSFIELD.
	* hash.c (nodetypestring): Handle RCSFIELD.

Sat Aug  3 19:39:54 1996  Ian Lance Taylor  <ian@cygnus.com>

	* log.c (cvslog): Correct position of CLIENT_SUPPORT #endif.

Thu Jul 25 12:06:45 1996  Ian Lance Taylor  <ian@cygnus.com>

	* update.c (join_file): If merging a branch, and the branch
	revision does not exist, just return without doing anything.
	* sanity.sh (join): Add cases file7 and file8 to test above
	patch.

	* server.c (cvsencrypt): Rename from encrypt, to avoid conflict
	with NetBSD unistd.h.  Rename all uses.

	* server.c (krb_encrypt_buffer_output): Fix typo in comment (reply
	-> replay).

Thu Jul 25 10:37:32 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* server.c (krb_encrypt_buffer_output): Fix typo in comment
	(krb_recv_auth -> krb_recvauth).

Wed Jul 24 09:28:33 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* lock.c (set_lock): Adjust comment regarding why we call stat.

Wed Jul 24 15:06:08 1996  Ian Lance Taylor  <ian@cygnus.com>

	Add encryption support over a Kerberos connection.
	* main.c (usg): Mention -x if CLIENT_SUPPORT.
	(main): Handle -x.
	* client.h (encrypt): Declare.
	(krb_encrypt_buffer_initialize): Declare.
	* client.c (kblock, sched): New static variables if
	HAVE_KERBEROS.
	(start_tcp_server): Remove sched local variable.  Copy
	cred.session into kblock.
	(start_server): Turn on encryption if requested.
	* server.c (kblock, sched): New static variables if
	HAVE_KERBEROS.
	(serve_kerberos_encrypt): New static function.
	(requests): Add "Kerberos-encrypt" if HAVE_KERBEROS.
	(kserver_authenticate_connection): Remove sched local variable.
	Copy auth.session into kblock.
	(encrypt): New global variable.
	(struct krb_encrypt_buffer): Define.
	(krb_encrypt_buffer_initialize): New function.
	(krb_encrypt_buffer_input): New static function.
	(krb_encrypt_buffer_output): New static function.
	(krb_encrypt_buffer_flush): New static function.
	(krb_encrypt_buffer_block): New static function.
	(krb_encrypt_buffer_shutdown): New static function.

Wed Jul 24 09:28:33 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* recurse.c (do_recursion): Add comment about calling
	Name_Repository in !(which & W_LOCAL) case.

	* expand_path.c (expand_variable): Fix typo (varaible -> variable).

Tue Jul 23 15:05:01 1996  Ian Lance Taylor  <ian@cygnus.com>

	* update.c (update_fileproc): In T_REMOVE_ENTRY case, only call
	server_scratch_entry_only if ts_user is NULL.
	* sanity.sh (death2): Add death2-20 test for above patch.

	* diff.c (diff_fileproc): If a file is not in the working
	directory, check that the tag is present before warning that no
	comparison is possible.
	* sanity.sh (death2): Add death2-diff-9 and death2-diff-10 tests
	for above patch.

Tue Jul 23 12:05:42 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* tag.c (tag_check_valid): Fix indentation.

	* client.c (handle_e): Flush stdout before writing to stderr.
	(handle_m): Flush stderr before writing to stdout.

Fri Jul 19 16:02:11 1996  Mike Ladwig  <mike@twinpeaks.prc.com>

	* client.c: Added NO_CLIENT_GZIP_PROCESS to deal with the MacOS
	client where Gzip-stream is supported, but "gzip-file-contents" is
	not.

Fri Jul 19 16:02:11 1996  Mike Ladwig  <mike@twinpeaks.prc.com>

	* repos.c: Fixed recent patch which added plain fopen rather than
	CVS_FOPEN

Mon Jul 22 22:25:53 1996  Ian Lance Taylor  <ian@cygnus.com>

	* logmsg.c (tag): New static variable.
	(setup_tmpfile): Don't print the prefix before calling fmt_proc.
	Free tag if it is set.
	(find_type): Get type from logfile_info struct.
	(fmt_proc): Likewise.  Print tag information.  Handle all prefix
	printing.
	(revision): Remove static variable.
	(Update_Logfile): Remove xrevision parameter.  Change all
	callers.
	(title_proc): Get type from logfile_info struct.
	(logfile_write): Remove revision parameter.  Change all callers.
	* cvs.h (struct logfile_info): Define.
	(Update_Logfile): Update prototype.
	* commit.c (find_fileproc): Set logfile_info information.
	(check_fileproc): Likewise.
	(commit_filesdoneproc): Don't call ParseTag.
	(update_delproc): Free logfile_info information.
	* add.c (add_directory): Set logfile_info information.
	* import.c (import): Likewise.

	* tag.c (tag_check_valid): The special BASE and HEAD tags are
	always valid.
	* sanity.sh (basica): Add basica-6.3 test for above patch.

Mon Jul 22 14:41:20 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* update.c (merge_file): Pass 0 not NULL to checkout_file (20 Jul
	96 change changed other calls to checkout_file but missed this one).

Sat Jul 20 00:21:54 1996  Ian Lance Taylor  <ian@cygnus.com>

	* update.c (join_file): Check whether the target of the merge is
	the same as the working file revision before checking whether the
	file was added during the merge.

	* update.c (scratch_file): Remove existing parameters, and add a
	single parameter of type struct file_info.  Change all callers.
	Warn if unlink_file fails.
	(checkout_file): Remove resurrecting_out parameter.  Add adding
	parameter.  Change all callers.  Remove joining code.
	(join_file): Remove resurrecting parameter.  Rewrite to handle
	joining dead or added revisions.
	* classify.c (Classify_File): If there is no user file, and the
	RCS file is dead, return T_UPTODATE rather than T_CHECKOUT.
	* checkout.c (checkout_proc): Set W_ATTIC if there is a join tag.
	* sanity.sh (join): New set of tests for above patches.
	(death): Adjust tests 86, 89, 89a, 92.1c, 95 for above patches.
	(import): Adjust test 113 for above patches.

Thu Jul 18 19:24:08 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* lock.c: Add comment explaining what locks are for.  Also discuss
	various changes to locking which get proposed from time to time.

	* sanity.sh (death2): Change a number of test names from death-*
	to death2-*.

	* wrapper.c (wrap_setup): Don't look in repository if client_active.
	* wrapper.c, cvs.h (wrap_send): New function.
	* update.c (update), import.c (import): Call it.
	* sanity.sh (binwrap): Do binwrap tests for remote as well as
	local; tests for above fixes.

	* wrapper.c: Add a few FIXME comments.

Thu Jul 18 18:43:50 1996  Ian Lance Taylor  <ian@cygnus.com>

	* sanity.sh (patch): Fix names of a couple of tests to say patch
	rather than death2.

Thu Jul 18 16:19:21 1996  Bill Bumgarner <bbum@friday.com>
			  and Jim Kingdon  <kingdon@harvey.cyclic.com>

	* add.c (add), import.c (add_rcs_file): Check for options from
	wrappers and use them if specified.
	* cvs.h (WrapMergeHas): Add WRAP_RCSOPTION.
	* wrapper.c (WrapperEntry): Add rcsOption field.
	(wrap_add): Allow a single character argument to an option.
	(wrap_add): Handle -k option.
	(wrap_add_entry): Handle rcsOption field.
	(wrap_name_has): Handle WRAP_RCSOPTION.
	* wrapper.c, cvs.h (wrap_rcsoption): New function.
	* add.c, import.c, wrapper.c: Minor beautification (mostly
	removing trailing spaces).
	* sanity.sh (binwrap): New tests test for this feature.

Wed Jul 17 10:14:20 1996  Ian Lance Taylor  <ian@cygnus.com>

	* checkout.c (checkout): Remove extraneous else accidentally
	inserted in last checkin.

Tue Jul 16 11:37:41 1996  Ian Lance Taylor  <ian@cygnus.com>

	* sanity.sh (import): Use quoting to avoid expansion of RCS ID
	strings.

	* sanity.sh (import): Use dotest to examine the output of test
 	113, and the actual contents of the file in test 116.

	* update.c (join_file): Always skip rcsmerge if the two revisions
 	are the same (the old code always did the rcsmerge when two -j
	options were specified).

	* checkout.c (history_name): New static variable.
	(checkout): Permit both tag and date to be specified.  Set
	history_name.
	(checkout_proc): Use history_name when calling history_write.
	* rcs.c (RCS_getversion): If both tag and date are set, use
	RCS_whatbranch to get the branch revision number of a symbolic
	tag.
	(RCS_getdatebranch): If the branch revision itself is early
	enough, then use it if the first branch is not early enough.  Add
	comment for invalid RCS file.  Don't bother to check for NULL
	before calling xstrdup, since xstrdup checks anyhow.

	* client.h (file_gzip_level): Declare.
	* client.c (file_gzip_level): Define.
	(start_server): Don't set gzip_level to zero after sending
	Gzip-stream command.  Set file_gzip_level after sending
	gzip-file-contents command.
	(send_modified): Use file_gzip_level rather than gzip_level.
	* server.c (server_updated): Likewise.
	(serve_gzip_contents): Likewise.

	* sanity.sh (patch): New tests.  Test remote CVS handling of
	unpatchable files.

	* sanity.sh (death2): Accept a '.' in the temporary file name
	printed by diff.

	* rcscmds.c (RCS_checkin): Remove noerr parameter.  Change all
	callers.
	* cvs.h (RCS_checkin): Update declaration.
	* commit.c (remove_file): Pass RCS_FLAGS_QUIET to RCS_checkin.

	* history.c (history): Cast sizeof to int to use correct type in
	error printf string.
	(report_hrecs): Cast strlen result to int to use correct type in
	printf string.

	* server.c (cvs_flusherr): Correct typo in comment.

	* rcs.c (getrcskey): Hoist three constant strcmp calls out of the
	value reading loop.

	* fileattr.c (fileattr_get): Change parameter types from char * to
 	const char *.
	(fileattr_get0, fileattr_modify, fileattr_set): Likewise.
	(fileattr_newfile): Likewise.
	* fileattr.h (fileattr_get): Update declaration.
	(fileattr_get0, fileattr_modify, fileattr_set): Likewise.
	(fileattr_newfile): Likewise.

Thu May 16 11:12:18 1996  Mark P. Immel <immel@radix.net>
			  and Jim Kingdon  <kingdon@harvey.cyclic.com>

	* client.h, client.c, checkout.c (client_send_expansions):
	Pass an additional parameter indicating where the checkout is
	to occur, to avoid passing the wrong information to send_files().
	* sanity.sh (basicb): New test basicb-cod-1 tests for above fix.

Mon Jul 15 18:26:56 1996  Ian Lance Taylor  <ian@cygnus.com>

	* recurse.c (do_recursion): Require a repository before calling
	Find_Names.
	* repos.c (Name_Repository): Remove sanity checks which spend time
	examining the filesystem.

Mon Jul 15 1996  Jim Kingdon  <kingdon@cyclic.com>

	* client.c (send_file_names): Send file names as they appear
	in CVS/Entries, rather than as specified (in cases where they
	might differ in case).
	(send_fileproc): Use file name from CVS/Entries (vers->entdata->user)
	rather than file name as specified (finfo->file) when available.

Sun Jul 14 15:39:44 1996  Mark Eichin  <eichin@cygnus.com>
			  and Ian Lance Taylor  <ian@cygnus.com>

	Improve diff -N handling of nonexistent tags and removed files.
	* diff.c (enum diff_file): New definition for whole file, moving
	unnamed enum out of diff_fileproc, renaming DIFF_NEITHER to
	DIFF_DIFFERENT, and adding DIFF_SAME.
	(diff): Look through the repository even if only one revision is
	given.
	(diff_fileproc): Change empty_file to be enum diff_file.  If there
	is no user revision, but there is a repository file, treat it as a
	removed file.  Pass empty_file to diff_file_nodiff, and set it
	from the return value.
	(diff_file_nodiff): Change return type to enum diff_file.  Replace
	just_set_rev parameter with enum diff_file empty_file parameter.
	Change handling of a missing tag to return an enum diff_file value
	if empty_files is set, rather than reporting an error.  Free tmp
	if xcmp returns 0.
	* sanity.sh (death2): Add tests for above patches.

Sat Jul 13 19:11:32 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* rcs.c (annotate): In sending options to server, reverse sense of
	test so that we send -f iff -f was specified, rather than iff -f was
	not specified.

Fri Jul 12 20:23:54 1996  Greg A. Woods  <woods@most.weird.com>

	* zlib.c (compress_buffer_input): add a couple of casts for
	uses of z_stream's next_in and next_out

Fri Jul 12 18:55:26 1996  Ian Lance Taylor  <ian@cygnus.com>

	* zlib.c: New file.
	* client.c (log_buffer_block): Call set_block and set_nonblock,
	rather than lb->buf->block.
	(log_buffer_shutdown): New static function.
	(get_responses_and_close): Call buf_shutdown on to_server and
	from_server.
	(start_server): If "Gzip-stream" is supported, use it rather than
	"gzip-file-contents".
	* server.c (print_error): Call buf_flush rather than
	buf_send_output.
	(print_pending_error, serve_valid_responses): Likewise.
	(serve_expand_modules, serve_valid_requests): Likewise.
	(do_cvs_command): Call buf_flush rather than buf_send_output
	before the fork, and in the parent after the child has completed.
	In the child, set buf_to_net and buf_from_net to NULL.
	(serve_gzip_stream): New static function.
	(requests): Add "Gzip-stream".
	(server_cleanup): Don't do anything with buf_to_net if it is
	NULL.  Call buf_flush rather than buf_send_output.  Call
	buf_shutdown on buf_to_net and buf_from_net.  Call error for an
	malloc failure rather than buf_output to buf_to_net.
	* buffer.h (struct buffer): Add shutdown field.
	(buf_initialize): Update declaration for new shutdown parameter.
	(compress_buffer_initialize): Declare.
	(buf_shutdown): Declare.
	* buffer.c (buf_initialize): Add shutdown parameter.  Change all
	callers.
	(buf_shutdown): New function.
	* Makefile.in (SOURCES): Add zlib.c
	(OBJECTS): Add zlib.o.
	($(PROGS)): Depend upon ../zlib/libz.a.
	(cvs): Link against ../zlib/libz.a.
	(zlib.o): New target.

Fri Jul 12 1996  Jim Kingdon  <kingdon@cyclic.com>

	* client.c (log_buffer_input, log_buffer_output): Use size_t
	to avoid Visual C++ signed/unsigned warnings.

Thu Jul 11 22:01:37 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* client.c (handle_f): Reindent.

	* client.c (mode_to_string, handle_m, handle_e,
	auth_server_port_number, get_responses_and_close), server.c
	(pserver_authenticate_connection, serve_modified,
	serve_enable_unchanged, wait_sig, server_cleanup): Reindent.
	* server.c: Remove #if 0'd block of code above
	check_repository_password; it was yanked out of some unknown
	context and didn't seem to be very useful.

Thu Jul 11 20:10:21 1996  Ian Lance Taylor  <ian@cygnus.com>

	* server.c (do_cvs_command): Pass new special parameter to
	buf_copy_counted.  If it gets set to -1, send an 'F' response if
	the client supports it, and call cvs_flusherr.
	(cvs_flusherr): New function.
	* cvs.h (cvs_flusherr): Declare.
	* client.c (handle_f): New static function.
	(responses): Add "F".
	* buffer.c (buf_send_special_count): New function.
	(buf_copy_counted): Add special parameter.  Handle negative counts
	specially.
	* buffer.h (buf_send_sepcial_count): Declare.
	(buf_copy_counted): Update declaration.
	* lock.c (lock_wait, lock_obtained): Call cvs_flusherr.

	Change the client to use the buffer data structure.
	* client.c: Include "buffer.h".
	(to_server): Change to be struct buffer *.
	(to_server_fp): New static variable.
	(from_server): Change to be struct buffer *.
	(from_server_fp): New static variable.
	(from_server_logfile, to_server_logfile): Remove.
	(buf_memory_error): New static function.
	(struct log_buffer): Define.
	(log_buffer_initialize, log_buffer_input): New static functions.
	(log_buffer_output, log_buffer_flush): New static functions.
	(log_buffer_block): New static function.
	(struct socket_buffer): Define if NO_SOCKET_TO_FD.
	(socket_buffer_initialize): New static function if
	NO_SOCKET_TO_FD.
	(socket_buffer_input, socket_buffer_output): Likewise.
	(socket_buffer_flush): Likewise.
	(read_line): Rewrite to use buf_read_line.  Remove eof_ok
	parameter (it was always passed as 0); change all callers.
	(send_to_server): Rewrite to use buf_output.
	(try_read_from_server): Rewrite to use buf_read_data.
	(get_responses_and_close): Use from_server_fp and to_server_fp for
	the streams.  Check buf_empty_p when checking for dying gasps.
	(start_server): Don't set from_server_logfile and
	to_server_logfile; instead, call log_buffer_initialize.  If
	NO_SOCKET_TO_FD and use_socket_style, call
	socket_buffer_initialize; otherwise, call
	stdio_buffer_initialize.
	* buffer.c: Compile if CLIENT_SUPPORT is defined.
	(buf_flush): Fix comment to describe return value.
	(buf_read_line): Add lenp parameter.  Change all callers.  Look
	for a line terminated by \012 rather than \n.
	* buffer.h: Compile if CLIENT_SUPPORT is defined.
	(buf_read_line): Update declaration.

	* server.c (server): Initialize buf_to_net, buf_from_net,
	saved_output, and saved_outerr before setting error_use_protocol.
	(pserver_authenticate_connection): Don't set error_use_protocol.
	Errors before the authentication is complete aren't handled
	cleanly anyhow.  Change error call after authentication to use
	printf.

Thu Jul 11 1996  Jim Kingdon  <kingdon@cyclic.com>

	* client.c (start_server): Open logfiles in binary, not text, mode.

Wed Jul 10 19:24:22 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* server.c (print_pending_error, print_error): Remove comments
	about deadlocks; they don't apply here.  Add comments saying
	that these functions must only be called when it is OK to
	send output (which is why the deadlock concern doesn't apply).  The
	comments remain for server_cleanup and serve_valid_responses,
	where they are an example of the "print a message and exit"
	behavior which is noted in cvsclient.texi and which also exists
	places like kserver_authenticate_connection.

Wed Jul 10 18:24:46 1996  Ian Lance Taylor  <ian@cygnus.com>

	* server.c (print_error): Add comment warning about potential
	deadlock.
	(print_pending_error, serve_valid_responses): Likewise.
	(server_cleanup): Likewise.
	(serve_directory): Don't call buf_send_output.
	(serve_modified, serve_notify, server, cvs_outerr): Likewise.
	(serve_expand_modules): Call buf_send_output.
	(serve_valid_requests): Likewise.

Wed Jul 10 15:51:29 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* main.c (main): Print a warning for rlog command.

Wed Jul 10 15:00:55 1996  Ian Lance Taylor  <ian@cygnus.com>

	Abstract the buffer data structure away from the underlying
	communication medium.
	* buffer.h (struct buffer): Remove fd and output fields.  Add
	input, output, flush, block, and closure fields.
	(buf_initialize, buf_nonio_initialize): Declare.
	(stdio_buffer_initialize, buf_flush): Declare.
	(buf_read_line, buf_read_data): Declare.
	* buffer.c: Include <assert.h>.  Don't include <fcntl.h>.
	(O_NONBLOCK, blocking_error): Don't define.
	(buf_initialize, buf_nonio_initialize): New functions.
	(buf_send_output): Use output function, rather than write.
	(buf_flush): New function.
	(set_nonblock, set_block): Use block function, rather than calling
	fcntl.
	(buf_send_counted): Don't check output.
	(buf_input_data): Call input function, rather than read.
	(buf_read_line, buf_read_data): New functions.
	(buf_copy_lines, buf_copy_counted): Don't check output.
	(stdio_buffer_initialize): New function.
	(stdio_buffer_input, stdio_buffer_output): New static functions.
	(stdio_bufer_flush): New static function.
	* server.c: Include "getline.h".
	(buf_to_net): Change to be a pointer.  Change all uses.
	(protocol, saved_output, saved_outerr): Likewise.
	(buf_from_net): New static variable.
	(no_mem_error, NO_MEM_ERROR, read_line): Remove.
	(struct fd_buffer): Define.
	(fd_buffer_initialize, fd_buffer_input): New static functions.
	(fd_buffer_output, fd_buffer_flush): New static functions.
	(fd_buffer_block): New static function.
	(serve_directory): Call buf_read_line rather than read_line.
	(serve_notify, server): Likewise.
	(receive_partial_file): Call buf_read_data rather than fread.
	(serve_modified): Call buf_read_line rather than read_line.  Call
	buf_read_data rather than fread.
	(do_cvs_command): Initialize buffers with fd_buffer_initialize.
	Change stdoutbuf, stderrbuf, and protocol_inbuf to be pointers.
	(server): Initialize buffers using fd_buffer_initialize,
	stdio_buffer_initialize, and buf_nonio_initialize.
	(check_repository_password): Call getline rather than read_line.

Wed Jul 10 15:51:29 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* commit.c (find_fileproc): Add comments describing a few cases
	that we aren't handling.

Tue Jul  9 04:33:03 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* rcs.c (RCS_deltas): New function, created from guts of old
	annotate_fileproc.
	(annotate_fileproc): Call RCS_deltas.
	(RCS_fast_checkout): Call it (commented out for now; see comment
	for reasons).

	* cvs.h, recurse.c (start_recursion): Add callerdat argument.
	* cvs.h: Add callerdat argument to recursion processor callbacks.
	* recurse.c: add it to struct recursion_frame and pass it to all
	the callbacks.
	* admin.c, client.c, commit.c, diff.c, edit.c, lock.c, log.c,
	patch.c, rcs.c, remove.c, rtag.c, status.c, tag.c, update.c,
	watch.c: Update all the functions used as callbacks.  Update calls
	to start_recursion.
	* commit.c (find_filesdoneproc, find_fileproc, find_dirent_proc,
	commit), tag.c (val_fileproc, tag_check_valid): Use callerdat
	instead of a static variable.

	* recurse.c (do_recursion): Make static and move declaration to here...
	* cvs.h: ...from here.
	* recurse.c (do_recursion): Replace plethora of arguments with
	single struct recursion_frame *.  Change callers.
	* recurse.c: New structure frame_and_file.  Use it and existing
	struct recursion_frame structures to pass info to do_file_proc and
	do_dir_proc.  Remove globals fileproc, filesdoneproc, direntproc,
	dirleaveproc, which, flags, aflag, readlock, and dosrcs.

Tue Jul  9 11:13:29 1996  Ian Lance Taylor  <ian@cygnus.com>

	* modules.c (do_module): Call cvs_outerr rather than fprintf.

Mon Jul 8 1996  Jim Kingdon  <kingdon@cyclic.com>

	* rcs.c (RCS_fast_checkout): If -kb is not in use, open the
	working file in text, not binary, mode.

Sun Jul  7 10:36:16 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* rcscmds.c (RCS_settag): Add comment regarding moving check for
	reserved tag names to RCS_check_tag.

	* rcscmds.c: Add comment regarding librarifying RCS and related
	issues.  This is a lightly edited version of a message I sent to
	the CVS developers and didn't get flamed for, so it would appear
	to be relatively uncontroversial.

	* rcs.c (annotate): Remove comment suggesting -r option and
	related functionality; it is done.

Fri Jul  5 17:19:57 1996  Ian Lance Taylor  <ian@cygnus.com>

	* client.c (last_entries): Make file static, rather than function
	static within call_in_directory.
	(get_responses_and_close): If last_entries is not NULL, pass it to
	Entries_Close.

	* server.c (server_pause_check): Check for errors when reading
	from flowcontrol_pipe.

	* client.c (call_in_directory): If dir_name is ".", call
	Create_Admin if there is no CVS directory.
	(send_dirent_proc): If there is no CVS subdirectory, pretend that
	the directory does not exist (i.e., don't try to send any files in
	the directory).
	* server.c (dirswitch): If dir is "." in the top level repository,
	add "/." after the Repository entry.
	* sanity.sh (modules): Add test 155b for above patches.

Thu Jul  4 15:57:34 1996  Ian Lance Taylor  <ian@cygnus.com>

	* server.c (buf_to_net): Move definition near top of file.
	(read_line): Call buf_send_output rather than fflush.
	(print_error): Output information to buf_to_net buffer rather than
	stdout.
	(print_pending_error, serve_valid_responses): Likewise.
	(server_notify, do_cvs_command, server_co): Likewise.
	(expand_proc, serve_expand_modules, server_prog): Likewise.
	(serve_valid_requests, server_cleanup, server): Likewise.
	(server_notify): Don't call fflush on stdout.
	(do_cvs_command): Flush saved_output and saved_outerr to
	buf_to_net before fork.  Flush buf_to_net before fork.  In child,
	just initialize memory_error field of saved_output and
	saved_outerr.
	(server_cleanup): Flush buf_to_net.
	(server): Initialize saved_output and saved_outerr.
	(cvs_output): Add support for error_use_protocol case.
	(cvs_outerr): Likewise.
	* error.c (error): In HAVE_VPRINTF case, just call cvs_outerr.

	* buffer.c: New file; buffer support functions taken from
	server.c.
	* buffer.h: New file; declarations for buffer.c.
	* server.c: Move buffer support functions into buffer.c and
	buffer.h.  Include "buffer.h".
	* Makefile.in (SOURCES): Add buffer.c.
	(OBJECTS): Add buffer.o.
	(HEADERS): Add buffer.h.

Thu Jul  4 00:12:45 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* version.c: Increment version number to 1.8.6.

Wed Jul  3 22:31:16 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* version.c: Version 1.8.5.

Wed Jul  3 21:51:23 1996  Ian Lance Taylor  <ian@cygnus.com>

	* server.c (blocking_error): Define macro.
	(buf_send_output, buf_input_data): Use blocking_error rather than
	#ifdef EWOULDBLOCK.

Tue Jul  2 20:38:41 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* add.c (add): Change message which said "version 1.2 of foo.c
	will be resurrected"; the message was confusing because it made
	people think that the old contents of the file would come back
	instead of the contents in the working directory.

Mon Jul  1 01:38:57 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* find_names.c (find_dirs): Add comment explaining why we bother
	with the entries stuff.

Sat Jun 29 20:23:50 1996  Ian Lance Taylor  <ian@cygnus.com>

	* find_names.c (Find_Directories): Add entries parameter, and pass
	it to find_dirs.
	(find_dirs): Add entries parameter, and skip all files it names.
	* cvs.h (Find_Directories): Update declaration.
	* recurse.c (start_recursion): Pass NULL to Find_Directories.
	(do_recursion): Pass entries to Find_Directories.

	* client.c (send_modified): Add trace output.

	* diff.c (diff_fileproc): Always call diff_file_nodiff.  Handle
	dead versions correctly.  Handle diffs between a specified
	revision to a dead file correctly.
	(diff_file_nodiff): Add just_set_rev parameter.  Change caller.
	* patch.c (patch_fileproc): Check for dead versions.
	* sanity.sh (death2): Add tests for above patches.

Fri Jun 28 20:30:48 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	For reference, this takes CVS's text segment from 271136 bytes to
	270352 bytes, a saving of 784.  Not as good as I had hoped (oh well,
	the source *seems* simpler at least).
	* checkin.c (Checkin), commit.c (finaladd, remove_file), update.c
	(join_file, checkout_file, patch_file), no_diff.c
	(No_Differences), server.c (server_updated), classify.c
	(Classify_File), vers_ts.c (Version_TS), diff.c (diff_file_nodiff):
	Use a single struct file_info * argument instead of a bunch of
	separate arguments for each of its fields.  Remove local fullname
	emulations.  Use fullname in error messages where file had
	erroneously been used.
	* cvs.h: Update declarations of above functions and move them to
	after the struct file_info declaration.
	* server.h: Update declarations.
	* add.c, admin.c, checkin.c, checkout.c, classify.c, client.c,
	commit.c, diff.c, history.c, import.c, update.c, status.c,
	remove.c, rtag.c, tag.c: Change callers.

	* diff.c (diff): Remove -q and -Q command options.  This somehow
	slipped through the cracks of the general removal of -q and -Q
	command options on Jul 21 1995.  Note that there is no need to
	accept and ignore these options in server mode, like there is for
	some of the commands, because the client has never sent -q and -Q
	command options for "cvs diff".

Fri Jun 28 16:50:18 1996  Ian Lance Taylor  <ian@cygnus.com>

	* add.c (add): Pass force_tag_match as 1 when calling Version_TS.
	* sanity.sh (death2): Add test for above patch.  Also add
	commented out test for adding a file on a nonbranch tag, which CVS
	currently, mistakenly, permits.

Thu Jun 27 23:20:49 1996  Ian Lance Taylor  <ian@cygnus.com>
			  and Jim Kingdon  <kingdon@harvey.cyclic.com>

	* diff.c (longopts): New static array.
	(diff): Handle long options and new short options in diff 2.7.
	Fix arbitrary limit associated with the tmp variable.
	* client.c (send_option_string): Parse options as space separated,
	rather than requiring all options to be single characters.
	* diff.c, options.h.in: Remove CVS_DIFFDATE; the need for it is gone
	now that we have --ifdef (the new behavior is the behavior which
	was the default, which is that -D specifies a date).

Wed Jun 26 22:36:29 1996  Ian Lance Taylor  <ian@cygnus.com>

	* commit.c (check_fileproc): If there is a tag, permit adding a
 	file even if the RCS file already exists.
	(checkaddfile): If there is a tag, use the file in the regular
 	repository, rather than the Attic, if it exists.
	* sanity.sh (death2): New set of tests for above patch.

Tue Jun 25 23:34:13 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* update.c (checkout_file): Add comments about two cases which
	seem fishy.

	* sanity.sh (basic2, death): Add comments encouraging people to
	stop making these sections bigger and more complex.  I'm not (yet
	at least) trying to figure out the ideal size for a section (my
	current best estimate is 10-20 tests), but surely these
	two sections are pushing the limit, whatever it is.

Tue Jun 25 19:52:02 1996  Ian Lance Taylor  <ian@cygnus.com>

	* update.c (checkout_file): Rewrite handling of dead files when
	joining.  Avoid space leaks.  Avoid unnecessary file
	resurrections.
	(join_file): Add checks to skip merging a dead revision onto a
	dead revision, and to skip merging a common ancestor onto a dead
	revision.  Move check for non-existent working file after new
	checks.
	* sanity.sh (death): Use dotest for tests 86 and 95, and add test
	death-file2-1, to test above changes.

Mon Jun 24 11:27:37 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* update.c (merge_file): Replace file, repository, entries, and
	update_dir arguments with finfo argument.  Use fullname field
	instead of locally emulating it.
	(update_fileproc): Update caller.
	(merge_file): If -kb is in effect, call it a conflict, leave
	the two versions in the file and the backup file, and tell the
	user to deal with it.  The previous behavior was that the merge
	would fail and then there was no way to do a checkin even once you
	resolved the conflict (short of kludges like moving the file
	aside, updating, and then moving it back).
	* sanity.sh (binfiles): New tests binfiles-con* test for above
	behavior.  Adjust remaining tests to reflect changes in revision
	numbers.

Mon Jun 17 15:11:09 1996  Ian Lance Taylor  <ian@cygnus.com>

	* sanity.sh (import): Remove sleep.  Requiring it was a bug, and
	it is fixed in the current sources.

Mon Jun 17 1996  Ian Lance Taylor  <ian@cygnus.com>
		 and Jim Kingdon  <kingdon@harvey.cyclic.com>

	* sanity.sh (TMPPWD): Set to real name of /tmp directory.
	(basic2-64, conflicts-126.5): Use ${TMPPWD}.

Mon Jun 17 1996  Ian Lance Taylor  <ian@cygnus.com>

	* rcscmds.c (RCS_checkout): Remove noerr parameter.  Change all
	callers.
	* rcs.c (RCS_fast_checkout): Likewise.

Mon Jun 17 1996  Ian Lance Taylor  <ian@cygnus.com>

	Cleaner implementation of tag locking code added Jun 13 1996:
	* cvs.h (tag_lockdir, tag_unlockdir): Declare.
	* rtag.c (locked_dir, locked_list): Remove.
	(rtag_fileproc): Don't lock here; just call tag_lockdir.
	(rtag_filesdoneproc): Don't unlock here; just call tag_unlockdir.
	* tag.c (locked_dir, locked_list): Move farther down in file.
	(tag_fileproc): Don't lock here; just call tag_lockdir.
	(tag_filesdoneproc): Don't unlock here; just call tag_unlockdir.
	(tag_lockdir, tag_unlockdir): New functions.

Wed Jun 15 07:52:22 1996  Mike Ladwig  <mike@twinpeaks.prc.com>

	* client.c (send_modified, update_entries): Fixed bug which didn't
	handle binary file transfers in BROKEN_READWRITE_CONVERSION.

Thu Jun 13 1996  Ian Lance Taylor  <ian@cygnus.com>
		 and Jim Kingdon  <kingdon@harvey.cyclic.com>

	* update.c (checkout_file): Call server_scratch_entry_only when a
	non-pertinent file is found that does not exist.
	* sanity.sh (newb): Add test case for above patch.

Thu Jun 13 1996  Ian Lance Taylor  <ian@cygnus.com>

	* update.c (update_fileproc): Call server_scratch_entry_only when
	handling T_REMOVE_ENTRY on the server.
	* sanity.sh (conflicts2): Remove special case for remote server
	bug fixed by above patch.

Thu Jun 13 21:16:26 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* sanity.sh (basica-9): Update to reflect change to "sufficient
	access" message.

Thu Jun 13 20:13:55 1996  Ian Lance Taylor  <ian@cygnus.com>
			  and Jim Kingdon  <kingdon@harvey.cyclic.com>

	* recurse.c, cvs.h (start_recursion): Remove wd_is_repos argument;
	add comment about meaning of which argument.  Use !(which &
	W_LOCAL) instead of wd_is_repos.
	* admin.c, client.c, commit.c, diff.c, edit.c, lock.c, log.c,
	patch.c, rcs.c, remove.c, rtag.c, status.c, tag.c, update.c,
	watch.c: Change callers.  This is a semantic change in only two
	cases: (1) tag_check_valid, where repository was not "", and (2)
	the pipeout case in checkout_proc.  In both of those cases the
	previous setting of wd_is_repos did not reflect whether we
	actually were cd'd into the repository.
	* recurse.c (start_recursion): Only check for the CVS subdirectory
	if which & W_LOCAL.
	* sanity.sh (devcom): Add test case fixed by above patch.

Thu Jun 13 1996  Ian Lance Taylor  <ian@cygnus.com>

	* ignore.c (ignore_files): Skip based on the file name before
	calling lstat.

	* client.c (last_register_time): New static variable.
	(update_entries): Set last_register_time when calling Register.
	(get_responses_and_close): If the current time is the same as
	last_register_time, sleep for a section to avoid timestamp races.

Thu Jun 13 17:24:38 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* client.c (supported_request): Reindent.

Thu Jun 13 1996  Mark H. Wilkinson  <mhw@minster.york.ac.uk>

	* options.h.in, mkmodules.c: Corrections to allow compilation of
	non-client-server version.

Thu Jun 13 1996  Ian Lance Taylor  <ian@cygnus.com>

	* tag.c (tag_check_valid_join): New function.
	* cvs.h (tag_check_valid_join): Declare.
	* checkout.c (join_tags_validated): New static variable.
	(checkout_proc): Check validity of join tags.
	* update.c (update): Likewise.

	* tag.c (tag_check_valid): Correct sizeof CVSROOTADM_HISTORY to
	use CVSROOTADM_VALTAGS.

	* lock.c (Writer_Lock): If we called lock_wait to wait for a lock,
	then call lock_obtained when we get it.
	(set_lock): Likewise.
	(lock_obtained): New static function.

Thu Jun 13 13:55:38 1996  Ian Lance Taylor  <ian@cygnus.com>
			  and Jim Kingdon  <kingdon@harvey.cyclic.com>

	* main.c (main): If we can't read cvs root, don't say "you don't
	have sufficient access"; just print the message from errno.  It
	might be "No such file or directory" or something else for which
	"you don't have sufficient access" doesn't make any sense.

Thu Jun 13 1996  Ian Lance Taylor  <ian@cygnus.com>

	* commit.c (remove_file): Pass noerr as 0 to RCS_checkout.

Thu Jun 13 12:55:56 1996  Ian Lance Taylor  <ian@cygnus.com>

	* patch.c: Initialize rev1_validated and rev2_validated to 0, not 1.

Thu Jun 13 12:55:56 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* rtag.c (locked_dir): Revise comments regarding locking; the rtag
	and tag situations are different (changing from readlocking one
	directory at a time to writelocking one directory at a time does
	not do everything we might want, but it does fix simultaneous tags
	and it doesn't make anything worse).

Thu Jun 13 1996  Ian Lance Taylor  <ian@cygnus.com>

	Prevent simultaneous tag operations from interfering with each
	other.
	* rtag.c (rtag_proc): Pass rtag_filesdoneproc to start_recursion,
	and pass readlock as 0.
	(locked_dir, locked_list): New static variables.
	(rtag_fileproc): Write lock the repository if it is not already
	locked.
	(rtag_filesdoneproc): New static function to unlock the
	repository.
	* tag.c (tag): Pass tag_filesdoneproc to start_recursion, and pass
	readlock as 0.
	(locked_dir, locked_list): New static variables.
	(tag_fileproc): Write lock the repository if it is not already
	locked.
	(tag_filesdoneproc): New static function.

Thu Jun 13 11:42:25 1996  Mike Sutton <mws115@llcoolj.dayton.saic.com>

	* sanity.sh: Allow digits in usernames.

Wed Jun 12 16:23:03 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* client.c (send_modified, update_entries): Reindent and add
	comments to BROKEN_READWRITE_CONVERSION code.

Wed Jun 12 16:23:03 1996  Mike Ladwig  <mike@twinpeaks.prc.com>

	* client.c (send_modified, update_entries): Add
	BROKEN_READWRITE_CONVERSION code.

Mon Jun 10 20:03:16 1996  J.T. Conklin  <jtc@cygnus.com>

	* rcs.c (RCS_gettag): No longer set p to NULL if rcs is also NULL.
  	rcs will never be null, thanks to the assertion at top of function.

Mon Jun 10 16:28:14 1996  Ian Lance Taylor  <ian@cygnus.com>
			  and Jim Kingdon  <kingdon@harvey.cyclic.com>

	* main.c (main): Ignore CVS/Root file when doing an import.

Fri Jun  7 18:20:01 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* status.c (status_fileproc, tag_list_proc): Use cvs_output rather
	than writing to stdout directly.

Wed Jun  5 13:54:57 1996  Ian Lance Taylor  <ian@cygnus.com>

	* rcs.c (force_tag_match, tag, date): New static variables.
	(annotate_fileproc): Redo the loop to look for the version
	specified by tag/date/force_tag_match, and handle branches
	correctly.
	(annotate_usage): Mention -f, -r, and -D.
	(annotate): Handle -f, -r, and -D.

Tue Jun  4 13:38:17 1996  Ian Lance Taylor  <ian@cygnus.com>

	* rcs.c (annotate_fileproc): Skip unrelated branch deltas.

Fri Jun  7 13:04:01 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* main.c (main): Change INITIALIZE_SOCKET_SUBSYSTEM to
	SYSTEM_INITIALIZE and pass it pointers to argc and argv.  Rename
	CLEANUP_SOCKET_SUBSYSTEM to SYSTEM_CLEANUP.

Wed Jun 05 10:07:29 1996  Mike Ladwig  <mike@twinpeaks.prc.com>

	* import.c (add_rcs_file): make buf char[] not unsigned char[]

Wed Jun 05 10:07:29 1996  Mike Ladwig  <mike@twinpeaks.prc.com>
			  and Jim Kingdon  <kingdon@cyclic.com>

	* main.c (main): Add CLEANUP_SOCKET_SUBSYSTEM hook at end.  Revise
	comments regarding INITIALIZE_SOCKET_SUBSYSTEM.

Wed Jun 05 10:07:29 1996  Mike Ladwig  <mike@twinpeaks.prc.com>
			  and Jim Kingdon  <kingdon@cyclic.com>

	* main.c (main): Don't mess with signals if DONT_USE_SIGNALS is
	defined.

Thu Jun  6 15:32:41 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* modules.c (cat_module): Always format for 80 columns rather than
	trying to determine how wide the screen is.  The code we had for
	the latter didn't cover all cases, was a portability headache, and
	didn't work client/server.

Wed Jun 05 10:07:29 1996  Mike Ladwig  <mike@twinpeaks.prc.com>

	* error.c: Don't declare strerror if it is #defined.

Wed Jun 05 10:07:29 1996  Mike Ladwig  <mike@twinpeaks.prc.com>
			  and Jim Kingdon  <kingdon@cyclic.com>

	* cvs.h: If ENUMS_CAN_BE_TROUBLE, typedef Dtype to int not an enum.

Wed Jun 05 10:07:29 1996  Mike Ladwig  <mike@twinpeaks.prc.com>
			  and Jim Kingdon  <kingdon@cyclic.com>

	* update.c (update):  If DONT_USE_PATCH, don't request patches.
	Also call supported_request rather than reimplementing it.

Wed Jun 05 10:07:29 1996  Mike Ladwig  <mike@twinpeaks.prc.com>

	* client.c (read_line): Changed an occurence of '\n' to '\012'.

Wed Jun  5 17:18:46 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* add.c (add_directory): Don't create the directory if noexec.
	* sanity.sh (basica): New tests basica-1a10, basica-1a11 test for
	above fix.
	* sanity.sh (basicb): New tests basicb-2a10, basicb-2a11,
	basicb-3a1 test for analogous situation with files rather than
	directories.

Tue Jun  4 13:38:17 1996  Ian Lance Taylor  <ian@cygnus.com>

	* sanity.sh: When doing a remote check, use :server: in CVSROOT.

Wed Jun  5 13:32:40 1996  Larry Jones  <larry.jones@sdrc.com>
			  and Jim Kingdon  <kingdon@cyclic.com>

	* ignore.c: Set ign_hold to -1 when not holding instead of 0 so 
	that holding an empty list works correctly.
	* sanity.sh (ignore): New tests 190 & 191 for above fix.

Wed Jun 5 1996  Jim Kingdon  <kingdon@cyclic.com>

	Visual C++ lint:
	* client.c (update_entries): Copy the size to an unsigned variable
	before comparing it with unsigned variables.
	(handle_created, handle_update_existing): Prototype.

Tue Jun  4 10:02:44 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* client.c (responses): Add Created and Update-existing responses.
	* server.c (server_updated): If they are supported, use them
	instead of Updated.
	* client.c (struct update_entries_data): Add existp field.
	(handle_checked_in, handle_updated, handle_new_entry,
	handle_merged, handle_patched): Set it.
	(handle_update_existing, handle_created): New functions,
	for new responses.
	(update_entries): Based on existp, check for
	existence/nonexistence of file.
	(try_read_from_server): Expand comment.
	* server.c, server.h (server_updated): New argument vers.
	* checkin.c (Checkin), commit.c (commit_fileproc), update.c
	(update_fileproc, merge_file, join_file): Pass it.
	* cvs.h: Move include of server.h after Vers_TS declaration.
	* sanity.sh (conflicts2): New tests conflicts2-142d* test for
	above fix.

	* sanity.sh (ignore): Fix typo in comment.

	* tag.c (tag_check_valid): Add comment clarifying when val-tags
	entries are created.

Mon Jun  3 07:26:35 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* version.c: Increment version number to 1.8.4.

Mon Jun  3 02:20:30 1996  Noel Cragg  <noel@gargle.rain.org>

	* version.c: version 1.8.3.

Thu May 30 10:07:24 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* main.c (cmds): Fix typo ("bdif" -> "dif") which was accidentally
	introduced 24 May 96.

	* main.c (main_cleanup): Add comment stating default case will
	never be reached.

Wed May 29 21:43:43 1996  noel  <noel@BOAT_ANCHOR>

	* main.c (main_cleanup): check to see if SIGHUP, SIGINT, SIGQUIT,
 	SIGPIPE, and SIGTERM are defined before using them.  Also add a
 	default case to print out those errors numerically which are not
 	found.

Wed May 29 18:43:45 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* expand_path.c (expand_path): Document LINE == 0 and allocation
	of return value.
	* modules.c (do_module): Pass 0, not -1, to indicate line number
	not known.  Free value returned from expand_path.  Deal with NULL
	return from expand_path.

Wed May 29 15:56:47 1996  Greg A. Woods  <woods@most.weird.com>

	* modules.c (do_module): call expand_path() on the program name
	specfied by one of '-o', '-t', or '-e' in the modules file before
	passing it to run_setup().  This makes it possible to use $CVSROOT
	(or indeed ~user or any other user-specified variable) to specify
	pathnames for programs not installed in the normal execution path.

Sun May 26 21:57:09 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* client.c (start_server): Don't include %s in error message;
	there is no argument to go with it.  Do include "internal error"
	in error message since that might not be clear to the user otherwise.

Sun May 26 11:58:13 1996  Greg A. Woods  <woods@most.weird.com>

	* root.c (set_local_cvsroot): enforce a wee bit of portability
	(parse_cvsroot): same....
	(DEBUG main): same, plus style guidelines
	(DEBUG error): deleted -- not necessary here (use fprintf instead)

	* mkmodules.c (modules_contents): updated notes about what must be
	done if you change any of the options for a module.
	(loginfo_contents): fixed grammar, re-pargraphed, and added 'echo
	%s;' to the example.
	(editinfo_contents): minor grammar fix.

Sun May 26 17:51:18 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* vers_ts.c (Version_TS): Remove case where we get options from
	sdtp->options.  Whatever case that was intended to handle is
	probably lost in the mists of time, but sdtp->options isn't set
	anywhere, and I think that has been true for a long time.
	* cvs.h (struct stickydirtag): remove options field.
	* entries.c (freesdt): Don't free ->options.
	* sanity.sh (binfiles): New tests binfiles-13a* test for above fix.

	* tag.c (check_fileproc): Use fullname not file in error message.
	Say "locally modified" not "up-to-date"; the file need not match
	the head revision it only need match some revision.

Sun May 26 16:57:02 1996  Norbert Kiesel  <nk@col.sw-ley.de>

	* tag.c: added support for new option -c to make sure all tagged
	  files are up-to-date
	  (tag): check for option and set check_uptodate
	  (check_fileproc): check status of file if check_uptodate is set

Sat May 25 15:22:26 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* main.c (main): Revert change to look for a -H command option;
	command option parsing should be up to each subcommand and the -H
	global option works fine.

Mon May 23 1996  Ian Lance Taylor  <ian@cygnus.com>

	* client.c (process_prune_candidates): Set prune_candidates to
	NULL at the end of the function.

Mon May 23 1996  Ian Lance Taylor  <ian@cygnus.com>

	* checkout.c (checkout): In code to handle multiple arguments,
	pass preload_update_dir, not where, to Create_Admin.
	(checkout_proc): Pass preload_update_dir, not where, to
	Create_Admin.

Thu May 23 19:14:35 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* server.c (server_set_sticky): Assert that update_dir != NULL.
	* sanity.sh (basicb): New test; tests for Ian's fix to checkout.c
	above.

Thu May 23 1996  Ian Lance Taylor  <ian@cygnus.com>

	* patch.c (patch_fileproc): Don't ignore a file just because it is
	in the Attic directory.

Thu May 23 10:40:24 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* sanity.sh (death): New tests death-{72a,76a0,76a1} test for bug
	fixed by Ian's patch_fileproc change above.

	* sanity.sh (death): Remove "temporary hack" in test 89.

	* rcs.c (RCS_fast_checkout): If error closing file, and workfile
	is NULL, use sout in error message instead of workfile.

Thu May 23 1996  Ian Lance Taylor  <ian@cygnus.com>

	* rcs.c (RCS_fast_checkout): Do a fast checkout in the case where
	workfile is NULL and sout is a file name.

Wed May 22 19:06:23 1996  Mark Immel  <immel@centerline.com>

	* update.c (checkout_file): New arg resurrecting_out, to provide
	resurrecting flag to caller.
	(join_file): New arg resurrecting.  Register with "0" if we are
	the server and are resurrecting.
	(update_fileproc): Pass the flag from checkout_file to join_file.

Wed May 22 19:06:23 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* sanity.sh (death): Test for above fix, in test 89 and new test 89a.

Tue May 21 09:49:04 1996  Greg A. Woods  <woods@most.weird.com>

	* update.c (update_usage): oops -- fix my spelling typo.

Mon May 20 10:53:14 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* commit.c (find_fileproc): Call freevers_ts.

	* commit.c (find_*): Keep an ignlist, like update.c and client.c do.
	* commit.c (commit): Process the files from the ignlists, once we
	are connected to the server.
	* sanity.sh (ignore): New tests 189e and 189f test for new
	commit.c behavior (and client.c behavior, which is unchanged).
	* sanity.sh (conflicts): Remove dir1 and sdir in parts of the test
	where we aren't prepared for "? dir1" and similar output.

Mon May 20 13:23:36 1996  Greg A. Woods  <woods@most.weird.com>

	* main.c (cmd_usage): minor corrections to descriptions of status,
	rtag, tag, and rdiff.  Sort alphabetically by command name.

Mon May 20 10:36:07 1996  Ian Lance Taylor  <ian@cygnus.com>

	* client.c (call_in_directory): Move the call to Entries_Close
	before the call to chdir, since Entries_Close examines files in
	the current directory.

Fri May 17 12:13:09 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* client.c (start_tcp_server, start_server, start_rsh_server,
	read_line, filter_through_gzip, filter_through_gunzip,
	call_in_directory): Reindent as needed.

	* main.c (main): Add missing #endif.  Use indentation to indicate
	nesting.

Thu May 16 17:15:01 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* main.c (cmd_usage): Add "init" command.

Thu May 16 16:45:51 1996  Noel Cragg  <noel@gargle.rain.org>

	* client.c (start_tcp_server): Error message modified to tell the
 	user to use ":server:" instead of setting CVS_CLIENT_PORT to a
 	negative number.

	* main.c (main): Add #ifdefs for turning off buffering of
 	stdio/stderr, so we don't get it by default.

Thu May 16 01:29:47 1996  noel  <noel@BOAT_ANCHOR>

	* commit.c (commit_filesdoneproc): Print the repository and root
 	directories as part of the error message.

	* main.c (main): Don't buffer stdout or stderr.  It's inefficient,
 	but it then produces the right output for sanity.sh.

Thu May 16 09:44:47 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* fileattr.c (fileattr_set): In the case where we are about to
	call delproc, don't free ->data; delproc does that.
	* sanity.sh (devcom): New tests devcom-b* test for this fix.

	* sanity.sh (conflicts): Remove redundant clean up from previous
	tests at the beginning of the test.  Use dotest a few more places.
	(conflicts2): New test, tests for Ian's fix to Classify_File.

	* client.c (remove_entry_and_file): Add comment about
	existence_error's.

Sat May 16 1996  Ian Lance Taylor  <ian@cygnus.com>

	* update.c (update_dirleave_proc): Don't try to chdir .. and check
	for an empty directory if there is a slash in the directory name.

Thu May 16 09:02:59 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* sanity.sh (deep): New tests deep-4a* test for Ian's fix to
	update_dirleave_proc.

Sat May 16 1996  Ian Lance Taylor  <ian@cygnus.com>

	* main.c (main_cleanup): Report signal name before dying.

Wed May 15 23:47:59 1996  Noel Cragg  <noel@gargle.rain.org>

	* main.c (usg): revert usage strings for `-H' flag change.

Sat May 15 1996  Ian Lance Taylor  <ian@cygnus.com>

	* server.c (serve_static_directory): Return immediately if there
	is a pending error.
	(serve_sticky): Likewise.
	(serve_modified): Read the file data even if there is a pending
	error.

Wed May 15 14:26:32 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* main.c (main): If -d and CVS/Root both specified, after writing
	the value from -d into CVS/Root, use the value from -d, not the
	old value from CVS/Root.  Don't write CVS/Root with value from -d
	until we have verified that it works.
	* sanity.sh: Reenable test basica-9 and adjust for new behavior.

Tue May 14 1996  Jim Kingdon  <kingdon@cyclic.com>

	* logmsg.c (do_editor): If user aborts the commit, still remove the
	temporary file.

Tue May 14 11:45:41 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* filesubr.c, cvs.h (cvs_temp_name): New function.  Move L_tmpnam
	define from cvs.h to filesubr.c.
	* client.c, diff.c, import.c, login.c, logmsg.c, no_diff.c,
	patch.c, wrapper.c: Call cvs_temp_name not tmpnam.
	* login.c (login): Reindent function.

Tue May 14 10:56:56 1996  Ian Lance Taylor  <ian@cygnus.com>

	* rcs.c (RCS_fast_checkout): If workfile is NULL, don't call chmod.

Mon May 13 10:52:10 1996  Greg A. Woods  <woods@most.weird.com>

	* checkout.c (export_usage): note which options cause a sticky
	version to be set, and which option avoids this.
	* update.c (update_usage): likewise

Sat May 11 18:57:07 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* sanity.sh: Comment out test basica-9 until I get around to
	actually fixing it (the -d vs. CVS/Root change broke it).

Fri May 10 09:39:49 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* main.c (main): -d now overrides CVS/Root.

Thu May  9 19:45:24 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* main.c: Remove comment listing commands at beginning.  It was
	out of date and redundant with the help.

Thu May  9 09:33:55 1996  Greg A. Woods  <woods@most.weird.com>

	* main.c: add 'init' to opening comment listing commands

	* mkmodules.c (init): fix to recognize argc==-1 as hint to call
	usage() [should make "cvs init -H" work as expected]

Wed May  8 15:02:49 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* sanity.sh: Set EXPR in the case that the expr in the path is the
	one that we want.

Wed May  8 14:06:24 1996  Greg A. Woods  <woods@most.weird.com>

	* sanity.sh (test): - convert all '[' to test ala GCD

Wed May  8 13:46:56 1996  Greg A. Woods  <woods@most.weird.com>

	* sanity.sh (expr): - make a valiant attempt to find GNU expr
	- Patch from Larry Jones:
	sanity test deep-4 failed with "expr: arg list too long"
	sanity test 56 failed because the stderr and stdout output was not
	interleaved as expected.
	sanity test modules-155a4 failed with "ls: illegal option -- 1"

	* main.c (main): - Patch from Larry Jones for SysV setvbuf

Tue May  7 16:41:16 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* version.c: Increment version number to 1.8.2 to work around fact
	that CVS 1.8 (confusingly) calls itself 1.8.1 not 1.8.

Tue May  7 10:44:20 MET DST 1996  Norbert Kiesel  <nk@col.sw-ley.de>

	* rcs.c (rcsvers_delproc): fix memory leak by freeing author
	  field.

Mon May  6 10:40:05 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* sanity.sh (conflicts): New test conflicts-126.5 tests for bug
	which Ian fixed May 5 in update.c

Mon May  6 06:00:10 1996  Benjamin J. Lee  <benjamin@cyclic.com>

        * Version 1.8.1

Sun May  5 21:39:02 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* vers_ts.c (Version_TS): If sdtp is NULL, go ahead and check
	RCS_getexpand for options.  Fixes binaries and non-unix clients.
	* sanity.sh: Fix binfiles-5.5 to test for the correct behavior
	rather than the buggy behavior which existed when the binfiles-5.5
	test was written.
	(binfiles-14c,binfiles-14f): Likewise.

Sun May  5 17:38:21 1996  Benjamin J. Lee  <benjamin@cyclic.com>

        Integrated changes submitted by Ian Taylor <ian@cygnus.com>

        * update.c (update_dirent_proc): cvs co -p doesn't print
        anything when run from an empty directory.

        * import.c (import_descend_dir): Check for a file in the
        repository which will be checked out to the same name as the
        directory.

Sat May  4 12:33:02 1996  Ian Lance Taylor  <ian@cygnus.com>

	Extract the head revision directly from the RCS file when
	possible, rather than execing co.
	* rcs.c (RCS_reparsercsfile): Set delta_pos field.
	(getrcskey): Add lenp parameter.  Change all callers.
	(RCS_fast_checkout): New function.
	(annotate_fileproc): If PARTIAL is not set, just fseek to
	delta_pos.
	* rcs.h (struct rcsnode): Add delta_pos field.
	(RCS_fast_checkout): Declare.
	* diff.c (diff_file_nodiff): Call RCS_fast_checkout rather than
	RCS_checkout.
	* import.c (update_rcs_file): Likewise.
	* no_diff.c (No_Difference): Likewise.
	* patch.c (patch_fileproc): Likewise.
	* update.c (checkout_file): Likewise.
	(patch_file): Likewise.
	(join_file): Likewise.

Sat May  4 12:33:02 1996  Ian Lance Taylor  <ian@cygnus.com>

	* classify.c (Classify_File): Don't report a conflict for a
	pending remove if somebody else has already removed the file.

Thu May  2 13:34:37 1996  Benjamin J. Lee  <benjamin@cyclic.com>

	* Version 1.7.88

Thu May  2 01:40:55 1996  Benjamin J. Lee  <benjamin@cyclic.com>

	* server.c (HAVE_INITGROUPS): Use initgroups() only if
        located by configure, in the event a system has crypt(), but
	no initgroups()

Wed May 01 21:08:21 1996  noel  <noel@BOAT_ANCHOR>

	* client.c (filter_through_gunzip): use "gzip -d" instead of
 	"gunzip," since there's no good reason (on NT at least) to have an
 	extra copy of gzip.exe copied to gunzip.exe (Arrrrgh!  No symbolic
 	links!).

	* mkmodules.c (init): check to see that we have the correct number
 	of arguments or print out the usage message (used to be argc > 1,
 	should be argc != 1, because help forces argc == -1 as a special
 	case).

Wed May  1 18:05:02 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* sanity.sh (basica): When testing rejection of reserved tag name,
	use BASE instead of RESERVED.

Wed May  1 15:15:11 1996  Tom Jarmolowski  <tjj@booklink.com>

	* rcs.c (linevector_delete): Only copy up to vec->nlines - nlines,
	not to vec->nlines.

Wed May  1 15:43:21 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* rcscmds.c (RCS_settag): Instead of reserving all tag names
	containing only uppercase letters, reserve only BASE and HEAD.
	* sanity.sh (mflag): Revert 26 Mar change; use all-uppercase tag
	name again.

Wed May  1 15:15:11 1996  Tom Jarmolowski  <tjj@booklink.com>

	* rcs.c (linevector_add): Move increment of i out of larger
	statement, to avoid assumptions about evaluation order.

Tue Apr 30 15:46:03 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* Version 1.7.87.

	* server.c (check_password): Don't use ANSI string concatenation.
	Reindent function.

Mon Apr 29 10:48:38 1996  Noel Cragg  <noel@gargle>

	* root.c (parse_cvsroot): removed "rsh" as an alias to "server" in
 	the method section.

	* main.c (main): new variable help so we can support the `cvs -H
 	cmd' convention.  Reverts change of 26 Apr 96 which removed this
 	feature.

Sun Apr 28 14:57:38 1996  Noel Cragg  <noel@gargle>

        * main.c (main): update error message if parse_cvsroot fails.
	* server.c (serve_root): same.
	(serve_init): same.
	
	* client.c (start_tcp_server): get rid of the "fall through"
 	stuff, now that we have access methods.
	(start_server): switch off the access method to choose routine
 	that starts the server.
	(start_tcp_server): tofd wasn't getting set to -1 early enough,
 	because a call to error for bind or gethostbyname might fail and
 	the subsequent error check to see if the connection had been made
 	would fail.

	* root.c: new variable method_names for error reporting purposes.

Sun Apr 28 17:22:15 1996  Noel Cragg  <noel@occs.cs.oberlin.edu>

	* server.c: moved kerberos #includes from main.c for the
        kserver_authenticate_connection routine.

Fri Apr 26 07:59:44 1996  Noel Cragg  <noel@gargle>

	* server.c (serve_init): use the new return value from
 	parse_cvsroot.
	(serve_root): same.
	* main.c (main): same.

	* root.c (parse_cvsroot): fix indentation, add a return value
 	which tells whether the command succeeded or failed.

	* main.c (main): move the setting of the UMASK environment
 	variable inside the stuff that gets done if the user is NOT asking
 	for help, so we don't signal any errors prematurely (don't want to
 	give an error because we can't parse an environment variable
 	correctly if the user asks for help).  Similar mods for the code
 	that tries to get the working directory.

	Also make CVSADM_Root a local variable instead of a global, since
 	its scope is only about 20 lines here!

	* server.c (kserver_authenticate_connection): moved code from
 	main.c to clean up MAIN.  Makes sense, since we already have a
 	pserver_authenticate_connection.
	(pserver_authenticate_connection): rename from
 	authenticate_connection.

	* main.c (main): reorganized the routine to eliminate variables
 	help, help_commands, and version_flag.  Now the routine is much
 	clearer, since we don't have to be checking to see if these
 	variables are set.  One behavior that was a bug/feature which is
 	now gone is an invocation like "cvs -H rtag" -- previously this
 	would give usage for rtag, but now gives usage for cvs itself.
  	The first behavior didn't make sense, especially since we say in
 	the docs that command-line flags are position-specific.  *Reverted
 	Above*

Thu Apr 25 20:05:10 1996  Noel Cragg  <noel@gargle>

        * main.c (main): make sure we have a valid command name before we
 	do anything else (moved the thing that looks for a command in CMDS
 	to right after the GETOPT loop).  Added `kserver' and `pserver' to
 	the table so they will be recognized; set their functions to
 	SERVER so that help will be given when asked for.
	
	* expand_path.c (expand_variable): return CVSroot_original rather
 	than CVSroot_directory.

	* main.c (main): save CVSroot in the env rather than
 	CVSroot_original, since we might not have called PARSE_CVSROOT
 	(this can happen if we use the -H option to a command).

	* root.c (parse_cvsroot): the parsing method was bogus for
 	guessing when we had hostnames vs. directories specified.  Any
 	ambiguity should be removed by having the user specify the access
 	method.  If the access method isn't specified, choose
 	server_method if the string contains a colon or local_method
 	otherwise.

	* Changed CVSroot_remote back to client_active since the code
 	reads better.
	
Wed Apr 24 17:27:53 1996  Norbert Kiesel  <nk@col.sw-ley.de>

	* vers_ts.c (Version_TS): xmalloc enough space (1 more
	  byte). Thanks to purify!

Mon Apr 22 00:38:08 1996  Noel Cragg  <noel@gargle>

	* create_adm.c (Create_Admin): pass CVSroot_original instead of
 	CVSroot_directory (oops!).
	* update.c (update_filesdone_proc): same.

	* server.c (serve_root): modify to use parse_cvsroot rather than
 	goofing around with other variables.  Will need to fix
 	parse_cvsroot to have a return value so we can return an error and
 	quit gracefully if in server mode.
	(serve_init): same.

	* main.c: modify command table to remove client_* routines, since
 	they no longer exist.
	(main): don't try to switch off non-existent field in command
 	table! ;-)

        * client.h (client_*): removed prototypes for now non-existent
 	functions.

	* client.c: remove proto for get_cvs_password, since it is now in
 	cvs.h.  Modify routines to use new globals that describe CVSROOT
 	rather than client_active, server_host, server_user, and
 	server_cvsroot.
	(parse_cvsroot): removed function, since a more generic version
 	now lives in root.c.
	(connect_to_pserver): remove call to parse_cvsroot, since main.c
 	has already done it for us.
	(client_*): removed all of these routines, since they only call
 	parse_cvsroot and then their respective operation functions.
  	Since main.c has already called parse_cvsroot, we shouldn't bother
 	with the extra function call, since client-server diffs are
 	already handled in the core routines themselves.

	* main.c: remove CVSroot as a global variable.  Remove
 	use_authenticating_server variable since we have a new
 	`CVSroot_method' variable instead.
	(main): add `CVSroot' as a local variable.  Call parse_cvsroot
 	after we're sure we have the right setting for `CVSroot.'

	* login.c (login): update to use new global variables.  Instead of
 	old behavior which let the user type in user@host when prompted,
 	it makes them do it in CVSROOT proper.  The routine still lets the
 	user type the password, however.
	(get_cvs_password): make sure that CVSROOT is fully qualified
 	before trying to find the entry in the .cvspass file.
	* cvs.h: add prototype for get_cvs_password.

	* add.c: use new globals that describe CVSROOT.
	* admin.c: same.
	* checkout.c: same.
	* commit.c: same.
	* create_adm.c: same.
	* diff.c: same.
	* edit.c: same.
	* expand_path.c: same.
	* history.c: same.
	* ignore.c: same.
	* import.c: same.
	* log.c: same.
	* mkmodules.c: same.
	* modules.c: same.
	* parseinfo.c: same.
	* patch.c: same.
	* rcs.c: same.
	* recurse.c: same.
	* release.c: same.
	* remove.c: same.
	* repos.c: same.
	* rtag.c: same.
	* status.c: same.
	* tag.c: same.
	* update.c: same.
	* watch.c: same.
	* wrapper.c: same.
	
	* root.c (Name_Root): remove error message that reports missing
 	CVSROOT, since new code in main.c will catch it and also print out
 	an error.
	(parse_cvsroot): new function -- takes a CVSROOT string and breaks
 	it up into its component parts -- method, hostname, username, and
 	repository directory.  Sets new global variables that describe the
 	repository location more precisely: CVSroot_original,
 	CVSroot_remote, CVSroot_method, CVSroot_username,
 	CVSroot_hostname, CVSroot_directory for use by all other
 	functions.  Checks for obvious errors in format of string.
	(main): a short routine to test parse_cvsroot from the command
 	line.
	* cvs.h: add prototype for parse_cvsroot and extern definitions
 	for new globals.

	* cvs.h: removed CVSroot variable, since we don't want other
 	routines using the raw CVSROOT (also helped to find all of the
 	refs to the variable!).

Fri Apr 19 11:22:35 1996  Benjamin J. Lee  <benjamin@cyclic.com>

        * Version 1.7.86

Thu Apr 18 1996  Jim Kingdon  <kingdon@cyclic.com>

	* client.c (try_read_from_server): Compare return value from fwrite
	with a size_t not an int (Visual C++ lint).

Wed Apr 17 11:56:32 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* client.c (try_read_from_server): New function.
	(read_from_server): Use it.
	(read_counted_file): New function.
	* client.c, server.c: Add Template response.
	* cvs.h (CVSADM_TEMPLATE): Added.
	* logmsg.c (do_editor): If repository is NULL, use CVSADM_TEMPLATE
	file in place of rcsinfo.
	* server.c, server.h (server_template): New function.
	* create_adm.c (Create_Admin): Call it.

Tue Apr 16 13:56:06 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* repos.c (Name_Repository): Fix comments.
	* create_adm.c (Create_Admin): Fix indentation.

Wed Apr 10 16:46:54 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* options.h.in: Include relevant information here rather than
	citing (former) FAQ.

	* ChangeLog-9395: Fix typo in introductory paragraph.

Wed Apr 10 14:55:10 1996  code by Mike Spengler  mks@msc.edu
	comments by Jim Kingdon  <kingdon@harvey.cyclic.com>

	* filesubr.c (unlink_file_dir,deep_remove_dir): Don't call unlink
	on something which might be a directory; check using isdir instead.

Wed Apr 10 14:55:10 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* checkout.c (build_dirs_and_chdir): Pass path, not cp, to
	Create_Admin.  The former is the correct update dir.
	* sanity.sh (modules): New tests modules-155* test, for above fix.

Mon Apr  8 13:53:27 1996  Samuel Tardieu  <sam@inf.enst.fr>

	* rcs.c (annotate_fileproc): If the file is not under CVS control,
	return instead of dumping a core. Don't bug on files with an empty
	first revision.

Fri Mar 29 16:08:28 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* rcs.c (annotate_fileproc): If last line of add-chunk is not
	newline terminated, end the loop when we find that out.

Fri Mar 29 16:59:34 1996  Norbert Kiesel  <nk@col.sw-ley.de>

	* rcs.c (annotate_fileproc): allow last line of add-chunk not to
	  be newline terminated

Thu Mar 28 10:56:36 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	Add more diff tests:
	* sanity.sh (basic2): Use dotest for test 61.
	(basica): Add test basica-6.2.
	(branches): Add tests branches-14.4 and branches-14.5.
	(basic1): Remove tests 19, 20, 25, and 26.  The only thing this
	might miss out on is diff's interaction with added and removed
	files, but those tests didn't test that very well anyway.

	* rcs.c (RCS_getrevtime): Add comment regarding years after 1999.

	* rcs.c: Add "cvs annotate" command and related code.
	(getrcskey): Move special handling of RCSDESC from here to
	callers.  Handle those keys (desc, log, text) which do not
	end in a semicolon.
	* rcs.h (RCSVers): Add author field.
	* rcs.c (RCS_reparsercsfile): Set it.
	* cvs.h (annotate), main.c (cmd_usage, cmds), client.h client.c
	(client_annotate), server.c (serve_annotate, requests): Usual
	machinery to add a new command.
	* sanity.sh (basica): Test cvs annotate.

	* sanity.sh (branches): More tests, of things like adding files on
	the trunk after a branch has been made.

Tue Mar 26 09:48:49 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* expand_path.c: Don't declare free and xmalloc; cvs.h already
	takes care of that.

	* sanity.sh (mflag): Don't use tag name reserved to CVS.

	NT local changes plus miscellaneous things noticed in the process:
	* import.c (add_rcs_file): Use binary mode to write RCS file.  Use
	\012 where linefeed is intended.  Copy data a small block at a
	time, until we hit EOF, rather than trying to read the whole file
	into memory at once.
	* client.c (send_modified): Add comments regarding st_size.
	* commit.c (commit): Add comments regarding binary mode and read().
	* logmsg.c (do_editor): Add comments regarding st_size.
	* server.c (server_updated): Use binary mode to read file we are
	sending.

	* rcscmds.c (RCS_settag): Complain if user tries to add a tag name
	reserved to CVS.
	* sanity.sh (basica): Test for this behavior.

	* sanity.sh (binfiles): New tests test ability to change keyword
	expansion.

Mon Mar 25 1996  Jim Kingdon  <kingdon@cyclic.com>

	* cvs.h, filesubr.c (expand_wild): New function.
	* recurse.c (start_recursion): Call expand_wild at beginning and
	free its results at the end.
	* cvs.h, subr.c (xrealloc): Make argument and return value void *.
	* client.h, client.c (send_file_names): Add flags argument.   If
	SEND_EXPAND_WILD flag is passed, call expand_wild at beginning and
	free its results at the end.
	* admin.c, add.c, log.c, tag.c, status.c, edit.c, watch.c,
	update.c, commit.c, remove.c, client.c, diff.c: Update callers.

Fri Mar 22 10:09:55 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* error.c (error, fperror): Exit with status EXIT_FAILURE rather
	than STATUS.  We had been neglecting to check for 256, and the
	value of providing a count of errors is probably minimal anyway.
	* add.c, modules.c, mkmodules.c, tag.c, server.c, main.c,
	import.c, client.c, scramble.c, recurse.c: Exit with status
	EXIT_FAILURE rather than 1.  On VMS, 1 is success, not failure.
	* main.c (main): Return EXIT_FAILURE or 0.  The value of providing
	a count of errors is minimal.

	* client.c (init_sockaddr): Exit with status 1 rather than
	EXIT_FAILURE.  The latter apparently doesn't exist on SunOS4.
	Reindent function.

Mon Mar 18 14:28:00 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* cvs.h, ignore.c: New variable ign_case.
	* ignore.c (ign_name): If it is set, match in a case-insensitive
	fashion.
	* server.c (serve_case): New function.
	(requests): Add Case request.
	* client.c (start_server): If FILENAMES_CASE_INSENSITIVE is
	defined, send Case request.

Sat Mar 16 08:20:01 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	For reference, this change takes cvs's text segment from 315392
	bytes to 311296 bytes (one 4096 byte page).
	* cvs.h (struct file_info): Add fullname field.
	* recurse.c (do_file_proc): Set it.
	* commit.c (find_fileproc), client.c (send_fileproc), commit.c
	(check_fileproc), diff.c (diff_fileproc), edit.c
	(unedit_fileproc), patch.c (patch_fileproc), remove.c
	(remove_fileproc), rtag.c (rtag_fileproc), tag.c (tag_fileproc),
	update.c (update_fileproc), watch.c (watchers_fileproc): Use it
	instead of computing it each time.
	* diff.c (diff_fileproc), remove.c (remove_fileproc): Use fullname
	where we had been (bogusly) omitting the directory from user
	messages.
	* edit.c (unedit_fileproc, edit_fileproc): If we cannot close
	CVSADM_NOTIFY, mention CVSADM_NOTIFY rather than finfo->file in
	error message.
	* rtag.c (rtag_fileproc), tag.c (tag_fileproc): Reindent.

Fri Mar 15 15:12:11 1996  Norbert Kiesel  <nk@col.sw-ley.de>

	* server.h: fix prototype of server_pause_check (was
	  server_check_pause)

Thu Mar 14 1996  Jim Kingdon  <kingdon@cyclic.com>

	* vers_ts.c (Version_TS), entries.c (Scratch_Entry, AddEntryNode):
	Change findnode to findnode_fn.

	* main.c: Depending on HAVE_WINSOCK_H, include winsock.h or
	declare gethostname.
	* cvs.h: Don't declare it here.

Thu Mar 14 07:06:59 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* commit.c (find_fileproc): If vn_user is NULL and ts_user is not,
	print an error rather than silently succeeding.
	* sanity.sh (basica-notadded): New test, for above fix.
	(dotest_internal): New function.
	(dotest,dotest_fail): Call it instead of duplicating code between
	these two functions.

	* sanity.sh: Skip tests binfiles-9 through binfiles-13 for remote.

	* options.h.in: Adjust comment to reflect kfogel change.

Thu Mar 14 01:38:30 1996  Karl Fogel  <kfogel@floss.red-bean.com>

        * options.h.in (AUTH_CLIENT_SUPPORT): turn on by default.

Wed Mar 13 09:25:56 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* vers_ts.c (Version_TS): Don't try to override options from rcs
	file if there isn't an rcs file (e.g. called from send_fileproc).
	This fixes a bug detected by test 59 in "make remotecheck".

	* rcs.c (RCS_reparsercsfile, RCS_getexpand): Assert that argument
	is not NULL.

	Fix a gcc -Wall warning:
	* rcs.c, rcs.h (RCS_getexpand): New function.
	* vers_ts.c (Version_TS): Call it.
	* rcs.c (RCS_reparsercsfile): Make static.

	Add a "cvs init" command.  This is needed because cvsinit.sh
	invoked mkmodules which doesn't exist any more.
	* mkmodules.c: Break filelist out of mkmodules function, rename
	struct _checkout_file to struct admin_file (for namespace
	correctness), and add contents field.
	(init,mkdir_if_needed): New functions.
	* cvs.h (init): Declare.
	* main.c (cmds): Add init.
	(main): If command is init, don't require cvsroot to exist.
	* client.c, client.h (client_init, send_init_command): New functions.
	* client.c (start_server): Don't send Root request if command is init.
	* server.c (serve_init): New function.
	(requests): Add "init".

Wed Mar 13 09:51:03 MET 1996  Norbert Kiesel  <nk@col.sw-ley.de>

	* vers_ts.c (Version_TS): set options to default option if the
	  file if no -k option but -A was given.  This avoids the (wrong)
	  update message for binary files which are up-to-date when
	  running 'cvs -A'.

	* update.c (checkout_file): remove test of -k option stored in the
	  file itself because it was moved to vers_ts.c

	* sanity.sh: added tests for the above fix.

Tue Mar 12 13:47:09 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* hash.c (findnode): Adjust comment regarding errors.

	* hash.c (findnode, findnode_fn): Assert that key != NULL.  This
	way the check still happens even if the function is later
	rewritten to not start out by calling hashp.

Mon Mar 11 10:21:05 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* sanity.sh: If expr accepts multi-line patterns but is too
	liberal in matching them, print a warning but keep going.

	* sanity.sh: Add QUESTION variable, analogous to PLUS.  Use it
	instead of \? to match a question mark.

	* cvs.h (CVSMODULE_OPTS, CVSMODULE_SPEC): Move from here...
	* modules.c: ...to here.  They are only used here and the code to
	handle the syntax of modules files should not be scattered all over.
	* modules.c (CVSMODULE_OPTS): Add "+" as first character.
	* sanity.sh (modules): New tests 148a0 and 148a1 test for
	above-fixed bug.

Mon Mar 11 13:11:04 1996  Samuel Tardieu  <sam@inf.enst.fr>

	* modules.c (cat_module): set optind to 0 to force getopt() to
	reinitialize its internal nextchar

Mon Mar 11 00:09:14 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* hash.c (findnode, findnode_fn): Revert changes of 7-8 Mar 1996.
	The correct style is to assert() that key != NULL (see HACKING),
	which is already done in the hashp function.
	* fileattr.c (fileattr_delproc): Likewise, assert() that
	node->data != NULL rather than trying to deal with it being NULL.

Fri Mar  8 01:31:04 1996  Greg A. Woods  <woods@most.weird.com>

	* hash.c (findnode_fn): one more place to avoid calling hashp()
	with a NULL key

Thu Mar  7 17:30:01 1996  Greg A. Woods  <woods@most.weird.com>

	* hash.c (findnode): also return NULL if key is not set
	[[ reported by Chris_Eich@optilink.optilink.dsccc.com, and
	supposedly in a PR that should be marked "fixed"..... ]]

	* fileattr.c (fileattr_set): set node->data to NULL after freeing
	it to prevent subsequent accesses
	(fileattr_delproc): don't free node->data if it's NULL, and set it
	to NULL after freeing
	[[ reported by Chris_Eich@optilink.optilink.dsccc.com, and
	supposedly in a PR that should be marked "fixed"..... ]]

Fri Mar  1 14:56:08 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* sanity.sh (basica): New test basica-4a tests for bug fixed by
	sam@inf.enst.fr on 1 Mar 96.

Fri Mar  1 18:10:49 1996  Samuel Tardieu  <sam@inf.enst.fr>

	* tag.c (check_fileproc): Check for file existence before trying
	to tag it.

Fri Mar  1 07:51:29 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* client.c (update_entries): If command is export, set options to
	NULL.

Thu Feb 29 16:54:14 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* lock.c (write_lock, Reader_Lock): Remove
	BOGUS_UNLESS_PROVEN_OTHERWISE code.  It was pretty bogus, and has
	been ifdeffed out for a long time.
	* cvs.h (CVSTFL): Removed; no longer used.

	* cvsrc.c, cvs.h (read_cvsrc): Pass in command name rather than
	using global variable command_name.
	* main.c (command_name): Initialize to "", not "cvs" so that error
	messages don't say "cvs cvs".  Update calls to read_cvsrc to pass
	in command_name or "cvs" as appropriate.
	* sanity.sh (basica): New test basica-9 tests for above-fixed bug.

	* lock.c: Rename unlock to lock_simple_remove to avoid conflict
	with builtin function on QNX.

Thu Feb 29 17:02:22 1996  Samuel Tardieu  <sam@inf.enst.fr>

	* fileattr.c (fileattr_get): Removed NULL pointer dereference
	which occurred in the absence of default attribute.

Thu Feb 29 07:36:57 1996  J.T. Conklin  <jtc@rtl.cygnus.com>

	* rcs.c (RCS_isbranch, RCS_whatbranch): Remove no longer used file
 	argument, swap order of remaining two arguments to be like other
	RCS_* functions.
	(RCS_nodeisbranch): swap order of arguments to be like other RCS_*
	functions.
	* rcs.h (RCS_isbranch, RCS_whatbranch, RCS_nodeisbranch): Update
	prototypes for above changes.
	* commit.c, rtag.c, status.c, tag.c: Update for above calling
 	convention changes.

Thu Feb 29 08:39:03 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* client.c (start_server): Revert changes which claimed to fall
	back to a different way of connecting.  Add comments explaining
	why.  (I don't think the changes did what they claimed, anyway).
	Use indentation rather than comments to line up #if, #else, and
	#endif.

	* patch.c (patch, patch_fileproc): Revert change to add optional
	arguments to -c and -u.  Optional arguments are evil and in
	violation of the POSIX argument syntax guidelines.  The correct
	way to do this is -C and -U.  Also change DIFF back to "diff" in
	output (see comments).

	gcc -Wall lint:
	* client.c (copy_a_file): Declare p inside the #ifdef in which is
	it used.
	* commit.c (remove_file): Remove unused variable p.
	* commit.c (checkaddfile): Remove unused variables p.
	* rcs.c (RCS_isbranch): Remove unused variable p.
	* rcs.c: Remove unused declarations and definitions of
	parse_rcs_proc, rcsnode_delproc, rcslist, and repository.
	* rtag.c (rtag_fileproc): Remove unused variable p.
	* patch.c (patch_fileproc): Remove unused variable p.
	* tag.c (val_fileproc): Remove unused variable node.
	* client.c, import.c, lock.c, server.c: Cast pid_t to long before
	passing it to %ld.

	* cvs.h: Don't prototype gethostname; merely declare it (on linux,
	second argument is size_t not int).

Thu Feb 29 10:29:25 MET 1996  Norbert Kiesel (nk)  <nk@col.sw-ley.de>

	* sanity.sh: added "cat > /dev/null" to loginfo entry to avoid the
	  SIGPIPE signal

Thu Feb 29 10:28:25 MET 1996  Norbert Kiesel (nk)  <nk@col.sw-ley.de>

	* patch.c: added new variable diff_opt
	(patch): allow optional parameter to -c and -u option, send it to
	server
	(patch_fileproc): cleaned up the code which prints the current
	filename.  For "-s" option, print the pathname relative to CVSROOT
	instead of just the filename.

	* filesubr.c (xchmod): added cast to shut up gcc

	* cvs.h: added prototype for gethostname

Thu Feb 29 10:27:25 MET 1996  Norbert Kiesel (nk)  <nk@col.sw-ley.de>

	* lock.c (write_lock), (Reader_Lock), import.c (update_rcs_file),
	  client.c (update_entries), (send_modified), server.c (server),
	  (receive_file), (server_updated): use %ld for printing pid_t
	  variables

Thu Feb 29 02:22:12 1996  Benjamin J. Lee  <benjamin@cyclic.com>

	* run.c (run_exec): Added VMS return status support.

Thu Feb 29 01:07:43 1996  Benjamin J. Lee  <benjamin@cyclic.com>

	* client.c (send_to_server): wrtn wasn't being declared under
	VMS for some reason.

Wed Feb 28 23:27:04 1996  Benjamin J. Lee  <benjamin@cyclic.com>

	* client.c: Changed #ifdef VMS && NO_SOCKET_TO_FD to
	#if defined(VMS) && defined(NO_SOCKET_TO_FD)

Wed Feb 28 22:28:43 1996  Benjamin J. Lee  <benjamin@cyclic.com>

	* build_src.com: Added DCL command procedure to build
	and link CVS client for VMS.

Wed Feb 28 22:07:20 1996  Benjamin J. Lee  <benjamin@cyclic.com>

	* client.c: VMS CVS client specific changes.

	Added USE_DIRECT_TCP to allow CVS_PORT to be used to specify
	a TCP connection port (no Kerberos).  Changed
	start_kerberos_server() to start_tcp_server().

	In copy_a_file(): transform a backup file to have a
        VMS-friendly name. 

	Added HAVE_CONFIG_H to include "config.h".  

	start_server() will starts the first successful of any
	mutually exclusive methods of starting the CVS server
	which might be enabled.

	Initialized use_socket_style and server_sock for VMS in
	start_server().

Wed Feb 28 21:49:48 1996  Benjamin J. Lee  <benjamin@cyclic.com>

	* find_names.c, recurse.c, cvs.h: Changed Find_Dirs() to
	Find_Directories().
	* cvs.h: Added VMS filenames enabled through USE_VMS_FILENAMES
	VMS POSIX will require to use the regular CVS filenames
	while VMS is #define'd.

Wed Feb 28 21:26:22 1996  Benjamin J. Lee  <benjamin@cyclic.com>

	* ignore.c: Added the patterns *.olb *.exe _$* *$ to default
	ignore list for VMS.

Wed Feb 28 13:32:28 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* logmsg.c (do_editor): Fix indentation.

Wed Feb 28 12:56:49 1996  Benjamin J. Lee  <benjamin@cyclic.com>

	* logmsg.c (do_editor): If no editor is defined, exit and print
	a message.

Wed Feb 28 10:40:25 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* vers_ts.c (time_stamp, time_stamp_server): Reindent and revise
	comments.

Tue Feb 27 23:57:55 1996  Benjamin J. Lee  <benjamin@cyclic.com>

	* vers_ts.c: gmtime() returns NULL on some systems (VMS)
	revert to local time via ctime() if GMT is not avaiable.

Tue Feb 27 13:07:45 1996  J.T. Conklin  <jtc@rtl.cygnus.com>

	The changes listed below cause cvs to parse each rcs file (and
 	free the associated rcsnode after the file has been processed)
 	sequentially.  cvs used to parse all files in a directory, an
	approach that does not scale to huge repositories with lots 
	of revisions/branches/tags/etc.  
	
	* cvs.h (struct file_info): Removed srcfiles field.  Added rcs
 	(node) field.
	* recurse.c (do_recursion): Removed code that pre-parsed all
 	rcs files in the directory.
	(do_file_proc): Parse current rcs file.
	* rcs.c (RCS_parsefiles, parse_rcs_proc, RCS_addnode): Removed.
	(RCS_isbranch, RCS_whatbranch): Changed srcfiles argument to
	rcs (node).
	* rcs.h (RCS_parsefiles, RCS_addnode): Removed prototypes.
	(RCS_isbranch, RCS_whatbranch): Updated prototypes.
	* add.c, admin.c, checkin.c, checkout.c, classify.c, client.c, 
	commit.c, diff.c, history.c, import.c, log.c, patch.c, remove.c, 
	rtag.c, status.c, tag.c, update.c, vers_ts: Updated for above
	calling convention / data structure changes.

Mon Feb 26 16:07:56 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* Version 1.7.3.

	* Version 1.7.2.

Mon Feb 26 1996  Jim Kingdon  <kingdon@cyclic.com>

	* recurse.c (start_recursion): Use last_component rather than
	checking for '/' directly.
	(do_dir_proc): Likewise.

	Visual C++ lint:
	* client.c (send_to_server): Change wrtn to size_t.
	(connect_to_pserver): Put tofd and fromfd declarations inside
	#ifndef NO_SOCKET_TO_FD.
	* scramble.c (shifts): Change from array of char to array of
	unsigned char.

Mon Feb 26 13:31:25 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* server.c (check_repository_password): Remove unused variables
	linelen, ch.

	* client.c (send_file_names): Translate ISDIRSEP characters to '/'.

Sat Feb 24 21:25:46 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* checkout.c (safe_location): Re-indent one line.

Sat Feb 24 10:50:42 1996  Karl Fogel  <kfogel@floss.red-bean.com>

        * checkout.c (safe_location): put assignment to hardpath[x] in an
        `else'-clause, so we don't do it when x == -1.

Sat Feb 24 01:40:28 1996  Marcus Daniels  <marcus@sayre.sysc.pdx.edu>
                          via Karl Fogel  <kfogel@floss.red-bean.com>
 
 	* server.c (check_repository_password): Return by reference an
  	  optional username, the `host_user', from the passwd file.  The
  	  host_user will be the user-id under which the cvs repository is
  	  run.
 	  (check_repository_password): Use `read_line' instead of fgets to
  	  allow for passwords larger than 32 characters, as well as the
  	  optional host user argument.
 	  (check_password): Modify to use host_user.
 	  (authenticate_connection): Modify to use host_user.

Sat Feb 24 01:05:21 1996  Karl Fogel  <kfogel@floss.red-bean.com>

        * scramble.c (descramble): just shift descrambled string to get
        rid of tag char, instead of allocating a whole new copy.
        (scramble): cast return value of xmalloc to avoid unsightly
        compiler warnings.

        * options.h.in (RCSBIN_DFLT): don't refer to AUTH_SERVER_SUPPORT
        in comment anymore, now that it's not defined in this file.

Fri Feb 23 1996  Jim Kingdon  <kingdon@cyclic.com>

	* client.c: Ifdef HAVE_WINSOCK_H, include winsock.h
	instead of sys/socket.h and friends.
	* login.c: Don't include sys/socket.h and friends.
	* login.c (login): Only fclose fp in the case where it was
	successfully fopen'd.
	* login.c: Declare getpass.
	* filesubr.c, cvs.h (get_homedir): New function.
	* cvsrc.c, expand_path.c, history.c, login.c: Call it instead
	of getenv ("HOME").

Fri Feb 23 09:23:20 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* client.c (connect_to_pserver): Remove unused variable host.
	* login.c: Include getline.h.
	(login): Remove unused variables i and username.
	(get_cvs_password): Move free of linebuf to where it actually will
	be called.  Add a "return NULL" at the end of the function to shut
	up gcc -Wall.

	* options.h.in: Remove AUTH_SERVER_SUPPORT.
	* client.h (authenticate_connection): Declare.
	* scramble.c (scramble): Cast char to unsigned char before using
	it to look up in table (char might be signed).
	* server.c [AUTH_SERVER_SUPPORT]: Include grp.h
	(authenticate_connection): Remove unused variables len and
	server_user.

	* sanity.sh (basica): Add comments regarding creating a top-level
	directory.
	(basic1): Don't try to remove first-dir and
	${CVSROOT_DIRNAME}/first-dir at start of test; tests are now
	responsible for cleaning up at the end.
	(PLUS,DOTSTAR,ENDANCHOR): Add comments regarding fixed GNU expr.

Thu Feb 22 22:34:11 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* cvs.h: Remove alloca cruft.

Wed Feb 21 07:30:16 1996  J.T. Conklin  <jtc@rtl.cygnus.com>

	* modules.c (do_module): call free_cwd before exiting.

	* recurse.c: Removed entries global variable.
	(do_recursion): Declare entries.  Moved call to Entries_Close so
 	entries list is closed on all code paths.
	(start_recursion): Removed call to Entries_Close, entries list has
 	been moved to do_recursion only.

Tue Feb 20 22:10:05 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* update.c (update_dirent_proc): If dir lacks a CVS subdirectory,
	don't recurse into it.
	* sanity.sh (conflicts): Test for above-fixed bug.

	* update.c (merge_file): Use write_letter not printf.

Tue Feb 20 12:34:07 EST 1996: Gary Oberbrunner <garyo@avs.com>
			      and Jim Kingdon <kingdon@cyclic.com>

	* history.c (history_write): Change username to char * and call
	getcaller() to set it.  Setting username accidentally got deleted
	8 Feb 96.
	* sanity.sh: Revise test 64 to test for above-fixed bug.
	* sanity.sh (PLUS): New variable, work around yet another GNU expr
	bug.

Tue Feb 20 14:07:50 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* sanity.sh: Merge test rtags into test basic2.  They never were
	capable of running separately of each other.

	* sanity.sh (deep): New test, to test ability to operate in deeply
	nested directories (more quickly than basic2 test did).
	(basic2,rtags): Remove directories dir3 and dir4.  Remove file8,
	file10, file12, file9, file11, file13, file15, file16, file17.
	These additional files slowed down the tests considerably without
	significantly increasing coverage.

	* sanity.sh (PROG): New variable.  Use it instead of "cvs"
	to match the name cvs prints out for itself.

Mon Feb 19 09:00:29 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	This fixes a bug whereby old default attributes would get
	clobbered instead of added to on "cvs watch add".
	* hash.c (findnode): Don't check for key == NULL; let the
	assertion in hashp take care of it.
	* fileattr.h, fileattr.c (fileattr_get): If filename is NULL,
	return default attributes.

	* client.c (send_repository): Fix indentation.

Mon Feb 19 01:10:01 1996  Karl Fogel  <kfogel@floss.red-bean.com>

        * login.c (login): print out full repos so user knows which server
        she's logging into.

        * client.c (send_repository): die if `repos' is NULL.  This is a
        lame solution; see comments in code.

Thu Feb 15 15:04:01 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* error.c (error): Free entire and mess when done with them.

	* sanity.sh (info): Correct syntax of .cvsrc file.

	* cvs.h, expand_path.c, edit.c, parseinfo.c, wrapper.c:
	expand_path now takes arguments containing file and line for error
	message, and it prints the error message itself.
	* sanity.sh (info-6a): Test printing of error message.

	* expand_path.c (expand_variable): Add USER internal variable.
	* sanity.sh (info): Test USER and CVSROOT internal variables too.

Wed Feb 14 19:11:08 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* main.c (usg): Add -s option.

Tue Feb 13 20:26:06 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	gcc -Wall lint:
	* mkmodules.c (mkmodules_usage): Remove declaration of
	non-existent function.
	* cvs.h (mkmodules): Declare.

Mon Feb 12 12:20:04 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* mkmodules.c: Rename main to mkmodules and remove various pieces
	of scaffolding which it used to emulate non-existent parts of CVS.
	Change calling convention to just take a char * not argc,argv.
	Save and restore working directory.
	* commit.c (commit_filesdoneproc): Call it if checking files into
	CVSROOT.
	* Makefile.in (SOURCES): Add mkmodules.c.
	(OBJECTS): Add mkmodules.o.
	(MSOURCES,MOBJECTS): Removed.
	(COMMON_OBJECTS): Removed; move former contents into OBJECTS.
	Update other rules accordingly.
	* sanity.sh: Adjust to reflect nonexistence of mkmodules.

	These changes introduce functions cvs_output and cvs_outerr;
	eventually all server output will go through them rather than
	stdio directly.
	* server.c (saved_output, saved_outerr): New variables.
	(do_cvs_command): Initialize them.
	(buf_output): Don't require that buf->output be set; saved_* use
	this to shove some data in a buffer which buf_copy_lines will
	later want to get data from.
	* server.c, cvs.h (cvs_output, cvs_outerr): New functions.
	* mkmodules.c (cvs_outerr): New function, so error() works.
	* error.c: Reindent.  Don't declare program_name and command_name;
	cvs.h declares them.
	(error): Use vasprintf and cvs_outerr (or fputs in the
	error_use_protocol case) rather than stdio directly.
	* import.c (import_descend_dir): Remove kludge which had prevented
	messages from error() from being out of order with respect to
	messages from printf; cvs_output and cvs_outerr are a cleaner
	solution to the problem.
	(add_log, import): Use cvs_output not printf.
	* update.c (write_letter): Use cvs_output not printf.
	(checkout_file): Use write_letter not printf.
	* sanity.sh: Use dotest for test 56 (test that output is actually
	correct).  In theory should test that the import.c bug is fixed,
	but I was unable to reproduce the bug (it is timing dependent).

Mon Feb 12 16:07:45 1996  Norbert Kiesel  <nk@col.sw-ley.de>

	* commit.c: define last_register_time
	(commit): make sure cvs doesn't exit in the same second it wrote
	the last timestamp
	(commit_fileproc): set last_register_time
	(finaladd): set last_register_time

	* run.c, cvs.h: Changed more Popen() to run_popen()

Mon Feb 12 03:06:50 1996  Benjamin J. Lee  <benjamin@cyclic.com>

	* release.c, rtag.c, tag.c: changed 'delete' to 'delete_flag'
	to avoid symbol collision with DEC C RTL function delete()

Mon Feb 12 03:01:48 1996  Benjamin J. Lee  <benjamin@cyclic.com>

	* mkmodules.c: changed 'void Lock_Cleanup()' to 'void static
	Lock_Cleanup() to avoid conflict with more substantial
	Lock_Cleanup() in lock.c

Mon Feb 12 02:50:19 1996  Benjamin J. Lee  <benjamin@cyclic.com>

	* edit.c, logmsg.c, release.c, run.c: Changed Popen() to
	run_popen().  VMS' linker is not case sensitive and considered
	popen() and Popen() to be identical symbols.

Sun Feb 11 10:51:14 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* main.c (main) [!CLIENT_SUPPORT]: Silently ignore gzip level
	rather than printing usage message.

	* cvs.h, expand_path.c (variable_list): New variable.
	(variable_set): New function.
	* hash.h (enum ntype), hash.c (nodetypestring): Add VARIABLE.
	* expand_path.c (expand_path, expand_variable): Reindent.
	(expand_variable): Use user variables not environment variables
	for ${=VAR} syntax.  The environment variables didn't work
	client/server.
	* main.c (main): Process new -s global option.
	* client.c (send_variable_proc): New function.
	(start_server): Call it, to send user variables.
	* server.c (serve_set): New function.
	(requests): Add Set request.
	* sanity.sh: Revise info test to use user variables rather than
	environment variables.

Sat Feb 10 16:55:37 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	By itself this is only a small cleanup, but in the long run it
	will be way cool (for reference, it takes CVS's text segment from
	290816 bytes to 294912, which I expect will be made up by future
	changes which this enables):
	* cvs.h (struct file_info): Added.
	(FILEPROC): Replace 5 args with single struct file_info *.
	* recurse.c (do_file_proc): Adjust args to fileproc; passed in
	instead of from globals.
	(do_recursion): Call do_file_proc accordingly.  Remove srcfiles
	global variable.
	* update.c (update_fileproc): Renamed from update_file_proc.
	* admin.c, client.c, commit.c, diff.c, edit.c, log.c, patch.c,
	remove.c, rtag.c, status.c, tag.c, update.c, watch.c: Update
	fileprocs to new calling convention.

Fri Feb  9 15:30:32 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* expand_path.c (expand_variable): Accept a variable name starting
	with '=' as a way to specify an environment variable.
	* sanity.sh (info): New tests, for above behavior.

	* Makefile.in (clean): Also remove check.log check.plog.

	* import.c (comtable): Remove SYSTEM_COMMENT_TABLE; the table
	should *not* depend on what kind of machine the server happens to
	be.  Add "mak", "rc", "dlg", "frm", and "bas" types which were
	formerly included via SYSTEM_COMMENT_TABLE.

	* cvs.h, rcs.h, add.c, checkin.c, classify.c, commit.c, diff.c,
	import.c, patch.c, rcs.c, update.c, vers_ts.c: Remove
	DEATH_SUPPORT ifdefs.  They were introduced to facilitate merging
	between Cygnus and Berliner variants of CVS, not because it was
	intended to subset CVS this way.  And they clutter up the code
	quite a bit.
	* cvs.h, create_adm.c, main.c, update.c: Likewise, remove
	CVSADM_ROOT ifdefs (it is still a #define, of course).  I believe
	they had a more-or-less similar motivation.

	* sanity.sh: Move setting of HOME from ignore test to the start of
	the tests so it applies to all tests.
	(CVS): Remove -f; the above change takes care of it.

	* rcs.h (RCS_MERGE): Removed; unused.

	* commit.c (checkaddfile): Fix memory leak.

	* admin.c, commit.c, diff.c, log.c, mkmodules.c: Pass -x,v/ to RCS
	commands.

	* rcscmds.c, cvs.h (RCS_checkin): New function.
	* checkin.c, commit.c, import.c: Call it, rather than run_*.
	* cvs.h, commit.c: Remove DEATH_STATE define; the behavior
	which used to be the default (DEATH_STATE) is now the only one.
	Failing to define DEATH_STATE has been commented as obsolete at
	least since CVS 1.5.  We still can read repositories created with
	such a CVS, however.
	* rcs.h, rcs.c: Adjust comments regarding DEATH_STATE.
	* subr.c (make_message_rcslegal): Add comment, describing
	allocation of returned value.

Fri Feb  9 09:53:44 MET 1996  Norbert Kiesel  <nk@col.sw-ley.de>

	* sanity.sh: use "${testcvs}" instead of "cvs" in devcom tests

	* hash.c: fix "dereferencing a NULL pointer" bug triggered with
	  "cvs watch add"
	(findnode): return NULL if key == NULL
	(hashp): assert (key != NULL)
	
Fri Feb  9 00:46:47 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* rcs.c (RCS_reparsercsfile): Remove unused variable date.

	* myndbm.c (mydbm_load_file): Fix typo ('015' -> '\015').

Thu Feb  8 13:00:00 1996  Jim Kingdon  <kingdon@peary.cyclic.com>

	* rcs.c (RCS_parse, RCS_parsercsfile, RCS_reparsercsfile),
	fileattr.c (fileattr_read), myndbm.c (myndbm_open):
	Use FOPEN_BINARY_READ.
	* fileattr.c (fileattr_write), myndbm.c (myndbm_close):
	Use FOPEN_BINARY_WRITE.
	* history.c (history_write, read_hrecs): Specify OPEN_BINARY.
	* rcs.c: Remove calls to abort.
	* myndbm.c (myndbm_load_file): Ignore CRs from ends of lines
	if present.
	* myndbm.c, fileattr.c: While I am at it, change \n to \012
	a few places where LF is intended.
	* history.c (history_write): Use getenv ("HOME"), not getpwnam,
	to find home directory.  If it isn't set, just keep going; don't
	print a message.
	* rcscmds.c, cvs.h (RCS_checkout): New function.
	* update.c, checkin.c, commit.c, diff.c, import.c, no_diff.c, 
	patch.c: Call it instead of run_*.
	* patch.c (patch_fileproc): Clean up inconsistent handling of
	noexec flag.
	* rcscmds.c (RCS_*): Pass -x,v/ to RCS commands; elsewhere in
	CVS it is assumed that ,v is a suffix.

Fri Feb  2 14:07:32 1996  J.T. Conklin  <jtc@rtl.cygnus.com>

	* rcs.h (struct rcsnode): Remove dates field (list of rcsversnodes
 	indexed by date).  CVS maintained this list for each RCS file even
	though it was never used.  This resulted in higher then necessary 
	memory requirements (and run time too).  Even if revision info was
	needed, CVS' List data structure is inappropriate because can't
	handle duplicate keys.  The above was discovered by tracking down
	a memory leak.
	* rcs.c (RCS_reparsercsfile): Don't build dates list.
	(freercsnode): Don't delete dates list.
	(rcsvers_delproc): Free date field.
	(null_delproc): Removed.
	
Thu Feb  1 12:28:33 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* remove.c (cvsremove): Don't tell user the name of the program
	which they use to remove files; we don't have any way of knowing
	that, and besides which they might use a GUI or emacs 'dired' anyway.
	* update.c (update_filesdone_proc, update_dirleave_proc): Call
	unlink_file_dir instead of rm -rf.
	* options.h.in: Remove RM; no longer used.

	* sanity.sh: New tests devcom-a* test "cvs watch add",
	"cvs watch remove", and "cvs watchers".

	* sanity.sh: New test 171a0 tests for watch.c bug just fixed by kfogel.

	* Most .c files: Remove rcsids.
	* cvs.h: Remove USE macro.

Thu Feb  1 13:07:15 1996  J.T. Conklin  <jtc@rtl.cygnus.com>

	* tag.c, rtag.c: Update various comments to reflect function name
 	changes.

Thu Feb  1 14:14:31 1996  Karl Fogel  <kfogel@floss.red-bean.com>

        * recurse.c (do_recursion): comment #endif.

        * edit.c (notify_check): surround with #ifdef CLIENT_SUPPORT; else
        CVS won't compile if CLIENT_SUPPORT is undefined.
        
        * edit.h (notify_check): surround declaration with #ifdef
        CLIENT_SUPPORT.

        * watch.c (watch): if argc <= 1, then just give usage (previously
        was "argc == -1").

Thu Feb  1 12:28:33 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* README-rm-add: Remove information which is now in cvs.texinfo.

	* sanity.sh: Remove basic0 tests.  Move a few to new tests
	basica-1a* (but there is no need to test that *every* command
	gracefully does nothing on an empty directory; exhaustive testing
	is impractical and the generic recursion processor handles this
	anyway).

	* sanity.sh: New tests 69a* test use of update -p to restore old
	version of dead file.

Wed Jan 31 18:32:34 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* ChangeLog-9395: Remove duplicate entries from 1996 which
	accidentally got into this file.

	* client.c (read_line, read_from_server): Change "premature end of
	file from server" message to "end of file from server (consult
	above messages if any)" because 99% of the time it means rsh has
	printed an error message and exited.

Wed Jan 31 15:09:51 1996  J.T. Conklin  <jtc@rtl.cygnus.com>

	* edit.c (ncheck_fileproc): Fix memory leak; free line before
	returning.

Tue Jan 30 18:06:12 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* recurse.c (do_recursion): Add comment about the fact that we
	don't have locks in place at certain points.

Tue Jan 30 09:43:34 1996  Vince Demarco  <vdemarco@bou.shl.com>

	* edit.c (notify_proc): have notify_proc call expand_path with
	the name of the filter program. The user may have used a
	cvs environmental variable. (Popen will expand it, but it may not
	use the correct value)

Tue Jan 30 09:43:34 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* ChangeLog: take the pre-1996 changes and put them in a new file
	ChangeLog-9395.
	* ChangeLog-9194: Renamed from ChangeLog.fsf.
	* ChangeLog-9194, ChangeLog-9395, ChangeLog: Add additional text
	explaining the difference between all these logs and pointing to
	older logs.
	* Makefile.in (DISTFILES): Add ChangeLog-9194 and ChangeLog-9395;
	remove ChangeLog.fsf.

	* modules.c (do_module): Don't fall through from 'l' to 'o' case
	of option processing switch statement.

Tue Jan 30 06:50:19 1996  J.T. Conklin  <jtc@rtl.cygnus.com>

	* client.c (send_repository): Fix memory leak; free adm_name
 	before returning.
	* diff.c (diff_file_nodiff): Fix memory leak; free xvers before
 	returning.
	* rtag.c (rtag_fileproc): Fix memory leak; if branch_mode is set,
 	free rev before returning.
	* status.c (status_fileproc, tag_list_proc): Fix memory leak; free
 	return value of RCS_whatbranch.
	* tag.c (tag_fileproc): Fix memory leak; free vers before
 	returning.
	(val_fileproc): Fix memory leak; free return value of RCS_gettag.
	* watch.c (watch_modify_watchers): Fix memory leak; free mynewattr
	before returning.

Tue Jan 30 09:43:34 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* lock.c (readers_exist): If stat gave an error, print an error
	message saying it was from stat, rather than from "reading
	directory".  Skip the message completely if it was an
	existence_error.

	* sanity.sh (branches): New tests (branches off of branches, etc.).

Tue Jan 30 11:55:34 MET 1996  Norbert Kiesel  <nk@col.sw-ley.de>

	* main.c (main): Add change to run getopt_long twice again.

Mon Jan 29 15:59:31 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	gcc -Wall lint:
	* client.c: Include edit.h

Sun Jan 28 09:45:53 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* edit.c, edit.h (mark_up_to_date): New function, to remove file
	in CVS/Base.
	* client.c (update_entries): Call it if file is up to date.
	* checkin.c (Checkin): Call it in non-server (local) case.
	* sanity.sh: New test 182.5, tests for above-fixed bug.

Sun Jan 28 01:07:22 1996  Jim Kingdon  (kingdon@beezley)

	* client.c (change_mode): Separate out CHMOD_BROKEN code to parse
	mode_string, rather than going through a mode_t.  Cleaner than
	the previous CHMOD_BROKEN code (which also had a typo of && not &).

Sat Jan 27 23:29:46 1996  Jim Kingdon  (kingdon@beezley)

	* edit.c (edit_fileproc): Check for EACCESS as well as EEXIST.

Sat Jan 27 16:26:30 1996  Karl Fogel  (kfogel@floss.cyclic.com)

        * client.c (notified_a_file): use rename_file() instead of
        rename() (but temporarily set `noexec' to 0 so it runs
        unconditionally).
        (change_mode): deal with CHMOD_BROKEN.        

Fri Jan 26 00:14:00 1996  Karl Fogel  <kfogel@floss.red-bean.com>

        * server.c: renamed `dirname' to `dir_name', to avoid conflicts
        with system headers.

        * client.c: renamed `dirname' and `last_dirname' to `dir_name' and
        last_dir_name' (see above).  Not strictly necessary, but
        consistency is nice -- as long as you do it all the time.

Thu Jan 25 00:41:59 1996  Karl Fogel  <kfogel@floss.red-bean.com>

        * options.h.in (AUTH_SERVER_SUPPORT, AUTH_CLIENT_SUPPORT): change
        comment now that no longer under construction.

Wed Jan 24 15:25:22 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* Version 1.7.1.

	* Version 1.7.

Sat Jan 20 00:05:08 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* Version 1.6.87.

Mon Jan 15 18:14:55 1996  Gary Oberbrunner  <garyo@avs.com>
			  and Jim Kingdon  <kingdon@harvey.cyclic.com>

	* tag.c (val_direntproc):  New function to ignore
	  nonexistent dirs when recursing to check tag validity.
	  (tag_check_valid): Pass it to start_recursion.
	* sanity.sh (death): New tests 65a0-65a6 cause test 74 to test for
	above-fixed bug.

Mon Jan 15 12:55:37 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* main.c: Revert change to run getopt_long twice.  This can go in
	after 1.7.

Mon Jan 15 13:03:28 1996  Norbert Kiesel  <nk@col.sw-ley.de>

	* filesubr.c (deep_remove_dir): added test of EEXIST for nonempty
	  directory (Posix states that both ENOTEMPTY (BSD) and EEXIST
	  (SYSV) are valid)

	* main.c (main): run getopt_long twice to allow command-line
	  suppression of reading the cvsrc file

Fri Jan 12 10:02:43 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* Version 1.6.86.

Thu Jan 11 23:28:05 1996  J.T. Conklin  <jtc@rtl.cygnus.com>
			  and Jim Kingdon  <kingdon@harvey.cyclic.com>

	* fileattr.h (fileattr_startdir): Add comment about REPOS == NULL.
	* fileattr.c (fileattr_read, fileattr_write): Assert that
	fileattr_stored_repos != NULL.
	(fileattr_free): If fileattr_stored_repos is NULL, don't free it.

Thu Jan 11 18:03:21 1996  Karl Fogel  <kfogel@floss.red-bean.com>

        * scramble.c (descramble): deal with DIAGNOSTIC better.

Thu Jan 11 12:04:42 1996  Norbert Kiesel  <nk@col.sw-ley.de>

	* main.c: remove CVS_NOADMIN.

	* options.h.in: remove CVS_NOADMIN

Thu Jan 11 10:28:44 1996  Karl Fogel  <kfogel@floss.red-bean.com>

        * scramble.c (descramble): make sure the string returned is safe
        to free().

Wed Jan 10 01:11:23 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* server.c (serve_notify): Cast return value from malloc.

	* edit.c (notify_do): Use struct assignment, not struct
	initialization (which SunOS4 /bin/cc doesn't have).

Tue Jan  9 09:41:29 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* Version 1.6.85.

	We use version numbers instead of patchlevels.  But there was some
	confusing patchlevel stuff lying around.  Nuke it:
	* Makefile.in (HEADERS): Remove patchlevel.h
	* patchlevel.h: Removed.
	* main.c: Don't include patchlevel.h.
	(main): Don't print patch level.

	* server.c (check_repository_password): Check for errors from
	system calls; reindent function.

Tue Jan  9 23:15:30 1996  Karl Fogel  <kfogel@floss.red-bean.com>

        * expand_path.c: fix comments (explain expand_path()'s behavior
        correctly).

Tue Jan  9 09:41:29 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* edit.c (notify_proc): After copying in string following %s,
	don't clobber it.  Instead set up q to end of string.

	* watch.c (watch_modify_watchers), edit.c (editor_set): Fix sense
	of test in trying to decide whether attributes are changed.

	* cvs.h (CVSROOTADM_USERS): New macro.
	* edit.c (notify_do): Look up notifyee in CVSROOTADM_USERS if it
	exists.

Tue Jan  9 21:39:45 1996  Karl Fogel  <kfogel@floss.red-bean.com>

        * expand_path.c: don't redundantly #include things that cvs.h
        already #includes (i.e., stdio.h, ctype.h, string[s].h).

Tue Jan  9 09:41:29 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* ignore.c (ign_default): Add *.obj.

	* server.c: Put /* */ around #endif comment.

Mon Jan  8 20:37:17 1996  Karl Fogel  <kfogel@floss.red-bean.com>

        * client.c (connect_to_pserver): check return value of recv().

Mon Jan  8 11:37:57 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* client.c (connect_to_pserver): Check for error from connect;
	reindent function.

	* sanity.sh (4.75): Use dotest, so we get a PASS if test passes.

	* sanity.sh (dotest): New argument OUTPUT2.
	(188a): Use it instead of \|.

	* sanity.sh (import): Avoid using string $ followed by Id followed
	by $ in sanity.sh source, in case sanity.sh itself is under CVS.
	I hate keyword expansion.

	* sanity.sh: If expr cannot handle multiline expressions, fail and
	tell the user to get one which can.

	* release.c (release_delete): Remove unused variable retcode.

Fri Jan  5 13:30:00 1996  Jim Kingdon   <kingdon@peary.cyclic.com>

	* release.c (release_delete): Call unlink_file_dir rather 
	than "rm -rf".

Thu Jan  4 09:58:30 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* commit.c (find_fileproc): Print "nothing known about foo" and
	return 1 if the file doesn't exist and isn't in CVS/Entries.
	(commit): If the recursion over find_fileproc returns an error,
	print "correct above errors first!" just like local CVS.
	* sanity.sh (basica): Test for above-fixed bug.

	* release.c (release): If we are the client, only unedit if the
	server supports it.

	* sanity.sh: Remove STARTANCHOR stuff; expr patterns are
	automatically anchored to the start.  ENDANCHOR remains.

	* commit.c (commit): Don't start the server until we have
	determined that there is something to commit.

Thu Jan  4 09:48:33 1996  Ben Laurie  <ben@gonzo.ben.algroup.co.uk>
			  and Jim Kingdon  <kingdon@harvey.cyclic.com>

	* client.c (start_server): dup the file descriptor before
	fdopening it.

Wed Jan  3 18:25:25 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* sanity.sh: Remove tests 5, 5.5, and 5.75.  All that stuff is
	tested elsewhere.

	* ignore.c (ign_default): Change CVS* to CVS CVS.adm.  CVS* is too
	broad, especially in a case-insensitive filesystem.

	* Makefile.in (cvsbug): version.c is in srcdir.

Wed Jan  3 17:30:45 1996  Phi-Long Tran  <ptran@autodesk.com>

	* modules.c (do_module): Honor error_use_protocol in printing trace.
	* server.c (server_register): Move check for options NULL to above
	printing of the trace.

Wed Jan  3 01:19:53 1996  Mark Immel <immel@centerline.com>
			  and Jim Kingdon  <kingdon@harvey.cyclic.com>

	* update.c (checkout_file): Do not resurrect file on join if it
	doesn't contain the revisions we are joining.  Probably not a
	perfect test, but should be an improvement.
	* sanity.sh (death): New death-file4-* tests, for bug fixed above.

Wed Jan  3 01:19:53 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* add.c, admin.c, checkout.c, client.c, commit.c, diff.c, edit.c,
	history.c, import.c, log.c, patch.c, release.c, remove.c, rtag.c,
	status.c, tag.c, update.c, watch.c: In calling send_to_server,
	pass \012 not \n.  On the Mac \n is CR, not LF, and we want to
	send LF.  I didn't try to deal with whether files in CVSADM should
	contain CR or LF--in fact there is some code in client.c which
	reads \n from CVSADM files and passes it to send_to_server; it
	needs to be cleaned up one way or the other.

	* entries.c (Entries_Open): Don't try to close fpin twice.

	* client.c (update_entries): Fix typo ("strlen (filename + 10)"
	-> "strlen (filename) + 10").

	* commit.c (checkaddfile): Remove arbitrary limit.

Tue Jan  2 11:25:22 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* commit.c (commit): Only pass files which were modified, added,
	or removed to send_file_names.  This has as a side effect a
	semantic change--the up-to-date check is now skipped for other
	files--but probably a good one, or at least not a bad one.
	* sanity.sh (basica): New test; tests for bug fixed above.
	* sanity.sh (187a3): Adjust for new 'cvs commit' output.  Set up
	DOTSTAR to match arbitrary text (another GNU expr bug/misfeature,
	sigh).

	* sanity.sh: Test that the commit in test 43 actually worked.
	Merge tests basic2 and basic3 and make them independent of basic1.
	(pass,fail): Don't insert spurious space.
	(45.5): Fix typo in directory name.

Tue Jan  2 13:00:00 1996  Jim Kingdon  <kingdon@peary.cyclic.com>

	Visual C++ lint:
	* myndbm.c: Prototype write_item.

Tue Jan  2 11:25:22 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	gcc -Wall lint:
	* client.c (client_expand_modules): Pass error message not "" to error.
	* client.c (supported_request), server.c (supported_response):
	Return a value (gcc -Wall can't know that error doesn't return).
	* commit.c (copy_ulist): Return a value.
	* history.c (fill_hrec): Don't make assumptions about whether
	time_t is "int" or "long" or what.
	* cvs.h: Declare link_file.
	* server.c: Include fileattr.h.
	* server.c (server_notify): Remove unused variable val.
	* tag.c (val_fileproc): Remove unused variable foundtag.

Mon Jan  1 09:49:16 1996  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* Version 1.6.5.

	* Version 1.6.4.

	* filesubr.c (link_file): Add comment about link vs. copy semantics.

	* cvs.h (struct vers_ts): Fix comments.
	* commit.c (commit): Before we ask for a log message, figure out
	what is modified and what is not and pass the information to
	do_editor.
	(copy_ulist,find_fileproc): New helper functions for above code.

	* client.c (read_line): When writing to from_server_logfile, write
	the \n too.

	* client.c (send_files): No longer call send_file_names.
	* client.h: Update comment.
	* add.c, admin.c, commit.c, diff.c, edit.c, log.c, remove.c,
	status.c, tag.c, update.c, watch.c: Call send_file_names before
	send_files.
	* client.c: New variables module_argc, module_argv.
	(client_expand_modules): Set them, to arguments.
	(client_send_expansions): Use them instead of modules_vector to
	send arguments.
	* sanity.sh (modules): Add test of modules -d flag.


For older changes see ChangeLog-9395.