File: ChangeLog

package info (click to toggle)
patch 2.8-2
  • links: PTS
  • area: main
  • in suites: forky, sid, trixie
  • size: 7,888 kB
  • sloc: ansic: 41,776; sh: 7,300; yacc: 1,858; makefile: 143; sed: 54
file content (2991 lines) | stat: -rw-r--r-- 123,317 bytes parent folder | download
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
2025-03-29  Andreas Gruenbacher  <andreas.gruenbacher@gmail.com>

	Version 2.8
	* NEWS: Update.

2025-02-27  Petr Vaněk  <arkamar@gentoo.org>

	Regression in commit abe92e8010ab affecting MariaDB tests
	I have disovered a regression in commit abe92e8010ab ("Prefer idx_t,
	ptrdiff_t to lin") while I was running MariaDB tests. The regression is
	related to a diff file [1], where the patch fails to apply it with
	following error:

	  patch: **** '---' expected at line 2 of patch

	To illustrate the issue, I have attached a git patch containing a
	testcase with simplified reproducer.

	[1] https://github.com/MariaDB/server/blob/mariadb-10.6.21/mysql-test/suite/innodb/r/innodb-wl5522%2Cstrict_crc32.rdiff file

2025-02-27  Paul Eggert  <eggert@cs.ucla.edu>

	Count traditional diff pattern lines correctly
	This fixes a bug I introduced on Thu Sep 5 16:37:50 2024 -0700.
	Problem reported by Petr Vaněk in:
	https://lists.gnu.org/archive/html/bug-patch/2025-02/msg00017.html
	* src/pch.c (another_hunk): Fix method for counting number
	of lines in a traditional diff hunk.

2025-02-25  Paul Eggert  <eggert@cs.ucla.edu>

	patch: fix --no-backup-if-mismatch regression
	Problem reported by Sam James in:
	https://lists.gnu.org/archive/html/bug-patch/2025-02/msg00014.html
	https://bugs.gentoo.org/show_bug.cgi?id=949834
	* src/patch.c (backup_if_mismatch_specified): New static var.
	(get_some_switches): Set it.
	(main): Default backup_if_mismatch only if not set on command line.
	* tests/no-backup: New file.
	* tests/Makefile.am (TESTS): Add it.

2025-02-06  Sam James  <sam@gentoo.org>

	Fix dodgy assert with side-effects in insert_cached_dirfd
	Michał Górny <mgorny@gentoo.org> reported that patch was running out of
	FDs and that the `deep-directories` test was failing. This turns out
	to be because `hash_insert` isn't called at all with `-DNDEBUG` because
	`insert_cached_dirfd` only calls it in one case inside of an `assert`.

	See https://github.com/conda-forge/patch-feedstock/issues/11.

	This regressed in 025a54b789bd88ed15430f8633514e296826983e.

	* src/safe.c (insert_cached_dirfd): Don't use 'assert' for 'hash_insert'
	  call with side-effects.

2025-02-06  Bruno Haible  <bruno@clisp.org>

	Declare an expected test failure on Haiku.
	* bootstrap.conf (gnulib_modules): Add test-xfail.
	* tests/preserve-mode-and-timestamp: Add a comment regarding Haiku.
	* tests/Makefile.am (XFAIL_TESTS): On Haiku, add preserve-mode-and-timestamp.

2025-02-06  Andreas Gruenbacher  <andreas.gruenbacher@gmail.com>

	build: update gnulib submodule to latest

2025-02-05  Bruno Haible  <bruno@clisp.org>

	Fix two test failures on Haiku.
	On Haiku, all error numbers are negative, see
	<https://www.gnu.org/software/gnulib/manual/html_node/errno_002eh.html>.

	Bisected by Eli Schwartz <eschwartz@gentoo.org>.

	This partially reverts commit 043355371a76de8ea7d06f79a69fde905af7cc45.

	* src/inp.c (get_input_file):
	* src/patch.c (main):
	* src/safe.c (read_symlink):
	* src/util.c (move_file):
	Don't assume that all system-defined errno values are positive.

2025-01-08  Paul Eggert  <eggert@cs.ucla.edu>

	Check for newlines only when creating a file name
	Also, check only the last file name component.
	In other words, mimic operating systems that follow POSIX.1-2024’s
	encouragement to fail with EILSEQ when openat etc. create a file name.
	This is more conservative than the previous patch to prohibit
	newlines in file names.
	* src/patch.c (main, backup_file_name_option, get_some_switches):
	* src/util.c (parse_c_string, make_tempfile):
	Don’t check for newlines in a file name unless we are definitely
	creating a file, as it’s harmless to read and stat file with
	newlines in their names if the OS allows that.
	* src/safe.c (traverse_another_path, traverse_path): New arg
	REJECT_NL.  If set, reject any file name whose last component
	contains a newline.  Also, do not do traversal if unsafe.  All
	callers changed to pass true if they are creating the file name,
	false otherwise, and to not bother checking whether we are unsafe.
	(safe_open): Special case for when O_CREAT is set but O_EXCL is not.
	* src/util.c (pfatal): Report "Invalid byte sequence" for EILSEQ.
	This POSIX wording is less confusing than glibc's "Invalid or
	incomplete multibyte or wide character".  Also, this lets
	the test cases check for this wording.
	* tests/bad-filenames: Adjust to new diagnostic wording.

2025-01-05  Paul Eggert  <eggert@cs.ucla.edu>

	Gnulib renamed some modules
	* bootstrap.conf (gnulib_modules):
	Adjust to recent module renaming in Gnulib.

	maint: update bootstrap from gnulib

	build: update gnulib submodule to latest

	maint: make update-copyright

2024-11-20  Andreas Gruenbacher  <andreas.gruenbacher@gmail.com>

	Set --no-backup-if-mismatch when in --posix mode
	When in POSIX mode, the --no-backup-if-mismatch option should be
	enabled.  However, this is only true when the POSIXLY_CORRECT
	environmant variable is set but not when the --posix command line
	option is given.  Fix that by setting backup_if_mismatch after
	evaluating the command line arguments.

2024-11-11  Andreas Gruenbacher  <andreas.gruenbacher@gmail.com>

	Add missing feature tests to the test suite
	Check for chmod, hardlink, symlink, and special character support to
	prevent test suite failures in feature constrained environments.

	Thanks to Bruno Haible and Nelson H. F. Beebe for their testing and
	analysis.

	* tests/test-lib.sh: Add new feature tests.
	* tests/hardlinks: Split this hardlinks related test off from
	tests/remember-backup-files.
	* tests/Makefile.am (TESTS): Add new hardlinks test here.
	* tests/file-create-modes, tests/file-modes, tests/read-only-files,
	tests/preserve-mode-and-timestamp, tests/no-mode-change-git-diff: These
	tests require chmod support.
	* tests/hardlinks, tests/unmodified-files: These tests require hardlink
	support.
	* tests/symlinks: This test requires symlink support.
	* tests/quoted-filenames: This test requires special character support
	in filenames.

2024-10-11  Andreas Gruenbacher  <andreas.gruenbacher@gmail.com>

	Disable release-prep
	* cfg.mk: Disable release-prep by overriding the release-prep-hook for
	now.  With that, "make release" succeeds for alpha releases.

2024-10-11  Eli Schwartz  <eschwartz@gentoo.org>

	Fix "make release" to handle alpha releases
	news-check-regexp to scan for unreleased changes, has to be set
	conditional on the release type. It has to be defined in cfg.mk, not
	Makefile.am, so key off of the RELEASE_TYPE as automake conditionals are
	not available.

2024-10-11  Andreas Gruenbacher  <andreas.gruenbacher@gmail.com>

	Add announce-gen module for "make release"
	* bootstrap.conf (gnulib_modules): Add announce-gen.

2024-09-20  Paul Eggert  <eggert@cs.ucla.edu>

	Pacify gcc -fsanitize=address
	Some of this merely pacifies -fsanitize=address by pointing
	to storage rather than freeing it when we are about to exit anyway.
	Other parts of it keep track of storage more carefully so that it
	can be freed rather than leak.
	* src/common.h (struct outfile): New member ‘alloc’.
	* src/patch.c (files_to_output_root) [SANITIZE_ADDRESS]:
	New externally visible variable, to pacify -fsanitize=address.
	(main): Use new functions described below to remove
	files and free memory.
	(delete_files): Do not free the list as we go, as we are about
	to exit and -fsanitize=address doesn’t care about this storage.
	(output_file_later): Set and use new member ‘alloc’ to avoid
	memory leaks.
	(output_files): WIth -fsanitize=address, record the list head
	in files_to_output_root that the address sanitizer can see,
	so that it won’t complain when we don’t free storage just before exit.
	Free only when not exiting, and free using ‘alloc’ rather than ‘name’.
	(perfile_cleanup_remove): New function.
	(cleanup_remove): Rename from ‘cleanup’.  All uses changed.
	Reimplement in terms of perfile_cleanup_remove.
	(free_outfile_name, perfile_cleanup_free): New functions.
	* src/util.c (make_tempfile): Set new member ‘alloc’.

	Fix memory leak when malformed unidiff patch
	* src/pch.c (another_hunk): Fix memory leak when scanning a
	unidiff patch malformed due to a line that does not begin with
	‘ ’, ‘-’, ‘+’, or ‘=’.

	Port to clang address sanitizer
	* src/patch.c (FREE_BEFORE_EXIT): Port to clang, which
	uses __has_feature (address_sanitizer) instead of
	defined __SANITIZE_ADDRESS__.  Also, rename this to
	SANITIZE_ADDRESS since it is really about -fsanitize=address
	rather than freeing before exit and as subsequent patches
	will show there are simpler ways to pacify -fsanitize=address.
	All uses changed.

	Refactor argc+argv processing
	* src/patch.c (Argc, Argv): Remove these confusing static variables.
	They date back to before the code used getopt_long,
	and are no longer needed.  All uses changed.
	(get_some_switches): New args argc+argv, which are now used
	instead of the static vars.  All uses changed.

	Omit needless get_some_switches code
	* src/patch.c (get_some_switches): Remove unnecessary
	initialization and testing.

2024-09-18  Andreas Gruenbacher  <andreas.gruenbacher@gmail.com>

	Revert "Remove obsolete require_gnu_diff function"
	Oops, function require_gnu_diff is still needed in two places.

	This reverts commit 8cae4fc2213649e36e8f9a4cf21c28a82de3705c.

2024-09-18  Andreas Gruenbacher  <andreas.gruenbacher@gmail.com>

	Remove obsolete require_gnu_diff function
	* tests/test-lib.sh (require_gnu_diff): Remove.

2024-09-18  Paul Eggert  <eggert@cs.ucla.edu>

	savebuf can return a null pointer
	* src/util.h (savebuf): Do not declare with ATTRIBUTE_RETURNS_NONNULL.
	Bug caught by gcc -fsanitize=undefined.

	Spelling fixes

	Port other reject-format test to non-GNU diff
	* tests/reject-format: Also don’t assume GNU diff
	for the ab.diff file.  Problem discovered on Solaris 11.4.

	Don’t be fooled by NUL bytes in diff directives
	* src/pch.c (get_line, pget_line): New arg ALLOW_NUL.
	It is true when getting data lines, which can contain NUL,
	but false when getting ‘diff’ directives, which cannot.
	All uses changed.
	* tests/bad-filenames: Check that ‘patch’ rejects
	directives containing NUL.

	Don’t be fooled by "\000" in file name
	* src/util.c (parse_c_string): Don’t be tricked by perverse
	C-style quoted strings containing backslash, '0', '0', '0'.
	* tests/quoted-filenames: Test this.

	Port to quasi-GNU diff
	Problem reported by Jim Meyering: ‘diff’ acted like GNU diff,
	and generated correct output, but the output differed slightly
	from what the test wanted.  As the output of ‘diff’ is not
	completely determined from its input, it’s better to put
	the desired ‘diff’ output directly in the test when the test
	depends on the exact output.
	* tests/preserve-c-function-names, tests/reject-format:
	Do not require GNU diff or use ‘diff’.
	Instead, cat the desired ‘diff’ output.

2024-09-17  Paul Eggert  <eggert@cs.ucla.edu>

	In previous patch, make w_q static

	Pacify -Wunterminated-string-initialization
	Problem reported by Jim Meyering.
	* src/pch.c (do_ed_script): Pacify bleeding-edge GCC
	-Wunterminated-string-initialization.

2024-09-17  Andreas Gruenbacher  <andreas.gruenbacher@gmail.com>

	Spelling fixes
	Prefer 'timestamp' over 'time stamp'.

	Remove double semicolon
	* src/safe.c (remove_cached_dirfd): Remove a stray double semicolon.

	Prefer angle bracket headers
	* src/util.h: Prefer angle brackets for gnulib header files.

	Update more old copyright notices
	* configure.ac: Replace the old copyright notice with the current
	version from COPYING.
	* ChangeLog-2011: Likewise.

2024-09-17  Paul Eggert  <eggert@cs.ucla.edu>

	Simplify memory allocation of files to delete
	This pacifies ‘make sc_cast_of_argument_to_free’, which otherwise
	complains about the ‘free ((void *) elt)’ in dispose_file_to_delete.
	Rather than worry about pacifying that ‘make’ rule,
	simplify memory allocation by doing the linked list by hand,
	with a ‘next’ member the way our grandfathers did it.
	This reduces the number of source code lines by 23,
	removes the need for Gnulib’s linked-list and xlist modules,
	and makes the code type-safer (as opposed to going through void *).
	* bootstrap.conf (gnulib_modules): Remove linked-list, xlist.
	* src/patch.c: Do not include gl_linked_list.h, gl_xlist.h.
	(struct file_to_delete): New member ‘next’.
	(files_to_delete): Now struct file_to_delete *, not gl_list_t.
	(dispose_file_to_delete, init_files_to_delete):
	Remove; no longer needed.
	(files_to_delete_tail): New static var.
	(delete_file_later): Append the new file by hand.
	(delete_files): Iterate and free by hand.

	Report patch read errors more immediately
	* src/pch.c (open_patch_file): Cache patch file descriptor.
	When reading a patch, report read errors right away rather
	than possibly waiting until end of input.

	Port fflush usage to OpenBSD 7.5
	* src/inp.c (scan_input): Accept file descriptor, not stream.
	All callers changed.
	* src/patch.c (main): Do not obtain a stream for the patch
	file descriptor, as scan_input merely needs a file descriptor.
	This removes the need to call Fclose, which calls fflush,
	which fails on OpenBSD 7.5 which (contra POSIX) does not
	let you fflush an input stream.

2024-09-17  Andreas Gruenbacher  <andreas.gruenbacher@gmail.com>

	Update old copyright notices
	* NEWS: Replace the old copyright notice with the current version from
	COPYING.
	* m4/setmode.m4: Likewise.

2024-09-16  Paul Eggert  <eggert@cs.ucla.edu>

	Fix gl_gcc_warnings typo in ‘configure’
	* configure.ac (gl_gcc_warnings): Always set before using,
	fixing a typo I introduced Sat Aug 24 08:28:18 2024 -0700.

	build: update gnulib submodule to latest

	Remove some dependencies no longer needed
	* bootstrap.conf (gnulib_modules): Remove clock-time,
	nstrftime, stdc_bit_ceil, time.
	* src/inp.c: Do not include stdbit.h.

	Update NEWS as per recent changes

	Update POSIX citations

	Use “Gruenbacher” in international contexts
	* patch.man: “Grünbacher” → “Gruenbacher”,
	as per 2024-08-30 email from Andreas.

	Adjust libs to match recent Gnulib
	* src/Makefile.am (patch_LDADD): Add $(CLOCK_TIME_LIB) (replacing
	$(LIB_CLOCK_GETTIME)), $(EUIDACCESS_LIBGEN) (replacing
	$(LIB_EACCESS), $(GETRANDOM_LIB), $(HARD_LOCALE_LIB), $(LIBINTL),
	$(MBRTOWC_LIB), $(SETLOCALE_NULL_LIB).  This matches recent
	Gnulib and is needed for AIX 7.1 which requires linking
	with -lpthread.

	Pacify clang -Wbitwise-conditional-parentheses
	* src/util.c (copy_attr): Pacify clang 18.1.3 (1ubuntu1).

	Remove “support” for nested critical sections
	It was a bit racy, and it’s no longer needed now that
	we have shrunk critical sections.
	* src/util.c (signals_are_deferred): Rename from signal_deferring_level.
	Now effectively a boolean, instead of being a counter.
	All uses changed.

	Simplify critical section code in util fns
	* src/util.c (move_file, create_file, copy_file):
	Do not worry about whether the file is temporary
	when deciding whether to make a section of code critical.
	Just do it.  There’s no need for optimization now
	that we don’t need syscalls around critical sections.

	Shrink critical sections
	* src/patch.c (main):
	Do not put calls to output_files in critical sections,
	as it can now deal with signals.
	(struct file_to_output): ‘from’ member is now struct outfile, not
	char volatile *volatile.  All uses changed.
	(output_file_later): Append new structure to list in a critical section.
	(output_files): Redo so that calls need not be in a critical section.
	Instead, put critical sections around small subsidiary parts.

	Defer signals by hand with sigatomic_t
	Refactor by using a sig_atomic_t variable instead of a sigprocmask
	call to defer signals.  This should be good enough for a
	single-thread app where we write all the code that needs critical
	sections, and where the signal handler merely cleans up and exits.
	The resulting code should have the same behavior (including
	signal-handling races!) as the original.
	* bootstrap.conf (gnulib_modules): Remove sigaction, sigprocmask.
	Instead, use sigaction only if it’s supported natively,
	as the Gnulib emulation of sigaction drags in code we no longer need.
	* configure.ac: Check for sigaction, sigfillset.
	* src/patch.c (fatal_cleanup): New async-signal-safe function,
	which does the cleanup that the old fatal_exit (SIG) did when SIG
	was nonzero.
	(fatal_exit): Do what the old fatal_exit (SIG) did when SIG was zero.
	Omit SIG arg.  All callers changed.  This function is no longer
	called from signal handlers, and so no longer needs to be
	async-signal-safe under some circumstances.  However, it now
	defers signals.
	* src/util.c (signal_received): New static var.
	(signal_deferring_level): Now sig_atomic_t.
	(fatal_cleanup_and_terminate, handle_signal): New functions.
	(defer_signals, undefer_signals): Reimplement by
	using sigatomic_t volatile vars, not by using sigprocmask.
	(init_signals): Don’t assume SIGPIPE since we don’t use the
	Gnulib sigpipe module.  Use simple sigfillset signal mask
	so that we needn’t use sigprocmask to inquire about the
	current signal mask.  Have a fallback for old platforms
	that lack sigaction and sigfillset, since we no longer use
	Gnulib’s sigaction module.
	(exit_with_signal): Remove; no longer needed.

	output_file_later avoid a malloc+free pair
	* src/patch.c (output_file_later, output_files):
	Combine two malloc calls into one, and likewise for free.
	Rename local to ‘f’ to make the code easier to follow.

	Defend against closed stdin/stdout/stderr
	Various parts of ‘patch’ can misbehave when stdin, stdout, stderr
	are closed.  For example, ‘dup’ can yield 0, 1, or 2 and the
	resulting file descriptor will be misused.  Although POSIX
	requires that ‘patch’ be invoked with stdin/stdout/stderror open,
	it’s better to defend against the possbility that they’re not
	open.  Use Gnulib’s xstdopen module to defend against this.
	* bootstrap.conf (gnulib_modules): Add xstdopen.
	* src/patch.c: Include xstdopen.h.
	(main): Call xstdopen before doing I/O.

	Stop using Gnulib ‘execute’ module
	This is motivated by wanting to remove dependencies on
	Gnulib’s sigprocmask etc. modules, in later patches.
	* bootstrap.conf (gnulib_modules): Remove execute.
	* src/pch.c: Don’t include execute.h.
	(do_ed_script): Use ‘quote_system_arg’ and ‘systemic’, not
	‘execute’, to run the editor command while avoiding
	quoting vulnerabilities.
	* src/util.c (quote_system_arg): Now extern.

	Move defer_signals up
	* src/util.c (signal_deferring_level, defer_signals, undefer_signals):
	Refactor by moving up.  This should simplify later patches.

	Make sigs, NUM_SIGS local
	* src/util.c (sigs, NUM_SIGS): Refactor by moving these static
	constants into the only function that uses them.

	Rename block_signals
	This refactoring prepares for a new algorithm that does not use
	SIG_BLOCK, and where the name ‘block_signals’ would be misleading.
	* src/util.c (signal_deferring_level, defer_signals, undefer_signals):
	Rename from signal_blocking_level, block_signals, unblock_signals.
	All uses changed.

	Trade a bit of space for time in parse_c_string
	* src/util.c (parse_c_string): Omit unnecessary realloc.

	Allocate first patchbuf statically
	This way we avoid the need to call malloc first thing.
	Usually there will no need to call malloc at all, for patchbuf.
	* src/common.h (patchbuf, patchbufsize): Move extern decls from here ...
	* src/pch.h: ... to here.
	* src/patch.c (patchbuf, patchbufsize): Move defns from here ...
	* src/pch.c: ... to here, and initialize patchbuf statically.
	* src/patch.c (main): No need to initialize patchbuf.
	* src/pch.c (initial_patchbuf): New static vbar.
	(grow_patchbuf): New function.
	(pget_line): Use grow_patchbuf rather than growing by hand.
	* src/util.c: Include pch.h, for patchbuf.
	(ask): Return patchbuf, not void, so that callers need not
	include pch.h merely to access patchbuf.  All callers changed.

	Use bigger buffer size by default
	This idea is taken from GNU coreutils.
	* src/patch.c (patchbufsize): Initialize statically rather than
	dynamically.
	* src/util.c (IO_MAX): Remove.  All uses replaced by IO_BUFSIZE.
	* src/util.h (IO_BUFSIZE): New constant, taken from coreutils.

	Preinitialize fatal_act.sa_hander
	* src/util.c (fatal_act): Initialize .sa_handler statically ...
	(init_signals): ... rather than dynamically.

	Prefer EXIT_SUCCESS etc. to literal integers
	* src/patch.c (main, usage, get_some_switches, fatal_exit):
	* src/pch.c (do_ed_script):
	* src/util.c (exit_with_signal):
	Prefer EXIT_SUCCESS, EXIT_FAILURE, EXIT_TROUBLE to 0, 1, 2.
	* src/util.h (EXIT_TROUBLE): New constant.

	Fix some signal handling races
	Also, when a signal arrives, clean up temporary files that were
	not put in /tmp.
	* src/patch.c (main): Block signals around every call to output_files
	and to remove_if_needed.
	(struct file_to_output): ‘from’ and ‘to’ are now volatile,
	as they are accessed in signal handler.
	(files_to_output): Now volatile, and done by hand instead of
	using gl_list_t so that it can be volatile.  All uses changed.
	(files_to_output_tail): New var, which points to pointer to last
	object in list (if any).  Volatile so it can be accessed by
	signal handler.  All updates of list changed.
	(dispose_file_to_output, init_files_to_output, gl_list_clear):
	Remove; no longer used now that we are doing this list by hand.
	(output_files): 2nd arg is now int, not bool; -1 means we
	are in a signal handler.  When exiting due to a signal handler,
	merely unlink (not safe_unlink) the source, and do not use
	‘free’; this way, the code is async-signal-safe.
	(fatal_exit): Arrange for signals to be blocked, when not
	invoked as a signal handler.  Call output_files even when
	signaled, as it will now do something sensible by deleting
	temp files without renaming them.

	Fix --set-utc TZ setting
	* src/patch.c (main): Set TZ to "UTC0", which older POSIX requires
	support for, as opposed to "UTC", which even POSIX.1-2024 arguably
	does not require support for.  Also, check for setenv failure.

	Improve logic for when rename removes source
	* src/util.c (move_file): Don’t test outfrom when it’s already
	known to be non-null.  Don’t worry about destination link count
	if we created the source.

	Fix signal race when renaming file
	* src/util.c (move_file): Fix race if a signal arives between
	the time we rename a file and we mark the source as not existing.

	Simplify traverse_another_path via last_component
	* src/safe.c: Include basename-lgpl.h.
	(traverse_another_path): Simplify by using last_component.

	Stop using Gnulib dirname module
	We don’t need its dir_name and base_name functions, since we
	merely copy the strings elsewhere.  Instead, use some of the
	modules that dirname uses.
	* bootstrap.conf (gnulib_modules): Add basename-lgpl, filename.
	Remove dirname.
	* src/pch.c, src/util.c:
	Include basename-lgpl.h and filename.h instead of dirname.h.
	* src/pch.c (best_name):
	* src/util.c (version_controller):
	Use last_component instead of the dirname module’s functions.
	* src/safe.c: Include filename.h instead of dirname.h.
	* src/util.c (make_tempfile): No need to break the file name
	into directory and basename; just use the whole file name.

	Fix implausible overflow when reading symlinks
	* src/safe.c (read_symlink): Check for integer overflow
	in bufferi size calculation.

	Access checks should use effective, not real
	* src/safe.c (safe_access): Use effective user and group ID,
	not real user and group ID.

	Don’t assume AT_FDCWD != -1
	* src/safe.h (DIRFD_INVALID): New constant.
	* src/safe.c (traverse_another_path, traverse_path, safe_xstat)
	(safe_open, safe_rename, safe_mkdir, safe_rmdir, safe_unlink)
	(safe_symlink, safe_chmod, safe_lchown, safe_lutimens)
	(safe_readlink, safe_access):
	Use it to port to perverse platforms where AT_FDCWD == -1.

	Copy input to output attributes via fd if possible
	* src/inp.c (scan_input): New arg ifp.  It is now the
	caller’s responsibility to open and close the input.
	Caller changed.
	* src/patch.c (main): Open the input file for scan_input, and use
	its file descriptor, if available, to avoid some races while
	setting output file attributes.

	Simplify timestamp epoch checking
	* src/util.c (fetchname): Simplify timestamp calculations.
	Also, add a comment saying why they are buggy in obscure
	cases that have little practical implication.

	Check for ftello failures
	Also, use Gnulib modules fseeko, ftello, and rely on off_t,
	fseeko, ftello as they are safe to use nowadays.
	* bootstrap.conf (gnulib_modules): Add fseeko, ftello.
	This is needed only for very old platforms, plus MSVC.
	* src/common.h (file_offset, file_seek, file_tell): Remove.
	All uses replaced with off_t, fseek, ftell.
	* src/util.c (Fseeko): Rename from Fseek.  All uses changed.
	(Ftello): New function.  All ftello callers that rely on
	nonnegative results changed to Ftello.

	Remove format_linenum
	* src/util.c (format_linenum):
	* src/util.h (LINENUM_LENGTH_BOUND):
	Remove.  They are no longer needed now that line numbers can be
	printed with %td.  All uses replaced by printf with %td.

	Fix "with multiple words" line number
	* src/pch.c (intuit_diff_type): Fix typo in diagnostic,
	which output a file offset as if it were a line number.

	Drop Plan B
	‘patch’ dates back to when porting to 16-bit machines still
	mattered, and where it was therefore useful to support files that
	did not fit in RAM.  So ‘patch’ had two operating modes, Plan A
	and Plan B.  In Plan A the input was simply read into memory, but
	if memory was exhausted ‘patch’ fell back onto Plan B where input
	was transformed into a temporary file that holds the input lines.
	The idea was to not use any malloc calls during the main part of
	the ‘patch’ run, so that ‘patch’ could not exhaust memory if Plan
	A succeeded.  Over the years, though, that approach has not always
	been observed, as malloc is called for sundry reasons and ‘patch’
	immediately fails when malloc fails other than during the Plan A
	initial phase.  In practice this misbehavior has not been a
	problem, as ‘patch’ now invariably runs on machines where source
	file contents fit into RAM so Plan B is never used.  The GNU
	Coding Standards says not to worry about supporting machines too
	small to read file contents, and now’s a good time to remove the
	Plan B code, as it is making further maintenance a pain.
	* bootstrap.conf (gnulib_modules): Remove ialloc.
	All uses of ialloc.h and its API removed, and replaced by
	xalloc.h API as needed.
	* src/common.h (lin, LINENUM_MIN, LINENUM_MAX): Remove.
	All uses of ‘lin’ replaced by idx_t if known to be nonnegative,
	ptrdiff_t otherwise.  All uses of LINENUM_MAX replaced by IDX_MAX.
	LINENUM_MIN was not used.
	* src/inp.c (tibufsize, TIBUFSIZE_MINIMUM, tifd, tibuf, tiline)
	(lines_per_buf, tireclen, last_line_size, too_many_lines)
	(lines_too_long, plan_a, plan_b): Remove.  All uses removed.
	(scan_input): Do just what plan_a used to do, except report a fatal
	error on memory exhaustion.
	Do not worry about file types other than regular file or symlink
	as they are not possible.  All uses changed.
	(ifetch): Omit WHICHBUF arg, which is no longer needed now that
	we always use Plan A.  All uses changed.
	* src/patch.c (tmpin): Remove.  All uses removed.
	* src/pch.c (grow_hunkmax, pget_line): Use xpalloc rather than
	doing the equivalent by hand.
	(grow_hunkmax): Always succeed.  All uses changed.
	(another_hunk): Return bool not signed char, since -1 is
	no longer possible.  All uses changed.
	Use ximemdup0 instead of savestr when that is more convenient.
	(get_line, pget_line): Return idx_t, not ptrdiff_t, since -1
	is no longer possible.  All uses changed.
	* src/util.c (savebuf): Always succeed.  All callers changed.
	Simplify.
	(Write): Now static.

	Prefer ximemdup0 to xmemdup0
	This is natural, as the args are all nonnegative ptrdiff_t, not size_t.
	It also removes the need for Gnulib’s xmemdup0 module.
	* bootstrap.conf (gnulib_modules): Remove xmemdup0.
	* src/pch.c, src/util.c: Do not include xmemdup0.h.
	All calls to xmemdup0 replaced by ximemdup0.

	Refactor ifetch API
	* src/inp.c (ifetch): Return struct iline, instead of
	returning a pointer and storing through a pointer.
	All callers changed.
	* src/inp.h (struct iline): New type.

	Do not attempt huge I/Os
	Also, simplify I/O error checking by moving some of it into
	new functions Read and Write.
	* bootstrap.conf (gnulib_modules): Remove full-write.
	* src/inp.c (plan_a, plan_b, ifetch):
	* src/util.c (move_file, copy_to_fd):
	Use Read or Write instead of checking for I/O errors by hand.
	* src/util.c: Do not include full-write.h.
	(IO_MAX): New constant.
	(ifetch): Diagnose temp file shrinkage.
	(ask): Do not attempt a read of more than IO_MAX bytes.
	Use xpalloc to reallocate, instead of doing it by hand.
	(Read, Write): New functions.

	Use outfd when setting file attributes
	* src/patch.c (main): Check for output error when closing outfd.
	Use outfd when setting file attributes, to fix some races.
	This means delaying closing until after setting file attributes.
	(spew_output): Don’t close output stream; that is now the
	caller’s responsibility.  Caller changed.

	Don’t assume Linux-like S_IFREG
	* boostrap.conf (gnulib_modules): Add assert-h.
	* src/pch.c (fetchmode): Convert Git type to local file type.

	Use STDOUT_FILENO etc
	* src/patch.c (open_outfile):
	* src/pch.c (do_ed_script): Prefer macros like STDOUT_FILENO to
	expressions like 1 or fileno (stdout).

	Fix unlikely glitch with ed diffs
	* src/patch.c (main): If tmpout can’t be created, don’t
	continue when diff_type == ED_DIFF.

	Use fds to copy attrs in create_backup_copy
	* src/util.c (create_backup_copy): Let the new copy_file set file
	attributes, as this can be done more straightforwardly via
	file descriptors.
	(copy_to_fd): Return the source file descriptor instead of closing
	it, so that the caller can use it before closing.  All callers changed.
	(copy_file): New arg ATTR.  Set the destination’s attributes
	accordingly.  All callers changed.

	Be more careful about (time_t) -1
	* src/patch.c (main):
	* src/pch.c (intuit_diff_type):
	* src/util.c (fetchname):
	Mark an invalid timespec with both .tv_sec = (time_t) -1
	and with .tv_nsec = -1.  This is more reliable in case
	time_t is unsigned and narrower than int, in which case
	(time_t) -1 != -1.  It’s also more reliable in the unusual case
	where (time_t) -1 is a valid timestamp.  All uses changed.

	X == -1 → X < 0
	* src/inp.c (get_input_file, plan_b, ifetch):
	* src/patch.c (main, get_some_switches, open_outfile)
	(init_reject, output_file_now):
	* src/pch.c (open_patch_file, there_is_another_patch)
	(another_hunk, do_ed_script):
	* src/safe.c (read_symlink, traverse_another_path):
	* src/util.c (move_file):
	Prefer X < 0 to X == -1 when either comparison will do.
	This lets us focus better on oddball cases like uid_t and time_t
	when converted from -1.

	Let set_file_attributes use fds not names
	Although this ability is currently not used, so this commit is
	merely refactoring, the patch should help ‘patch’ avoid some race
	conditions in followup commits.
	* bootstrap.conf (gnulib_modules): Add futimens.
	* src/util.c: Include utimens.h.
	(lacks_appropriate_privileges, copy_fdattr_error): New functions.
	(copy_attr): New args src_fd, dst_fd.  All uses changed.
	(set_file_attributes): New args tofd, fromfd.  All uses changed.

	Port to narrow unsigned uid_t
	* src/util.c (set_file_attributes): Work even if uid_t or gid_t
	is unsigned and narrower than int, so that (uid_t) -1 != -1.

	Check for output errors more systematically
	* bootstrap.conf (gnulib_modules): Add closeout.
	* src/merge.c (print_linerange, merge_result, merge_hunk):
	* src/patch.c (main, usage, get_some_switches)
	(print_unidiff_range, abort_hunk_unified, abort_hunk_context)
	(apply_hunk, copy_till, spew_output):
	* src/pch.c (open_patch_file, there_is_another_patch)
	(another_hunk, pch_write_line, do_ed_script):
	* src/safe.c (traverse_another_path):
	* src/util.c (putline, vsay, ask, systemic):
	* src/version.c (version):
	Check for output errors more systematically.
	* src/patch.c: Include closeout.h.
	(main): Invoke close_stdout at exit.
	* src/util.c (fatal): Use fputc, not putc; no need for speed here.
	(pfatal): Use fprintf, not putline, to avoid recursion loop
	on write error.
	(Fclose, Fflush, Fprintf, Fputc, Fputs, Fwrite):
	New functions, to go with Fseek.
	* src/version.c: Include util.h, for Fprintf.

2024-09-16  Paul Eggert  <eggert@cs.ucla.edu>

	Report input error right away
	* src/inp.c (plan_b):
	* src/pch.c (incomplete_line):
	When getc fails due to an input error, report the error right away.

	Simplify EOF testing

2024-09-16  Paul Eggert  <eggert@cs.ucla.edu>

	Simplify EOF testing
	* src/inp.c (plan_b):
	* src/patch.c (apply_hunk, copy_till):
	* src/pch.c (skip_to, pget_line, incomplete_line, do_ed_script):
	Just check whether a value is negative, rather than exactly EOF.
	This simplifies the code a bit, and speeds it up very slightly.

	Prefer other types to ‘int’
	* src/merge.c (merge_result, merge_hunk):
	Hunk number is intmax_t, not int, fixing an unlikely overflow.
	* src/patch.c (invc): Now signed char, not int.
	(numeric_string): Use bool, not int, for sign.
	* src/pch.c (p_says_nonexistent, sha1_says_nonexistent)
	(pch_says_nonexistent): Now char, not int.  All uses changed.
	(p_rfc834_nesting, pget_line): Use idx_t, not int,
	fixing an unlikely overflow.  All uses changed.
	(another_hunk): Now signed char, not int.  All uses changed.
	* src/util.c (format_linenum): Remove unnecessary casts to int.

	Detect unlikely integer overflow in size calcs
	* src/pch.c (set_hunkmax, grow_hunkmax): Check for unlikely
	integer overflow in size calculations, by using ireallocarray
	rather than realloc and similarly for xireallocarray vs xmalloc.
	(grow_hunkmax): Rely on C89 guarantee that when realloc fails, the
	old storage is still available.  We need not worry any more about
	ancient hosts where that was not true.  Grow by a factor of
	1.5, as per xpalloc, instead of by a factor of 2.

	Prefer idx_t, ptrdiff_t to lin
	Prefer idx_t and ptrdiff_t to lin when counting lines in main
	memory.  This is mostly for clarity, though it should help
	efficiency slightly in obsolescent 32-bit platforms.
	* src/inp.c (ifetch):
	* src/merge.c (locate_merge, merge_hunk, count_context_lines)
	(context_matches_file, compute_changes):
	* src/patch.c (main, locate_hunk, mangled_patch)
	(print_unidiff_range, abort_hunk_unified, abort_hunk_context)
	(apply_hunk, patch_match):
	* src/pch.c (p_ptrn_lines, p_repl_lines, p_end, p_max)
	(p_prefix_content, p_suffix_content, hunkmax, p_efake, p_bfake)
	(another_hunk, pch_swap, pch_ptrn_lines, pch_repl_lines)
	(pch_end, pch_prefix_context, pch_suffix_context, pch_line_len)
	(pch_char, pfetch, pch_write_line, pch_normalize):
	Prefer idx_t to lin for object sizes.
	Prefer ptrdiff_t to lin for pointer differences.
	All uses changed.
	* src/merge.c (compute_changes): Check for integer overflow
	when combining file with memory counts, when the result
	must fit into memory.

	Fix compatibility issue with blanks in patches
	* src/util.c (remove_prefix): Remove; no longer used.
	* src/pch.c (intuit_diff_type, scan_linenum, another_hunk):
	Allow a nonempty sequence of blanks in places where POSIX requires
	support for these sequences.
	(another_hunk): Parse the "0,0" instead of comparing it literally,
	since there can be blanks around the comma.
	* tests/Makefile.am (TESTS): Add unusual-blanks.
	* tests/unusual-blanks: New file.

	pch_swap return type cleanup
	* src/pch.c (pch_swap): Return void not bool, since it always
	returns true if it returns at all.  All uses changed.

	Fix unlikely int overflow in hunk counts
	* src/patch.c (main): Don’t assume hunk counts fit in int.

	Use char for char in plan_a
	* src/inp.c (plan_a): Use char, not int, for local.

	Cache cwd_is_root dev, ino
	* src/util.c (cwd_is_root): Cache stat results.

	Avoid ‘unsigned’ in safe.c
	* src/safe.c (MAX_SAFE_COMPONENTS): Now an enum instead of unsigned.
	(dirfd_cache_misses): Now intmax_t instead of unsigned.
	All uses changed.
	(count_path_components): Return idx_t, not unsigned, to
	avoid issues with file names with more than INT_MAX components.
	All uses changed.

	Simplify get_sha1
	* src/pch.c (get_sha1): Return the new string instead of storing
	through a pointer.  All uses changed.  Use xmemdup0 instead of
	duplicating its logic.

	Avoid casts in patch.c
	* src/patch.c (main, get_some_switches, abort_hunk_context):
	Redo to avoid casts.
	(main): Use %#o rather than 0%o for octal output, to avoid
	unnecessary leading 0.

	Prefer idx_t in util.c
	* src/util.c (file_id_hasher): Avoid unlikely signed integer
	overflow when adding e->ino and e->dev.
	(create_backup, copy_to_fd, quote_system_arg, version_controller)
	(savebuf, remove_prefix, removedirs): Prefer idx_t to size_t.

	Prefer idx_t in pch.c
	* src/pch.c (p_len, p_indent, open_patch_file, intuit_diff_type)
	(prefix_components, best_name, another_hunk, get_line, pget_line)
	(pch_swap, pch_line_len):
	Prefer idx_t or ptrdiff_t to size_t.  All uses changed.
	(intuit_diff_type): Rename local distance_from_minimum to
	above_minimum, and make it 1 or 0 which is all that is needed.
	This avoids integer overflow when the distance exceeds INT_MAX.

	Prefer idx_t in patch.c
	* src/patch.c (patchbufsize, main, similar):
	Prefer idx_t to size_t.  All uses changed.
	* src/pch.c (pget_line):
	* src/util.c: Include ialloc.h.
	(ask): Avoid bad behavior on unlikely size overflow.
	When converting from size_t to idx_t,
	prefer reallocation growth by 50% not 100%, to match xpalloc.

	Prefer idx_t in list.h
	* src/list.h (list_entry): Prefer idx_t to size_t.

	Prefer idx_t in inp.c
	Prefer signed to unsigned types for object sizes,
	as they have better checking (e.g., gcc -fsanitize=undefined).
	* bootstrap.conf (gnulib_modules): Add idx (already being used
	indirectly) and stdc_bit_ceil.
	* src/common.h: Include idx.h.
	* src/inp.c: Include stdbit.h.
	(tibufsize, tireclen, last_line_size, plan_a, ifetch):
	Prefer idx_t to size_t for object sizes.  All uses changed.
	(lines_per_buf): Prefer idx_t to lin when it's talking about
	object sizes.
	(plan_b): Check for idx_t overflow too.  Use stdc_bit_ceil
	instead of doing it by hand.

	build: update gnulib submodule to latest

	Don’t limit strip counts etc. to INT_MAX
	* src/patch.c (debug): Now unsigned short int, not int, since
	it is used as a mask and only the bottom 9 bits matter.
	(patch_get, strippath, maxfuzz): Now intmax_t, not int.
	(numeric_string): Return intmax_t, not int.
	On overflow return an extremum rather than reporting an error,
	since the resulting values are effectively infinity anyway.
	All uses changed.
	* src/util.c (success, fetchname, parse_name): Accept intmax_t, not int.

	Fix unlikely integer overflows in patch.c
	* src/patch.c (numeric_string): Use stdckdint instead of
	by-hand overflow checks that might not work.

	Fix unlikely integer overflows in pch.c
	* src/pch.c (scan_linenum): Use stdckdint instead of by-hand
	overflow checks that might not work.  Fix already-existing
	use of ckd_add that wasn’t done quite correctly.

	Fix unlikely integer overflows in inp.c
	* bootstrap.conf (gnulib_modules): Add ialloc.
	* src/inp.c: Include ialloc.h.
	(plan_a, plan_b): Prefer idx_t and ssize_t to size_t.
	Use stdckdint instead of by-hand overflow checks that might not work.

	Promote minmax.h to common.h
	* src/common.h: Include minmax.h here ...
	* src/merge.c, src/patch.c, src/safe.c: ... instead of here.

	Avoid some memory allocation by not using ‘const’
	* src/common.h (struct outfile.exists):
	* src/safe.c (struct symlink.path):
	Member is no longer pointer to const.  All uses changed.
	* src/inp.c (get_input_file, plan_a, plan_b):
	* src/patch.c (delete_file_later):
	* src/pch.c (do_ed_script):
	* src/safe.c (safe_xstat, safe_stat, safe_lstat, safe_open)
	(safe_rename, safe_mkdir, safe_rmdir, safe_unlink, safe_symlink)
	(safe_chmod, safe_lchown, safe_lutimens, safe_readlink)
	(safe_access):
	* src/util.c (volatilize set_file_attributes, create_backup_copy)
	(create_backup, copy_to_fd, copy_file, append_to_file, trystat)
	(version_get, stat_file):
	Arg no longer points to const.  All callers changed.
	* src/safe.c (openat_cached):
	Make a copy of arg, to simplify API.
	Arg now points to const, since it no longer needs write access.
	(traverse_next, traverse_another_path, traverse_path):
	Arg points to pointer that is no longer pointer to const.
	Temporarily change argument string instead of duplicating it and
	changing the copy.  All uses changed.
	* src/util.c (volatilize): Result is no longer pointer to const.

	Remove unnecessary char * casts in inp.c
	* src/inp.c (plan_a): Remove unnecessary casts to char *.

	Pacify gcc -Wunused-parameter when !USE_XATTR
	* src/common.h (struct outfile.exists):
	Now char const volatile *volatile, not bool volatile,
	so that we follow the C standard more strictly.
	All uses changed.
	* src/util.c (UTIL_INLINE): New macro.
	(volatilize): New function.
	* src/util.h: Use _GL_INLINE_HEADER_BEGIN, UTIL_INLINE.
	(devolatilize): New function.

	Pacify gcc -Wunused-parameter when !USE_XATTR
	* src/util.c (copy_attr) [!USE_XATTR]: Mark args with MAYBE_UNUSED.

	maint: stop using alloca
	It means unbounded allocation on the stack, which is trouble
	on some platforms.  Also, gcc-12 on Pop!_OS 22.04 LTS complains.
	* bootstrap.conf (gnulib_modules): Remove alloca.
	* src/pch.c, src/safe.c: Don’t include alloca.h.
	* src/pch.c (do_ed_script):
	Use designated initializer instead of fixed-size alloca.
	* src/safe.c (new_cached_dirfd, openat_cached):
	Name arg is now allocated on heap by caller, and is now char * not
	char const *.  All callers changed.
	(openat_cached, traverse_next): Redo to avoid gotos.
	(traverse_next, traverse_another_path):
	Use ximemdup0 instead of alloca, to allocate on the heap rather than
	unboundedly on the stack.

	Don’t assume O_RDONLY == 0
	* src/safe.c (O_PATHSEARCH): New constant.
	(openat_cached): Use it, so as to not assume that
	O_RDONLY == 0, and so that the open works even if
	the directory is unreadable (except on ancient hosts).

	Avoid syscall when nested signal block
	* src/util.c (block_signals): Don’t call sigprocmask
	when nesting, as the signals are already blocked.

	Add signal comment
	* src/patch.c (main): Comment why signals are blocked here,
	and add a FIXME.

2024-08-29  Paul Eggert  <eggert@cs.ucla.edu>

	build: update gnulib submodule to latest

	Update NEWS, README-prereq

	Omit _Noreturn when easy
	* src/inp.c (too_many_lines, lines_too_long):
	* src/patch.c (mangled_patch):
	* src/pch.c (malformed):
	Omit _Noreturn for functions where it is automatically deduced in
	a default build by gcc (GCC) 14.2.1 20240801 (Red Hat 14.2.1-1) x86-64.

	Replace __attribute__ with attribute.h
	* src/common.h (__attribute__): Remove.
	All uses replaced by _Noreturn or ATTRIBUTE_FORMAT.

	Switch from ctype.h to c-ctype.h
	* bootstrap.conf (gnulib_modules): Add c-ctype.
	It’s alreay being used indirectly.
	* src/common.h: Include c-ctype.h instead of ctype.h.
	All uses of isspace replaced by c_isspace; this is equivalent
	since we do not call setlocale.  All uses of c==' ' || c=='\t'
	replaced by c_isblank.
	Sort includes, system includes last.
	(ISDIGIT): Remove.  All uses replaced by c_isdigit.

	Simplify warning configuration
	* configure.ac (WARN_CFLAGS): Simplify configuration
	by not bothering to suppress warnings that don’t
	need to be suppressed with GCC 14.2.1.

	Prefer ATTRIBUTE_* to _GL_ATTRIBUTE_*
	When attribute.h defines a shorthand macro, use it
	to avoid _GL_ prefixes.  This affects _GL_ATTRIBUTE_FORMAT
	and _GL_ATTRIBUTE_PURE.

	Pacify gcc -Wno-unused-parameter
	* bootstrap.conf (gnulib_modules): Add ‘attribute’.
	It’s already being used indirectly.
	* configure.ac (WARN_CFLAGS): Omit -Wno-unused-parameter.
	* src/common.h: Include attribute.h.
	(FALLTHROUGH): Remove, as attribute.h does this now.
	* src/util.c (copy_attr_error, copy_attr_quote, copy_attr_free):
	Use MAYBE_UNUSED.

	Improve ‘git diff’ output if desired
	* .gitattributes: New file.

	Prefer strerror to perror
	* src/patch.c (putline): Move from here ...
	* src/util.c: ... to here, and make it extern.
	* src/pch.c (there_is_another_patch):
	* src/util.c (pfatal):
	Use putline with strerror rather than attempting to work
	around old perror bugs.  This also works better in the
	unlikely case where the program name length does not fit
	in int.

	A bit more long-string fixing
	* src/util.c (fatal, pfatal): Avoid unlikely int overflow
	with very long program names.

	Prefer nullptr to NULL
	C23-style nullptr has some minor static-checking advantages over
	C89-style NULL, and we’re already using Gnulib’s nullptr module.
	* src/inp.c, src/patch.c, src/pch.c, src/safe.c, src/util.c:
	Prefer nullptr to NULL.

	More fixing of printing of very long strings
	* bootstrap.conf (gnulib_modules): Add nullptr.
	* src/patch.c (if_defined, not_defined):
	Now merely strings, not printf formats.  All uses changed.
	(putline): New static function.
	(print_header_line, abort_hunk_unified, abort_hunk_context)
	(apply_hunk): Use it to remove assumptions that string
	lengths fit in int.  Also, prefer fputs to printf with plain %s.
	(print_header_line): TAG arg now is assumed to have an appended ' ',
	to save us the trouble of outputting ' ' separately.  All uses changed.

	Don’t assume string sizes fit in int when printing
	* src/common.h: Move stdckdint.h include here ...
	* src/util.c: ... from here.
	* src/pch.c (scan_linenum):
	* src/safe.c (traverse_another_path):
	Don’t assume pointer differences fit in int when calling printf.

	Avoid fprintf INT_MAX overflow when merging
	* src/merge.c (merge_hunk): Don’t assume patch line lengths
	fit in int.

	Avoid sprintf INT_MAX overflow
	The bug is extremely unlikely, but it’s easy to fix.
	* bootstrap.conf (gnulib_modules): Add stpcpy.
	* src/util.c (SCCSPREFIX): Now a macro, so that it can be concatenated.
	(try1, try2): Remove these macros.  Replace all uses with ...
	(trystat): ... this new function.
	* src/util.c (version_controller, make_tempfile):
	Avoid issues with sprintf result exceeding INT_MAX.

	Reject output file names containing '\n'
	This is encouraged by POSIX.1-2004.
	* bootstrap.conf (gnulib_modules): Add mempcpy.
	* src/patch.c (main, get_some_switches):
	* src/util.c (parse_c_string):
	Reject output file names containing newlines.
	(backup_file_name_option): New function, to help with that.
	(make_tempfile): Reject TMPDIR values containing newlines.
	Do not silently screw up if TMPDIR length exceeds INT_MAX.
	* tests/bad-filenames: Test for file names containing '\n'.

	Update man page a bit.
	* patch.man: Fix minor formatting glitches.
	Remove obsolete references to news articles, as Larry Wall’s
	once-famous ‘rn’ program is no longer used.
	Mention Git.  Update Autoconf mention.
	Remove discussion of differences between current patch
	and patch 2.1 and earlier, as 2.1 is so old I can’t
	easily find out its release date.

	Update copyright notices
	Switch to single intervals for FSF notices,
	and consistently put them first.
	Update copyright notices for 2024.
	* cfg.mk (update-copyright-env): Use UPDATE_COPYRIGHT_FORCE=1,
	UPDATE_COPYRIGHT_USE_INTERVALS=2.
	* patch.man: Always use \(co, so that update-copyright
	updates these dates.
	* src/version.c: Correct Larry Wall copyright years.

	Fix some races involving signals
	* src/common.h (struct outfile.exists): Now volatile.

	Don’t attempt to remove files we didn’t create
	Fix part of a race condition when a signal arrives, which can
	cause ‘patch’ to remove the wrong file.
	* src/common.h (struct outfile.temporary): New member.
	* src/patch.c (tmped, tmpin, tmppat, tmpout): Initialize it.
	(outrej): New static var, replacing the old rejname, but now
	of type struct outfile rather than char *.  All uses changed.
	* src/patch.c (create_output_file):
	* src/util.c (create_file, copy_file):
	Accept struct outfile * instead of char *.  All uses changed.
	* src/patch.c (open_outfile, output_file_now, output_file):
	* src/util.c (create_backup_copy, move_file):
	Accept char * instead of char const *, so that the pointer can be
	copied into a struct outfile.  All uses changed.
	* src/util.c (create_file, copy_file, try_safe_open):
	Block signals for temporary files, so that signal handlers always
	see an ‘exists’ member consistent with whether we created the file.
	(unblock_signals): Preserve errno so that caller need not do that.
	(struct try_safe_open_args.out): New member.  All uses changed.
	(try_safe_open, make_tempfile): Rely on try_tempname to set
	out->exists, rather than having make_tempfile do it (which
	would mean a much longer critical section).

	Omit goto in try_safe_open
	* src/util.c (try_safe_open): Rewrite to avoid goto.

	Pacify clang re obsolete O_CREAT test
	* src/util.c (create_file): Remove obsolete test O_CREAT && O_TRUNC.
	clang compares about it, and we don’t need to worry about ancient
	platforms lacking O_CREAT or O_TRUNC.

	Allow nested block/unblock of signals
	* src/util.c (initial_signal_mask): Now auto, not static.
	(init_signals): Do not block a signal that is already blocked.
	(signal_blocking_level): New static var.
	(block_signals, unblock_signals): Support nested block/unblock calls.

	Adjust to new Gnulib bootstrap post imports
	* bootstrap.conf (bootstrap_post_import_hook): New function,
	replacing the old inline code.  Remove unnecessary gettext comments.

	maint: remove generated file lib/Makefile.am

	Rely on Gnulib inttypes module
	* bootstrap.conf (gnulib_modules): Add inttypes.  Remove size_max.
	* configure.ac: Do not call gl_SIZE_MAX.
	* src/common.h: Include inttypes.h unconditionally.

	Update main locals more consistently
	* src/patch.c (main): Be a bit more disciplined about updating
	local vars.  No need to set outfd = -1 if outstate.ofp is
	non-null, since it must be -1 in that case.

	Use struct outfile * in function args
	* src/patch.c (output_file_later, output_file_now, output_file)
	(remove_if_needed):
	* src/pch.c (do_ed_script):
	* src/util.c (move_file, make_tempfile):
	Accept struct outfile * instead of one or two args.
	All callers changed.
	* src/pch.c (pch_name): Return char *, not char const *.

	Refactor temp names into struct
	* src/common.h (struct outfile): New type.
	* src/patch.c (tmped, tmpin, tmpout, tmppat, tmppat): New vars,
	using this type.  They replace TMPEDNAME, TMPEDNAME_needs_removal,
	TMPINNAME, TMPINNAME_needs_removal, TMPOUTNAME,
	TMPOUTNAME_needs_removal, TMPPATNAME, TMPPATNAME_needs_removal,
	TMPREJNAME, TMPREJNAME_needs_removal.  All uses changed.
	(tmprej): Now static.
	* util.c (make_tempfile): First arg is now char **,
	not char const **.  All callers changed.

2024-08-26  Paul Eggert  <eggert@cs.ucla.edu>

	Simplify by using Gnulib sigaction
	* bootstrap.conf (gnulib_modules): Add raise, sigaction, signal-h,
	sigprocmask.  Remove signal.
	* configure.ac: Do not check for raise, sigaction, sigprocmask,
	sigsetmask.
	* src/patch.c (main): Do not block signals during dry runs; there's
	no need.
	* src/util.c (SIGCHLD, raise, sigset_t, sigemptyset, sigmask)
	(sigaddset, sigismember, sigprocmask, sigblock, sigsetmask):
	Remove substitutes; not needed now that we have Gnulib.
	(sigs): Don’t worry about whether SIGHUP and SIGPIPE are present.
	(NUM_SIGS): Now a constant, not a macro.
	(signals_to_block): Remove.  All uses changed to fatal_act.sa_mask.
	(fatal_exit_handler) [!HAVE_SIGACTION]: Remove.  All uses removed.
	(init_signals): Rename from set_signals.  All uses changed.
	Only do the true part; the false part is now done by unblock_signals.
	(block_signals): Rename from ignore_signals, since it now blocks
	instead of ignoring on all platforms.  All uses changed.
	(init_signals, block_signals): Simplify by assuming
	HAVE_SIGACTION, HAVE_SIGPROCMASK, HAVE_SIGSETMASK.
	(setup_handler): Remove macro.
	(unblock_signals): New function.

	Avoid unnecessary freeing in output_files
	If we’re about to exit, calling ‘free’ just slows us down
	and is more likely to trigger a bug somewhere.
	* src/patch.c (FREE_BEFORE_EXIT): Now a boolean, not
	defined-or-not-defined.  All uses changed.
	(output_files): New arg EXITING.  All uses changed.

	Clean up cleanup
	* src/patch.c (cleanup): Do not call output_files,
	since this function can be called from a signal handler
	and output_files is not async-signal-safe.  All callers changed.
	No need for the ‘already_cleaning_up’ static.

	Port better to GNU/Hurd
	It lacks PATH_MAX, so don’t use PATH_MAX.
	* bootstrap.conf (gnulib_modules): Add stdckdint.
	* src/util.c: Include stdckdint.h.  Omit duplicate stdarg.h include.
	(move_file, copy_file): Don’t limit symlink contents to PATH_MAX.
	Check for symlink or file contents that unexpectedly grew.
	(copy_file): New arg FROMST.  All callers changed.

	Don’t say empty backups are unreadable
	* patch.man: Remove text that became obsolete in 2011.

	Spelling fixes

	Change manywarnings usage to be more like coreutils
	* configure.ac: Treat --enable-gcc-warnings more like coreutils does.
	This mostly just migrates coreutils changes into this file.

	Pacify clang, which dislikes n + "y"
	* src/merge.c (merge_hunk):
	* src/patch.c (main): Do not add an integer to a string literal,
	as Clang unhelpfully warns that you’re using C, not C++.

	Pacify -Wstrict-overflow in pch.c
	* src/pch.c (fetchmode): Avoid undefined behavior in the unlikely
	event that str happens to be next to the end of memory.

	Pacify -Wsuggest-attribute=format in util.c
	* src/util.c (copy_attr_error): Mark with printf attribute.
	(copy_attr): Ignore -Wsuggest-attribute=format.

	Port to non-VLA C compilers
	The C standard does not require support for VLAs.
	* src/util.c (cwd_is_root): Don’t use VLA.

	Rename vars to pacify gcc -Wshadow
	* src/patch.c (noreverse_flag, reverse_flag, patchbuf, patchbufsize):
	Rename from noreverse, reverse, buf, bufsize.
	All uses changed.
	* src/pch.c (do_ed_script): Rename locals.

	Stop including stdbool.h
	With current Gnulib it’s not needed.
	* src/common.h, src/list.h, src/safe.h: Don’t include stdbool.h

	Recommend 64-bit time_t on 32-bit platforms
	* bootstrap.conf (gnulib_modules): Add year2038-recommended.

	Remove pch_sha1
	* src/pch.c (pch_sha1): Remove; unused.

	Move skip_spaces
	* src/pch.c (skip_spaces): Move here ...
	* src/util.h: ... from here, since it is used only in pch.c.
	No need for it to be declared inline.

	Remove pch_timestamp function
	* src/pch.h (pch_timestamp): Remove.  All uses removed.
	It wasn’t worth the aggravation to keep it.

	Prefer extern inline to static inline for list.h
	* src/list.h: Use _GL_INLINE_HEADER_BEGIN, _GL_INLINE_HEADER_END.
	(LIST_INLINE): New macro, if not already defined.
	(INIT_LIST_HEAD, list_add, list_del, list_del_init, list_empty)
	(list_entry): Now LIST_INLINE, not static inline.
	* src/safe.c (LIST_INLINE): New macro.

	maint: pacify gcc 14 -Wcast-align
	* src/list.h (list_entry): Now a 2-arg function rather than
	a 3-arg macro.  All uses changed.

	maint: pacify -Wanalyzer-null-argument
	* src/pch.c (do_ed_script): Simplify slightly to pacify
	GCC 14 -Wanalyzer-null-argument.

	maint: work around GCC bug 109839
	* src/patch.c, src/pch.c: Ignore -Wanalyzer-fd-leak.

	maint: pacify gcc -Wmissing-variable-declarations
	* src/common.h, src/inp.c, src/inp.h, src/merge.c, src/patch.c:
	* src/pch.c, src/pch.h, src/safe.c, src/util.c, src/util.h:
	* src/version.c:
	Stop using XTERN, as that trick doesn’t work with gcc
	-Wmissing-variable-declarations.  Instead, use the vanilla
	approach of extern declarations in .h files, and definitions
	without ‘extern’ in .c files.

	maint: pacify gcc -Winline
	* configure.ac (nw): Add -Winline.

	maint: port _FORTIFY_SOURCE to Ubuntu
	* configure.ac (_FORTIFY_SOURCE): Define only if not already defined,
	so as to not collide with the builtin definition on Ubuntu 24.04 LTS.

	maint: assume STDC_HEADERS
	We don’t need to worry about pre-C89 any more.
	* src/common.h (CTYPE_DOMAIN, ISSPACE): Remove.
	All uses of ISSPACE replaced by isspace.
	(errno): Remove decl.

	maint: spruce up our .m4 files a bit
	* m4/setmode.m4 (AC_FUNC_SETMODE_DOS):
	Use AC_CHECK_HEADERS_ONCE instead of AC_CHECK_HEADERS.
	* m4/xattr.m4: Bump serial.

	maint: omit obsolete macro calls
	* configure.ac: Remove gl_USE_SYSTEM_EXTENSIONS.
	It is no longer needed, since Gnulib does this for us.

	maint: simplify .gitignore
	* .gitignore: Update for current Gnulib.
	Merge m4/.gitignore, tests/.gitignore into this.
	* m4/.gitignore, tests/.gitignore: Remove.

	build: update gnulib submodule to latest

2024-08-23  Andreas Gruenbacher  <andreas.gruenbacher@gmail.com>

	build: update gnulib submodule to latest
	* bootstrap, bootstrap.conf: Update.
	* configure.ac: Remove obsolete AC_PROG_CC_STDC macro (AC_PROG_CC is
	already present). Remove obsolescent AC_HEADER_STDC macro.
	* m4/xattr.m4: Replace obsolete AC_HELP_STRING by AS_HELP_STRING.
	* m4/setmode.m4: Replace obsolete AC_TRY_LINK by AC_LINK_IFELSE.
	* Makefile.am (EXTRA_DIST): Add missing m4/gnulib-cache.m4.
	* lib/Makefile.am: Regenerate.

2024-03-02  Collin Funk  <collin.funk1@gmail.com>

	build: Enable the 'subdir-objects' Automake option.
	* configure.ac (AM_INIT_AUTOMAKE): Add 'subdir-objects'.
	* src/safe.c (remove_cached_dirfd): Use hash_remove instead of the
	deprecated hash_delete.

	build: update gnulib submodule to latest
	The current version of gnulib causes build failures which are fixed by
	the following commit:
	<https://git.savannah.gnu.org/cgit/gnulib.git/commit/?id=8002ca7b56acb46b42eeac4a343e112a8ee283cf>
	* src/pch.c (do_ed_script): Update arguments to gnulib's execute
	function to match the addition of the directory argument. No
	functional changes.

2022-05-10  Takashi Iwai  <tiwai@suse.de>

	Pass the correct stat to backup files
	The last case to call output_file() in the main loop is
	    output_file (outname, NULL, &tmpoutst, NULL, NULL,
	                 file_type | 0, backup);
	and this essentially means to create a backup file (where to=NULL)
	only if backup=true, and does nothing else.

	And, in the current code, the passed file stat (&tmpoutst) is a file
	stat of the temporary file that has been processed, not the original
	file (outname) to be backed up.  When the backup is performed
	immediately, this is no big problem.  However, output_file() may
	schedule the deferred handling, and the given file may be backed up at
	a later point.  The problem is that create_backup() tries to avoid the
	backup of the same file twice, and it checks the given stat i-node
	number in the hash list.  Since it's a stat of a temporary file, the
	same i-node number may be reused once a temp file is deleted and
	another is created.  This results in a false-positive detection of the
	already existing file, eventually missing a backup file.

	This patch attempts to address the issue:
	- Modify the condition for better understanding, clearly indicating
	  that the code there is for creating a backup file
	- Pass the stat of the original file instead of a temporary file

	BugLink: https://bugzilla.opensuse.org/show_bug.cgi?id=1198106

2021-10-31  Paul Eggert  <eggert@cs.ucla.edu>

	maint: modernize README-{hacking,prereq}

2021-01-08  Kerin Millar  <kfm@plushkava.net>

	Fix test for presence of BASH_LINENO[0]
	eval is not some sort of magical sandbox for executing code that might cause
	the shell's parser to take exception. Render the test resilient by carrying
	it out within a subshell. While at it, position the redirection so that
	STDERR is, in fact, muted.

	Reported-by: Paolo Pedroni <paolo.pedroni@iol.it>
	Closes: https://bugs.gentoo.org/738810

2020-05-14  Andreas Gruenbacher  <agruen@gnu.org>

	gnulib: update to latest
	* bootstrap: Update.
	* bootstrap.conf (gnulib_modules): Replace getdate with parse-datetime, malloc
	with malloc-gnu, and realloc with realloc-gnu.
	* src/patch.c (main): Function find_backup_file_name has gained a new dir_fd
	argument.
	* src/util.c (create_backup): Likewise.
	(fetchname): Function get_date has been renamed to parse_datetime.

2019-12-24  Andreas Gruenbacher  <agruen@gnu.org>

	Add missing-section tests to context-format test case
	* tests/context-format: Add tests with a missing pattern and a missing
	replacement section in a hunk.  Patch should fill in the missing
	sections from the existing sections.

2019-07-16  Andreas Gruenbacher  <agruen@gnu.org>

	Fix failed assertion 'outstate->after_newline'
	The assertion triggers when the -o FILE option is used, more than one output
	file is written into FILE, and one of those files (except the last one) ends in
	the middle of a line.
	* src/patch.c (main): Fix the case described above.

2019-07-15  Andreas Gruenbacher  <agruen@gnu.org>

	Avoid invalid memory access in context format diffs
	* src/pch.c (another_hunk): Avoid invalid memory access in context format
	diffs.

	Don't follow symlinks unless --follow-symlinks is given
	* src/inp.c (plan_a, plan_b), src/util.c (copy_to_fd, copy_file,
	append_to_file): Unless the --follow-symlinks option is given, open files with
	the O_NOFOLLOW flag to avoid following symlinks.  So far, we were only doing
	that consistently for input files.
	* src/util.c (create_backup): When creating empty backup files, (re)create them
	with O_CREAT | O_EXCL to avoid following symlinks in that case as well.

2019-06-28  Andreas Gruenbacher  <agruen@gnu.org>

	Don't crash when RLIMIT_NOFILE is set to RLIM_INFINITY
	* src/safe.c (min_cached_fds): Define minimum number of cached dir file
	descriptors.
	(max_cached_fds): Change type to rlim_t to allow storing RLIM_INFINITY.
	(init_dirfd_cache): Set max_cached_fds to RLIM_INFINITY when RLIMIT_NOFILE is
	RLIM_INFINITY.  Set the initial hash table size to min_cached_fds, independent
	of RLIMIT_NOFILE: patches commonly only affect one or a few files, so a small
	hash table will usually suffice; if needed, the hash table will grow.
	(insert_cached_dirfd): Don't shrink the cache when max_cached_fds is
	RLIM_INFINITY.

	Abort when cleaning up fails
	When a fatal error triggers during cleanup, another attempt will be made to
	clean up, which will likely lead to the same fatal error.  So instead, bail out
	when that happens.
	src/patch.c (cleanup): Bail out when called recursively.
	(main): There is no need to call output_files() before cleanup() as cleanup()
	already does that.

2019-06-27  Andreas Gruenbacher  <agruen@gnu.org>

	Skip "ed" test when the ed utility is not installed
	* tests/ed-style: Require ed.

	Improve support for memory leak detection
	When building with the address sanitizer on, free some more resources before
	exiting.  (This is unnecessary when not looking for memory leaks.)
	* src/patch.c (init_files_to_delete): Add dispose function for freeing
	filenames.

2018-08-17  Andreas Gruenbacher  <agruen@gnu.org>

	Fix swapping fake lines in pch_swap
	* src/pch.c (pch_swap): Fix swapping p_bfake and p_efake when there is a
	blank line in the middle of a context-diff hunk: that empty line stays
	in the middle of the hunk and isn't swapped.

	Fixes: https://savannah.gnu.org/bugs/index.php?53133

2018-08-17  Andreas Gruenbacher  <agruen@gnu.org>

	Make the (debug & 2) output more useful
	* src/pch.c (another_hunk): In the (debug & 2) output, fix how empty
	lines that are not part of the patch context are printed.  Also, add
	newlines to lines that are missing them to keep the output readable.

2018-05-07  Jean Delvare  <jdelvare@suse.de>

	Don't leak temporary file on failed multi-file ed-style patch
	The previous fix worked fine with single-file ed-style patches, but
	would still leak temporary files in the case of multi-file ed-style
	patch. Fix that case as well, and extend the test case to check for
	it.

	* src/patch.c (main): Unlink TMPEDNAME if needed before moving to
	  the next file in a patch.

	This closes bug #53820:
	https://savannah.gnu.org/bugs/index.php?53820

	Fixes: 123eaff0d5d1 ("Fix arbitrary command execution in ed-style patches (CVE-2018-1000156)")
	Fixes: 19599883ffb6 ("Don't leak temporary file on failed ed-style patch")

2018-05-03  Jean Delvare  <jdelvare@suse.de>

	Don't leak temporary file on failed ed-style patch
	Now that we write ed-style patches to a temporary file before we
	apply them, we need to ensure that the temporary file is removed
	before we leave, even on fatal error.

	* src/pch.c (do_ed_script): Use global TMPEDNAME instead of local
	  tmpname. Don't unlink the file directly, instead tag it for removal
	  at exit time.
	* src/patch.c (cleanup): Unlink TMPEDNAME at exit.

	This closes bug #53820:
	https://savannah.gnu.org/bugs/index.php?53820

	Fixes: 123eaff0d5d1 ("Fix arbitrary command execution in ed-style patches (CVE-2018-1000156)")

2018-04-07  Bruno Haible  <bruno@clisp.org>

	Request 'alloca' module from gnulib.
	* bootstrap.conf (gnulib_modules): Add 'alloca'.

	Fix 'ed-style' test failure.
	* tests/ed-style: Remove '?' line from expected output.

	Fix check of return value of fwrite().
	* src/patch.c (copy_till): Consider incomplete fwrite() write as an error.
	* src/pch.c (pch_write_line, do_ed_script): Likewise.

2018-04-07  Jim Meyering  <jim@meyering.net>

	maint: avoid warnings from GCC8
	Hi Andreas,

	I configured with --enable-gcc-warnings and bleeding-edge gcc
	(version 8.0.1 20180406) and hit some warning-escalated-to-errors.
	This fixes them:

	>From a71ddb200dbe7ac0f9258796b5a51979b2740e88 Mon Sep 17 00:00:00 2001
	From: Jim Meyering <meyering@fb.com>
	Date: Fri, 6 Apr 2018 16:47:00 -0700
	Subject: [PATCH] maint: avoid warnings from GCC8

	* src/common.h (FALLTHROUGH): Define.
	* src/patch.c (abort_hunk_context): Use FALLTHROUGH macro in place of
	a comment.  This avoids a warning from -Wimplicit-fallthrough=.
	* src/pch.c (do_ed_script): Add otherwise unnecessary initialization
	to avoid warning from -Wmaybe-uninitialized.
	(another_hunk): Use FALLTHROUGH macro here, too, twice.

2018-04-06  Andreas Gruenbacher  <agruen@gnu.org>

	Minor cleanups in do_ed_script
	* src/pch.c (do_ed_script): Minor cleanups.

	Use gnulib execute module
	* bootstrap.conf (gnulib_modules): Add execute.
	* src/pch.c (do_ed_script): Switch from fork + execlp to execute.

	Invoke ed directly instead of using the shell
	* src/pch.c (do_ed_script): Invoke ed directly instead of using a shell
	command to avoid quoting vulnerabilities.

	Fix arbitrary command execution in ed-style patches (CVE-2018-1000156)
	* src/pch.c (do_ed_script): Write ed script to a temporary file instead
	of piping it to ed: this will cause ed to abort on invalid commands
	instead of rejecting them and carrying on.
	* tests/ed-style: New test case.
	* tests/Makefile.am (TESTS): Add test case.

	Allow input files to be missing for ed-style patches
	* src/pch.c (do_ed_script): Allow input files to be missing so that new
	files will be created as with non-ed-style patches.

2018-02-12  Andreas Gruenbacher  <agruen@gnu.org>

	Fix segfault with mangled rename patch
	http://savannah.gnu.org/bugs/?53132
	* src/pch.c (intuit_diff_type): Ensure that two filenames are specified
	for renames and copies (fix the existing check).

2018-02-07  Andreas Gruenbacher  <agruen@gnu.org>

	Test suite: fix Korn shell incompatibility
	tests/merge: In a Korn shell, shift apparently fails when $# is 0.

	Test suite compatibility fixes
	* tests/crlf-handling, tests/git-cleanup, tests/test-lib.sh: Use printf
	instead of echo -e / echo -n for compatibility with systems that don't
	support these echo options.
	* tests/merge: Minor other cleanups.

	Avoid set_file_attributes sign conversion warnings
	* src/util.c (set_file_attributes): Avoid sign conversion warnings when
	assigning -1 to uid_t / gid_t.

2018-02-03  Andreas Gruenbacher  <agruen@gnu.org>

	Version 2.7.6
	* NEWS: Update.

	Fix typo in README
	* README: Fix typo.

	Switch to gnupload module
	* bootstrap.conf: use gnupload module.
	* (RELEASE_TYPE): Define, as maint.mk expects it to be defined.
	(tell-upload): Remove obsolete target.

	Remove stale reference to m4/utimbuf.m4
	* Makefile.am (EXTRA_DIST): Remove stale reference to m4/utimbuf.m4.

	maint: update bootstrap and gnulib submodule
	* bootstrap: Update from gnulib.

2018-01-23  Andreas Gruenbacher  <agruen@gnu.org>

	Clarify the error messages for malformed normal diff patches
	* src/pch.c (another_hunk): Clarify the error messages for malformed
	normal diff patches.

2018-01-23  Thomas Orgis  <thomas@orgis.org>

	Create git diff files with indicated mode
	* src/patch.c (main): Create git diff files with indicated mode.
	* tests/file-create-modes: New test case.
	* tests/Makefile.am (TESTS): Add test case.

	This fixes building current Linux 4.14.x from the signed tarball and
	patch file, where the patch creates a script with the executable bit
	set.

2018-01-23  Andreas Gruenbacher  <agruen@gnu.org>

	gnulib: update to latest

2018-01-23  Bruno Haible  <bruno@clisp.org>

	Don't use an undocumented Autoconf macro
	* configure.ac: Use AC_CONFIG_HEADERS instead of AC_CONFIG_HEADER.

2017-09-06  Andreas Gruenbacher  <agruen@gnu.org>

	Don't allow hunks to overlap
	* src/patch.c (locate_hunk): Don't allow a hunk to overlap with the
	previous one.
	* tests/false-match: Add regression test.

	patch.man: Clarify --forward description

2017-09-04  Andreas Gruenbacher  <agruen@gnu.org>

	gnulib: update to latest

2017-02-22  Tim Waugh  <twaugh@redhat.com>

	Rename canonicalize global variable
	* src/common.h, src/merge.c (context_matches_file), src/patch.c
	(get_some_switches, patch_match), src/pch.c(another_hunk): Rename the
	global variable 'canonicalize' to 'canonicalize_ws'.

	Patch uses a global variable 'canonicalize' as part of its
	implementation of the --ignore-whitespace flag.

	In glibc there is a function canonicalize():
	https://www.gnu.org/software/libc/manual/html_node/FP-Bit-Twiddling.html#index-canonicalize

	Rename the global variable so that it will not conflict.

	Original bug report:
	https://bugzilla.redhat.com/show_bug.cgi?id=1422463

2016-08-10  Hanno Boeck  <hanno@gentoo.org>

	Add a missing NULL check in parse_name
	* src/util.c (parse_name): parse_c_string() can fail and return NULL.
	Check for that so that we won't access the NULL pointer here.

	Fix out-of-bounds access to lines in a patch
	This bug can trigger with malformed patches.
	* src/pch.c (pch_write_line): Avoid out-of-bounds access to
	p_line[line][p_len[line] - 1] when p_len[line] is 0.

2016-07-31  Jim Meyering  <meyering@fb.com>

	tests: use $PATCH rather than hard-coded path
	* tests/git-cleanup: Don't hard-code program name.

	maint: placate a "make syntax-check" rule
	* src/pch.c (set_hunkmax): Don't cast return value of xmalloc.
	(grow_hunkmax): Likewise for two uses of realloc that the syntax-check
	rule did not detect.

2016-07-31  Jim Meyering  <meyering@fb.com>

	maint: avoid new warning-errors from gcc-6.1
	When configured with --enable-gcc-warnings and gcc-6.1, ...
	* src/safe.c (count_path_components): Use _GL_ATTRIBUTE_PURE,
	to avoid an error from -Werror=suggest-attribute=pure.
	* src/util.h (filename_is_safe): Likewise.
	* src/patch.c (main): Placate -Werror=format= by casting
	pch_mode's mode_t return type to the "unsigned int" required
	to match the %o format string.
	* src/patch.c (delete_files): Correct indentation, to avoid
	this error from -Werror=misleading-indentation:

	  patch.c: In function 'delete_files':
	  patch.c:1816:4: error: this 'if' clause does not guard...
	      if (verbosity == VERBOSE)
	      ^~
	  patch.c:1820:6: note: ...this statement, but the latter is
	    misleadingly indented as if it is guarded by the 'if'
		move_file (0, 0, 0, file_to_delete->name, mode,
		^~~~~~~~~

2016-07-31  Jim Meyering  <meyering@fb.com>

	gnulib: update to latest

2016-07-27  Andreas Gruenbacher  <agruen@gnu.org>

	Fix broken git-style patch behavior
	When a git-syle patch is applied, all file modifications are done to
	temporary files which are put in place when the patch ends.  When a
	patch fails, GNU patch was trying to "roll back" to the start.  A bug in
	that code that lead to accidental file deletion was recently discovered
	by Richard Weinberger <richard@nod.at>.  Even worse though, GNU patch
	should not exhibit this "rollback" behavior in the first place; that's
	not what people expect. Instead, the files modified so far should be put
	in place.
	* src/patch.c (cleanup): Put output files processed successfully
	in place instead of trying to "roll back" to the start.
	(forget_output_files): Remove obsolete (and broken) function.
	* tests/git-cleanup: New broken git-style patch test case that exercises
	the cleanup path.
	* tests/Makefile.am (TESTS): Add new test case.

	Fix inname test case
	* src/safe.h (unsafe): New flag to allow turning off safe file
	operations.
	* src/safe.c (safe_xstat, safe_open, safe_rename, safe_mkdir,
	safe_rmdir, safe_unlink, safe_symlink, safe_chmod, safe_lchown,
	safe_lutimens, safe_readlink, safe_access): When safe file operations
	are turned off, skip safe path traversal.  Any symlink checks of the
	last path component are still done though.
	* src/patch.c (main): When the file to patch is specified on the command
	line, turn off safe file operations.
	* tests/inname: Fix typo in test.

	Add context-format test to XFAIL_TESTS for now
	* tests/Makefile.am (XFAIL_TESTS): Add context-format test until someone
	gets to fixing it.

2016-03-18  Andreas Gruenbacher  <agruen@gnu.org>

	Add broken context-format test cases
	* tests/context-format: Add context-format test cases from
	Mattias Andrée <maandree@member.fsf.org> that patch doesn't parse
	correctly.

2015-10-03  Andreas Gruenbacher  <agruen@gnu.org>

	Don't use a zero-size array in struct symlink
	* src/safe.c (struct symlink): Get rid of the zero-size array which is a gcc
	extension.
	(read_symlink): Adapt to this struct symlink change.

2015-07-20  Andreas Gruenbacher  <agruen@gnu.org>

	Input file outside current directory: add test case
	Patch currently makes sure that input / output files are inside the current
	working directory even when the input files are explicitly specified on the
	command line (see http://savannah.gnu.org/bugs/?45581).
	* tests/inname: Add a test case for this bug.

2015-07-12  Tobias Stoeckmann  <tobias@stoeckmann.org>

	Terminate readlink string
	The function readlink does not nul terminate its result string.  safe_readlink
	is a wrapper for readlinkat, which has the same behaviour.
	* src/util.c (copy_file): Therefore, explicitly set '\0' and reserve one byte
	for it.  (agruen: Reserve PATH_MAX + 1 bytes instead of only reading PATH_MAX -
	1 characters.)

2015-07-08  Tobias Stoeckmann  <tobias@stoeckmann.org>

	Use xmalloc in bestmatch
	* src/bestmatch.h (bestmatch): Use xmalloc instead of malloc to handle
	out-of-memory situations.

2015-03-09  Andreas Gruenbacher  <agruen@gnu.org>

	Don't require traditional patch header after "git --diff"
	Reported by Tim Waugh <twaugh@redhat.com>.
	* src/pch.c (intuit_diff_type): Don't require a traditional patch header
	("--- old\n+++ new/n") after a "git --diff" header; the "git --diff" header
	gives us enough information for being able to process subsequent hunks.  This
	deals with corrupted patches more gracefully.
	* tests/corrupt-patch: New test case.
	* tests/Makefile.am (TESTS): Add test case.

2015-03-08  Andreas Gruenbacher  <agruen@gnu.org>

	Use gnulib size_max module
	* bootstrap.conf (gnulib_modules): Add size_max.
	* configure.ac: Call gl_SIZE_MAX.

2015-03-07  Andreas Gruenbacher  <agruen@gnu.org>

	Version 2.7.5
	* NEWS: Update.

	build: update gnulib submodule to latest

	Allow absolute symlinks that lead back into the working directory
	* src/safe.c (cwd_stat_errno, cwd_stat): stat() result of ".".
	(read_symlink): When a symlink is absolute, check if it leads back into the
	working directory.  If it does, strip off the prefix above the working
	directory. If the symlink points to the working directory, return an empty
	path.
	(traverse_another_path): Recognize empty paths from read_symlink().
	* tests/symlinks: Absolute symlink test cases.

2015-03-05  Andreas Gruenbacher  <agruen@gnu.org>

	Describe better how the dirfd cache works

	Use overflow safe arithmetic for counting cache misses
	* src/safe.c: We don't need a long counter if we use overflow-safe arithmetic
	here.

	Also cache resolved symlinks
	When resolving a symlink in a pathname, we traverse each path component in the
	symlink and cache all of them.  At the end, add an additional cache entry for
	the symlink itself so that we don't have to resolve the symlink again (even
	though this will usually be cached).  Skip that if the symlink's parent isn't
	in the cache anymore, though.
	* src/safe.c (free_cached_dirfd): Remove from parent here instead of in
	callers. Move close() to remove_cached_dirfd() instead.
	(insert_cached_dirfd): Only insert if the entry's parent still exists; entries
	without parent are invalid (see compare_cached_dirfds()); "top-level" entries
	have cwd as their parent.
	(new_cached_dirfd): New function split off from openat_cached().
	(openat_cached): Use new_cached_dirfd() here.
	(traverse_another_path): When starting to resolve a symlink, create an unhashed
	dirfd cache entry for the symlink lookup result. When the symlink is completely
	resolved, add that entry to the cache.

	Invalidate child dirfd cache entries when their parent goes away
	If we don't do that, a directory could be removed from the cache, a new
	directory with the same dirfd could be created, and the entries from the old
	directory would appear in the new directory.
	* src/safe.c (struct cached_dirfd): Keep track of the children of each dirfd
	cache entry.
	(remove_cached_dirfd): Remove all the entry's children from the lookup hash,
	take them off the list of children, and initialize the children's
	children_link.  Then, remove the entry itself from its parent. This has no
	effect if the entry doesn't have a parent because then, children_link is empty.
	(openat_cached): Add new dirfd cache entries to their parent's list of children
	and initialize the entry's list of children.
	(traverse_another_path): Also initialize cwd's list of children.

	Convert lru list into a list_head list
	* src/safe.c (struct cached_dirfd): Replace prev and next with a lru_link
	list_head.
	(lru_list): Turn into a list_head.
	(lru_list_add, lru_list_del, lru_list_del_init): Replace by list_add(),
	list_del(), list_del_init().
	(insert_cached_dirfd): Get to the list entry from the embedded list_head with
	the list_entry() macro.

	Add list_head based double linked list
	* src/list.h: New data structure.
	src/Makefile.am (patch_SOURCES): Add list.h.

	Invalidate dirfd less aggressively
	src/safe.c (safe_rename, safe_rmdir): Only invalidate cache entries when the
	underlying sycall succeeds and the entry actually goes away.  This keeps the
	cache filled upon speculative rmdir when the directory may not be empty, for
	example.

2015-03-05  Tim Waugh  <twaugh@redhat.com>

	Add more path traversal test cases
	* tests/symlinks: Add more path traversal test cases.

2015-03-05  Andreas Gruenbacher  <agruen@gnu.org>

	Move path traversal error reporting into main()
	* src/safe.c (traverse_another_path): Don't report errors here.
	* src/patch.c (main): Instead, recognize and report them here. Detect when an
	output file name is invalid; it doesn't make sense to try creating a
	reject file based on the same outbut file name in that case.

	Limit the number of path components
	src/safe.c (MAX_PATH_COMPONENTS): The maximum number of path components
	allowed.
	(count_path_components): New function.
	(traverse_another_path): Fail if the number of path components gets too high.

	Follow directory symlinks within the working directory
	* src/safe.c (struct symlink): A symlink to resolve.
	(push_symlink, pop_symlink): New functions.
	(read_symlink): Create a new symlink stack entry.
	(traverse_next): Follow ".." components within the working directory. When
	hitting symlinks, "follow" them by reading and returning them.
	(traverse_another_path): Recursively traverse symlinks.

	Keep track of the directory hierarchy
	* src/safe.c (struct cached_dirfd): Add parent pointer. Now that we know our
	parent, we no longer need to duplicate its directory file descriptor.
	(lookup_cached_dirfd): Don't update the lru list here.
	(insert_cached_dirfd): The lru list may now be empty even if the cache is not.
	(put_path): New function to put a path back into the lru list.
	(openat_cached): Take cached entried off the lru list.  They are added back
	in put_path().
	(traverse_another_path): Put lookup result back into the lru list with
	put_path().

2015-02-28  Andreas Gruenbacher  <agruen@gnu.org>

	Refactor traverse_another_path() and helpers
	Prepare for keeping track of the directory hierarchy:
	* src/safe.c (traverse_another_path): Pass struct cached_dirfd to
	traverse_next().
	(traverse_next, openat_cached): Pass through struct cached_dirfd.

	Move error reporting out of make_tempfile()
	* src/util.c (make_tempfile): Remove error reporting here.
	* src/inp.c (plan_b): Readd error reporting here.
	* src/patch.c (main): Likewise.
	* src/pch.c (open_patch_file): Likewise.

	Minor cosmetic changes
	* src/safe.c: Minor cosmetic changes

2015-02-22  Andreas Gruenbacher  <agruen@gnu.org>

	Fix handling of renamed files
	When a file has already been renamed, make sure it is not renamed back to its
	old name.  Reported by Guido Draheim.
	* src/patch.c (main): Make sure we never rename a file back to its previous
	name. Report when a file was renamed already.
	* tests/copy-rename: Add "already renamed" test cases.

2015-02-10  Andreas Gruenbacher  <agruen@gnu.org>

	Fix symlinks test case on some architectures
	* src/safe.c: Include util.h for say(). Define EFTYPE if it isn't defined
	already.
	(traverse_another_path): When openat fails, also check for EMLINK, EFTYPE, and
	ENOTDIR. Change the error message to "file ... is not a directory" and only
	skip the rest of the patch instead of aborting.
	* tests/symlinks: Update.

2015-02-04  Andreas Gruenbacher  <agruen@gnu.org>

	Test suite portability fixes
	Reported and fixed (mostly) by Christian Weisgerber <naddy@mips.inka.de>:
	* tests/deep-directories: Avoid the bash >& redirection operator.
	* tests/no-mode-change-git-diff: Instead of "stat -c", use "ls -l  sed".
	* tests/read-only-files: A redirection failure for a special built-in causes
	some shells (FreeBSD sh, OpenBSD sh (pdksh), some bash --posix) to exit, and
	the colon command is a special built-in. Perform the redirection in a subshell.

	Switch from gen_tempname() to try_tempname()
	* Update gnulib submodule to latest.
	* src/util.c (try_safe_open_args, try_safe_open): Arguments and callback for
	try_tempname().
	(make_tempfile): Switch from gen_tempname() to try_tempname().

2015-02-02  Andreas Gruenbacher  <agruen@gnu.org>

	Check the result of the --follow-symlinks option
	* tests/symlinks: Check the result of treating a symlink as a file with
	--follow-symlinks.

2015-02-01  Andreas Gruenbacher  <agruen@gnu.org>

	Link patch with LIB_EACCESS where needed
	* src/Makefile.am (patch_LDADD): Add LIB_EACCESS here. At least on Solaris,
	faccessat() is implemented through eaccess() which is in the "gen" library.

	Fix minor signedness warning
	* src/pch.c (intuit_diff_type): Don't assign signed dummy value to unsigned
	variable.

	Use gnulib faccessat module
	* bootstrap.conf (gnulib_modules): Add faccessat.

2015-01-31  Andreas Gruenbacher  <agruen@gnu.org>

	Upate NEWS

	Fix indentation heuristic for context diffs
	Diffs can be indented by a variable number of spaces, tabs, or X characters.
	Make sure that intuit_diff_type() only accepts context diffs where the first
	and second line are indented identically, or else another_hunk() will fail.
	* src/pch.c (intuit_diff_type): Remember the indentation of the last line. Only
	recognize context diff hunks with the same amount of indentation on the first
	and second line.
	* tests/garbage: New test case.
	* tests/Makefile.am (TESTS): Add test case.

2015-01-31  Quentin Casasnovas  <quentin.casasnovas@oracle.com>

	patch: git-diff mode: do not change permissions if there isn't an explicit mode change.

	tests: add a test case for unwanted mode changes.

	test-lib.sh: factorize require_* functions
	Since the code is identical when just checking if a utility is present on
	the system or not, we can factorize it.

2015-01-31  Andreas Gruenbacher  <agruen@gnu.org>

	Add test case for patch behind symlink
	* tests/symlinks: Add a test case where the patch file itself is in a path that
	follows a symbolic link; we want to continue allowing that.

2015-01-31  Tim Waugh  <twaugh@redhat.com>

	Allow arbitrary symlink targets again
	* src/util.c (symlink_target_is_valid): Remove.
	(move_file): Remove symlink target checking.
	* tests/symlinks: Update test case.

2015-01-31  Andreas Gruenbacher  <agruen@gnu.org>

	Update list of gnulib modules used
	* bootstrap.conf (gnulib_modules): Remove lchmod, lstat, mkdir, readlink,
	rename, mkdir, symlink, unlink, utimens. Add fchownat, fchmodat, fstatat,
	mkdirat, openat, readlinkat, renameat, symlinkat, unlinkat, utimensat.
	* src/util.h: Don't include <utimens.h> anymore.

	Use symlink-safe system call replacements
	Use the symlink-safe replacements for system calls in many places throughout
	the code: In some places this makes patch safe against path traversal attacks;
	in other places, it saves the kernel from having to re-traverse the pathnames.
	* src/inp.c (plan_b): Use safe_open() + fdopen() instead of fopen().
	* src/util.c (copy_attr): Document why we are safe here.
	(create_backup): Use safe_open() instead of creat().

2015-01-31  Tim Waugh  <twaugh@redhat.com>

	Add symlink-safe system call replacements
	Add wrappers around system calls that traverse relative pathnames without
	following symlinks. Written by Tim Waugh <twaugh@redhat.com> and Andreas
	Gruenbacher <agruenba@redhat.com>.
	* src/safe.h: Declare functions here.
	* src/safe.c: Implement safe_* system call replacements that do not follow
	symlinks along pathnames. Pathname components are resolved with openat().
	Lookup results are cached to keep the overhead reasonably low.
	* tests/deep-directories: New path traversal cache test.
	* src/Makefile.am (patch_SOURCES): Add safe.[ch].
	* tests/Makefile.am (TESTS): Add new test.

2015-01-31  Andreas Gruenbacher  <agruen@gnu.org>

	build: update gnulib submodule to latest

2015-01-31  Tim Waugh  <twaugh@redhat.com>

	Avoid closing file descriptor twice
	* src/patch.c (main): Make sure we don't close() outfd after passing it on to
	fdopen(): the file descriptor might have been reused in the meantime.

2015-01-29  Andreas Gruenbacher  <agruen@gnu.org>

	Remove unused variable
	* src/pch.c (name_is_valid): Remove unused variable.

2015-01-22  Andreas Gruenbacher  <agruen@gnu.org>

	Fix the fix for CVE-2015-1196
	* src/util.c (filename_is_safe): New function split off from name_is_valid().
	(symlink_target_is_valid): Explain why we cannot have absolute symlinks or
	symlinks with ".." components for now.
	(move_file): Move absolute filename check here and explain.
	* tests/symlinks: Put test case with ".." symlink in comments for now.
	* NEWS: Add CVE number.

2015-01-21  Andreas Gruenbacher  <agruen@gnu.org>

	For renames and copies, make sure that both file names are valid
	* src/patch.c (main): Allow there_is_another_patch() to set the
	skip_rest_of_patch flag.
	* src/pch.c (intuit_diff_type): For renames and copies, also check the "other"
	file name.
	(pch_copy, pch_rename): Now that both names are checked in intuit_diff_type(),
	we know they are defined here.

2015-01-20  Andreas Gruenbacher  <agruen@gnu.org>

	Fail when out of memory in set_hunkmax()
	src/pch.c (another_hunk): Call set_hunkmax() from here to make sure it is
	called even when falling back from plan A to plan B.
	(open_patch_file): No need to call set_hunkmax() anymore.
	src/pch.c (set_hunkmax): Fail when out of memory. Make static.
	src/pch.h: Remove set_hunkmax() prototype.

	Don't try applying hunks at offsets that can't work
	* src/patch.c (locate_hunk): Start trying to apply the hunk at the minimum
	offset which puts the hunk in the valid range of lines. This will often still
	be offset 0.

2015-01-20  Andreas Gruenbacher  <andreas.gruenbacher@gmail.com>

	Move symlink_target_is_valid() and cwd_is_root()
	* src/util.c: Move symlink_target_is_valid() and cwd_is_root() here from
	src/pch.c.

2015-01-19  Andreas Gruenbacher  <andreas.gruenbacher@gmail.com>

	Make sure symlinks don't point outside working directory (CVE-2015-119)
	When creating symlinks from git-style patches, make sure the symlinks don't
	point above the current working directory.  Otherwise, a subsequent patch could
	use the symlink to write outside the working directory.

	* src/pch.c (symlink_target_is_valid): New function to check for valid symlink
	targets.
	* src/util.c (move_file): Use symlink_target_is_valid() here.
	* tests/symlinks: Add valid and invalid symlink test cases.

2014-11-30  Andreas Gruenbacher  <agruen@linbit.com>

	Add line number overflow checking
	* bootstrap.conf: use intprops module.
	* src/common.h: Define LINENUM_MIN and LINENUM_MAX macros.
	* src/pch.c (another_hunk): Add line number overflow checking.  Based on Robert
	C. Seacord's INT32-C document for integer overflow checking and Tobias
	Stoeckmann's "integer overflows and oob memory access" patch for FreeBSD.

2014-11-30  Andreas Gruenbacher  <agruen@linbit.com>

	More savebuf/savestr error handling
	* bootstrap.conf: use xmemdup0 module.
	* src/pch.c (there_is_another_patch): Use xmemdup0 instead of savebuf when we
	cannot recover from out-of-memory situations.
	(intuit_diff_type): Likewise, use xstrdup instead of savestr.
	(another_hunk): Handle the case when savestr returns NULL.
	* src/util.c (fetchname, parse_name): Use xmemdup0 instead of savebuf when we
	cannot recover from out-of-memory situations.

	Bugs pointed out by Tobias Stoeckmann <tobias@stoeckmann.org>.

2014-11-30  Tobias Stoeckmann  <tobias@stoeckmann.org>

	savebuf/savestr error handling
	* src/patch.c (get_some_switches): The function savebuf (and therefore savestr)
	copies strings using malloc.  If malloc fails, NULL is returned.  This is
	intentional behavior so that in case of failure during "plan a" patching, "plan
	b" can step in.  The return value has to be properly checked for NULL.  If the
	return value must not be NULL, use xstrdup instead.

2014-11-30  Andreas Gruenbacher  <andreas.gruenbacher@gmail.com>

	build: update gnulib submodule to latest
	* src/merge.c (compute_changes): The TOO_EXPENSIVE heuristic in diffseq has
	been removed, including compareseq's find_minimal parameter and the context's
	too_expensive limit.  Adjust.

2014-11-10  Jean Delvare  <jdelvare@suse.de>

	Drop useless test in another_hunk()
	src/pch.c (another_hunk): This test will always succeed.

2014-10-30  Tobias Stoeckmann  <tobias@stoeckmann.org>

	Buffer overflow on malicious input file
	There is a hard to reach but possible buffer overflow when using
	patch with a very large (modified) input file.  I doubt you will ever
	see this with a 64 bit system, but it's possible with 32 bit:

	$ echo hello > file1
	$ echo world > file2
	$ diff -Nau file1 file2 > file.diff

	Nothing fancy so far.  Adjust file1 so it contains at least one line that
	is 2 GB in size.  Larger is fine too, but stay below 4 GB.

	$ tr '\0' c < /dev/zero | dd bs=1K count=2097152 of=file1

	Now try to patch it.

	$ patch -Np0 -i file.diff
	Segmentation fault

	The issue is in patch's "plan b" strategy  (If your system would still
	want to use "plan a", force patch to use "plan b" through debug flag).

	Plan b writes lines into a temporary file, with equally long lines, so
	it can use a buffer mechanism to access them in a kind of randomly
	fassion.  In order to do that, it retrieves the longest line.

	In this example, it will encounter the 2 GB line and stores that as the
	longest one.  Afterwards it will adjust the tibufsize variable to be
	large enough:

	  for (tibufsize = TIBUFSIZE_MINIMUM;  tibufsize < maxlen;  tibufsize <<= 1)
	    /* do nothing */ ;

	Due to maxlen's size (2 GB), tibufsize will be SIZE_T_MAX, i.e. 4 GB.
	A few lines later it allocates space for the tibuf buffers:

	  tibuf[0] = xmalloc (2 * tibufsize);
	  tibuf[1] = tibuf[0] + tibufsize;

	This will allocate 0 bytes because tibufsize overflowed.  The next
	time patch writes into the buffer, a segmentation fault will occur...
	Depends on your system how long it takes until that happens. ;)

	The fix is simple:  Bail out on lines that are too long.  Patch already
	does that for files that have too many lines.

2014-08-13  Andreas Gruenbacher  <agruen@linbit.com>

	Improve error message when refusing to delete file
	* src/patch.c: Improve error message.
	* tests/create-delete: Update the test case.

2013-12-09  Andreas Gruenbacher  <agruen@linbit.com>

	Correct the --help text of option --merge
	* src/patch.c (option_help): The --merge option does not have a short
	form; update the help text.

2013-08-19  Steven Rostedt  <rostedt@goodmis.org>

	Preserve function names in reject files
	* src/patch.c (main): Preserve function names in reject files.
	* tests/reject-format: Update the test case.

2013-07-30  Andreas Gruenbacher  <agruen@linbit.com>

	Test case for the dry-run fix
	* tests/create-directory: Add test case here.

	In dry-run mode, create temporary files in a temporary directory
	* src/util.c (make_tempfile): Do not create temporary files in the final output
	directory when in dry-run mode: the path may be read-only.  In addition, we do
	not want to leave intermediary empty output directories around.

2013-06-18  Eric S. Raymond  <esr@thyrsus.com>

	Fix some formatting problems in the manpage
	* patch.1: Use higher-level markup that translates better into HTML and other
	formats.  (With changes by Andreas Gruenbacher.)

2013-05-02  Stefano Lattarini  <stefano.lattarini@gmail.com>  (tiny change)

	build: don't use -Werror in AM_INIT_AUTOMAKE
	Doing so prevents bootstrapping with bleeding-edge autotools,
	because of harmless deprecation warnings (that are not planned
	to become hard errors for at least a few years to come).  And
	unfortunately, options in AM_INIT_AUTOMAKE take precedence over
	those given on the command line (this is a long-time wart of
	automake).

	* configure.ac (AM_INIT_AUTOMAKE): Drop '-Werror' option.

2013-03-10  Andreas Gruenbacher  <agruen@linbit.com>

	Fix removing empty directories
	Reported by Thomas Moschny <thomas.moschny@gmx.de>:
	src/patch.c (main): Temporary output files are created in the same directory as
	the output file.  Make sure to remove them before removing empty files and
	their empty ancestor directories; else the directories won't be empty.
	tests/remove-directories: Add directory removal test case.
	tests/Makefile.am (TESTS): Add new test case.

2013-01-03  Andreas Gruenbacher  <agruen@linbit.com>

	Clarify the description of option --forward
	* patch.man: Clarify the description of option --forward.

2012-10-04  Andreas Gruenbacher  <agruen@linbit.com>

	Initialize data structures early enough
	* src/patch.c (main): Initialize data structures early enough, before error
	paths can access them.
	* tests/bad-usage: Test bad command line usage.
	* tests/Makefile.am (TESTS): Add bad-usage here.

2012-09-30  Andreas Gruenbacher  <agruen@linbit.com>

	Don't fail test suite if printf '\0' is broken
	* tests/create-delete: Skip binary diff test if printf '\0' is broken.

2012-09-28  Andreas Gruenbacher  <agruen@linbit.com>

	Version 2.7.1

	build: update gnulib submodule to latest

	Repair 'backup of unmodified file' test
	tests/create-delete: Repair 'backup of unmodified file' test.

	Use gnulib errno module instead of our own default ENOTSUP fallback
	* bootstrap.conf (gnulib_modules): Add errno module.
	* src/common.h: Remove ENOTSUP fallback.

	Trailing whitespace fix
	* NEWS: Trailing whitespace fix.

2012-09-26  Andreas Gruenbacher  <agruen@linbit.com>

	Improve the previous commit
	* src/patch.c: Only print the "file is not empty after patch" message when
	trying to delete the output file.  Say that we were trying to delete the file.
	* tests/create-delete: Fix the expected messages.  Add test cases for the
	--remove-empty-files and --posix options.
	* NEWS: Better describe this change.

2012-09-25  Andreas Gruenbacher  <agruen@linbit.com>

	Only expect files to become empty if the patch says so
	Test cases based on patches from Dmitry V. Levin <ldv@altlinux.org>.
	* src/patch.c (main): Only expect files to become empty if the patch says so.
	* NEWS: Document this change.
	* tests/create-delete: Add (more) empty vs. non-empty test cases.

2012-09-22  Jim Meyering  <meyering@redhat.com>

	build: avoid gcc warnings from -Wsuggest-attribute=format
	* configure.ac (WARN_CFLAGS): Disable -Wsuggest-attribute=format,
	to avoid some warnings that are not worth working around.

2012-09-22  Andreas Gruenbacher  <agruen@linbit.com>

	Update NEWS
	* NEWS: Update.

	Improve messages when in --dry-run mode
	* src/patch.c (main): Say that we are checking a file and not that we are
	patching it in --dry-run mode.  Don't say "saving rejects to file" when we
	don't create reject files.
	* tests/reject-format: Add rejects with --dry-run test case.
	* tests/bad-filenames, tests/fifo, tests/mixed-patch-types: Update.

	Improve handling of LF vs. CRLF line endings
	* src/patch.c (check_line_endings): New function.
	(main): When a hunk fails, report when the line endings differ between the
	input file and the patch.
	* src/pch.c (there_is_another_patch): When saying that we strip trailing CRs,
	also say how to turn this off.
	* tests/crlf-handling: Update changed messages.  Add test case that fails.

	Ignore when preserving extended attributes is not supported or allowed
	* src/common.h (ENOTSUP): Make sure this error code is defined.
	* src/util.c (set_file_attributes): Ignore ENOSYS, ENOTSUP, and EPERM errors.

2012-09-20  Andreas Gruenbacher  <agruen@linbit.com>

	Add a missing explanation in the tests/crlf-handling test case
	* tests/crlf-handling: Add explanation.

2012-09-19  Andreas Gruenbacher  <agruen@linbit.com>

	Add --follow-symlinks option for backwards compatibility
	* src/common.h (follow_symlinks): New variable.
	* src/patch.c (longopts): Add new --follow-symlinks option.
	(get_some_switches): Recognize the new option.
	* src/util.c (stat_file): Follow symlinks if requested.
	* patch.man: Document the new option.
	* tests/symlinks: Add test case.

	Introduce function to lstat all input files
	* src/util.c (stat_file): New function.
	(move_file): Use here.
	* src/util.h (stat_file): Declare here.
	* src/inp.c (get_input_file): Use here.
	* src/patch.c (main): Use here.
	(delete_file_later): Use here.
	* src/pch.c (there_is_another_patch): Use here.
	(intuit_diff_type): Use here.

	Use stat where we want to follow symlinks
	* src/pch.c (prefix_components): Follow symlinks.
	(cwd_is_root): Follow symlinks.

	Document command-line options in alphabetic order
	* patch.man: The options are mostly listen in alphabetical order; stick to
	that.

2012-09-18  Andreas Gruenbacher  <agruen@linbit.com>

	Fix file truncation when switching from git diff to non-git diff
	* src/patch.c (main): Output queued output files only when switching from a git
	diff to a non-git diff.  This can modify the input file, so make sure to
	stat() it again.
	* tests/concat-git-diff: Add test case growing a file with a git diff and then
	with a non-git diff; without this fix; the result would be truncated.

	Rename get_input_file() parameter to clarify code
	* src/inp.c (get_input_file): Rename mode parameter to file_type, it's all we
	care about here.

	Improve error message when patching a file of different type
	* src/inp.c (get_input_file): Improve error message when patching a file of
	different type.
	* tests/symlinks: Update test case.

	Minor test case updates
	* tests/dash-o-append: Minor update (still expected to fail).
	* tests/symlinks: Minor update.

2012-09-17  Andreas Gruenbacher  <agruen@linbit.com>

	Disable xattrs if libattr doesn't implement attr_copy_action()
	* m4/xattr.m4 (gl_FUNC_XATTR): Only enable USE_XATTR if both attr_copy_file()
	and attr_copy_action() are defined.
	* src/util.c (copy_attr_check): No fallback needed if attr_copy_action() is not
	defined.

	Allow to use potentially dangerous filenames from the root directory
	* src/pch.c (cwd_is_root): New function to check if we are in the root
	directory of a filename.
	(name_is_valid): Allow to use potentially dangerous filenames when the current
	working directory is the root directory: from there, those names are not
	any more dangerous than other names.
	* tests/bad-filenames: New test case.

2012-09-14  Andreas Gruenbacher  <agruen@linbit.com>

	Update leftover license notice in README
	* README: Change leftover GPLv2 license notice to GPLv3.

	Check if libattr implements attr_copy_action()
	* m4/xattr.m4 (gl_FUNC_XATTR): Check if attr_copy_action() is defined.
	* src/util.c: If attr_copy_action() doesn't exist, fall back to the default
	copy_attr_file() behavior of copying most extended attributes except ACLs.

2012-09-13  Andreas Gruenbacher  <agruen@linbit.com>

	Change the type of *_needs_removal from int to bool

	In a git-style diff, make sure not to unlink the original by accident
	* src/patch.c (main): Fail if a file is not empty as expected.
	(output_files): In a git-style diff, make sure not to unlink the original when
	making a backup of an unmodified file.
	* tests/create-delete: Fix failed-file-deletion test and add
	successful-file-deletion test.

	Do not pass file type in mode of open(..., O_CREAT, mode)
	* src/patch.c (main): Strip file type off of create mode for temporary output
	files: some systems don't ignore the file type; we want to create a regular
	file even when patching a symlink.

	Add note on GPLv3 license change in version 2.6
	* NEWS: Add note.

2012-09-12  Andreas Gruenbacher  <agruen@linbit.com>

	Version 2.7
	* NEWS: Update.

	maint: update gnulib submodule

2012-08-11  Andreas Gruenbacher  <agruen@linbit.com>

	Support double-quoted filenames in all context diff formats
	* src/util.c (fetchname): Always recognize double-quoted filenames.
	* src/util.h (fetchname): Update prototype.
	* src/pch.c (intuit_diff_type): Update calls to fetchname().
	* tests/quoted-filenames: Change to a normal unified diff.
	* NEWS: Update.

2012-08-08  Andreas Gruenbacher  <agruen@linbit.com>

	Remove SHA1 hashes from the file id cache
	* src/util.c (file_id): Remove sha1 field.
	(update_sha1, lookup_sha1): Remove functions.
	* src/util.h (update_sha1, lookup_sha1): Remove declarations.

	Detect concatenated git-style patches by tracking what's in the output queue
	* src/patch.c (main): Instead of looking at the SHA hashes to detect
	concatenated git-style patches, detect when a file to write to is already in
	the output queue.
	* tests/concat-git-diff: Add create/delete tests.

	In the file id cache, allow to flag files in the output queue
	* src/util.c (file_id): Add queued_output field.
	(__insert_file_id): Initialize queued_output.
	(set_queued_output, has_queued_output): New functions.
	* src/util.h (set_queued_output, has_queued_output): Declare.

2012-08-08  Dmitry V. Levin  <ldv@altlinux.org>

	Add another git-style diff concatenation regression test
	* tests/concat-git-diff: Add test case here.

2012-08-08  Andreas Gruenbacher  <agruen@linbit.com>

	maint: ignore more build artifacts

2012-08-07  Andreas Gruenbacher  <agruen@linbit.com>

	Change outst variable name to tmpoutst to be less misleading
	* src/patch.c (main): Rename outst to tmpoutst.

2012-08-02  Andreas Gruenbacher  <agruen@linbit.com>

	In git-style diffs, create new files immediatetly and only remember files to modify
	* src/patch.c (output_file): Create new files immediately.  Document why
	things are implemented that way.
	* tests/concat-git-diff: Fix glitch in test case.

2012-08-01  Jim Meyering  <meyering@redhat.com>

	Don't close a negative file descriptor
	* src/inp.c (re_input): Don't close FD if it's negative.

2012-08-01  Andreas Gruenbacher  <agruen@linbit.com>

	Add file create test case which still needs to be fixed
	* tests/concat-git-diff: Add file create test case.

2012-08-01  Jim Meyering  <meyering@redhat.com>

	build: remove unnecessary if-before-free
	* src/util.c (update_sha1): Remove unnecessary if-before-free,
	to avoid "make syntax-check" failure.

	build: mark an internal function as "pure"
	* src/pch.c (sha1_says_nonexistent): Apply _GL_ATTRIBUTE_PURE,
	to avoid failure with -Werror=suggest-attribute=pure.

2012-08-01  Andreas Gruenbacher  <agruen@linbit.com>

	maint: update bootstrap and gnulib submodule
	* bootstrap: Update from gnulib.

	Try to recognize concatenated git diffs and handle them appropriately
	* src/patch.c (main): Remember the "before" SHA1 hashes of git-style patches;
	the same patch will always use the same "before" SHA1 for a specific file.
	Try to recognize concatenated patches based on that.
	* tests/concat-git-diff: New test case.
	* tests/Makefile.am (TESTS): Add new test case.

	Allow to process only part of the deferred output file list
	* src/patch.c (output_files): Add parameter to specify which file to stop at.
	(main): Pass NULL to output_files() to process the entire list.

2012-07-31  Andreas Gruenbacher  <agruen@linbit.com>

	Allow to remember SHA1 hashes in the file id cache
	* src/util.c (file_id): New sha1 field.
	(__insert_file_id): Split off from insert_file_id().  Initialize sha1 field.
	(__lookup_file_id): Split off from lookup_file_id().
	(update_sha1): Remember SHA1 hash of a file or update the remembered SHA1 hash.
	(lookup_sha1): Look up the SHA1 hash of a file.
	* src/util.h (update_sha1, lookup_sha1): Declare.

	Accessor functions for SHA1 hashes in git-style diffs
	* src/pch.c (p_sha1): New variable.
	(get_sha1): New function for saving a sha1 checksum.
	(sha1_says_nonexistent): Take a NULL terminated string instead of an end
	pointer.
	(intuit_diff_type): Remember the SHA1 hashes from index headers in git-style
	diffs in p_sha1.
	(pch_sha1): New function for accessing p_sha1.
	* src/pch.h (pch_sha1): Declare.

	Add missing "diff --git" index lines
	* tests/copy-rename, tests/criss-cross, tests/file-modes,
	tests/mixed-patch-types, tests/quoted-filenames: Add missing index lines in the
	"dif --git" test cases: We will use some of them for consistency checks soon.

2012-04-24  Andreas Gruenbacher  <agruen@linbit.com>

	Fix segfault in output_file_later()
	Bug reported by Dmitry V. Levin <ldv@altlinux.org>.
	* src/patch.c (output_file_later): Fix case where the output file is identical
	with the input file (and to == NULL).

2012-04-17  Andreas Gruenbacher  <agruen@linbit.com>

	maint: update bootstrap and gnulib submodule
	* bootstrap: Update from gnulib.

	Update NEWS
	* NEWS: Update.

	Only warn when trying to modify read-only files
	Failing when trying to patch read-only files causes various users of patch to
	break.  Instead, warn by default and introduce a command line option for
	choosing a different behavior.
	* patch.man: Describe the new behavior and command-line option.
	* src/patch.c (read_only_behavior): New variable.
	(main): Implement the new behavior.
	(longopts): Add the new --read-only option.
	(option_help): Describe the new behavior.
	(get_some_switches): Recognize the new --read-only option.

	Fix "delete file which does not exist" test case
	* tests/create-delete: Remove left-over file f.orig before the test.

	For git-style patch files, do not output files immediately
	In git-style patch files, all patches refer to the initial state of the input
	files; files cannot be modified more than once.  Implement these semantics by
	creating all output files once all patches in the patch file have been
	processed.
	* src/patch.c (init_files_to_output, output_files): Add prototypes.
	(main): Remember which type of patch file we are processing.  Initialize the
	output files list.  Output files of git-style patches once all patches have
	been read, or when from git-style to normal patches.
	(file_to_output): New struct.
	(files_to_output): List of the files to output.
	(output_file, output_file_now, output_file_later): Either queue a file for
	deletion, remember to output a file later (git-style), or output the file
	immediately (normal).
	(dispose_file_to_output, init_files_to_output, output_files,
	 forget_output_files): New functions.
	(gl_list_clear): Should be provided by gnulib but isn't.
	(cleanup): Clean up any left-over temporary output files as well.
	* tests/Makefile-am (XFAIL_TESTS): Remove criss-cross; this test case works now.
	* tests/mixed-patch-types: Patch files that change from normal to git-style, or
	from git-style to normal.

	Export the patch type
	* src/pch.c (p_git_diff): New global variable.
	(intuit_diff_type): Use p_git_diff instead of a local variable.
	(pch_git_diff): New function.

	Remove invalid symlink test case
	* tests/symlinks: Remove test case which deletes and then recreates a symlink:
	all patches in a git-style input file must refer to the "before" state; the
	test case is invalid.

	No longer remember backup files
	Remembering backup files was needed because we would have lost track of deleted
	files before -- but we don't delete files immediately anymore.
	* src/util.c (create_backup_copy): No longer remember backup files.
	(create_backup): Likewise; update comment.
	(move_file): Update create_backup() call.
	* src/util.h (create_backup): Update prototype.
	* src/patch.c (output_file): Update create_backup() call.

	Do not delete files immediately
	Fixes the bug that more than one numbered backup would be created when a patch
	file deletes and recreates a file.
	* bootstrap.conf (gnulib_modules): Add linked-list and xlist modules.
	* src/util.h (file_id_type): Add DELETE_LATER and OVERWRITTEN types.
	(create_backup, set_file_attributes): Update prototype.
	(insert_file_id): Add prototype.
	* src/util.c (insert_file_id): Export.
	(set_file_attributes, create_backup_copy): Make the st argument const.
	(create_backup): Pass in to_st instead of returning it from create_backup().
	This obsoletes the to_errno argument.
	(move_file): Determine to_st here and pass it to create_backup().  Remember
	when a file is overwritten.
	* src/patch.c (output_file): Add to_st parameter.  Remember files to delete
	instead of deleting them immediately.  Pass from-st to create_backup().
	(file_to_delete): New struct.
	(init_files_to_delete, delete_file_later, delete_files): New functions.
	(main): Use init_files_to_delete() and delete_files().  Pass to_st to
	output_file() where we already have it.
	* src/pch.c (intuit_diff_type): Assume that files which are marked for deletion
	don't exist.

	Create and delete output files in a single function
	* src/patch.c (output_file): New function for creating or deleting an output
	file and backing the old file up as needed.
	(main): Use the new function.
	* src/util.c (move_file): Allow FROM_NEEDS_REMOVAL to be NULL.

	Add a type field to entries in the file id cache
	* src/util.h (file_id_type): New enum.
	* src/util.c (file_id): Add a file_id_type field.
	(insert_file_id): Rename from insert_file(); specify a type when inserting a
	file id.
	(lookup_file_id): Rename from file_id_exists(); return a file id type.
	(create_backup_copy, create_backup, move_file): Use insert_file_id() instead of
	insert_file(), and lookup_file_id() instead of file_already_seen().
	* src/patch.c (main): Use lookup_file_id() instead of file_already_seen().

	Switch from the `old' gnu quoting style to the 'new' one
	* src/common.h, src/patch.c, src/pch.c, src/util.c, src/util.h: Switch from the
	`old' gnu quoting style to the 'new' one in messages and comments.

2012-04-06  Andreas Gruenbacher  <agruen@linbit.com>

	Fix use-after-free bug in name_is_valid()
	Reported by Steffen Sledz in
	https://bugzilla.novell.com/show_bug.cgi?id=755136 via Jean Delvare.
	Bug introduced in commit v2.6.1-115-ge0f7075; fixed with help from Jim
	Meyering <meyering@redhat.com>.
	* src/common.h (ARRAY_SIZE): New macro.
	* src/pch.c (invalid_names): New global variable for remembering bad names.
	(intuit_diff_type): Reset invalid_names for each new patch; the names from the
	previous patch have already been freed.
	(name_is_valid): Use invalid_names.  Make the code "safer" and avoid
	duplication.

	Require automake-1.11.2
	* configure.ac (AM_INIT_AUTOMAKE): Require version 1.11.2 which introduced the
	AM_PROG_AR macro, used since commit 297f9e7d.

2012-02-25  Jim Meyering  <meyering@redhat.com>

	build: update gnulib submodule to latest

2012-02-16  Jim Meyering  <meyering@redhat.com>

	build: update bootstrap from gnulib and adapt
	* bootstrap: Update from gnulib.
	* bootstrap.conf (gnulib_tool_option_extras): Define.
	* lib/Makefile.am: Initialize numerous automake variables so that
	generated code in gnulib.mk may use += to append to them.
	* configure.ac: Add AM_PROG_AR, to placate newer automake.

2012-01-01  Jim Meyering  <meyering@redhat.com>

	maint: enable the sc_space_tab syntax-check rule
	* cfg.mk (local-checks-to-skip): Remove sc_space_tab,
	thus enabling this syntax-check rule.
	* tests/quoted-filenames: Use TAB-space, not space-TAB.

	maint: enable the useless_cpp_parens syntax-check rule
	* cfg.mk (local-checks-to-skip): Remove sc_useless_cpp_parens,
	thus enabling this syntax-check rule.
	* src/patch.c: Remove unneeded parentheses.

	maint: update all copyright year number ranges
	Run "make update-copyright".

2011-12-14  Jim Meyering  <meyering@redhat.com>

	build: update to latest gnulib and adapt
	Mark functions as pure of const, per recommendations enabled by
	new gcc -W options.  Apply _GL_ATTRIBUTE_PURE and _GL_ATTRIBUTE_CONST.
	* src/common.h: Apply new function attributes.
	* src/pch.c: Likewise.
	* src/pch.h: Likewise.
	* src/util.c: Likewise.
	* src/util.h: Likewise.
	* configure.ac: Use -Wno-format-nonliteral.
	* m4/.gitignore: Update.
	* gnulib: Update to latest.
	* cfg.mk: Exempt src/util.c from two tests, to avoid new
	"make syntax-check" failures.

2011-12-09  Andreas Gruenbacher  <agruen@linbit.com>

	Timestamp not set when creating files with --set-time or --set-utc
	* src/util.h (enum file_attributes): Add FA_XATTRS flag for extended
	attributes.
	* src/patch.c (main): Use set_file_attributes() even when the infile doesn't
	exist: it may still set the file time (FA_TIMES).  Omit all other FA_ flags if
	infile doesn't exist.  Otherwise, add FA_XATTRS as well.
	* src/util.c (set_file_attributes): Only copy extended attributes if FA_XATTRS
	is set.  Avoid using st where it may be undefined.
	* tests/preserve-mode-and-timestamp: Add file create test.

2011-10-12  Stefano Lattarini  <stefano.lattarini@gmail.com>

	tests: specify test runner in LOG_COMPILER, not in TEST_ENVIRONMENT
	* tests/Makefile.am (TESTS_ENVIRONMENT): Don't use $(SHELL) here
	to ensure the test scripts are run through it; instead, ...
	(LOG_COMPILER): ... use it here.

2011-10-11  Jim Meyering  <meyering@redhat.com>

	give a diagnostic rather than a failed assertion for a mangled patch
	* src/pch.c (another_hunk): Rather than asserting(C), issue the
	"replacement text or line numbers mangled ..." diagnostic when !C.
	* tests/mangled-numbers-abort: New test for the above.
	* tests/Makefile.am (TESTS): Add it.
	* NEWS: Mention it.
	Reported by Gabriel Vlasiu via Tim Waugh.
	See also http://bugzilla.redhat.com/738959

2011-08-11  Jim Meyering  <meyering@redhat.com>

	build: use largefile module and update to latest gnulib
	* configure.ac: Remove AC_SYS_LARGEFILE, subsumed by ...
	* bootstrap.conf (gnulib_modules): ...this.  Use largefile module.
	* gnulib: Update to latest.
	This is useful to Mac OS X 10.5 users if/when configure
	is generated using autoconf prior to v2.68-80-gdb2f2e0.

	build: include .version in tarball to avoid distcheck failure
	* Makefile.am (EXTRA_DIST): Append .version, to avoid "make distcheck"
	failure when run from an unpacked tarball.
	Reported by Iain Nicol.

2011-08-11  Andreas Gruenbacher  <agruen@linbit.com>

	README: Describe where to go from a "git clone"
	* README: Refer users to README-hacking after a "git clone".

2011-05-25  Jim Meyering  <meyering@redhat.com>

	don't call fdopen with a negative FD upon dup failure
	* src/patch.c (open_outfile): If dup fails, don't clobber its
	errno value by calling fdopen with -1.

	plug a leak in inp.c's plan_a
	* src/inp.c (plan_a): Don't leak "buffer" upon early return.

	emit one more diagnostic with the required "program_name: " prefix
	* src/util.c: Include "error.h".
	(ask): Use error, not perror.  The latter would not have included
	the usual "program name: " prefix.

	remove side effect from assert
	* src/util.c (parse_c_string): Don't increment "s" in assert.

	explicitly ignore close return value to placate static analyzers
	* src/util.c: Include "ignore-value.h".
	(ask): Use ignore_value to tell tools that yes, we really do
	mean to ignore any close failure on this error path.
	* bootstrap.conf (gnulib_modules): Add ignore-value.

	plug a leak in fetchname
	* src/util.c (fetchname): Don't leak "timestr" when returning early.

2011-05-25  Andreas Gruenbacher  <agruen@linbit.com>

	avoid a used-uninitialized error in fetchname
	* src/util.c (fetchname): Avoid a used-uninitialized error.
	Before, when "*t == '\n'", stamp.tv_nsec would have been
	used undefined.  The fix is to set that member rather than
	stamp.tv_sec, which is already set to the desired value.
	This was reported by coverity.

2011-05-25  Jim Meyering  <meyering@redhat.com>

	plug a leak in bestmatch
	* src/bestmatch.h (bestmatch): Don't leak V when returning early.

2011-03-27  Jim Meyering  <meyering@redhat.com>

	maint: ignore more build artifacts

	build: don't turn off -Wmissing-declarations
	* configure.ac (WERROR_CFLAGS): Don't turn off -Wmissing-declarations
	and admit that it's not worth fixing the few warnings triggered
	by -Wmissing-format-attribute.

	build: don't turn off -Wmissing-prototypes
	* configure.ac (WERROR_CFLAGS): Don't turn off -Wmissing-prototypes.
	* src/pch.c (skip_hex_digits): Declare static.
	* src/bestmatch.h (bestmatch): Likewise.

	maint: remove now-unneeded macro definitions
	* bootstrap.conf (gnulib_modules): Include gnulib's signal module,
	so that signal.h guarantees definition of certain macros.
	* src/util.c (SIG_BLOCK, SIG_UNBLOCK, SIG_SETMASK): Remove definition.
	Now, gnulib guarantees that these are defined.
	* src/common.h (SIZE_MAX): Likewise.
	* cfg.mk (local-checks-to-skip): Enable the
	sc_prohibit_always-defined_macros check, now that it passes.

	maint: use gnulib's progname module
	* src/patch.c (main): Call set_program_name rather than
	initializing program_name explicitly.
	* src/common.h: Include progname.h rather than declaring the extern,
	program_name.
	* bootstrap.conf (gnulib_modules): Add progname.
	* cfg.mk (local-checks-to-skip): Remove sc_program_name,
	thus enabling this test.

	maint: update bootstrap and gnulib submodule
	* bootstrap: Update from gnulib.
	* cfg.mk (local-checks-to-skip): Remove (thus, enable)
	sc_copyright_check, now that the gnulib submodule is up to date.

	maint: update copyright date year ranges to include 2011
	* bootstrap.conf (gnulib_modules): Add update-copyright.
	Run "make update-copyright".

	build: avoid three gcc warnings
	* src/patch.c (mangled_patch): Add "noreturn" attribute.
	* src/pch.h (pch_timestamp): Remove ignored "const" attribute.
	* src/version.c (XTERN): Remove unused #undef and #define.

	tests: temporarily disable failing syntax-check rules
	* cfg.mk (local-checks-to-skip): Define, to skip all of the
	currently-failing syntax-check rules.  We'll reenable them
	one by one, as problems are addressed.

2011-03-26  Jim Meyering  <meyering@redhat.com>

	build: accept new configure-time option --enable-gcc-warnings
	* configure.ac: Enable many options.
	* bootstrap.conf (gnulib_modules): Add manywarnings.
	* src/Makefile.am (AM_CFLAGS): Use $(WARN_CFLAGS) and $(WERROR_CFLAGS).

	maint: avoid non-portable use of test -a
	With these changes, "make sc_prohibit_test_minus_ao" almost passes.
	Uses of "test -o" remain.
	Note: unchecked uses of test -ot/-nt also remain.
	* tests/empty-files: Use "test C1 && test C2", not "test C1 -a C2"
	* tests/merge: Likewise.
	* tests/symlinks: Likewise.
	* tests/test-lib.sh: Likewise.

	maint: allow the sc_prohibit_empty_lines_at_EOF test to pass
	* tests/test-lib.sh: Remove empty line at end of file.

	maint: remove trailing blanks
	* bootstrap.conf: Remove trailing blanks.
	* tests/reject-format: Define a dummy, empty variable, and use it in
	here-doc to protect required trailing blanks from accidental removal.
	* tests/no-newline-triggers-assert: Likewise.
	* tests/preserve-c-function-names: Likewise.
	* tests/create-delete: Likewise.
	* tests/global-reject-files: Complete a sentence that ended in a space.

	maint: add some m4 quoting
	* m4/setmode.m4 (AC_FUNC_SETMODE_DOS): Use proper M4 quoting.

	maint: arrange for the sc_require_config_h_first test to pass
	* cfg.mk: New file, to configure maint.mk.
	* Makefile.am (EXTRA_DIST): Add, so the new file is distributed.
	(config_h_header): Define, to make the sc_require_config_h_first
	syntax-check test pass.
	* pc/chdirsaf.c: Include <config.h>.

	maint: use gnulib's maintainer-makefile module
	* bootstrap.conf (gnulib_modules): Add maintainer-makefile.

2011-03-21  Jim Meyering  <meyering@redhat.com>

	doc: update README-hacking
	* README-hacking: Update from coreutils, including mention of
	how to use vc-dwim to git-commit efficiently and safely using
	a non-VC'd ChangeLog file.

	build: update gnulib submodule to latest

2011-03-17  Jim Meyering  <meyering@redhat.com>

	do not version-control ChangeLog; instead, generate it from git log
	With this change, all ChangeLog entries going forward are generated
	into a file named ChangeLog in each distribution tarball.
	ChangeLog entries prior to today's date are in ChangeLog-2011.
	* Makefile.am (gen-ChangeLog): New rule.
	(dist-hook): Depend on it.
	(EXTRA_DIST): Add ChangeLog-2011.
	* ChangeLog-2011: Renamed from ChangeLog
	* ChangeLog: Remove file.
	* .gitignore: Ignore ChangeLog.
	* bootstrap.conf: Ensure that ChangeLog exists.
	(gnulib_modules): Add gitlog-to-changelog.