mirror of
https://git.savannah.gnu.org/git/coreutils.git
synced 2025-09-10 07:59:52 +02:00
Compare commits
750 Commits
FILEUTILS-
...
FILEUTILS-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
94323ee2a7 | ||
|
|
c250ac3ddc | ||
|
|
badacafb98 | ||
|
|
d0672fcf74 | ||
|
|
91e23a4607 | ||
|
|
60d62033fb | ||
|
|
d02a83cba4 | ||
|
|
359c6f7e38 | ||
|
|
1554d14ce1 | ||
|
|
11f093839f | ||
|
|
d1520cea68 | ||
|
|
9cc8d1f6a9 | ||
|
|
48d1df6825 | ||
|
|
3a7457ae6c | ||
|
|
fe76db396c | ||
|
|
dd992130c6 | ||
|
|
02d760e232 | ||
|
|
4905751e2f | ||
|
|
d103085de3 | ||
|
|
9bc1a80b4e | ||
|
|
99ed77dea6 | ||
|
|
bda57be904 | ||
|
|
07053344dc | ||
|
|
f31052628d | ||
|
|
8e03e30c05 | ||
|
|
0ef3c5d7fc | ||
|
|
a06a563ea4 | ||
|
|
9250d1a34f | ||
|
|
a8d7df994f | ||
|
|
b10e58db1b | ||
|
|
a440742330 | ||
|
|
f466b6448a | ||
|
|
9f8bc128f0 | ||
|
|
b0cc976ab9 | ||
|
|
632b63d59c | ||
|
|
1db78f41bf | ||
|
|
7c48860ed8 | ||
|
|
1b0901bb9e | ||
|
|
76a9b4dc10 | ||
|
|
19d33cea2b | ||
|
|
c4ddb7f83a | ||
|
|
431db6c847 | ||
|
|
207d6b3cda | ||
|
|
bbefeb160b | ||
|
|
89d0895332 | ||
|
|
cb5153fefa | ||
|
|
b08eca15fd | ||
|
|
6f922edf2d | ||
|
|
85514c7e0b | ||
|
|
e060631c35 | ||
|
|
cac31ff114 | ||
|
|
f0e23dcff9 | ||
|
|
b3faad27ed | ||
|
|
38121144b2 | ||
|
|
73bc7f0777 | ||
|
|
99571c629e | ||
|
|
4f40ac7422 | ||
|
|
1610efe2fd | ||
|
|
1c70e83474 | ||
|
|
9a06759937 | ||
|
|
6161d60dde | ||
|
|
e3cd439763 | ||
|
|
5e1ffee4d6 | ||
|
|
910287474f | ||
|
|
6faa50c135 | ||
|
|
9fca49f67c | ||
|
|
8a3c0671e0 | ||
|
|
2f7eb5cdf5 | ||
|
|
8fb3745a09 | ||
|
|
aaba44e639 | ||
|
|
1cd88b2b5e | ||
|
|
60695039c0 | ||
|
|
806520fdc0 | ||
|
|
25a8d1f1e9 | ||
|
|
f0e50d53d5 | ||
|
|
40d99818ef | ||
|
|
0d6a1583c6 | ||
|
|
6f48de44ae | ||
|
|
9622d45140 | ||
|
|
890a087101 | ||
|
|
bc2e8cb6ce | ||
|
|
22cce6dadc | ||
|
|
82893aff55 | ||
|
|
c262673191 | ||
|
|
d8071546b1 | ||
|
|
d1e59e17e7 | ||
|
|
9afd1dd692 | ||
|
|
c1e3742914 | ||
|
|
157b3ef61f | ||
|
|
73e540ea1b | ||
|
|
12dd796d8a | ||
|
|
d1c7f62ba8 | ||
|
|
5d76644c3e | ||
|
|
750e5969ff | ||
|
|
6fc1cc1b6a | ||
|
|
9e37b40aa1 | ||
|
|
ebb207dc5a | ||
|
|
d0eeabbc32 | ||
|
|
259838277b | ||
|
|
0b6ee7158e | ||
|
|
3baa7fa854 | ||
|
|
0d13ededce | ||
|
|
a3a4a31c22 | ||
|
|
bf73dd5297 | ||
|
|
6002b5a2ed | ||
|
|
1c9a7ba541 | ||
|
|
e3a368948e | ||
|
|
12bf2f8f8b | ||
|
|
d12ba36443 | ||
|
|
007f495c2f | ||
|
|
0de4165e66 | ||
|
|
f90a5e94b8 | ||
|
|
88fc9ef946 | ||
|
|
fc6db4f55a | ||
|
|
a279b3a84b | ||
|
|
a56886d93d | ||
|
|
82105f5876 | ||
|
|
ea07044f83 | ||
|
|
b67ee7857a | ||
|
|
6796615496 | ||
|
|
88c9f81346 | ||
|
|
55865fda6c | ||
|
|
bdb9cd3f2c | ||
|
|
cef6937705 | ||
|
|
34942b9da8 | ||
|
|
4cbb965035 | ||
|
|
62edaf0b55 | ||
|
|
c274f255c3 | ||
|
|
e7fa925898 | ||
|
|
b003c8fdfa | ||
|
|
2279aec4a3 | ||
|
|
1f74a371e0 | ||
|
|
ae295f9bab | ||
|
|
28a81b47c1 | ||
|
|
9b56140087 | ||
|
|
8907976270 | ||
|
|
3354e7502c | ||
|
|
64bae48df6 | ||
|
|
9d3c3cb2c7 | ||
|
|
9a16aa9fde | ||
|
|
a6f5dd6269 | ||
|
|
9174cee25d | ||
|
|
7d98d28569 | ||
|
|
e441de9acc | ||
|
|
36ca174d81 | ||
|
|
76659f726f | ||
|
|
42a64ac80e | ||
|
|
6783ad7832 | ||
|
|
e8b570e45a | ||
|
|
cf6eaeb03b | ||
|
|
42ccae28c6 | ||
|
|
c850864a19 | ||
|
|
c93a59ac4f | ||
|
|
abc54153b1 | ||
|
|
c4a52014f7 | ||
|
|
c7a0b8f429 | ||
|
|
154588d722 | ||
|
|
f9270b650f | ||
|
|
5f724e01b9 | ||
|
|
c37f2f6355 | ||
|
|
dcf32e94d2 | ||
|
|
3e47e246f8 | ||
|
|
d5c056d478 | ||
|
|
da96ede53c | ||
|
|
6a9f42807f | ||
|
|
36564cbefd | ||
|
|
95836befb3 | ||
|
|
0b8e81aab9 | ||
|
|
a0119464b8 | ||
|
|
00811477e8 | ||
|
|
e144c80776 | ||
|
|
ac4f985ac9 | ||
|
|
560d7d9dac | ||
|
|
e7a7a48ee6 | ||
|
|
95e8d410ff | ||
|
|
d3b1ca9174 | ||
|
|
d70fb569fb | ||
|
|
e5e1c6d4fd | ||
|
|
d17b6bc300 | ||
|
|
114946fdb0 | ||
|
|
30edff7a36 | ||
|
|
d3ffbea816 | ||
|
|
cc7d631369 | ||
|
|
4e8d80cad7 | ||
|
|
a1d8c38553 | ||
|
|
0501984933 | ||
|
|
f8474e2421 | ||
|
|
ddd5fa0ce5 | ||
|
|
a7a7424b8b | ||
|
|
69b1c4026c | ||
|
|
0fe4e6b443 | ||
|
|
8cee2c6772 | ||
|
|
eb4109b66e | ||
|
|
e0cbae44cd | ||
|
|
8f913cc64f | ||
|
|
64dec9fafb | ||
|
|
a625377e8c | ||
|
|
c5027d831c | ||
|
|
f4143898b2 | ||
|
|
5101382ec6 | ||
|
|
dd886e9690 | ||
|
|
6a821331eb | ||
|
|
d679966505 | ||
|
|
f01319465c | ||
|
|
1dbd1aff6f | ||
|
|
69e1d626bd | ||
|
|
609582a161 | ||
|
|
bc95e393d8 | ||
|
|
379dcf4c48 | ||
|
|
ffd4e9684a | ||
|
|
809b33b2ff | ||
|
|
2a8c4e283e | ||
|
|
e6bc0dccbc | ||
|
|
b6d265e347 | ||
|
|
4de61e5f98 | ||
|
|
1f6f06f7de | ||
|
|
69d1c5772e | ||
|
|
d577eef9e4 | ||
|
|
a36f86a13e | ||
|
|
924b7e2291 | ||
|
|
2e2161c97a | ||
|
|
f3df8336ae | ||
|
|
a66cc3009b | ||
|
|
cf3d3f1e6e | ||
|
|
832dfa7e1f | ||
|
|
35af2e8613 | ||
|
|
de9d4e9f91 | ||
|
|
fb059dc67c | ||
|
|
12562e897d | ||
|
|
cc40ff77a8 | ||
|
|
294b139566 | ||
|
|
54047adacd | ||
|
|
4d062fbe6d | ||
|
|
23dfcdb368 | ||
|
|
e6a9ce41b6 | ||
|
|
03e24361ee | ||
|
|
24c8bc7107 | ||
|
|
4ab8ea3cb7 | ||
|
|
75e403b3b3 | ||
|
|
367c2367a6 | ||
|
|
1ff7d4be9b | ||
|
|
43dcc7ef21 | ||
|
|
b655fc9cf7 | ||
|
|
b6dfae5d0e | ||
|
|
1f8c95df83 | ||
|
|
2af4373a90 | ||
|
|
20203a77e1 | ||
|
|
d712631a71 | ||
|
|
2d9a947471 | ||
|
|
47a4b79f74 | ||
|
|
b967ecb86b | ||
|
|
4fa4d097bd | ||
|
|
5050912be0 | ||
|
|
a147c61141 | ||
|
|
4afd87dd11 | ||
|
|
339497e1f4 | ||
|
|
62528b9cf8 | ||
|
|
50c573d457 | ||
|
|
96309d1da7 | ||
|
|
d815c152df | ||
|
|
25abb410d4 | ||
|
|
baa8cd4493 | ||
|
|
d008b48e3b | ||
|
|
5b86bf7cde | ||
|
|
54ec5153c5 | ||
|
|
6369a887ba | ||
|
|
42edc330ed | ||
|
|
e0e1dc0bf8 | ||
|
|
f381610dd5 | ||
|
|
034df8db20 | ||
|
|
8fe009ed7c | ||
|
|
c21cecaea8 | ||
|
|
1d47220ab2 | ||
|
|
cf691ec714 | ||
|
|
7c2d5de6c7 | ||
|
|
db6ce0481b | ||
|
|
98327bba60 | ||
|
|
a29afcb470 | ||
|
|
bf504d2a46 | ||
|
|
ce9c687d5a | ||
|
|
eaaff3246a | ||
|
|
7ba3c38741 | ||
|
|
c69d22ae26 | ||
|
|
35aee6bf13 | ||
|
|
ac03113efe | ||
|
|
bbea0501a9 | ||
|
|
a7b641acd5 | ||
|
|
c4cf0531ff | ||
|
|
a7d0351c20 | ||
|
|
beb464c0ea | ||
|
|
d8a18c33e8 | ||
|
|
abdc079cd5 | ||
|
|
d0b9ad729c | ||
|
|
24df6275fb | ||
|
|
2500fe4079 | ||
|
|
3a3189e6c3 | ||
|
|
db3c0ffb44 | ||
|
|
8935f38d4e | ||
|
|
667799f7e2 | ||
|
|
d30f9691c1 | ||
|
|
fdd07e3d2b | ||
|
|
419aa42181 | ||
|
|
516b48e7a2 | ||
|
|
03c1b8518c | ||
|
|
39090114f0 | ||
|
|
b2513fc340 | ||
|
|
b989ccb248 | ||
|
|
2067a9fe97 | ||
|
|
a717cdf2d6 | ||
|
|
bb0631e825 | ||
|
|
9dab31b501 | ||
|
|
2080baecff | ||
|
|
69952761e1 | ||
|
|
319976a665 | ||
|
|
8137487dd7 | ||
|
|
0b1a5f6fe9 | ||
|
|
236d3671e2 | ||
|
|
ab33da4b55 | ||
|
|
34f0f5c2c9 | ||
|
|
bad53b08e6 | ||
|
|
1682163674 | ||
|
|
8ca2ea6a0e | ||
|
|
7549c10f35 | ||
|
|
45eb651902 | ||
|
|
6c9f8b17d0 | ||
|
|
771cd1f617 | ||
|
|
75cedb69be | ||
|
|
dc475b06bd | ||
|
|
581baf7d99 | ||
|
|
7ca462d865 | ||
|
|
81e166e0ce | ||
|
|
190ab69c07 | ||
|
|
9d044f6b96 | ||
|
|
713d9932c3 | ||
|
|
83bd8b5ff1 | ||
|
|
f92141140b | ||
|
|
695cdd6f6a | ||
|
|
e7f2703c47 | ||
|
|
3d308f9549 | ||
|
|
f42367c3e7 | ||
|
|
0aa9923d96 | ||
|
|
85b4cd220b | ||
|
|
f0a21a933a | ||
|
|
42884ec0c7 | ||
|
|
c227e4a167 | ||
|
|
c92de17d2f | ||
|
|
c060f16ed7 | ||
|
|
f19d194943 | ||
|
|
a721b1ac67 | ||
|
|
2a147b2b43 | ||
|
|
c004c87b6c | ||
|
|
eff1cee6e1 | ||
|
|
06303195c0 | ||
|
|
dd007634ac | ||
|
|
562f29a2a2 | ||
|
|
11212212b0 | ||
|
|
1271e5321c | ||
|
|
0b80d92d60 | ||
|
|
542d10fd71 | ||
|
|
cec649b346 | ||
|
|
04d1d85350 | ||
|
|
cdbee41fbf | ||
|
|
153de419bc | ||
|
|
bc3d22ae9b | ||
|
|
dafd051712 | ||
|
|
fde28088f4 | ||
|
|
c2db2a08d9 | ||
|
|
1424b8fd50 | ||
|
|
df3d9f6812 | ||
|
|
df570c09ee | ||
|
|
e2ff4b6e90 | ||
|
|
e16c2033b4 | ||
|
|
4159e9e2f6 | ||
|
|
a6ea4bd455 | ||
|
|
f9ce2cffec | ||
|
|
2bf19e8467 | ||
|
|
5a16e75a56 | ||
|
|
fd6c9bbcef | ||
|
|
ab589a9ada | ||
|
|
3a7f42f1a8 | ||
|
|
278e9999a9 | ||
|
|
8ee5e50927 | ||
|
|
3ae2c2ecf0 | ||
|
|
5cfbca30a9 | ||
|
|
6d97ed71b7 | ||
|
|
0a1a14a095 | ||
|
|
674d2ec393 | ||
|
|
96359cf648 | ||
|
|
855b12df1d | ||
|
|
6e8f572094 | ||
|
|
e4fd405431 | ||
|
|
e9e5d9bf3f | ||
|
|
9e1ddcbf89 | ||
|
|
2003f808c7 | ||
|
|
5c591b0e36 | ||
|
|
dac5c72090 | ||
|
|
5c8eb257ea | ||
|
|
703336d148 | ||
|
|
2bc2cc2f54 | ||
|
|
1905d5266b | ||
|
|
58bb02e74d | ||
|
|
dc82d52a02 | ||
|
|
158b19d487 | ||
|
|
e0aa18bb33 | ||
|
|
ac6d2b033e | ||
|
|
a3631a8114 | ||
|
|
5478a521d6 | ||
|
|
ff12f6ff27 | ||
|
|
ae79d1fceb | ||
|
|
45eb5dac3c | ||
|
|
95d1aad02d | ||
|
|
b910e6ea14 | ||
|
|
4ba4999328 | ||
|
|
d7176770d4 | ||
|
|
fe27c7d14e | ||
|
|
0c23f18574 | ||
|
|
fbaac7ba29 | ||
|
|
959eb64fb4 | ||
|
|
290a9e03f2 | ||
|
|
c057543e47 | ||
|
|
7456d2a652 | ||
|
|
965a1e5a94 | ||
|
|
bee00278e6 | ||
|
|
59aae8f311 | ||
|
|
097ca8427d | ||
|
|
546f3f81da | ||
|
|
e879a5a73e | ||
|
|
8eaa894f84 | ||
|
|
be65d0ad03 | ||
|
|
3a69319e76 | ||
|
|
0d24fd9224 | ||
|
|
9bf8b6b4c7 | ||
|
|
4677710c39 | ||
|
|
7fbb24fe4e | ||
|
|
c537a72db4 | ||
|
|
23b14f50e3 | ||
|
|
b9842e7300 | ||
|
|
2cd167fba1 | ||
|
|
133e0a63c5 | ||
|
|
95fe06e1ba | ||
|
|
0c3c9353ab | ||
|
|
cffac32634 | ||
|
|
b035c9078c | ||
|
|
b79cd299cb | ||
|
|
1e8f1e0863 | ||
|
|
0f8e5e93c1 | ||
|
|
4433aaa043 | ||
|
|
68bb940729 | ||
|
|
96e08503da | ||
|
|
21e69c4002 | ||
|
|
bcaa45d181 | ||
|
|
96e8d93844 | ||
|
|
104866a990 | ||
|
|
3a01605b6b | ||
|
|
13106e125b | ||
|
|
8a8a4eeab0 | ||
|
|
075ce6b479 | ||
|
|
c771f143db | ||
|
|
76b9399091 | ||
|
|
81706baebd | ||
|
|
59277d9406 | ||
|
|
73444fc778 | ||
|
|
f62a91b03e | ||
|
|
a820bf8457 | ||
|
|
1120f4c00c | ||
|
|
e2fcc9923d | ||
|
|
a7c6ba5e86 | ||
|
|
5b2aa1846b | ||
|
|
782b270314 | ||
|
|
ff743d5451 | ||
|
|
0f67dfcaa3 | ||
|
|
88cbad9817 | ||
|
|
0ae96f2361 | ||
|
|
32deb2026b | ||
|
|
8a61d8e336 | ||
|
|
6e7be7b1c6 | ||
|
|
51f63eeac9 | ||
|
|
61fa70ac19 | ||
|
|
d0bdbe00ba | ||
|
|
e35e21e280 | ||
|
|
8f443fb9c1 | ||
|
|
d48f86fb02 | ||
|
|
a877f41093 | ||
|
|
88ab6854e5 | ||
|
|
09483e6dc6 | ||
|
|
fce748fe1f | ||
|
|
878b334351 | ||
|
|
0800a11f65 | ||
|
|
37f353eb26 | ||
|
|
68cab6ea0d | ||
|
|
2e250112ee | ||
|
|
a4758241e7 | ||
|
|
4762e42042 | ||
|
|
8e42ae2cc4 | ||
|
|
824529d0aa | ||
|
|
7568de8654 | ||
|
|
16f3644da7 | ||
|
|
e2bf10d90e | ||
|
|
df7b9c808b | ||
|
|
4eb7ae21e8 | ||
|
|
07c6f5e387 | ||
|
|
e02df462ba | ||
|
|
b874c17169 | ||
|
|
e63a340c46 | ||
|
|
aa1c4f58f1 | ||
|
|
089aa98fb8 | ||
|
|
69272c2e85 | ||
|
|
421265ba29 | ||
|
|
0fbe67a146 | ||
|
|
a0a658c1f6 | ||
|
|
232eb53f42 | ||
|
|
147d933a4f | ||
|
|
6dde919c8a | ||
|
|
0bf08d23cd | ||
|
|
ed2d3ddb6b | ||
|
|
3dea3dfe03 | ||
|
|
70a87bf7ca | ||
|
|
1a4f074c9e | ||
|
|
9b1973fbd7 | ||
|
|
03b1afaa8d | ||
|
|
60979fecbb | ||
|
|
e9144d8d30 | ||
|
|
0c87b3168c | ||
|
|
3946ca7fc1 | ||
|
|
2dc3a543b1 | ||
|
|
f7bb13ecd8 | ||
|
|
68737ed84b | ||
|
|
e91bb3d2e9 | ||
|
|
5fd73cbdf3 | ||
|
|
07a5b9fe8e | ||
|
|
cb954e6a87 | ||
|
|
2d463bbcb5 | ||
|
|
7d957fac2e | ||
|
|
238e6f6a40 | ||
|
|
9625a6cdaf | ||
|
|
05b9afe56b | ||
|
|
84f044b998 | ||
|
|
bc885b89c1 | ||
|
|
24c3de8eb7 | ||
|
|
a2c6534e1d | ||
|
|
38c9d6d2b6 | ||
|
|
a8f75cc5c9 | ||
|
|
467a9bfd4b | ||
|
|
c0dfa7f21b | ||
|
|
9e0faa6d18 | ||
|
|
7e74cfab42 | ||
|
|
c77b696d1e | ||
|
|
2c13a275ca | ||
|
|
48a0c3d403 | ||
|
|
a59624613d | ||
|
|
88869ee024 | ||
|
|
505f12e2e4 | ||
|
|
4473f3cb6e | ||
|
|
4ae35f8a89 | ||
|
|
cd9a08e476 | ||
|
|
6025f81e94 | ||
|
|
e7dc64cdaf | ||
|
|
ee34311b45 | ||
|
|
ec20f35608 | ||
|
|
0d148ec872 | ||
|
|
751a3dc73b | ||
|
|
43aa4122fc | ||
|
|
a6d3060450 | ||
|
|
015e2e77ed | ||
|
|
b10a3f942e | ||
|
|
ca787f30f6 | ||
|
|
ac68c4f0c9 | ||
|
|
45d503f7f9 | ||
|
|
3aaa173ce2 | ||
|
|
7f7cdc86f9 | ||
|
|
c54cb6e13b | ||
|
|
c900767da2 | ||
|
|
9f0e21b7ca | ||
|
|
7442141536 | ||
|
|
2aa0dbcc2e | ||
|
|
94fa239afa | ||
|
|
4872440d7a | ||
|
|
821fddfdc5 | ||
|
|
9a5044f0ea | ||
|
|
2f07328f17 | ||
|
|
09619556e6 | ||
|
|
5b070b2329 | ||
|
|
a12101a224 | ||
|
|
62b3fd4e81 | ||
|
|
c4ece6d8cb | ||
|
|
69649d98b1 | ||
|
|
99ce6d77e0 | ||
|
|
3f9c40bdcb | ||
|
|
3b1dbb8f30 | ||
|
|
6de09f9d18 | ||
|
|
eaec7699ac | ||
|
|
e960794409 | ||
|
|
82eb2dcf9e | ||
|
|
c1fb8566f6 | ||
|
|
ef68c26a22 | ||
|
|
8ec1a397be | ||
|
|
9b531d8675 | ||
|
|
fc965709f9 | ||
|
|
44a61d78bb | ||
|
|
9195b6970b | ||
|
|
eaacf48c40 | ||
|
|
263bc0f77b | ||
|
|
29d4ea7270 | ||
|
|
9196dbf945 | ||
|
|
98edf21e5e | ||
|
|
7dfa1c9eaa | ||
|
|
c1ea7960a5 | ||
|
|
076e82b82b | ||
|
|
779b181b61 | ||
|
|
97f8518205 | ||
|
|
d713f56660 | ||
|
|
fed619866d | ||
|
|
5d8751167c | ||
|
|
77f5cd6359 | ||
|
|
523442d018 | ||
|
|
b04492c62b | ||
|
|
87110cd9f2 | ||
|
|
7744b342e1 | ||
|
|
56fee444e2 | ||
|
|
cef9c0a44a | ||
|
|
af1ef50ae1 | ||
|
|
a2f2ba51bc | ||
|
|
8bf7657cd4 | ||
|
|
4d319867cf | ||
|
|
9fe649e01a | ||
|
|
922d1292c3 | ||
|
|
f525fd81ca | ||
|
|
89826ef420 | ||
|
|
a2e1454d4b | ||
|
|
276d118b10 | ||
|
|
fe9d964a78 | ||
|
|
54f4eb2224 | ||
|
|
86fb9cb9ec | ||
|
|
7082d762aa | ||
|
|
22099863b4 | ||
|
|
a4c1c9627e | ||
|
|
53ab150d29 | ||
|
|
1a3dfa550d | ||
|
|
2b9e4c6914 | ||
|
|
8908c87cb0 | ||
|
|
7049562dce | ||
|
|
e7ae216189 | ||
|
|
70ede084c0 | ||
|
|
becdfba8b9 | ||
|
|
cb6a8b722b | ||
|
|
2ecbb0307d | ||
|
|
95ec5d7e78 | ||
|
|
11a5174aa6 | ||
|
|
a9ec82981b | ||
|
|
cbf82d876b | ||
|
|
8c5f91e5ad | ||
|
|
da9211c1c1 | ||
|
|
26756c6f82 | ||
|
|
604691004d | ||
|
|
70db3065cb | ||
|
|
d91597a2e8 | ||
|
|
1b0f03e1da | ||
|
|
e21cf52e03 | ||
|
|
4ab3a8a345 | ||
|
|
35c2b35dbd | ||
|
|
9550ca6b71 | ||
|
|
5b181c3bd6 | ||
|
|
b02f28bab4 | ||
|
|
68e327564d | ||
|
|
e363353a48 | ||
|
|
954d1b451f | ||
|
|
8b036d56ef | ||
|
|
758bbda788 | ||
|
|
ae7d45cdc9 | ||
|
|
6cb040753f | ||
|
|
42d3b0be50 | ||
|
|
cdc04ccc0e | ||
|
|
509abea3f1 | ||
|
|
67a1a846c4 | ||
|
|
d3b6e5f4fb | ||
|
|
b83bf32695 | ||
|
|
65c540d59c | ||
|
|
ab8dea5328 | ||
|
|
a90a97ba1d | ||
|
|
21cf7cf8c2 | ||
|
|
9f4ddf5976 | ||
|
|
25668ab60b | ||
|
|
d12341e78a | ||
|
|
34ad3d2d3b | ||
|
|
bece904517 | ||
|
|
d869e3fdc0 | ||
|
|
33a1515274 | ||
|
|
890d74d50b | ||
|
|
f0f15679fb | ||
|
|
b4b06d9c39 | ||
|
|
e11c197cc2 | ||
|
|
5967a93b4f | ||
|
|
1f4c0ed890 | ||
|
|
9a6aae1ed7 | ||
|
|
3f05e0467f | ||
|
|
ea020acdd2 | ||
|
|
3b713062cd | ||
|
|
f5f0c17fe9 | ||
|
|
d34ec08816 | ||
|
|
7316f85aaa | ||
|
|
3c2295f52c | ||
|
|
d3e2cd9eca | ||
|
|
bf527b6094 | ||
|
|
eb3b7c64d0 | ||
|
|
0695444a89 | ||
|
|
cf00554f8f | ||
|
|
1b9f58551d | ||
|
|
4e83f9789c | ||
|
|
29064b5f4f | ||
|
|
fadedac410 | ||
|
|
06f14ae760 | ||
|
|
1592f752f6 | ||
|
|
84b4618b26 | ||
|
|
414cf1b428 | ||
|
|
b76f341922 | ||
|
|
10f96d621c | ||
|
|
306ea2b028 | ||
|
|
ff5b4df30b | ||
|
|
20bc02752b | ||
|
|
410a3c94e8 | ||
|
|
c94e186b91 | ||
|
|
e42efa6866 | ||
|
|
115a5d0e61 | ||
|
|
f28d5ba125 | ||
|
|
f22e54a579 | ||
|
|
888b0fe143 | ||
|
|
e0c1e743cc | ||
|
|
3e60c9744d | ||
|
|
3cce240e0a | ||
|
|
17a4ddab33 | ||
|
|
d2e1175756 | ||
|
|
9fec9172be | ||
|
|
da25811932 | ||
|
|
dc4fd4c43b | ||
|
|
26ba9ca9df | ||
|
|
f749a71868 | ||
|
|
43ca488eae | ||
|
|
b0c149e78f | ||
|
|
97bc6652e7 | ||
|
|
e0ad1ee4d1 | ||
|
|
af821763c5 | ||
|
|
4a90a25973 | ||
|
|
570fa71fb3 | ||
|
|
8d891cbf63 | ||
|
|
58d4fd72fe | ||
|
|
b517135765 | ||
|
|
f4e4297031 | ||
|
|
22d584b475 | ||
|
|
f6aaba2b34 | ||
|
|
c970990a0a |
@@ -4,6 +4,10 @@
|
||||
# It is necessary if you want to build targets usually of interest
|
||||
# only to the maintainer.
|
||||
|
||||
# Systems where /bin/sh is not the default shell need this. The $(shell)
|
||||
# command below won't work with e.g. stock DOS/Windows shells.
|
||||
SHELL = /bin/sh
|
||||
|
||||
have-Makefile := $(shell test -f Makefile && echo yes)
|
||||
|
||||
# If the user runs GNU make but has not yet run ./configure,
|
||||
|
||||
@@ -11,26 +11,32 @@ maintainer-check:
|
||||
$(MAKE) distcheck
|
||||
$(MAKE) my-distcheck
|
||||
|
||||
prev-version := $(shell echo $(VERSION)|tr a-z Xa-y)
|
||||
tag-package = $(shell echo "$(PACKAGE)" | tr a-z A-Z)
|
||||
tag-this-version = $(subst .,_,$(VERSION))
|
||||
tag-prev-version = $(subst .,_,$(prev-version))
|
||||
this-cvs-tag = $(tag-package)-$(tag-this-version)
|
||||
prev-cvs-tag = $(tag-package)-$(tag-prev-version)
|
||||
|
||||
|
||||
# Tag before making distribution. Also, don't make a distribution if
|
||||
# checks fail. Also, make sure the NEWS file is up-to-date.
|
||||
# FIXME: use dist-hook/my-dist like distcheck-hook/my-distcheck.
|
||||
cvs-dist: maintainer-check
|
||||
pkg=`echo "$(PACKAGE)" | tr a-z A-Z`; \
|
||||
ver=`echo "$(VERSION)" | sed 's/\./_/g'`; \
|
||||
tag="$$pkg-$$ver"; \
|
||||
echo tag=$$tag; \
|
||||
if cvs -n log -h README| grep -e $$tag: > /dev/null; then \
|
||||
echo $(this-cvs-tag); \
|
||||
if cvs -n log -h README| grep -e $(this-cvs-tag): > /dev/null; then \
|
||||
echo "VERSION not new; not tagging" 1>&2; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
cvs update po; \
|
||||
cvs tag -c $$tag
|
||||
cvs tag -c $(this-cvs-tag)
|
||||
$(MAKE) dist
|
||||
|
||||
t=./=test
|
||||
my-distcheck: dist
|
||||
my-distcheck:
|
||||
-rm -rf $(t)
|
||||
mkdir $(t)
|
||||
GZIP=$(GZIP) $(TAR) -C $(t) -zxf $(distdir).tar.gz
|
||||
GZIP=$(GZIP) $(AMTAR) -C $(t) -zxf $(distdir).tar.gz
|
||||
cd $(t)/$(distdir) \
|
||||
&& ./configure --disable-nls \
|
||||
&& $(MAKE) CFLAGS='-Wformat -Werror' \
|
||||
@@ -38,7 +44,7 @@ my-distcheck: dist
|
||||
&& $(MAKE) check \
|
||||
&& $(MAKE) distclean
|
||||
cd $(t) && mv $(distdir) $(distdir).old \
|
||||
&& $(TAR) -zxf ../$(distdir).tar.gz
|
||||
&& $(AMTAR) -zxf ../$(distdir).tar.gz
|
||||
diff -ur $(t)/$(distdir).old $(t)/$(distdir)
|
||||
-rm -rf $(t)
|
||||
@echo "========================"; \
|
||||
@@ -50,8 +56,22 @@ THIS_VERSION_REGEXP = $(subst .,\.,$(VERSION))
|
||||
PREV_VERSION := $(shell echo $(VERSION)|tr a-z Xa-y)
|
||||
PREV_VERSION_REGEXP := $(shell echo $(PREV_VERSION)|sed 's/\./\\./g')
|
||||
v = Version
|
||||
url-host-prefix = ftp://alpha.gnu.org
|
||||
url = $(url-host-prefix)/gnu/fetish/$(distdir).tar.gz
|
||||
|
||||
a_host=alpha.gnu.org
|
||||
b_host=tug.org
|
||||
c_host=ftp.enst.fr
|
||||
|
||||
a_url_dir=gnu/fetish
|
||||
b_url_dir=gnu/fetish
|
||||
c_url_dir=pub/gnu/gnits/fetish
|
||||
|
||||
a_real_dir=/fs/share/ftp/gnu/fetish
|
||||
b_real_dir=/home/ftp/pub/gnu/fetish
|
||||
c_real_dir=/pub/gnu/gnits/fetish
|
||||
|
||||
url_dir_list = $(foreach x,a b c,ftp://$($(x)_host)/$($(x)_url_dir))
|
||||
real_dir_list = $(foreach x,a b c,ftp://$($(x)_host)$($(x)_real_dir))
|
||||
|
||||
md5 = $(shell md5sum < $(distdir).tar.gz|sed 's/ -//')
|
||||
|
||||
rel-check:
|
||||
@@ -69,7 +89,9 @@ announcement: NEWS ChangeLog $(distdir).tar.gz
|
||||
echo; \
|
||||
echo FIXME: put comments here; \
|
||||
echo; \
|
||||
echo " $(url)"; \
|
||||
for url in $(url_dir_list); do \
|
||||
echo " $$url/$(distdir).tar.gz"; \
|
||||
done; \
|
||||
echo; \
|
||||
echo "$(md5) $(distdir).tar.gz"; \
|
||||
echo; \
|
||||
@@ -78,18 +100,22 @@ announcement: NEWS ChangeLog $(distdir).tar.gz
|
||||
| grep -v '^\['; \
|
||||
echo; \
|
||||
echo ChangeLog entries:; \
|
||||
sed -n "1,/$v $(PREV_VERSION_REGEXP)/p" \
|
||||
ChangeLog; \
|
||||
find . -name ChangeLog \
|
||||
| xargs cvs diff -up -r$(prev-cvs-tag) -rHEAD \
|
||||
| sed -n 's/^+//p' \
|
||||
| perl -ne 'm!^\+\+ (\./)?! or print,next;' \
|
||||
-e 'print "\n"."*"x70 ."\n"; s///; print; print "*"x70 ."\n"'; \
|
||||
)
|
||||
|
||||
alpha:
|
||||
$(MAKE) cvs-dist
|
||||
$(MAKE) -s announcement > /tmp/announcement
|
||||
$(MAKE) -s announcement > /tmp/announce-$(distdir)
|
||||
ln $(distdir).tar.gz ../release
|
||||
chmod a-w $(distdir).tar.gz
|
||||
@echo =====================================
|
||||
@echo 'ncftp -u $(url-host-prefix)/fs/share/ftp/gnu/fetish/'
|
||||
@for url in $(real_dir_list); do \
|
||||
echo "ncftp -u $$url/"; \
|
||||
done
|
||||
@echo '# put $(distdir).tar.gz'
|
||||
@echo '# send the /tmp/announcement e-mail'
|
||||
@echo 'pot-mail $(distdir).tar.gz | bash'
|
||||
@echo =====================================
|
||||
|
||||
18
THANKS
18
THANKS
@@ -3,9 +3,14 @@ The rest of the addresses are still in the ChangeLog.
|
||||
|
||||
Achim Blumensath: blume@corona.oche.de
|
||||
aldomel: aldomel@ix.netcom.com
|
||||
Alen Muzinic: zveki@fly.cc.fer.hr
|
||||
Akim Demaille: demaille@inf.enst.fr
|
||||
Alain Magloire: alain@qnx.com
|
||||
Alexey Solovyov: alekso@math.uu.se
|
||||
Andreas Jaeger: jaeger@gnu.org
|
||||
Andreas Schwab: schwab@issan.informatik.uni-dortmund.de
|
||||
Andrew Dalke: dalke@bioreason.com
|
||||
Andrew Tridgell: tridge@samba.org
|
||||
Andries Brouwer: Andries.Brouwer@cwi.nl
|
||||
Arne Henrik Juul: arnej@imf.unit.no
|
||||
Bauke Jan Douma: bjdouma@xs4all.nl
|
||||
@@ -16,6 +21,7 @@ Bob McCracken: kerouac@ravenet.com
|
||||
Brendan O'Dea: bod@compusol.com.au
|
||||
Charles Karney: karney@pppl.gov
|
||||
Christian von Roques: roques@pond.sub.org
|
||||
Colin Plumb: colin@nyx.net
|
||||
Dirk Lattermann: dlatt@t-online.de
|
||||
Don Parsons: dparsons@synapse.kent.edu
|
||||
Eirik Fuller: eirik@netcom.com
|
||||
@@ -29,12 +35,18 @@ Hugh Daniel: hugh@xanadu.com
|
||||
James: james@albion.glarp.com
|
||||
James Antill: jmanti%essex.ac.uk@seralph21.essex.ac.uk
|
||||
James Tanis: jtt@soscorp.com
|
||||
Jamie Lokier: jamie@imbolc.ucc.ie
|
||||
Janos Farkas: chexum@shadow.banki.hu
|
||||
Jesse Thilo: jgt2@eecs.lehigh.edu
|
||||
Joakim Rosqvist: dvljrt@cs.umu.se
|
||||
Johan Danielsson: joda@pdc.kth.se
|
||||
John Bley: jbb6@acpub.duke.edu
|
||||
John Gatewood Ham: zappaman@alphabox.compsci.buu.ac.th
|
||||
John Gotts: jgotts@umich.edu
|
||||
jvogel: jvogel@linkny.com
|
||||
Karl Heuer: kwzh@gnu.org
|
||||
Kjetil Torgrim Homme: kjetilho@ifi.uio.no
|
||||
Larry McVoy: lm@sgi.com
|
||||
Lars Hecking: lhecking@nmrc.ucc.ie
|
||||
Lorne Baker: lbaker@nitro.avint.net
|
||||
Marcus Daniels: marcus@sysc.pdx.edu
|
||||
@@ -44,21 +56,27 @@ Mark Kettenis: kettenis@phys.uva.nl
|
||||
Marty Leisner: leisner@sdsp.mc.xerox.com
|
||||
Masami Takikawa: takikawm@CS.ORST.EDU
|
||||
Matthew S. Levine: mslevine@theory.lcs.mit.edu
|
||||
Matthew Swift: swift@alum.mit.edu
|
||||
Matthias Urlichs: smurf@noris.de
|
||||
Michiel Bacchiani: bacchian@raven.bu.edu
|
||||
Miles Bader: miles@gnu.ai.mit.edu
|
||||
Noel Cragg: noel@red-bean.com
|
||||
Olav Morkrid: olav@funcom.com
|
||||
Per Kristian Hove: perhov@math.ntnu.no
|
||||
Peter Eriksson: peter@ifm.liu.se
|
||||
Peter Samuelson: psamuels@sampo.creighton.edu
|
||||
Paul Eggert: eggert@twinsun.com
|
||||
Philippe De Muyter: phdm@macqel.be
|
||||
Rainer Orth: ro@TechFak.Uni-Bielefeld.DE
|
||||
Ross Ridge: rridge@calum.csclub.uwaterloo.ca
|
||||
Santiago Vila Doncel: sanvila@unex.es
|
||||
Stuart Kemp: skemp@peter.bmc.com
|
||||
Thomas Bushnell, n/BSG: thomas@gnu.ai.mit.edu
|
||||
Ton Hospel: thospel@mail.dma.be
|
||||
Torbjorn Lindgren: tl@funcom.no
|
||||
Tony Leneis: tony@plaza.ds.adp.com
|
||||
Ulrich Drepper: drepper@cygnus.com
|
||||
Volker Borchert: bt@teknon.de
|
||||
Michael Veksler: mveksler@techunix.technion.ac.il
|
||||
Wayne Stewart: wstewa@atl.com
|
||||
William Bader: william@nscs.fast.net
|
||||
|
||||
@@ -1,20 +1,19 @@
|
||||
Makefile
|
||||
fileutils.info
|
||||
version.texi
|
||||
fileutils.info*
|
||||
fileutils.log
|
||||
fileutils.dvi
|
||||
fileutils.aux
|
||||
fileutils.toc
|
||||
fileutils.cp
|
||||
fileutils.fn
|
||||
fileutils.vr
|
||||
fileutils.tp
|
||||
fileutils.ky
|
||||
fileutils.pg
|
||||
fileutils.cm
|
||||
fileutils.fl
|
||||
fileutils.op
|
||||
fileutils.cp
|
||||
fileutils.cps
|
||||
fileutils.dvi
|
||||
fileutils.fl
|
||||
fileutils.fn
|
||||
fileutils.info
|
||||
fileutils.info*
|
||||
fileutils.ky
|
||||
fileutils.log
|
||||
fileutils.op
|
||||
fileutils.pg
|
||||
fileutils.toc
|
||||
fileutils.tp
|
||||
fileutils.vr
|
||||
stamp-vti
|
||||
version.texi
|
||||
|
||||
150
doc/Makefile.in
150
doc/Makefile.in
@@ -1,6 +1,6 @@
|
||||
# Makefile.in generated automatically by automake 1.3b from Makefile.am
|
||||
# Makefile.in generated automatically by automake 1.4a from Makefile.am
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
|
||||
# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
@@ -10,8 +10,7 @@
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
|
||||
SHELL = /bin/sh
|
||||
SHELL = @SHELL@
|
||||
|
||||
srcdir = @srcdir@
|
||||
top_srcdir = @top_srcdir@
|
||||
@@ -49,6 +48,7 @@ INSTALL = @INSTALL@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
INSTALL_STRIP_FLAG =
|
||||
transform = @program_transform_name@
|
||||
|
||||
NORMAL_INSTALL = :
|
||||
@@ -57,6 +57,10 @@ POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
host_alias = @host_alias@
|
||||
host_triplet = @host@
|
||||
AMTAR = @AMTAR@
|
||||
AMTARFLAGS = @AMTARFLAGS@
|
||||
CATALOGS = @CATALOGS@
|
||||
CATOBJEXT = @CATOBJEXT@
|
||||
CC = @CC@
|
||||
@@ -64,8 +68,10 @@ CPP = @CPP@
|
||||
DATADIRNAME = @DATADIRNAME@
|
||||
DF_PROG = @DF_PROG@
|
||||
GENCAT = @GENCAT@
|
||||
GETCONF = @GETCONF@
|
||||
GMOFILES = @GMOFILES@
|
||||
GMSGFMT = @GMSGFMT@
|
||||
GNU_PACKAGE = @GNU_PACKAGE@
|
||||
GT_NO = @GT_NO@
|
||||
GT_YES = @GT_YES@
|
||||
INCLUDE_LOCALE_H = @INCLUDE_LOCALE_H@
|
||||
@@ -89,6 +95,7 @@ VERSION = @VERSION@
|
||||
YACC = @YACC@
|
||||
l = @l@
|
||||
|
||||
|
||||
info_TEXINFOS = fileutils.texi
|
||||
|
||||
EXTRA_DIST = perm.texi getdate.texi
|
||||
@@ -105,8 +112,8 @@ MAKEINFO = makeinfo --no-split
|
||||
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
|
||||
CONFIG_HEADER = ../config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
DIST_SOURCES =
|
||||
TEXI2DVI = texi2dvi
|
||||
TEXINFO_TEX = $(srcdir)/texinfo.tex
|
||||
INFO_DEPS = fileutils.info
|
||||
DVIS = fileutils.dvi
|
||||
TEXINFOS = fileutils.texi
|
||||
@@ -114,15 +121,13 @@ DIST_COMMON = Makefile.am Makefile.in mdate-sh stamp-vti texinfo.tex \
|
||||
version.texi
|
||||
|
||||
|
||||
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
|
||||
|
||||
TAR = tar
|
||||
GZIP = --best
|
||||
all: Makefile $(INFO_DEPS)
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
|
||||
GZIP_ENV = --best
|
||||
all: all-redirect
|
||||
.SUFFIXES:
|
||||
.SUFFIXES: .dvi .info .ps .texi .texinfo .txi
|
||||
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
|
||||
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
|
||||
cd $(top_srcdir) && $(AUTOMAKE) --gnits doc/Makefile
|
||||
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES)
|
||||
@@ -130,18 +135,18 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES)
|
||||
&& CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
|
||||
|
||||
|
||||
version.texi: stamp-vti
|
||||
cp $(srcdir)/stamp-vti $(srcdir)/version.texi
|
||||
$(srcdir)/version.texi: stamp-vti
|
||||
@:
|
||||
|
||||
stamp-vti: fileutils.texi $(top_srcdir)/configure.in
|
||||
@echo "@set UPDATED `cd $(srcdir) \
|
||||
&& $(SHELL) ./mdate-sh fileutils.texi`" > vti.tmp
|
||||
$(srcdir)/stamp-vti: fileutils.texi $(top_srcdir)/configure.in
|
||||
@echo "@set UPDATED `$(SHELL) $(srcdir)/mdate-sh $(srcdir)/fileutils.texi`" > vti.tmp
|
||||
@echo "@set EDITION $(VERSION)" >> vti.tmp
|
||||
@echo "@set VERSION $(VERSION)" >> vti.tmp
|
||||
@cmp -s vti.tmp $(srcdir)/stamp-vti \
|
||||
|| (echo "Updating $(srcdir)/stamp-vti"; \
|
||||
cp vti.tmp $(srcdir)/stamp-vti)
|
||||
@cmp -s vti.tmp $(srcdir)/version.texi \
|
||||
|| (echo "Updating $(srcdir)/version.texi"; \
|
||||
cp vti.tmp $(srcdir)/version.texi)
|
||||
-@rm -f vti.tmp
|
||||
@cp $(srcdir)/version.texi $@
|
||||
|
||||
mostlyclean-vti:
|
||||
-rm -f vti.tmp
|
||||
@@ -151,7 +156,7 @@ clean-vti:
|
||||
distclean-vti:
|
||||
|
||||
maintainer-clean-vti:
|
||||
-rm -f stamp-vti version.texi
|
||||
-rm -f $(srcdir)/stamp-vti $(srcdir)/version.texi
|
||||
|
||||
fileutils.info: fileutils.texi version.texi
|
||||
fileutils.dvi: fileutils.texi version.texi
|
||||
@@ -206,7 +211,8 @@ DVIPS = dvips
|
||||
install-info-am: $(INFO_DEPS)
|
||||
@$(NORMAL_INSTALL)
|
||||
$(mkinstalldirs) $(DESTDIR)$(infodir)
|
||||
@for file in $(INFO_DEPS); do \
|
||||
@list='$(INFO_DEPS)'; \
|
||||
for file in $$list; do \
|
||||
d=$(srcdir); \
|
||||
for ifile in `cd $$d && echo $$file $$file-[0-9] $$file-[0-9][0-9]`; do \
|
||||
if test -f $$d/$$ifile; then \
|
||||
@@ -217,7 +223,8 @@ install-info-am: $(INFO_DEPS)
|
||||
done
|
||||
@$(POST_INSTALL)
|
||||
@if $(SHELL) -c 'install-info --version | sed 1q | fgrep -s -v -i debian' >/dev/null 2>&1; then \
|
||||
for file in $(INFO_DEPS); do \
|
||||
list='$(INFO_DEPS)'; \
|
||||
for file in $$list; do \
|
||||
echo " install-info --info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/$$file";\
|
||||
install-info --info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/$$file || :;\
|
||||
done; \
|
||||
@@ -226,19 +233,24 @@ install-info-am: $(INFO_DEPS)
|
||||
uninstall-info:
|
||||
$(PRE_UNINSTALL)
|
||||
@if $(SHELL) -c 'install-info --version | sed 1q | fgrep -s -v -i debian' >/dev/null 2>&1; then \
|
||||
ii=yes; \
|
||||
else ii=; fi; \
|
||||
for file in $(INFO_DEPS); do \
|
||||
test -z "$ii" \
|
||||
|| install-info --info-dir=$(DESTDIR)$(infodir) --remove $$file; \
|
||||
done
|
||||
list='$(INFO_DEPS)'; \
|
||||
for file in $$list; do \
|
||||
echo " install-info --info-dir=$(DESTDIR)$(infodir) --remove $$file"; \
|
||||
install-info --info-dir=$(DESTDIR)$(infodir) --remove $$file; \
|
||||
done; \
|
||||
else :; fi
|
||||
@$(NORMAL_UNINSTALL)
|
||||
for file in $(INFO_DEPS); do \
|
||||
(cd $(DESTDIR)$(infodir) && rm -f $$file $$file-[0-9] $$file-[0-9][0-9]); \
|
||||
@list='$(INFO_DEPS)'; \
|
||||
for file in $$list; do \
|
||||
(if cd $(DESTDIR)$(infodir); then \
|
||||
echo " rm -f $$file $$file-[0-9] $$file-[0-9][0-9])"; \
|
||||
rm -f $$file $$file-[0-9] $$file-[0-9][0-9]; \
|
||||
else :; fi); \
|
||||
done
|
||||
|
||||
dist-info: $(INFO_DEPS)
|
||||
for base in $(INFO_DEPS); do \
|
||||
list='$(INFO_DEPS)'; \
|
||||
for base in $$list; do \
|
||||
d=$(srcdir); \
|
||||
for file in `cd $$d && eval echo $$base*`; do \
|
||||
test -f $(distdir)/$$file \
|
||||
@@ -249,7 +261,7 @@ dist-info: $(INFO_DEPS)
|
||||
|
||||
mostlyclean-aminfo:
|
||||
-rm -f fileutils.aux fileutils.cp fileutils.cps fileutils.dvi \
|
||||
fileutils.fl fileutils.fn fileutils.fns fileutils.ky \
|
||||
fileutils.fn fileutils.fns fileutils.pgs fileutils.ky \
|
||||
fileutils.kys fileutils.ps fileutils.log fileutils.pg \
|
||||
fileutils.toc fileutils.tp fileutils.tps fileutils.vr \
|
||||
fileutils.vrs fileutils.op fileutils.tr fileutils.cv \
|
||||
@@ -260,7 +272,7 @@ clean-aminfo:
|
||||
distclean-aminfo:
|
||||
|
||||
maintainer-clean-aminfo:
|
||||
for i in $(INFO_DEPS); do \
|
||||
cd $(srcdir) && for i in $(INFO_DEPS); do \
|
||||
rm -f $$i; \
|
||||
if test "`echo $$i-[0-9]*`" != "$$i-[0-9]*"; then \
|
||||
rm -f $$i-[0-9]*; \
|
||||
@@ -282,28 +294,39 @@ distdir: $(DISTFILES)
|
||||
&& $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnits doc/Makefile
|
||||
@for file in $(DISTFILES); do \
|
||||
d=$(srcdir); \
|
||||
test -f $(distdir)/$$file \
|
||||
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \
|
||||
|| cp -p $$d/$$file $(distdir)/$$file; \
|
||||
if test -d $$d/$$file; then \
|
||||
cp -pr $$d/$$file $(distdir)/$$file; \
|
||||
else \
|
||||
test -f $(distdir)/$$file \
|
||||
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \
|
||||
|| cp -p $$d/$$file $(distdir)/$$file || :; \
|
||||
fi; \
|
||||
done
|
||||
|
||||
$(MAKE) $(AM_MAKEFLAGS) top_distdir="$(top_distdir)" distdir="$(distdir)" dist-info
|
||||
info: $(INFO_DEPS)
|
||||
dvi: $(DVIS)
|
||||
check: all
|
||||
installcheck:
|
||||
install-exec:
|
||||
@$(NORMAL_INSTALL)
|
||||
info-am: $(INFO_DEPS)
|
||||
info: info-am
|
||||
dvi-am: $(DVIS)
|
||||
dvi: dvi-am
|
||||
check-am: all-am
|
||||
check: check-am
|
||||
installcheck-am:
|
||||
installcheck: installcheck-am
|
||||
install-exec-am:
|
||||
install-exec: install-exec-am
|
||||
|
||||
install-data: install-info-am
|
||||
@$(NORMAL_INSTALL)
|
||||
|
||||
install: install-exec install-data all
|
||||
@:
|
||||
|
||||
uninstall: uninstall-info
|
||||
install-data-am: install-info-am
|
||||
install-data: install-data-am
|
||||
|
||||
install-am: all-am
|
||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
||||
install: install-am
|
||||
uninstall-am: uninstall-info
|
||||
uninstall: uninstall-am
|
||||
all-am: Makefile $(INFO_DEPS)
|
||||
all-redirect: all-am
|
||||
install-strip:
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' INSTALL_SCRIPT='$(INSTALL_PROGRAM)' install
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_STRIP_FLAG=-s install
|
||||
installdirs:
|
||||
$(mkinstalldirs) $(DESTDIR)$(infodir)
|
||||
|
||||
@@ -317,23 +340,32 @@ distclean-generic:
|
||||
-rm -f config.cache config.log stamp-h stamp-h[0-9]*
|
||||
|
||||
maintainer-clean-generic:
|
||||
mostlyclean: mostlyclean-vti mostlyclean-aminfo mostlyclean-generic
|
||||
mostlyclean-am: mostlyclean-vti mostlyclean-aminfo mostlyclean-generic
|
||||
|
||||
clean: clean-vti clean-aminfo clean-generic mostlyclean
|
||||
mostlyclean: mostlyclean-am
|
||||
|
||||
distclean: distclean-vti distclean-aminfo distclean-generic clean
|
||||
-rm -f config.status
|
||||
clean-am: clean-vti clean-aminfo clean-generic mostlyclean-am
|
||||
|
||||
maintainer-clean: maintainer-clean-vti maintainer-clean-aminfo \
|
||||
maintainer-clean-generic distclean
|
||||
clean: clean-am
|
||||
|
||||
distclean-am: distclean-vti distclean-aminfo distclean-generic clean-am
|
||||
|
||||
distclean: distclean-am
|
||||
|
||||
maintainer-clean-am: maintainer-clean-vti maintainer-clean-aminfo \
|
||||
maintainer-clean-generic distclean-am
|
||||
@echo "This command is intended for maintainers to use;"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
|
||||
maintainer-clean: maintainer-clean-am
|
||||
|
||||
.PHONY: mostlyclean-vti distclean-vti clean-vti maintainer-clean-vti \
|
||||
install-info-am uninstall-info mostlyclean-aminfo distclean-aminfo \
|
||||
clean-aminfo maintainer-clean-aminfo tags distdir info dvi installcheck \
|
||||
install-exec install-data install uninstall all installdirs \
|
||||
mostlyclean-generic distclean-generic clean-generic \
|
||||
clean-aminfo maintainer-clean-aminfo tags distdir info-am info dvi-am \
|
||||
dvi check check-am installcheck-am installcheck install-exec-am \
|
||||
install-exec install-data-am install-data install-am install \
|
||||
uninstall-am uninstall all-redirect all-am all install-strip \
|
||||
installdirs mostlyclean-generic distclean-generic clean-generic \
|
||||
maintainer-clean-generic clean mostlyclean distclean maintainer-clean
|
||||
|
||||
|
||||
|
||||
@@ -430,7 +430,7 @@ the file to all users.
|
||||
@cindex numeric modes
|
||||
@cindex file permissions, numeric
|
||||
@cindex octal numbers for file modes
|
||||
File permissions are stored internally as 16 bit integers. As an
|
||||
File permissions are stored internally as integers. As an
|
||||
alternative to giving a symbolic mode, you can give an octal (base 8)
|
||||
number that corresponds to the internal representation of the new mode.
|
||||
This number is always interpreted in octal; you do not have to add a
|
||||
@@ -440,12 +440,13 @@ A numeric mode is usually shorter than the corresponding symbolic
|
||||
mode, but it is limited in that it can not take into account a file's
|
||||
previous permissions; it can only set them absolutely.
|
||||
|
||||
The permissions granted to the user, to other users in the file's group,
|
||||
On most systems, the permissions granted to the user,
|
||||
to other users in the file's group,
|
||||
and to other users not in the file's group are each stored as three
|
||||
bits, which are represented as one octal digit. The three special
|
||||
permissions are also each stored as one bit, and they are as a group
|
||||
represented as another octal digit. Here is how the bits are arranged
|
||||
in the 16 bit integer, starting with the lowest valued bit:
|
||||
represented as another octal digit. Here is how the bits are arranged,
|
||||
starting with the lowest valued bit:
|
||||
|
||||
@example
|
||||
Value in Corresponding
|
||||
|
||||
@@ -113,7 +113,7 @@ by the Foundation.
|
||||
@end titlepage
|
||||
|
||||
|
||||
@ifinfo
|
||||
@ifnottex
|
||||
@node Top
|
||||
@top GNU shell utilities
|
||||
|
||||
@@ -140,7 +140,7 @@ This manual documents version @value{VERSION} of the GNU shell utilities.
|
||||
|
||||
* Index:: General index.
|
||||
@end menu
|
||||
@end ifinfo
|
||||
@end ifnottex
|
||||
|
||||
|
||||
@node Introduction
|
||||
@@ -797,7 +797,7 @@ This makes it possible to test @code{expr length quote "$x"} or
|
||||
@code{expr quote "$x" : '.*/\(.\)'} and have it do the right thing even if
|
||||
the value of @var{$x} happens to be (for example) @code{/} or @code{index}.
|
||||
This operator is a GNU extension. It is disabled when
|
||||
the environment variable @var{POSIXLY_CORRECT} is set.
|
||||
the environment variable @env{POSIXLY_CORRECT} is set.
|
||||
|
||||
@end table
|
||||
|
||||
@@ -1749,7 +1749,7 @@ Tell the kernel that the terminal has @var{n} columns. Non-POSIX.
|
||||
@vindex COLUMNS
|
||||
Print the number of rows and columns that the kernel thinks the
|
||||
terminal has. (Systems that don't support rows and cols in the kernel
|
||||
typically use the environment variables @code{LINES} and @code{COLUMNS}
|
||||
typically use the environment variables @env{LINES} and @env{COLUMNS}
|
||||
instead; however, GNU @code{stty} does not know anything about them.)
|
||||
Non-POSIX.
|
||||
|
||||
@@ -2390,6 +2390,33 @@ input. This is useful when you have many dates to process, because the
|
||||
system overhead of starting up the @code{date} executable many times can
|
||||
be considerable.
|
||||
|
||||
@item -I[@var{timespec}]
|
||||
@itemx --iso-8601[=@var{timespec}]
|
||||
@opindex -I[@var{timespec}]
|
||||
@opindex --iso-8601[=@var{timespec}]
|
||||
Display the date using the ISO 8601 format, @samp{%Y-%m-%d}.
|
||||
|
||||
The optional argument @var{timespec} specifies the number of additional
|
||||
terms of the time to include. It can be one of the following:
|
||||
@table @samp
|
||||
@item auto
|
||||
The default behavior: print just the date.
|
||||
|
||||
@item hours
|
||||
Append the hour of the day to the date.
|
||||
|
||||
@item minutes
|
||||
Append the hours and minutes.
|
||||
|
||||
@item seconds
|
||||
Append the hours, minutes, and seconds.
|
||||
@end table
|
||||
|
||||
If showing any time terms, then include the time zone using the format
|
||||
@samp{%z}. If @samp{--utc} is also specified, use @samp{%Z} in place of
|
||||
@samp{%z}.
|
||||
|
||||
@item -R
|
||||
@itemx --rfc-822
|
||||
@opindex -R
|
||||
@opindex --rfc-822
|
||||
@@ -2690,7 +2717,7 @@ Ordinarily, filenames are looked up starting at the root of the
|
||||
directory structure, i.e., @file{/}. @code{chroot} changes the root to
|
||||
the directory @var{newroot} (which must exist) and then runs
|
||||
@var{command} with optional @var{args}. If @var{command} is not
|
||||
specified, the default is the value of the @code{SHELL} environment
|
||||
specified, the default is the value of the @env{SHELL} environment
|
||||
variable or @code{/bin/sh} if not set, invoked with the @samp{-i} option.
|
||||
|
||||
The only options are @samp{--help} and @samp{--version}. @xref{Common
|
||||
@@ -2720,7 +2747,7 @@ to an empty value is different from unsetting it.
|
||||
|
||||
@vindex PATH
|
||||
The first remaining argument specifies the program name to invoke; it is
|
||||
searched for according to the @code{PATH} environment variable. Any
|
||||
searched for according to the @env{PATH} environment variable. Any
|
||||
remaining arguments are passed as arguments to that program.
|
||||
|
||||
@cindex environment, printing
|
||||
@@ -2864,9 +2891,9 @@ effective user id of zero (the super-user).
|
||||
@vindex LOGNAME
|
||||
@cindex login shell
|
||||
By default, @code{su} does not change the current directory.
|
||||
It sets the environment variables @code{HOME} and @code{SHELL}
|
||||
It sets the environment variables @env{HOME} and @env{SHELL}
|
||||
from the password entry for @var{user}, and if @var{user} is not
|
||||
the super-user, sets @code{USER} and @code{LOGNAME} to @var{user}.
|
||||
the super-user, sets @env{USER} and @env{LOGNAME} to @var{user}.
|
||||
By default, the shell is not a login shell.
|
||||
|
||||
Any additional @var{arg}s are passed as additional arguments to the
|
||||
@@ -2917,10 +2944,10 @@ expansion (globbing), which is not likely to be useful.
|
||||
@vindex PATH
|
||||
@cindex login shell, creating
|
||||
Make the shell a login shell. This means the following. Unset all
|
||||
environment variables except @code{TERM}, @code{HOME}, and @code{SHELL}
|
||||
(which are set as described above), and @code{USER} and @code{LOGNAME}
|
||||
environment variables except @env{TERM}, @env{HOME}, and @env{SHELL}
|
||||
(which are set as described above), and @env{USER} and @env{LOGNAME}
|
||||
(which are set, even for the super-user, as described above), and set
|
||||
@code{PATH} to a compiled-in default value. Change to @var{user}'s home
|
||||
@env{PATH} to a compiled-in default value. Change to @var{user}'s home
|
||||
directory. Prepend @samp{-} to the shell's name, intended to make it
|
||||
read its login startup file(s).
|
||||
|
||||
@@ -2933,9 +2960,9 @@ read its login startup file(s).
|
||||
@cindex environment, preserving
|
||||
@flindex /etc/shells
|
||||
@cindex restricted shell
|
||||
Do not change the environment variables @code{HOME}, @code{USER},
|
||||
@code{LOGNAME}, or @code{SHELL}. Run the shell given in the environment
|
||||
variable @code{SHELL} instead of the shell from @var{user}'s passwd
|
||||
Do not change the environment variables @env{HOME}, @env{USER},
|
||||
@env{LOGNAME}, or @env{SHELL}. Run the shell given in the environment
|
||||
variable @env{SHELL} instead of the shell from @var{user}'s passwd
|
||||
entry, unless the user running @code{su} is not the superuser and
|
||||
@var{user}'s shell is restricted. A @dfn{restricted shell} is one that
|
||||
is not listed in the file @file{/etc/shells}, or in a compiled-in list
|
||||
|
||||
1546
doc/texinfo.tex
1546
doc/texinfo.tex
File diff suppressed because it is too large
Load Diff
@@ -103,7 +103,10 @@ by the Foundation.
|
||||
@end titlepage
|
||||
|
||||
|
||||
@ifinfo
|
||||
@c If your makeinfo doesn't grok this @ifnottex directive, then either
|
||||
@c get a newer version of makeinfo or do s/ifnottex/ifinfo/ here and on
|
||||
@c the matching @end directive below.
|
||||
@ifnottex
|
||||
@node Top
|
||||
@top GNU text utilities
|
||||
|
||||
@@ -165,7 +168,7 @@ Operating on sorted files
|
||||
|
||||
@code{ptx}: Produce permuted indexes
|
||||
|
||||
* General options in ptx:: Options which affect general program behaviour.
|
||||
* General options in ptx:: Options which affect general program behavior.
|
||||
* Charset selection in ptx:: Underlying character set considerations.
|
||||
* Input processing in ptx:: Input fields, contexts, and keyword selection.
|
||||
* Output formatting in ptx:: Types of output format, and sizing the fields.
|
||||
@@ -203,7 +206,7 @@ Opening the software toolbox
|
||||
@end detailmenu
|
||||
@end menu
|
||||
|
||||
@end ifinfo
|
||||
@end ifnottex
|
||||
|
||||
|
||||
@node Introduction
|
||||
@@ -961,23 +964,43 @@ optionally outputting in multicolumn format; optionally merges all
|
||||
pr [@var{option}]@dots{} [@var{file}]@dots{}
|
||||
@end example
|
||||
|
||||
By default, a 5-line header is printed: two blank lines; a line with the
|
||||
date, the file name, and the page count; and two more blank lines. A
|
||||
footer of five blank lines is also printed. With the @samp{-f} option, a
|
||||
3-line header is printed: the leading two blank lines are omitted; no
|
||||
footer used. The default @var{page_length} in both cases is 66 lines.
|
||||
The text line of the header takes up the full @var{page_width} in the
|
||||
form @samp{yy-mm-dd HH:MM string Page nnnn}. String is a centered
|
||||
string.
|
||||
By default, a 5-line header is printed at each page: two blank lines;
|
||||
a line with the date, the filename, and the page count; and two more
|
||||
blank lines. A footer of five blank lines is also printed. With the @samp{-F}
|
||||
option, a 3-line header is printed: the leading two blank lines are
|
||||
omitted; no footer is used. The default @var{page_length} in both cases is 66
|
||||
lines. The default number of text lines changes from 56 (without @samp{-F})
|
||||
to 63 (with @samp{-F}). The text line of the header takes up the full
|
||||
@var{page_width} in the form @samp{yyyy-mm-dd HH:MM string Page nnnn}.
|
||||
String is a centered header string.
|
||||
|
||||
Form feeds in the input cause page breaks in the output. Multiple form
|
||||
Form feeds in the input cause page breaks in the output. Multiple form
|
||||
feeds produce empty pages.
|
||||
|
||||
Columns have equal width, separated by an optional string (default
|
||||
space). Lines will always be truncated to line width (default 72),
|
||||
unless you use the @samp{-j} option. For single column output no line
|
||||
truncation occurs by default. Use @samp{-w} option to truncate lines
|
||||
in that case.
|
||||
Columns are of equal width, separated by an optional string (default
|
||||
is @samp{space}). For multicolumn output, lines will always be truncated to
|
||||
@var{page_width} (default 72), unless you use the @samp{-J} option. For single
|
||||
column output no line truncation occurs by default. Use @samp{-W} option to
|
||||
truncate lines in that case.
|
||||
|
||||
Including version 1.22i:
|
||||
|
||||
Some small @var{letter options} (@samp{-s}, @samp{-w}) has been redefined
|
||||
with the object of a better @var{posix} compliance. The output of some
|
||||
further cases has been adapted to other @var{unix}es. A violation of
|
||||
downward compatibility has to be accepted.
|
||||
|
||||
Some @var{new capital letter} options (@samp{-J}, @samp{-S}, @samp{-W})
|
||||
has been introduced to turn off unexpected interferences of small letter
|
||||
options. The @samp{-N} option and the second argument @var{last_page}
|
||||
of @samp{+FIRST_PAGE} offer more flexibility. The detailed handling of
|
||||
form feeds set in the input files requires @samp{-T} option.
|
||||
|
||||
Capital letter options dominate small letter ones.
|
||||
|
||||
Some of the option-arguments (compare @samp{-s}, @samp{-S}, @samp{-e},
|
||||
@samp{-i}, @samp{-n}) cannot be specified as separate arguments from the
|
||||
preceding option letter (already stated in the @var{posix} specification).
|
||||
|
||||
The program accepts the following options. Also see @ref{Common options}.
|
||||
|
||||
@@ -987,32 +1010,39 @@ The program accepts the following options. Also see @ref{Common options}.
|
||||
@itemx --pages=@var{first_page}[:@var{last_page}]
|
||||
@opindex +@var{first_page}[:@var{last_page}]
|
||||
@opindex --pages
|
||||
Begin printing with page @var{first_page} and stop with
|
||||
@var{last_page}. Missing @samp{:@var{last_page}} implies end of file. While
|
||||
estimating the number of skipped pages each form feed in the input file
|
||||
results in a new page. Page counting with and without
|
||||
@samp{+@var{first_page}} is identical. By default, it starts with the
|
||||
first page of input file (not first page printed). Page numbering may be
|
||||
altered by @samp{-N} option.
|
||||
Begin printing with page @var{first_page} and stop with @var{last_page}.
|
||||
Missing @samp{:@var{last_page}} implies end of file. While estimating
|
||||
the number of skipped pages each form feed in the input file results
|
||||
in a new page. Page counting with and without @samp{+@var{first_page}}
|
||||
is identical. By default, counting starts with the first page of input
|
||||
file (not first page printed). Line numbering may be altered by @samp{-N}
|
||||
option.
|
||||
|
||||
@item -@var{column}
|
||||
@itemx --columns=@var{column}
|
||||
@opindex -@var{column}
|
||||
@opindex --columns
|
||||
@cindex down columns
|
||||
With each single @var{file}, produce @var{column}-column output and
|
||||
print columns down. The column width is automatically estimated from
|
||||
@var{page_width}. This option might well cause some columns to be
|
||||
truncated. The number of lines in the columns on each page will be
|
||||
balanced. @samp{-@var{column}} may not be used with @samp{-m} option.
|
||||
With each single @var{file}, produce @var{column} columns of output
|
||||
(default is 1) and print columns down, unless @samp{-a} is used. The
|
||||
column width is automatically decreased as @var{column} increases; unless
|
||||
you use the @samp{-W/-w} option to increase @var{page_width} as well.
|
||||
This option might well cause some lines to be truncated. The number of
|
||||
lines in the columns on each page are balanced. The options @samp{-e}
|
||||
and @samp{-i} are on for multiple text-column output. Together with
|
||||
@samp{-J} option column alignment and line truncation is turned off.
|
||||
Lines of full length are joined in a free field format and @samp{-S}
|
||||
option may set field separators. @samp{-@var{column}} may not be used
|
||||
with @samp{-m} option.
|
||||
|
||||
@item -a
|
||||
@itemx --across
|
||||
@opindex -a
|
||||
@opindex --across
|
||||
@cindex across columns
|
||||
With each single @var{file}, print columns across rather than down.
|
||||
@var{column} must be greater than one.
|
||||
With each single @var{file}, print columns across rather than down. The
|
||||
@samp{-@var{column}} option must be given with @var{column} greater than one.
|
||||
If a line is too long to fit in a column, it is truncated.
|
||||
|
||||
@item -c
|
||||
@itemx --show-control-chars
|
||||
@@ -1034,7 +1064,7 @@ Double space the output.
|
||||
@opindex -e
|
||||
@opindex --expand-tabs
|
||||
@cindex input tabs
|
||||
Expand tabs to spaces on input. Optional argument @var{in-tabchar} is
|
||||
Expand @var{tab}s to spaces on input. Optional argument @var{in-tabchar} is
|
||||
the input tab character (default is @key{TAB}). Second optional
|
||||
argument @var{in-tabwidth} is the input tab character's width (default
|
||||
is 8).
|
||||
@@ -1045,93 +1075,110 @@ is 8).
|
||||
@opindex -F
|
||||
@opindex -f
|
||||
@opindex --form-feed
|
||||
Use a form feed instead of newlines to separate output pages. Default
|
||||
page length of 66 lines is not altered. But the number of lines of text
|
||||
per page changes from 56 to 63 lines.
|
||||
|
||||
Use a form feed instead of newlines to separate output pages. The default
|
||||
page length of 66 lines is not altered. But the number of lines of text
|
||||
per page changes from default 56 to 63 lines.
|
||||
|
||||
@item -h @var{HEADER}
|
||||
@itemx --header=@var{HEADER}
|
||||
@opindex -h
|
||||
@opindex --header
|
||||
Replace the file name in the header with the centered string
|
||||
@var{header}. Left-hand-side truncation (marked by a @samp{*}) may occur
|
||||
if the total header line @samp{yy-mm-dd HH:MM HEADER Page nnnn}
|
||||
becomes larger than @var{page_width}. @samp{-h ""} prints a blank line
|
||||
header. Don't use @samp{-h""}. A space between the -h option and the
|
||||
argument is always peremptory.
|
||||
Replace the filename in the header with the centered string @var{header}.
|
||||
Left-hand-side truncation (marked by a @samp{*}) may occur if the total
|
||||
header line @samp{yyyy-mm-dd HH:MM HEADER Page nnnn} becomes larger than
|
||||
@var{page_width}. @samp{-h ""} prints a blank line header. Don't use
|
||||
@samp{-h""}.
|
||||
A space between the @samp{-h} option and the argument is always
|
||||
indispensable.
|
||||
|
||||
@item -i[@var{out-tabchar}[@var{out-tabwidth}]]
|
||||
@itemx --output-tabs[=@var{out-tabchar}[@var{out-tabwidth}]]
|
||||
@opindex -i
|
||||
@opindex --output-tabs
|
||||
@cindex output tabs
|
||||
Replace spaces with tabs on output. Optional argument @var{out-tabchar}
|
||||
Replace spaces with @var{tab}s on output. Optional argument @var{out-tabchar}
|
||||
is the output tab character (default is @key{TAB}). Second optional
|
||||
argument @var{out-tabwidth} is the output tab character's width (default
|
||||
is 8).
|
||||
|
||||
@item -j
|
||||
@item -J
|
||||
@itemx --join-lines
|
||||
@opindex -j
|
||||
@opindex -J
|
||||
@opindex --join-lines
|
||||
Merge lines of full length. Used together with the column options
|
||||
@samp{-@var{column}}, @samp{-a -@var{column}} or @samp{-m}. Turns off
|
||||
@samp{-w} line truncation; no column alignment used; may be used with
|
||||
@samp{-s[@var{separator}]}.
|
||||
Merge lines of full length. Used together with the column options
|
||||
@samp{-@var{column}}, @samp{-a -@var{column}} or @samp{-m}. Turns off
|
||||
@samp{-W/-w} line truncation;
|
||||
no column alignment used; may be used with @samp{-S[@var{string}]}.
|
||||
@samp{-J} has been introduced (together with @samp{-W} and @samp{-S})
|
||||
to disentangle the old (@var{posix} compliant) options @samp{-w} and
|
||||
@samp{-s} along with the three column options.
|
||||
|
||||
|
||||
@item -l @var{page_length}
|
||||
@itemx --length=@var{page_length}
|
||||
@opindex -l
|
||||
@opindex --length
|
||||
Set the page length to @var{page_length} (default 66) lines. If
|
||||
@var{page_length} is less than or equal 10 (and <= 3 with @samp{-f}),
|
||||
the headers and footers are omitted, and all form feeds set in input
|
||||
files are eliminated, as if the @samp{-T} option had been given.
|
||||
Set the page length to @var{page_length} (default 66) lines, including
|
||||
the lines of the header [and the footer]. If @var{page_length} is less
|
||||
than or equal 10 (and <= 3 with @samp{-F}), the header and footer are
|
||||
omitted, and all form feeds set in input files are eliminated, as if
|
||||
the @samp{-T} option had been given.
|
||||
|
||||
@item -m
|
||||
@itemx --merge
|
||||
@opindex -m
|
||||
@opindex --merge
|
||||
Merge and print all @var{file}s in parallel, one in each column. If a
|
||||
line is too long to fit in a column, it is truncated (but see
|
||||
@samp{-j}). @samp{-s[@var{separator}]} may be used. Empty pages in some
|
||||
@var{file}s (form feeds set) produce empty columns, still marked by
|
||||
@var{separator}. Completely empty common pages show no separators or
|
||||
line numbers. The default header becomes
|
||||
@samp{yy-mm-dd HH:MM <blanks> Page nnnn}; may be used with
|
||||
@samp{-h @var{header}} to fill up the middle part.
|
||||
|
||||
Merge and print all @var{file}s in parallel, one in each column. If a
|
||||
line is too long to fit in a column, it is truncated, unless @samp{-J}
|
||||
option is used. @samp{-S[@var{string}]} may be used. Empty pages in
|
||||
some @var{file}s (form feeds set) produce empty columns, still marked
|
||||
by @var{string}. The result is a continuous line numbering and column
|
||||
marking throughout the whole merged file. Completely empty merged pages
|
||||
show no separators or line numbers. The default header becomes
|
||||
@samp{yyyy-mm-dd HH:MM <blanks> Page nnnn}; may be used with
|
||||
@samp{-h @var{header}} to fill up the middle blank part.
|
||||
|
||||
@item -n[@var{number-separator}[@var{digits}]]
|
||||
@itemx --number-lines[=@var{number-separator}[@var{digits}]]
|
||||
@opindex -n
|
||||
@opindex --number-lines
|
||||
Precede each column with a line number; with parallel @var{file}s
|
||||
(@samp{-m}), precede only each line with a line number. Optional argument
|
||||
@var{number-separator} is the character to print after each number
|
||||
(default is @key{TAB}). Optional argument @var{digits} is the number of
|
||||
digits per line number (default is 5). Default line counting starts with
|
||||
first line of the input file (not with the first line printed, see
|
||||
@samp{-N}).
|
||||
Provide @var{digits} digit line numbering (default for @var{digits} is
|
||||
5). With multicolumn output the number occupies the first @var{digits}
|
||||
column positions of each text column or only each line of @samp{-m}
|
||||
output. With single column output the number precedes each line just as
|
||||
@samp{-m} does. Default counting of the line numbers starts with 1st
|
||||
line of the input file (not the 1st line printed, compare the
|
||||
@samp{--page} option and @samp{-N} option).
|
||||
Optional argument @var{number-separator} is the character appended to
|
||||
the line number to separate it from the text followed. The default
|
||||
separator is a @key{TAB}. In a strict sense a @key{TAB} is always
|
||||
printed with single column output only. The @var{TAB}-width varies
|
||||
with the @var{TAB}-position, e.g. with the left @var{margin} specified
|
||||
by @samp{-o} option. With multicolumn output priority is given to
|
||||
@samp{equal width of output columns} (a @var{posix} specification).
|
||||
The @var{TAB}-width is fixed to the value of the 1st column and does
|
||||
not change with different values of left @var{margin}. That means a
|
||||
fixed number of spaces is always printed in the place of the
|
||||
@var{number-separator tab}. The tabification depends upon the output
|
||||
position.
|
||||
|
||||
@item -N @var{line_number}
|
||||
@itemx --first-line-number=@var{line_number}
|
||||
@opindex -N
|
||||
@opindex --first-line-number
|
||||
Start line counting with no. @var{line_number} at first line of first
|
||||
page printed.
|
||||
Start line counting with the number @var{line_number} at first line of
|
||||
first page printed (in most cases not the first line of the input file).
|
||||
|
||||
@item -o @var{n}
|
||||
@itemx --indent=@var{n}
|
||||
@item -o @var{margin}
|
||||
@itemx --indent=@var{margin}
|
||||
@opindex -o
|
||||
@opindex --indent
|
||||
@cindex indenting lines
|
||||
@cindex left margin
|
||||
Indent each line with @var{n} (default is zero) spaces wide, i.e., set
|
||||
the left margin. The total page width is @var{n} plus the width set
|
||||
with the @samp{-w} option.
|
||||
Indent each line with a margin @var{margin} spaces wide (default is zero).
|
||||
The total page width is the size of the margin plus the @var{page_width}
|
||||
set with the @samp{-W/-w} option. A limited overflow may occur with
|
||||
numbered single column output (compare @samp{-n} option).
|
||||
|
||||
@item -r
|
||||
@itemx --no-file-warnings
|
||||
@@ -1140,34 +1187,50 @@ with the @samp{-w} option.
|
||||
Do not print a warning message when an argument @var{file} cannot be
|
||||
opened. (The exit status will still be nonzero, however.)
|
||||
|
||||
@item -s[@var{separator}]
|
||||
@itemx --separator[=@var{separator}]
|
||||
@item -s[@var{char}]
|
||||
@itemx --separator[=@var{char}]
|
||||
@opindex -s
|
||||
@opindex --separator
|
||||
Separate columns by a string @var{separator}. Don't use
|
||||
@samp{-s @var{separator}}, no space between flag and argument. If this
|
||||
option is omitted altogether, the default is @key{TAB} together with
|
||||
@samp{-j} option and space otherwise (same as @samp{-s" "}). With
|
||||
@samp{-s} only, no separator is used (same as @samp{-s""}). @samp{-s}
|
||||
does not affect line truncation or column alignment.
|
||||
Separate columns by a single character @var{char}. Default for @var{char}
|
||||
is the @key{TAB} character without @samp{-w} and @samp{no character} with
|
||||
@samp{-w}. Without @samp{-s} default separator @samp{space} is set.
|
||||
@samp{-s[char]} turns off line truncation of all three column options
|
||||
(@samp{-COLUMN}|@samp{-a -COLUMN}|@samp{-m}) except @samp{-w} is set.
|
||||
That is a @var{posix} compliant formulation.
|
||||
|
||||
|
||||
@item -S[@var{string}]
|
||||
@itemx --sep-string[=@var{string}]
|
||||
@opindex -S
|
||||
@opindex --sep-string
|
||||
Separate columns by any string @var{string}. The @samp{-S} option doesn't
|
||||
react upon the @samp{-W/-w} option (unlike @samp{-s} option does). It
|
||||
does not affect line truncation or column alignment. A separator is
|
||||
defined, nothing else. Without @samp{-S}: default separator @key{TAB}
|
||||
is used with @samp{-J} and @samp{space} otherwise (same as @samp{-S" "}).
|
||||
With @samp{-S} only: no separator is used, same as @samp{-S""}. Quotes
|
||||
should be used with blanks and some shell active characters. Some of the
|
||||
@code{pr} options don't allow the option letter to be separated from its
|
||||
argument. @samp{-S/-s} is one of them. Don't use @samp{-S "STRING"}.
|
||||
That's @var{posix} compliant.
|
||||
|
||||
@item -t
|
||||
@itemx --omit-header
|
||||
@opindex -t
|
||||
@opindex --omit-header
|
||||
Do not print the usual header [and footer] on each page, and do not fill
|
||||
out the bottoms of pages (with blank lines or a form feed). No page
|
||||
structure is produced, but retain form feeds set in the input files. The
|
||||
predefined page layout is not changed. @samp{-t} or @samp{-T} may be
|
||||
useful together with other options; e.g.: @samp{-t -e4}, expand
|
||||
@key{TAB} in the input file to 4 spaces but do not do any other changes.
|
||||
Use of @samp{-t} overrides @samp{-h}.
|
||||
out the bottom of pages (with blank lines or a form feed). No page
|
||||
structure is produced, but form feeds set in the input files are retained.
|
||||
The predefined pagination is not changed. @samp{-t} or @samp{-T} may be
|
||||
useful together with other options; e.g.: @samp{-t -e4}, expand @key{TAB}
|
||||
in the input file to 4 spaces but don't make any other changes. Use of
|
||||
@samp{-t} overrides @samp{-h}.
|
||||
|
||||
@item -T
|
||||
@itemx --omit-pagination
|
||||
@opindex -T
|
||||
@opindex --omit-pagination
|
||||
Do not print header [and footer]. In addition eliminate all form feeds
|
||||
Do not print header [and footer]. In addition eliminate all form feeds
|
||||
set in the input files.
|
||||
|
||||
@item -v
|
||||
@@ -1180,14 +1243,28 @@ Print unprintable characters in octal backslash notation.
|
||||
@itemx --width=@var{page_width}
|
||||
@opindex -w
|
||||
@opindex --width
|
||||
Set the page width to @var{page_width} (default 72) characters.
|
||||
With/without @samp{-w}, header lines are always truncated to
|
||||
@var{page_width} characters. With @samp{-w}, text lines are truncated,
|
||||
unless @samp{-j} is used. Without @samp{-w} together with one of the
|
||||
column options @samp{-@var{column}}, @samp{-a -@var{column}} or
|
||||
@samp{-m}, default truncation of text lines to 72 characters is used.
|
||||
Without @samp{-w} and without any of the column options, no line
|
||||
truncation is used. That's equivalent to @samp{-w 72 -j}.
|
||||
Set page width to @var{page_width} characters for multiple text-column
|
||||
output only (default for @var{page_width} is 72). @samp{-s[CHAR]} turns
|
||||
off the default page width and any line truncation and column alignment.
|
||||
Lines of full length are merged, regardless of the column options
|
||||
set. No @var{page_width} setting is possible with single column output.
|
||||
A @var{posix} compliant formulation.
|
||||
|
||||
@item -W @var{page_width}
|
||||
@itemx --page_width=@var{page_width}
|
||||
@opindex -W
|
||||
@opindex --page_width
|
||||
Set the page width to @var{page_width} characters. That's valid with and
|
||||
without a column option. Text lines are truncated, unless @samp{-J}
|
||||
is used. Together with one of the three column options
|
||||
(@samp{-@var{column}}, @samp{-a -@var{column}} or @samp{-m}) column
|
||||
alignment is always used. The separator options @samp{-S} or @samp{-s}
|
||||
don't affect the @samp{-W} option. Default is 72 characters. Without
|
||||
@samp{-W @var{page_width}} and without any of the column options NO line
|
||||
truncation is used (defined to keep downward compatibility and to meet
|
||||
most frequent tasks). That's equivalent to @samp{-W 72 -J}. With and
|
||||
without @samp{-W @var{page_width}} the header line is always truncated
|
||||
to avoid line overflow.
|
||||
|
||||
@end table
|
||||
|
||||
@@ -1207,7 +1284,7 @@ lines. Synopsis:
|
||||
fold [@var{option}]@dots{} [@var{file}]@dots{}
|
||||
@end example
|
||||
|
||||
By default, @code{fold} breaks lines wider than 80 columns. The output
|
||||
By default, @code{fold} breaks lines wider than 80 columns. The output
|
||||
is split into as many lines as necessary.
|
||||
|
||||
@cindex screen columns
|
||||
@@ -1991,7 +2068,7 @@ addition, if the final byte of an input file is not a newline, GNU
|
||||
Upon any error, @code{sort} exits with a status of @samp{2}.
|
||||
|
||||
@vindex TMPDIR
|
||||
If the environment variable @code{TMPDIR} is set, @code{sort} uses its
|
||||
If the environment variable @env{TMPDIR} is set, @code{sort} uses its
|
||||
value as the directory for temporary files instead of @file{/tmp}. The
|
||||
@samp{-T @var{tempdir}} option in turn overrides the environment
|
||||
variable.
|
||||
@@ -2112,9 +2189,11 @@ check that no pair of consecutive lines compares equal.
|
||||
@opindex -k
|
||||
@cindex sort field
|
||||
The recommended, @sc{POSIX}, option for specifying a sort field. The field
|
||||
consists of the line between @var{pos1} and @var{pos2} (or the end of
|
||||
the line, if @var{pos2} is omitted), inclusive. Fields and character
|
||||
positions are numbered starting with 1. See below.
|
||||
consists of the part of the line between @var{pos1} and @var{pos2} (or the
|
||||
end of the line, if @var{pos2} is omitted), @emph{inclusive}.
|
||||
Fields and character positions are numbered starting with 1.
|
||||
So to sort on the second field, you'd use @samp{-k 2,2}
|
||||
See below for more examples.
|
||||
|
||||
@item -z
|
||||
@opindex -z
|
||||
@@ -2509,7 +2588,7 @@ convention more than once per program invocation.
|
||||
@node General options in ptx
|
||||
@subsection General options
|
||||
|
||||
@table @code
|
||||
@table @samp
|
||||
|
||||
@item -C
|
||||
@itemx --copyright
|
||||
@@ -2546,7 +2625,7 @@ expression for a keyword allows foreign or diacriticized letters.
|
||||
Keyword sorting, however, is still crude; it obeys the underlying
|
||||
character set ordering quite blindly.
|
||||
|
||||
@table @code
|
||||
@table @samp
|
||||
|
||||
@item -f
|
||||
@itemx --ignore-case
|
||||
@@ -2558,18 +2637,18 @@ Fold lower case letters to upper case for sorting.
|
||||
@node Input processing in ptx
|
||||
@subsection Word selection and input processing
|
||||
|
||||
@table @code
|
||||
@table @samp
|
||||
|
||||
@item -b @var{file}
|
||||
@item --break-file=@var{file}
|
||||
|
||||
This option is an alternative way to option @code{-W} for describing
|
||||
which characters make up words. This option introduces the name of a
|
||||
This option provides an alternative (to @samp{-W}) method of describing
|
||||
which characters make up words. It introduces the name of a
|
||||
file which contains a list of characters which can@emph{not} be part of
|
||||
one word, this file is called the @dfn{Break file}. Any character which
|
||||
is not part of the Break file is a word constituent. If both options
|
||||
@code{-b} and @code{-W} are specified, then @code{-W} has precedence and
|
||||
@code{-b} is ignored.
|
||||
@samp{-b} and @samp{-W} are specified, then @samp{-W} has precedence and
|
||||
@samp{-b} is ignored.
|
||||
|
||||
When GNU extensions are enabled, the only way to avoid newline as a
|
||||
break character is to write all the break characters in the file with no
|
||||
@@ -2584,7 +2663,7 @@ The file associated with this option contains a list of words which will
|
||||
never be taken as keywords in concordance output. It is called the
|
||||
@dfn{Ignore file}. The file contains exactly one word in each line; the
|
||||
end of line separation of words is not subject to the value of the
|
||||
@code{-S} option.
|
||||
@samp{-S} option.
|
||||
|
||||
There is a default Ignore file used by @code{ptx} when this option is
|
||||
not specified, usually found in @file{/usr/local/lib/eign} if this has
|
||||
@@ -2598,7 +2677,7 @@ The file associated with this option contains a list of words which will
|
||||
be retained in concordance output, any word not mentioned in this file
|
||||
is ignored. The file is called the @dfn{Only file}. The file contains
|
||||
exactly one word in each line; the end of line separation of words is
|
||||
not subject to the value of the @code{-S} option.
|
||||
not subject to the value of the @samp{-S} option.
|
||||
|
||||
There is no default for the Only file. In the case there are both an
|
||||
Only file and an Ignore file, a word will be subject to be a keyword
|
||||
@@ -2611,12 +2690,12 @@ On each input line, the leading sequence of non white characters will be
|
||||
taken to be a reference that has the purpose of identifying this input
|
||||
line on the produced permuted index. For more information about reference
|
||||
production, see @xref{Output formatting in ptx}.
|
||||
Using this option changes the default value for option @code{-S}.
|
||||
Using this option changes the default value for option @samp{-S}.
|
||||
|
||||
Using this option, the program does not try very hard to remove
|
||||
references from contexts in output, but it succeeds in doing so
|
||||
@emph{when} the context ends exactly at the newline. If option
|
||||
@code{-r} is used with @code{-S} default value, or when GNU extensions
|
||||
@samp{-r} is used with @samp{-S} default value, or when GNU extensions
|
||||
are disabled, this condition is always met and references are completely
|
||||
excluded from the output contexts.
|
||||
|
||||
@@ -2628,25 +2707,25 @@ line or the end of a sentence. In fact, there is other distinction
|
||||
between end of lines or end of sentences than the effect of this regular
|
||||
expression, and input line boundaries have no special significance
|
||||
outside this option. By default, when GNU extensions are enabled and if
|
||||
@code{-r} option is not used, end of sentences are used. In this
|
||||
@samp{-r} option is not used, end of sentences are used. In this
|
||||
case, the precise @var{regex} is imported from GNU emacs:
|
||||
|
||||
@example
|
||||
[.?!][]\"')@}]*\\($\\|\t\\| \\)[ \t\n]*
|
||||
@end example
|
||||
|
||||
Whenever GNU extensions are disabled or if @code{-r} option is used, end
|
||||
Whenever GNU extensions are disabled or if @samp{-r} option is used, end
|
||||
of lines are used; in this case, the default @var{regexp} is just:
|
||||
|
||||
@example
|
||||
\n
|
||||
@end example
|
||||
|
||||
Using an empty REGEXP is equivalent to completely disabling end of line or end
|
||||
of sentence recognition. In this case, the whole file is considered to
|
||||
be a single big line or sentence. The user might want to disallow all
|
||||
truncation flag generation as well, through option @code{-F ""}.
|
||||
@xref{Regexps, , Syntax of Regular Expressions, emacs, The GNU Emacs
|
||||
Using an empty @var{regexp} is equivalent to completely disabling end of
|
||||
line or end of sentence recognition. In this case, the whole file is
|
||||
considered to be a single big line or sentence. The user might want to
|
||||
disallow all truncation flag generation as well, through option @samp{-F
|
||||
""}. @xref{Regexps, , Syntax of Regular Expressions, emacs, The GNU Emacs
|
||||
Manual}.
|
||||
|
||||
When the keywords happen to be near the beginning of the input line or
|
||||
@@ -2668,11 +2747,11 @@ the corresponding characters by @code{ptx} itself.
|
||||
|
||||
This option selects which regular expression will describe each keyword.
|
||||
By default, if GNU extensions are enabled, a word is a sequence of
|
||||
letters; the @var{regexp} used is @code{\w+}. When GNU extensions are
|
||||
letters; the @var{regexp} used is @samp{\w+}. When GNU extensions are
|
||||
disabled, a word is by default anything which ends with a space, a tab
|
||||
or a newline; the @var{regexp} used is @code{[^ \t\n]+}.
|
||||
or a newline; the @var{regexp} used is @samp{[^ \t\n]+}.
|
||||
|
||||
An empty REGEXP is equivalent to not using this option, letting the
|
||||
An empty @var{regexp} is equivalent to not using this option, letting the
|
||||
default dive in. @xref{Regexps, , Syntax of Regular Expressions, emacs,
|
||||
The GNU Emacs Manual}.
|
||||
|
||||
@@ -2686,15 +2765,15 @@ the corresponding characters by @code{ptx} itself.
|
||||
@node Output formatting in ptx
|
||||
@subsection Output formatting
|
||||
|
||||
Output format is mainly controlled by @code{-O} and @code{-T} options,
|
||||
described in the table below. When neither @code{-O} nor @code{-T} is
|
||||
Output format is mainly controlled by @samp{-O} and @samp{-T} options,
|
||||
described in the table below. When neither @samp{-O} nor @samp{-T} is
|
||||
selected, and if GNU extensions are enabled, the program choose an
|
||||
output format suited for a dumb terminal. Each keyword occurrence is
|
||||
output to the center of one line, surrounded by its left and right
|
||||
contexts. Each field is properly justified, so the concordance output
|
||||
could readily be observed. As a special feature, if automatic
|
||||
references are selected by option @code{-A} and are output before the
|
||||
left context, that is, if option @code{-R} is @emph{not} selected, then
|
||||
references are selected by option @samp{-A} and are output before the
|
||||
left context, that is, if option @samp{-R} is @emph{not} selected, then
|
||||
a colon is added after the reference; this nicely interfaces with GNU
|
||||
Emacs @code{next-error} processing. In this default output format, each
|
||||
white space character, like newline and tab, is merely changed to
|
||||
@@ -2705,7 +2784,7 @@ characters is transmitted verbatim.
|
||||
|
||||
Output format is further controlled by the following options.
|
||||
|
||||
@table @code
|
||||
@table @samp
|
||||
|
||||
@item -g @var{number}
|
||||
@itemx --gap-size=@var{number}
|
||||
@@ -2718,7 +2797,7 @@ line.
|
||||
|
||||
Select the output maximum width of each final line. If references are
|
||||
used, they are included or excluded from the output maximum width
|
||||
depending on the value of option @code{-R}. If this option is not
|
||||
depending on the value of option @samp{-R}. If this option is not
|
||||
selected, that is, when references are output before the left context,
|
||||
the output maximum width takes into account the maximum length of all
|
||||
references. If this options is selected, that is, when references are
|
||||
@@ -2732,22 +2811,22 @@ them.
|
||||
Select automatic references. Each input line will have an automatic
|
||||
reference made up of the file name and the line ordinal, with a single
|
||||
colon between them. However, the file name will be empty when standard
|
||||
input is being read. If both @code{-A} and @code{-r} are selected, then
|
||||
input is being read. If both @samp{-A} and @samp{-r} are selected, then
|
||||
the input reference is still read and skipped, but the automatic
|
||||
reference is used at output time, overriding the input reference.
|
||||
|
||||
@item -R
|
||||
@itemx --right-side-refs
|
||||
|
||||
In default output format, when option @code{-R} is not used, any
|
||||
reference produced by the effect of options @code{-r} or @code{-A} are
|
||||
In default output format, when option @samp{-R} is not used, any
|
||||
reference produced by the effect of options @samp{-r} or @samp{-A} are
|
||||
given to the far right of output lines, after the right context. In
|
||||
default output format, when option @code{-R} is specified, references
|
||||
default output format, when option @samp{-R} is specified, references
|
||||
are rather given to the beginning of each output line, before the left
|
||||
context. For any other output format, option @code{-R} is almost
|
||||
context. For any other output format, option @samp{-R} is almost
|
||||
ignored, except for the fact that the width of references is @emph{not}
|
||||
taken into account in total output width given by @code{-w} whenever
|
||||
@code{-R} is selected.
|
||||
taken into account in total output width given by @samp{-w} whenever
|
||||
@samp{-R} is selected.
|
||||
|
||||
This option is automatically selected whenever GNU extensions are
|
||||
disabled.
|
||||
@@ -2758,15 +2837,15 @@ disabled.
|
||||
This option will request that any truncation in the output be reported
|
||||
using the string @var{string}. Most output fields theoretically extend
|
||||
towards the beginning or the end of the current line, or current
|
||||
sentence, as selected with option @code{-S}. But there is a maximum
|
||||
allowed output line width, changeable through option @code{-w}, which is
|
||||
sentence, as selected with option @samp{-S}. But there is a maximum
|
||||
allowed output line width, changeable through option @samp{-w}, which is
|
||||
further divided into space for various output fields. When a field has
|
||||
to be truncated because cannot extend until the beginning or the end of
|
||||
the current line to fit in the, then a truncation occurs. By default,
|
||||
the string used is a single slash, as in @code{-F /}.
|
||||
the string used is a single slash, as in @samp{-F /}.
|
||||
|
||||
@var{string} may have more than one character, as in @code{-F ...}.
|
||||
Also, in the particular case @var{string} is empty (@code{-F ""}),
|
||||
@var{string} may have more than one character, as in @samp{-F ...}.
|
||||
Also, in the particular case @var{string} is empty (@samp{-F ""}),
|
||||
truncation flagging is disabled, and no truncation marks are appended in
|
||||
this case.
|
||||
|
||||
@@ -2811,9 +2890,9 @@ line will look like:
|
||||
@end example
|
||||
|
||||
@noindent
|
||||
so it will be possible to write write a @code{\xx} definition to take
|
||||
care of the output typesetting. Note that when references are not being
|
||||
produced, that is, neither option @code{-A} nor option @code{-r} is
|
||||
so it will be possible to write a @code{\xx} definition to take care of
|
||||
the output typesetting. Note that when references are not being
|
||||
produced, that is, neither option @samp{-A} nor option @samp{-r} is
|
||||
selected, the last parameter of each @code{\xx} call is inhibited.
|
||||
Option @samp{-M} might be used to change @samp{xx} to another macro
|
||||
name.
|
||||
@@ -2872,10 +2951,10 @@ meaning when GNU extensions are enabled, as explained below.
|
||||
@item
|
||||
By default, concordance output is not formatted for @code{troff} or
|
||||
@code{nroff}. It is rather formatted for a dumb terminal. @code{troff}
|
||||
or @code{nroff} output may still be selected through option @code{-O}.
|
||||
or @code{nroff} output may still be selected through option @samp{-O}.
|
||||
|
||||
@item
|
||||
Unless @code{-R} option is used, the maximum reference width is
|
||||
Unless @samp{-R} option is used, the maximum reference width is
|
||||
subtracted from the total output line width. With GNU extensions
|
||||
disabled, width of references is not taken into account in the output
|
||||
line width computations.
|
||||
@@ -2884,7 +2963,7 @@ line width computations.
|
||||
All 256 characters, even @kbd{NUL}s, are always read and processed from
|
||||
input file with no adverse effect, even if GNU extensions are disabled.
|
||||
However, System V @code{ptx} does not accept 8-bit characters, a few
|
||||
control characters are rejected, and the tilda @kbd{~} is condemned.
|
||||
control characters are rejected, and the tilde @kbd{~} is condemned.
|
||||
|
||||
@item
|
||||
Input line length is only limited by available memory, even if GNU
|
||||
@@ -2967,12 +3046,12 @@ take up 1 character.
|
||||
Print only the fields listed in @var{field-list}. Fields are
|
||||
separated by a @key{TAB} by default.
|
||||
|
||||
@item -d @var{delim}
|
||||
@itemx --delimiter=@var{delim}
|
||||
@item -d @var{input_delim_byte}
|
||||
@itemx --delimiter=@var{input_delim_byte}
|
||||
@opindex -d
|
||||
@opindex --delimiter
|
||||
For @samp{-f}, fields are separated by the first character in @var{delim}
|
||||
(default is @key{TAB}).
|
||||
For @samp{-f}, fields are separated in the input by the first character
|
||||
in @var{input_delim_byte} (default is @key{TAB}).
|
||||
|
||||
@item -n
|
||||
@opindex -n
|
||||
@@ -2985,6 +3064,12 @@ Do not split multi-byte characters (no-op for now).
|
||||
For @samp{-f}, do not print lines that do not contain the field separator
|
||||
character.
|
||||
|
||||
@itemx --output-delimiter=@var{output_delim_string}
|
||||
@opindex --output-delimiter
|
||||
For @samp{-f}, output fields are separated by @var{output_delim_string}
|
||||
The default is to use the input delimiter.
|
||||
|
||||
|
||||
@end table
|
||||
|
||||
|
||||
@@ -3443,7 +3528,7 @@ cat "$@@" \
|
||||
@subsection Warning messages
|
||||
|
||||
@vindex POSIXLY_CORRECT
|
||||
Setting the environment variable @code{POSIXLY_CORRECT} turns off the
|
||||
Setting the environment variable @env{POSIXLY_CORRECT} turns off the
|
||||
following warning and error messages, for strict compliance with
|
||||
@sc{POSIX.2}. Otherwise, the following diagnostics are issued:
|
||||
|
||||
|
||||
21
lib/.gdb-history
Normal file
21
lib/.gdb-history
Normal file
@@ -0,0 +1,21 @@
|
||||
r 206.65.212.10
|
||||
b main
|
||||
r
|
||||
n
|
||||
s
|
||||
n
|
||||
p addr
|
||||
p addr
|
||||
p he->h_name
|
||||
n
|
||||
q
|
||||
b canon_host
|
||||
r 206.65.212.10
|
||||
n
|
||||
p he
|
||||
p *he
|
||||
n
|
||||
n
|
||||
p (he->h_addrtype)
|
||||
n
|
||||
q
|
||||
@@ -11,8 +11,9 @@ addext.c argmatch.c backupfile.c basename.c \
|
||||
closeout.c dirname.c exclude.c filemode.c \
|
||||
full-write.c human.c idcache.c \
|
||||
isdir.c long-options.c makepath.c modechange.c hash.c path-concat.c \
|
||||
quotearg.c safe-read.c save-cwd.c savedir.c stripslash.c userspec.c xgetcwd.c \
|
||||
xmalloc.c xstrdup.c xstrtol.c xstrtoul.c yesno.c
|
||||
quotearg.c safe-read.c save-cwd.c savedir.c stripslash.c userspec.c \
|
||||
version-etc.c xgetcwd.c xmalloc.c xstrdup.c \
|
||||
xstrtol.c xstrtoul.c xstrtoumax.c yesno.c
|
||||
|
||||
libfu_a_LIBADD = @LIBOBJS@ @ALLOCA@
|
||||
libfu_a_DEPENDENCIES = $(libfu_a_LIBADD)
|
||||
@@ -22,7 +23,7 @@ dirname.h error.h exclude.h filemode.h fnmatch.h fsusage.h \
|
||||
getdate.h getline.h getopt.h group-member.h human.h lchown.h long-options.h \
|
||||
makepath.h modechange.h mountlist.h hash.h path-concat.h pathmax.h \
|
||||
posixtm.h quotearg.h regex.h safe-read.h save-cwd.h savedir.h strverscmp.h \
|
||||
xalloc.h xstrtol.h xstrtoul.h
|
||||
version-etc.h xalloc.h xstrtol.h
|
||||
|
||||
BUILT_SOURCES = getdate.c lstat.c stat.c
|
||||
|
||||
|
||||
564
lib/Makefile.in
564
lib/Makefile.in
@@ -1,6 +1,6 @@
|
||||
# Makefile.in generated automatically by automake 1.3b from Makefile.am
|
||||
# Makefile.in generated automatically by automake 1.4a from Makefile.am
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
|
||||
# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
@@ -10,8 +10,7 @@
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
|
||||
SHELL = /bin/sh
|
||||
SHELL = @SHELL@
|
||||
|
||||
srcdir = @srcdir@
|
||||
top_srcdir = @top_srcdir@
|
||||
@@ -49,6 +48,7 @@ INSTALL = @INSTALL@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
INSTALL_STRIP_FLAG =
|
||||
transform = @program_transform_name@
|
||||
|
||||
NORMAL_INSTALL = :
|
||||
@@ -57,6 +57,10 @@ POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
host_alias = @host_alias@
|
||||
host_triplet = @host@
|
||||
AMTAR = @AMTAR@
|
||||
AMTARFLAGS = @AMTARFLAGS@
|
||||
CATALOGS = @CATALOGS@
|
||||
CATOBJEXT = @CATOBJEXT@
|
||||
CC = @CC@
|
||||
@@ -64,8 +68,10 @@ CPP = @CPP@
|
||||
DATADIRNAME = @DATADIRNAME@
|
||||
DF_PROG = @DF_PROG@
|
||||
GENCAT = @GENCAT@
|
||||
GETCONF = @GETCONF@
|
||||
GMOFILES = @GMOFILES@
|
||||
GMSGFMT = @GMSGFMT@
|
||||
GNU_PACKAGE = @GNU_PACKAGE@
|
||||
GT_NO = @GT_NO@
|
||||
GT_YES = @GT_YES@
|
||||
INCLUDE_LOCALE_H = @INCLUDE_LOCALE_H@
|
||||
@@ -90,6 +96,7 @@ VERSION = @VERSION@
|
||||
YACC = @YACC@
|
||||
l = @l@
|
||||
|
||||
|
||||
AUTOMAKE_OPTIONS = ../src/ansi2knr
|
||||
|
||||
noinst_LIBRARIES = libfu.a
|
||||
@@ -101,8 +108,10 @@ addext.c argmatch.c backupfile.c basename.c \
|
||||
closeout.c dirname.c exclude.c filemode.c \
|
||||
full-write.c human.c idcache.c \
|
||||
isdir.c long-options.c makepath.c modechange.c hash.c path-concat.c \
|
||||
quotearg.c safe-read.c save-cwd.c savedir.c stripslash.c userspec.c xgetcwd.c \
|
||||
xmalloc.c xstrdup.c xstrtol.c xstrtoul.c yesno.c
|
||||
quotearg.c safe-read.c save-cwd.c savedir.c stripslash.c userspec.c \
|
||||
version-etc.c xgetcwd.c xmalloc.c xstrdup.c \
|
||||
xstrtol.c xstrtoul.c xstrtoumax.c yesno.c
|
||||
|
||||
|
||||
libfu_a_LIBADD = @LIBOBJS@ @ALLOCA@
|
||||
libfu_a_DEPENDENCIES = $(libfu_a_LIBADD)
|
||||
@@ -112,7 +121,8 @@ dirname.h error.h exclude.h filemode.h fnmatch.h fsusage.h \
|
||||
getdate.h getline.h getopt.h group-member.h human.h lchown.h long-options.h \
|
||||
makepath.h modechange.h mountlist.h hash.h path-concat.h pathmax.h \
|
||||
posixtm.h quotearg.h regex.h safe-read.h save-cwd.h savedir.h strverscmp.h \
|
||||
xalloc.h xstrtol.h xstrtoul.h
|
||||
version-etc.h xalloc.h xstrtol.h
|
||||
|
||||
|
||||
BUILT_SOURCES = getdate.c lstat.c stat.c
|
||||
|
||||
@@ -128,59 +138,63 @@ CPPFLAGS = @CPPFLAGS@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LIBS = @LIBS@
|
||||
ANSI2KNR = ../src/ansi2knr
|
||||
libfu_a_OBJECTS = getdate$U.o posixtm$U.o getopt$U.o getopt1$U.o \
|
||||
am_libfu_a_OBJECTS = getdate$U.o posixtm$U.o getopt$U.o getopt1$U.o \
|
||||
addext$U.o argmatch$U.o backupfile$U.o basename$U.o closeout$U.o \
|
||||
dirname$U.o exclude$U.o filemode$U.o full-write$U.o human$U.o \
|
||||
idcache$U.o isdir$U.o long-options$U.o makepath$U.o modechange$U.o \
|
||||
hash$U.o path-concat$U.o quotearg$U.o safe-read$U.o save-cwd$U.o \
|
||||
savedir$U.o stripslash$U.o userspec$U.o xgetcwd$U.o xmalloc$U.o \
|
||||
xstrdup$U.o xstrtol$U.o xstrtoul$U.o yesno$U.o
|
||||
savedir$U.o stripslash$U.o userspec$U.o version-etc$U.o xgetcwd$U.o \
|
||||
xmalloc$U.o xstrdup$U.o xstrtol$U.o xstrtoul$U.o xstrtoumax$U.o \
|
||||
yesno$U.o
|
||||
libfu_a_OBJECTS = $(am_libfu_a_OBJECTS)
|
||||
AR = ar
|
||||
CFLAGS = @CFLAGS@
|
||||
COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
||||
LINK = $(CC) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@
|
||||
CCLD = $(CC)
|
||||
LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
|
||||
DIST_SOURCES = $(libfu_a_SOURCES)
|
||||
HEADERS = $(noinst_HEADERS)
|
||||
|
||||
DIST_COMMON = Makefile.am Makefile.in TODO alloca.c chown.c error.c \
|
||||
error.h euidaccess.c fileblocks.c fnmatch.c fsusage.c ftruncate.c \
|
||||
getdate.c getgroups.c getline.c group-member.c lchown.c lstat.c \
|
||||
malloc.c memcmp.c memcpy.c memset.c mkdir.c mktime.c mountlist.c \
|
||||
obstack.c obstack.h realloc.c regex.c rename.c rmdir.c rpmatch.c stat.c \
|
||||
stpcpy.c strcasecmp.c strdup.c strftime.c strncasecmp.c strndup.c \
|
||||
strstr.c strtol.c strtoul.c strverscmp.c utime.c ylwrap
|
||||
DIST_COMMON = $(noinst_HEADERS) Makefile.am Makefile.in TODO alloca.c \
|
||||
chown.c dup2.c error.c error.h euidaccess.c fileblocks.c fnmatch.c \
|
||||
fsusage.c ftruncate.c getdate.c getgroups.c getline.c group-member.c \
|
||||
lchown.c lstat.c malloc.c memcmp.c memcpy.c memset.c mkdir.c mktime.c \
|
||||
mountlist.c obstack.c obstack.h realloc.c regex.c rename.c rmdir.c \
|
||||
rpmatch.c stat.c stpcpy.c strcasecmp.c strdup.c strftime.c \
|
||||
strncasecmp.c strndup.c strstr.c strtol.c strtoul.c strtoull.c \
|
||||
strtoumax.c strverscmp.c utime.c
|
||||
|
||||
|
||||
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
|
||||
TAR = tar
|
||||
GZIP = --best
|
||||
GZIP_ENV = --best
|
||||
DEP_FILES = .deps/addext.P .deps/alloca.P .deps/argmatch.P \
|
||||
.deps/backupfile.P .deps/basename.P .deps/chown.P .deps/closeout.P \
|
||||
.deps/dirname.P .deps/error.P .deps/euidaccess.P .deps/exclude.P \
|
||||
.deps/fileblocks.P .deps/filemode.P .deps/fnmatch.P .deps/fsusage.P \
|
||||
.deps/ftruncate.P .deps/full-write.P .deps/getdate .deps/getdate.P \
|
||||
.deps/dirname.P .deps/dup2.P .deps/error.P .deps/euidaccess.P \
|
||||
.deps/exclude.P .deps/fileblocks.P .deps/filemode.P .deps/fnmatch.P \
|
||||
.deps/fsusage.P .deps/ftruncate.P .deps/full-write.P .deps/getdate.P \
|
||||
.deps/getgroups.P .deps/getline.P .deps/getopt.P .deps/getopt1.P \
|
||||
.deps/group-member.P .deps/hash.P .deps/human.P .deps/idcache.P \
|
||||
.deps/isdir.P .deps/lchown.P .deps/long-options.P .deps/lstat \
|
||||
.deps/lstat.P .deps/makepath.P .deps/malloc.P .deps/memcmp.P \
|
||||
.deps/memcpy.P .deps/memset.P .deps/mkdir.P .deps/mktime.P \
|
||||
.deps/modechange.P .deps/mountlist.P .deps/obstack.P \
|
||||
.deps/path-concat.P .deps/posixtm.P .deps/quotearg.P .deps/realloc.P \
|
||||
.deps/regex.P .deps/rename.P .deps/rmdir.P .deps/rpmatch.P \
|
||||
.deps/safe-read.P .deps/save-cwd.P .deps/savedir.P .deps/stat \
|
||||
.deps/stat.P .deps/stpcpy.P .deps/strcasecmp.P .deps/strdup.P \
|
||||
.deps/strftime.P .deps/stripslash.P .deps/strncasecmp.P .deps/strndup.P \
|
||||
.deps/strstr.P .deps/strtol.P .deps/strtoul.P .deps/strverscmp.P \
|
||||
.deps/userspec.P .deps/utime.P .deps/xgetcwd.P .deps/xmalloc.P \
|
||||
.deps/xstrdup.P .deps/xstrtol.P .deps/xstrtoul.P .deps/yesno.P
|
||||
.deps/isdir.P .deps/lchown.P .deps/long-options.P .deps/lstat.P \
|
||||
.deps/makepath.P .deps/malloc.P .deps/memcmp.P .deps/memcpy.P \
|
||||
.deps/memset.P .deps/mkdir.P .deps/mktime.P .deps/modechange.P \
|
||||
.deps/mountlist.P .deps/obstack.P .deps/path-concat.P .deps/posixtm.P \
|
||||
.deps/quotearg.P .deps/realloc.P .deps/regex.P .deps/rename.P \
|
||||
.deps/rmdir.P .deps/rpmatch.P .deps/safe-read.P .deps/save-cwd.P \
|
||||
.deps/savedir.P .deps/stat.P .deps/stpcpy.P .deps/strcasecmp.P \
|
||||
.deps/strdup.P .deps/strftime.P .deps/stripslash.P .deps/strncasecmp.P \
|
||||
.deps/strndup.P .deps/strstr.P .deps/strtol.P .deps/strtoul.P \
|
||||
.deps/strtoull.P .deps/strtoumax.P .deps/strverscmp.P .deps/userspec.P \
|
||||
.deps/utime.P .deps/version-etc.P .deps/xgetcwd.P .deps/xmalloc.P \
|
||||
.deps/xstrdup.P .deps/xstrtol.P .deps/xstrtoul.P .deps/xstrtoumax.P \
|
||||
.deps/yesno.P
|
||||
SOURCES = $(libfu_a_SOURCES)
|
||||
OBJECTS = $(libfu_a_OBJECTS)
|
||||
|
||||
all: Makefile $(LIBRARIES) $(HEADERS)
|
||||
OBJECTS = $(am_libfu_a_OBJECTS)
|
||||
|
||||
all: all-redirect
|
||||
.SUFFIXES:
|
||||
.SUFFIXES: .S .c .o .s .y
|
||||
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
|
||||
.SUFFIXES: .c .o .y
|
||||
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
|
||||
cd $(top_srcdir) && $(AUTOMAKE) --gnits lib/Makefile
|
||||
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES)
|
||||
@@ -197,12 +211,6 @@ distclean-noinstLIBRARIES:
|
||||
|
||||
maintainer-clean-noinstLIBRARIES:
|
||||
|
||||
.s.o:
|
||||
$(COMPILE) -c $<
|
||||
|
||||
.S.o:
|
||||
$(COMPILE) -c $<
|
||||
|
||||
mostlyclean-compile:
|
||||
-rm -f *.o core *.core
|
||||
|
||||
@@ -227,178 +235,231 @@ clean-kr:
|
||||
distclean-kr:
|
||||
|
||||
maintainer-clean-kr:
|
||||
getdate$U.o:
|
||||
posixtm$U.o:
|
||||
getopt$U.o:
|
||||
getopt1$U.o:
|
||||
addext$U.o:
|
||||
argmatch$U.o:
|
||||
backupfile$U.o:
|
||||
basename$U.o:
|
||||
closeout$U.o:
|
||||
dirname$U.o:
|
||||
exclude$U.o:
|
||||
filemode$U.o:
|
||||
full-write$U.o:
|
||||
human$U.o:
|
||||
idcache$U.o:
|
||||
isdir$U.o:
|
||||
long-options$U.o:
|
||||
makepath$U.o:
|
||||
modechange$U.o:
|
||||
hash$U.o:
|
||||
path-concat$U.o:
|
||||
quotearg$U.o:
|
||||
safe-read$U.o:
|
||||
save-cwd$U.o:
|
||||
savedir$U.o:
|
||||
stripslash$U.o:
|
||||
userspec$U.o:
|
||||
version-etc$U.o:
|
||||
xgetcwd$U.o:
|
||||
xmalloc$U.o:
|
||||
xstrdup$U.o:
|
||||
xstrtol$U.o:
|
||||
xstrtoul$U.o:
|
||||
xstrtoumax$U.o:
|
||||
yesno$U.o:
|
||||
|
||||
libfu.a: $(libfu_a_OBJECTS) $(libfu_a_DEPENDENCIES)
|
||||
-rm -f libfu.a
|
||||
$(AR) cru libfu.a $(libfu_a_OBJECTS) $(libfu_a_LIBADD)
|
||||
$(RANLIB) libfu.a
|
||||
getdate.o:
|
||||
lstat.o:
|
||||
stat.o:
|
||||
addext_.c: addext.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/addext.c; then echo $(srcdir)/addext.c; else echo addext.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > addext_.c
|
||||
alloca_.c: alloca.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/alloca.c; then echo $(srcdir)/alloca.c; else echo alloca.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > alloca_.c
|
||||
argmatch_.c: argmatch.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/argmatch.c; then echo $(srcdir)/argmatch.c; else echo argmatch.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > argmatch_.c
|
||||
backupfile_.c: backupfile.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/backupfile.c; then echo $(srcdir)/backupfile.c; else echo backupfile.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > backupfile_.c
|
||||
basename_.c: basename.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/basename.c; then echo $(srcdir)/basename.c; else echo basename.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > basename_.c
|
||||
chown_.c: chown.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/chown.c; then echo $(srcdir)/chown.c; else echo chown.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > chown_.c
|
||||
closeout_.c: closeout.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/closeout.c; then echo $(srcdir)/closeout.c; else echo closeout.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > closeout_.c
|
||||
dirname_.c: dirname.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/dirname.c; then echo $(srcdir)/dirname.c; else echo dirname.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > dirname_.c
|
||||
dup2_.c: dup2.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/dup2.c; then echo $(srcdir)/dup2.c; else echo dup2.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > dup2_.c
|
||||
error_.c: error.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/error.c; then echo $(srcdir)/error.c; else echo error.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > error_.c
|
||||
euidaccess_.c: euidaccess.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/euidaccess.c; then echo $(srcdir)/euidaccess.c; else echo euidaccess.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > euidaccess_.c
|
||||
exclude_.c: exclude.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/exclude.c; then echo $(srcdir)/exclude.c; else echo exclude.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > exclude_.c
|
||||
fileblocks_.c: fileblocks.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/fileblocks.c; then echo $(srcdir)/fileblocks.c; else echo fileblocks.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > fileblocks_.c
|
||||
filemode_.c: filemode.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/filemode.c; then echo $(srcdir)/filemode.c; else echo filemode.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > filemode_.c
|
||||
fnmatch_.c: fnmatch.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/fnmatch.c; then echo $(srcdir)/fnmatch.c; else echo fnmatch.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > fnmatch_.c
|
||||
fsusage_.c: fsusage.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/fsusage.c; then echo $(srcdir)/fsusage.c; else echo fsusage.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > fsusage_.c
|
||||
ftruncate_.c: ftruncate.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/ftruncate.c; then echo $(srcdir)/ftruncate.c; else echo ftruncate.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > ftruncate_.c
|
||||
full-write_.c: full-write.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/full-write.c; then echo $(srcdir)/full-write.c; else echo full-write.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > full-write_.c
|
||||
getdate_.c: getdate.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/getdate.c; then echo $(srcdir)/getdate.c; else echo getdate.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > getdate_.c
|
||||
getgroups_.c: getgroups.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/getgroups.c; then echo $(srcdir)/getgroups.c; else echo getgroups.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > getgroups_.c
|
||||
getline_.c: getline.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/getline.c; then echo $(srcdir)/getline.c; else echo getline.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > getline_.c
|
||||
getopt_.c: getopt.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/getopt.c; then echo $(srcdir)/getopt.c; else echo getopt.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > getopt_.c
|
||||
getopt1_.c: getopt1.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/getopt1.c; then echo $(srcdir)/getopt1.c; else echo getopt1.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > getopt1_.c
|
||||
group-member_.c: group-member.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/group-member.c; then echo $(srcdir)/group-member.c; else echo group-member.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > group-member_.c
|
||||
hash_.c: hash.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/hash.c; then echo $(srcdir)/hash.c; else echo hash.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > hash_.c
|
||||
human_.c: human.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/human.c; then echo $(srcdir)/human.c; else echo human.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > human_.c
|
||||
idcache_.c: idcache.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/idcache.c; then echo $(srcdir)/idcache.c; else echo idcache.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > idcache_.c
|
||||
isdir_.c: isdir.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/isdir.c; then echo $(srcdir)/isdir.c; else echo isdir.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > isdir_.c
|
||||
lchown_.c: lchown.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/lchown.c; then echo $(srcdir)/lchown.c; else echo lchown.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > lchown_.c
|
||||
long-options_.c: long-options.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/long-options.c; then echo $(srcdir)/long-options.c; else echo long-options.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > long-options_.c
|
||||
lstat_.c: lstat.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/lstat.c; then echo $(srcdir)/lstat.c; else echo lstat.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > lstat_.c
|
||||
makepath_.c: makepath.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/makepath.c; then echo $(srcdir)/makepath.c; else echo makepath.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > makepath_.c
|
||||
malloc_.c: malloc.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/malloc.c; then echo $(srcdir)/malloc.c; else echo malloc.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > malloc_.c
|
||||
memcmp_.c: memcmp.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/memcmp.c; then echo $(srcdir)/memcmp.c; else echo memcmp.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > memcmp_.c
|
||||
memcpy_.c: memcpy.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/memcpy.c; then echo $(srcdir)/memcpy.c; else echo memcpy.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > memcpy_.c
|
||||
memset_.c: memset.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/memset.c; then echo $(srcdir)/memset.c; else echo memset.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > memset_.c
|
||||
mkdir_.c: mkdir.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/mkdir.c; then echo $(srcdir)/mkdir.c; else echo mkdir.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > mkdir_.c
|
||||
mktime_.c: mktime.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/mktime.c; then echo $(srcdir)/mktime.c; else echo mktime.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > mktime_.c
|
||||
modechange_.c: modechange.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/modechange.c; then echo $(srcdir)/modechange.c; else echo modechange.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > modechange_.c
|
||||
mountlist_.c: mountlist.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/mountlist.c; then echo $(srcdir)/mountlist.c; else echo mountlist.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > mountlist_.c
|
||||
obstack_.c: obstack.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/obstack.c; then echo $(srcdir)/obstack.c; else echo obstack.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > obstack_.c
|
||||
path-concat_.c: path-concat.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/path-concat.c; then echo $(srcdir)/path-concat.c; else echo path-concat.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > path-concat_.c
|
||||
posixtm_.c: posixtm.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/posixtm.c; then echo $(srcdir)/posixtm.c; else echo posixtm.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > posixtm_.c
|
||||
quotearg_.c: quotearg.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/quotearg.c; then echo $(srcdir)/quotearg.c; else echo quotearg.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > quotearg_.c
|
||||
realloc_.c: realloc.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/realloc.c; then echo $(srcdir)/realloc.c; else echo realloc.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > realloc_.c
|
||||
regex_.c: regex.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/regex.c; then echo $(srcdir)/regex.c; else echo regex.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > regex_.c
|
||||
rename_.c: rename.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/rename.c; then echo $(srcdir)/rename.c; else echo rename.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > rename_.c
|
||||
rmdir_.c: rmdir.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/rmdir.c; then echo $(srcdir)/rmdir.c; else echo rmdir.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > rmdir_.c
|
||||
rpmatch_.c: rpmatch.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/rpmatch.c; then echo $(srcdir)/rpmatch.c; else echo rpmatch.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > rpmatch_.c
|
||||
safe-read_.c: safe-read.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/safe-read.c; then echo $(srcdir)/safe-read.c; else echo safe-read.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > safe-read_.c
|
||||
save-cwd_.c: save-cwd.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/save-cwd.c; then echo $(srcdir)/save-cwd.c; else echo save-cwd.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > save-cwd_.c
|
||||
savedir_.c: savedir.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/savedir.c; then echo $(srcdir)/savedir.c; else echo savedir.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > savedir_.c
|
||||
stat_.c: stat.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/stat.c; then echo $(srcdir)/stat.c; else echo stat.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > stat_.c
|
||||
stpcpy_.c: stpcpy.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/stpcpy.c; then echo $(srcdir)/stpcpy.c; else echo stpcpy.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > stpcpy_.c
|
||||
strcasecmp_.c: strcasecmp.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/strcasecmp.c; then echo $(srcdir)/strcasecmp.c; else echo strcasecmp.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > strcasecmp_.c
|
||||
strdup_.c: strdup.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/strdup.c; then echo $(srcdir)/strdup.c; else echo strdup.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > strdup_.c
|
||||
strftime_.c: strftime.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/strftime.c; then echo $(srcdir)/strftime.c; else echo strftime.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > strftime_.c
|
||||
stripslash_.c: stripslash.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/stripslash.c; then echo $(srcdir)/stripslash.c; else echo stripslash.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > stripslash_.c
|
||||
strncasecmp_.c: strncasecmp.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/strncasecmp.c; then echo $(srcdir)/strncasecmp.c; else echo strncasecmp.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > strncasecmp_.c
|
||||
strndup_.c: strndup.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/strndup.c; then echo $(srcdir)/strndup.c; else echo strndup.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > strndup_.c
|
||||
strstr_.c: strstr.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/strstr.c; then echo $(srcdir)/strstr.c; else echo strstr.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > strstr_.c
|
||||
strtol_.c: strtol.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/strtol.c; then echo $(srcdir)/strtol.c; else echo strtol.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > strtol_.c
|
||||
strtoul_.c: strtoul.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/strtoul.c; then echo $(srcdir)/strtoul.c; else echo strtoul.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > strtoul_.c
|
||||
strtoull_.c: strtoull.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/strtoull.c; then echo $(srcdir)/strtoull.c; else echo strtoull.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > strtoull_.c
|
||||
strtoumax_.c: strtoumax.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/strtoumax.c; then echo $(srcdir)/strtoumax.c; else echo strtoumax.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > strtoumax_.c
|
||||
strverscmp_.c: strverscmp.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/strverscmp.c; then echo $(srcdir)/strverscmp.c; else echo strverscmp.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > strverscmp_.c
|
||||
userspec_.c: userspec.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/userspec.c; then echo $(srcdir)/userspec.c; else echo userspec.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > userspec_.c
|
||||
utime_.c: utime.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/utime.c; then echo $(srcdir)/utime.c; else echo utime.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > utime_.c
|
||||
version-etc_.c: version-etc.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/version-etc.c; then echo $(srcdir)/version-etc.c; else echo version-etc.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > version-etc_.c
|
||||
xgetcwd_.c: xgetcwd.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/xgetcwd.c; then echo $(srcdir)/xgetcwd.c; else echo xgetcwd.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > xgetcwd_.c
|
||||
xmalloc_.c: xmalloc.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/xmalloc.c; then echo $(srcdir)/xmalloc.c; else echo xmalloc.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > xmalloc_.c
|
||||
xstrdup_.c: xstrdup.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/xstrdup.c; then echo $(srcdir)/xstrdup.c; else echo xstrdup.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > xstrdup_.c
|
||||
xstrtol_.c: xstrtol.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/xstrtol.c; then echo $(srcdir)/xstrtol.c; else echo xstrtol.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > xstrtol_.c
|
||||
xstrtoul_.c: xstrtoul.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/xstrtoul.c; then echo $(srcdir)/xstrtoul.c; else echo xstrtoul.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > xstrtoul_.c
|
||||
xstrtoumax_.c: xstrtoumax.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/xstrtoumax.c; then echo $(srcdir)/xstrtoumax.c; else echo xstrtoumax.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > xstrtoumax_.c
|
||||
yesno_.c: yesno.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/yesno.c; then echo $(srcdir)/yesno.c; else echo yesno.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > yesno_.c
|
||||
addext_.o alloca_.o argmatch_.o backupfile_.o basename_.o chown_.o \
|
||||
closeout_.o dirname_.o dup2_.o error_.o euidaccess_.o exclude_.o \
|
||||
fileblocks_.o filemode_.o fnmatch_.o fsusage_.o ftruncate_.o \
|
||||
full-write_.o getdate_.o getgroups_.o getline_.o getopt_.o getopt1_.o \
|
||||
group-member_.o hash_.o human_.o idcache_.o isdir_.o lchown_.o \
|
||||
long-options_.o lstat_.o makepath_.o malloc_.o memcmp_.o memcpy_.o \
|
||||
memset_.o mkdir_.o mktime_.o modechange_.o mountlist_.o obstack_.o \
|
||||
path-concat_.o posixtm_.o quotearg_.o realloc_.o regex_.o rename_.o \
|
||||
rmdir_.o rpmatch_.o safe-read_.o save-cwd_.o savedir_.o stat_.o \
|
||||
stpcpy_.o strcasecmp_.o strdup_.o strftime_.o stripslash_.o \
|
||||
strncasecmp_.o strndup_.o strstr_.o strtol_.o strtoul_.o strtoull_.o \
|
||||
strtoumax_.o strverscmp_.o userspec_.o utime_.o version-etc_.o \
|
||||
xgetcwd_.o xmalloc_.o xstrdup_.o xstrtol_.o xstrtoul_.o xstrtoumax_.o \
|
||||
yesno_.o : $(ANSI2KNR)
|
||||
.y.c:
|
||||
$(YACC) $(AM_YFLAGS) $(YFLAGS) $< && mv y.tab.c $*.c
|
||||
if test -f y.tab.h; then \
|
||||
if cmp -s y.tab.h $*.h; then rm -f y.tab.h; else mv y.tab.h $*.h; fi; \
|
||||
else :; fi
|
||||
getdate.h: getdate.c
|
||||
|
||||
addext_.c: addext.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/addext.c; then echo $(srcdir)/addext.c; else echo addext.c; fi` | $(ANSI2KNR) > addext_.c
|
||||
alloca_.c: alloca.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/alloca.c; then echo $(srcdir)/alloca.c; else echo alloca.c; fi` | $(ANSI2KNR) > alloca_.c
|
||||
argmatch_.c: argmatch.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/argmatch.c; then echo $(srcdir)/argmatch.c; else echo argmatch.c; fi` | $(ANSI2KNR) > argmatch_.c
|
||||
backupfile_.c: backupfile.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/backupfile.c; then echo $(srcdir)/backupfile.c; else echo backupfile.c; fi` | $(ANSI2KNR) > backupfile_.c
|
||||
basename_.c: basename.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/basename.c; then echo $(srcdir)/basename.c; else echo basename.c; fi` | $(ANSI2KNR) > basename_.c
|
||||
chown_.c: chown.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/chown.c; then echo $(srcdir)/chown.c; else echo chown.c; fi` | $(ANSI2KNR) > chown_.c
|
||||
closeout_.c: closeout.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/closeout.c; then echo $(srcdir)/closeout.c; else echo closeout.c; fi` | $(ANSI2KNR) > closeout_.c
|
||||
dirname_.c: dirname.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/dirname.c; then echo $(srcdir)/dirname.c; else echo dirname.c; fi` | $(ANSI2KNR) > dirname_.c
|
||||
error_.c: error.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/error.c; then echo $(srcdir)/error.c; else echo error.c; fi` | $(ANSI2KNR) > error_.c
|
||||
euidaccess_.c: euidaccess.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/euidaccess.c; then echo $(srcdir)/euidaccess.c; else echo euidaccess.c; fi` | $(ANSI2KNR) > euidaccess_.c
|
||||
exclude_.c: exclude.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/exclude.c; then echo $(srcdir)/exclude.c; else echo exclude.c; fi` | $(ANSI2KNR) > exclude_.c
|
||||
fileblocks_.c: fileblocks.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/fileblocks.c; then echo $(srcdir)/fileblocks.c; else echo fileblocks.c; fi` | $(ANSI2KNR) > fileblocks_.c
|
||||
filemode_.c: filemode.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/filemode.c; then echo $(srcdir)/filemode.c; else echo filemode.c; fi` | $(ANSI2KNR) > filemode_.c
|
||||
fnmatch_.c: fnmatch.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/fnmatch.c; then echo $(srcdir)/fnmatch.c; else echo fnmatch.c; fi` | $(ANSI2KNR) > fnmatch_.c
|
||||
fsusage_.c: fsusage.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/fsusage.c; then echo $(srcdir)/fsusage.c; else echo fsusage.c; fi` | $(ANSI2KNR) > fsusage_.c
|
||||
ftruncate_.c: ftruncate.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/ftruncate.c; then echo $(srcdir)/ftruncate.c; else echo ftruncate.c; fi` | $(ANSI2KNR) > ftruncate_.c
|
||||
full-write_.c: full-write.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/full-write.c; then echo $(srcdir)/full-write.c; else echo full-write.c; fi` | $(ANSI2KNR) > full-write_.c
|
||||
getdate_.c: getdate.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/getdate.c; then echo $(srcdir)/getdate.c; else echo getdate.c; fi` | $(ANSI2KNR) > getdate_.c
|
||||
getgroups_.c: getgroups.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/getgroups.c; then echo $(srcdir)/getgroups.c; else echo getgroups.c; fi` | $(ANSI2KNR) > getgroups_.c
|
||||
getline_.c: getline.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/getline.c; then echo $(srcdir)/getline.c; else echo getline.c; fi` | $(ANSI2KNR) > getline_.c
|
||||
getopt_.c: getopt.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/getopt.c; then echo $(srcdir)/getopt.c; else echo getopt.c; fi` | $(ANSI2KNR) > getopt_.c
|
||||
getopt1_.c: getopt1.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/getopt1.c; then echo $(srcdir)/getopt1.c; else echo getopt1.c; fi` | $(ANSI2KNR) > getopt1_.c
|
||||
group-member_.c: group-member.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/group-member.c; then echo $(srcdir)/group-member.c; else echo group-member.c; fi` | $(ANSI2KNR) > group-member_.c
|
||||
hash_.c: hash.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/hash.c; then echo $(srcdir)/hash.c; else echo hash.c; fi` | $(ANSI2KNR) > hash_.c
|
||||
human_.c: human.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/human.c; then echo $(srcdir)/human.c; else echo human.c; fi` | $(ANSI2KNR) > human_.c
|
||||
idcache_.c: idcache.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/idcache.c; then echo $(srcdir)/idcache.c; else echo idcache.c; fi` | $(ANSI2KNR) > idcache_.c
|
||||
isdir_.c: isdir.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/isdir.c; then echo $(srcdir)/isdir.c; else echo isdir.c; fi` | $(ANSI2KNR) > isdir_.c
|
||||
lchown_.c: lchown.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/lchown.c; then echo $(srcdir)/lchown.c; else echo lchown.c; fi` | $(ANSI2KNR) > lchown_.c
|
||||
long-options_.c: long-options.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/long-options.c; then echo $(srcdir)/long-options.c; else echo long-options.c; fi` | $(ANSI2KNR) > long-options_.c
|
||||
lstat_.c: lstat.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/lstat.c; then echo $(srcdir)/lstat.c; else echo lstat.c; fi` | $(ANSI2KNR) > lstat_.c
|
||||
makepath_.c: makepath.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/makepath.c; then echo $(srcdir)/makepath.c; else echo makepath.c; fi` | $(ANSI2KNR) > makepath_.c
|
||||
malloc_.c: malloc.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/malloc.c; then echo $(srcdir)/malloc.c; else echo malloc.c; fi` | $(ANSI2KNR) > malloc_.c
|
||||
memcmp_.c: memcmp.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/memcmp.c; then echo $(srcdir)/memcmp.c; else echo memcmp.c; fi` | $(ANSI2KNR) > memcmp_.c
|
||||
memcpy_.c: memcpy.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/memcpy.c; then echo $(srcdir)/memcpy.c; else echo memcpy.c; fi` | $(ANSI2KNR) > memcpy_.c
|
||||
memset_.c: memset.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/memset.c; then echo $(srcdir)/memset.c; else echo memset.c; fi` | $(ANSI2KNR) > memset_.c
|
||||
mkdir_.c: mkdir.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/mkdir.c; then echo $(srcdir)/mkdir.c; else echo mkdir.c; fi` | $(ANSI2KNR) > mkdir_.c
|
||||
mktime_.c: mktime.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/mktime.c; then echo $(srcdir)/mktime.c; else echo mktime.c; fi` | $(ANSI2KNR) > mktime_.c
|
||||
modechange_.c: modechange.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/modechange.c; then echo $(srcdir)/modechange.c; else echo modechange.c; fi` | $(ANSI2KNR) > modechange_.c
|
||||
mountlist_.c: mountlist.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/mountlist.c; then echo $(srcdir)/mountlist.c; else echo mountlist.c; fi` | $(ANSI2KNR) > mountlist_.c
|
||||
obstack_.c: obstack.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/obstack.c; then echo $(srcdir)/obstack.c; else echo obstack.c; fi` | $(ANSI2KNR) > obstack_.c
|
||||
path-concat_.c: path-concat.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/path-concat.c; then echo $(srcdir)/path-concat.c; else echo path-concat.c; fi` | $(ANSI2KNR) > path-concat_.c
|
||||
posixtm_.c: posixtm.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/posixtm.c; then echo $(srcdir)/posixtm.c; else echo posixtm.c; fi` | $(ANSI2KNR) > posixtm_.c
|
||||
quotearg_.c: quotearg.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/quotearg.c; then echo $(srcdir)/quotearg.c; else echo quotearg.c; fi` | $(ANSI2KNR) > quotearg_.c
|
||||
realloc_.c: realloc.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/realloc.c; then echo $(srcdir)/realloc.c; else echo realloc.c; fi` | $(ANSI2KNR) > realloc_.c
|
||||
regex_.c: regex.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/regex.c; then echo $(srcdir)/regex.c; else echo regex.c; fi` | $(ANSI2KNR) > regex_.c
|
||||
rename_.c: rename.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/rename.c; then echo $(srcdir)/rename.c; else echo rename.c; fi` | $(ANSI2KNR) > rename_.c
|
||||
rmdir_.c: rmdir.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/rmdir.c; then echo $(srcdir)/rmdir.c; else echo rmdir.c; fi` | $(ANSI2KNR) > rmdir_.c
|
||||
rpmatch_.c: rpmatch.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/rpmatch.c; then echo $(srcdir)/rpmatch.c; else echo rpmatch.c; fi` | $(ANSI2KNR) > rpmatch_.c
|
||||
safe-read_.c: safe-read.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/safe-read.c; then echo $(srcdir)/safe-read.c; else echo safe-read.c; fi` | $(ANSI2KNR) > safe-read_.c
|
||||
save-cwd_.c: save-cwd.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/save-cwd.c; then echo $(srcdir)/save-cwd.c; else echo save-cwd.c; fi` | $(ANSI2KNR) > save-cwd_.c
|
||||
savedir_.c: savedir.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/savedir.c; then echo $(srcdir)/savedir.c; else echo savedir.c; fi` | $(ANSI2KNR) > savedir_.c
|
||||
stat_.c: stat.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/stat.c; then echo $(srcdir)/stat.c; else echo stat.c; fi` | $(ANSI2KNR) > stat_.c
|
||||
stpcpy_.c: stpcpy.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/stpcpy.c; then echo $(srcdir)/stpcpy.c; else echo stpcpy.c; fi` | $(ANSI2KNR) > stpcpy_.c
|
||||
strcasecmp_.c: strcasecmp.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/strcasecmp.c; then echo $(srcdir)/strcasecmp.c; else echo strcasecmp.c; fi` | $(ANSI2KNR) > strcasecmp_.c
|
||||
strdup_.c: strdup.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/strdup.c; then echo $(srcdir)/strdup.c; else echo strdup.c; fi` | $(ANSI2KNR) > strdup_.c
|
||||
strftime_.c: strftime.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/strftime.c; then echo $(srcdir)/strftime.c; else echo strftime.c; fi` | $(ANSI2KNR) > strftime_.c
|
||||
stripslash_.c: stripslash.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/stripslash.c; then echo $(srcdir)/stripslash.c; else echo stripslash.c; fi` | $(ANSI2KNR) > stripslash_.c
|
||||
strncasecmp_.c: strncasecmp.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/strncasecmp.c; then echo $(srcdir)/strncasecmp.c; else echo strncasecmp.c; fi` | $(ANSI2KNR) > strncasecmp_.c
|
||||
strndup_.c: strndup.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/strndup.c; then echo $(srcdir)/strndup.c; else echo strndup.c; fi` | $(ANSI2KNR) > strndup_.c
|
||||
strstr_.c: strstr.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/strstr.c; then echo $(srcdir)/strstr.c; else echo strstr.c; fi` | $(ANSI2KNR) > strstr_.c
|
||||
strtol_.c: strtol.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/strtol.c; then echo $(srcdir)/strtol.c; else echo strtol.c; fi` | $(ANSI2KNR) > strtol_.c
|
||||
strtoul_.c: strtoul.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/strtoul.c; then echo $(srcdir)/strtoul.c; else echo strtoul.c; fi` | $(ANSI2KNR) > strtoul_.c
|
||||
strverscmp_.c: strverscmp.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/strverscmp.c; then echo $(srcdir)/strverscmp.c; else echo strverscmp.c; fi` | $(ANSI2KNR) > strverscmp_.c
|
||||
userspec_.c: userspec.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/userspec.c; then echo $(srcdir)/userspec.c; else echo userspec.c; fi` | $(ANSI2KNR) > userspec_.c
|
||||
utime_.c: utime.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/utime.c; then echo $(srcdir)/utime.c; else echo utime.c; fi` | $(ANSI2KNR) > utime_.c
|
||||
xgetcwd_.c: xgetcwd.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/xgetcwd.c; then echo $(srcdir)/xgetcwd.c; else echo xgetcwd.c; fi` | $(ANSI2KNR) > xgetcwd_.c
|
||||
xmalloc_.c: xmalloc.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/xmalloc.c; then echo $(srcdir)/xmalloc.c; else echo xmalloc.c; fi` | $(ANSI2KNR) > xmalloc_.c
|
||||
xstrdup_.c: xstrdup.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/xstrdup.c; then echo $(srcdir)/xstrdup.c; else echo xstrdup.c; fi` | $(ANSI2KNR) > xstrdup_.c
|
||||
xstrtol_.c: xstrtol.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/xstrtol.c; then echo $(srcdir)/xstrtol.c; else echo xstrtol.c; fi` | $(ANSI2KNR) > xstrtol_.c
|
||||
xstrtoul_.c: xstrtoul.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/xstrtoul.c; then echo $(srcdir)/xstrtoul.c; else echo xstrtoul.c; fi` | $(ANSI2KNR) > xstrtoul_.c
|
||||
yesno_.c: yesno.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/yesno.c; then echo $(srcdir)/yesno.c; else echo yesno.c; fi` | $(ANSI2KNR) > yesno_.c
|
||||
addext_.o alloca_.o argmatch_.o backupfile_.o basename_.o chown_.o \
|
||||
closeout_.o dirname_.o error_.o euidaccess_.o exclude_.o fileblocks_.o \
|
||||
filemode_.o fnmatch_.o fsusage_.o ftruncate_.o full-write_.o getdate_.o \
|
||||
getgroups_.o getline_.o getopt_.o getopt1_.o group-member_.o hash_.o \
|
||||
human_.o idcache_.o isdir_.o lchown_.o long-options_.o lstat_.o \
|
||||
makepath_.o malloc_.o memcmp_.o memcpy_.o memset_.o mkdir_.o mktime_.o \
|
||||
modechange_.o mountlist_.o obstack_.o path-concat_.o posixtm_.o \
|
||||
quotearg_.o realloc_.o regex_.o rename_.o rmdir_.o rpmatch_.o \
|
||||
safe-read_.o save-cwd_.o savedir_.o stat_.o stpcpy_.o strcasecmp_.o \
|
||||
strdup_.o strftime_.o stripslash_.o strncasecmp_.o strndup_.o strstr_.o \
|
||||
strtol_.o strtoul_.o strverscmp_.o userspec_.o utime_.o xgetcwd_.o \
|
||||
xmalloc_.o xstrdup_.o xstrtol_.o xstrtoul_.o yesno_.o : $(ANSI2KNR)
|
||||
|
||||
tags: TAGS
|
||||
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP)
|
||||
list='$(SOURCES) $(HEADERS)'; \
|
||||
unique=`for i in $$list; do echo $$i; done | \
|
||||
awk ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
here=`pwd` && cd $(srcdir) \
|
||||
&& mkid -f$$here/ID $(SOURCES) $(HEADERS) $(LISP)
|
||||
&& mkid -f$$here/ID $$unique $(LISP)
|
||||
|
||||
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP)
|
||||
tags=; \
|
||||
@@ -431,11 +492,16 @@ distdir: $(DISTFILES)
|
||||
&& $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnits lib/Makefile
|
||||
@for file in $(DISTFILES); do \
|
||||
d=$(srcdir); \
|
||||
test -f $(distdir)/$$file \
|
||||
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \
|
||||
|| cp -p $$d/$$file $(distdir)/$$file; \
|
||||
if test -d $$d/$$file; then \
|
||||
cp -pr $$d/$$file $(distdir)/$$file; \
|
||||
else \
|
||||
test -f $(distdir)/$$file \
|
||||
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \
|
||||
|| cp -p $$d/$$file $(distdir)/$$file || :; \
|
||||
fi; \
|
||||
done
|
||||
|
||||
|
||||
DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :)
|
||||
|
||||
-include $(DEP_FILES)
|
||||
@@ -445,37 +511,51 @@ mostlyclean-depend:
|
||||
clean-depend:
|
||||
|
||||
distclean-depend:
|
||||
-rm -rf .deps
|
||||
|
||||
maintainer-clean-depend:
|
||||
-rm -rf .deps
|
||||
|
||||
%.o: %.c
|
||||
@echo '$(COMPILE) -c $<'; \
|
||||
$(COMPILE) -Wp,-MD,.deps/$(*F).P -c $<
|
||||
$(COMPILE) -Wp,-MD,.deps/$(*D)/$(*F).pp -c $<
|
||||
@-cp .deps/$(*D)/$(*F).pp .deps/$(*D)/$(*F).P; \
|
||||
tr ' ' '\012' < .deps/$(*D)/$(*F).pp \
|
||||
| sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
|
||||
>> .deps/$(*D)/$(*F).P; \
|
||||
rm .deps/$(*D)/$(*F).pp
|
||||
|
||||
%.lo: %.c
|
||||
@echo '$(LTCOMPILE) -c $<'; \
|
||||
$(LTCOMPILE) -Wp,-MD,.deps/$(*F).p -c $<
|
||||
@-sed -e 's/^\([^:]*\)\.o:/\1.lo \1.o:/' \
|
||||
< .deps/$(*F).p > .deps/$(*F).P
|
||||
@-rm -f .deps/$(*F).p
|
||||
info:
|
||||
dvi:
|
||||
check: all
|
||||
installcheck:
|
||||
install-exec:
|
||||
@$(NORMAL_INSTALL)
|
||||
$(LTCOMPILE) -Wp,-MD,.deps/$(*D)/$(*F).pp -c $<
|
||||
@-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \
|
||||
< .deps/$(*D)/$(*F).pp > .deps/$(*D)/$(*F).P; \
|
||||
tr ' ' '\012' < .deps/$(*D)/$(*F).pp \
|
||||
| sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
|
||||
>> .deps/$(*D)/$(*F).P; \
|
||||
rm -f .deps/$(*D)/$(*F).pp
|
||||
info-am:
|
||||
info: info-am
|
||||
dvi-am:
|
||||
dvi: dvi-am
|
||||
check-am: all-am
|
||||
check: check-am
|
||||
installcheck-am:
|
||||
installcheck: installcheck-am
|
||||
install-exec-am:
|
||||
install-exec: install-exec-am
|
||||
|
||||
install-data:
|
||||
@$(NORMAL_INSTALL)
|
||||
|
||||
install: install-exec install-data all
|
||||
@:
|
||||
|
||||
uninstall:
|
||||
install-data-am:
|
||||
install-data: install-data-am
|
||||
|
||||
install-am: all-am
|
||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
||||
install: install-am
|
||||
uninstall-am:
|
||||
uninstall: uninstall-am
|
||||
all-am: Makefile $(LIBRARIES) $(HEADERS)
|
||||
all-redirect: all-am
|
||||
install-strip:
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' INSTALL_SCRIPT='$(INSTALL_PROGRAM)' install
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_STRIP_FLAG=-s install
|
||||
installdirs:
|
||||
|
||||
|
||||
@@ -488,33 +568,43 @@ distclean-generic:
|
||||
-rm -f config.cache config.log stamp-h stamp-h[0-9]*
|
||||
|
||||
maintainer-clean-generic:
|
||||
-test -z "getdatehgetdatec$(BUILT_SOURCES)" || rm -f getdateh getdatec $(BUILT_SOURCES)
|
||||
mostlyclean: mostlyclean-noinstLIBRARIES mostlyclean-compile \
|
||||
-test -z "getdate.c$(BUILT_SOURCES)" || rm -f getdate.c $(BUILT_SOURCES)
|
||||
mostlyclean-am: mostlyclean-noinstLIBRARIES mostlyclean-compile \
|
||||
mostlyclean-kr mostlyclean-tags mostlyclean-depend \
|
||||
mostlyclean-generic
|
||||
|
||||
clean: clean-noinstLIBRARIES clean-compile clean-kr clean-tags \
|
||||
clean-depend clean-generic mostlyclean
|
||||
mostlyclean: mostlyclean-am
|
||||
|
||||
distclean: distclean-noinstLIBRARIES distclean-compile distclean-kr \
|
||||
distclean-tags distclean-depend distclean-generic clean
|
||||
-rm -f config.status
|
||||
clean-am: clean-noinstLIBRARIES clean-compile clean-kr clean-tags \
|
||||
clean-depend clean-generic mostlyclean-am
|
||||
|
||||
maintainer-clean: maintainer-clean-noinstLIBRARIES \
|
||||
clean: clean-am
|
||||
|
||||
distclean-am: distclean-noinstLIBRARIES distclean-compile distclean-kr \
|
||||
distclean-tags distclean-depend distclean-generic \
|
||||
clean-am
|
||||
|
||||
distclean: distclean-am
|
||||
|
||||
maintainer-clean-am: maintainer-clean-noinstLIBRARIES \
|
||||
maintainer-clean-compile maintainer-clean-kr \
|
||||
maintainer-clean-tags maintainer-clean-depend \
|
||||
maintainer-clean-generic distclean
|
||||
maintainer-clean-generic distclean-am
|
||||
@echo "This command is intended for maintainers to use;"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
|
||||
maintainer-clean: maintainer-clean-am
|
||||
|
||||
.PHONY: mostlyclean-noinstLIBRARIES distclean-noinstLIBRARIES \
|
||||
clean-noinstLIBRARIES maintainer-clean-noinstLIBRARIES \
|
||||
mostlyclean-compile distclean-compile clean-compile \
|
||||
maintainer-clean-compile mostlyclean-kr distclean-kr clean-kr \
|
||||
maintainer-clean-kr tags mostlyclean-tags distclean-tags clean-tags \
|
||||
maintainer-clean-tags distdir mostlyclean-depend distclean-depend \
|
||||
clean-depend maintainer-clean-depend info dvi installcheck install-exec \
|
||||
install-data install uninstall all installdirs mostlyclean-generic \
|
||||
clean-depend maintainer-clean-depend info-am info dvi-am dvi check \
|
||||
check-am installcheck-am installcheck install-exec-am install-exec \
|
||||
install-data-am install-data install-am install uninstall-am uninstall \
|
||||
all-redirect all-am all install-strip installdirs mostlyclean-generic \
|
||||
distclean-generic clean-generic maintainer-clean-generic clean \
|
||||
mostlyclean distclean maintainer-clean
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* addext.c -- add an extension to a file name
|
||||
Copyright (C) 1990, 1997, 1998 Free Software Foundation, Inc.
|
||||
Copyright (C) 1990, 1997, 1998, 1999 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -49,6 +49,8 @@
|
||||
# include <unistd.h>
|
||||
#endif
|
||||
|
||||
char *base_name PARAMS ((char const *));
|
||||
|
||||
/* Append to FILENAME the extension EXT, unless the result would be too long,
|
||||
in which case just append the character E. */
|
||||
|
||||
|
||||
@@ -36,18 +36,44 @@
|
||||
# define _(Text) Text
|
||||
#endif
|
||||
|
||||
#include "error.h"
|
||||
#include "quotearg.h"
|
||||
|
||||
/* When reporting a failing argument, make sure to show invisible
|
||||
characters hidden using the quoting style
|
||||
ARGMATCH_QUOTING_STYLE. literal_quoting_style is not good. */
|
||||
|
||||
/* When reporting an invalid argument, show nonprinting characters
|
||||
by using the quoting style ARGMATCH_QUOTING_STYLE. Do not use
|
||||
literal_quoting_style. */
|
||||
#ifndef ARGMATCH_QUOTING_STYLE
|
||||
# define ARGMATCH_QUOTING_STYLE escape_quoting_style
|
||||
#endif
|
||||
|
||||
extern char *program_name;
|
||||
/* The following test is to work around the gross typo in
|
||||
systems like Sony NEWS-OS Release 4.0C, whereby EXIT_FAILURE
|
||||
is defined to 0, not 1. */
|
||||
#if !EXIT_FAILURE
|
||||
# undef EXIT_FAILURE
|
||||
# define EXIT_FAILURE 1
|
||||
#endif
|
||||
|
||||
/* Non failing version of argmatch call this function after failing. */
|
||||
#ifndef ARGMATCH_DIE
|
||||
# define ARGMATCH_DIE exit (EXIT_FAILURE)
|
||||
#endif
|
||||
|
||||
#ifdef ARGMATCH_DIE_DECL
|
||||
ARGMATCH_DIE_DECL;
|
||||
#endif
|
||||
|
||||
static void
|
||||
__argmatch_die (void)
|
||||
{
|
||||
ARGMATCH_DIE;
|
||||
}
|
||||
|
||||
/* Used by XARGMATCH and XARGCASEMATCH. See description in argmatch.h.
|
||||
Default to __argmatch_die, but allow caller to change this at run-time. */
|
||||
argmatch_exit_fn argmatch_die = __argmatch_die;
|
||||
|
||||
|
||||
/* If ARG is an unambiguous match for an element of the
|
||||
null-terminated array ARGLIST, return the index in ARGLIST
|
||||
of the matched element, else -1 if it does not match any element
|
||||
@@ -122,12 +148,12 @@ argcasematch (const char *arg, const char *const *arglist,
|
||||
}
|
||||
|
||||
/* Error reporting for argmatch.
|
||||
KIND is a description of the type of entity that was being matched.
|
||||
CONTEXT is a description of the type of entity that was being matched.
|
||||
VALUE is the invalid value that was given.
|
||||
PROBLEM is the return value from argmatch. */
|
||||
|
||||
void
|
||||
argmatch_invalid (const char *kind, const char *value, int problem)
|
||||
argmatch_invalid (const char *context, const char *value, int problem)
|
||||
{
|
||||
enum quoting_style saved_quoting_style;
|
||||
char const *format;
|
||||
@@ -138,10 +164,10 @@ argmatch_invalid (const char *kind, const char *value, int problem)
|
||||
set_quoting_style (NULL, ARGMATCH_QUOTING_STYLE);
|
||||
|
||||
format = (problem == -1
|
||||
? _("%s: invalid argument `%s' for `%s'\n")
|
||||
: _("%s: ambiguous argument `%s' for `%s'\n"));
|
||||
? _("invalid argument `%s' for `%s'")
|
||||
: _("ambiguous argument `%s' for `%s'"));
|
||||
|
||||
fprintf (stderr, format, program_name, quotearg (value), kind);
|
||||
error (0, 0, format, quotearg (value), context);
|
||||
|
||||
set_quoting_style (NULL, saved_quoting_style);
|
||||
}
|
||||
@@ -174,6 +200,34 @@ argmatch_valid (const char *const *arglist,
|
||||
putc ('\n', stderr);
|
||||
}
|
||||
|
||||
/* Never failing versions of the previous functions.
|
||||
|
||||
CONTEXT is the context for which argmatch is called (e.g.,
|
||||
"--version-control", or "$VERSION_CONTROL" etc.). Upon failure,
|
||||
calls the (supposed never to return) function EXIT_FN. */
|
||||
|
||||
int
|
||||
__xargmatch_internal (const char *context,
|
||||
const char *arg, const char *const *arglist,
|
||||
const char *vallist, size_t valsize,
|
||||
int case_sensitive,
|
||||
argmatch_exit_fn exit_fn)
|
||||
{
|
||||
int res = __argmatch_internal (arg, arglist,
|
||||
vallist, valsize,
|
||||
case_sensitive);
|
||||
if (res >= 0)
|
||||
/* Success. */
|
||||
return res;
|
||||
|
||||
/* We failed. Explain why. */
|
||||
argmatch_invalid (context, arg, res);
|
||||
argmatch_valid (arglist, vallist, valsize);
|
||||
(*exit_fn) ();
|
||||
|
||||
return -1; /* To please the compilers. */
|
||||
}
|
||||
|
||||
/* Look for VALUE in VALLIST, an array of objects of size VALSIZE and
|
||||
return the first corresponding argument in ARGLIST */
|
||||
const char *
|
||||
@@ -193,7 +247,7 @@ argmatch_to_argument (const char *value,
|
||||
/*
|
||||
* Based on "getversion.c" by David MacKenzie <djm@gnu.ai.mit.edu>
|
||||
*/
|
||||
char *rogram_name;
|
||||
char *program_name;
|
||||
extern const char *getenv ();
|
||||
|
||||
/* When to make backup files. */
|
||||
|
||||
@@ -35,6 +35,17 @@
|
||||
# endif /* GCC. */
|
||||
# endif /* Not PARAMS. */
|
||||
|
||||
/* Assert there are as many real arguments as there are values
|
||||
(argument list ends with a NULL guard). There is no execution
|
||||
cost, since it will be statically evalauted to `assert (0)' or
|
||||
`assert (1)'. Unfortunately there is no -Wassert-0. */
|
||||
|
||||
# undef ARRAY_CARDINALITY
|
||||
# define ARRAY_CARDINALITY(Array) (sizeof ((Array)) / sizeof (*(Array)))
|
||||
|
||||
# define ARGMATCH_ASSERT(Arglist, Vallist) \
|
||||
assert (ARRAY_CARDINALITY ((Arglist)) == ARRAY_CARDINALITY ((Vallist)) + 1)
|
||||
|
||||
/* Return the index of the element of ARGLIST (NULL terminated) that
|
||||
matches with ARG. If VALLIST is not NULL, then use it to resolve
|
||||
false ambiguities (i.e., different matches of ARG but corresponding
|
||||
@@ -53,17 +64,21 @@ int argcasematch
|
||||
# define ARGCASEMATCH(Arg, Arglist, Vallist) \
|
||||
argcasematch ((Arg), (Arglist), (const char *) (Vallist), sizeof (*(Vallist)))
|
||||
|
||||
|
||||
/* xargmatch calls this function when it fails. This function should not
|
||||
return. By default, this is a function that calls ARGMATCH_DIE which
|
||||
in turn defaults to `exit (EXIT_FAILURE)'. */
|
||||
typedef void (*argmatch_exit_fn) PARAMS ((void));
|
||||
extern argmatch_exit_fn argmatch_die;
|
||||
|
||||
/* Report on stderr why argmatch failed. Report correct values. */
|
||||
|
||||
void argmatch_invalid
|
||||
PARAMS ((const char *kind, const char *value, int problem));
|
||||
PARAMS ((const char *context, const char *value, int problem));
|
||||
|
||||
/* Left for compatibility with the old name invalid_arg */
|
||||
|
||||
# define invalid_arg(Kind, Value, Problem) \
|
||||
argmatch_invalid ((Kind), (Value), (Problem))
|
||||
# define invalid_arg(Context, Value, Problem) \
|
||||
argmatch_invalid ((Context), (Value), (Problem))
|
||||
|
||||
|
||||
|
||||
@@ -74,29 +89,32 @@ void argmatch_valid
|
||||
const char *vallist, size_t valsize));
|
||||
|
||||
# define ARGMATCH_VALID(Arglist, Vallist) \
|
||||
argmatch_valid (Arglist, (const char *) Vallist, sizeof (*Vallist))
|
||||
argmatch_valid (Arglist, (const char *) Vallist, sizeof (*(Vallist)))
|
||||
|
||||
|
||||
/* Set *Result_ptr to the value in Vallist corresponding to the Arg
|
||||
in Arglist. If Arg doesn't match any string in Arglist, give a
|
||||
diagnostic and (presumably) exit via the Die_stmt, leaving *Result_ptr
|
||||
unmodified. */
|
||||
|
||||
# define XARGMATCH(Result_ptr, Kind, Arg, Arglist, Vallist, Die_stmt) \
|
||||
do \
|
||||
{ \
|
||||
int _i = ARGMATCH (Arg, Arglist, Vallist); \
|
||||
if (_i >= 0) \
|
||||
*(Result_ptr) = (Vallist) [_i]; \
|
||||
else \
|
||||
{ \
|
||||
argmatch_invalid ((Kind), (Arg), _i); \
|
||||
ARGMATCH_VALID (Arglist, Vallist); \
|
||||
Die_stmt; \
|
||||
} \
|
||||
} \
|
||||
while (0)
|
||||
/* Same as argmatch, but upon failure, reports a explanation on the
|
||||
failure, and exits using the function EXIT_FN. */
|
||||
|
||||
int __xargmatch_internal
|
||||
PARAMS ((const char *context,
|
||||
const char *arg, const char *const *arglist,
|
||||
const char *vallist, size_t valsize,
|
||||
int case_sensitive, argmatch_exit_fn exit_fn));
|
||||
|
||||
/* Programmer friendly interface to __xargmatch_internal. */
|
||||
|
||||
# define XARGMATCH(Context, Arg, Arglist, Vallist) \
|
||||
(Vallist [__xargmatch_internal ((Context), (Arg), (Arglist), \
|
||||
(const char *) (Vallist), \
|
||||
sizeof (*(Vallist)), \
|
||||
1, argmatch_die)])
|
||||
|
||||
# define XARGCASEMATCH(Context, Arg, Arglist, Vallist) \
|
||||
(Vallist [__xargmatch_internal ((Context), (Arg), (Arglist), \
|
||||
(const char *) (Vallist), \
|
||||
sizeof (*(Vallist)), \
|
||||
0, argmatch_die)])
|
||||
|
||||
/* Convert a value into a corresponding argument. */
|
||||
|
||||
|
||||
@@ -64,6 +64,12 @@
|
||||
char *malloc ();
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_DECL_GETENV
|
||||
char *getenv ();
|
||||
#endif
|
||||
|
||||
char *base_name PARAMS ((char const *));
|
||||
|
||||
#if HAVE_DIRENT_H || HAVE_NDIR_H || HAVE_SYS_DIR_H || HAVE_SYS_NDIR_H
|
||||
# define HAVE_DIR 1
|
||||
#else
|
||||
@@ -214,25 +220,49 @@ version_number (const char *base, const char *backup, size_t base_length)
|
||||
|
||||
static const char * const backup_args[] =
|
||||
{
|
||||
"never", "simple", "nil", "existing", "t", "numbered", 0
|
||||
/* In a series of synonyms, present the most meaning full first, so
|
||||
that argmatch_valid be more readable. */
|
||||
"none", "off",
|
||||
"simple", "never",
|
||||
"existing", "nil",
|
||||
"numbered", "t",
|
||||
0
|
||||
};
|
||||
|
||||
static const enum backup_type backup_types[] =
|
||||
{
|
||||
simple, simple, numbered_existing, numbered_existing, numbered, numbered
|
||||
none, none,
|
||||
simple, simple,
|
||||
numbered_existing, numbered_existing,
|
||||
numbered, numbered
|
||||
};
|
||||
|
||||
/* Return the type of backup indicated by VERSION.
|
||||
Unique abbreviations are accepted. */
|
||||
/* Return the type of backup specified by VERSION.
|
||||
If VERSION is NULL or the empty string, return numbered_existing.
|
||||
If VERSION is invalid or ambiguous, fail with a diagnostic appropriate
|
||||
for the specified CONTEXT. Unambiguous abbreviations are accepted. */
|
||||
|
||||
enum backup_type
|
||||
get_version (const char *version)
|
||||
get_version (const char *context, const char *version)
|
||||
{
|
||||
enum backup_type type;
|
||||
if (version == 0 || *version == 0)
|
||||
type = numbered_existing;
|
||||
return numbered_existing;
|
||||
else
|
||||
XARGMATCH (&type, "version control type", version,
|
||||
backup_args, backup_types, exit (2));
|
||||
return type;
|
||||
return XARGMATCH (context, version, backup_args, backup_types);
|
||||
}
|
||||
|
||||
|
||||
/* Return the type of backup specified by VERSION.
|
||||
If VERSION is NULL, use the value of the envvar VERSION_CONTROL.
|
||||
If the specified string is invalid or ambiguous, fail with a diagnostic
|
||||
appropriate for the specified CONTEXT.
|
||||
Unambiguous abbreviations are accepted. */
|
||||
|
||||
enum backup_type
|
||||
xget_version (const char *context, const char *version)
|
||||
{
|
||||
if (version && *version)
|
||||
return get_version (context, version);
|
||||
else
|
||||
return get_version ("$VERSION_CONTROL", getenv ("VERSION_CONTROL"));
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* backupfile.h -- declarations for making Emacs style backup file names
|
||||
Copyright (C) 1990, 1991, 1992, 1997, 1998 Free Software Foundation, Inc.
|
||||
Copyright (C) 1990-1992, 1997-1999 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -52,9 +52,9 @@ extern char const *simple_backup_suffix;
|
||||
# endif
|
||||
# endif
|
||||
|
||||
char *base_name PARAMS ((char const *));
|
||||
char *find_backup_file_name PARAMS ((char const *, enum backup_type));
|
||||
enum backup_type get_version PARAMS ((char const *));
|
||||
enum backup_type get_version PARAMS ((char const *context, char const *arg));
|
||||
enum backup_type xget_version PARAMS ((char const *context, char const *arg));
|
||||
void addext PARAMS ((char *, char const *, int));
|
||||
|
||||
#endif /* ! BACKUPFILE_H_ */
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* basename.c -- return the last element in a path
|
||||
Copyright (C) 1990, 1998 Free Software Foundation, Inc.
|
||||
Copyright (C) 1990, 1998, 1999 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -29,16 +29,27 @@
|
||||
|
||||
/* In general, we can't use the builtin `basename' function if available,
|
||||
since it has different meanings in different environments.
|
||||
In some environments the builtin `basename' modifies its argument. */
|
||||
In some environments the builtin `basename' modifies its argument.
|
||||
If NAME is all slashes, be sure to return `/'. */
|
||||
|
||||
char *
|
||||
base_name (char const *name)
|
||||
{
|
||||
char const *base = name += FILESYSTEM_PREFIX_LEN (name);
|
||||
int all_slashes = 1;
|
||||
char const *p;
|
||||
|
||||
for (; *name; name++)
|
||||
if (ISSLASH (*name))
|
||||
base = name + 1;
|
||||
for (p = name; *p; p++)
|
||||
{
|
||||
if (ISSLASH (*p))
|
||||
base = p + 1;
|
||||
else
|
||||
all_slashes = 0;
|
||||
}
|
||||
|
||||
/* If NAME is all slashes, arrange to return `/'. */
|
||||
if (*base == '\0' && ISSLASH (*name) && all_slashes)
|
||||
--base;
|
||||
|
||||
return (char *) base;
|
||||
}
|
||||
|
||||
@@ -43,6 +43,8 @@
|
||||
# include <arpa/inet.h>
|
||||
#endif
|
||||
|
||||
void free ();
|
||||
|
||||
/* Returns the canonical hostname associated with HOST (allocated in a static
|
||||
buffer), or 0 if it can't be determined. */
|
||||
char *
|
||||
@@ -67,9 +69,23 @@ canon_host (const char *host)
|
||||
}
|
||||
|
||||
if (addr && strcmp (he->h_name, addr) == 0)
|
||||
/* gethostbyname() cheated! Lookup the host name via the address
|
||||
this time to get the actual host name. */
|
||||
he = gethostbyaddr (he->h_addr, he->h_length, he->h_addrtype);
|
||||
{
|
||||
/* gethostbyname has returned a string representation of the IP
|
||||
address, for example, "127.0.0.1". So now, look up the host
|
||||
name via the address. Although it may seem reasonable to look
|
||||
up the host name via the address, we must not pass `he->h_addr'
|
||||
directly to gethostbyaddr because on some systems he->h_addr
|
||||
is located in a static library buffer that is reused in the
|
||||
gethostbyaddr call. Make a copy and use that instead. */
|
||||
char *h_addr_copy = strdup (he->h_addr);
|
||||
if (h_addr_copy == NULL)
|
||||
he = NULL;
|
||||
else
|
||||
{
|
||||
he = gethostbyaddr (h_addr_copy, he->h_length, he->h_addrtype);
|
||||
free (h_addr_copy);
|
||||
}
|
||||
}
|
||||
# endif /* HAVE_GETHOSTBYADDR */
|
||||
|
||||
if (he)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* closeout.c - close standard output
|
||||
Copyright (C) 1998 Free Software Foundation, Inc.
|
||||
Copyright (C) 1998, 1999 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -42,7 +42,28 @@ extern int errno;
|
||||
#include "closeout.h"
|
||||
#include "error.h"
|
||||
|
||||
/* Close standard output, exiting with status STATUS on failure. */
|
||||
/* Close standard output, exiting with status STATUS on failure.
|
||||
If a program writes *anything* to stdout, that program should `fflush'
|
||||
stdout and make sure that it succeeds before exiting. Otherwise,
|
||||
suppose that you go to the extreme of checking the return status
|
||||
of every function that does an explicit write to stdout. The last
|
||||
printf can succeed in writing to the internal stream buffer, and yet
|
||||
the fclose(stdout) could still fail (due e.g., to a disk full error)
|
||||
when it tries to write out that buffered data. Thus, you would be
|
||||
left with an incomplete output file and the offending program would
|
||||
exit successfully.
|
||||
|
||||
FIXME: note the fflush suggested above is implicit in the fclose
|
||||
we actually do below. Consider doing only the fflush and/or using
|
||||
setvbuf to inhibit buffering.
|
||||
|
||||
Besides, it's wasteful to check the return value from every call
|
||||
that writes to stdout -- just let the internal stream state record
|
||||
the failure. That's what the ferror test is checking below.
|
||||
|
||||
It's important to detect such failures and exit nonzero because many
|
||||
tools (most notably `make' and other build-management systems) depend
|
||||
on being able to detect failure in other tools via their exit status. */
|
||||
void
|
||||
close_stdout_status (int status)
|
||||
{
|
||||
|
||||
66
lib/dup2.c
Normal file
66
lib/dup2.c
Normal file
@@ -0,0 +1,66 @@
|
||||
/* Duplicate an open file descriptor to a specified file descriptor.
|
||||
Copyright 1999 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software Foundation,
|
||||
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
|
||||
/* written by Paul Eggert */
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#include <errno.h>
|
||||
#ifndef errno
|
||||
extern int errno;
|
||||
#endif
|
||||
|
||||
#if HAVE_FCNTL_H
|
||||
# include <fcntl.h>
|
||||
#endif
|
||||
|
||||
#if HAVE_UNISTD_H
|
||||
# include <unistd.h>
|
||||
#endif
|
||||
|
||||
#ifndef F_DUPFD
|
||||
static int
|
||||
dupfd (int fd, int desired_fd)
|
||||
{
|
||||
int duplicated_fd = dup (fd);
|
||||
if (duplicated_fd < 0 || duplicated_fd == desired_fd)
|
||||
return duplicated_fd;
|
||||
else
|
||||
{
|
||||
int r = dupfd (fd, desired_fd);
|
||||
int e = errno;
|
||||
close (duplicated_fd);
|
||||
errno = e;
|
||||
return r;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
int
|
||||
dup2 (int fd, int desired_fd)
|
||||
{
|
||||
if (fd == desired_fd)
|
||||
return fd;
|
||||
close (desired_fd);
|
||||
#ifdef F_DUPFD
|
||||
return fcntl (fd, F_DUPFD, desired_fd);
|
||||
#else
|
||||
return dupfd (fd, desired_fd);
|
||||
#endif
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
/* filemode.c -- make a string describing file modes
|
||||
Copyright (C) 1985, 1990, 1993, 1998 Free Software Foundation, Inc.
|
||||
Copyright (C) 1985, 1990, 1993, 1998, 1999 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -48,6 +48,25 @@
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if !S_IRGRP
|
||||
# define S_IRGRP (S_IRUSR >> 3)
|
||||
#endif
|
||||
#if !S_IWGRP
|
||||
# define S_IWGRP (S_IWUSR >> 3)
|
||||
#endif
|
||||
#if !S_IXGRP
|
||||
# define S_IXGRP (S_IXUSR >> 3)
|
||||
#endif
|
||||
#if !S_IROTH
|
||||
# define S_IROTH (S_IRUSR >> 6)
|
||||
#endif
|
||||
#if !S_IWOTH
|
||||
# define S_IWOTH (S_IWUSR >> 6)
|
||||
#endif
|
||||
#if !S_IXOTH
|
||||
# define S_IXOTH (S_IXUSR >> 6)
|
||||
#endif
|
||||
|
||||
#ifdef STAT_MACROS_BROKEN
|
||||
# undef S_ISBLK
|
||||
# undef S_ISCHR
|
||||
@@ -89,23 +108,15 @@
|
||||
#if !defined(S_ISNWK) && defined(S_IFNWK) /* HP/UX */
|
||||
# define S_ISNWK(m) (((m) & S_IFMT) == S_IFNWK)
|
||||
#endif
|
||||
|
||||
/* Look at read, write, and execute bits in BITS and set
|
||||
flags in CHARS accordingly. */
|
||||
|
||||
static void
|
||||
rwx (short unsigned int bits, char *chars)
|
||||
{
|
||||
chars[0] = (bits & S_IRUSR) ? 'r' : '-';
|
||||
chars[1] = (bits & S_IWUSR) ? 'w' : '-';
|
||||
chars[2] = (bits & S_IXUSR) ? 'x' : '-';
|
||||
}
|
||||
#if !defined(S_ISDOOR) && defined(S_IFDOOR) /* Solaris 2.5 and up */
|
||||
# define S_ISDOOR(m) (((m) & S_IFMT) == S_IFDOOR)
|
||||
#endif
|
||||
|
||||
/* Set the 's' and 't' flags in file attributes string CHARS,
|
||||
according to the file mode BITS. */
|
||||
|
||||
static void
|
||||
setst (short unsigned int bits, char *chars)
|
||||
setst (mode_t bits, char *chars)
|
||||
{
|
||||
#ifdef S_ISUID
|
||||
if (bits & S_ISUID)
|
||||
@@ -142,6 +153,7 @@ setst (short unsigned int bits, char *chars)
|
||||
/* Return a character indicating the type of file described by
|
||||
file mode BITS:
|
||||
'd' for directories
|
||||
'D' for doors
|
||||
'b' for block special files
|
||||
'c' for character special files
|
||||
'm' for multiplexor files
|
||||
@@ -153,7 +165,7 @@ setst (short unsigned int bits, char *chars)
|
||||
'?' for any other file type. */
|
||||
|
||||
static char
|
||||
ftypelet (long int bits)
|
||||
ftypelet (mode_t bits)
|
||||
{
|
||||
#ifdef S_ISBLK
|
||||
if (S_ISBLK (bits))
|
||||
@@ -185,6 +197,10 @@ ftypelet (long int bits)
|
||||
if (S_ISNWK (bits))
|
||||
return 'n';
|
||||
#endif
|
||||
#ifdef S_ISDOOR
|
||||
if (S_ISDOOR (bits))
|
||||
return 'D';
|
||||
#endif
|
||||
|
||||
/* The following two tests are for Cray DMF (Data Migration
|
||||
Facility), which is a HSM file system. A migrated file has a
|
||||
@@ -208,12 +224,18 @@ ftypelet (long int bits)
|
||||
is given as an argument. */
|
||||
|
||||
void
|
||||
mode_string (short unsigned int mode, char *str)
|
||||
mode_string (mode_t mode, char *str)
|
||||
{
|
||||
str[0] = ftypelet ((long) mode);
|
||||
rwx ((mode & 0700) << 0, &str[1]);
|
||||
rwx ((mode & 0070) << 3, &str[4]);
|
||||
rwx ((mode & 0007) << 6, &str[7]);
|
||||
str[0] = ftypelet (mode);
|
||||
str[1] = mode & S_IRUSR ? 'r' : '-';
|
||||
str[2] = mode & S_IWUSR ? 'w' : '-';
|
||||
str[3] = mode & S_IXUSR ? 'x' : '-';
|
||||
str[4] = mode & S_IRGRP ? 'r' : '-';
|
||||
str[5] = mode & S_IWGRP ? 'w' : '-';
|
||||
str[6] = mode & S_IXGRP ? 'x' : '-';
|
||||
str[7] = mode & S_IROTH ? 'r' : '-';
|
||||
str[8] = mode & S_IWOTH ? 'w' : '-';
|
||||
str[9] = mode & S_IXOTH ? 'x' : '-';
|
||||
setst (mode, str);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,9 +1,19 @@
|
||||
#ifndef PARAMS
|
||||
# if defined PROTOTYPES || (defined __STDC__ && __STDC__)
|
||||
# define PARAMS(Args) Args
|
||||
# else
|
||||
# define PARAMS(Args) ()
|
||||
# endif
|
||||
#endif
|
||||
#ifndef FILEMODE_H_
|
||||
|
||||
void mode_string PARAMS ((short unsigned int mode, char *str));
|
||||
# if HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
# endif
|
||||
|
||||
# include <sys/types.h>
|
||||
|
||||
# ifndef PARAMS
|
||||
# if defined PROTOTYPES || (defined __STDC__ && __STDC__)
|
||||
# define PARAMS(Args) Args
|
||||
# else
|
||||
# define PARAMS(Args) ()
|
||||
# endif
|
||||
# endif
|
||||
|
||||
void mode_string PARAMS ((mode_t mode, char *str));
|
||||
|
||||
#endif
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
# ifdef FORCE_ALLOCA_H
|
||||
# ifdef HAVE_ALLOCA_H
|
||||
# include <alloca.h>
|
||||
# endif
|
||||
#endif
|
||||
@@ -28,6 +28,10 @@
|
||||
#include <stdio.h>
|
||||
#include <ctype.h>
|
||||
|
||||
#if HAVE_STDLIB_H
|
||||
# include <stdlib.h> /* for `free'; used by Bison 1.27 */
|
||||
#endif
|
||||
|
||||
#if defined (STDC_HEADERS) || (!defined (isascii) && !defined (HAVE_ISASCII))
|
||||
# define IN_CTYPE_DOMAIN(c) 1
|
||||
#else
|
||||
@@ -706,7 +710,7 @@ LookupWord (buff)
|
||||
|
||||
/* Make it lowercase. */
|
||||
for (p = buff; *p; p++)
|
||||
if (ISUPPER (*p))
|
||||
if (ISUPPER ((unsigned char) *p))
|
||||
*p = tolower (*p);
|
||||
|
||||
if (strcmp (buff, "am") == 0 || strcmp (buff, "a.m.") == 0)
|
||||
@@ -787,7 +791,7 @@ LookupWord (buff)
|
||||
}
|
||||
|
||||
/* Military timezones. */
|
||||
if (buff[1] == '\0' && ISALPHA (*buff))
|
||||
if (buff[1] == '\0' && ISALPHA ((unsigned char) *buff))
|
||||
{
|
||||
for (tp = MilitaryTable; tp->name; tp++)
|
||||
if (strcmp (buff, tp->name) == 0)
|
||||
@@ -818,7 +822,7 @@ LookupWord (buff)
|
||||
static int
|
||||
yylex ()
|
||||
{
|
||||
register char c;
|
||||
register unsigned char c;
|
||||
register char *p;
|
||||
char buff[20];
|
||||
int Count;
|
||||
@@ -826,7 +830,7 @@ yylex ()
|
||||
|
||||
for (;;)
|
||||
{
|
||||
while (ISSPACE (*yyInput))
|
||||
while (ISSPACE ((unsigned char) *yyInput))
|
||||
yyInput++;
|
||||
|
||||
if (ISDIGIT (c = *yyInput) || c == '-' || c == '+')
|
||||
@@ -877,8 +881,7 @@ yylex ()
|
||||
|
||||
/* Yield A - B, measured in seconds. */
|
||||
static long
|
||||
difftm (a, b)
|
||||
struct tm *a, *b;
|
||||
difftm (struct tm *a, struct tm *b)
|
||||
{
|
||||
int ay = a->tm_year + (TM_YEAR_ORIGIN - 1);
|
||||
int by = b->tm_year + (TM_YEAR_ORIGIN - 1);
|
||||
@@ -906,12 +909,15 @@ get_date (const char *p, const time_t *now)
|
||||
yyInput = p;
|
||||
Start = now ? *now : time ((time_t *) NULL);
|
||||
tmp = localtime (&Start);
|
||||
if (!tmp)
|
||||
return -1;
|
||||
yyYear = tmp->tm_year + TM_YEAR_ORIGIN;
|
||||
yyMonth = tmp->tm_mon + 1;
|
||||
yyDay = tmp->tm_mday;
|
||||
yyHour = tmp->tm_hour;
|
||||
yyMinutes = tmp->tm_min;
|
||||
yySeconds = tmp->tm_sec;
|
||||
tm.tm_isdst = tmp->tm_isdst;
|
||||
yyMeridian = MER24;
|
||||
yyRelSeconds = 0;
|
||||
yyRelMinutes = 0;
|
||||
@@ -947,7 +953,6 @@ get_date (const char *p, const time_t *now)
|
||||
tm.tm_hour += yyRelHour;
|
||||
tm.tm_min += yyRelMinutes;
|
||||
tm.tm_sec += yyRelSeconds;
|
||||
tm.tm_isdst = -1;
|
||||
tm0 = tm;
|
||||
|
||||
Start = mktime (&tm);
|
||||
@@ -994,7 +999,11 @@ get_date (const char *p, const time_t *now)
|
||||
|
||||
if (yyHaveZone)
|
||||
{
|
||||
long delta = yyTimezone * 60L + difftm (&tm, gmtime (&Start));
|
||||
long delta;
|
||||
struct tm *gmt = gmtime (&Start);
|
||||
if (!gmt)
|
||||
return -1;
|
||||
delta = yyTimezone * 60L + difftm (&tm, gmt);
|
||||
if ((Start + delta < Start) != (delta < 0))
|
||||
return -1; /* time_t overflow */
|
||||
Start += delta;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* provide consistent interface to getgroups for systems that don't allow N==0
|
||||
Copyright (C) 1996 Free Software Foundation, Inc.
|
||||
Copyright (C) 1996, 1999 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -25,14 +25,11 @@ char *xmalloc ();
|
||||
|
||||
/* On at least Ultrix 4.3 and NextStep 3.2, getgroups (0, 0) always fails.
|
||||
On other systems, it returns the number of supplemental groups for the
|
||||
process is returned.
|
||||
This function handles that special case and lets the system-
|
||||
provided function handle all others. */
|
||||
process. This function handles that special case and lets the system-
|
||||
provided function handle all others. */
|
||||
|
||||
int
|
||||
getgroups (n, group)
|
||||
size_t n;
|
||||
GETGROUPS_T *group;
|
||||
getgroups (size_t n, GETGROUPS_T *group)
|
||||
{
|
||||
int n_groups;
|
||||
GETGROUPS_T *gbuf;
|
||||
|
||||
@@ -98,8 +98,14 @@
|
||||
extern int errno;
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_GETLOADAVG
|
||||
#if HAVE_LOCALE_H
|
||||
# include <locale.h>
|
||||
#endif
|
||||
#if !HAVE_SETLOCALE
|
||||
# define setlocale(Category, Locale) /* empty */
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_GETLOADAVG
|
||||
|
||||
/* The existing Emacs configuration files define a macro called
|
||||
LOAD_AVE_CVT, which accepts a value of type LOAD_AVE_TYPE, and
|
||||
@@ -638,8 +644,11 @@ getloadavg (loadavg, nelem)
|
||||
if (count <= 0)
|
||||
return -1;
|
||||
|
||||
/* The following sscanf must use the C locale. */
|
||||
setlocale (LC_NUMERIC, "C");
|
||||
count = sscanf (ldavgbuf, "%lf %lf %lf",
|
||||
&load_ave[0], &load_ave[1], &load_ave[2]);
|
||||
setlocale (LC_NUMERIC, "");
|
||||
if (count < 1)
|
||||
return -1;
|
||||
|
||||
|
||||
136
lib/getopt.c
136
lib/getopt.c
@@ -1,47 +1,42 @@
|
||||
/* Getopt for GNU.
|
||||
NOTE: getopt is now part of the C library, so if you don't know what
|
||||
"Keep this file name-space clean" means, talk to roland@gnu.ai.mit.edu
|
||||
"Keep this file name-space clean" means, talk to drepper@gnu.org
|
||||
before changing it!
|
||||
|
||||
Copyright (C) 1987, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97
|
||||
Copyright (C) 1987, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98
|
||||
Free Software Foundation, Inc.
|
||||
|
||||
the C library, however. The master source lives in /gd/gnu/lib.
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
NOTE: The canonical source of this file is maintained with the GNU C Library.
|
||||
Bugs can be reported to bug-glibc@prep.ai.mit.edu.
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the
|
||||
Free Software Foundation; either version 2, or (at your option) any
|
||||
later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||
USA. */
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
/* This tells Alpha OSF/1 not to define a getopt prototype in <stdio.h>.
|
||||
Ditto for AIX 3.2 and <stdlib.h>. */
|
||||
#ifndef _NO_PROTO
|
||||
#define _NO_PROTO
|
||||
# define _NO_PROTO
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include <config.h>
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#if !defined (__STDC__) || !__STDC__
|
||||
#if !defined __STDC__ || !__STDC__
|
||||
/* This is a separate conditional since some stdc systems
|
||||
reject `defined (const)'. */
|
||||
#ifndef const
|
||||
#define const
|
||||
#endif
|
||||
# ifndef const
|
||||
# define const
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
@@ -55,11 +50,11 @@ USA. */
|
||||
it is simpler to just do this in the source for each such file. */
|
||||
|
||||
#define GETOPT_INTERFACE_VERSION 2
|
||||
#if !defined (_LIBC) && defined (__GLIBC__) && __GLIBC__ >= 2
|
||||
#include <gnu-versions.h>
|
||||
#if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION
|
||||
#define ELIDE_CODE
|
||||
#endif
|
||||
#if !defined _LIBC && defined __GLIBC__ && __GLIBC__ >= 2
|
||||
# include <gnu-versions.h>
|
||||
# if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION
|
||||
# define ELIDE_CODE
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifndef ELIDE_CODE
|
||||
@@ -70,32 +65,26 @@ USA. */
|
||||
#ifdef __GNU_LIBRARY__
|
||||
/* Don't include stdlib.h for non-GNU C libraries because some of them
|
||||
contain conflicting prototypes for getopt. */
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
# include <stdlib.h>
|
||||
# include <unistd.h>
|
||||
#endif /* GNU C library. */
|
||||
|
||||
#ifdef VMS
|
||||
#include <unixlib.h>
|
||||
#if HAVE_STRING_H - 0
|
||||
#include <string.h>
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined (WIN32) && !defined (__CYGWIN32__)
|
||||
/* It's not Unix, really. See? Capital letters. */
|
||||
#include <windows.h>
|
||||
#define getpid() GetCurrentProcessId()
|
||||
# include <unixlib.h>
|
||||
# if HAVE_STRING_H - 0
|
||||
# include <string.h>
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifndef _
|
||||
/* This is for other GNU distributions with internationalized messages.
|
||||
When compiling libc, the _ macro is predefined. */
|
||||
#ifdef HAVE_LIBINTL_H
|
||||
# include <libintl.h>
|
||||
# define _(msgid) gettext (msgid)
|
||||
#else
|
||||
# define _(msgid) (msgid)
|
||||
#endif
|
||||
# ifdef HAVE_LIBINTL_H
|
||||
# include <libintl.h>
|
||||
# define _(msgid) gettext (msgid)
|
||||
# else
|
||||
# define _(msgid) (msgid)
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* This version of `getopt' appears to the caller like standard Unix `getopt'
|
||||
@@ -205,14 +194,22 @@ static char *posixly_correct;
|
||||
because there are many ways it can cause trouble.
|
||||
On some systems, it contains special magic macros that don't work
|
||||
in GCC. */
|
||||
#include <string.h>
|
||||
#define my_index strchr
|
||||
# include <string.h>
|
||||
# define my_index strchr
|
||||
#else
|
||||
|
||||
# if HAVE_STRING_H
|
||||
# include <string.h>
|
||||
# else
|
||||
# include <strings.h>
|
||||
# endif
|
||||
|
||||
/* Avoid depending on library functions or files
|
||||
whose names are inconsistent. */
|
||||
|
||||
char *getenv ();
|
||||
#ifndef getenv
|
||||
extern char *getenv ();
|
||||
#endif
|
||||
|
||||
static char *
|
||||
my_index (str, chr)
|
||||
@@ -233,11 +230,11 @@ my_index (str, chr)
|
||||
#ifdef __GNUC__
|
||||
/* Note that Motorola Delta 68k R3V7 comes with GCC but not stddef.h.
|
||||
That was relevant to code that was here before. */
|
||||
#if !defined (__STDC__) || !__STDC__
|
||||
# if (!defined __STDC__ || !__STDC__) && !defined strlen
|
||||
/* gcc with -traditional declares the built-in strlen to return int,
|
||||
and has done so at least since version 2.4.5. -- rms. */
|
||||
extern int strlen (const char *);
|
||||
#endif /* not __STDC__ */
|
||||
# endif /* not __STDC__ */
|
||||
#endif /* __GNUC__ */
|
||||
|
||||
#endif /* not __GNU_LIBRARY__ */
|
||||
@@ -264,8 +261,6 @@ static int nonoption_flags_len;
|
||||
static int original_argc;
|
||||
static char *const *original_argv;
|
||||
|
||||
extern pid_t __libc_pid;
|
||||
|
||||
/* Make sure the environment variable bash 2.0 puts in the environment
|
||||
is valid for the getopt call we must make sure that the ARGV passed
|
||||
to getopt is that one passed to the process. */
|
||||
@@ -278,7 +273,9 @@ store_args_and_env (int argc, char *const *argv)
|
||||
original_argc = argc;
|
||||
original_argv = argv;
|
||||
}
|
||||
# ifdef text_set_element
|
||||
text_set_element (__libc_subinit, store_args_and_env);
|
||||
# endif /* text_set_element */
|
||||
|
||||
# define SWAP_FLAGS(ch1, ch2) \
|
||||
if (nonoption_flags_len > 0) \
|
||||
@@ -300,7 +297,7 @@ text_set_element (__libc_subinit, store_args_and_env);
|
||||
`first_nonopt' and `last_nonopt' are relocated so that they describe
|
||||
the new indices of the non-options in ARGV after they are moved. */
|
||||
|
||||
#if defined (__STDC__) && __STDC__
|
||||
#if defined __STDC__ && __STDC__
|
||||
static void exchange (char **);
|
||||
#endif
|
||||
|
||||
@@ -331,9 +328,9 @@ exchange (argv)
|
||||
nonoption_flags_len = nonoption_flags_max_len = 0;
|
||||
else
|
||||
{
|
||||
memcpy (new_str, __getopt_nonoption_flags, nonoption_flags_max_len);
|
||||
memset (&new_str[nonoption_flags_max_len], '\0',
|
||||
top + 1 - nonoption_flags_max_len);
|
||||
memset (__mempcpy (new_str, __getopt_nonoption_flags,
|
||||
nonoption_flags_max_len),
|
||||
'\0', top + 1 - nonoption_flags_max_len);
|
||||
nonoption_flags_max_len = top + 1;
|
||||
__getopt_nonoption_flags = new_str;
|
||||
}
|
||||
@@ -386,7 +383,7 @@ exchange (argv)
|
||||
|
||||
/* Initialize the internal data when the first call is made. */
|
||||
|
||||
#if defined (__STDC__) && __STDC__
|
||||
#if defined __STDC__ && __STDC__
|
||||
static const char *_getopt_initialize (int, char *const *, const char *);
|
||||
#endif
|
||||
static const char *
|
||||
@@ -442,11 +439,8 @@ _getopt_initialize (argc, argv, optstring)
|
||||
if (__getopt_nonoption_flags == NULL)
|
||||
nonoption_flags_max_len = -1;
|
||||
else
|
||||
{
|
||||
memcpy (__getopt_nonoption_flags, orig_str, len);
|
||||
memset (&__getopt_nonoption_flags[len], '\0',
|
||||
nonoption_flags_max_len - len);
|
||||
}
|
||||
memset (__mempcpy (__getopt_nonoption_flags, orig_str, len),
|
||||
'\0', nonoption_flags_max_len - len);
|
||||
}
|
||||
}
|
||||
nonoption_flags_len = nonoption_flags_max_len;
|
||||
@@ -538,11 +532,11 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
|
||||
from the shell indicating it is not an option. The later information
|
||||
is only used when the used in the GNU libc. */
|
||||
#ifdef _LIBC
|
||||
#define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0' \
|
||||
|| (optind < nonoption_flags_len \
|
||||
&& __getopt_nonoption_flags[optind] == '1'))
|
||||
# define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0' \
|
||||
|| (optind < nonoption_flags_len \
|
||||
&& __getopt_nonoption_flags[optind] == '1'))
|
||||
#else
|
||||
#define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0')
|
||||
# define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0')
|
||||
#endif
|
||||
|
||||
if (nextchar == NULL || *nextchar == '\0')
|
||||
@@ -705,12 +699,12 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
|
||||
if (argv[optind - 1][1] == '-')
|
||||
/* --option */
|
||||
fprintf (stderr,
|
||||
_("%s: option `--%s' doesn't allow an argument\n"),
|
||||
_("%s: option `--%s' doesn't allow an argument\n"),
|
||||
argv[0], pfound->name);
|
||||
else
|
||||
/* +option or -option */
|
||||
fprintf (stderr,
|
||||
_("%s: option `%c%s' doesn't allow an argument\n"),
|
||||
_("%s: option `%c%s' doesn't allow an argument\n"),
|
||||
argv[0], argv[optind - 1][0], pfound->name);
|
||||
}
|
||||
|
||||
|
||||
114
lib/getopt.h
114
lib/getopt.h
@@ -1,28 +1,27 @@
|
||||
/* Declarations for getopt.
|
||||
Copyright (C) 1989,90,91,92,93,94,96,97 Free Software Foundation, Inc.
|
||||
Copyright (C) 1989,90,91,92,93,94,96,97,98 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
the C library, however. The master source lives in /gd/gnu/lib.
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
NOTE: The canonical source of this file is maintained with the GNU C Library.
|
||||
Bugs can be reported to bug-glibc@prep.ai.mit.edu.
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the
|
||||
Free Software Foundation; either version 2, or (at your option) any
|
||||
later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||
USA. */
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#ifndef _GETOPT_H
|
||||
#define _GETOPT_H 1
|
||||
|
||||
#ifndef __need_getopt
|
||||
# define _GETOPT_H 1
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
@@ -59,6 +58,7 @@ extern int opterr;
|
||||
|
||||
extern int optopt;
|
||||
|
||||
#ifndef __need_getopt
|
||||
/* Describe the long-named options requested by the application.
|
||||
The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector
|
||||
of `struct option' terminated by an element containing a name which is
|
||||
@@ -82,11 +82,11 @@ extern int optopt;
|
||||
|
||||
struct option
|
||||
{
|
||||
#if defined (__STDC__) && __STDC__
|
||||
# if defined __STDC__ && __STDC__
|
||||
const char *name;
|
||||
#else
|
||||
# else
|
||||
char *name;
|
||||
#endif
|
||||
# endif
|
||||
/* has_arg can't be an enum because some compilers complain about
|
||||
type mismatches in all the code that assumes it is an int. */
|
||||
int has_arg;
|
||||
@@ -96,40 +96,74 @@ struct option
|
||||
|
||||
/* Names for the values of the `has_arg' field of `struct option'. */
|
||||
|
||||
#define no_argument 0
|
||||
#define required_argument 1
|
||||
#define optional_argument 2
|
||||
# define no_argument 0
|
||||
# define required_argument 1
|
||||
# define optional_argument 2
|
||||
#endif /* need getopt */
|
||||
|
||||
#if defined (__STDC__) && __STDC__
|
||||
#ifdef __GNU_LIBRARY__
|
||||
|
||||
/* Get definitions and prototypes for functions to process the
|
||||
arguments in ARGV (ARGC of them, minus the program name) for
|
||||
options given in OPTS.
|
||||
|
||||
Return the option character from OPTS just read. Return -1 when
|
||||
there are no more options. For unrecognized options, or options
|
||||
missing arguments, `optopt' is set to the option letter, and '?' is
|
||||
returned.
|
||||
|
||||
The OPTS string is a list of characters which are recognized option
|
||||
letters, optionally followed by colons, specifying that that letter
|
||||
takes an argument, to be placed in `optarg'.
|
||||
|
||||
If a letter in OPTS is followed by two colons, its argument is
|
||||
optional. This behavior is specific to the GNU `getopt'.
|
||||
|
||||
The argument `--' causes premature termination of argument
|
||||
scanning, explicitly telling `getopt' that there are no more
|
||||
options.
|
||||
|
||||
If OPTS begins with `--', then non-option arguments are treated as
|
||||
arguments to the option '\0'. This behavior is specific to the GNU
|
||||
`getopt'. */
|
||||
|
||||
#if defined __STDC__ && __STDC__
|
||||
# ifdef __GNU_LIBRARY__
|
||||
/* Many other libraries have conflicting prototypes for getopt, with
|
||||
differences in the consts, in stdlib.h. To avoid compilation
|
||||
errors, only prototype getopt for the GNU C library. */
|
||||
extern int getopt (int argc, char *const *argv, const char *shortopts);
|
||||
#else /* not __GNU_LIBRARY__ */
|
||||
extern int getopt (int __argc, char *const *__argv, const char *__shortopts);
|
||||
# else /* not __GNU_LIBRARY__ */
|
||||
extern int getopt ();
|
||||
#endif /* __GNU_LIBRARY__ */
|
||||
extern int getopt_long (int argc, char *const *argv, const char *shortopts,
|
||||
const struct option *longopts, int *longind);
|
||||
extern int getopt_long_only (int argc, char *const *argv,
|
||||
const char *shortopts,
|
||||
const struct option *longopts, int *longind);
|
||||
# endif /* __GNU_LIBRARY__ */
|
||||
|
||||
# ifndef __need_getopt
|
||||
extern int getopt_long (int __argc, char *const *__argv, const char *__shortopts,
|
||||
const struct option *__longopts, int *__longind);
|
||||
extern int getopt_long_only (int __argc, char *const *__argv,
|
||||
const char *__shortopts,
|
||||
const struct option *__longopts, int *__longind);
|
||||
|
||||
/* Internal only. Users should not call this directly. */
|
||||
extern int _getopt_internal (int argc, char *const *argv,
|
||||
const char *shortopts,
|
||||
const struct option *longopts, int *longind,
|
||||
int long_only);
|
||||
extern int _getopt_internal (int __argc, char *const *__argv,
|
||||
const char *__shortopts,
|
||||
const struct option *__longopts, int *__longind,
|
||||
int __long_only);
|
||||
# endif
|
||||
#else /* not __STDC__ */
|
||||
extern int getopt ();
|
||||
# ifndef __need_getopt
|
||||
extern int getopt_long ();
|
||||
extern int getopt_long_only ();
|
||||
|
||||
extern int _getopt_internal ();
|
||||
# endif
|
||||
#endif /* __STDC__ */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _GETOPT_H */
|
||||
/* Make sure we later can get all the definitions and declarations. */
|
||||
#undef __need_getopt
|
||||
|
||||
#endif /* getopt.h */
|
||||
|
||||
@@ -1,25 +1,22 @@
|
||||
/* getopt_long and getopt_long_only entry points for GNU getopt.
|
||||
Copyright (C) 1987,88,89,90,91,92,93,94,96,97 Free Software Foundation, Inc.
|
||||
Copyright (C) 1987,88,89,90,91,92,93,94,96,97,98
|
||||
Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
the C library, however. The master source lives in /gd/gnu/lib.
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
NOTE: The canonical source of this file is maintained with the GNU C Library.
|
||||
Bugs can be reported to bug-glibc@prep.ai.mit.edu.
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the
|
||||
Free Software Foundation; either version 2, or (at your option) any
|
||||
later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||
USA. */
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include <config.h>
|
||||
@@ -27,7 +24,7 @@ USA. */
|
||||
|
||||
#include "getopt.h"
|
||||
|
||||
#if !defined (__STDC__) || !__STDC__
|
||||
#if !defined __STDC__ || !__STDC__
|
||||
/* This is a separate conditional since some stdc systems
|
||||
reject `defined (const)'. */
|
||||
#ifndef const
|
||||
@@ -46,7 +43,7 @@ USA. */
|
||||
it is simpler to just do this in the source for each such file. */
|
||||
|
||||
#define GETOPT_INTERFACE_VERSION 2
|
||||
#if !defined (_LIBC) && defined (__GLIBC__) && __GLIBC__ >= 2
|
||||
#if !defined _LIBC && defined __GLIBC__ && __GLIBC__ >= 2
|
||||
#include <gnu-versions.h>
|
||||
#if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION
|
||||
#define ELIDE_CODE
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* getugroups.c -- return a list of the groups a user is in
|
||||
Copyright (C) 1990, 1991, 1998 Free Software Foundation.
|
||||
Copyright (C) 1990, 1991, 1998, 1999 Free Software Foundation.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -41,16 +41,27 @@ struct group *getgrent ();
|
||||
# include <strings.h>
|
||||
#endif
|
||||
|
||||
/* Like `getgroups', but for user USERNAME instead of for
|
||||
the current process. */
|
||||
/* Like `getgroups', but for user USERNAME instead of for the current
|
||||
process. Store at most MAXCOUNT group IDs in the GROUPLIST array.
|
||||
If GID is not -1, store it first (if possible). GID should be the
|
||||
group ID (pw_gid) obtained from getpwuid, in case USERNAME is not
|
||||
listed in /etc/groups.
|
||||
Always return the number of groups of which USERNAME is a member. */
|
||||
|
||||
int
|
||||
getugroups (int maxcount, GETGROUPS_T *grouplist, char *username)
|
||||
getugroups (int maxcount, GETGROUPS_T *grouplist, char *username, gid_t gid)
|
||||
{
|
||||
struct group *grp;
|
||||
register char **cp;
|
||||
register int count = 0;
|
||||
|
||||
if (gid != -1)
|
||||
{
|
||||
if (maxcount != 0)
|
||||
grouplist[count] = gid;
|
||||
++count;
|
||||
}
|
||||
|
||||
setgrent ();
|
||||
while ((grp = getgrent ()) != 0)
|
||||
for (cp = grp->gr_mem; *cp; ++cp)
|
||||
|
||||
371
lib/hash.c
371
lib/hash.c
@@ -1,5 +1,5 @@
|
||||
/* hash - hashing table processing.
|
||||
Copyright (C) 1998 Free Software Foundation, Inc.
|
||||
Copyright (C) 1998, 1999 Free Software Foundation, Inc.
|
||||
Written by Jim Meyering, 1992.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
@@ -54,10 +54,10 @@ char *malloc ();
|
||||
|
||||
#include "hash.h"
|
||||
|
||||
/* An hash table contains many internal entries, each holding a pointer to
|
||||
/* A hash table contains many internal entries, each holding a pointer to
|
||||
some user provided data (also called a user entry). An entry indistinctly
|
||||
refers to both the internal entry and its associated user entry. A user
|
||||
entry contents may be hashed by a randomisation function (the hashing
|
||||
entry contents may be hashed by a randomization function (the hashing
|
||||
function, or just `hasher' for short) into a number (or `slot') between 0
|
||||
and the current table size. At each slot position in the hash table,
|
||||
starts a linked chain of entries for which the user data all hash to this
|
||||
@@ -66,32 +66,58 @@ char *malloc ();
|
||||
A good `hasher' function will distribute entries rather evenly in buckets.
|
||||
In the ideal case, the length of each bucket is roughly the number of
|
||||
entries divided by the table size. Finding the slot for a data is usually
|
||||
done at constant speed by the `hasher', and the later finding of a precise
|
||||
done in constant time by the `hasher', and the later finding of a precise
|
||||
entry is linear in time with the size of the bucket. Consequently, a
|
||||
bigger hash table size (that is, a bigger number of buckets) is prone to
|
||||
yielding shorter buckets, *given* the `hasher' function behaves properly.
|
||||
larger hash table size (that is, a larger number of buckets) is prone to
|
||||
yielding shorter chains, *given* the `hasher' function behaves properly.
|
||||
|
||||
Long buckets slow down the lookup algorithm. One might use big hash table
|
||||
sizes in hope to reduce the average length of buckets, but this might
|
||||
become inordinate, as unused slots in the hash table take some space. The
|
||||
best bet is to make sure you are using a good `hasher' function (beware
|
||||
that those are not that easy to write! :-), and to use a table size at
|
||||
least bigger than the actual number of entries.
|
||||
that those are not that easy to write! :-), and to use a table size
|
||||
larger than the actual number of entries. */
|
||||
|
||||
Currently, whenever the addition of an entry gets 80% of buckets to be
|
||||
non-empty, this package automatically doubles the number of buckets. */
|
||||
/* If an insertion makes the ratio of nonempty buckets to table size larger
|
||||
than the growth threshold (a number between 0.0 and 1.0), then increase
|
||||
the table size by multiplying by the growth factor (a number greater than
|
||||
1.0). The growth threshold defaults to 0.8, and the growth factor
|
||||
defaults to 1.414, meaning that the table will have doubled its size
|
||||
every second time 80% of the buckets get used. */
|
||||
#define DEFAULT_GROWTH_THRESHOLD 0.8
|
||||
#define DEFAULT_GROWTH_FACTOR 1.414
|
||||
|
||||
/* If a deletion empties a bucket and causes the ratio of used buckets to
|
||||
table size to become smaller than the shrink threshold (a number between
|
||||
0.0 and 1.0), then shrink the table by multiplying by the shrink factor (a
|
||||
number greater than the shrink threshold but smaller than 1.0). The shrink
|
||||
threshold and factor default to 0.0 and 1.0, meaning that the table never
|
||||
shrinks. */
|
||||
#define DEFAULT_SHRINK_THRESHOLD 0.0
|
||||
#define DEFAULT_SHRINK_FACTOR 1.0
|
||||
|
||||
/* Use this to initialize or reset a TUNING structure to
|
||||
some sensible values. */
|
||||
static const Hash_tuning default_tuning =
|
||||
{
|
||||
DEFAULT_SHRINK_THRESHOLD,
|
||||
DEFAULT_SHRINK_FACTOR,
|
||||
DEFAULT_GROWTH_THRESHOLD,
|
||||
DEFAULT_GROWTH_FACTOR,
|
||||
false
|
||||
};
|
||||
|
||||
/* Information and lookup. */
|
||||
|
||||
/* The following few functions provide information about the overall hash
|
||||
table organisation: the number of entries, number of buckets and maximum
|
||||
table organization: the number of entries, number of buckets and maximum
|
||||
length of buckets. */
|
||||
|
||||
/* Return the number of buckets in the hash table. The table size, the total
|
||||
number of buckets (used plus unused), or the maximum number of slots, are
|
||||
the same quantity. */
|
||||
|
||||
unsigned int
|
||||
unsigned
|
||||
hash_get_n_buckets (const Hash_table *table)
|
||||
{
|
||||
return table->n_buckets;
|
||||
@@ -99,7 +125,7 @@ hash_get_n_buckets (const Hash_table *table)
|
||||
|
||||
/* Return the number of slots in use (non-empty buckets). */
|
||||
|
||||
unsigned int
|
||||
unsigned
|
||||
hash_get_n_buckets_used (const Hash_table *table)
|
||||
{
|
||||
return table->n_buckets_used;
|
||||
@@ -107,26 +133,26 @@ hash_get_n_buckets_used (const Hash_table *table)
|
||||
|
||||
/* Return the number of active entries. */
|
||||
|
||||
unsigned int
|
||||
unsigned
|
||||
hash_get_n_entries (const Hash_table *table)
|
||||
{
|
||||
return table->n_entries;
|
||||
}
|
||||
|
||||
/* Return the length of the most lenghty chain (bucket). */
|
||||
/* Return the length of the longest chain (bucket). */
|
||||
|
||||
unsigned int
|
||||
unsigned
|
||||
hash_get_max_bucket_length (const Hash_table *table)
|
||||
{
|
||||
struct hash_entry *bucket;
|
||||
unsigned int max_bucket_length = 0;
|
||||
unsigned max_bucket_length = 0;
|
||||
|
||||
for (bucket = table->bucket; bucket < table->bucket_limit; bucket++)
|
||||
{
|
||||
if (bucket->data)
|
||||
{
|
||||
struct hash_entry *cursor = bucket;
|
||||
unsigned int bucket_length = 1;
|
||||
unsigned bucket_length = 1;
|
||||
|
||||
while (cursor = cursor->next, cursor)
|
||||
bucket_length++;
|
||||
@@ -139,15 +165,15 @@ hash_get_max_bucket_length (const Hash_table *table)
|
||||
return max_bucket_length;
|
||||
}
|
||||
|
||||
/* Do a mild validation of an hash table, by traversing it and checking two
|
||||
/* Do a mild validation of a hash table, by traversing it and checking two
|
||||
statistics. */
|
||||
|
||||
bool
|
||||
hash_table_ok (const Hash_table *table)
|
||||
{
|
||||
struct hash_entry *bucket;
|
||||
unsigned int n_buckets_used = 0;
|
||||
unsigned int n_entries = 0;
|
||||
unsigned n_buckets_used = 0;
|
||||
unsigned n_entries = 0;
|
||||
|
||||
for (bucket = table->bucket; bucket < table->bucket_limit; bucket++)
|
||||
{
|
||||
@@ -174,10 +200,10 @@ hash_table_ok (const Hash_table *table)
|
||||
void
|
||||
hash_print_statistics (const Hash_table *table, FILE *stream)
|
||||
{
|
||||
unsigned int n_entries = hash_get_n_entries (table);
|
||||
unsigned int n_buckets = hash_get_n_buckets (table);
|
||||
unsigned int n_buckets_used = hash_get_n_buckets_used (table);
|
||||
unsigned int max_bucket_length = hash_get_max_bucket_length (table);
|
||||
unsigned n_entries = hash_get_n_entries (table);
|
||||
unsigned n_buckets = hash_get_n_buckets (table);
|
||||
unsigned n_buckets_used = hash_get_n_buckets_used (table);
|
||||
unsigned max_bucket_length = hash_get_max_bucket_length (table);
|
||||
|
||||
fprintf (stream, "# entries: %u\n", n_entries);
|
||||
fprintf (stream, "# buckets: %u\n", n_buckets);
|
||||
@@ -186,8 +212,8 @@ hash_print_statistics (const Hash_table *table, FILE *stream)
|
||||
fprintf (stream, "max bucket length: %u\n", max_bucket_length);
|
||||
}
|
||||
|
||||
/* Return the user entry from the hash table, if some entry in the hash table
|
||||
compares equally with ENTRY, or NULL otherwise. */
|
||||
/* If ENTRY matches an entry already in the hash table, return the
|
||||
entry from the table. Otherwise, return NULL. */
|
||||
|
||||
void *
|
||||
hash_lookup (const Hash_table *table, const void *entry)
|
||||
@@ -229,7 +255,7 @@ hash_get_first (const Hash_table *table)
|
||||
if (bucket->data)
|
||||
return bucket->data;
|
||||
|
||||
abort ();
|
||||
assert (0);
|
||||
}
|
||||
|
||||
/* Return the user data for the entry following ENTRY, where ENTRY has been
|
||||
@@ -263,11 +289,11 @@ hash_get_next (const Hash_table *table, const void *entry)
|
||||
return the number of pointers copied. Do not copy more than BUFFER_SIZE
|
||||
pointers. */
|
||||
|
||||
unsigned int
|
||||
unsigned
|
||||
hash_get_entries (const Hash_table *table, void **buffer,
|
||||
unsigned int buffer_size)
|
||||
unsigned buffer_size)
|
||||
{
|
||||
unsigned int counter = 0;
|
||||
unsigned counter = 0;
|
||||
struct hash_entry *bucket;
|
||||
struct hash_entry *cursor;
|
||||
|
||||
@@ -287,7 +313,7 @@ hash_get_entries (const Hash_table *table, void **buffer,
|
||||
return counter;
|
||||
}
|
||||
|
||||
/* Call a PROCESSOR function for each entry of an hash table, and return the
|
||||
/* Call a PROCESSOR function for each entry of a hash table, and return the
|
||||
number of entries for which the processor function returned success. A
|
||||
pointer to some PROCESSOR_DATA which will be made available to each call to
|
||||
the processor function. The PROCESSOR accepts two arguments: the first is
|
||||
@@ -295,11 +321,11 @@ hash_get_entries (const Hash_table *table, void **buffer,
|
||||
as received. The walking continue for as long as the PROCESSOR function
|
||||
returns nonzero. When it returns zero, the walking is interrupted. */
|
||||
|
||||
unsigned int
|
||||
unsigned
|
||||
hash_do_for_each (const Hash_table *table, Hash_processor processor,
|
||||
void *processor_data)
|
||||
{
|
||||
unsigned int counter = 0;
|
||||
unsigned counter = 0;
|
||||
struct hash_entry *bucket;
|
||||
struct hash_entry *cursor;
|
||||
|
||||
@@ -332,8 +358,8 @@ hash_do_for_each (const Hash_table *table, Hash_processor processor,
|
||||
algorithms tend to be domain-specific, so what's good for [diffutils'] io.c
|
||||
may not be good for your application." */
|
||||
|
||||
unsigned int
|
||||
hash_string (const char *string, unsigned int n_buckets)
|
||||
unsigned
|
||||
hash_string (const char *string, unsigned n_buckets)
|
||||
{
|
||||
# ifndef CHAR_BIT
|
||||
# define CHAR_BIT 8
|
||||
@@ -360,8 +386,8 @@ hash_string (const char *string, unsigned int n_buckets)
|
||||
very old Cyber `snoop', itself written in typical Greg Mansfield style.
|
||||
(By the way, what happened to this excellent man? Is he still alive?) */
|
||||
|
||||
unsigned int
|
||||
hash_string (const char *string, unsigned int n_buckets)
|
||||
unsigned
|
||||
hash_string (const char *string, unsigned n_buckets)
|
||||
{
|
||||
unsigned value = 0;
|
||||
|
||||
@@ -376,7 +402,7 @@ hash_string (const char *string, unsigned int n_buckets)
|
||||
/* Return true if CANDIDATE is a prime number. CANDIDATE should be an odd
|
||||
number at least equal to 11. */
|
||||
|
||||
static int
|
||||
static bool
|
||||
is_prime (unsigned long candidate)
|
||||
{
|
||||
unsigned long divisor = 3;
|
||||
@@ -393,12 +419,14 @@ is_prime (unsigned long candidate)
|
||||
}
|
||||
|
||||
/* Round a given CANDIDATE number up to the nearest prime, and return that
|
||||
prime. CANDIDATE should be at least equal to 10. */
|
||||
prime. Primes lower than 10 are merely skipped. */
|
||||
|
||||
static unsigned long
|
||||
next_prime (unsigned long candidate)
|
||||
{
|
||||
assert (candidate >= 10);
|
||||
/* Skip small primes. */
|
||||
if (candidate < 10)
|
||||
candidate = 10;
|
||||
|
||||
/* Make it definitely odd. */
|
||||
candidate |= 1;
|
||||
@@ -409,33 +437,73 @@ next_prime (unsigned long candidate)
|
||||
return candidate;
|
||||
}
|
||||
|
||||
/* Allocate and return a new hash table, or NULL if an error is met. The
|
||||
initial number of buckets would be at least CANDIDATE (which need not be
|
||||
prime).
|
||||
void
|
||||
hash_reset_tuning (Hash_tuning *tuning)
|
||||
{
|
||||
*tuning = default_tuning;
|
||||
}
|
||||
|
||||
If DATA_FREER is not NULL, this function may be later called with the data
|
||||
as an argument, just before they entry containing the data gets freed. The
|
||||
HASHER function should be supplied, and FIXME. The COMPARATOR function
|
||||
should also be supplied, and FIXME. */
|
||||
/* For the given hash TABLE, check the user supplied tuning structure for
|
||||
reasonable values, and return true if there is no gross error with it.
|
||||
Otherwise, definitvely reset the TUNING field to some acceptable default in
|
||||
the hash table (that is, the user loses the right of further modifying
|
||||
tuning arguments), and return false. */
|
||||
|
||||
/* User-supplied function for freeing datas. It is specified in
|
||||
hash_initialize. If non-null, it is used by hash_free and hash_clear.
|
||||
You should specify `free' here only if you want these functions to free
|
||||
all of your `data' data. This is typically the case when your data is
|
||||
simply an auxilliary struct that you have malloc'd to aggregate several
|
||||
values. */
|
||||
static bool
|
||||
check_tuning (Hash_table *table)
|
||||
{
|
||||
const Hash_tuning *tuning = table->tuning;
|
||||
|
||||
/* User-supplied hash function that hashes entry ENTRY to an integer in
|
||||
the range 0..TABLE_SIZE-1. */
|
||||
if (tuning->growth_threshold > 0.0
|
||||
&& tuning->growth_threshold < 1.0
|
||||
&& tuning->growth_factor > 1.0
|
||||
&& tuning->shrink_threshold >= 0.0
|
||||
&& tuning->shrink_threshold < 1.0
|
||||
&& tuning->shrink_factor > tuning->shrink_threshold
|
||||
&& tuning->shrink_factor <= 1.0
|
||||
&& tuning->shrink_threshold < tuning->growth_threshold)
|
||||
return true;
|
||||
|
||||
/* User-supplied function that determines whether a new entry is unique by
|
||||
comparing the new entry to entries that hashed to the same bucket
|
||||
index. It should return zero for a pair of entries that compare equal,
|
||||
non-zero otherwise. */
|
||||
table->tuning = &default_tuning;
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Allocate and return a new hash table, or NULL upon failure. The
|
||||
initial number of buckets is automatically selected so as to _guarantee_ that
|
||||
you may insert at least CANDIDATE different user entries before any growth
|
||||
of the hash table size occurs. So, if have a reasonably tight a-priori
|
||||
upper bound on the
|
||||
number of entries you intend to insert in the hash table, you may save some
|
||||
table memory and insertion time, by specifying it here. If the
|
||||
IS_N_BUCKETS field of the TUNING structure is true, the CANDIDATE argument
|
||||
has its meaning changed to the wanted number of buckets.
|
||||
|
||||
TUNING points to a structure of user-supplied values, in case some fine
|
||||
tuning is wanted over the default behavior of the hasher. If TUNING is
|
||||
NULL, the default tuning parameters are used instead.
|
||||
|
||||
The user-supplied HASHER function should be provided. It accepts two
|
||||
arguments ENTRY and TABLE_SIZE. It computes, by hashing ENTRY contents, a
|
||||
slot number for that entry which should be in the range 0..TABLE_SIZE-1.
|
||||
This slot number is then returned.
|
||||
|
||||
The user-supplied COMPARATOR function should be provided. It accepts two
|
||||
arguments pointing to user data, it then returns true for a pair of entries
|
||||
that compare equal, or false otherwise. This function is internally called
|
||||
on entries which are already known to hash to the same bucket index.
|
||||
|
||||
The user-supplied DATA_FREER function, when not NULL, may be later called
|
||||
with the user data as an argument, just before the entry containing the
|
||||
data gets freed. This happens from within `hash_free' or `hash_clear'.
|
||||
You should specify this function only if you want these functions to free
|
||||
all of your `data' data. This is typically the case when your data is
|
||||
simply an auxiliary struct that you have malloc'd to aggregate several
|
||||
values. */
|
||||
|
||||
Hash_table *
|
||||
hash_initialize (unsigned int candidate, Hash_hasher hasher,
|
||||
Hash_comparator comparator, Hash_data_freer data_freer)
|
||||
hash_initialize (unsigned candidate, const Hash_tuning *tuning,
|
||||
Hash_hasher hasher, Hash_comparator comparator,
|
||||
Hash_data_freer data_freer)
|
||||
{
|
||||
Hash_table *table;
|
||||
struct hash_entry *bucket;
|
||||
@@ -447,7 +515,24 @@ hash_initialize (unsigned int candidate, Hash_hasher hasher,
|
||||
if (table == NULL)
|
||||
return NULL;
|
||||
|
||||
table->n_buckets = next_prime (candidate < 10 ? 10 : candidate);
|
||||
if (!tuning)
|
||||
tuning = &default_tuning;
|
||||
table->tuning = tuning;
|
||||
if (!check_tuning (table))
|
||||
{
|
||||
/* Fail if the tuning options are invalid. This is the only occasion
|
||||
when the user gets some feedback about it. Once the table is created,
|
||||
if the user provides invalid tuning options, we silently revert to
|
||||
using the defaults, and ignore further request to change the tuning
|
||||
options. */
|
||||
free (table);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
table->n_buckets
|
||||
= next_prime (tuning->is_n_buckets ? candidate
|
||||
: (unsigned) (candidate / tuning->growth_threshold));
|
||||
|
||||
table->bucket = (struct hash_entry *)
|
||||
malloc (table->n_buckets * sizeof (struct hash_entry));
|
||||
if (table->bucket == NULL)
|
||||
@@ -515,7 +600,7 @@ hash_clear (Hash_table *table)
|
||||
table->n_entries = 0;
|
||||
}
|
||||
|
||||
/* Reclaim all storage associated with an hash table. If a data_freer
|
||||
/* Reclaim all storage associated with a hash table. If a data_freer
|
||||
function has been supplied by the user when the hash table was created,
|
||||
this function applies it to the data of each entry before freeing that
|
||||
entry. */
|
||||
@@ -682,21 +767,23 @@ hash_find_entry (Hash_table *table, const void *entry,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* For an already existing hash table, change the number of buckets and make
|
||||
it NEW_TABLE_SIZE. The contents of the hash table are preserved. */
|
||||
/* For an already existing hash table, change the number of buckets through
|
||||
specifying CANDIDATE. The contents of the hash table are preserved. The
|
||||
new number of buckets is automatically selected so as to _guarantee_ that the
|
||||
table may receive at least CANDIDATE different user entries, including
|
||||
those already in the table, before any other growth of the hash table size
|
||||
occurs. If TUNING->IS_N_BUCKETS is true, then CANDIDATE specifies the
|
||||
exact number of buckets desired. */
|
||||
|
||||
bool
|
||||
hash_rehash (Hash_table *table, unsigned int new_n_buckets)
|
||||
hash_rehash (Hash_table *table, unsigned candidate)
|
||||
{
|
||||
Hash_table *new_table;
|
||||
struct hash_entry *bucket;
|
||||
struct hash_entry *cursor;
|
||||
struct hash_entry *next;
|
||||
|
||||
if (table->n_buckets <= 0 || new_n_buckets == 0)
|
||||
return false;
|
||||
|
||||
new_table = hash_initialize (new_n_buckets, table->hasher,
|
||||
new_table = hash_initialize (candidate, table->tuning, table->hasher,
|
||||
table->comparator, table->data_freer);
|
||||
if (new_table == NULL)
|
||||
return false;
|
||||
@@ -709,26 +796,23 @@ hash_rehash (Hash_table *table, unsigned int new_n_buckets)
|
||||
new_table->free_entry_list = table->free_entry_list;
|
||||
|
||||
for (bucket = table->bucket; bucket < table->bucket_limit; bucket++)
|
||||
{
|
||||
if (bucket->data)
|
||||
if (bucket->data)
|
||||
for (cursor = bucket; cursor; cursor = next)
|
||||
{
|
||||
for (cursor = bucket; cursor; cursor = next)
|
||||
void *data = cursor->data;
|
||||
struct hash_entry *new_bucket
|
||||
= (new_table->bucket
|
||||
+ new_table->hasher (data, new_table->n_buckets));
|
||||
|
||||
assert (new_bucket < new_table->bucket_limit);
|
||||
next = cursor->next;
|
||||
|
||||
if (new_bucket->data)
|
||||
{
|
||||
void *data = cursor->data;
|
||||
struct hash_entry *new_bucket
|
||||
= new_table->bucket + new_table->hasher (data, new_n_buckets);
|
||||
|
||||
assert (new_bucket < new_table->bucket_limit);
|
||||
|
||||
/* Free overflow entries as soon as possible, moving them from the
|
||||
old hash table into the new one, as they may be needed now. */
|
||||
next = cursor->next;
|
||||
if (cursor != bucket)
|
||||
free_entry (new_table, cursor);
|
||||
|
||||
/* Insert the entry into the new hash table. */
|
||||
if (new_bucket->data)
|
||||
if (cursor == bucket)
|
||||
{
|
||||
/* Allocate or recycle an entry, when moving from a bucket
|
||||
header into a bucket overflow. */
|
||||
struct hash_entry *new_entry = allocate_entry (new_table);
|
||||
|
||||
if (new_entry == NULL)
|
||||
@@ -740,12 +824,24 @@ hash_rehash (Hash_table *table, unsigned int new_n_buckets)
|
||||
}
|
||||
else
|
||||
{
|
||||
new_bucket->data = data;
|
||||
new_table->n_buckets_used++;
|
||||
/* Merely relink an existing entry, when moving from a
|
||||
bucket overflow into a bucket overflow. */
|
||||
cursor->next = new_bucket->next;
|
||||
new_bucket->next = cursor;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Free an existing entry, when moving from a bucket
|
||||
overflow into a bucket header. Also take care of the
|
||||
simple case of moving from a bucket header into a bucket
|
||||
header. */
|
||||
new_bucket->data = data;
|
||||
new_table->n_buckets_used++;
|
||||
if (cursor != bucket)
|
||||
free_entry (new_table, cursor);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
free (table->bucket);
|
||||
table->bucket = new_table->bucket;
|
||||
@@ -761,68 +857,74 @@ hash_rehash (Hash_table *table, unsigned int new_n_buckets)
|
||||
return true;
|
||||
}
|
||||
|
||||
/* If ENTRY matches an entry already in the hash table, don't modify the table
|
||||
and return the matched entry. Otherwise, insert ENTRY and return NULL.
|
||||
*DONE is set to true in all cases, unless the storage required for
|
||||
insertion cannot be allocated. */
|
||||
/* If ENTRY matches an entry already in the hash table, return the pointer
|
||||
to the entry from the table. Otherwise, insert ENTRY and return ENTRY.
|
||||
Return NULL if the storage required for insertion cannot be allocated. */
|
||||
|
||||
void *
|
||||
hash_insert (Hash_table *table, const void *entry, bool *done)
|
||||
hash_insert (Hash_table *table, const void *entry)
|
||||
{
|
||||
void *data;
|
||||
struct hash_entry *bucket;
|
||||
|
||||
assert (entry); /* cannot insert a NULL data */
|
||||
assert (entry); /* cannot insert a NULL entry */
|
||||
|
||||
if (data = hash_find_entry (table, entry, &bucket, false), data)
|
||||
{
|
||||
*done = true;
|
||||
return data;
|
||||
}
|
||||
/* If there's a matching entry already in the table, return that. */
|
||||
if ((data = hash_find_entry (table, entry, &bucket, false)) != NULL)
|
||||
return data;
|
||||
|
||||
/* ENTRY is not matched, it should be inserted. */
|
||||
|
||||
table->n_entries++;
|
||||
|
||||
if (bucket->data)
|
||||
{
|
||||
struct hash_entry *new_entry = allocate_entry (table);
|
||||
|
||||
if (new_entry == NULL)
|
||||
{
|
||||
*done = false;
|
||||
return NULL;
|
||||
}
|
||||
return NULL;
|
||||
|
||||
/* Add ENTRY in the overflow of the bucket. */
|
||||
|
||||
new_entry->data = (void *) entry;
|
||||
new_entry->next = bucket->next;
|
||||
bucket->next = new_entry;
|
||||
*done = true;
|
||||
return NULL;
|
||||
table->n_entries++;
|
||||
return (void *) entry;
|
||||
}
|
||||
|
||||
/* Add ENTRY right in the bucket head. */
|
||||
|
||||
bucket->data = (void *) entry;
|
||||
table->n_entries++;
|
||||
table->n_buckets_used++;
|
||||
|
||||
/* If more than 80% of the buckets are in use, rehash the table two
|
||||
times bigger. It's no real use checking the number of entries, as if
|
||||
the hashing function is ill-conditioned, rehashing is not likely to
|
||||
improve it. */
|
||||
/* If the growth threshold of the buckets in use has been reached, increase
|
||||
the table size and rehash. There's no point in checking the number of
|
||||
entries: if the hashing function is ill-conditioned, rehashing is not
|
||||
likely to improve it. */
|
||||
|
||||
if (5 * table->n_buckets_used > 4 * table->n_buckets)
|
||||
if (table->n_buckets_used
|
||||
> table->tuning->growth_threshold * table->n_buckets)
|
||||
{
|
||||
unsigned int new_n_buckets = next_prime (2 * table->n_buckets + 1);
|
||||
/* Check more fully, before starting real work. If tuning arguments
|
||||
became invalid, the second check will rely on proper defaults. */
|
||||
check_tuning (table);
|
||||
if (table->n_buckets_used
|
||||
> table->tuning->growth_threshold * table->n_buckets)
|
||||
{
|
||||
const Hash_tuning *tuning = table->tuning;
|
||||
unsigned candidate
|
||||
= (unsigned) (tuning->is_n_buckets
|
||||
? (table->n_buckets * tuning->growth_factor)
|
||||
: (table->n_buckets * tuning->growth_factor
|
||||
* tuning->growth_threshold));
|
||||
|
||||
*done = hash_rehash (table, new_n_buckets);
|
||||
return NULL;
|
||||
/* If the rehash fails, arrange to return NULL. */
|
||||
if (!hash_rehash (table, candidate))
|
||||
entry = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
*done = true;
|
||||
return NULL;
|
||||
return (void *) entry;
|
||||
}
|
||||
|
||||
/* If ENTRY is already in the table, remove it and return the just-deleted
|
||||
@@ -838,9 +940,34 @@ hash_delete (Hash_table *table, const void *entry)
|
||||
if (data = hash_find_entry (table, entry, &bucket, true), !data)
|
||||
return NULL;
|
||||
|
||||
if (!bucket->data)
|
||||
table->n_buckets_used--;
|
||||
table->n_entries--;
|
||||
if (!bucket->data)
|
||||
{
|
||||
table->n_buckets_used--;
|
||||
|
||||
/* If the shrink threshold of the buckets in use has been reached,
|
||||
rehash into a smaller table. */
|
||||
|
||||
if (table->n_buckets_used
|
||||
< table->tuning->shrink_threshold * table->n_buckets)
|
||||
{
|
||||
/* Check more fully, before starting real work. If tuning arguments
|
||||
became invalid, the second check will rely on proper defaults. */
|
||||
check_tuning (table);
|
||||
if (table->n_buckets_used
|
||||
< table->tuning->shrink_threshold * table->n_buckets)
|
||||
{
|
||||
const Hash_tuning *tuning = table->tuning;
|
||||
unsigned candidate
|
||||
= (unsigned) (tuning->is_n_buckets
|
||||
? table->n_buckets * tuning->shrink_factor
|
||||
: (table->n_buckets * tuning->shrink_factor
|
||||
* tuning->growth_threshold));
|
||||
|
||||
hash_rehash (table, candidate);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
53
lib/hash.h
53
lib/hash.h
@@ -1,5 +1,5 @@
|
||||
/* hash - hashing table processing.
|
||||
Copyright (C) 1998 Free Software Foundation, Inc.
|
||||
Copyright (C) 1998, 1999 Free Software Foundation, Inc.
|
||||
Written by Jim Meyering <meyering@ascend.com>, 1998.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
@@ -29,7 +29,7 @@
|
||||
# endif
|
||||
#endif
|
||||
|
||||
typedef unsigned int (*Hash_hasher) PARAMS ((const void *, unsigned int));
|
||||
typedef unsigned (*Hash_hasher) PARAMS ((const void *, unsigned));
|
||||
typedef bool (*Hash_comparator) PARAMS ((const void *, const void *));
|
||||
typedef void (*Hash_data_freer) PARAMS ((void *));
|
||||
typedef bool (*Hash_processor) PARAMS ((void *, void *));
|
||||
@@ -40,6 +40,20 @@ struct hash_entry
|
||||
struct hash_entry *next;
|
||||
};
|
||||
|
||||
struct hash_tuning
|
||||
{
|
||||
/* This structure is mainly used for `hash_initialize', see the block
|
||||
documentation of `hash_reset_tuning' for more complete comments. */
|
||||
|
||||
float shrink_threshold; /* ratio of used buckets to trigger a shrink */
|
||||
float shrink_factor; /* ratio of new smaller size to original size */
|
||||
float growth_threshold; /* ratio of used buckets to trigger a growth */
|
||||
float growth_factor; /* ratio of new bigger size to original size */
|
||||
bool is_n_buckets; /* if CANDIDATE really means table size */
|
||||
};
|
||||
|
||||
typedef struct hash_tuning Hash_tuning;
|
||||
|
||||
struct hash_table
|
||||
{
|
||||
/* The array of buckets starts at BUCKET and extends to BUCKET_LIMIT-1,
|
||||
@@ -47,9 +61,12 @@ struct hash_table
|
||||
are not empty, there are N_ENTRIES active entries in the table. */
|
||||
struct hash_entry *bucket;
|
||||
struct hash_entry *bucket_limit;
|
||||
unsigned int n_buckets;
|
||||
unsigned int n_buckets_used;
|
||||
unsigned int n_entries;
|
||||
unsigned n_buckets;
|
||||
unsigned n_buckets_used;
|
||||
unsigned n_entries;
|
||||
|
||||
/* Tuning arguments, kept in a physicaly separate structure. */
|
||||
const Hash_tuning *tuning;
|
||||
|
||||
/* Three functions are given to `hash_initialize', see the documentation
|
||||
block for this function. In a word, HASHER randomizes a user entry
|
||||
@@ -74,10 +91,10 @@ struct hash_table
|
||||
typedef struct hash_table Hash_table;
|
||||
|
||||
/* Information and lookup. */
|
||||
unsigned int hash_get_n_buckets PARAMS ((const Hash_table *));
|
||||
unsigned int hash_get_n_buckets_used PARAMS ((const Hash_table *));
|
||||
unsigned int hash_get_n_entries PARAMS ((const Hash_table *));
|
||||
unsigned int hash_get_max_bucket_length PARAMS ((const Hash_table *));
|
||||
unsigned hash_get_n_buckets PARAMS ((const Hash_table *));
|
||||
unsigned hash_get_n_buckets_used PARAMS ((const Hash_table *));
|
||||
unsigned hash_get_n_entries PARAMS ((const Hash_table *));
|
||||
unsigned hash_get_max_bucket_length PARAMS ((const Hash_table *));
|
||||
bool hash_table_ok PARAMS ((const Hash_table *));
|
||||
void hash_print_statistics PARAMS ((const Hash_table *, FILE *));
|
||||
void *hash_lookup PARAMS ((const Hash_table *, const void *));
|
||||
@@ -85,19 +102,19 @@ void *hash_lookup PARAMS ((const Hash_table *, const void *));
|
||||
/* Walking. */
|
||||
void *hash_get_first PARAMS ((const Hash_table *));
|
||||
void *hash_get_next PARAMS ((const Hash_table *, const void *));
|
||||
unsigned int hash_get_entries PARAMS ((const Hash_table *, void **,
|
||||
unsigned int));
|
||||
unsigned int hash_do_for_each PARAMS ((const Hash_table *, Hash_processor,
|
||||
void *));
|
||||
unsigned hash_get_entries PARAMS ((const Hash_table *, void **, unsigned));
|
||||
unsigned hash_do_for_each PARAMS ((const Hash_table *, Hash_processor, void *));
|
||||
|
||||
/* Allocation and clean-up. */
|
||||
unsigned int hash_string PARAMS ((const char *, unsigned int));
|
||||
Hash_table *hash_initialize PARAMS ((unsigned int, Hash_hasher,
|
||||
Hash_comparator, Hash_data_freer));
|
||||
unsigned hash_string PARAMS ((const char *, unsigned));
|
||||
void hash_reset_tuning PARAMS ((Hash_tuning *));
|
||||
Hash_table *hash_initialize PARAMS ((unsigned, const Hash_tuning *,
|
||||
Hash_hasher, Hash_comparator,
|
||||
Hash_data_freer));
|
||||
void hash_clear PARAMS ((Hash_table *));
|
||||
void hash_free PARAMS ((Hash_table *));
|
||||
|
||||
/* Insertion and deletion. */
|
||||
bool hash_rehash PARAMS ((Hash_table *, unsigned int));
|
||||
void *hash_insert PARAMS ((Hash_table *, const void *, bool *));
|
||||
bool hash_rehash PARAMS ((Hash_table *, unsigned));
|
||||
void *hash_insert PARAMS ((Hash_table *, const void *));
|
||||
void *hash_delete PARAMS ((Hash_table *, const void *));
|
||||
|
||||
@@ -23,10 +23,6 @@
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#if HAVE_INTTYPES_H
|
||||
# include <inttypes.h>
|
||||
#endif
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <stdio.h>
|
||||
|
||||
@@ -54,7 +50,7 @@ char *getenv ();
|
||||
|
||||
#include <argmatch.h>
|
||||
#include <error.h>
|
||||
#include <xstrtoul.h>
|
||||
#include <xstrtol.h>
|
||||
|
||||
#include "human.h"
|
||||
|
||||
|
||||
@@ -1,6 +1,14 @@
|
||||
#ifndef HUMAN_H_
|
||||
# define HUMAN_H_ 1
|
||||
|
||||
# if HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
# endif
|
||||
|
||||
# if HAVE_INTTYPES_H
|
||||
# include <inttypes.h>
|
||||
# endif
|
||||
|
||||
/* A conservative bound on the maximum length of a human-readable string.
|
||||
The output can be the product of the largest uintmax_t and the largest int,
|
||||
so add their sizes before converting to a bound on digits. */
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Provide a stub lchown function for systems that lack it.
|
||||
Copyright (C) 1998 Free Software Foundation, Inc.
|
||||
Copyright (C) 1998, 1999 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -27,6 +27,10 @@ extern int errno;
|
||||
#endif
|
||||
#include "lchown.h"
|
||||
|
||||
/* Declare chown to avoid a warning. Don't include unistd.h,
|
||||
because it may have a conflicting prototype for lchown. */
|
||||
int chown ();
|
||||
|
||||
/* Work just like chown, except when FILE is a symbolic link.
|
||||
In that case, set errno to ENOSYS and return -1. */
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Utility to accept --help and --version options as unobtrusively as possible.
|
||||
Copyright (C) 1993, 1994, 1998 Free Software Foundation, Inc.
|
||||
Copyright (C) 1993, 1994, 1998, 1999 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -25,6 +25,14 @@
|
||||
#include <getopt.h>
|
||||
#include "closeout.h"
|
||||
#include "long-options.h"
|
||||
#include "version-etc.h"
|
||||
|
||||
#if ENABLE_NLS
|
||||
# include <libintl.h>
|
||||
# define _(Text) gettext (Text)
|
||||
#else
|
||||
# define _(Text) Text
|
||||
#endif
|
||||
|
||||
static struct option const long_options[] =
|
||||
{
|
||||
@@ -37,13 +45,13 @@ static struct option const long_options[] =
|
||||
Be careful not to gobble up `--'. */
|
||||
|
||||
void
|
||||
parse_long_options (argc, argv, command_name, package, version, usage)
|
||||
int argc;
|
||||
char **argv;
|
||||
const char *command_name;
|
||||
const char *package;
|
||||
const char *version;
|
||||
void (*usage)();
|
||||
parse_long_options (int argc,
|
||||
char **argv,
|
||||
const char *command_name,
|
||||
const char *package,
|
||||
const char *version,
|
||||
const char *authors,
|
||||
void (*usage_func)())
|
||||
{
|
||||
int c;
|
||||
int saved_opterr;
|
||||
@@ -59,10 +67,10 @@ parse_long_options (argc, argv, command_name, package, version, usage)
|
||||
switch (c)
|
||||
{
|
||||
case 'h':
|
||||
(*usage) (0);
|
||||
(*usage_func) (0);
|
||||
|
||||
case 'v':
|
||||
printf ("%s (%s) %s\n", command_name, package, version);
|
||||
version_etc (stdout, command_name, package, version, authors);
|
||||
close_stdout (); /* FIXME: output failure exit status
|
||||
should be settable via an arg. */
|
||||
exit (0);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* long-options.h -- declaration for --help- and --version-handling function.
|
||||
Copyright (C) 1993, 1994, 1997 Free Software Foundation, Inc.
|
||||
Copyright (C) 1993, 1994, 1998, 1999 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -26,7 +26,10 @@
|
||||
#endif
|
||||
|
||||
void
|
||||
parse_long_options PARAMS ((int _argc, char **_argv,
|
||||
parse_long_options PARAMS ((int _argc,
|
||||
char **_argv,
|
||||
const char *_command_name,
|
||||
const char *_package,
|
||||
const char *_version, void (*_usage) (int)));
|
||||
const char *_version,
|
||||
const char *_authors,
|
||||
void (*_usage) (int)));
|
||||
|
||||
@@ -71,16 +71,34 @@ extern int errno;
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifndef S_ISUID
|
||||
# define S_ISUID 04000
|
||||
#endif
|
||||
#ifndef S_ISGID
|
||||
# define S_ISGID 02000
|
||||
#endif
|
||||
#ifndef S_ISVTX
|
||||
# define S_ISVTX 01000
|
||||
#endif
|
||||
#ifndef S_IRUSR
|
||||
# define S_IRUSR 0200
|
||||
#endif
|
||||
#ifndef S_IWUSR
|
||||
# define S_IWUSR 0200
|
||||
#endif
|
||||
|
||||
#ifndef S_IXUSR
|
||||
# define S_IXUSR 0100
|
||||
#endif
|
||||
|
||||
#ifndef S_IRWXU
|
||||
# define S_IRWXU (S_IRUSR | S_IWUSR | S_IXUSR)
|
||||
#endif
|
||||
|
||||
#define WX_USR (S_IWUSR | S_IXUSR)
|
||||
|
||||
/* Include this before libintl.h so we get our definition of PARAMS. */
|
||||
#include "makepath.h"
|
||||
|
||||
#if HAVE_LOCALE_H
|
||||
# include <locale.h>
|
||||
#endif
|
||||
@@ -98,7 +116,6 @@ typedef int gid_t;
|
||||
#endif
|
||||
|
||||
#include "save-cwd.h"
|
||||
#include "makepath.h"
|
||||
#include "error.h"
|
||||
|
||||
void strip_trailing_slashes ();
|
||||
@@ -145,6 +162,7 @@ make_dir (const char *dir, const char *dirpath, mode_t mode, int *created_dir_p)
|
||||
if (!created_dir)
|
||||
{
|
||||
struct stat stats;
|
||||
int saved_errno = errno;
|
||||
|
||||
/* The mkdir and stat calls below may appear to be reversed.
|
||||
They are not. It is important to call mkdir first and then to
|
||||
@@ -156,7 +174,7 @@ make_dir (const char *dir, const char *dirpath, mode_t mode, int *created_dir_p)
|
||||
|
||||
if (stat (dir, &stats))
|
||||
{
|
||||
error (0, errno, _("cannot create directory `%s'"), dirpath);
|
||||
error (0, saved_errno, _("cannot create directory `%s'"), dirpath);
|
||||
fail = 1;
|
||||
}
|
||||
else if (!S_ISDIR (stats.st_mode))
|
||||
@@ -223,7 +241,7 @@ make_path (const char *argpath,
|
||||
char *dirpath;
|
||||
|
||||
/* Temporarily relax umask in case it's overly restrictive. */
|
||||
int oldmask = umask (0);
|
||||
mode_t oldmask = umask (0);
|
||||
|
||||
/* Make a copy of ARGPATH that we can scribble NULs on. */
|
||||
dirpath = (char *) alloca (strlen (argpath) + 1);
|
||||
@@ -235,9 +253,9 @@ make_path (const char *argpath,
|
||||
their owners, we need to fix their permissions after making them. */
|
||||
if (((parent_mode & WX_USR) != WX_USR)
|
||||
|| ((owner != (uid_t) -1 || group != (gid_t) -1)
|
||||
&& (parent_mode & 07000) != 0))
|
||||
&& (parent_mode & (S_ISUID | S_ISGID | S_ISVTX)) != 0))
|
||||
{
|
||||
tmp_mode = 0700;
|
||||
tmp_mode = S_IRWXU;
|
||||
re_protect = 1;
|
||||
}
|
||||
else
|
||||
@@ -363,7 +381,8 @@ make_path (const char *argpath,
|
||||
retval = 1;
|
||||
}
|
||||
/* chown may have turned off some permission bits we wanted. */
|
||||
if ((mode & 07000) != 0 && chmod (basename_dir, mode))
|
||||
if ((mode & (S_ISUID | S_ISGID | S_ISVTX))
|
||||
&& chmod (basename_dir, mode))
|
||||
{
|
||||
error (0, errno, _("cannot chmod %s"), dirpath);
|
||||
retval = 1;
|
||||
|
||||
23
lib/mkdir.c
23
lib/mkdir.c
@@ -34,6 +34,16 @@ extern int errno;
|
||||
# define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
|
||||
#endif
|
||||
|
||||
#ifndef S_IRWXU
|
||||
# define S_IRWXU 0700
|
||||
#endif
|
||||
#ifndef S_IRWXG
|
||||
# define S_IRWXG 0070
|
||||
#endif
|
||||
#ifndef S_IRWXO
|
||||
# define S_IRWXO 0007
|
||||
#endif
|
||||
|
||||
/* mkdir adapted from GNU tar. */
|
||||
|
||||
/* Make directory DPATH, with permission mode DMODE.
|
||||
@@ -48,9 +58,11 @@ extern int errno;
|
||||
subroutine didn't return EEXIST. It does now. */
|
||||
|
||||
int
|
||||
mkdir (const char *dpath, int dmode)
|
||||
mkdir (const char *dpath, mode_t dmode)
|
||||
{
|
||||
int cpid, status;
|
||||
pid_t cpid;
|
||||
mode_t mode;
|
||||
int status;
|
||||
struct stat statbuf;
|
||||
|
||||
if (stat (dpath, &statbuf) == 0)
|
||||
@@ -74,8 +86,9 @@ mkdir (const char *dpath, int dmode)
|
||||
process is going away anyway, we zap its umask.
|
||||
This won't suffice to set SUID, SGID, etc. on this
|
||||
directory, so the parent process calls chmod afterward. */
|
||||
status = umask (0); /* Get current umask. */
|
||||
umask (status | (0777 & ~dmode)); /* Set for mkdir. */
|
||||
mode = umask (0); /* Get current umask. */
|
||||
/* Set for mkdir. */
|
||||
umask (mode | ((S_IRWXU | S_IRWXG | S_IRWXO) & ~dmode));
|
||||
execl ("/bin/mkdir", "mkdir", dpath, (char *) 0);
|
||||
_exit (1);
|
||||
|
||||
@@ -84,7 +97,7 @@ mkdir (const char *dpath, int dmode)
|
||||
while (wait (&status) != cpid)
|
||||
/* Do nothing. */ ;
|
||||
|
||||
if (status & 0xFFFF)
|
||||
if (status)
|
||||
{
|
||||
/* /bin/mkdir failed. */
|
||||
errno = EIO;
|
||||
|
||||
118
lib/mktime.c
118
lib/mktime.c
@@ -1,24 +1,22 @@
|
||||
/* mktime: convert a `struct tm' to a time_t value
|
||||
Copyright (C) 1993-1997, 1998 Free Software Foundation, Inc.
|
||||
/* Convert a `struct tm' to a time_t value.
|
||||
Copyright (C) 1993, 94, 95, 96, 97, 98, 99 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Paul Eggert (eggert@twinsun.com).
|
||||
|
||||
NOTE: The canonical source of this file is maintained with the GNU C Library.
|
||||
Bugs can be reported to bug-glibc@prep.ai.mit.edu.
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the
|
||||
Free Software Foundation; either version 2, or (at your option) any
|
||||
later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||
USA. */
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
/* Define this to have a standalone program to test this implementation of
|
||||
mktime. */
|
||||
@@ -57,7 +55,7 @@
|
||||
#endif /* DEBUG */
|
||||
|
||||
#ifndef __P
|
||||
# if defined (__GNUC__) || (defined (__STDC__) && __STDC__)
|
||||
# if defined __GNUC__ || (defined __STDC__ && __STDC__)
|
||||
# define __P(args) args
|
||||
# else
|
||||
# define __P(args) ()
|
||||
@@ -109,14 +107,6 @@ const unsigned short int __mon_yday[2][13] =
|
||||
{ 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366 }
|
||||
};
|
||||
|
||||
static struct tm *ranged_convert __P ((struct tm *(*) __P ((const time_t *,
|
||||
struct tm *)),
|
||||
time_t *, struct tm *));
|
||||
static time_t ydhms_tm_diff __P ((int, int, int, int, int, const struct tm *));
|
||||
time_t __mktime_internal __P ((struct tm *,
|
||||
struct tm *(*) (const time_t *, struct tm *),
|
||||
time_t *));
|
||||
|
||||
|
||||
#ifdef _LIBC
|
||||
# define my_mktime_localtime_r __localtime_r
|
||||
@@ -124,7 +114,6 @@ time_t __mktime_internal __P ((struct tm *,
|
||||
/* If we're a mktime substitute in a GNU program, then prefer
|
||||
localtime to localtime_r, since many localtime_r implementations
|
||||
are buggy. */
|
||||
static struct tm *my_mktime_localtime_r __P ((const time_t *, struct tm *));
|
||||
static struct tm *
|
||||
my_mktime_localtime_r (const time_t *t, struct tm *tp)
|
||||
{
|
||||
@@ -172,23 +161,6 @@ ydhms_tm_diff (int year, int yday, int hour, int min, int sec,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static time_t localtime_offset;
|
||||
|
||||
/* Convert *TP to a time_t value. */
|
||||
time_t
|
||||
mktime (struct tm *tp)
|
||||
{
|
||||
#ifdef _LIBC
|
||||
/* POSIX.1 8.1.1 requires that whenever mktime() is called, the
|
||||
time zone names contained in the external variable `tzname' shall
|
||||
be set as if the tzset() function had been called. */
|
||||
__tzset ();
|
||||
#endif
|
||||
|
||||
return __mktime_internal (tp, my_mktime_localtime_r, &localtime_offset);
|
||||
}
|
||||
|
||||
/* Use CONVERT to convert *T to a broken down time in *TP.
|
||||
If *T is out of range for conversion, adjust it so that
|
||||
it is the nearest in-range value and then convert that. */
|
||||
@@ -318,28 +290,32 @@ __mktime_internal (struct tm *tp,
|
||||
|
||||
/* If we have a match, check whether tm.tm_isdst has the requested
|
||||
value, if any. */
|
||||
if (dt == 0 && 0 <= isdst && 0 <= tm.tm_isdst)
|
||||
if (dt == 0 && isdst != tm.tm_isdst && 0 <= isdst && 0 <= tm.tm_isdst)
|
||||
{
|
||||
int dst_diff = (isdst != 0) - (tm.tm_isdst != 0);
|
||||
if (dst_diff)
|
||||
/* tm.tm_isdst has the wrong value. Look for a neighboring
|
||||
time with the right value, and use its UTC offset.
|
||||
Heuristic: probe the previous three calendar quarters (approximately),
|
||||
looking for the desired isdst. This isn't perfect,
|
||||
but it's good enough in practice. */
|
||||
int quarter = 7889238; /* seconds per average 1/4 Gregorian year */
|
||||
int i;
|
||||
|
||||
/* If we're too close to the time_t limit, look in future quarters. */
|
||||
if (t < TIME_T_MIN + 3 * quarter)
|
||||
quarter = -quarter;
|
||||
|
||||
for (i = 1; i <= 3; i++)
|
||||
{
|
||||
/* Move two hours in the direction indicated by the disagreement,
|
||||
probe some more, and switch to a new time if found.
|
||||
The largest known fallback due to daylight savings is two hours:
|
||||
once, in Newfoundland, 1988-10-30 02:00 -> 00:00. */
|
||||
time_t ot = t - 2 * 60 * 60 * dst_diff;
|
||||
while (--remaining_probes != 0)
|
||||
time_t ot = t - i * quarter;
|
||||
struct tm otm;
|
||||
ranged_convert (convert, &ot, &otm);
|
||||
if (otm.tm_isdst == isdst)
|
||||
{
|
||||
struct tm otm;
|
||||
if (! (dt = ydhms_tm_diff (year, yday, hour, min, sec,
|
||||
ranged_convert (convert, &ot, &otm))))
|
||||
{
|
||||
t = ot;
|
||||
tm = otm;
|
||||
break;
|
||||
}
|
||||
if ((ot += dt) == t)
|
||||
break; /* Avoid a redundant probe. */
|
||||
/* We found the desired tm_isdst.
|
||||
Extrapolate back to the desired time. */
|
||||
t = ot + ydhms_tm_diff (year, yday, hour, min, sec, &otm);
|
||||
ranged_convert (convert, &t, &tm);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -385,6 +361,24 @@ __mktime_internal (struct tm *tp,
|
||||
return t;
|
||||
}
|
||||
|
||||
|
||||
static time_t localtime_offset;
|
||||
|
||||
/* Convert *TP to a time_t value. */
|
||||
time_t
|
||||
mktime (tp)
|
||||
struct tm *tp;
|
||||
{
|
||||
#ifdef _LIBC
|
||||
/* POSIX.1 8.1.1 requires that whenever mktime() is called, the
|
||||
time zone names contained in the external variable `tzname' shall
|
||||
be set as if the tzset() function had been called. */
|
||||
__tzset ();
|
||||
#endif
|
||||
|
||||
return __mktime_internal (tp, my_mktime_localtime_r, &localtime_offset);
|
||||
}
|
||||
|
||||
#ifdef weak_alias
|
||||
weak_alias (mktime, timelocal)
|
||||
#endif
|
||||
|
||||
250
lib/modechange.c
250
lib/modechange.c
@@ -1,5 +1,5 @@
|
||||
/* modechange.c -- file mode manipulation
|
||||
Copyright (C) 1989, 1990, 1997, 1998 Free Software Foundation, Inc.
|
||||
Copyright (C) 1989, 1990, 1997, 1998, 1999 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -28,9 +28,9 @@
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include "modechange.h"
|
||||
#include <sys/stat.h>
|
||||
#include "xstrtol.h"
|
||||
|
||||
#if STDC_HEADERS
|
||||
# include <stdlib.h>
|
||||
@@ -50,26 +50,93 @@ char *malloc ();
|
||||
# define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
|
||||
#endif
|
||||
|
||||
#ifndef S_ISUID
|
||||
# define S_ISUID 04000
|
||||
#endif
|
||||
#ifndef S_ISGID
|
||||
# define S_ISGID 04000
|
||||
#endif
|
||||
#ifndef S_ISVTX
|
||||
# define S_ISVTX 01000
|
||||
#endif
|
||||
#ifndef S_IRUSR
|
||||
# define S_IRUSR 0400
|
||||
#endif
|
||||
#ifndef S_IWUSR
|
||||
# define S_IWUSR 0200
|
||||
#endif
|
||||
#ifndef S_IXUSR
|
||||
# define S_IXUSR 0100
|
||||
#endif
|
||||
#ifndef S_IRGRP
|
||||
# define S_IRGRP 0040
|
||||
#endif
|
||||
#ifndef S_IWGRP
|
||||
# define S_IWGRP 0020
|
||||
#endif
|
||||
#ifndef S_IXGRP
|
||||
# define S_IXGRP 0010
|
||||
#endif
|
||||
#ifndef S_IROTH
|
||||
# define S_IROTH 0004
|
||||
#endif
|
||||
#ifndef S_IWOTH
|
||||
# define S_IWOTH 0002
|
||||
#endif
|
||||
#ifndef S_IXOTH
|
||||
# define S_IXOTH 0001
|
||||
#endif
|
||||
#ifndef S_IRWXU
|
||||
# define S_IRWXU 0700
|
||||
#endif
|
||||
#ifndef S_IRWXG
|
||||
# define S_IRWXG 0070
|
||||
#endif
|
||||
#ifndef S_IRWXO
|
||||
# define S_IRWXO 0007
|
||||
#endif
|
||||
|
||||
/* All the mode bits that can be affected by chmod. */
|
||||
#define CHMOD_MODE_BITS \
|
||||
(S_ISUID | S_ISGID | S_ISVTX | S_IRWXU | S_IRWXG | S_IRWXO)
|
||||
|
||||
/* Return newly allocated memory to hold one element of type TYPE. */
|
||||
#define talloc(type) ((type *) malloc (sizeof (type)))
|
||||
|
||||
#define isodigit(c) ((c) >= '0' && (c) <= '7')
|
||||
/* Create a mode_change entry with the specified `=ddd'-style
|
||||
mode change operation, where NEW_MODE is `ddd'. Return the
|
||||
new entry, or NULL upon failure. */
|
||||
|
||||
/* Return a positive integer containing the value of the ASCII
|
||||
octal number S. If S is not an octal number, return -1. */
|
||||
|
||||
static int
|
||||
oatoi (const char *s)
|
||||
static struct mode_change *
|
||||
make_node_op_equals (mode_t new_mode)
|
||||
{
|
||||
register int i;
|
||||
struct mode_change *p;
|
||||
p = talloc (struct mode_change);
|
||||
if (p == NULL)
|
||||
return p;
|
||||
p->next = NULL;
|
||||
p->op = '=';
|
||||
p->flags = 0;
|
||||
p->value = new_mode;
|
||||
p->affected = CHMOD_MODE_BITS; /* Affect all permissions. */
|
||||
return p;
|
||||
}
|
||||
|
||||
if (*s == 0)
|
||||
return -1;
|
||||
for (i = 0; isodigit (*s); ++s)
|
||||
i = i * 8 + *s - '0';
|
||||
if (*s)
|
||||
return -1;
|
||||
return i;
|
||||
/* Append entry E to the end of the link list with the specified
|
||||
HEAD and TAIL. */
|
||||
|
||||
static void
|
||||
mode_append_entry (struct mode_change **head,
|
||||
struct mode_change **tail,
|
||||
struct mode_change *e)
|
||||
{
|
||||
if (*head == NULL)
|
||||
*head = *tail = e;
|
||||
else
|
||||
{
|
||||
(*tail)->next = e;
|
||||
*tail = e;
|
||||
}
|
||||
}
|
||||
|
||||
/* Return a linked list of file mode change operations created from
|
||||
@@ -89,41 +156,44 @@ struct mode_change *
|
||||
mode_compile (const char *mode_string, unsigned int masked_ops)
|
||||
{
|
||||
struct mode_change *head; /* First element of the linked list. */
|
||||
struct mode_change *change; /* An element of the linked list. */
|
||||
int i; /* General purpose temporary. */
|
||||
int umask_value; /* The umask value (surprise). */
|
||||
unsigned short affected_bits; /* Which bits in the mode are operated on. */
|
||||
unsigned short affected_masked; /* `affected_bits' modified by umask. */
|
||||
unsigned ops_to_mask; /* Operators to actually use umask on. */
|
||||
struct mode_change *tail; /* An element of the linked list. */
|
||||
unsigned long mode_value; /* The mode value, if octal. */
|
||||
char *string_end; /* Pointer to end of parsed value. */
|
||||
mode_t umask_value; /* The umask value (surprise). */
|
||||
|
||||
i = oatoi (mode_string);
|
||||
if (i >= 0)
|
||||
head = NULL;
|
||||
#ifdef lint
|
||||
tail = NULL;
|
||||
#endif
|
||||
|
||||
if (xstrtoul (mode_string, &string_end, 8, &mode_value, "") == LONGINT_OK)
|
||||
{
|
||||
if (i > 07777)
|
||||
struct mode_change *p;
|
||||
if (mode_value > CHMOD_MODE_BITS)
|
||||
return MODE_INVALID;
|
||||
head = talloc (struct mode_change);
|
||||
if (head == NULL)
|
||||
p = make_node_op_equals ((mode_t) mode_value);
|
||||
if (p == NULL)
|
||||
return MODE_MEMORY_EXHAUSTED;
|
||||
head->next = NULL;
|
||||
head->op = '=';
|
||||
head->flags = 0;
|
||||
head->value = i;
|
||||
head->affected = 07777; /* Affect all permissions. */
|
||||
mode_append_entry (&head, &tail, p);
|
||||
return head;
|
||||
}
|
||||
|
||||
umask_value = umask (0);
|
||||
umask (umask_value); /* Restore the old value. */
|
||||
|
||||
head = NULL;
|
||||
#ifdef lint
|
||||
change = NULL;
|
||||
#endif
|
||||
--mode_string;
|
||||
|
||||
/* One loop iteration for each "ugoa...=+-rwxXstugo...[=+-rwxXstugo...]". */
|
||||
do
|
||||
{
|
||||
/* Which bits in the mode are operated on. */
|
||||
mode_t affected_bits = 0;
|
||||
/* `affected_bits' modified by umask. */
|
||||
mode_t affected_masked;
|
||||
/* Operators to actually use umask on. */
|
||||
unsigned ops_to_mask = 0;
|
||||
|
||||
int who_specified_p;
|
||||
|
||||
affected_bits = 0;
|
||||
ops_to_mask = 0;
|
||||
/* Turn on all the bits in `affected_bits' for each group given. */
|
||||
@@ -131,16 +201,16 @@ mode_compile (const char *mode_string, unsigned int masked_ops)
|
||||
switch (*mode_string)
|
||||
{
|
||||
case 'u':
|
||||
affected_bits |= 04700;
|
||||
affected_bits |= S_ISUID | S_IRWXU;
|
||||
break;
|
||||
case 'g':
|
||||
affected_bits |= 02070;
|
||||
affected_bits |= S_ISGID | S_IRWXG;
|
||||
break;
|
||||
case 'o':
|
||||
affected_bits |= 01007;
|
||||
affected_bits |= S_ISVTX | S_IRWXO;
|
||||
break;
|
||||
case 'a':
|
||||
affected_bits |= 07777;
|
||||
affected_bits |= CHMOD_MODE_BITS;
|
||||
break;
|
||||
default:
|
||||
goto no_more_affected;
|
||||
@@ -149,37 +219,39 @@ mode_compile (const char *mode_string, unsigned int masked_ops)
|
||||
no_more_affected:
|
||||
/* If none specified, affect all bits, except perhaps those
|
||||
set in the umask. */
|
||||
if (affected_bits == 0)
|
||||
if (affected_bits)
|
||||
who_specified_p = 1;
|
||||
else
|
||||
{
|
||||
affected_bits = 07777;
|
||||
who_specified_p = 0;
|
||||
affected_bits = CHMOD_MODE_BITS;
|
||||
ops_to_mask = masked_ops;
|
||||
}
|
||||
|
||||
while (*mode_string == '=' || *mode_string == '+' || *mode_string == '-')
|
||||
{
|
||||
/* Add the element to the tail of the list, so the operations
|
||||
are performed in the correct order. */
|
||||
if (head == NULL)
|
||||
struct mode_change *change = talloc (struct mode_change);
|
||||
if (change == NULL)
|
||||
{
|
||||
head = talloc (struct mode_change);
|
||||
if (head == NULL)
|
||||
return MODE_MEMORY_EXHAUSTED;
|
||||
change = head;
|
||||
}
|
||||
else
|
||||
{
|
||||
change->next = talloc (struct mode_change);
|
||||
if (change->next == NULL)
|
||||
{
|
||||
mode_free (change);
|
||||
return MODE_MEMORY_EXHAUSTED;
|
||||
}
|
||||
change = change->next;
|
||||
mode_free (head);
|
||||
return MODE_MEMORY_EXHAUSTED;
|
||||
}
|
||||
|
||||
change->next = NULL;
|
||||
change->op = *mode_string; /* One of "=+-". */
|
||||
affected_masked = affected_bits;
|
||||
|
||||
/* Per the Single Unix Spec, if `who' is not specified and the
|
||||
`=' operator is used, then clear all the bits first. */
|
||||
if (!who_specified_p &&
|
||||
ops_to_mask & (*mode_string == '=' ? MODE_MASK_EQUALS : 0))
|
||||
{
|
||||
struct mode_change *p = make_node_op_equals (0);
|
||||
if (p == NULL)
|
||||
return MODE_MEMORY_EXHAUSTED;
|
||||
mode_append_entry (&head, &tail, p);
|
||||
}
|
||||
|
||||
if (ops_to_mask & (*mode_string == '=' ? MODE_MASK_EQUALS
|
||||
: *mode_string == '+' ? MODE_MASK_PLUS
|
||||
: MODE_MASK_MINUS))
|
||||
@@ -188,36 +260,43 @@ mode_compile (const char *mode_string, unsigned int masked_ops)
|
||||
change->value = 0;
|
||||
change->flags = 0;
|
||||
|
||||
/* Add the element to the tail of the list, so the operations
|
||||
are performed in the correct order. */
|
||||
mode_append_entry (&head, &tail, change);
|
||||
|
||||
/* Set `value' according to the bits set in `affected_masked'. */
|
||||
for (++mode_string;; ++mode_string)
|
||||
switch (*mode_string)
|
||||
{
|
||||
case 'r':
|
||||
change->value |= 00444 & affected_masked;
|
||||
change->value |= ((S_IRUSR | S_IRGRP | S_IROTH)
|
||||
& affected_masked);
|
||||
break;
|
||||
case 'w':
|
||||
change->value |= 00222 & affected_masked;
|
||||
change->value |= ((S_IWUSR | S_IWGRP | S_IWOTH)
|
||||
& affected_masked);
|
||||
break;
|
||||
case 'X':
|
||||
change->flags |= MODE_X_IF_ANY_X;
|
||||
/* Fall through. */
|
||||
case 'x':
|
||||
change->value |= 00111 & affected_masked;
|
||||
change->value |= ((S_IXUSR | S_IXGRP | S_IXOTH)
|
||||
& affected_masked);
|
||||
break;
|
||||
case 's':
|
||||
/* Set the setuid/gid bits if `u' or `g' is selected. */
|
||||
change->value |= 06000 & affected_masked;
|
||||
change->value |= (S_ISUID | S_ISGID) & affected_masked;
|
||||
break;
|
||||
case 't':
|
||||
/* Set the "save text image" bit if `o' is selected. */
|
||||
change->value |= 01000 & affected_masked;
|
||||
change->value |= S_ISVTX & affected_masked;
|
||||
break;
|
||||
case 'u':
|
||||
/* Set the affected bits to the value of the `u' bits
|
||||
on the same file. */
|
||||
if (change->value)
|
||||
goto invalid;
|
||||
change->value = 00700;
|
||||
change->value = S_IRWXU;
|
||||
change->flags |= MODE_COPY_EXISTING;
|
||||
break;
|
||||
case 'g':
|
||||
@@ -225,7 +304,7 @@ mode_compile (const char *mode_string, unsigned int masked_ops)
|
||||
on the same file. */
|
||||
if (change->value)
|
||||
goto invalid;
|
||||
change->value = 00070;
|
||||
change->value = S_IRWXG;
|
||||
change->flags |= MODE_COPY_EXISTING;
|
||||
break;
|
||||
case 'o':
|
||||
@@ -233,7 +312,7 @@ mode_compile (const char *mode_string, unsigned int masked_ops)
|
||||
on the same file. */
|
||||
if (change->value)
|
||||
goto invalid;
|
||||
change->value = 00007;
|
||||
change->value = S_IRWXO;
|
||||
change->flags |= MODE_COPY_EXISTING;
|
||||
break;
|
||||
default:
|
||||
@@ -268,7 +347,7 @@ mode_create_from_ref (const char *ref_file)
|
||||
|
||||
change->op = '=';
|
||||
change->flags = 0;
|
||||
change->affected = 07777;
|
||||
change->affected = CHMOD_MODE_BITS;
|
||||
change->value = ref_stats.st_mode;
|
||||
change->next = NULL;
|
||||
|
||||
@@ -280,13 +359,13 @@ mode_create_from_ref (const char *ref_file)
|
||||
change affects it even if no execute bits were set in OLDMODE.
|
||||
The returned value has the S_IFMT bits cleared. */
|
||||
|
||||
unsigned short
|
||||
mode_adjust (unsigned int oldmode, const struct mode_change *changes)
|
||||
mode_t
|
||||
mode_adjust (mode_t oldmode, const struct mode_change *changes)
|
||||
{
|
||||
unsigned short newmode; /* The adjusted mode and one operand. */
|
||||
unsigned short value; /* The other operand. */
|
||||
mode_t newmode; /* The adjusted mode and one operand. */
|
||||
mode_t value; /* The other operand. */
|
||||
|
||||
newmode = oldmode & 07777;
|
||||
newmode = oldmode & CHMOD_MODE_BITS;
|
||||
|
||||
for (; changes; changes = changes->next)
|
||||
{
|
||||
@@ -296,15 +375,21 @@ mode_adjust (unsigned int oldmode, const struct mode_change *changes)
|
||||
the mask `changes->value'. */
|
||||
value = newmode & changes->value;
|
||||
|
||||
if (changes->value & 00700)
|
||||
if (changes->value & S_IRWXU)
|
||||
/* Copy `u' permissions onto `g' and `o'. */
|
||||
value |= (value >> 3) | (value >> 6);
|
||||
else if (changes->value & 00070)
|
||||
value |= ((value & S_IRUSR ? S_IRGRP | S_IROTH : 0)
|
||||
| (value & S_IWUSR ? S_IWGRP | S_IROTH : 0)
|
||||
| (value & S_IXUSR ? S_IXGRP | S_IXOTH : 0));
|
||||
else if (changes->value & S_IRWXG)
|
||||
/* Copy `g' permissions onto `u' and `o'. */
|
||||
value |= (value << 3) | (value >> 3);
|
||||
value |= ((value & S_IRGRP ? S_IRUSR | S_IROTH : 0)
|
||||
| (value & S_IWGRP ? S_IWUSR | S_IROTH : 0)
|
||||
| (value & S_IXGRP ? S_IXUSR | S_IXOTH : 0));
|
||||
else
|
||||
/* Copy `o' permissions onto `u' and `g'. */
|
||||
value |= (value << 3) | (value << 6);
|
||||
value |= ((value & S_IROTH ? S_IRUSR | S_IRGRP : 0)
|
||||
| (value & S_IWOTH ? S_IWUSR | S_IRGRP : 0)
|
||||
| (value & S_IXOTH ? S_IXUSR | S_IXGRP : 0));
|
||||
|
||||
/* In order to change only `u', `g', or `o' permissions,
|
||||
or some combination thereof, clear unselected bits.
|
||||
@@ -320,8 +405,9 @@ mode_adjust (unsigned int oldmode, const struct mode_change *changes)
|
||||
directory and no execute bits are already set. */
|
||||
if ((changes->flags & MODE_X_IF_ANY_X)
|
||||
&& !S_ISDIR (oldmode)
|
||||
&& (newmode & 00111) == 0)
|
||||
value &= ~00111; /* Clear the execute bits. */
|
||||
&& (newmode & (S_IXUSR | S_IXGRP | S_IXOTH)) == 0)
|
||||
/* Clear the execute bits. */
|
||||
value &= ~ (S_IXUSR | S_IXGRP | S_IXOTH);
|
||||
}
|
||||
|
||||
switch (changes->op)
|
||||
|
||||
@@ -20,6 +20,12 @@
|
||||
#if ! defined MODECHANGE_H_
|
||||
# define MODECHANGE_H_
|
||||
|
||||
# if HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
# endif
|
||||
|
||||
# include <sys/types.h>
|
||||
|
||||
/* Affect the execute bits only if at least one execute bit is set already,
|
||||
or if the file is a directory. */
|
||||
# define MODE_X_IF_ANY_X 01
|
||||
@@ -33,8 +39,8 @@ struct mode_change
|
||||
{
|
||||
char op; /* One of "=+-". */
|
||||
char flags; /* Special operations. */
|
||||
unsigned short affected; /* Set for u/g/o/s/s/t, if to be affected. */
|
||||
unsigned short value; /* Bits to add/remove. */
|
||||
mode_t affected; /* Set for u/g/o/s/s/t, if to be affected. */
|
||||
mode_t value; /* Bits to add/remove. */
|
||||
struct mode_change *next; /* Link to next change in list. */
|
||||
};
|
||||
|
||||
@@ -59,7 +65,7 @@ struct mode_change
|
||||
|
||||
struct mode_change *mode_compile PARAMS ((const char *, unsigned));
|
||||
struct mode_change *mode_create_from_ref PARAMS ((const char *));
|
||||
unsigned short mode_adjust PARAMS ((unsigned, const struct mode_change *));
|
||||
mode_t mode_adjust PARAMS ((mode_t, const struct mode_change *));
|
||||
void mode_free PARAMS ((struct mode_change *));
|
||||
|
||||
#endif
|
||||
|
||||
@@ -299,9 +299,10 @@ quotearg_buffer (char *buffer, size_t buffersize,
|
||||
OPTIONS specifies the quoting options.
|
||||
The returned value points to static storage that can be
|
||||
reused by the next call to this function with the same value of N.
|
||||
N must be nonnegative. */
|
||||
N must be nonnegative. N is deliberately declared with type `int'
|
||||
to allow for future extensions (using negative values). */
|
||||
static char *
|
||||
quotearg_n_options (unsigned int n, char const *arg,
|
||||
quotearg_n_options (int n, char const *arg,
|
||||
struct quoting_options const *options)
|
||||
{
|
||||
static unsigned int nslots;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* readtokens.c -- Functions for reading tokens from an input stream.
|
||||
Copyright (C) 1990-1991 Jim Meyering.
|
||||
Copyright (C) 1990-1991, 1999 Jim Meyering.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -77,11 +77,10 @@ init_tokenbuffer (tokenbuffer)
|
||||
and on files that aren't newline-terminated. */
|
||||
|
||||
long
|
||||
readtoken (stream, delim, n_delim, tokenbuffer)
|
||||
FILE *stream;
|
||||
const char *delim;
|
||||
int n_delim;
|
||||
token_buffer *tokenbuffer;
|
||||
readtoken (FILE *stream,
|
||||
const char *delim,
|
||||
int n_delim,
|
||||
token_buffer *tokenbuffer)
|
||||
{
|
||||
char *p;
|
||||
int c, i, n;
|
||||
@@ -164,14 +163,12 @@ readtoken (stream, delim, n_delim, tokenbuffer)
|
||||
%%% realloc() of `tokens' just before returning? */
|
||||
|
||||
int
|
||||
readtokens (stream, projected_n_tokens, delim, n_delim,
|
||||
tokens_out, token_lengths)
|
||||
FILE *stream;
|
||||
int projected_n_tokens;
|
||||
const char *delim;
|
||||
int n_delim;
|
||||
char ***tokens_out;
|
||||
long **token_lengths;
|
||||
readtokens (FILE *stream,
|
||||
int projected_n_tokens,
|
||||
const char *delim,
|
||||
int n_delim,
|
||||
char ***tokens_out,
|
||||
long **token_lengths)
|
||||
{
|
||||
token_buffer tb, *token = &tb;
|
||||
int token_length;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* GNU's read utmp module.
|
||||
Copyright (C) 92, 93, 94, 95, 96, 1997, 1998 Free Software Foundation, Inc.
|
||||
Copyright (C) 1992-1999 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -19,6 +19,8 @@
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#include <sys/stat.h>
|
||||
#if defined(STDC_HEADERS) || defined(HAVE_STRING_H)
|
||||
# include <string.h>
|
||||
@@ -29,6 +31,7 @@
|
||||
#include "readutmp.h"
|
||||
|
||||
char *xmalloc ();
|
||||
char *realloc ();
|
||||
|
||||
/* Copy UT->ut_name into storage obtained from malloc. Then remove any
|
||||
trailing spaces from the copy, NUL terminate it, and return the copy. */
|
||||
@@ -49,70 +52,42 @@ extract_trimmed_name (const STRUCT_UTMP *ut)
|
||||
return trimmed_name;
|
||||
}
|
||||
|
||||
/* Read the utmp file FILENAME into *UTMP_BUF, set *N_ENTRIES to the
|
||||
number of entries read, and return zero. If there is any error,
|
||||
/* Read the utmp entries corresponding to file FILENAME into freshly-
|
||||
malloc'd storage, set *UTMP_BUF to that pointer, set *N_ENTRIES to
|
||||
the number of entries, and return zero. If there is any error,
|
||||
return non-zero and don't modify the parameters. */
|
||||
|
||||
#ifdef HAVE_UTMPNAME
|
||||
#if HAVE_UTMPNAME
|
||||
|
||||
int
|
||||
read_utmp (const char *filename, int *n_entries, STRUCT_UTMP **utmp_buf)
|
||||
{
|
||||
int count_utmp = 0;
|
||||
int n_read;
|
||||
STRUCT_UTMP *u;
|
||||
STRUCT_UTMP *uptr;
|
||||
STRUCT_UTMP *utmp_contents;
|
||||
STRUCT_UTMP *utmp = NULL;
|
||||
|
||||
if (utmpname (filename))
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
/* Ignore the return value for now.
|
||||
Solaris' utmpname returns 1 upon success -- which is contrary
|
||||
to what the GNU libc version does. In addition, older GNU libc
|
||||
versions are actually void. */
|
||||
UTMP_NAME_FUNCTION (filename);
|
||||
|
||||
/* FIXME: going through the list twice is wasteful. */
|
||||
|
||||
/* count the entries in utmp */
|
||||
setutent ();
|
||||
while ((u = getutent ()) != NULL)
|
||||
++count_utmp;
|
||||
|
||||
if (count_utmp == 0)
|
||||
return 0;
|
||||
|
||||
utmp_contents = (STRUCT_UTMP *) xmalloc (count_utmp * sizeof (STRUCT_UTMP));
|
||||
|
||||
/* read the entries in utmp */
|
||||
|
||||
/* FIXME: can this fail? */
|
||||
setutent ();
|
||||
SET_UTMP_ENT ();
|
||||
|
||||
n_read = 0;
|
||||
uptr = utmp_contents;
|
||||
while ((u = getutent ()) != NULL)
|
||||
while ((u = GET_UTMP_ENT ()) != NULL)
|
||||
{
|
||||
++n_read;
|
||||
if (n_read > count_utmp)
|
||||
{
|
||||
STRUCT_UTMP *old_utmp_contents = utmp_contents;
|
||||
++count_utmp;
|
||||
utmp_contents = (STRUCT_UTMP *) xrealloc (utmp_contents,
|
||||
(count_utmp
|
||||
* sizeof (STRUCT_UTMP)));
|
||||
uptr = utmp_contents + (uptr - old_utmp_contents);
|
||||
}
|
||||
*uptr = *u;
|
||||
++uptr;
|
||||
utmp = (STRUCT_UTMP *) realloc (utmp, n_read * sizeof (STRUCT_UTMP));
|
||||
if (utmp == NULL)
|
||||
return 1;
|
||||
utmp[n_read - 1] = *u;
|
||||
}
|
||||
|
||||
if (n_read != count_utmp)
|
||||
utmp_contents = (STRUCT_UTMP *) xrealloc (utmp_contents,
|
||||
n_read * sizeof (STRUCT_UTMP));
|
||||
|
||||
/* FIXME: can this fail? */
|
||||
endutent ();
|
||||
END_UTMP_ENT ();
|
||||
|
||||
*n_entries = n_read;
|
||||
*utmp_buf = utmp_contents;
|
||||
*utmp_buf = utmp;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Declarations for GNU's read utmp module.
|
||||
Copyright (C) 92, 93, 94, 95, 96, 1997, 1998 Free Software Foundation, Inc.
|
||||
Copyright (C) 1992-1999 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -28,17 +28,24 @@
|
||||
# endif
|
||||
# endif
|
||||
|
||||
# include <stdio.h>
|
||||
# include <sys/types.h>
|
||||
|
||||
# ifdef HAVE_UTMPX_H
|
||||
# include <utmpx.h>
|
||||
# define UTMP_STRUCT_NAME utmpx
|
||||
# define UT_TIME_MEMBER(UT_PTR) ((UT_PTR)->ut_tv.tv_sec)
|
||||
# define SET_UTMP_ENT setutxent
|
||||
# define GET_UTMP_ENT getutxent
|
||||
# define END_UTMP_ENT endutxent
|
||||
# define UTMP_NAME_FUNCTION utmpxname
|
||||
# else
|
||||
# include <utmp.h>
|
||||
# define UTMP_STRUCT_NAME utmp
|
||||
# define UT_TIME_MEMBER(UT_PTR) ((UT_PTR)->ut_time)
|
||||
# define SET_UTMP_ENT setutent
|
||||
# define GET_UTMP_ENT getutent
|
||||
# define END_UTMP_ENT endutent
|
||||
# define UTMP_NAME_FUNCTION utmpname
|
||||
# endif
|
||||
|
||||
typedef struct UTMP_STRUCT_NAME STRUCT_UTMP;
|
||||
|
||||
79
lib/regex.c
79
lib/regex.c
@@ -4,23 +4,20 @@
|
||||
internationalization features.)
|
||||
Copyright (C) 1993, 94, 95, 96, 97, 98 Free Software Foundation, Inc.
|
||||
|
||||
NOTE: The canonical source of this file is maintained with the GNU C Library.
|
||||
Bugs can be reported to bug-glibc@prep.ai.mit.edu.
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the
|
||||
Free Software Foundation; either version 2, or (at your option) any
|
||||
later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||
USA. */
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
/* AIX requires this to be the first thing in the file. */
|
||||
#if defined _AIX && !defined REGEX_MALLOC
|
||||
@@ -49,12 +46,11 @@
|
||||
# include <sys/types.h>
|
||||
#endif
|
||||
|
||||
#define WIDE_CHAR_SUPPORT \
|
||||
defined _LIBC || (HAVE_WCTYPE_H && HAVE_WCHAR_H && HAVE_BTOWC)
|
||||
#define WIDE_CHAR_SUPPORT (HAVE_WCTYPE_H && HAVE_WCHAR_H && HAVE_BTOWC)
|
||||
|
||||
/* For platform which support the ISO C amendement 1 functionality we
|
||||
support user defined character classes. */
|
||||
#if WIDE_CHAR_SUPPORT
|
||||
#if defined _LIBC || WIDE_CHAR_SUPPORT
|
||||
/* Solaris 2.5 has a bug: <wchar.h> must be included before <wctype.h>. */
|
||||
# include <wchar.h>
|
||||
# include <wctype.h>
|
||||
@@ -211,7 +207,7 @@ init_syntax_once ()
|
||||
#endif /* not emacs */
|
||||
|
||||
/* Get the interface, including the syntax bits. */
|
||||
#include "regex.h"
|
||||
#include <regex.h>
|
||||
|
||||
/* isalpha etc. are used for the character classes. */
|
||||
#include <ctype.h>
|
||||
@@ -1722,7 +1718,7 @@ typedef struct
|
||||
} \
|
||||
}
|
||||
|
||||
#if WIDE_CHAR_SUPPORT
|
||||
#if defined _LIBC || WIDE_CHAR_SUPPORT
|
||||
/* The GNU C library provides support for user-defined character classes
|
||||
and the functions from ISO C amendement 1. */
|
||||
# ifdef CHARCLASS_NAME_MAX
|
||||
@@ -2214,10 +2210,13 @@ regex_compile (pattern, size, syntax, bufp)
|
||||
for (;;)
|
||||
{
|
||||
PATFETCH (c);
|
||||
if ((c == ':' && *p == ']') || p == pend
|
||||
|| c1 == CHAR_CLASS_MAX_LENGTH)
|
||||
if ((c == ':' && *p == ']') || p == pend)
|
||||
break;
|
||||
str[c1++] = c;
|
||||
if (c1 < CHAR_CLASS_MAX_LENGTH)
|
||||
str[c1++] = c;
|
||||
else
|
||||
/* This is in any case an invalid class name. */
|
||||
str[0] = '\0';
|
||||
}
|
||||
str[c1] = '\0';
|
||||
|
||||
@@ -2226,7 +2225,7 @@ regex_compile (pattern, size, syntax, bufp)
|
||||
the leading `:' and `[' (but set bits for them). */
|
||||
if (c == ':' && *p == ']')
|
||||
{
|
||||
#if WIDE_CHAR_SUPPORT
|
||||
#if defined _LIBC || WIDE_CHAR_SUPPORT
|
||||
boolean is_lower = STREQ (str, "lower");
|
||||
boolean is_upper = STREQ (str, "upper");
|
||||
wctype_t wt;
|
||||
@@ -2247,10 +2246,10 @@ regex_compile (pattern, size, syntax, bufp)
|
||||
# ifdef _LIBC
|
||||
if (__iswctype (__btowc (ch), wt))
|
||||
SET_LIST_BIT (ch);
|
||||
#else
|
||||
# else
|
||||
if (iswctype (btowc (ch), wt))
|
||||
SET_LIST_BIT (ch);
|
||||
#endif
|
||||
# endif
|
||||
|
||||
if (translate && (is_upper || is_lower)
|
||||
&& (ISUPPER (ch) || ISLOWER (ch)))
|
||||
@@ -5574,7 +5573,8 @@ re_exec (s)
|
||||
REG_EXTENDED bit in CFLAGS is set; otherwise, to
|
||||
RE_SYNTAX_POSIX_BASIC;
|
||||
`newline_anchor' to REG_NEWLINE being set in CFLAGS;
|
||||
`fastmap' and `fastmap_accurate' to zero;
|
||||
`fastmap' to an allocated space for the fastmap;
|
||||
`fastmap_accurate' to zero;
|
||||
`re_nsub' to the number of subexpressions in PATTERN.
|
||||
|
||||
PATTERN is the address of the pattern string.
|
||||
@@ -5613,11 +5613,8 @@ regcomp (preg, pattern, cflags)
|
||||
preg->allocated = 0;
|
||||
preg->used = 0;
|
||||
|
||||
/* Don't bother to use a fastmap when searching. This simplifies the
|
||||
REG_NEWLINE case: if we used a fastmap, we'd have to put all the
|
||||
characters after newlines into the fastmap. This way, we just try
|
||||
every character. */
|
||||
preg->fastmap = 0;
|
||||
/* Try to allocate space for the fastmap. */
|
||||
preg->fastmap = (char *) malloc (1 << BYTEWIDTH);
|
||||
|
||||
if (cflags & REG_ICASE)
|
||||
{
|
||||
@@ -5657,6 +5654,19 @@ regcomp (preg, pattern, cflags)
|
||||
unmatched close-group: both are REG_EPAREN. */
|
||||
if (ret == REG_ERPAREN) ret = REG_EPAREN;
|
||||
|
||||
if (ret == REG_NOERROR && preg->fastmap)
|
||||
{
|
||||
/* Compute the fastmap now, since regexec cannot modify the pattern
|
||||
buffer. */
|
||||
if (re_compile_fastmap (preg) == -2)
|
||||
{
|
||||
/* Some error occured while computing the fastmap, just forget
|
||||
about it. */
|
||||
free (preg->fastmap);
|
||||
preg->fastmap = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
return (int) ret;
|
||||
}
|
||||
#ifdef _LIBC
|
||||
@@ -5705,10 +5715,10 @@ regexec (preg, string, nmatch, pmatch, eflags)
|
||||
if (want_reg_info)
|
||||
{
|
||||
regs.num_regs = nmatch;
|
||||
regs.start = TALLOC (nmatch, regoff_t);
|
||||
regs.end = TALLOC (nmatch, regoff_t);
|
||||
if (regs.start == NULL || regs.end == NULL)
|
||||
regs.start = TALLOC (nmatch * 2, regoff_t);
|
||||
if (regs.start == NULL)
|
||||
return (int) REG_NOMATCH;
|
||||
regs.end = regs.start + nmatch;
|
||||
}
|
||||
|
||||
/* Perform the searching operation. */
|
||||
@@ -5732,7 +5742,6 @@ regexec (preg, string, nmatch, pmatch, eflags)
|
||||
|
||||
/* If we needed the temporary register info, free the space now. */
|
||||
free (regs.start);
|
||||
free (regs.end);
|
||||
}
|
||||
|
||||
/* We want zero return to mean success, unlike `re_search'. */
|
||||
|
||||
65
lib/regex.h
65
lib/regex.h
@@ -1,25 +1,24 @@
|
||||
/* Definitions for data structures and routines for the regular
|
||||
expression library, version 0.12.
|
||||
Copyright (C) 1985,89,90,91,92,93,95,96,97 Free Software Foundation, Inc.
|
||||
Copyright (C) 1985,89,90,91,92,93,95,96,97,98 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of the GNU C Library. Its master source is NOT part of
|
||||
the C library, however. The master source lives in /gd/gnu/lib.
|
||||
|
||||
NOTE: The canonical source of this file is maintained with the GNU C Library.
|
||||
Bugs can be reported to bug-glibc@prep.ai.mit.edu.
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the
|
||||
Free Software Foundation; either version 2, or (at your option) any
|
||||
later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||
USA. */
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#ifndef _REGEX_H
|
||||
#define _REGEX_H 1
|
||||
@@ -283,8 +282,8 @@ extern reg_syntax_t re_syntax_options;
|
||||
`re_error_msg' table in regex.c. */
|
||||
typedef enum
|
||||
{
|
||||
#if (_XOPEN_SOURCE - 0) == 500
|
||||
REG_NOSYS = -1, /* This will never happen for this implementation. */
|
||||
#ifdef _XOPEN_SOURCE
|
||||
REG_ENOSYS = -1, /* This will never happen for this implementation. */
|
||||
#endif
|
||||
|
||||
REG_NOERROR = 0, /* Success. */
|
||||
@@ -442,15 +441,11 @@ typedef struct
|
||||
|
||||
/* Sets the current default syntax to SYNTAX, and return the old syntax.
|
||||
You can also simply assign to the `re_syntax_options' variable. */
|
||||
extern reg_syntax_t __re_set_syntax _RE_ARGS ((reg_syntax_t syntax));
|
||||
extern reg_syntax_t re_set_syntax _RE_ARGS ((reg_syntax_t syntax));
|
||||
|
||||
/* Compile the regular expression PATTERN, with length LENGTH
|
||||
and syntax given by the global `re_syntax_options', into the buffer
|
||||
BUFFER. Return NULL if successful, and an error string if not. */
|
||||
extern const char *__re_compile_pattern
|
||||
_RE_ARGS ((const char *pattern, size_t length,
|
||||
struct re_pattern_buffer *buffer));
|
||||
extern const char *re_compile_pattern
|
||||
_RE_ARGS ((const char *pattern, size_t length,
|
||||
struct re_pattern_buffer *buffer));
|
||||
@@ -459,7 +454,6 @@ extern const char *re_compile_pattern
|
||||
/* Compile a fastmap for the compiled pattern in BUFFER; used to
|
||||
accelerate searches. Return 0 if successful and -2 if was an
|
||||
internal error. */
|
||||
extern int __re_compile_fastmap _RE_ARGS ((struct re_pattern_buffer *buffer));
|
||||
extern int re_compile_fastmap _RE_ARGS ((struct re_pattern_buffer *buffer));
|
||||
|
||||
|
||||
@@ -468,9 +462,6 @@ extern int re_compile_fastmap _RE_ARGS ((struct re_pattern_buffer *buffer));
|
||||
characters. Return the starting position of the match, -1 for no
|
||||
match, or -2 for an internal error. Also return register
|
||||
information in REGS (if REGS and BUFFER->no_sub are nonzero). */
|
||||
extern int __re_search
|
||||
_RE_ARGS ((struct re_pattern_buffer *buffer, const char *string,
|
||||
int length, int start, int range, struct re_registers *regs));
|
||||
extern int re_search
|
||||
_RE_ARGS ((struct re_pattern_buffer *buffer, const char *string,
|
||||
int length, int start, int range, struct re_registers *regs));
|
||||
@@ -478,10 +469,6 @@ extern int re_search
|
||||
|
||||
/* Like `re_search', but search in the concatenation of STRING1 and
|
||||
STRING2. Also, stop searching at index START + STOP. */
|
||||
extern int __re_search_2
|
||||
_RE_ARGS ((struct re_pattern_buffer *buffer, const char *string1,
|
||||
int length1, const char *string2, int length2,
|
||||
int start, int range, struct re_registers *regs, int stop));
|
||||
extern int re_search_2
|
||||
_RE_ARGS ((struct re_pattern_buffer *buffer, const char *string1,
|
||||
int length1, const char *string2, int length2,
|
||||
@@ -490,19 +477,12 @@ extern int re_search_2
|
||||
|
||||
/* Like `re_search', but return how many characters in STRING the regexp
|
||||
in BUFFER matched, starting at position START. */
|
||||
extern int __re_match
|
||||
_RE_ARGS ((struct re_pattern_buffer *buffer, const char *string,
|
||||
int length, int start, struct re_registers *regs));
|
||||
extern int re_match
|
||||
_RE_ARGS ((struct re_pattern_buffer *buffer, const char *string,
|
||||
int length, int start, struct re_registers *regs));
|
||||
|
||||
|
||||
/* Relates to `re_match' as `re_search_2' relates to `re_search'. */
|
||||
extern int __re_match_2
|
||||
_RE_ARGS ((struct re_pattern_buffer *buffer, const char *string1,
|
||||
int length1, const char *string2, int length2,
|
||||
int start, struct re_registers *regs, int stop));
|
||||
extern int re_match_2
|
||||
_RE_ARGS ((struct re_pattern_buffer *buffer, const char *string1,
|
||||
int length1, const char *string2, int length2,
|
||||
@@ -521,14 +501,11 @@ extern int re_match_2
|
||||
Unless this function is called, the first search or match using
|
||||
PATTERN_BUFFER will allocate its own register data, without
|
||||
freeing the old data. */
|
||||
extern void __re_set_registers
|
||||
_RE_ARGS ((struct re_pattern_buffer *buffer, struct re_registers *regs,
|
||||
unsigned num_regs, regoff_t *starts, regoff_t *ends));
|
||||
extern void re_set_registers
|
||||
_RE_ARGS ((struct re_pattern_buffer *buffer, struct re_registers *regs,
|
||||
unsigned num_regs, regoff_t *starts, regoff_t *ends));
|
||||
|
||||
#ifdef _REGEX_RE_COMP
|
||||
#if defined _REGEX_RE_COMP || defined _LIBC
|
||||
# ifndef _CRAY
|
||||
/* 4.2 bsd compatibility. */
|
||||
extern char *re_comp _RE_ARGS ((const char *));
|
||||
@@ -537,24 +514,16 @@ extern int re_exec _RE_ARGS ((const char *));
|
||||
#endif
|
||||
|
||||
/* POSIX compatibility. */
|
||||
extern int __regcomp _RE_ARGS ((regex_t *__preg, const char *__pattern,
|
||||
int __cflags));
|
||||
extern int regcomp _RE_ARGS ((regex_t *__preg, const char *__pattern,
|
||||
int __cflags));
|
||||
|
||||
extern int __regexec _RE_ARGS ((const regex_t *__preg,
|
||||
const char *__string, size_t __nmatch,
|
||||
regmatch_t __pmatch[], int __eflags));
|
||||
extern int regexec _RE_ARGS ((const regex_t *__preg,
|
||||
const char *__string, size_t __nmatch,
|
||||
regmatch_t __pmatch[], int __eflags));
|
||||
|
||||
extern size_t __regerror _RE_ARGS ((int __errcode, const regex_t *__preg,
|
||||
char *__errbuf, size_t __errbuf_size));
|
||||
extern size_t regerror _RE_ARGS ((int __errcode, const regex_t *__preg,
|
||||
char *__errbuf, size_t __errbuf_size));
|
||||
|
||||
extern void __regfree _RE_ARGS ((regex_t *__preg));
|
||||
extern void regfree _RE_ARGS ((regex_t *__preg));
|
||||
|
||||
|
||||
|
||||
15
lib/rename.c
15
lib/rename.c
@@ -41,7 +41,6 @@ int
|
||||
rename (char *from, char *to)
|
||||
{
|
||||
struct stat from_stats, to_stats;
|
||||
int pid, status;
|
||||
|
||||
if (stat (from, &from_stats))
|
||||
return -1;
|
||||
@@ -74,23 +73,27 @@ rename (char *from, char *to)
|
||||
if (S_ISDIR (from_stats.st_mode))
|
||||
{
|
||||
/* Need a setuid root process to link and unlink directories. */
|
||||
pid = fork ();
|
||||
int status;
|
||||
pid_t pid = fork ();
|
||||
switch (pid)
|
||||
{
|
||||
case -1: /* Error. */
|
||||
error (1, errno, "cannot fork");
|
||||
return -1; /* errno already set */
|
||||
|
||||
case 0: /* Child. */
|
||||
execl (MVDIR, "mvdir", from, to, (char *) 0);
|
||||
error (255, errno, "cannot run `%s'", MVDIR);
|
||||
_exit (1);
|
||||
|
||||
default: /* Parent. */
|
||||
while (wait (&status) != pid)
|
||||
/* Do nothing. */ ;
|
||||
|
||||
errno = 0; /* mvdir printed the system error message. */
|
||||
if (status)
|
||||
return -1;
|
||||
{
|
||||
/* MVDIR failed. */
|
||||
errno = EIO;
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
|
||||
@@ -44,7 +44,8 @@ int
|
||||
rmdir (dpath)
|
||||
char *dpath;
|
||||
{
|
||||
int cpid, status;
|
||||
pid_t cpid;
|
||||
int status;
|
||||
struct stat statbuf;
|
||||
|
||||
if (stat (dpath, &statbuf) != 0)
|
||||
@@ -73,7 +74,7 @@ rmdir (dpath)
|
||||
while (wait (&status) != cpid)
|
||||
/* Do nothing. */ ;
|
||||
|
||||
if (status & 0xFFFF)
|
||||
if (status)
|
||||
{
|
||||
|
||||
/* /bin/rmdir failed. */
|
||||
|
||||
@@ -51,11 +51,14 @@ STRXCASECMP_FUNCTION (const char *s1, const char *s2 STRXCASECMP_DECLARE_N)
|
||||
|
||||
do
|
||||
{
|
||||
c1 = TOLOWER (*p1++);
|
||||
c2 = TOLOWER (*p2++);
|
||||
c1 = TOLOWER (*p1);
|
||||
c2 = TOLOWER (*p2);
|
||||
|
||||
if (LENGTH_LIMIT_EXPR (--n == 0) || c1 == '\0')
|
||||
break;
|
||||
|
||||
++p1;
|
||||
++p2;
|
||||
}
|
||||
while (c1 == c2);
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1991,92,93,94,95,96,97,98 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1991,92,93,94,95,96,97,98,99 Free Software Foundation, Inc.
|
||||
|
||||
NOTE: The canonical source of this file is maintained with the GNU C Library.
|
||||
Bugs can be reported to bug-glibc@prep.ai.mit.edu.
|
||||
@@ -10,8 +10,8 @@
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
@@ -1025,7 +1025,6 @@ my_strftime (char *s, size_t maxsize, const char *format, const struct tm *tp
|
||||
add (1, *p = '\t');
|
||||
break;
|
||||
|
||||
case 'f':
|
||||
case 'u': /* POSIX.2 extension. */
|
||||
DO_NUMBER (1, (tp->tm_wday - 1 + 7) % 7 + 1);
|
||||
|
||||
@@ -1220,7 +1219,7 @@ my_strftime (char *s, size_t maxsize, const char *format, const struct tm *tp
|
||||
}
|
||||
}
|
||||
|
||||
if (p && i < maxsize)
|
||||
if (p && maxsize != 0)
|
||||
*p = '\0';
|
||||
return i;
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1991, 1992, 1997 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1991, 1992, 1997, 1999 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -57,9 +57,7 @@ extern int errno;
|
||||
/* Convert NPTR to a double. If ENDPTR is not NULL, a pointer to the
|
||||
character after the last one used in the number is put in *ENDPTR. */
|
||||
double
|
||||
strtod (nptr, endptr)
|
||||
const char *nptr;
|
||||
char **endptr;
|
||||
strtod (const char *nptr, char **endptr)
|
||||
{
|
||||
register const char *s;
|
||||
short int sign;
|
||||
|
||||
252
lib/strtol.c
252
lib/strtol.c
@@ -1,7 +1,7 @@
|
||||
/* strtol - Convert string representation of a number into an integer value.
|
||||
Copyright (C) 1991, 92, 94, 95, 96, 97 Free Software Foundation, Inc.
|
||||
/* Convert string representation of a number into an integer value.
|
||||
Copyright (C) 1991, 92, 94, 95, 96, 97, 98, 99 Free Software Foundation, Inc.
|
||||
NOTE: The canonical source of this file is maintained with the GNU C
|
||||
Library. Bugs can be reported to bug-glibc@prep.ai.mit.edu.
|
||||
Library. Bugs can be reported to bug-glibc@gnu.org.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the
|
||||
@@ -54,7 +54,7 @@ extern int errno;
|
||||
# include "../locale/localeinfo.h"
|
||||
#endif
|
||||
|
||||
/* Nonzero if we are defining `strtoul' or `strtouq', operating on
|
||||
/* Nonzero if we are defining `strtoul' or `strtoull', operating on
|
||||
unsigned integers. */
|
||||
#ifndef UNSIGNED
|
||||
# define UNSIGNED 0
|
||||
@@ -64,72 +64,154 @@ extern int errno;
|
||||
#endif
|
||||
|
||||
/* Determine the name. */
|
||||
#if UNSIGNED
|
||||
# ifdef USE_WIDE_CHAR
|
||||
# ifdef QUAD
|
||||
# define strtol wcstouq
|
||||
#ifdef USE_IN_EXTENDED_LOCALE_MODEL
|
||||
# if UNSIGNED
|
||||
# ifdef USE_WIDE_CHAR
|
||||
# ifdef QUAD
|
||||
# define strtol __wcstoull_l
|
||||
# else
|
||||
# define strtol __wcstoul_l
|
||||
# endif
|
||||
# else
|
||||
# define strtol wcstoul
|
||||
# ifdef QUAD
|
||||
# define strtol __strtoull_l
|
||||
# else
|
||||
# define strtol __strtoul_l
|
||||
# endif
|
||||
# endif
|
||||
# else
|
||||
# ifdef QUAD
|
||||
# define strtol strtouq
|
||||
# ifdef USE_WIDE_CHAR
|
||||
# ifdef QUAD
|
||||
# define strtol __wcstoll_l
|
||||
# else
|
||||
# define strtol __wcstol_l
|
||||
# endif
|
||||
# else
|
||||
# define strtol strtoul
|
||||
# ifdef QUAD
|
||||
# define strtol __strtoll_l
|
||||
# else
|
||||
# define strtol __strtol_l
|
||||
# endif
|
||||
# endif
|
||||
# endif
|
||||
#else
|
||||
# ifdef USE_WIDE_CHAR
|
||||
# ifdef QUAD
|
||||
# define strtol wcstoq
|
||||
# if UNSIGNED
|
||||
# ifdef USE_WIDE_CHAR
|
||||
# ifdef QUAD
|
||||
# define strtol wcstoull
|
||||
# else
|
||||
# define strtol wcstoul
|
||||
# endif
|
||||
# else
|
||||
# define strtol wcstol
|
||||
# ifdef QUAD
|
||||
# define strtol strtoull
|
||||
# else
|
||||
# define strtol strtoul
|
||||
# endif
|
||||
# endif
|
||||
# else
|
||||
# ifdef QUAD
|
||||
# define strtol strtoq
|
||||
# ifdef USE_WIDE_CHAR
|
||||
# ifdef QUAD
|
||||
# define strtol wcstoll
|
||||
# else
|
||||
# define strtol wcstol
|
||||
# endif
|
||||
# else
|
||||
# ifdef QUAD
|
||||
# define strtol strtoll
|
||||
# endif
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* If QUAD is defined, we are defining `strtoq' or `strtouq',
|
||||
/* If QUAD is defined, we are defining `strtoll' or `strtoull',
|
||||
operating on `long long int's. */
|
||||
#ifdef QUAD
|
||||
# define LONG long long
|
||||
# undef LONG_MIN
|
||||
# define LONG_MIN LONG_LONG_MIN
|
||||
# undef LONG_MAX
|
||||
# define LONG_MAX LONG_LONG_MAX
|
||||
# undef ULONG_MAX
|
||||
# define ULONG_MAX ULONG_LONG_MAX
|
||||
# define STRTOL_LONG_MIN LONG_LONG_MIN
|
||||
# define STRTOL_LONG_MAX LONG_LONG_MAX
|
||||
# define STRTOL_ULONG_MAX ULONG_LONG_MAX
|
||||
|
||||
/* The extra casts work around common compiler bugs,
|
||||
e.g. Cray C 5.0.3.0 when t == time_t. */
|
||||
# ifndef TYPE_SIGNED
|
||||
# define TYPE_SIGNED(t) (! ((t) 0 < (t) -1))
|
||||
# endif
|
||||
# ifndef TYPE_MINIMUM
|
||||
# define TYPE_MINIMUM(t) ((t) (TYPE_SIGNED (t) \
|
||||
? ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1) \
|
||||
: (t) 0))
|
||||
# endif
|
||||
# ifndef TYPE_MAXIMUM
|
||||
# define TYPE_MAXIMUM(t) ((t) (~ (t) 0 - TYPE_MINIMUM (t)))
|
||||
# endif
|
||||
|
||||
# ifndef ULONG_LONG_MAX
|
||||
# define ULONG_LONG_MAX TYPE_MAXIMUM (unsigned long long)
|
||||
# endif
|
||||
# ifndef LONG_LONG_MAX
|
||||
# define LONG_LONG_MAX TYPE_MAXIMUM (long long int)
|
||||
# endif
|
||||
# ifndef LONG_LONG_MIN
|
||||
# define LONG_LONG_MIN TYPE_MINIMUM (long long int)
|
||||
# endif
|
||||
|
||||
# if __GNUC__ == 2 && __GNUC_MINOR__ < 7
|
||||
/* Work around gcc bug with using this constant. */
|
||||
static const unsigned long long int maxquad = ULONG_LONG_MAX;
|
||||
# undef ULONG_MAX
|
||||
# define ULONG_MAX maxquad
|
||||
# undef STRTOL_ULONG_MAX
|
||||
# define STRTOL_ULONG_MAX maxquad
|
||||
# endif
|
||||
#else
|
||||
# define LONG long
|
||||
|
||||
#ifndef ULONG_MAX
|
||||
# define ULONG_MAX ((unsigned long) ~(unsigned long) 0)
|
||||
# ifndef ULONG_MAX
|
||||
# define ULONG_MAX ((unsigned long) ~(unsigned long) 0)
|
||||
# endif
|
||||
# ifndef LONG_MAX
|
||||
# define LONG_MAX ((long int) (ULONG_MAX >> 1))
|
||||
# endif
|
||||
# define STRTOL_LONG_MIN LONG_MIN
|
||||
# define STRTOL_LONG_MAX LONG_MAX
|
||||
# define STRTOL_ULONG_MAX ULONG_MAX
|
||||
#endif
|
||||
#ifndef LONG_MAX
|
||||
# define LONG_MAX ((long int) (ULONG_MAX >> 1))
|
||||
|
||||
|
||||
/* We use this code also for the extended locale handling where the
|
||||
function gets as an additional argument the locale which has to be
|
||||
used. To access the values we have to redefine the _NL_CURRENT
|
||||
macro. */
|
||||
#ifdef USE_IN_EXTENDED_LOCALE_MODEL
|
||||
# undef _NL_CURRENT
|
||||
# define _NL_CURRENT(category, item) \
|
||||
(current->values[_NL_ITEM_INDEX (item)].string)
|
||||
# define LOCALE_PARAM , loc
|
||||
# define LOCALE_PARAM_DECL __locale_t loc;
|
||||
#else
|
||||
# define LOCALE_PARAM
|
||||
# define LOCALE_PARAM_DECL
|
||||
#endif
|
||||
|
||||
#if defined _LIBC || defined HAVE_WCHAR_H
|
||||
# include <wchar.h>
|
||||
#endif
|
||||
|
||||
#ifdef USE_WIDE_CHAR
|
||||
# include <wchar.h>
|
||||
# include <wctype.h>
|
||||
# define L_(Ch) L##Ch
|
||||
# define UCHAR_TYPE wint_t
|
||||
# define STRING_TYPE wchar_t
|
||||
# define ISSPACE(Ch) iswspace (Ch)
|
||||
# define ISALPHA(Ch) iswalpha (Ch)
|
||||
# define TOUPPER(Ch) towupper (Ch)
|
||||
# ifdef USE_IN_EXTENDED_LOCALE_MODEL
|
||||
# define ISSPACE(Ch) __iswspace_l ((Ch), loc)
|
||||
# define ISALPHA(Ch) __iswalpha_l ((Ch), loc)
|
||||
# define TOUPPER(Ch) __towupper_l ((Ch), loc)
|
||||
# else
|
||||
# define ISSPACE(Ch) iswspace (Ch)
|
||||
# define ISALPHA(Ch) iswalpha (Ch)
|
||||
# define TOUPPER(Ch) towupper (Ch)
|
||||
# endif
|
||||
#else
|
||||
# if defined (STDC_HEADERS) || (!defined (isascii) && !defined (HAVE_ISASCII))
|
||||
# if defined STDC_HEADERS || (!defined isascii && !defined HAVE_ISASCII)
|
||||
# define IN_CTYPE_DOMAIN(c) 1
|
||||
# else
|
||||
# define IN_CTYPE_DOMAIN(c) isascii(c)
|
||||
@@ -137,12 +219,20 @@ extern int errno;
|
||||
# define L_(Ch) Ch
|
||||
# define UCHAR_TYPE unsigned char
|
||||
# define STRING_TYPE char
|
||||
# define ISSPACE(Ch) (IN_CTYPE_DOMAIN (Ch) && isspace (Ch))
|
||||
# define ISALPHA(Ch) (IN_CTYPE_DOMAIN (Ch) && isalpha (Ch))
|
||||
# define TOUPPER(Ch) (IN_CTYPE_DOMAIN (Ch) ? toupper (Ch) : (Ch))
|
||||
# ifdef USE_IN_EXTENDED_LOCALE_MODEL
|
||||
# define ISSPACE(Ch) __isspace_l ((Ch), loc)
|
||||
# define ISALPHA(Ch) __isalpha_l ((Ch), loc)
|
||||
# define TOUPPER(Ch) __toupper_l ((Ch), loc)
|
||||
# else
|
||||
# define ISSPACE(Ch) (IN_CTYPE_DOMAIN (Ch) && isspace (Ch))
|
||||
# define ISALPHA(Ch) (IN_CTYPE_DOMAIN (Ch) && isalpha (Ch))
|
||||
# define TOUPPER(Ch) (IN_CTYPE_DOMAIN (Ch) ? toupper (Ch) : (Ch))
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifdef __STDC__
|
||||
/* For compilers which are ansi but don't define __STDC__, like SGI
|
||||
Irix-4.0.5 cc, also check whether PROTOTYPES is defined. */
|
||||
#if defined (__STDC__) || defined (PROTOTYPES)
|
||||
# define INTERNAL(X) INTERNAL1(X)
|
||||
# define INTERNAL1(X) __##X##_internal
|
||||
# define WEAKNAME(X) WEAKNAME1(X)
|
||||
@@ -156,6 +246,7 @@ extern int errno;
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
/* Convert NPTR to an `unsigned long int' or `long int' in base BASE.
|
||||
If BASE is 0 the base is determined by the presence of a leading
|
||||
zero, indicating octal or a leading "0x" or "0X", indicating hexadecimal.
|
||||
@@ -164,11 +255,12 @@ extern int errno;
|
||||
one converted is stored in *ENDPTR. */
|
||||
|
||||
INT
|
||||
INTERNAL (strtol) (nptr, endptr, base, group)
|
||||
INTERNAL (strtol) (nptr, endptr, base, group LOCALE_PARAM)
|
||||
const STRING_TYPE *nptr;
|
||||
STRING_TYPE **endptr;
|
||||
int base;
|
||||
int group;
|
||||
LOCALE_PARAM_DECL
|
||||
{
|
||||
int negative;
|
||||
register unsigned LONG int cutoff;
|
||||
@@ -180,8 +272,11 @@ INTERNAL (strtol) (nptr, endptr, base, group)
|
||||
int overflow;
|
||||
|
||||
#ifdef USE_NUMBER_GROUPING
|
||||
# ifdef USE_IN_EXTENDED_LOCALE_MODEL
|
||||
struct locale_data *current = loc->__locales[LC_NUMERIC];
|
||||
# endif
|
||||
/* The thousands character of the current locale. */
|
||||
wchar_t thousands;
|
||||
wchar_t thousands = L'\0';
|
||||
/* The numeric grouping specification of the current locale,
|
||||
in the format described in <locale.h>. */
|
||||
const char *grouping;
|
||||
@@ -194,9 +289,11 @@ INTERNAL (strtol) (nptr, endptr, base, group)
|
||||
else
|
||||
{
|
||||
/* Figure out the thousands separator character. */
|
||||
if (mbtowc (&thousands, _NL_CURRENT (LC_NUMERIC, THOUSANDS_SEP),
|
||||
strlen (_NL_CURRENT (LC_NUMERIC, THOUSANDS_SEP))) <= 0)
|
||||
thousands = (wchar_t) *_NL_CURRENT (LC_NUMERIC, THOUSANDS_SEP);
|
||||
# if defined _LIBC || defined _HAVE_BTOWC
|
||||
thousands = __btowc (*_NL_CURRENT (LC_NUMERIC, THOUSANDS_SEP));
|
||||
if (thousands == WEOF)
|
||||
thousands = L'\0';
|
||||
# endif
|
||||
if (thousands == L'\0')
|
||||
grouping = NULL;
|
||||
}
|
||||
@@ -233,23 +330,19 @@ INTERNAL (strtol) (nptr, endptr, base, group)
|
||||
else
|
||||
negative = 0;
|
||||
|
||||
if (base == 16 && s[0] == L_('0') && TOUPPER (s[1]) == L_('X'))
|
||||
s += 2;
|
||||
|
||||
/* If BASE is zero, figure it out ourselves. */
|
||||
if (base == 0)
|
||||
if (*s == L_('0'))
|
||||
{
|
||||
if (TOUPPER (s[1]) == L_('X'))
|
||||
{
|
||||
s += 2;
|
||||
base = 16;
|
||||
}
|
||||
else
|
||||
base = 8;
|
||||
}
|
||||
else
|
||||
base = 10;
|
||||
/* Recognize number prefix and if BASE is zero, figure it out ourselves. */
|
||||
if (*s == L_('0'))
|
||||
{
|
||||
if ((base == 0 || base == 16) && TOUPPER (s[1]) == L_('X'))
|
||||
{
|
||||
s += 2;
|
||||
base = 16;
|
||||
}
|
||||
else if (base == 0)
|
||||
base = 8;
|
||||
}
|
||||
else if (base == 0)
|
||||
base = 10;
|
||||
|
||||
/* Save the pointer so we can check later if anything happened. */
|
||||
save = s;
|
||||
@@ -273,8 +366,8 @@ INTERNAL (strtol) (nptr, endptr, base, group)
|
||||
#endif
|
||||
end = NULL;
|
||||
|
||||
cutoff = ULONG_MAX / (unsigned LONG int) base;
|
||||
cutlim = ULONG_MAX % (unsigned LONG int) base;
|
||||
cutoff = STRTOL_ULONG_MAX / (unsigned LONG int) base;
|
||||
cutlim = STRTOL_ULONG_MAX % (unsigned LONG int) base;
|
||||
|
||||
overflow = 0;
|
||||
i = 0;
|
||||
@@ -314,25 +407,23 @@ INTERNAL (strtol) (nptr, endptr, base, group)
|
||||
`unsigned LONG int', but outside the range of `LONG int'. */
|
||||
if (overflow == 0
|
||||
&& i > (negative
|
||||
? -((unsigned LONG int) (LONG_MIN + 1)) + 1
|
||||
: (unsigned LONG int) LONG_MAX))
|
||||
? -((unsigned LONG int) (STRTOL_LONG_MIN + 1)) + 1
|
||||
: (unsigned LONG int) STRTOL_LONG_MAX))
|
||||
overflow = 1;
|
||||
#else
|
||||
overflow |= negative;
|
||||
#endif
|
||||
|
||||
if (overflow)
|
||||
{
|
||||
__set_errno (ERANGE);
|
||||
#if UNSIGNED
|
||||
return ULONG_MAX;
|
||||
return STRTOL_ULONG_MAX;
|
||||
#else
|
||||
return negative ? LONG_MIN : LONG_MAX;
|
||||
return negative ? STRTOL_LONG_MIN : STRTOL_LONG_MAX;
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Return the result of the appropriate sign. */
|
||||
return (negative ? -i : i);
|
||||
return negative ? -i : i;
|
||||
|
||||
noconv:
|
||||
/* We must handle a special case here: the base is 0 or 16 and the
|
||||
@@ -340,12 +431,14 @@ noconv:
|
||||
hexadecimal digits. This is no error case. We return 0 and
|
||||
ENDPTR points to the `x`. */
|
||||
if (endptr != NULL)
|
||||
if (save - nptr >= 2 && TOUPPER (save[-1]) == L_('X')
|
||||
&& save[-2] == L_('0'))
|
||||
*endptr = (STRING_TYPE *) &save[-1];
|
||||
else
|
||||
/* There was no number to convert. */
|
||||
*endptr = (STRING_TYPE *) nptr;
|
||||
{
|
||||
if (save - nptr >= 2 && TOUPPER (save[-1]) == L_('X')
|
||||
&& save[-2] == L_('0'))
|
||||
*endptr = (STRING_TYPE *) &save[-1];
|
||||
else
|
||||
/* There was no number to convert. */
|
||||
*endptr = (STRING_TYPE *) nptr;
|
||||
}
|
||||
|
||||
return 0L;
|
||||
}
|
||||
@@ -369,10 +462,11 @@ INT
|
||||
#ifdef weak_function
|
||||
weak_function
|
||||
#endif
|
||||
strtol (nptr, endptr, base)
|
||||
strtol (nptr, endptr, base LOCALE_PARAM)
|
||||
const STRING_TYPE *nptr;
|
||||
STRING_TYPE **endptr;
|
||||
int base;
|
||||
LOCALE_PARAM_DECL
|
||||
{
|
||||
return INTERNAL (strtol) (nptr, endptr, base, 0);
|
||||
return INTERNAL (strtol) (nptr, endptr, base, 0 LOCALE_PARAM);
|
||||
}
|
||||
|
||||
27
lib/strtoull.c
Normal file
27
lib/strtoull.c
Normal file
@@ -0,0 +1,27 @@
|
||||
/* Function to parse an `unsigned long long int' from text.
|
||||
Copyright (C) 1995, 1996, 1997, 1999 Free Software Foundation, Inc.
|
||||
NOTE: The canonical source of this file is maintained with the GNU C
|
||||
Library. Bugs can be reported to bug-glibc@gnu.org.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the
|
||||
Free Software Foundation; either version 2, or (at your option) any
|
||||
later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software Foundation,
|
||||
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
|
||||
#define QUAD 1
|
||||
|
||||
#include "strtoul.c"
|
||||
|
||||
#ifdef _LIBC
|
||||
strong_alias (__strtoull_internal, __strtouq_internal)
|
||||
weak_alias (strtoull, strtouq)
|
||||
#endif
|
||||
58
lib/strtoumax.c
Normal file
58
lib/strtoumax.c
Normal file
@@ -0,0 +1,58 @@
|
||||
/* Convert string representation of a number into an uintmax_t value.
|
||||
Copyright 1999 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software Foundation,
|
||||
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
|
||||
/* Written by Paul Eggert. */
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#if HAVE_INTTYPES_H
|
||||
# include <inttypes.h>
|
||||
#endif
|
||||
|
||||
#if HAVE_STDLIB_H
|
||||
# include <stdlib.h>
|
||||
#endif
|
||||
|
||||
#ifndef PARAMS
|
||||
# if defined PROTOTYPES || defined __STDC__
|
||||
# define PARAMS(Args) Args
|
||||
# else
|
||||
# define PARAMS(Args) ()
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if HAVE_UNSIGNED_LONG_LONG && ! HAVE_STRTOULL
|
||||
unsigned long long strtoull PARAMS ((char const *, char **, int));
|
||||
#endif
|
||||
|
||||
uintmax_t
|
||||
strtoumax (char const *ptr, char **endptr, int base)
|
||||
{
|
||||
#define USE_IF_EQUIVALENT(function) \
|
||||
if (sizeof (uintmax_t) == sizeof function (ptr, endptr, base)) \
|
||||
return function (ptr, endptr, base);
|
||||
|
||||
#if HAVE_UNSIGNED_LONG_LONG
|
||||
USE_IF_EQUIVALENT (strtoull)
|
||||
#endif
|
||||
|
||||
USE_IF_EQUIVALENT (strtoul)
|
||||
|
||||
abort ();
|
||||
}
|
||||
@@ -54,7 +54,7 @@ utime_null (const char *file)
|
||||
int status = 0;
|
||||
struct stat sb;
|
||||
|
||||
fd = open (file, O_RDWR, 0666);
|
||||
fd = open (file, O_RDWR);
|
||||
if (fd < 0
|
||||
|| fstat (fd, &sb) < 0
|
||||
|| safe_read (fd, &c, sizeof (char)) < 0
|
||||
|
||||
47
lib/version-etc.c
Normal file
47
lib/version-etc.c
Normal file
@@ -0,0 +1,47 @@
|
||||
/* Utility to help print --version output in a consistent format.
|
||||
Copyright (C) 1999 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software Foundation,
|
||||
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
#include "version-etc.h"
|
||||
|
||||
#if ENABLE_NLS
|
||||
# include <libintl.h>
|
||||
# define _(Text) gettext (Text)
|
||||
#else
|
||||
# define _(Text) Text
|
||||
#endif
|
||||
|
||||
void
|
||||
version_etc (FILE *stream,
|
||||
const char *command_name, const char *package,
|
||||
const char *version, const char *authors)
|
||||
{
|
||||
fprintf (stream, "%s (%s) %s\n", command_name, package, version);
|
||||
fputs (_("\
|
||||
\n\
|
||||
Copyright (C) 1999 Free Software Foundation, Inc.\n\
|
||||
This is free software; see the source for copying conditions. There is NO\n\
|
||||
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\
|
||||
\n\
|
||||
"
|
||||
), stream);
|
||||
fprintf (stream, _("Written by %s.\n"), authors);
|
||||
}
|
||||
17
lib/version-etc.h
Normal file
17
lib/version-etc.h
Normal file
@@ -0,0 +1,17 @@
|
||||
#ifndef VERSION_ETC_H
|
||||
# define VERSION_ETC_H 1
|
||||
|
||||
# ifndef PARAMS
|
||||
# if defined PROTOTYPES || (defined __STDC__ && __STDC__)
|
||||
# define PARAMS(Args) Args
|
||||
# else
|
||||
# define PARAMS(Args) ()
|
||||
# endif
|
||||
# endif
|
||||
|
||||
void
|
||||
version_etc PARAMS ((FILE *stream,
|
||||
const char *command_name, const char *package,
|
||||
const char *version, const char *authors));
|
||||
|
||||
#endif /* VERSION_ETC_H */
|
||||
@@ -1,5 +1,5 @@
|
||||
/* xmalloc.c -- malloc with out of memory checking
|
||||
Copyright (C) 1990-1997, 98 Free Software Foundation, Inc.
|
||||
Copyright (C) 1990-1997, 98, 99 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -70,7 +70,7 @@ xalloc_fail (void)
|
||||
{
|
||||
if (xalloc_fail_func)
|
||||
(*xalloc_fail_func) ();
|
||||
error (xalloc_exit_failure, 0, xalloc_msg_memory_exhausted);
|
||||
error (xalloc_exit_failure, 0, "%s", _(xalloc_msg_memory_exhausted));
|
||||
}
|
||||
|
||||
/* Allocate N bytes of memory dynamically, with error checking. */
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* A more useful interface to strtol.
|
||||
Copyright (C) 1995, 1996, 1998 Free Software Foundation, Inc.
|
||||
Copyright 1995, 1996, 1998, 1999 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -21,6 +21,12 @@
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#ifndef __strtol
|
||||
# define __strtol strtol
|
||||
# define __strtol_t long int
|
||||
# define __xstrtol xstrtol
|
||||
#endif
|
||||
|
||||
/* Some pre-ANSI implementations (e.g. SunOS 4)
|
||||
need stderr defined if assertion checking is enabled. */
|
||||
#include <stdio.h>
|
||||
@@ -39,6 +45,7 @@
|
||||
#endif
|
||||
|
||||
#include <assert.h>
|
||||
#include <ctype.h>
|
||||
|
||||
#include <errno.h>
|
||||
#ifndef errno
|
||||
@@ -61,34 +68,22 @@ extern int errno;
|
||||
? ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1) : (t) 0))
|
||||
#define TYPE_MAXIMUM(t) (~ (t) 0 - TYPE_MINIMUM (t))
|
||||
|
||||
#ifndef ULONG_MAX
|
||||
# define ULONG_MAX TYPE_MAXIMUM (unsigned long int)
|
||||
#endif
|
||||
|
||||
#ifndef LONG_MAX
|
||||
# define LONG_MAX TYPE_MAXIMUM (long int)
|
||||
#endif
|
||||
|
||||
#if defined (STDC_HEADERS) || (!defined (isascii) && !defined (HAVE_ISASCII))
|
||||
# define IN_CTYPE_DOMAIN(c) 1
|
||||
#else
|
||||
# define IN_CTYPE_DOMAIN(c) isascii(c)
|
||||
#endif
|
||||
|
||||
#ifdef isblank
|
||||
# define ISBLANK(c) (IN_CTYPE_DOMAIN (c) && isblank (c))
|
||||
#else
|
||||
# define ISBLANK(c) ((c) == ' ' || (c) == '\t')
|
||||
#endif
|
||||
#define ISSPACE(c) (IN_CTYPE_DOMAIN (c) && isspace (c))
|
||||
|
||||
#include "xstrtol.h"
|
||||
|
||||
__unsigned long int __strtol ();
|
||||
__strtol_t __strtol ();
|
||||
|
||||
static int
|
||||
bkm_scale (__unsigned long int *x, int scale_factor)
|
||||
bkm_scale (__strtol_t *x, int scale_factor)
|
||||
{
|
||||
__unsigned long int product = *x * scale_factor;
|
||||
__strtol_t product = *x * scale_factor;
|
||||
if (*x != product / scale_factor)
|
||||
return 1;
|
||||
*x = product;
|
||||
@@ -96,7 +91,7 @@ bkm_scale (__unsigned long int *x, int scale_factor)
|
||||
}
|
||||
|
||||
static int
|
||||
bkm_scale_by_power (__unsigned long int *x, int base, int power)
|
||||
bkm_scale_by_power (__strtol_t *x, int base, int power)
|
||||
{
|
||||
while (power--)
|
||||
if (bkm_scale (x, base))
|
||||
@@ -109,27 +104,24 @@ bkm_scale_by_power (__unsigned long int *x, int base, int power)
|
||||
|
||||
strtol_error
|
||||
__xstrtol (const char *s, char **ptr, int strtol_base,
|
||||
__unsigned long int *val, const char *valid_suffixes)
|
||||
__strtol_t *val, const char *valid_suffixes)
|
||||
{
|
||||
char *t_ptr;
|
||||
char **p;
|
||||
__unsigned long int tmp;
|
||||
__strtol_t tmp;
|
||||
|
||||
assert (0 <= strtol_base && strtol_base <= 36);
|
||||
|
||||
p = (ptr ? ptr : &t_ptr);
|
||||
|
||||
#if STRING_TO_UNSIGNED
|
||||
{
|
||||
const char *q = s;
|
||||
while (ISBLANK (*q))
|
||||
{
|
||||
if (! TYPE_SIGNED (__strtol_t))
|
||||
{
|
||||
const char *q = s;
|
||||
while (ISSPACE ((unsigned char) *q))
|
||||
++q;
|
||||
}
|
||||
if (*q == '-')
|
||||
return LONGINT_INVALID;
|
||||
}
|
||||
#endif
|
||||
if (*q == '-')
|
||||
return LONGINT_INVALID;
|
||||
}
|
||||
|
||||
errno = 0;
|
||||
tmp = __strtol (s, p, strtol_base);
|
||||
@@ -139,8 +131,8 @@ __xstrtol (const char *s, char **ptr, int strtol_base,
|
||||
return LONGINT_INVALID;
|
||||
|
||||
/* Let valid_suffixes == NULL mean `allow any suffix'. */
|
||||
/* FIXME: update all callers except the one in tail.c changing
|
||||
last parameter NULL to `""'. */
|
||||
/* FIXME: update all callers except the ones that allow suffixes
|
||||
after the number, changing last parameter NULL to `""'. */
|
||||
if (!valid_suffixes)
|
||||
{
|
||||
*val = tmp;
|
||||
@@ -154,7 +146,10 @@ __xstrtol (const char *s, char **ptr, int strtol_base,
|
||||
int overflow;
|
||||
|
||||
if (!strchr (valid_suffixes, **p))
|
||||
return LONGINT_INVALID_SUFFIX_CHAR;
|
||||
{
|
||||
*val = tmp;
|
||||
return LONGINT_INVALID_SUFFIX_CHAR;
|
||||
}
|
||||
|
||||
if (strchr (valid_suffixes, '0'))
|
||||
{
|
||||
@@ -227,6 +222,7 @@ __xstrtol (const char *s, char **ptr, int strtol_base,
|
||||
break;
|
||||
|
||||
default:
|
||||
*val = tmp;
|
||||
return LONGINT_INVALID_SUFFIX_CHAR;
|
||||
break;
|
||||
}
|
||||
@@ -258,7 +254,7 @@ main (int argc, char** argv)
|
||||
for (i=1; i<argc; i++)
|
||||
{
|
||||
char *p;
|
||||
__unsigned long int val;
|
||||
__strtol_t val;
|
||||
|
||||
s_err = __xstrtol (argv[i], &p, 0, &val, "bckmw");
|
||||
if (s_err == LONGINT_OK)
|
||||
|
||||
@@ -1,14 +1,8 @@
|
||||
#ifndef XSTRTOL_H_
|
||||
# define XSTRTOL_H_ 1
|
||||
|
||||
# if STRING_TO_UNSIGNED
|
||||
# define __xstrtol xstrtoul
|
||||
# define __strtol strtoul
|
||||
# define __unsigned unsigned
|
||||
# else
|
||||
# define __xstrtol xstrtol
|
||||
# define __strtol strtol
|
||||
# define __unsigned /* empty */
|
||||
# if HAVE_INTTYPES_H
|
||||
# include <inttypes.h> /* for uintmax_t */
|
||||
# endif
|
||||
|
||||
# ifndef PARAMS
|
||||
@@ -27,11 +21,14 @@ enum strtol_error
|
||||
typedef enum strtol_error strtol_error;
|
||||
# endif
|
||||
|
||||
strtol_error
|
||||
__xstrtol PARAMS ((const char *s, char **ptr, int base,
|
||||
__unsigned long int *val, const char *valid_suffixes));
|
||||
# define _DECLARE_XSTRTOL(name, type) \
|
||||
strtol_error \
|
||||
name PARAMS ((const char *s, char **ptr, int base, \
|
||||
type *val, const char *valid_suffixes));
|
||||
_DECLARE_XSTRTOL (xstrtol, long int)
|
||||
_DECLARE_XSTRTOL (xstrtoul, unsigned long int)
|
||||
_DECLARE_XSTRTOL (xstrtoumax, uintmax_t)
|
||||
|
||||
# undef _STRTOL_ERROR
|
||||
# define _STRTOL_ERROR(Exit_code, Str, Argument_type_string, Err) \
|
||||
do \
|
||||
{ \
|
||||
@@ -51,8 +48,7 @@ strtol_error
|
||||
break; \
|
||||
\
|
||||
case LONGINT_OVERFLOW: \
|
||||
/* FIXME: make this message dependent on STRING_TO_UNSIGNED */\
|
||||
error ((Exit_code), 0, "%s `%s' larger than maximum long int",\
|
||||
error ((Exit_code), 0, "%s `%s' too large", \
|
||||
(Argument_type_string), (Str)); \
|
||||
break; \
|
||||
} \
|
||||
|
||||
@@ -1,2 +1,4 @@
|
||||
#define STRING_TO_UNSIGNED 1
|
||||
#define __strtol strtoul
|
||||
#define __strtol_t unsigned long int
|
||||
#define __xstrtol xstrtoul
|
||||
#include "xstrtol.c"
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
#ifndef XSTRTOUL_H_
|
||||
# define XSTRTOUL_H_ 1
|
||||
|
||||
# define STRING_TO_UNSIGNED 1
|
||||
|
||||
/* Undefine this symbol so we can include xstrtol.h a second time.
|
||||
Otherwise, a program that wanted both xstrtol.h and xstrtoul.h
|
||||
would never get the declaration corresponding to the header file
|
||||
included after the first one. */
|
||||
# undef XSTRTOL_H_
|
||||
# include "xstrtol.h"
|
||||
|
||||
#endif /* not XSTRTOUL_H_ */
|
||||
31
lib/xstrtoumax.c
Normal file
31
lib/xstrtoumax.c
Normal file
@@ -0,0 +1,31 @@
|
||||
/* xstrtoumax.c -- A more useful interface to strtoumax.
|
||||
Copyright 1999 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software Foundation,
|
||||
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
|
||||
/* Written by Paul Eggert. */
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#if HAVE_INTTYPES_H
|
||||
# include <inttypes.h>
|
||||
#endif
|
||||
|
||||
#define __strtol strtoumax
|
||||
#define __strtol_t uintmax_t
|
||||
#define __xstrtol xstrtoumax
|
||||
#include "xstrtol.c"
|
||||
101
lib/ylwrap
101
lib/ylwrap
@@ -1,101 +0,0 @@
|
||||
#! /bin/sh
|
||||
# ylwrap - wrapper for lex/yacc invocations.
|
||||
# Copyright (C) 1996, 1997 Free Software Foundation, Inc.
|
||||
# Written by Tom Tromey <tromey@cygnus.com>.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2, or (at your option)
|
||||
# any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
# Usage:
|
||||
# ylwrap PROGRAM INPUT [OUTPUT DESIRED]... -- [ARGS]...
|
||||
# * PROGRAM is program to run.
|
||||
# * INPUT is the input file
|
||||
# * OUTPUT is file PROG generates
|
||||
# * DESIRED is file we actually want
|
||||
# * ARGS are passed to PROG
|
||||
# Any number of OUTPUT,DESIRED pairs may be used.
|
||||
|
||||
# The program to run.
|
||||
prog="$1"
|
||||
shift
|
||||
|
||||
# The input.
|
||||
input="$1"
|
||||
shift
|
||||
case "$input" in
|
||||
/*)
|
||||
# Absolute path; do nothing.
|
||||
;;
|
||||
*)
|
||||
# Relative path. Make it absolute. Why? Because otherwise any
|
||||
# debugging info in the generated file will point to the wrong
|
||||
# place. This is really gross.
|
||||
input="`pwd`/$input"
|
||||
;;
|
||||
esac
|
||||
|
||||
pairlist=
|
||||
while test "$#" -ne 0; do
|
||||
if test "$1" = "--"; then
|
||||
break
|
||||
fi
|
||||
pairlist="$pairlist $1"
|
||||
shift
|
||||
done
|
||||
|
||||
# FIXME: add hostname here for parallel makes that run commands on
|
||||
# other machines. But that might take us over the 14-char limit.
|
||||
dirname=ylwrap$$
|
||||
trap "cd `pwd`; rm -rf $dirname > /dev/null 2>&1" 1 2 3 15
|
||||
mkdir $dirname || exit 1
|
||||
|
||||
cd $dirname
|
||||
$prog ${1+"$@"} "$input"
|
||||
status=$?
|
||||
|
||||
if test $status -eq 0; then
|
||||
set X $pairlist
|
||||
shift
|
||||
first=yes
|
||||
while test "$#" -ne 0; do
|
||||
if test -f "$1"; then
|
||||
# If $2 is an absolute path name, then just use that,
|
||||
# otherwise prepend `../'.
|
||||
case "$2" in
|
||||
/*) target="$2";;
|
||||
*) target="../$2";;
|
||||
esac
|
||||
mv "$1" "$target" || status=$?
|
||||
else
|
||||
# A missing file is only an error for the first file. This
|
||||
# is a blatant hack to let us support using "yacc -d". If -d
|
||||
# is not specified, we don't want an error when the header
|
||||
# file is "missing".
|
||||
if test $first = yes; then
|
||||
status=1
|
||||
fi
|
||||
fi
|
||||
shift
|
||||
shift
|
||||
first=no
|
||||
done
|
||||
else
|
||||
status=$?
|
||||
fi
|
||||
|
||||
# Remove the directory.
|
||||
cd ..
|
||||
rm -rf $dirname
|
||||
|
||||
exit $status
|
||||
160
m4/ChangeLog
160
m4/ChangeLog
@@ -1,3 +1,163 @@
|
||||
1999-05-04 Paul Eggert <eggert@twinsun.com>
|
||||
|
||||
* lfs.m4 (AC_LFS): -n32, -o32, and -n64 should be in CFLAGS,
|
||||
not CPPFLAGS, so that linking works correctly in IRIX.
|
||||
|
||||
1999-04-30 Paul Eggert <eggert@twinsun.com>
|
||||
|
||||
* jm-macros.m4 (AC_REPLACE_FUNCS): Add dup2.
|
||||
|
||||
1999-04-20 Jim Meyering <meyering@ascend.com>
|
||||
|
||||
* xstrtoumax.m4: Require jm_AC_TYPE_UNSIGNED_LONG_LONG.
|
||||
AC_REPLACE xstroull if necessary. From Paul Eggert.
|
||||
(AC_CHECK_FUNCS): Remove strtoull, strtoumax, strtouq.
|
||||
|
||||
1999-04-20 Paul Eggert <eggert@twinsun.com>
|
||||
|
||||
* uintmax_t.m4 (jm_AC_TYPE_UINTMAX_T): Move unsigned long
|
||||
long check into new jm_AC_TYPE_UNSIGNED_LONG_LONG macro.
|
||||
* jm-macros.m4 (jm_CHECK_ALL_TYPES): Require
|
||||
jm_AC_TYPE_UNSIGNED_LONG_LONG.
|
||||
* ulonglong.m4 (jm_AC_TYPE_UNSIGNED_LONG_LONG): New file/macro.
|
||||
|
||||
* lfs.m4: Port to AIX and HP-UX. Support cross-compilation.
|
||||
|
||||
1999-04-18 Jim Meyering <meyering@ascend.com>
|
||||
|
||||
* xstrtoumax.m4 (jm_AC_PREREQ_XSTRTOUMAX): New file/macro.
|
||||
* jm-macros.m4: Use it.
|
||||
|
||||
1999-04-06 Jim Meyering <meyering@ascend.com>
|
||||
|
||||
* strftime.m4: Remove test for %f.
|
||||
|
||||
1999-03-29 Jim Meyering <meyering@ascend.com>
|
||||
|
||||
* jm-macros.m4 (jm_CHECK_ALL_TYPES): New macro, contains the
|
||||
superset of the AC_TYPE_* checks in the textutils, fileutils,
|
||||
and sh-utils, plus AC_TYPE_PID_T. Paul Eggert suggested adding
|
||||
AC_TYPE_PID_T.
|
||||
|
||||
1999-03-28 Jim Meyering <meyering@ascend.com>
|
||||
|
||||
* jm-macros.m4: Define GNU_PACKAGE here.
|
||||
Be sure to AC_SUBST it, once again, so that @GNU_PACKAGE@ is
|
||||
replaced e.g., in the *.sh files of the sh-utils.
|
||||
|
||||
1999-03-20 Jim Meyering <meyering@ascend.com>
|
||||
|
||||
* jm-macros.m4: s/jm_WITH_REGEX/jm_INCLUDED_REGEX/.
|
||||
* regex.m4 (jm_INCLUDED_REGEX): Rename from jm_WITH_REGEX.
|
||||
Don't depend on AM_GLIBC. Suggestions from Alain Magloire.
|
||||
|
||||
1999-03-19 Jim Meyering <meyering@ascend.com>
|
||||
|
||||
* jm-winsz1.m4 (jm_WINSIZE_IN_PTEM): New macro.
|
||||
|
||||
1999-03-12 Jim Meyering <meyering@ascend.com>
|
||||
|
||||
* jm-macros.m4: Use AC_FUNC_SETVBUF_REVERSED.
|
||||
|
||||
1999-03-07 Jim Meyering <meyering@ascend.com>
|
||||
|
||||
* jm-glibc-io.m4: Use only those *_unlocked macros that are declared.
|
||||
|
||||
1999-02-17 Jim Meyering <meyering@ascend.com>
|
||||
|
||||
* gettext.m4 (AM_GNU_GETTEXT): Do `changequote' around use of brackets
|
||||
in macro definition. From Eli Zaretskii and Alain Magloire.
|
||||
|
||||
1999-02-07 Jim Meyering <meyering@ascend.com>
|
||||
|
||||
* group-member.m4: New file -- extracted from sh-utils' configure.in.
|
||||
|
||||
1999-02-05 Eli Zaretskii <eliz@is.elta.co.il>
|
||||
* m4/gettext.m4: Support DOS-style d:/foo/bar absolute file names.
|
||||
|
||||
1999-02-06 Jim Meyering <meyering@ascend.com>
|
||||
|
||||
* chown.m4: Use `AC_SUBST(LIBOBJS)' since we set LIBOBJS.
|
||||
* fnmatch.m4: Likewise.
|
||||
* getgroups.m4: Likewise.
|
||||
* lstat.m4: Likewise.
|
||||
* malloc.m4: Likewise.
|
||||
* putenv.m4: Likewise.
|
||||
* realloc.m4: Likewise.
|
||||
* regex.m4: Likewise.
|
||||
* stat.m4: Likewise.
|
||||
* strftime.m4: Likewise.
|
||||
Suggestion from Alain Magloire.
|
||||
|
||||
* chown.m4: Use `.$ac_objext', not `.o'.
|
||||
* fnmatch.m4: Likewise.
|
||||
* getgroups.m4: Likewise.
|
||||
* getline.m4: Likewise.
|
||||
* lstat.m4: Likewise.
|
||||
* malloc.m4: Likewise.
|
||||
* memcmp.m4: Likewise.
|
||||
* putenv.m4: Likewise.
|
||||
* realloc.m4: Likewise.
|
||||
* regex.m4: Likewise.
|
||||
* stat.m4: Likewise.
|
||||
* strftime.m4: Likewise.
|
||||
Suggestion from Alain Magloire.
|
||||
|
||||
* jm-macros.m4: Actually invoke jm_WITH_REGEX now that it requires
|
||||
an argument.
|
||||
|
||||
* regex.m4: Add a run-time Test for proper operation of
|
||||
re_compile_pattern.
|
||||
|
||||
1999-01-31 Jim Meyering <meyering@ascend.com>
|
||||
|
||||
* getloadavg.m4: Check for locale.h and the function, setlocale.
|
||||
|
||||
1999-01-30 Jim Meyering <meyering@ascend.com>
|
||||
|
||||
* check-type.m4: Use 3-arg form of AC_DEFINE.
|
||||
|
||||
* jm-mktime.m4: Make this a wrapper around the official AM_FUNC_MKTIME
|
||||
rather than my private copy, now that the official one is up to date.
|
||||
* mktime.m4: Remove file.
|
||||
|
||||
* getloadavg.m4: Use 3-arg form of AC_DEFINE.
|
||||
* uptime.m4: Likewise.
|
||||
* uintmax_t.m4: Likewise.
|
||||
|
||||
1999-01-28 Jim Meyering <meyering@ascend.com>
|
||||
|
||||
* jm-macros.m4: Use jm_AFS.
|
||||
* afs.m4: New file (from fileutils' configure.in).
|
||||
|
||||
* assert.m4: Use the 3-argument forms of AC_DEFINE* macros.
|
||||
* chown.m4: Likewise.
|
||||
* d-ino.m4: Likewise.
|
||||
* d-type.m4: Likewise.
|
||||
* fnmatch.m4: Likewise.
|
||||
* getgroups.m4: Likewise.
|
||||
* gettext.m4: Likewise.
|
||||
* jm-mktime.m4: Likewise.
|
||||
* jm-winsz2.m4: Likewise.
|
||||
* lcmessage.m4: Likewise.
|
||||
* ls-mntd-fs.m4: Likewise.
|
||||
* malloc.m4: Likewise.
|
||||
* memcmp.m4: Likewise.
|
||||
* putenv.m4: Likewise.
|
||||
* realloc.m4: Likewise.
|
||||
* st_mtim.m4: Likewise.
|
||||
* strftime.m4: Likewise.
|
||||
|
||||
1999-01-16 Jim Meyering <meyering@ascend.com>
|
||||
|
||||
* jm-macros.m4 (ARGMATCH_DIE): Define.
|
||||
(ARGMATCH_DIE_DECL): Define.
|
||||
|
||||
1999-01-12 Jim Meyering <meyering@ascend.com>
|
||||
|
||||
* Makefile.am.in: Rewrite to avoid using fmt.
|
||||
Reported by Lars Hecking.
|
||||
|
||||
1999-01-10 Jim Meyering <meyering@ascend.com>
|
||||
|
||||
* fstypename.m4: Use the new 3-arg form of AC_DEFINE instead of my
|
||||
|
||||
@@ -1,22 +1,64 @@
|
||||
## Process this file with automake to produce Makefile.in -*-Makefile-*-
|
||||
|
||||
##m4-files-begin
|
||||
EXTRA_DIST = README Makefile.am.in assert.m4 check-decl.m4 check-type.m4 \
|
||||
chown.m4 const.m4 d-ino.m4 d-type.m4 decl.m4 error.m4 fnmatch.m4 \
|
||||
fstypename.m4 getgroups.m4 getline.m4 getloadavg.m4 gettext.m4 glibc.m4 \
|
||||
inttypes_h.m4 isc-posix.m4 jm-glibc-io.m4 jm-macros.m4 jm-mktime.m4 \
|
||||
jm-winsz1.m4 jm-winsz2.m4 lchown.m4 lcmessage.m4 lfs.m4 ls-mntd-fs.m4 \
|
||||
lstat.m4 malloc.m4 memcmp.m4 mktime.m4 perl.m4 prereq.m4 progtest.m4 \
|
||||
putenv.m4 readdir.m4 realloc.m4 regex.m4 st_dm_mode.m4 st_mtim.m4 stat.m4 \
|
||||
strftime.m4 uintmax_t.m4 uptime.m4 utimbuf.m4 utime.m4 utimes.m4
|
||||
|
||||
EXTRA_DIST = README Makefile.am.in \
|
||||
afs.m4 \
|
||||
assert.m4 \
|
||||
check-decl.m4 \
|
||||
check-type.m4 \
|
||||
chown.m4 \
|
||||
const.m4 \
|
||||
d-ino.m4 \
|
||||
d-type.m4 \
|
||||
decl.m4 \
|
||||
error.m4 \
|
||||
fnmatch.m4 \
|
||||
fstypename.m4 \
|
||||
getgroups.m4 \
|
||||
getline.m4 \
|
||||
getloadavg.m4 \
|
||||
gettext.m4 \
|
||||
glibc.m4 \
|
||||
group-member.m4 \
|
||||
inttypes_h.m4 \
|
||||
isc-posix.m4 \
|
||||
jm-glibc-io.m4 \
|
||||
jm-macros.m4 \
|
||||
jm-mktime.m4 \
|
||||
jm-winsz1.m4 \
|
||||
jm-winsz2.m4 \
|
||||
lchown.m4 \
|
||||
lcmessage.m4 \
|
||||
lfs.m4 \
|
||||
ls-mntd-fs.m4 \
|
||||
lstat.m4 \
|
||||
malloc.m4 \
|
||||
memcmp.m4 \
|
||||
perl.m4 \
|
||||
prereq.m4 \
|
||||
progtest.m4 \
|
||||
putenv.m4 \
|
||||
readdir.m4 \
|
||||
realloc.m4 \
|
||||
regex.m4 \
|
||||
st_dm_mode.m4 \
|
||||
st_mtim.m4 \
|
||||
stat.m4 \
|
||||
strftime.m4 \
|
||||
uintmax_t.m4 \
|
||||
ulonglong.m4 \
|
||||
uptime.m4 \
|
||||
utimbuf.m4 \
|
||||
utime.m4 \
|
||||
utimes.m4 \
|
||||
xstrtoumax.m4
|
||||
##m4-files-end
|
||||
|
||||
Makefile.am: Makefile.am.in
|
||||
rm -f $@ $@t
|
||||
sed -n '1,/^##m4-files-begin/p' $< > $@t
|
||||
echo EXTRA_DIST = README Makefile.am.in *.m4 \
|
||||
|fmt | (tr '\012' @; echo) \
|
||||
( (echo EXTRA_DIST = README Makefile.am.in | tr '\012' @); \
|
||||
(echo *.m4|tr ' ' @) ) \
|
||||
|sed 's/@$$/%/;s/@/ \\@/g' |tr @% '\012\012' \
|
||||
>> $@t
|
||||
sed -n '/^##m4-files-end/,$$p' $< >> $@t
|
||||
|
||||
@@ -6,8 +6,8 @@
|
||||
Makefile.am: Makefile.am.in
|
||||
rm -f $@ $@t
|
||||
sed -n '1,/^##m4-files-begin/p' $< > $@t
|
||||
echo EXTRA_DIST = README Makefile.am.in *.m4 \
|
||||
|fmt | (tr '\012' @; echo) \
|
||||
( (echo EXTRA_DIST = README Makefile.am.in | tr '\012' @); \
|
||||
(echo *.m4|tr ' ' @) ) \
|
||||
|sed 's/@$$/%/;s/@/ \\@/g' |tr @% '\012\012' \
|
||||
>> $@t
|
||||
sed -n '/^##m4-files-end/,$$p' $< >> $@t
|
||||
|
||||
164
m4/Makefile.in
164
m4/Makefile.in
@@ -1,6 +1,6 @@
|
||||
# Makefile.in generated automatically by automake 1.3b from Makefile.am
|
||||
# Makefile.in generated automatically by automake 1.4a from Makefile.am
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
|
||||
# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
@@ -10,8 +10,7 @@
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
|
||||
SHELL = /bin/sh
|
||||
SHELL = @SHELL@
|
||||
|
||||
srcdir = @srcdir@
|
||||
top_srcdir = @top_srcdir@
|
||||
@@ -49,6 +48,7 @@ INSTALL = @INSTALL@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
INSTALL_STRIP_FLAG =
|
||||
transform = @program_transform_name@
|
||||
|
||||
NORMAL_INSTALL = :
|
||||
@@ -57,15 +57,20 @@ POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
host_alias = @host_alias@
|
||||
host_triplet = @host@
|
||||
AMTAR = @AMTAR@
|
||||
AMTARFLAGS = @AMTARFLAGS@
|
||||
CATALOGS = @CATALOGS@
|
||||
CATOBJEXT = @CATOBJEXT@
|
||||
CC = @CC@
|
||||
CPP = @CPP@
|
||||
DATADIRNAME = @DATADIRNAME@
|
||||
DF_PROG = @DF_PROG@
|
||||
GENCAT = @GENCAT@
|
||||
GETCONF = @GETCONF@
|
||||
GMOFILES = @GMOFILES@
|
||||
GMSGFMT = @GMSGFMT@
|
||||
GNU_PACKAGE = @GNU_PACKAGE@
|
||||
GT_NO = @GT_NO@
|
||||
GT_YES = @GT_YES@
|
||||
INCLUDE_LOCALE_H = @INCLUDE_LOCALE_H@
|
||||
@@ -77,41 +82,84 @@ LIBOBJS = @LIBOBJS@
|
||||
MAKEINFO = @MAKEINFO@
|
||||
MKINSTALLDIRS = @MKINSTALLDIRS@
|
||||
MSGFMT = @MSGFMT@
|
||||
MVDIR_PROG = @MVDIR_PROG@
|
||||
PACKAGE = @PACKAGE@
|
||||
PERL = @PERL@
|
||||
POFILES = @POFILES@
|
||||
POSUB = @POSUB@
|
||||
POW_LIBM = @POW_LIBM@
|
||||
RANLIB = @RANLIB@
|
||||
U = @U@
|
||||
USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@
|
||||
USE_NLS = @USE_NLS@
|
||||
VERSION = @VERSION@
|
||||
YACC = @YACC@
|
||||
l = @l@
|
||||
|
||||
EXTRA_DIST = README Makefile.am.in assert.m4 check-decl.m4 check-type.m4 \
|
||||
chown.m4 const.m4 d-ino.m4 d-type.m4 decl.m4 error.m4 fnmatch.m4 \
|
||||
fstypename.m4 getgroups.m4 getline.m4 getloadavg.m4 gettext.m4 glibc.m4 \
|
||||
inttypes_h.m4 isc-posix.m4 jm-glibc-io.m4 jm-macros.m4 jm-mktime.m4 \
|
||||
jm-winsz1.m4 jm-winsz2.m4 lchown.m4 lcmessage.m4 lfs.m4 ls-mntd-fs.m4 \
|
||||
lstat.m4 malloc.m4 memcmp.m4 mktime.m4 perl.m4 prereq.m4 progtest.m4 \
|
||||
putenv.m4 readdir.m4 realloc.m4 regex.m4 st_dm_mode.m4 st_mtim.m4 stat.m4 \
|
||||
strftime.m4 uintmax_t.m4 uptime.m4 utimbuf.m4 utime.m4 utimes.m4
|
||||
|
||||
EXTRA_DIST = README Makefile.am.in \
|
||||
afs.m4 \
|
||||
assert.m4 \
|
||||
check-decl.m4 \
|
||||
check-type.m4 \
|
||||
chown.m4 \
|
||||
const.m4 \
|
||||
d-ino.m4 \
|
||||
d-type.m4 \
|
||||
decl.m4 \
|
||||
error.m4 \
|
||||
fnmatch.m4 \
|
||||
fstypename.m4 \
|
||||
getgroups.m4 \
|
||||
getline.m4 \
|
||||
getloadavg.m4 \
|
||||
gettext.m4 \
|
||||
glibc.m4 \
|
||||
group-member.m4 \
|
||||
inttypes_h.m4 \
|
||||
isc-posix.m4 \
|
||||
jm-glibc-io.m4 \
|
||||
jm-macros.m4 \
|
||||
jm-mktime.m4 \
|
||||
jm-winsz1.m4 \
|
||||
jm-winsz2.m4 \
|
||||
lchown.m4 \
|
||||
lcmessage.m4 \
|
||||
lfs.m4 \
|
||||
ls-mntd-fs.m4 \
|
||||
lstat.m4 \
|
||||
malloc.m4 \
|
||||
memcmp.m4 \
|
||||
perl.m4 \
|
||||
prereq.m4 \
|
||||
progtest.m4 \
|
||||
putenv.m4 \
|
||||
readdir.m4 \
|
||||
realloc.m4 \
|
||||
regex.m4 \
|
||||
st_dm_mode.m4 \
|
||||
st_mtim.m4 \
|
||||
stat.m4 \
|
||||
strftime.m4 \
|
||||
uintmax_t.m4 \
|
||||
ulonglong.m4 \
|
||||
uptime.m4 \
|
||||
utimbuf.m4 \
|
||||
utime.m4 \
|
||||
utimes.m4 \
|
||||
xstrtoumax.m4
|
||||
|
||||
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
|
||||
CONFIG_HEADER = ../config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
DIST_SOURCES =
|
||||
DIST_COMMON = README ChangeLog Makefile.am Makefile.in
|
||||
|
||||
|
||||
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
|
||||
|
||||
TAR = tar
|
||||
GZIP = --best
|
||||
all: Makefile
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
|
||||
GZIP_ENV = --best
|
||||
all: all-redirect
|
||||
.SUFFIXES:
|
||||
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
|
||||
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
|
||||
cd $(top_srcdir) && $(AUTOMAKE) --gnits m4/Makefile
|
||||
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES)
|
||||
@@ -134,27 +182,38 @@ distdir: $(DISTFILES)
|
||||
&& $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnits m4/Makefile
|
||||
@for file in $(DISTFILES); do \
|
||||
d=$(srcdir); \
|
||||
test -f $(distdir)/$$file \
|
||||
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \
|
||||
|| cp -p $$d/$$file $(distdir)/$$file; \
|
||||
if test -d $$d/$$file; then \
|
||||
cp -pr $$d/$$file $(distdir)/$$file; \
|
||||
else \
|
||||
test -f $(distdir)/$$file \
|
||||
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \
|
||||
|| cp -p $$d/$$file $(distdir)/$$file || :; \
|
||||
fi; \
|
||||
done
|
||||
info:
|
||||
dvi:
|
||||
check: all
|
||||
installcheck:
|
||||
install-exec:
|
||||
@$(NORMAL_INSTALL)
|
||||
|
||||
install-data:
|
||||
@$(NORMAL_INSTALL)
|
||||
info-am:
|
||||
info: info-am
|
||||
dvi-am:
|
||||
dvi: dvi-am
|
||||
check-am: all-am
|
||||
check: check-am
|
||||
installcheck-am:
|
||||
installcheck: installcheck-am
|
||||
install-exec-am:
|
||||
install-exec: install-exec-am
|
||||
|
||||
install: install-exec install-data all
|
||||
@:
|
||||
|
||||
uninstall:
|
||||
install-data-am:
|
||||
install-data: install-data-am
|
||||
|
||||
install-am: all-am
|
||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
||||
install: install-am
|
||||
uninstall-am:
|
||||
uninstall: uninstall-am
|
||||
all-am: Makefile
|
||||
all-redirect: all-am
|
||||
install-strip:
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' INSTALL_SCRIPT='$(INSTALL_PROGRAM)' install
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_STRIP_FLAG=-s install
|
||||
installdirs:
|
||||
|
||||
|
||||
@@ -167,28 +226,37 @@ distclean-generic:
|
||||
-rm -f config.cache config.log stamp-h stamp-h[0-9]*
|
||||
|
||||
maintainer-clean-generic:
|
||||
mostlyclean: mostlyclean-generic
|
||||
mostlyclean-am: mostlyclean-generic
|
||||
|
||||
clean: clean-generic mostlyclean
|
||||
mostlyclean: mostlyclean-am
|
||||
|
||||
distclean: distclean-generic clean
|
||||
-rm -f config.status
|
||||
clean-am: clean-generic mostlyclean-am
|
||||
|
||||
maintainer-clean: maintainer-clean-generic distclean
|
||||
clean: clean-am
|
||||
|
||||
distclean-am: distclean-generic clean-am
|
||||
|
||||
distclean: distclean-am
|
||||
|
||||
maintainer-clean-am: maintainer-clean-generic distclean-am
|
||||
@echo "This command is intended for maintainers to use;"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
|
||||
.PHONY: tags distdir info dvi installcheck install-exec install-data \
|
||||
install uninstall all installdirs mostlyclean-generic distclean-generic \
|
||||
clean-generic maintainer-clean-generic clean mostlyclean distclean \
|
||||
maintainer-clean
|
||||
maintainer-clean: maintainer-clean-am
|
||||
|
||||
.PHONY: tags distdir info-am info dvi-am dvi check check-am \
|
||||
installcheck-am installcheck install-exec-am install-exec \
|
||||
install-data-am install-data install-am install uninstall-am uninstall \
|
||||
all-redirect all-am all install-strip installdirs mostlyclean-generic \
|
||||
distclean-generic clean-generic maintainer-clean-generic clean \
|
||||
mostlyclean distclean maintainer-clean
|
||||
|
||||
|
||||
Makefile.am: Makefile.am.in
|
||||
rm -f $@ $@t
|
||||
sed -n '1,/^##m4-files-begin/p' $< > $@t
|
||||
echo EXTRA_DIST = README Makefile.am.in *.m4 \
|
||||
|fmt | (tr '\012' @; echo) \
|
||||
( (echo EXTRA_DIST = README Makefile.am.in | tr '\012' @); \
|
||||
(echo *.m4|tr ' ' @) ) \
|
||||
|sed 's/@$$/%/;s/@/ \\@/g' |tr @% '\012\012' \
|
||||
>> $@t
|
||||
sed -n '/^##m4-files-end/,$$p' $< >> $@t
|
||||
|
||||
7
m4/afs.m4
Normal file
7
m4/afs.m4
Normal file
@@ -0,0 +1,7 @@
|
||||
#serial 1
|
||||
|
||||
AC_DEFUN(jm_AFS,
|
||||
AC_CHECKING(for AFS)
|
||||
test -d /afs \
|
||||
&& AC_DEFINE(AFS, 1, [Define if you have the Andrew File System.])
|
||||
)
|
||||
10
m4/assert.m4
10
m4/assert.m4
@@ -1,13 +1,13 @@
|
||||
#serial 1
|
||||
#serial 2
|
||||
dnl based on code from Eleftherios Gkioulekas
|
||||
|
||||
AC_DEFUN(jm_ASSERT,
|
||||
[
|
||||
AC_MSG_CHECKING(whether to enable assertions)
|
||||
AC_ARG_ENABLE(assert,
|
||||
[ --disable-assert turn off assertions],
|
||||
[ AC_MSG_RESULT(no)
|
||||
AC_DEFINE(NDEBUG) ],
|
||||
[ AC_MSG_RESULT(yes) ]
|
||||
[ --disable-assert turn off assertions],
|
||||
[ AC_MSG_RESULT(no)
|
||||
AC_DEFINE(NDEBUG,1,[Define to 1 if assertions should be disabled.]) ],
|
||||
[ AC_MSG_RESULT(yes) ]
|
||||
)
|
||||
])
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
#serial 1
|
||||
#serial 2
|
||||
|
||||
dnl Just like AC_CHECK_TYPE from autoconf-2.12, but also checks in unistd.h
|
||||
dnl on systems that have it. Fujitsu UXP/V needs this for ssize_t.
|
||||
dnl Now, also uses the three-argument form of AC_DEFINE.
|
||||
|
||||
undefine([AC_CHECK_TYPE])
|
||||
dnl AC_CHECK_TYPE(TYPE, DEFAULT)
|
||||
@@ -23,6 +24,7 @@ changequote([,]), [#include <sys/types.h>
|
||||
#endif], ac_cv_type_$1=yes, ac_cv_type_$1=no)])dnl
|
||||
AC_MSG_RESULT($ac_cv_type_$1)
|
||||
if test $ac_cv_type_$1 = no; then
|
||||
AC_DEFINE($1, $2)
|
||||
AC_DEFINE($1, $2,
|
||||
[ Define to \`$2' if certain system header files doesn't define it.])
|
||||
fi
|
||||
])
|
||||
|
||||
13
m4/chown.m4
13
m4/chown.m4
@@ -1,14 +1,9 @@
|
||||
#serial 3
|
||||
#serial 4
|
||||
|
||||
dnl From Jim Meyering.
|
||||
dnl Determine whether chown accepts arguments of -1 for uid and gid.
|
||||
dnl If it doesn't, arrange to use the replacement function.
|
||||
dnl
|
||||
dnl If you use this macro in a package, you should
|
||||
dnl add the following two lines to acconfig.h:
|
||||
dnl /* Define to rpl_chown if the replacement function should be used. */
|
||||
dnl #undef chown
|
||||
dnl
|
||||
|
||||
AC_DEFUN(jm_FUNC_CHOWN,
|
||||
[AC_REQUIRE([AC_TYPE_UID_T])dnl
|
||||
@@ -47,7 +42,9 @@ AC_DEFUN(jm_FUNC_CHOWN,
|
||||
jm_cv_func_working_chown=no)
|
||||
])
|
||||
if test $jm_cv_func_working_chown = no; then
|
||||
LIBOBJS="$LIBOBJS chown.o"
|
||||
AC_DEFINE_UNQUOTED(chown, rpl_chown)
|
||||
AC_SUBST(LIBOBJS)
|
||||
LIBOBJS="$LIBOBJS chown.$ac_objext"
|
||||
AC_DEFINE_UNQUOTED(chown, rpl_chown,
|
||||
[Define to rpl_chown if the replacement function should be used.])
|
||||
fi
|
||||
])
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#serial 1
|
||||
#serial 2
|
||||
|
||||
dnl From Jim Meyering.
|
||||
dnl
|
||||
@@ -34,7 +34,9 @@ AC_DEFUN(jm_STRUCT_DIRENT_D_INO,
|
||||
]
|
||||
)
|
||||
if test $jm_cv_struct_dirent_d_ino = yes; then
|
||||
AC_DEFINE(D_INO_IN_DIRENT)
|
||||
AC_DEFINE(D_INO_IN_DIRENT, 1,
|
||||
[Define if there is a member named d_ino in the struct describing
|
||||
directory headers.])
|
||||
fi
|
||||
]
|
||||
)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#serial 1
|
||||
#serial 2
|
||||
|
||||
dnl From Jim Meyering.
|
||||
dnl
|
||||
@@ -34,7 +34,9 @@ AC_DEFUN(jm_STRUCT_DIRENT_D_TYPE,
|
||||
]
|
||||
)
|
||||
if test $jm_cv_struct_dirent_d_type = yes; then
|
||||
AC_DEFINE(D_TYPE_IN_DIRENT)
|
||||
AC_DEFINE(D_TYPE_IN_DIRENT, 1,
|
||||
[Define if there is a member named d_type in the struct describing
|
||||
directory headers.])
|
||||
fi
|
||||
]
|
||||
)
|
||||
|
||||
@@ -1,13 +1,8 @@
|
||||
#serial 1
|
||||
#serial 2
|
||||
|
||||
dnl Determine whether to add fnmatch.o to LIBOBJS and to
|
||||
dnl define fnmatch to rpl_fnmatch.
|
||||
dnl
|
||||
dnl If you use this macro in a package, you should
|
||||
dnl add the following two lines to acconfig.h:
|
||||
dnl /* Define to rpl_fnmatch if the replacement function should be used. */
|
||||
dnl #undef fnmatch
|
||||
dnl
|
||||
|
||||
AC_DEFUN(jm_FUNC_FNMATCH,
|
||||
[
|
||||
@@ -15,7 +10,9 @@ AC_DEFUN(jm_FUNC_FNMATCH,
|
||||
AC_FUNC_FNMATCH
|
||||
if test $ac_cv_func_fnmatch_works = no \
|
||||
&& test $ac_cv_gnu_library = no; then
|
||||
LIBOBJS="$LIBOBJS fnmatch.o"
|
||||
AC_DEFINE_UNQUOTED(fnmatch, rpl_fnmatch)
|
||||
AC_SUBST(LIBOBJS)
|
||||
LIBOBJS="$LIBOBJS fnmatch.$ac_objext"
|
||||
AC_DEFINE_UNQUOTED(fnmatch, rpl_fnmatch,
|
||||
[Define to rpl_fnmatch if the replacement function should be used.])
|
||||
fi
|
||||
])
|
||||
|
||||
@@ -1,10 +1,6 @@
|
||||
#serial 2
|
||||
#serial 3
|
||||
|
||||
dnl From Jim Meyering.
|
||||
dnl If you use this macro in a package, you should
|
||||
dnl add the following two lines to acconfig.h:
|
||||
dnl /* Define to rpl_getgroups if the replacement function should be used. */
|
||||
dnl #undef getgroups
|
||||
dnl
|
||||
dnl Invoking code should check $GETGROUPS_LIB something like this:
|
||||
dnl jm_FUNC_GETGROUPS
|
||||
@@ -42,8 +38,10 @@ AC_DEFUN(jm_FUNC_GETGROUPS,
|
||||
jm_cv_func_working_getgroups=no)
|
||||
])
|
||||
if test $jm_cv_func_working_getgroups = no; then
|
||||
LIBOBJS="$LIBOBJS getgroups.o"
|
||||
AC_DEFINE_UNQUOTED(getgroups, rpl_getgroups)
|
||||
AC_SUBST(LIBOBJS)
|
||||
LIBOBJS="$LIBOBJS getgroups.$ac_objext"
|
||||
AC_DEFINE_UNQUOTED(getgroups, rpl_getgroups,
|
||||
[Define as rpl_getgroups if getgroups doesn't work right.])
|
||||
fi
|
||||
fi
|
||||
])
|
||||
|
||||
@@ -39,7 +39,7 @@ AC_DEFUN(AM_FUNC_GETLINE,
|
||||
fi
|
||||
|
||||
if test $am_cv_func_working_getline = no; then
|
||||
LIBOBJS="$LIBOBJS getline.o"
|
||||
LIBOBJS="$LIBOBJS getline.$ac_objext"
|
||||
AC_SUBST(LIBOBJS)dnl
|
||||
fi
|
||||
])
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#serial 3
|
||||
#serial 4
|
||||
|
||||
AC_DEFUN(AM_FUNC_GETLOADAVG,
|
||||
[ac_have_func=no # yes means we've found a way to get the load average.
|
||||
@@ -40,13 +40,16 @@ if test $ac_cv_func_getloadavg = yes; then
|
||||
AC_DEFINE(HAVE_GETLOADAVG)
|
||||
ac_have_func=yes
|
||||
else
|
||||
AC_DEFINE(C_GETLOADAVG)
|
||||
AC_DEFINE(C_GETLOADAVG, 1, [Define if using getloadavg.c.])
|
||||
# Figure out what our getloadavg.c needs.
|
||||
ac_have_func=no
|
||||
AC_CHECK_HEADER(sys/dg_sys_info.h,
|
||||
[ac_have_func=yes; AC_DEFINE(DGUX)
|
||||
AC_CHECK_LIB(dgc, dg_sys_info)])
|
||||
|
||||
AC_CHECK_HEADER(locale.h)
|
||||
AC_CHECK_FUNCS(setlocale)
|
||||
|
||||
# We cannot check for <dwarf.h>, because Solaris 2 does not use dwarf (it
|
||||
# uses stabs), but it is still SVR4. We cannot check for <elf.h> because
|
||||
# Irix 4.0.5F has the header but not the library.
|
||||
|
||||
@@ -6,7 +6,9 @@
|
||||
# but which still want to provide support for the GNU gettext functionality.
|
||||
# Please note that the actual code is *not* freely available.
|
||||
|
||||
# serial 105
|
||||
# serial 106
|
||||
|
||||
AC_PREREQ(2.13) dnl Minimum Autoconf version required.
|
||||
|
||||
AC_DEFUN(AM_WITH_NLS,
|
||||
[AC_MSG_CHECKING([whether NLS is requested])
|
||||
@@ -21,7 +23,7 @@ AC_DEFUN(AM_WITH_NLS,
|
||||
|
||||
dnl If we use NLS figure out what method
|
||||
if test "$USE_NLS" = "yes"; then
|
||||
AC_DEFINE(ENABLE_NLS)
|
||||
AC_DEFINE(ENABLE_NLS, 1, [Define to 1 if NLS is requested.])
|
||||
AC_MSG_CHECKING([whether included gettext is requested])
|
||||
AC_ARG_WITH(included-gettext,
|
||||
[ --with-included-gettext use the GNU gettext library included here],
|
||||
@@ -61,7 +63,8 @@ AC_DEFUN(AM_WITH_NLS,
|
||||
|
||||
if test "$gt_cv_func_gettext_libc" = "yes" \
|
||||
|| test "$gt_cv_func_gettext_libintl" = "yes"; then
|
||||
AC_DEFINE(HAVE_GETTEXT)
|
||||
AC_DEFINE(HAVE_GETTEXT, 1,
|
||||
[Define to 1 if you have gettext and don't want to use GNU gettext.])
|
||||
AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
|
||||
[test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], no)dnl
|
||||
if test "$MSGFMT" != "no"; then
|
||||
@@ -91,7 +94,8 @@ AC_DEFUN(AM_WITH_NLS,
|
||||
dnl No gettext in C library. Try catgets next.
|
||||
AC_CHECK_LIB(i, main)
|
||||
AC_CHECK_FUNC(catgets,
|
||||
[AC_DEFINE(HAVE_CATGETS)
|
||||
[AC_DEFINE(HAVE_CATGETS, 1,
|
||||
[Define as 1 if you have catgets and don't want to use GNU gettext.])
|
||||
INTLOBJS="\$(CATOBJS)"
|
||||
AC_PATH_PROG(GENCAT, gencat, no)dnl
|
||||
if test "$GENCAT" != "no"; then
|
||||
@@ -224,7 +228,7 @@ strdup __argz_count __argz_stringify __argz_next])
|
||||
AC_CHECK_FUNCS(stpcpy)
|
||||
fi
|
||||
if test "${ac_cv_func_stpcpy}" = "yes"; then
|
||||
AC_DEFINE(HAVE_STPCPY)
|
||||
AC_DEFINE(HAVE_STPCPY, 1, [Define to 1 if you have the stpcpy function.])
|
||||
fi
|
||||
|
||||
AM_LC_MESSAGES
|
||||
@@ -310,11 +314,13 @@ strdup __argz_count __argz_stringify __argz_next])
|
||||
dnl be included in po/Makefile.
|
||||
test -d po || mkdir po
|
||||
if test "x$srcdir" != "x."; then
|
||||
if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then
|
||||
changequote(, )dnl
|
||||
if test "x`echo $srcdir | sed -e 's@^[A-z]:@@' -e 's@/.*@@'`" = "x"; then
|
||||
posrcprefix="$srcdir/"
|
||||
else
|
||||
posrcprefix="../$srcdir/"
|
||||
fi
|
||||
changequote([, ])dnl
|
||||
else
|
||||
posrcprefix="../"
|
||||
fi
|
||||
|
||||
12
m4/group-member.m4
Normal file
12
m4/group-member.m4
Normal file
@@ -0,0 +1,12 @@
|
||||
#serial 1
|
||||
|
||||
dnl Written by Jim Meyering
|
||||
|
||||
AC_DEFUN(jm_FUNC_GROUP_MEMBER,
|
||||
[
|
||||
dnl Do this replacement check manually because I want the hyphen
|
||||
dnl (not the underscore) in the filename.
|
||||
AC_CHECK_FUNC(group_member, , [LIBOBJS="$LIBOBJS group-member.$ac_objext"])
|
||||
AC_SUBST(LIBOBJS)
|
||||
]
|
||||
)
|
||||
@@ -1,23 +1,28 @@
|
||||
#serial 1
|
||||
#serial 2
|
||||
|
||||
dnl From Jim Meyering.
|
||||
dnl
|
||||
dnl See if the glibc *_unlocked I/O macros are available.
|
||||
dnl Use only those *_unlocked macros that are declared.
|
||||
dnl
|
||||
|
||||
AC_DEFUN(jm_FUNC_GLIBC_UNLOCKED_IO,
|
||||
[AC_CHECK_FUNCS( \
|
||||
clearerr_unlocked \
|
||||
feof_unlocked \
|
||||
ferror_unlocked \
|
||||
fflush_unlocked \
|
||||
fputc_unlocked \
|
||||
fread_unlocked \
|
||||
fwrite_unlocked \
|
||||
getc_unlocked \
|
||||
getchar_unlocked \
|
||||
putc_unlocked \
|
||||
putchar_unlocked \
|
||||
)
|
||||
[
|
||||
io_functions='clearerr_unlocked feof_unlocked ferror_unlocked
|
||||
fflush_unlocked fputc_unlocked fread_unlocked fwrite_unlocked
|
||||
getc_unlocked getchar_unlocked putc_unlocked putchar_unlocked'
|
||||
for jm_io_func in $io_functions; do
|
||||
# Check for the existence of each function only if its declared.
|
||||
# Otherwise, we'd get the Solaris5.5.1 functions that are not
|
||||
# declared, and that have been removed from Solaris5.6. The resulting
|
||||
# 5.5.1 binaries would not run on 5.6 due to shared library differences.
|
||||
jm_CHECK_DECLARATIONS([#include <stdio.h>
|
||||
], $jm_io_func,
|
||||
jm_declared=yes,
|
||||
jm_declared=no)
|
||||
if test $jm_declared = yes; then
|
||||
AC_CHECK_FUNCS($jm_io_func)
|
||||
fi
|
||||
done
|
||||
]
|
||||
)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#serial 3
|
||||
#serial 7
|
||||
|
||||
dnl Misc type-related macros for fileutils, sh-utils, textutils.
|
||||
|
||||
@@ -6,14 +6,18 @@ AC_DEFUN(jm_MACROS,
|
||||
[
|
||||
AC_PREREQ(2.13) dnl Minimum Autoconf version required.
|
||||
|
||||
GNU_PACKAGE="GNU $PACKAGE"
|
||||
AC_DEFINE_UNQUOTED(GNU_PACKAGE, "$GNU_PACKAGE",
|
||||
[The concatenation of the strings \`GNU ', and PACKAGE.])
|
||||
AC_SUBST(GNU_PACKAGE)
|
||||
|
||||
dnl This macro actually runs replacement code. See isc-posix.m4.
|
||||
AC_REQUIRE([AC_ISC_POSIX])dnl
|
||||
|
||||
AC_REQUIRE([jm_WITH_REGEX])
|
||||
jm_INCLUDED_REGEX([lib/regex.c])
|
||||
|
||||
AC_REQUIRE([jm_ASSERT])
|
||||
AC_REQUIRE([jm_AC_HEADER_INTTYPES_H])
|
||||
AC_REQUIRE([jm_AC_TYPE_UINTMAX_T])
|
||||
AC_CHECK_TYPE(ssize_t, int)
|
||||
AC_REQUIRE([jm_STRUCT_UTIMBUF])
|
||||
AC_REQUIRE([jm_STRUCT_DIRENT_D_TYPE])
|
||||
AC_REQUIRE([jm_STRUCT_DIRENT_D_INO])
|
||||
@@ -32,5 +36,33 @@ AC_DEFUN(jm_MACROS,
|
||||
AC_REQUIRE([jm_FUNC_MEMCMP])
|
||||
AC_REQUIRE([jm_FUNC_GLIBC_UNLOCKED_IO])
|
||||
AC_REQUIRE([jm_FUNC_FNMATCH])
|
||||
AC_REQUIRE([jm_AFS])
|
||||
AC_REQUIRE([jm_AC_PREREQ_XSTRTOUMAX])
|
||||
AC_REPLACE_FUNCS(strcasecmp strncasecmp)
|
||||
AC_REPLACE_FUNCS(dup2)
|
||||
|
||||
# By default, argmatch should fail calling usage (1).
|
||||
AC_DEFINE(ARGMATCH_DIE, [usage (1)],
|
||||
[Define to the function xargmatch calls on failures.])
|
||||
AC_DEFINE(ARGMATCH_DIE_DECL, [extern void usage ()],
|
||||
[Define to the declaration of the xargmatch failure function.])
|
||||
|
||||
dnl Used to define SETVBUF in sys2.h.
|
||||
AC_FUNC_SETVBUF_REVERSED
|
||||
|
||||
])
|
||||
|
||||
AC_DEFUN(jm_CHECK_ALL_TYPES,
|
||||
[
|
||||
AC_TYPE_GETGROUPS
|
||||
AC_TYPE_MODE_T
|
||||
AC_TYPE_OFF_T
|
||||
AC_TYPE_PID_T
|
||||
AC_TYPE_SIGNAL
|
||||
AC_TYPE_SIZE_T
|
||||
AC_TYPE_UID_T
|
||||
AC_CHECK_TYPE(ino_t, unsigned long)
|
||||
AC_CHECK_TYPE(ssize_t, int)
|
||||
AC_REQUIRE([jm_AC_TYPE_UINTMAX_T])
|
||||
AC_REQUIRE([jm_AC_TYPE_UNSIGNED_LONG_LONG])
|
||||
])
|
||||
|
||||
@@ -1,18 +1,16 @@
|
||||
#serial 3
|
||||
#serial 5
|
||||
|
||||
dnl From Jim Meyering.
|
||||
dnl If you use this macro in a package, you should
|
||||
dnl add the following two lines to acconfig.h:
|
||||
dnl /* Define to rpl_mktime if the replacement function should be used. */
|
||||
dnl #undef mktime
|
||||
dnl
|
||||
dnl A wrapper around AM_FUNC_MKTIME.
|
||||
|
||||
AC_DEFUN(jm_FUNC_MKTIME,
|
||||
[AC_REQUIRE([jm_AM_FUNC_MKTIME])dnl
|
||||
[AC_REQUIRE([AM_FUNC_MKTIME])dnl
|
||||
|
||||
dnl mktime.c uses localtime_r if it exists. Check for it.
|
||||
AC_CHECK_FUNCS(localtime_r)
|
||||
|
||||
if test $jm_am_cv_func_working_mktime = no; then
|
||||
AC_DEFINE_UNQUOTED(mktime, rpl_mktime)
|
||||
if test $am_cv_func_working_mktime = no; then
|
||||
AC_DEFINE_UNQUOTED(mktime, rpl_mktime,
|
||||
[Define to gnu_mktime if the replacement function should be used.])
|
||||
fi
|
||||
])
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
dnl From Jim Meyering.
|
||||
#serial 1
|
||||
#serial 2
|
||||
AC_DEFUN(jm_HEADER_TIOCGWINSZ_IN_TERMIOS_H,
|
||||
[AC_REQUIRE([AM_SYS_POSIX_TERMIOS])
|
||||
AC_CACHE_CHECK([whether use of TIOCGWINSZ requires termios.h],
|
||||
@@ -17,3 +17,10 @@ AC_DEFUN(jm_HEADER_TIOCGWINSZ_IN_TERMIOS_H,
|
||||
fi
|
||||
])
|
||||
])
|
||||
|
||||
AC_DEFUN(jm_WINSIZE_IN_PTEM,
|
||||
[AC_CHECK_HEADER([sys/ptem.h],
|
||||
AC_DEFINE(WINSIZE_IN_PTEM, 1,
|
||||
[Define if your system defines \`struct winsize' in sys/ptem.h.]))
|
||||
]
|
||||
)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#serial 2
|
||||
#serial 3
|
||||
|
||||
AC_DEFUN(jm_HEADER_TIOCGWINSZ_NEEDS_SYS_IOCTL,
|
||||
[AC_REQUIRE([jm_HEADER_TIOCGWINSZ_IN_TERMIOS_H])
|
||||
@@ -17,6 +17,7 @@ AC_DEFUN(jm_HEADER_TIOCGWINSZ_NEEDS_SYS_IOCTL,
|
||||
fi
|
||||
])
|
||||
if test $jm_cv_sys_tiocgwinsz_needs_sys_ioctl_h = yes; then
|
||||
AC_DEFINE(GWINSZ_IN_SYS_IOCTL)
|
||||
AC_DEFINE(GWINSZ_IN_SYS_IOCTL, 1,
|
||||
[Define if your system defines TIOCGWINSZ in sys/ioctl.h.])
|
||||
fi
|
||||
])
|
||||
|
||||
@@ -6,7 +6,9 @@
|
||||
# but which still want to provide support for the GNU gettext functionality.
|
||||
# Please note that the actual code is *not* freely available.
|
||||
|
||||
# serial 1
|
||||
# serial 2
|
||||
|
||||
AC_PREREQ(2.13) dnl Minimum Autoconf version required.
|
||||
|
||||
AC_DEFUN(AM_LC_MESSAGES,
|
||||
[if test $ac_cv_header_locale_h = yes; then
|
||||
@@ -14,6 +16,7 @@ AC_DEFUN(AM_LC_MESSAGES,
|
||||
[AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES],
|
||||
am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)])
|
||||
if test $am_cv_val_LC_MESSAGES = yes; then
|
||||
AC_DEFINE(HAVE_LC_MESSAGES)
|
||||
AC_DEFINE(HAVE_LC_MESSAGES, 1,
|
||||
[Define if your locale.h file contains LC_MESSAGES.])
|
||||
fi
|
||||
fi])
|
||||
|
||||
143
m4/lfs.m4
143
m4/lfs.m4
@@ -1,4 +1,4 @@
|
||||
#serial 2
|
||||
#serial 3
|
||||
|
||||
dnl The problem is that the default compilation flags in Solaris 2.6 won't
|
||||
dnl let programs access large files; you need to tell the compiler that
|
||||
@@ -8,50 +8,99 @@ dnl http://www.sas.com/standards/large.file/x_open.20Mar96.html
|
||||
|
||||
dnl Written by Paul Eggert <eggert@twinsun.com>.
|
||||
|
||||
dnl Internal subroutine of AC_LFS.
|
||||
dnl AC_LFS_FLAGS(FLAGSNAME)
|
||||
AC_DEFUN(AC_LFS_FLAGS,
|
||||
[AC_CACHE_CHECK([for $1 value to request large file support], ac_cv_lfs_$1,
|
||||
[ac_cv_lfs_$1=`($GETCONF LFS_$1) 2>/dev/null` || {
|
||||
ac_cv_lfs_$1=no
|
||||
ifelse($1, CFLAGS,
|
||||
[case "$host_os" in
|
||||
# IRIX 6.2 and later
|
||||
irix6.[[2-9]]* | irix6.1[[0-9]]* | irix[[7-9]].* | irix[[1-9]][[0-9]]*)
|
||||
if test "$GCC" != yes; then
|
||||
ac_cv_lfs_CFLAGS=-n32
|
||||
fi
|
||||
ac_save_CC="$CC"
|
||||
CC="$ac_save_CC $ac_cv_lfs_CFLAGS"
|
||||
AC_TRY_LINK(, , , ac_cv_lfs_CFLAGS=no)
|
||||
CC="$ac_save_CC"
|
||||
esac])
|
||||
}])])
|
||||
|
||||
dnl Internal subroutine of AC_LFS.
|
||||
dnl AC_LFS_SPACE_APPEND(VAR, VAL)
|
||||
AC_DEFUN(AC_LFS_SPACE_APPEND,
|
||||
[case $2 in
|
||||
no) ;;
|
||||
?*)
|
||||
case "[$]$1" in
|
||||
'') $1=$2 ;;
|
||||
*) $1=[$]$1' '$2 ;;
|
||||
esac ;;
|
||||
esac])
|
||||
|
||||
dnl Internal subroutine of AC_LFS.
|
||||
dnl AC_LFS_MACRO_VALUE(C-MACRO, CACHE-VAR, COMMENT, CODE-TO-SET-DEFAULT)
|
||||
AC_DEFUN(AC_LFS_MACRO_VALUE,
|
||||
[AC_CACHE_CHECK([for $1], $2,
|
||||
[[$2=no
|
||||
$4
|
||||
for ac_flag in $ac_cv_lfs_CFLAGS no; do
|
||||
case "$ac_flag" in
|
||||
-D$1)
|
||||
$2=1 ;;
|
||||
-D$1=*)
|
||||
$2=`expr " $ac_flag" : '[^=]*=\(.*\)'` ;;
|
||||
esac
|
||||
done]])
|
||||
if test "[$]$2" != no; then
|
||||
AC_DEFINE_UNQUOTED([$1], [$]$2, [$3])
|
||||
fi])
|
||||
|
||||
AC_DEFUN(AC_LFS,
|
||||
[dnl
|
||||
# If available, prefer support for large files unless the user specified
|
||||
# one of the CPPFLAGS, LDFLAGS, or LIBS variables.
|
||||
AC_MSG_CHECKING(whether large file support needs explicit enabling)
|
||||
ac_getconfs=''
|
||||
ac_result=yes
|
||||
ac_set=''
|
||||
ac_shellvars='CPPFLAGS LDFLAGS LIBS'
|
||||
for ac_shellvar in $ac_shellvars; do
|
||||
case $ac_shellvar in
|
||||
CPPFLAGS) ac_lfsvar=LFS_CFLAGS ;;
|
||||
*) ac_lfsvar=LFS_$ac_shellvar ;;
|
||||
esac
|
||||
eval test '"${'$ac_shellvar'+set}"' = set && ac_set=$ac_shellvar
|
||||
(getconf $ac_lfsvar) >/dev/null 2>&1 || { ac_result=no; break; }
|
||||
ac_getconf=`getconf $ac_lfsvar`
|
||||
ac_getconfs=$ac_getconfs$ac_getconf
|
||||
eval ac_test_$ac_shellvar=\$ac_getconf
|
||||
done
|
||||
case "$ac_result" in
|
||||
no)
|
||||
case "`(uname -s -r) 2>/dev/null`" in
|
||||
HP-UX' '?.10.[[2-9]][[0-9]]* | HP-UX' '?.1[[1-9]]* | HP-UX' '?.[[2-9]][[0-9]]*)
|
||||
# HP-UX 10.20 and later support large files,
|
||||
# but do not support `getconf LFS_CFLAGS'.
|
||||
ac_test_CPPFLAGS='-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
|
||||
ac_test_LDFLAGS=
|
||||
ac_test_LIBS=
|
||||
ac_getconfs=nonempty
|
||||
ac_result=yes ;;
|
||||
esac ;;
|
||||
esac
|
||||
case "$ac_result$ac_getconfs" in
|
||||
yes) ac_result=no ;;
|
||||
esac
|
||||
case "$ac_result$ac_set" in
|
||||
yes?*) ac_result="yes, but $ac_set is already set, so use its settings"
|
||||
esac
|
||||
AC_MSG_RESULT($ac_result)
|
||||
case $ac_result in
|
||||
yes)
|
||||
for ac_shellvar in $ac_shellvars; do
|
||||
eval $ac_shellvar=\$ac_test_$ac_shellvar
|
||||
done ;;
|
||||
esac
|
||||
])
|
||||
[AC_REQUIRE([AC_CANONICAL_HOST])
|
||||
AC_ARG_ENABLE(lfs,
|
||||
[ --disable-lfs omit Large File Support])
|
||||
if test "$enable_lfs" != no; then
|
||||
AC_CHECK_TOOL(GETCONF, getconf)
|
||||
AC_LFS_FLAGS(CFLAGS)
|
||||
AC_LFS_FLAGS(LDFLAGS)
|
||||
AC_LFS_FLAGS(LIBS)
|
||||
for ac_flag in $ac_cv_lfs_CFLAGS no; do
|
||||
case "$ac_flag" in
|
||||
no) ;;
|
||||
-D_FILE_OFFSET_BITS=*) ;;
|
||||
-D_LARGEFILE_SOURCE | -D_LARGEFILE_SOURCE=*) ;;
|
||||
-D_LARGE_FILES | -D_LARGE_FILES=*) ;;
|
||||
-[[DI]]?*)
|
||||
AC_LFS_SPACE_APPEND(CPPFLAGS, "$ac_flag") ;;
|
||||
*)
|
||||
AC_LFS_SPACE_APPEND(CFLAGS, "$ac_flag") ;;
|
||||
esac
|
||||
done
|
||||
AC_LFS_SPACE_APPEND(LDFLAGS, "$ac_cv_lfs_LDFLAGS")
|
||||
AC_LFS_SPACE_APPEND(LIBS, "$ac_cv_lfs_LIBS")
|
||||
AC_LFS_MACRO_VALUE(_FILE_OFFSET_BITS, ac_cv_file_offset_bits,
|
||||
[Number of bits in a file offset, on hosts where this is settable. ],
|
||||
[case "$host_os" in
|
||||
# HP-UX 10.20 and later
|
||||
hpux10.[2-9][0-9]* | hpux1[1-9]* | hpux[2-9][0-9]*)
|
||||
ac_cv_file_offset_bits=64 ;;
|
||||
esac])
|
||||
AC_LFS_MACRO_VALUE(_LARGEFILE_SOURCE, ac_cv_largefile_source,
|
||||
[Define to make fseeko etc. visible, on some hosts. ],
|
||||
[case "$host_os" in
|
||||
# HP-UX 10.20 and later
|
||||
hpux10.[2-9][0-9]* | hpux1[1-9]* | hpux[2-9][0-9]*)
|
||||
ac_cv_largefile_source=1 ;;
|
||||
esac])
|
||||
AC_LFS_MACRO_VALUE(_LARGE_FILES, ac_cv_large_files,
|
||||
[Define for large files, on AIX-style hosts. ],
|
||||
[case "$host_os" in
|
||||
# AIX 4.2 and later
|
||||
aix4.[2-9]* | aix4.1[0-9]* | aix[5-9].* | aix[1-9][0-9]*)
|
||||
ac_cv_large_files=1 ;;
|
||||
esac])
|
||||
fi
|
||||
])
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#serial 1
|
||||
#serial 2
|
||||
|
||||
dnl From Jim Meyering.
|
||||
dnl
|
||||
@@ -46,7 +46,9 @@ yes
|
||||
AC_MSG_RESULT($fu_cv_sys_mounted_cray_listmntent)
|
||||
if test $fu_cv_sys_mounted_cray_listmntent = yes; then
|
||||
list_mounted_fs=found
|
||||
AC_DEFINE(MOUNTED_LISTMNTENT)
|
||||
AC_DEFINE(MOUNTED_LISTMNTENT, 1,
|
||||
[Define if there is a function named listmntent that can be used to
|
||||
list all mounted filesystems. (UNICOS)])
|
||||
fi
|
||||
fi
|
||||
|
||||
@@ -65,7 +67,10 @@ if test $ac_cv_func_getmntent = yes; then
|
||||
AC_MSG_RESULT($fu_cv_sys_mounted_getmntent1)
|
||||
if test $fu_cv_sys_mounted_getmntent1 = yes; then
|
||||
list_mounted_fs=found
|
||||
AC_DEFINE(MOUNTED_GETMNTENT1)
|
||||
AC_DEFINE(MOUNTED_GETMNTENT1, 1,
|
||||
[Define if there is a function named getmntent for reading the list
|
||||
of mounted filesystems, and that function takes a single argument.
|
||||
(4.3BSD, SunOS, HP-UX, Dynix, Irix)])
|
||||
fi
|
||||
fi
|
||||
|
||||
@@ -79,7 +84,9 @@ if test $ac_cv_func_getmntent = yes; then
|
||||
AC_MSG_RESULT($fu_cv_sys_mounted_getmntent2)
|
||||
if test $fu_cv_sys_mounted_getmntent2 = yes; then
|
||||
list_mounted_fs=found
|
||||
AC_DEFINE(MOUNTED_GETMNTENT2)
|
||||
AC_DEFINE(MOUNTED_GETMNTENT2, 1,
|
||||
[Define if there is a function named getmntent for reading the list of
|
||||
mounted filesystems, and that function takes two arguments. (SVR4)])
|
||||
fi
|
||||
fi
|
||||
|
||||
@@ -104,7 +111,9 @@ if test -z "$list_mounted_fs"; then
|
||||
AC_MSG_RESULT($fu_cv_sys_mounted_getsstat)
|
||||
if test $fu_cv_sys_mounted_getsstat = yes; then
|
||||
list_mounted_fs=found
|
||||
AC_DEFINE(MOUNTED_GETFSSTAT)
|
||||
AC_DEFINE(MOUNTED_GETFSSTAT, 1,
|
||||
[Define if there is a function named getfsstat for reading the
|
||||
list of mounted filesystems. (DEC Alpha running OSF/1)])
|
||||
fi
|
||||
fi
|
||||
|
||||
@@ -118,7 +127,10 @@ if test -z "$list_mounted_fs"; then
|
||||
AC_MSG_RESULT($fu_cv_sys_mounted_vmount)
|
||||
if test $fu_cv_sys_mounted_vmount = yes; then
|
||||
list_mounted_fs=found
|
||||
AC_DEFINE(MOUNTED_VMOUNT)
|
||||
AC_DEFINE(MOUNTED_VMOUNT, 1,
|
||||
[Define if there is a function named mntctl that can be used to read
|
||||
the list of mounted filesystems, and there is a system header file
|
||||
that declares \`struct vmount.' (AIX)])
|
||||
fi
|
||||
fi
|
||||
|
||||
@@ -135,7 +147,10 @@ if test -z "$list_mounted_fs"; then
|
||||
AC_MSG_RESULT($fu_cv_sys_mounted_fread_fstyp)
|
||||
if test $fu_cv_sys_mounted_fread_fstyp = yes; then
|
||||
list_mounted_fs=found
|
||||
AC_DEFINE(MOUNTED_FREAD_FSTYP)
|
||||
AC_DEFINE(MOUNTED_FREAD_FSTYP, 1,
|
||||
[Define if (like SVR2) there is no specific function for reading the
|
||||
list of mounted filesystems, and your system has these header files:
|
||||
<sys/fstyp.h> and <sys/statfs.h>. (SVR3)])
|
||||
fi
|
||||
fi
|
||||
|
||||
@@ -156,7 +171,9 @@ if test -z "$list_mounted_fs"; then
|
||||
AC_MSG_RESULT($fu_cv_sys_mounted_getmntinfo)
|
||||
if test $fu_cv_sys_mounted_getmntinfo = yes; then
|
||||
list_mounted_fs=found
|
||||
AC_DEFINE(MOUNTED_GETMNTINFO)
|
||||
AC_DEFINE(MOUNTED_GETMNTINFO, 1,
|
||||
[Define if there is a function named getmntinfo for reading the
|
||||
list of mounted filesystems. (4.4BSD)])
|
||||
fi
|
||||
fi
|
||||
|
||||
@@ -174,7 +191,9 @@ if test -z "$list_mounted_fs"; then
|
||||
AC_MSG_RESULT($fu_cv_sys_mounted_getmnt)
|
||||
if test $fu_cv_sys_mounted_getmnt = yes; then
|
||||
list_mounted_fs=found
|
||||
AC_DEFINE(MOUNTED_GETMNT)
|
||||
AC_DEFINE(MOUNTED_GETMNT, 1,
|
||||
[Define if there is a function named getmnt for reading the list of
|
||||
mounted filesystems. (Ultrix)])
|
||||
fi
|
||||
fi
|
||||
|
||||
@@ -188,7 +207,9 @@ if test -z "$list_mounted_fs"; then
|
||||
AC_MSG_RESULT($fu_cv_sys_mounted_fread)
|
||||
if test $fu_cv_sys_mounted_fread = yes; then
|
||||
list_mounted_fs=found
|
||||
AC_DEFINE(MOUNTED_FREAD)
|
||||
AC_DEFINE(MOUNTED_FREAD, 1,
|
||||
[Define if there is no specific function for reading the list of
|
||||
mounted filesystems. fread will be used to read /etc/mnttab. (SVR2) ])
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
@@ -30,7 +30,8 @@ AC_DEFUN(jm_FUNC_LSTAT,
|
||||
jm_cv_func_lstat_empty_string_bug=yes)
|
||||
])
|
||||
if test $jm_cv_func_lstat_empty_string_bug = yes; then
|
||||
LIBOBJS="$LIBOBJS lstat.o"
|
||||
AC_SUBST(LIBOBJS)
|
||||
LIBOBJS="$LIBOBJS lstat.$ac_objext"
|
||||
AC_DEFINE_UNQUOTED(HAVE_LSTAT_EMPTY_STRING_BUG, 1,
|
||||
[Define if lstat has the bug that it succeeds when given the zero-length
|
||||
file name argument. The lstat from SunOS4.1.4 and the Hurd as of 1998-11-01)
|
||||
|
||||
13
m4/malloc.m4
13
m4/malloc.m4
@@ -1,14 +1,9 @@
|
||||
#serial 2
|
||||
#serial 3
|
||||
|
||||
dnl From Jim Meyering.
|
||||
dnl Determine whether malloc accepts 0 as its argument.
|
||||
dnl If it doesn't, arrange to use the replacement function.
|
||||
dnl
|
||||
dnl If you use this macro in a package, you should
|
||||
dnl add the following two lines to acconfig.h:
|
||||
dnl /* Define to rpl_malloc if the replacement function should be used. */
|
||||
dnl #undef malloc
|
||||
dnl
|
||||
|
||||
AC_DEFUN(jm_FUNC_MALLOC,
|
||||
[
|
||||
@@ -32,7 +27,9 @@ AC_DEFUN(jm_FUNC_MALLOC,
|
||||
jm_cv_func_working_malloc=no)
|
||||
])
|
||||
if test $jm_cv_func_working_malloc = no; then
|
||||
LIBOBJS="$LIBOBJS malloc.o"
|
||||
AC_DEFINE_UNQUOTED(malloc, rpl_malloc)
|
||||
AC_SUBST(LIBOBJS)
|
||||
LIBOBJS="$LIBOBJS malloc.$ac_objext"
|
||||
AC_DEFINE_UNQUOTED(malloc, rpl_malloc,
|
||||
[Define to rpl_malloc if the replacement function should be used.])
|
||||
fi
|
||||
])
|
||||
|
||||
13
m4/memcmp.m4
13
m4/memcmp.m4
@@ -1,4 +1,4 @@
|
||||
#serial 2
|
||||
#serial 3
|
||||
|
||||
dnl A replacement for autoconf's AC_FUNC_MEMCMP that detects
|
||||
dnl the losing memcmp on some x86 Next systems.
|
||||
@@ -38,18 +38,15 @@ changequote([, ])dnl
|
||||
jm_cv_func_memcmp_working=yes,
|
||||
jm_cv_func_memcmp_working=no,
|
||||
jm_cv_func_memcmp_working=no)])
|
||||
test $jm_cv_func_memcmp_working = no && LIBOBJS="$LIBOBJS memcmp.o"
|
||||
test $jm_cv_func_memcmp_working = no \
|
||||
&& LIBOBJS="$LIBOBJS memcmp.$ac_objext"
|
||||
AC_SUBST(LIBOBJS)dnl
|
||||
])
|
||||
|
||||
dnl If you use this macro in a package, you should
|
||||
dnl add the following two lines to acconfig.h:
|
||||
dnl /* Define to rpl_memcmp if the replacement function should be used. */
|
||||
dnl #undef memcmp
|
||||
dnl
|
||||
AC_DEFUN(jm_FUNC_MEMCMP,
|
||||
[AC_REQUIRE([jm_AC_FUNC_MEMCMP])dnl
|
||||
if test $jm_cv_func_memcmp_working = no; then
|
||||
AC_DEFINE_UNQUOTED(memcmp, rpl_memcmp)
|
||||
AC_DEFINE_UNQUOTED(memcmp, rpl_memcmp,
|
||||
[Define to rpl_memcmp if the replacement function should be used.])
|
||||
fi
|
||||
])
|
||||
|
||||
166
m4/mktime.m4
166
m4/mktime.m4
@@ -1,166 +0,0 @@
|
||||
#serial 1001
|
||||
|
||||
dnl Just like mktime.m4 from automake-1.3b, but with an additional test.
|
||||
dnl Renamed to have jm_ prefix and to use jm_ prefix on cache variable names.
|
||||
|
||||
AC_DEFUN(jm_AM_FUNC_MKTIME,
|
||||
[AC_REQUIRE([AC_HEADER_TIME])dnl
|
||||
AC_CHECK_HEADERS(sys/time.h unistd.h)
|
||||
AC_CHECK_FUNCS(alarm)
|
||||
AC_CACHE_CHECK([for working mktime], jm_am_cv_func_working_mktime,
|
||||
[AC_TRY_RUN(
|
||||
changequote(<<, >>)dnl
|
||||
<</* Test program from Paul Eggert (eggert@twinsun.com)
|
||||
and Tony Leneis (tony@plaza.ds.adp.com). */
|
||||
#if TIME_WITH_SYS_TIME
|
||||
# include <sys/time.h>
|
||||
# include <time.h>
|
||||
#else
|
||||
# if HAVE_SYS_TIME_H
|
||||
# include <sys/time.h>
|
||||
# else
|
||||
# include <time.h>
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if HAVE_UNISTD_H
|
||||
# include <unistd.h>
|
||||
#endif
|
||||
|
||||
#if !HAVE_ALARM
|
||||
# define alarm(X) /* empty */
|
||||
#endif
|
||||
|
||||
/* Work around redefinition to rpl_putenv by other config tests. */
|
||||
#undef putenv
|
||||
|
||||
static time_t time_t_max;
|
||||
|
||||
/* Values we'll use to set the TZ environment variable. */
|
||||
static const char *const tz_strings[] = {
|
||||
(const char *) 0, "TZ=GMT0", "TZ=JST-9",
|
||||
"TZ=EST+3EDT+2,M10.1.0/00:00:00,M2.3.0/00:00:00"
|
||||
};
|
||||
#define N_STRINGS (sizeof (tz_strings) / sizeof (tz_strings[0]))
|
||||
|
||||
/* Fail if mktime fails to convert a date in the spring-forward gap.
|
||||
Based on a problem report from Andreas Jaeger. */
|
||||
static void
|
||||
spring_forward_gap ()
|
||||
{
|
||||
/* glibc (up to about 1998-10-07) failed this test) */
|
||||
struct tm tm;
|
||||
|
||||
/* Use the portable POSIX.1 specification "TZ=PST8PDT,M4.1.0,M10.5.0"
|
||||
instead of "TZ=America/Vancouver" in order to detect the bug even
|
||||
on systems that don't support the Olson extension, or don't have the
|
||||
full zoneinfo tables installed. */
|
||||
putenv ("TZ=PST8PDT,M4.1.0,M10.5.0");
|
||||
tm.tm_year = 98;
|
||||
tm.tm_mon = 3;
|
||||
tm.tm_mday = 5;
|
||||
tm.tm_hour = 2;
|
||||
tm.tm_min = 0;
|
||||
tm.tm_sec = 0;
|
||||
tm.tm_isdst = -1;
|
||||
if (mktime (&tm) == (time_t)-1)
|
||||
exit (1);
|
||||
}
|
||||
|
||||
static void
|
||||
mktime_test (now)
|
||||
time_t now;
|
||||
{
|
||||
struct tm *lt;
|
||||
if ((lt = localtime (&now)) && mktime (lt) != now)
|
||||
exit (1);
|
||||
now = time_t_max - now;
|
||||
if ((lt = localtime (&now)) && mktime (lt) != now)
|
||||
exit (1);
|
||||
}
|
||||
|
||||
static void
|
||||
irix_6_4_bug ()
|
||||
{
|
||||
/* Based on code from Ariel Faigon. */
|
||||
struct tm tm;
|
||||
tm.tm_year = 96;
|
||||
tm.tm_mon = 3;
|
||||
tm.tm_mday = 0;
|
||||
tm.tm_hour = 0;
|
||||
tm.tm_min = 0;
|
||||
tm.tm_sec = 0;
|
||||
tm.tm_isdst = -1;
|
||||
mktime (&tm);
|
||||
if (tm.tm_mon != 2 || tm.tm_mday != 31)
|
||||
exit (1);
|
||||
}
|
||||
|
||||
static void
|
||||
bigtime_test (j)
|
||||
int j;
|
||||
{
|
||||
struct tm tm;
|
||||
time_t now;
|
||||
tm.tm_year = tm.tm_mon = tm.tm_mday = tm.tm_hour = tm.tm_min = tm.tm_sec = j;
|
||||
/* This test makes some buggy mktime implementations loop.
|
||||
Give up after 10 seconds. */
|
||||
alarm (10);
|
||||
now = mktime (&tm);
|
||||
alarm (0);
|
||||
if (now != (time_t) -1)
|
||||
{
|
||||
struct tm *lt = localtime (&now);
|
||||
if (! (lt
|
||||
&& lt->tm_year == tm.tm_year
|
||||
&& lt->tm_mon == tm.tm_mon
|
||||
&& lt->tm_mday == tm.tm_mday
|
||||
&& lt->tm_hour == tm.tm_hour
|
||||
&& lt->tm_min == tm.tm_min
|
||||
&& lt->tm_sec == tm.tm_sec
|
||||
&& lt->tm_yday == tm.tm_yday
|
||||
&& lt->tm_wday == tm.tm_wday
|
||||
&& ((lt->tm_isdst < 0 ? -1 : 0 < lt->tm_isdst)
|
||||
== (tm.tm_isdst < 0 ? -1 : 0 < tm.tm_isdst))))
|
||||
exit (1);
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
time_t t, delta;
|
||||
int i, j;
|
||||
|
||||
spring_forward_gap ();
|
||||
for (time_t_max = 1; 0 < time_t_max; time_t_max *= 2)
|
||||
continue;
|
||||
time_t_max--;
|
||||
delta = time_t_max / 997; /* a suitable prime number */
|
||||
for (i = 0; i < N_STRINGS; i++)
|
||||
{
|
||||
if (tz_strings[i])
|
||||
putenv (tz_strings[i]);
|
||||
|
||||
for (t = 0; t <= time_t_max - delta; t += delta)
|
||||
mktime_test (t);
|
||||
mktime_test ((time_t) 60 * 60);
|
||||
mktime_test ((time_t) 60 * 60 * 24);
|
||||
|
||||
for (j = 1; 0 < j; j *= 2)
|
||||
bigtime_test (j);
|
||||
bigtime_test (j - 1);
|
||||
}
|
||||
irix_6_4_bug ();
|
||||
exit (0);
|
||||
}
|
||||
>>,
|
||||
changequote([, ])dnl
|
||||
jm_am_cv_func_working_mktime=yes, jm_am_cv_func_working_mktime=no,
|
||||
dnl When crosscompiling, assume mktime is missing or broken.
|
||||
jm_am_cv_func_working_mktime=no)
|
||||
])
|
||||
if test $jm_am_cv_func_working_mktime = no; then
|
||||
LIBOBJS="$LIBOBJS mktime.o"
|
||||
fi
|
||||
])
|
||||
13
m4/putenv.m4
13
m4/putenv.m4
@@ -1,15 +1,10 @@
|
||||
#serial 1
|
||||
#serial 2
|
||||
|
||||
dnl From Jim Meyering.
|
||||
dnl
|
||||
dnl Check whether putenv ("FOO") removes FOO from the environment.
|
||||
dnl The putenv in libc on at least SunOS 4.1.4 does *not* do that.
|
||||
dnl
|
||||
dnl If you use this macro in a package, you should
|
||||
dnl add the following two lines to acconfig.h:
|
||||
dnl /* Define to rpl_putenv if the replacement function should be used. */
|
||||
dnl #undef putenv
|
||||
dnl
|
||||
|
||||
AC_DEFUN(jm_FUNC_PUTENV,
|
||||
[AC_CACHE_CHECK([for SVID conformant putenv], jm_cv_func_svid_putenv,
|
||||
@@ -38,7 +33,9 @@ AC_DEFUN(jm_FUNC_PUTENV,
|
||||
jm_cv_func_svid_putenv=no)
|
||||
])
|
||||
if test $jm_cv_func_svid_putenv = no; then
|
||||
LIBOBJS="$LIBOBJS putenv.o"
|
||||
AC_DEFINE_UNQUOTED(putenv, rpl_putenv)
|
||||
AC_SUBST(LIBOBJS)
|
||||
LIBOBJS="$LIBOBJS putenv.$ac_objext"
|
||||
AC_DEFINE_UNQUOTED(putenv, rpl_putenv,
|
||||
[Define to rpl_memcmp if the replacement function should be used.])
|
||||
fi
|
||||
])
|
||||
|
||||
@@ -1,14 +1,9 @@
|
||||
#serial 2
|
||||
#serial 3
|
||||
|
||||
dnl From Jim Meyering.
|
||||
dnl Determine whether realloc works when both arguments are 0.
|
||||
dnl If it doesn't, arrange to use the replacement function.
|
||||
dnl
|
||||
dnl If you use this macro in a package, you should
|
||||
dnl add the following two lines to acconfig.h:
|
||||
dnl /* Define to rpl_realloc if the replacement function should be used. */
|
||||
dnl #undef realloc
|
||||
dnl
|
||||
|
||||
AC_DEFUN(jm_FUNC_REALLOC,
|
||||
[
|
||||
@@ -32,7 +27,9 @@ AC_DEFUN(jm_FUNC_REALLOC,
|
||||
jm_cv_func_working_realloc=no)
|
||||
])
|
||||
if test $jm_cv_func_working_realloc = no; then
|
||||
LIBOBJS="$LIBOBJS realloc.o"
|
||||
AC_DEFINE_UNQUOTED(realloc, rpl_realloc)
|
||||
AC_SUBST(LIBOBJS)
|
||||
LIBOBJS="$LIBOBJS realloc.$ac_objext"
|
||||
AC_DEFINE_UNQUOTED(realloc, rpl_realloc,
|
||||
[Define to rpl_realloc if the replacement function should be used.])
|
||||
fi
|
||||
])
|
||||
|
||||
59
m4/regex.m4
59
m4/regex.m4
@@ -1,28 +1,67 @@
|
||||
#serial 3
|
||||
#serial 5
|
||||
|
||||
dnl Derived from code in GNU grep.
|
||||
dnl Initially derived from code in GNU grep.
|
||||
dnl Mostly written by Jim Meyering.
|
||||
|
||||
AC_DEFUN(jm_WITH_REGEX,
|
||||
dnl Usage: jm_INCLUDED_REGEX([lib/regex.c])
|
||||
dnl
|
||||
AC_DEFUN(jm_INCLUDED_REGEX,
|
||||
[
|
||||
AC_REQUIRE([AM_GLIBC])
|
||||
|
||||
dnl Even packages that don't use regex.c can use this macro.
|
||||
dnl Of course, for them it doesn't do anything.
|
||||
|
||||
syscmd([test -f lib/regex.c])
|
||||
# Assume we'll default to using the included regex.c.
|
||||
ac_use_included_regex=yes
|
||||
|
||||
# However, if the system regex support is good enough that it passes the
|
||||
# the following run test, then default to *not* using the included regex.c.
|
||||
# If cross compiling, assume the test would fail and use the included
|
||||
# regex.c. The failing regular expression is from `Spencer ere test #75'
|
||||
# in grep-2.3.
|
||||
AC_CACHE_CHECK([for working re_compile_pattern],
|
||||
jm_cv_func_working_re_compile_pattern,
|
||||
AC_TRY_RUN(
|
||||
changequote(<<, >>)dnl
|
||||
<<
|
||||
#include <stdio.h>
|
||||
#include <regex.h>
|
||||
int
|
||||
main ()
|
||||
{
|
||||
static struct re_pattern_buffer regex;
|
||||
const char *s;
|
||||
re_set_syntax (RE_SYNTAX_POSIX_EGREP);
|
||||
/* Add this third left square bracket, [, to balance the
|
||||
three right ones below. Otherwise autoconf-2.14 chokes. */
|
||||
s = re_compile_pattern ("a[[:]:]]b\n", 9, ®ex);
|
||||
/* This should fail with _Invalid character class name_ error. */
|
||||
exit (s ? 0 : 1);
|
||||
}
|
||||
>>,
|
||||
changequote([, ])dnl
|
||||
|
||||
jm_cv_func_working_re_compile_pattern=yes,
|
||||
jm_cv_func_working_re_compile_pattern=no,
|
||||
dnl When crosscompiling, assume it's broken.
|
||||
jm_cv_func_working_re_compile_pattern=no))
|
||||
if test $jm_cv_func_working_re_compile_pattern = yes; then
|
||||
ac_use_included_regex=no
|
||||
fi
|
||||
|
||||
test -n "$1" || AC_MSG_ERROR([missing argument])
|
||||
syscmd([test -f $1])
|
||||
ifelse(sysval, 0,
|
||||
[
|
||||
# By default, don't use the included regex.c on systems with glibc 2
|
||||
test "$ac_cv_glibc" = yes && default=no || default=yes
|
||||
|
||||
AC_ARG_WITH(included-regex,
|
||||
[ --without-included-regex don't compile regex; this is the default on
|
||||
systems with version 2 of the GNU C library
|
||||
(use with caution on other system)],
|
||||
jm_with_regex=$withval,
|
||||
jm_with_regex=$default)
|
||||
jm_with_regex=$ac_use_included_regex)
|
||||
if test "$jm_with_regex" = yes; then
|
||||
LIBOBJS="$LIBOBJS regex.o"
|
||||
AC_SUBST(LIBOBJS)
|
||||
LIBOBJS="$LIBOBJS regex.$ac_objext"
|
||||
fi
|
||||
],
|
||||
)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#serial 3
|
||||
#serial 4
|
||||
|
||||
dnl From Paul Eggert.
|
||||
|
||||
@@ -24,7 +24,9 @@ AC_DEFUN(AC_STRUCT_ST_MTIM_NSEC,
|
||||
CPPFLAGS="$ac_save_CPPFLAGS"])
|
||||
|
||||
if test $ac_cv_struct_st_mtim_nsec != no; then
|
||||
AC_DEFINE_UNQUOTED(ST_MTIM_NSEC, $ac_cv_struct_st_mtim_nsec)
|
||||
AC_DEFINE_UNQUOTED(ST_MTIM_NSEC, $ac_cv_struct_st_mtim_nsec,
|
||||
[Define to be the nanoseconds member of struct stat's st_mtim,
|
||||
if it exists.])
|
||||
fi
|
||||
]
|
||||
)
|
||||
|
||||
@@ -30,7 +30,8 @@ AC_DEFUN(jm_FUNC_STAT,
|
||||
jm_cv_func_stat_empty_string_bug=yes)
|
||||
])
|
||||
if test $jm_cv_func_stat_empty_string_bug = yes; then
|
||||
LIBOBJS="$LIBOBJS stat.o"
|
||||
AC_SUBST(LIBOBJS)
|
||||
LIBOBJS="$LIBOBJS stat.$ac_objext"
|
||||
AC_DEFINE_UNQUOTED(HAVE_STAT_EMPTY_STRING_BUG, 1,
|
||||
[Define if stat has the bug that it succeeds when given the zero-length
|
||||
file name argument. The stat from SunOS4.1.4 and the Hurd as of 1998-11-01)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#serial 5
|
||||
#serial 6
|
||||
|
||||
dnl This macro is intended to be used solely in this file.
|
||||
dnl These are the prerequisite macros for GNU's strftime.c replacement.
|
||||
@@ -13,11 +13,6 @@ AC_DEFUN(_jm_STRFTIME_PREREQS,
|
||||
|
||||
dnl Determine if the strftime function has all the features of the GNU one.
|
||||
dnl
|
||||
dnl If you use this macro in a package, you should
|
||||
dnl add the following two lines to acconfig.h:
|
||||
dnl /* Define to gnu_strftime if the replacement function should be used. */
|
||||
dnl #undef strftime
|
||||
dnl
|
||||
dnl From Jim Meyering.
|
||||
dnl
|
||||
AC_DEFUN(jm_FUNC_GNU_STRFTIME,
|
||||
@@ -109,7 +104,6 @@ main ()
|
||||
CMP ("%^c", "FRI JAN 9 13:06:07 1970");
|
||||
CMP ("%d", "09");
|
||||
CMP ("%e", " 9"); /* POSIX.2 */
|
||||
CMP ("%f", "5"); /* POSIX.2 */
|
||||
CMP ("%g", "70"); /* GNU */
|
||||
CMP ("%h", "Jan"); /* POSIX.2 */
|
||||
CMP ("%^h", "JAN");
|
||||
@@ -138,8 +132,10 @@ changequote([, ])dnl
|
||||
jm_cv_func_working_gnu_strftime=no)
|
||||
])
|
||||
if test $jm_cv_func_working_gnu_strftime = no; then
|
||||
LIBOBJS="$LIBOBJS strftime.o"
|
||||
AC_DEFINE_UNQUOTED(strftime, gnu_strftime)
|
||||
AC_SUBST(LIBOBJS)
|
||||
LIBOBJS="$LIBOBJS strftime.$ac_objext"
|
||||
AC_DEFINE_UNQUOTED(strftime, gnu_strftime,
|
||||
[Define to gnu_strftime if the replacement function should be used.])
|
||||
fi
|
||||
])
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user