mirror of
https://git.savannah.gnu.org/git/coreutils.git
synced 2025-09-10 07:59:52 +02:00
Compare commits
1757 Commits
FILEUTILS-
...
FILEUTILS-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c0d85f7e45 | ||
|
|
fdd7f15c6e | ||
|
|
88fec8763a | ||
|
|
80fe6fbd20 | ||
|
|
ca10098c93 | ||
|
|
e336878a5b | ||
|
|
6f98f91fad | ||
|
|
a2e3399aa2 | ||
|
|
f3643f7edd | ||
|
|
108783401d | ||
|
|
88cd90df1e | ||
|
|
f6c0c0ee16 | ||
|
|
bb4904c751 | ||
|
|
6fdcba1097 | ||
|
|
7ce4ee180b | ||
|
|
84d9e6f35b | ||
|
|
5e333bb8b8 | ||
|
|
7d5c9847aa | ||
|
|
116698bb24 | ||
|
|
93fe4a3b72 | ||
|
|
3a66ad8dcd | ||
|
|
b12b63eced | ||
|
|
5f44c5626b | ||
|
|
829258e77c | ||
|
|
d9a1527093 | ||
|
|
bd5a2dc9e1 | ||
|
|
95ed06eb09 | ||
|
|
19ee58e090 | ||
|
|
b61f6618aa | ||
|
|
7ed190837a | ||
|
|
812dc8da17 | ||
|
|
b150de0a99 | ||
|
|
2757680bbf | ||
|
|
9fecbb3105 | ||
|
|
b0126126d2 | ||
|
|
3260d507f5 | ||
|
|
537879ee7d | ||
|
|
0c483136cf | ||
|
|
106eedf2a8 | ||
|
|
cec4418796 | ||
|
|
25e0824d28 | ||
|
|
739a268735 | ||
|
|
7c5d2581a0 | ||
|
|
9f99fca934 | ||
|
|
d7dfef329f | ||
|
|
daaa56f985 | ||
|
|
143be7ea2d | ||
|
|
4cb0cadf96 | ||
|
|
b5545e03db | ||
|
|
4dfe280c99 | ||
|
|
616d9920c0 | ||
|
|
65a185d754 | ||
|
|
5dcb9b11aa | ||
|
|
fbc1b0b06f | ||
|
|
1f64389cd5 | ||
|
|
e2017655a1 | ||
|
|
09af7ed5f7 | ||
|
|
2c663e070c | ||
|
|
799114aa8c | ||
|
|
8ed20d830e | ||
|
|
a513c6c10e | ||
|
|
35640da77d | ||
|
|
b8fbc41536 | ||
|
|
475fb2e732 | ||
|
|
b1bf91b67d | ||
|
|
e2a422b8ef | ||
|
|
81ab1beb52 | ||
|
|
c199939348 | ||
|
|
76685fb1e9 | ||
|
|
3e8dff57b2 | ||
|
|
1207fe6788 | ||
|
|
24946d8604 | ||
|
|
aa8f9f7e67 | ||
|
|
9136c97143 | ||
|
|
976d5c8a3f | ||
|
|
3b023926b1 | ||
|
|
048aa98ba8 | ||
|
|
3c5e612fce | ||
|
|
92452ed0a0 | ||
|
|
edc1ebe9e7 | ||
|
|
96719d7999 | ||
|
|
739185ba74 | ||
|
|
6bf3479c9f | ||
|
|
2c8881fa4e | ||
|
|
a246888987 | ||
|
|
5f4e35a42a | ||
|
|
004fa32b78 | ||
|
|
b679f078af | ||
|
|
64c38128cb | ||
|
|
47ffae51d2 | ||
|
|
dc93e67305 | ||
|
|
04b3f8c73f | ||
|
|
15da58e940 | ||
|
|
2c45ec8870 | ||
|
|
b0a76138e8 | ||
|
|
f48d309e1f | ||
|
|
9f29c127ad | ||
|
|
4edc4fdd20 | ||
|
|
bf25ff5686 | ||
|
|
5dee541de5 | ||
|
|
9ca4b0ce4c | ||
|
|
86d77d28f6 | ||
|
|
5fec9dcd63 | ||
|
|
5cd332146d | ||
|
|
f35a629b10 | ||
|
|
2115d8b251 | ||
|
|
44256afd61 | ||
|
|
078fb9958e | ||
|
|
10d2bd9fe1 | ||
|
|
d5f68c636f | ||
|
|
fc5b8b497f | ||
|
|
399ca3007b | ||
|
|
69450c7b8e | ||
|
|
2abb1fd55d | ||
|
|
5679351226 | ||
|
|
52d06428c4 | ||
|
|
9fa18193a8 | ||
|
|
c5a36496a9 | ||
|
|
89f0eb153f | ||
|
|
0816398823 | ||
|
|
2ca0198ba4 | ||
|
|
441d42d262 | ||
|
|
47635579b0 | ||
|
|
ed034dc2fb | ||
|
|
d704481d1f | ||
|
|
9445f3be05 | ||
|
|
ba9af72e94 | ||
|
|
f2f8c736c9 | ||
|
|
3ee1d2075c | ||
|
|
4ff47b028e | ||
|
|
6d622fcb6b | ||
|
|
dfdd08e943 | ||
|
|
bcb31e6df5 | ||
|
|
e37426d44c | ||
|
|
5344a40bc2 | ||
|
|
f79086fbd3 | ||
|
|
3944f9acc9 | ||
|
|
5f69a51188 | ||
|
|
fc27421c82 | ||
|
|
3581b3cf77 | ||
|
|
9f425a515b | ||
|
|
b4721f8c6e | ||
|
|
59bf576f46 | ||
|
|
1d0ba16702 | ||
|
|
c4c4106e8b | ||
|
|
d7af479281 | ||
|
|
5b55669c7a | ||
|
|
94d34806bd | ||
|
|
c93a607f05 | ||
|
|
7b1d35af90 | ||
|
|
33db1748a0 | ||
|
|
9c55b67dd4 | ||
|
|
74a00a63a0 | ||
|
|
f801837d6c | ||
|
|
55692e275e | ||
|
|
5bf6f179da | ||
|
|
f9850882f1 | ||
|
|
5d0d80fc27 | ||
|
|
c055d35869 | ||
|
|
61a8f5b321 | ||
|
|
0dd04df27f | ||
|
|
dde8f61f1c | ||
|
|
1696188993 | ||
|
|
3804c0288a | ||
|
|
70b951593e | ||
|
|
614723b9c1 | ||
|
|
849d512ee9 | ||
|
|
c4e4ba9607 | ||
|
|
5f52473b9c | ||
|
|
f0a4b95c58 | ||
|
|
d5d043c57a | ||
|
|
5f14914c49 | ||
|
|
8c446739e7 | ||
|
|
0f8dd3a954 | ||
|
|
d927d60b36 | ||
|
|
bed2ded78f | ||
|
|
406f1dcb0f | ||
|
|
fc0b4f7672 | ||
|
|
262dbfe2f6 | ||
|
|
27289e8b53 | ||
|
|
8656b00f6d | ||
|
|
ce9d58029c | ||
|
|
c187c5884b | ||
|
|
ae8efa7087 | ||
|
|
13a7e4caf8 | ||
|
|
00874a5dad | ||
|
|
52f1830329 | ||
|
|
af77319c56 | ||
|
|
60d7a8e772 | ||
|
|
e37768067a | ||
|
|
47e19fb368 | ||
|
|
f2893678eb | ||
|
|
1a27d41352 | ||
|
|
9099ba78e2 | ||
|
|
017ee79337 | ||
|
|
44d3e01da9 | ||
|
|
52d20e4420 | ||
|
|
04d18f430c | ||
|
|
c2177b12b3 | ||
|
|
7c032c04b9 | ||
|
|
19d6aed760 | ||
|
|
c14f06f708 | ||
|
|
5018ccfb7e | ||
|
|
d0c8664700 | ||
|
|
2ed0078725 | ||
|
|
f64320db7b | ||
|
|
f253241fa6 | ||
|
|
129ede91ad | ||
|
|
c5e73d1f4a | ||
|
|
543cd52e60 | ||
|
|
a9a5efd77b | ||
|
|
b99ee65d9f | ||
|
|
b2557211cb | ||
|
|
6fa66b8414 | ||
|
|
13587cf0ec | ||
|
|
deffd164df | ||
|
|
8b6882e5e9 | ||
|
|
1899efe4f6 | ||
|
|
8180fd9209 | ||
|
|
d681dd7524 | ||
|
|
c64d3aaf18 | ||
|
|
b6bacc5dcf | ||
|
|
3424a30611 | ||
|
|
045b33aaef | ||
|
|
1fdeee96e2 | ||
|
|
8d381987d0 | ||
|
|
1def0627b7 | ||
|
|
cab29a570d | ||
|
|
02edb50e8f | ||
|
|
3190f18d1c | ||
|
|
d8f02c5c3a | ||
|
|
8f8f0254b2 | ||
|
|
51b6b653a2 | ||
|
|
90fb34362a | ||
|
|
7299626404 | ||
|
|
0ae67ef6a8 | ||
|
|
fd5da15041 | ||
|
|
0981ef97c0 | ||
|
|
eb6e8b63c6 | ||
|
|
0ef1ebe00e | ||
|
|
56752ea034 | ||
|
|
568f9e0516 | ||
|
|
497785afe5 | ||
|
|
43fde4395a | ||
|
|
aee6ce52e0 | ||
|
|
a64e651230 | ||
|
|
4951b1a4b0 | ||
|
|
3110281aad | ||
|
|
0d9ee9b50c | ||
|
|
496964cdc3 | ||
|
|
9048856887 | ||
|
|
61b0870c41 | ||
|
|
ae9ce08522 | ||
|
|
95b686e751 | ||
|
|
773a575cd5 | ||
|
|
8db7ef9e42 | ||
|
|
6b95201b8d | ||
|
|
a8fd3f260a | ||
|
|
8b39b39763 | ||
|
|
76211dbaeb | ||
|
|
1b57516fe2 | ||
|
|
b3197453ad | ||
|
|
f79bc88685 | ||
|
|
81b2c3735e | ||
|
|
e69797a267 | ||
|
|
77a40f148f | ||
|
|
26a7265907 | ||
|
|
4e39b59aba | ||
|
|
90d90ce434 | ||
|
|
a5b5eb21f9 | ||
|
|
641dabb657 | ||
|
|
0037a01cf8 | ||
|
|
c60c4a9fdc | ||
|
|
1d80882fc0 | ||
|
|
f3e288c470 | ||
|
|
ac4300150a | ||
|
|
051a7c856a | ||
|
|
449a130ddb | ||
|
|
10798a81c4 | ||
|
|
cf04cc6ec2 | ||
|
|
fe15457dcd | ||
|
|
a55a40b616 | ||
|
|
d203fb94d2 | ||
|
|
8baafe1f08 | ||
|
|
07e0171826 | ||
|
|
d034a083ab | ||
|
|
cbed17e88a | ||
|
|
ef49ee4777 | ||
|
|
a2e30297d1 | ||
|
|
56d6e5a38a | ||
|
|
4e02f20bd3 | ||
|
|
216cc77784 | ||
|
|
6fb996fcc5 | ||
|
|
5a95ad0a73 | ||
|
|
5dcaccf5be | ||
|
|
beb983dd07 | ||
|
|
e0be88dd59 | ||
|
|
456a1ea3ea | ||
|
|
c8a15b9edb | ||
|
|
0e1dfa9b8b | ||
|
|
7b79dfe695 | ||
|
|
a53a181821 | ||
|
|
614cf2b06b | ||
|
|
a73455fc19 | ||
|
|
87ad4e1dbb | ||
|
|
56836dca33 | ||
|
|
3048ed8790 | ||
|
|
a0947ac542 | ||
|
|
a313a8b995 | ||
|
|
c2c1f42b0b | ||
|
|
381ba4a26a | ||
|
|
8330089910 | ||
|
|
ff6161442d | ||
|
|
7373e3149d | ||
|
|
608cabf1d4 | ||
|
|
76bc5dc396 | ||
|
|
fb61cfca00 | ||
|
|
1f9d1ea959 | ||
|
|
eb128f8a49 | ||
|
|
395e6c592a | ||
|
|
4d617153d5 | ||
|
|
222f736378 | ||
|
|
b53d6da640 | ||
|
|
d4365673c5 | ||
|
|
493d6182eb | ||
|
|
6986c2b9ad | ||
|
|
e15422c3d3 | ||
|
|
ec739a978b | ||
|
|
b9e891771e | ||
|
|
3b18fcfb6a | ||
|
|
ae3ec5f069 | ||
|
|
02b4fede5b | ||
|
|
74fe479350 | ||
|
|
048017b39c | ||
|
|
734d411884 | ||
|
|
4524bbcaf8 | ||
|
|
70c58e8192 | ||
|
|
ce49687fac | ||
|
|
7ddc6c5927 | ||
|
|
043c4958de | ||
|
|
3819c2d7cb | ||
|
|
ba8620bf01 | ||
|
|
e32586114e | ||
|
|
7102df4dd3 | ||
|
|
586254e713 | ||
|
|
cbcd5929c1 | ||
|
|
e6db9876a0 | ||
|
|
f247c7bd44 | ||
|
|
e7a7601ef4 | ||
|
|
3330c7dab7 | ||
|
|
d0f57e1004 | ||
|
|
9b14de28be | ||
|
|
9133ae8f15 | ||
|
|
d86f9d40a5 | ||
|
|
ebd74667bc | ||
|
|
d3938d3118 | ||
|
|
c0186d3cbb | ||
|
|
289dacfa49 | ||
|
|
1bfc7036c0 | ||
|
|
cb1df652a7 | ||
|
|
135a310ca1 | ||
|
|
01bd168259 | ||
|
|
50631d7b81 | ||
|
|
18051fbbb3 | ||
|
|
ddc825a0f0 | ||
|
|
2071a4054e | ||
|
|
80dbd557de | ||
|
|
b083f93482 | ||
|
|
66a0218c1a | ||
|
|
50c130325e | ||
|
|
1978f56515 | ||
|
|
d53f7b9a5d | ||
|
|
d565aeb336 | ||
|
|
5294c10e84 | ||
|
|
64eece7c53 | ||
|
|
894d51af47 | ||
|
|
6407eda7df | ||
|
|
e67940b416 | ||
|
|
57a16fe8c1 | ||
|
|
62ab4baa06 | ||
|
|
00652253f7 | ||
|
|
6a3f36dacb | ||
|
|
dafbd8d26d | ||
|
|
0c96a22ac7 | ||
|
|
3091cce80a | ||
|
|
a83726fb4e | ||
|
|
2bfbe02e2f | ||
|
|
92d2c54ae9 | ||
|
|
ff8e66a907 | ||
|
|
ecf44d1a0e | ||
|
|
9993d4141c | ||
|
|
e66e1f94bb | ||
|
|
418ae892b1 | ||
|
|
2eb0dc10c3 | ||
|
|
2546495dab | ||
|
|
dbca6b183b | ||
|
|
6d26d7c908 | ||
|
|
8038df09a5 | ||
|
|
b03e65037c | ||
|
|
e62f7a5962 | ||
|
|
a121532512 | ||
|
|
fde07e7f99 | ||
|
|
6fcabe7b2b | ||
|
|
271249026d | ||
|
|
24d24529f4 | ||
|
|
c950ce2982 | ||
|
|
fd2d83d617 | ||
|
|
46fb83f548 | ||
|
|
a9027c8afd | ||
|
|
d1316a4669 | ||
|
|
c00612504b | ||
|
|
d0192db8ac | ||
|
|
365bcc959c | ||
|
|
8ec106f6b1 | ||
|
|
ef93322b25 | ||
|
|
27e5b4d0c3 | ||
|
|
5c05881f32 | ||
|
|
5829e323e8 | ||
|
|
0a3e5544ba | ||
|
|
9ef04e4fa6 | ||
|
|
e26b531e3b | ||
|
|
6859252584 | ||
|
|
870d8663fb | ||
|
|
f4758f2165 | ||
|
|
b905d7f0b5 | ||
|
|
015bcbb713 | ||
|
|
a23c477555 | ||
|
|
da8dd781de | ||
|
|
f6cb183112 | ||
|
|
f78d8fcd66 | ||
|
|
7f8c02a4fb | ||
|
|
2b4d177553 | ||
|
|
3e41cabaf2 | ||
|
|
48c6c83ef6 | ||
|
|
4ee7d58704 | ||
|
|
a956a46792 | ||
|
|
eb25458cd8 | ||
|
|
b9e495aafb | ||
|
|
84817c5f8c | ||
|
|
1d97735304 | ||
|
|
a8d048fb4d | ||
|
|
f53d3a9d28 | ||
|
|
269ecb09d9 | ||
|
|
e4dac83b0d | ||
|
|
288db81c18 | ||
|
|
19920cfb66 | ||
|
|
5ba7e086e5 | ||
|
|
83fdbce6a7 | ||
|
|
109fa3946b | ||
|
|
bfc1dacca8 | ||
|
|
b64a0a7a90 | ||
|
|
9d9677bd51 | ||
|
|
144d72edd4 | ||
|
|
3bcb0b1bc2 | ||
|
|
0f061bcb2d | ||
|
|
bbb585d782 | ||
|
|
a3f96e6b80 | ||
|
|
2bf26f848f | ||
|
|
173953c503 | ||
|
|
0efaa6792a | ||
|
|
d2269d5c1b | ||
|
|
0fe0294290 | ||
|
|
13b24a32fa | ||
|
|
a27a4be2d0 | ||
|
|
07cdecb35d | ||
|
|
a6ecdec89c | ||
|
|
96b16428cc | ||
|
|
f5211a209e | ||
|
|
17afffee22 | ||
|
|
50751a7eff | ||
|
|
7a993dd16b | ||
|
|
42d1574ad8 | ||
|
|
fde850f7ad | ||
|
|
23c792f18c | ||
|
|
6d16d92a02 | ||
|
|
3f94561e84 | ||
|
|
c85595bddf | ||
|
|
d3afffe835 | ||
|
|
8fd16e77e5 | ||
|
|
2cab6f81a0 | ||
|
|
3a2ee9a318 | ||
|
|
d148eef81d | ||
|
|
082c0a9e23 | ||
|
|
24e6e33409 | ||
|
|
47566a14a9 | ||
|
|
4f23c0f185 | ||
|
|
79ab392196 | ||
|
|
98b348bce8 | ||
|
|
78c7d32c2e | ||
|
|
a8494c44a3 | ||
|
|
1954ebfb93 | ||
|
|
1f05833062 | ||
|
|
60b5579ba9 | ||
|
|
3b26158445 | ||
|
|
a9f8981529 | ||
|
|
f03b81fd6f | ||
|
|
02ac23c3e2 | ||
|
|
673a575a22 | ||
|
|
4bdbf25dee | ||
|
|
030c059d49 | ||
|
|
286c731efc | ||
|
|
98a94bfb23 | ||
|
|
1358f7c4a8 | ||
|
|
93262c2f7f | ||
|
|
5ba976c1b1 | ||
|
|
266adb5302 | ||
|
|
5a6fe4fd57 | ||
|
|
8d765a5946 | ||
|
|
b2a05e768c | ||
|
|
1eefb25591 | ||
|
|
b6ceaf9df1 | ||
|
|
c6d5d9624c | ||
|
|
e1919145a5 | ||
|
|
591e461818 | ||
|
|
f0b701359a | ||
|
|
767804657c | ||
|
|
f6b360c61f | ||
|
|
9cb651e6a5 | ||
|
|
a8a5b983f1 | ||
|
|
5d6bc792ac | ||
|
|
b08f9caae1 | ||
|
|
c3259fabe2 | ||
|
|
a3ff3953fc | ||
|
|
1fe03869c8 | ||
|
|
1237bc6c72 | ||
|
|
51155d32a3 | ||
|
|
7dbb61f30e | ||
|
|
73202c14e6 | ||
|
|
a784ac670f | ||
|
|
1002386cc5 | ||
|
|
9657d66244 | ||
|
|
9a4135570b | ||
|
|
7d25895457 | ||
|
|
1ce3f3cca5 | ||
|
|
879717eafa | ||
|
|
f00cefa62b | ||
|
|
13133639a4 | ||
|
|
994724bf67 | ||
|
|
95e3f911e2 | ||
|
|
f59a68b49a | ||
|
|
f6d2d9b74c | ||
|
|
c52dea43b7 | ||
|
|
1e4dca2dd1 | ||
|
|
7a17620c53 | ||
|
|
1ba4b1a996 | ||
|
|
60cea0e8fe | ||
|
|
d1e34222a8 | ||
|
|
13f4d23214 | ||
|
|
2aab0b6a6c | ||
|
|
d0ffb1b198 | ||
|
|
81d46d192a | ||
|
|
4c27ffdf05 | ||
|
|
86956748b1 | ||
|
|
ded114511b | ||
|
|
13225e0c76 | ||
|
|
a1fd5e91ff | ||
|
|
69b3d52b2a | ||
|
|
27a839a3fa | ||
|
|
54b2c4933f | ||
|
|
c93836544c | ||
|
|
457fcbb2ca | ||
|
|
0865bd05b4 | ||
|
|
b1b5fb67fc | ||
|
|
7e2d22e2a6 | ||
|
|
e068bafb72 | ||
|
|
53ec884edb | ||
|
|
7aa50cfb3c | ||
|
|
db0cd2f7e6 | ||
|
|
3dc875d9bd | ||
|
|
f4e62844cb | ||
|
|
738611829c | ||
|
|
4189da9d74 | ||
|
|
26a158b619 | ||
|
|
f8a79d9a8c | ||
|
|
ae641fdacf | ||
|
|
0a43597bb8 | ||
|
|
211b5731d7 | ||
|
|
ae34e4466d | ||
|
|
99c1d22a99 | ||
|
|
b07eb28c60 | ||
|
|
b4fd5c459e | ||
|
|
dfaf03f037 | ||
|
|
204a9ee115 | ||
|
|
43c77218e4 | ||
|
|
9abfcc500a | ||
|
|
ac4e995ed3 | ||
|
|
d705cb724b | ||
|
|
e195cd0425 | ||
|
|
0adbb52608 | ||
|
|
c72f18b2c3 | ||
|
|
0a0e82382c | ||
|
|
34591391d1 | ||
|
|
ab50b6880f | ||
|
|
92ead9886c | ||
|
|
8a900584f1 | ||
|
|
18252dc7fc | ||
|
|
046110aa3f | ||
|
|
a7109e215e | ||
|
|
125499c09f | ||
|
|
ca8a119779 | ||
|
|
484752fa80 | ||
|
|
a9fad38c18 | ||
|
|
0d67b070d4 | ||
|
|
402a8fdd9b | ||
|
|
d488baf54a | ||
|
|
806c3e7fb8 | ||
|
|
102a04f2aa | ||
|
|
c66b857850 | ||
|
|
f89094c7de | ||
|
|
790705a7c1 | ||
|
|
5061035e88 | ||
|
|
a2d975a44d | ||
|
|
4604a7892b | ||
|
|
4434e513bc | ||
|
|
39f35a55d3 | ||
|
|
a6e6a1e05b | ||
|
|
1cc0f0d268 | ||
|
|
a674a3c010 | ||
|
|
fad24ae80d | ||
|
|
d7ad628832 | ||
|
|
dc53d8e807 | ||
|
|
fff7bfc374 | ||
|
|
957ec50ac0 | ||
|
|
fef29da8fb | ||
|
|
284905fbb9 | ||
|
|
266d043345 | ||
|
|
a78edc50b8 | ||
|
|
f2d46d3970 | ||
|
|
085cdb43ed | ||
|
|
6273f25d7d | ||
|
|
1a5bab10b7 | ||
|
|
4e56a001c6 | ||
|
|
cd64b836fc | ||
|
|
62e3f1f1ef | ||
|
|
1407c2894a | ||
|
|
5e3ab81b7a | ||
|
|
c514878446 | ||
|
|
9f0aa11144 | ||
|
|
50f86c9fe7 | ||
|
|
978bf5f750 | ||
|
|
0c3c6ef55e | ||
|
|
0ce8428a9d | ||
|
|
fc71e28b65 | ||
|
|
d32395693a | ||
|
|
bb6ebcc333 | ||
|
|
08cd18bc45 | ||
|
|
c60941056f | ||
|
|
ddcbe0decc | ||
|
|
6b01706633 | ||
|
|
791fddaac0 | ||
|
|
468b38dfad | ||
|
|
912179f001 | ||
|
|
b41ca587a1 | ||
|
|
671fdfa887 | ||
|
|
b865bd0619 | ||
|
|
7b6e7a7341 | ||
|
|
75d9e7ca5c | ||
|
|
e1e0683c82 | ||
|
|
4be8db746e | ||
|
|
20deee54fc | ||
|
|
2ed1f74efe | ||
|
|
b1c4d0148a | ||
|
|
700b4bde5e | ||
|
|
759740c7e2 | ||
|
|
6574dd60d9 | ||
|
|
f4bfd0cb38 | ||
|
|
243036c5fb | ||
|
|
5debbcc139 | ||
|
|
5b728e9bad | ||
|
|
a49d66ffdf | ||
|
|
fa168b1e06 | ||
|
|
570ad2486a | ||
|
|
1b63505cf9 | ||
|
|
5a14292fa3 | ||
|
|
47f6723289 | ||
|
|
890e86b6f9 | ||
|
|
24c39da8d3 | ||
|
|
4d8f97fea7 | ||
|
|
a6ef8dfbab | ||
|
|
cb06271257 | ||
|
|
bb03de1c1d | ||
|
|
005d0a41ea | ||
|
|
b657cf747d | ||
|
|
89f447ce9f | ||
|
|
e6588db39b | ||
|
|
ad0f6161db | ||
|
|
eea83d97cb | ||
|
|
ff5aea354f | ||
|
|
a6b9441450 | ||
|
|
78362b9aa4 | ||
|
|
f570d032b4 | ||
|
|
0e2ebc67e2 | ||
|
|
2795faa36f | ||
|
|
90d6a55246 | ||
|
|
998ec04ca6 | ||
|
|
bbf6278831 | ||
|
|
c659fb7125 | ||
|
|
cbb9845165 | ||
|
|
59845523f3 | ||
|
|
fbc3c192c1 | ||
|
|
862fc25f11 | ||
|
|
8591cce725 | ||
|
|
e18cb636a8 | ||
|
|
474a9f7a56 | ||
|
|
b7aa5f3206 | ||
|
|
c787140255 | ||
|
|
94c7b9bcfc | ||
|
|
b8264a299d | ||
|
|
26ceb4bc22 | ||
|
|
80530f9ebf | ||
|
|
ab6ddc13f2 | ||
|
|
e784cd8520 | ||
|
|
54e57758aa | ||
|
|
787e2d6289 | ||
|
|
b198a20555 | ||
|
|
54ab4a172f | ||
|
|
1af3ad04de | ||
|
|
0eaacfd00a | ||
|
|
5c063f91ff | ||
|
|
bf6f52d7f5 | ||
|
|
132f9c716e | ||
|
|
b89b71f63e | ||
|
|
675538e965 | ||
|
|
14e29d814e | ||
|
|
5bdf244d0d | ||
|
|
3e9e02727b | ||
|
|
9af1ed39b5 | ||
|
|
32dd0d64b9 | ||
|
|
66fcd6e2eb | ||
|
|
d4f4a5c5f1 | ||
|
|
9a684a5b1f | ||
|
|
9fea42bfd6 | ||
|
|
e29c5e38f8 | ||
|
|
3c1a0b9db7 | ||
|
|
14a2802aba | ||
|
|
736995d606 | ||
|
|
5cce6821e1 | ||
|
|
ced45c88d4 | ||
|
|
b810bd54a0 | ||
|
|
179f99492b | ||
|
|
a605579011 | ||
|
|
0c0c2d5f40 | ||
|
|
55babc7fe1 | ||
|
|
1f07d34ed2 | ||
|
|
8e2e012dc9 | ||
|
|
3962d775bf | ||
|
|
1faa6a399a | ||
|
|
98a1d5e72a | ||
|
|
985cf06296 | ||
|
|
377d7cdb85 | ||
|
|
86c8226819 | ||
|
|
e5f1a12c6b | ||
|
|
c588f96c37 | ||
|
|
51cee2cf8d | ||
|
|
b0619089c9 | ||
|
|
e78fd6ee39 | ||
|
|
2e8629e442 | ||
|
|
111cdb39c3 | ||
|
|
1b306b070e | ||
|
|
70ac95bbb2 | ||
|
|
43585ddb5e | ||
|
|
410cb32814 | ||
|
|
ea146bfd07 | ||
|
|
534576fad0 | ||
|
|
6f7ac74eb3 | ||
|
|
f6639dbe36 | ||
|
|
f29147b4a1 | ||
|
|
757e85d993 | ||
|
|
b662dfc657 | ||
|
|
8cb9b753c5 | ||
|
|
2d5e52c70d | ||
|
|
4eb4f8c624 | ||
|
|
59ee5c9f35 | ||
|
|
209099c9d9 | ||
|
|
8f245c6f2c | ||
|
|
8208033b86 | ||
|
|
afa54698c9 | ||
|
|
a4791b30ea | ||
|
|
f06a2374fd | ||
|
|
ff9eb12809 | ||
|
|
472729831e | ||
|
|
4fc0af40aa | ||
|
|
11c6d21d52 | ||
|
|
ab2c79328e | ||
|
|
40acdda1b3 | ||
|
|
ad435461eb | ||
|
|
8b59f3a9e5 | ||
|
|
1a0017092d | ||
|
|
769aaffc24 | ||
|
|
2981d74992 | ||
|
|
5ccb8ddd83 | ||
|
|
6aff8653fe | ||
|
|
42cfd00757 | ||
|
|
3cec0fda7b | ||
|
|
4957557813 | ||
|
|
619bbd4ce6 | ||
|
|
15a9b83bdd | ||
|
|
d73513786d | ||
|
|
8ccf29f7fe | ||
|
|
c8afcbe2e7 | ||
|
|
37cbfc8c6b | ||
|
|
40b91250bc | ||
|
|
87da84ba81 | ||
|
|
8b45419759 | ||
|
|
9ca281e5b3 | ||
|
|
d2586a214a | ||
|
|
429093f9ad | ||
|
|
35aaf0b09d | ||
|
|
3ed09573d7 | ||
|
|
449fa131d6 | ||
|
|
0de83d1d81 | ||
|
|
2aeb21d67a | ||
|
|
dfdfbc22b3 | ||
|
|
5f3b8f3038 | ||
|
|
f29de82520 | ||
|
|
1117d0586a | ||
|
|
36595ef3f7 | ||
|
|
b8c130d091 | ||
|
|
b5431fdfdf | ||
|
|
24f2bd8c9f | ||
|
|
ac81803363 | ||
|
|
b2c7c6055d | ||
|
|
c75dc9689e | ||
|
|
02f7878928 | ||
|
|
a311f0eac5 | ||
|
|
482aa7fc64 | ||
|
|
8985201718 | ||
|
|
7de6407b72 | ||
|
|
579105347d | ||
|
|
039c76fc63 | ||
|
|
8f8938e366 | ||
|
|
15ecc0f435 | ||
|
|
b34c9d22e4 | ||
|
|
97b943feb3 | ||
|
|
836e28186c | ||
|
|
91d525cd50 | ||
|
|
586b7bf510 | ||
|
|
d0cc040dd8 | ||
|
|
358c9c706a | ||
|
|
dd19256dcd | ||
|
|
8fad3eb9e0 | ||
|
|
1adc899668 | ||
|
|
de4a1fe053 | ||
|
|
5c34a06b45 | ||
|
|
f5fb72e12c | ||
|
|
8fd90d4b2b | ||
|
|
d402b210ea | ||
|
|
619ffb2bff | ||
|
|
abd2b295f2 | ||
|
|
396069fce5 | ||
|
|
a5c0da5365 | ||
|
|
bc009f5b5f | ||
|
|
5c136d939e | ||
|
|
b55a5cc86c | ||
|
|
4d453f5691 | ||
|
|
9d67112156 | ||
|
|
c880f6f9e0 | ||
|
|
8469888ca2 | ||
|
|
83616b114e | ||
|
|
f01f28a92a | ||
|
|
ba798c5998 | ||
|
|
aa78add2de | ||
|
|
3cf14979b7 | ||
|
|
1ca5f870b6 | ||
|
|
1cd58148cd | ||
|
|
a4f0b7b42e | ||
|
|
71f60a998c | ||
|
|
f13c5ee9ce | ||
|
|
6385fbd99a | ||
|
|
73417841eb | ||
|
|
dba50eec49 | ||
|
|
3400cc7f78 | ||
|
|
3c5405d298 | ||
|
|
be72ac078c | ||
|
|
6d38725e21 | ||
|
|
4e5d2ac6d2 | ||
|
|
cbd2839f1d | ||
|
|
a3ac01b48d | ||
|
|
00df9725bb | ||
|
|
81b16373ae | ||
|
|
47827e2ec2 | ||
|
|
68c6a5d828 | ||
|
|
30c412049f | ||
|
|
f2d53500ae | ||
|
|
fc64ba37d4 | ||
|
|
a5c02a198b | ||
|
|
12bf65f915 | ||
|
|
48ebc7d0b7 | ||
|
|
b0fd0aa567 | ||
|
|
a1eab797d0 | ||
|
|
7f0b022e0d | ||
|
|
1224b48d7f | ||
|
|
3b8a52ccbe | ||
|
|
605768d957 | ||
|
|
45dcf53e6e | ||
|
|
3f0c7988cf | ||
|
|
51dbb91fdd | ||
|
|
9590fbf43c | ||
|
|
5a3d9df9a1 | ||
|
|
70e5178bde | ||
|
|
c693c5940b | ||
|
|
8c8e4286b5 | ||
|
|
ce8cf50e0a | ||
|
|
4071f9dcd5 | ||
|
|
ebd41d46d8 | ||
|
|
a210d7d35c | ||
|
|
b9c210715c | ||
|
|
101160bdf9 | ||
|
|
5c4406f731 | ||
|
|
721557bb21 | ||
|
|
d7f56af947 | ||
|
|
17bd8fb7fa | ||
|
|
babf9bb7ac | ||
|
|
28ee33a9d8 | ||
|
|
e90fed0bf7 | ||
|
|
41a1348544 | ||
|
|
2f925e9403 | ||
|
|
1068a0005a | ||
|
|
cf197bb14a | ||
|
|
34b63c88da | ||
|
|
2fd73df635 | ||
|
|
31f5c39ace | ||
|
|
aa1ddd2e7d | ||
|
|
fca7b20092 | ||
|
|
a90650cd3a | ||
|
|
03faf39b22 | ||
|
|
acd3390874 | ||
|
|
c263f45884 | ||
|
|
a41b145094 | ||
|
|
661f74698e | ||
|
|
c6b0fefde1 | ||
|
|
2d4fd1ab6e | ||
|
|
c4d7de4d1c | ||
|
|
7942b60d47 | ||
|
|
c6bd79ad34 | ||
|
|
52150ef51d | ||
|
|
071e5e3b25 | ||
|
|
21f7f8fb60 | ||
|
|
1a898f0449 | ||
|
|
ab241ac3be | ||
|
|
d3683509b3 | ||
|
|
ddb8aa8b9f | ||
|
|
73ed5ed51e | ||
|
|
a3d40a9447 | ||
|
|
309c1c3e47 | ||
|
|
72bdac7271 | ||
|
|
f1013a1535 | ||
|
|
e1133c7a28 | ||
|
|
011b92f1c9 | ||
|
|
5aa90a9946 | ||
|
|
c610f47650 | ||
|
|
d9e1e1dbd2 | ||
|
|
b700e5cdfe | ||
|
|
a83332dcd2 | ||
|
|
20d55109b5 | ||
|
|
95fad10ba3 | ||
|
|
e580f2a576 | ||
|
|
0a63562cfa | ||
|
|
55b7281ec2 | ||
|
|
b00705596d | ||
|
|
6507fa63ce | ||
|
|
e074cde09b | ||
|
|
9b6eb98d41 | ||
|
|
72efca1195 | ||
|
|
884af44da8 | ||
|
|
c2a761780e | ||
|
|
2c1ae1f436 | ||
|
|
ed0f130ea1 | ||
|
|
a23b2bb948 | ||
|
|
669034433d | ||
|
|
97df7c4729 | ||
|
|
6206ee75ea | ||
|
|
6b54234726 | ||
|
|
c141f3a34e | ||
|
|
3140984fab | ||
|
|
19c397acdc | ||
|
|
80b5341cb8 | ||
|
|
f2fde491db | ||
|
|
e1c98ab3fb | ||
|
|
be9e62c6e0 | ||
|
|
df9a764cbd | ||
|
|
3684b16708 | ||
|
|
7dad7fd5c6 | ||
|
|
856071f1da | ||
|
|
ff1e216579 | ||
|
|
554b19b9d1 | ||
|
|
98e69d378e | ||
|
|
00c483746f | ||
|
|
7d4bd8f671 | ||
|
|
46b48d2e0e | ||
|
|
87a766e71a | ||
|
|
5d65fd5e99 | ||
|
|
6a4a7cfe00 | ||
|
|
2961a41dc3 | ||
|
|
a0f78c6a82 | ||
|
|
3e5e4aa3ac | ||
|
|
f4d3d21b14 | ||
|
|
6a0899b4b6 | ||
|
|
3d21ae4853 | ||
|
|
6405a85879 | ||
|
|
91aee8ad4d | ||
|
|
3c13ac6c36 | ||
|
|
0605601f99 | ||
|
|
c8fa96131e | ||
|
|
cea745beaa | ||
|
|
647d5e6a70 | ||
|
|
b53fe736bc | ||
|
|
f7fcc8c622 | ||
|
|
be579a52e7 | ||
|
|
c2262fcd90 | ||
|
|
93e3e3a5a8 | ||
|
|
92d235c21a | ||
|
|
900011c7de | ||
|
|
0cb358268d | ||
|
|
e6d69926e6 | ||
|
|
7e3bd1d897 | ||
|
|
cd8042a77c | ||
|
|
44bdb2f05a | ||
|
|
38a059bf64 | ||
|
|
950eba9ba0 | ||
|
|
5fdc4f4666 | ||
|
|
4c69db64f2 | ||
|
|
acd9c429c0 | ||
|
|
e0263e15f1 | ||
|
|
cb58624cef | ||
|
|
c488f85c66 | ||
|
|
aa435d9982 | ||
|
|
624dd54796 | ||
|
|
ef34c8704c | ||
|
|
b0d42f0a5c | ||
|
|
3491fe9797 | ||
|
|
951abbe274 | ||
|
|
392dd7af09 | ||
|
|
9561e02b6a | ||
|
|
e6bf5ecaf8 | ||
|
|
e511c84abe | ||
|
|
cc5b8b2e79 | ||
|
|
56b16d84df | ||
|
|
034fbbd8ac | ||
|
|
a65db32955 | ||
|
|
72d2131b0e | ||
|
|
2edc7371bc | ||
|
|
5e7a7d23f5 | ||
|
|
d0e30069c0 | ||
|
|
9a7f0b1542 | ||
|
|
9a909400ba | ||
|
|
9e60f6cc06 | ||
|
|
721b2cb881 | ||
|
|
b958bd6f2b | ||
|
|
8e3be9e25c | ||
|
|
d6254a86bf | ||
|
|
cf251ff75b | ||
|
|
f79c0f977e | ||
|
|
16d019fb86 | ||
|
|
8d8135769a | ||
|
|
8b37ad9c5b | ||
|
|
c249f854de | ||
|
|
4954d34c14 | ||
|
|
e9c9e0f9e5 | ||
|
|
01a1964a1c | ||
|
|
063bdf481b | ||
|
|
cc9a042dfd | ||
|
|
a105fb3c17 | ||
|
|
c0e74f9b48 | ||
|
|
f5e968f6cd | ||
|
|
fa3bb4033b | ||
|
|
455d9ad4ed | ||
|
|
375abb3590 | ||
|
|
a3e7716e04 | ||
|
|
c500f8c996 | ||
|
|
a3029aba6b | ||
|
|
56b185d9b3 | ||
|
|
5bb0a21123 | ||
|
|
8a6dd8bf13 | ||
|
|
758eab108f | ||
|
|
862b31c48a | ||
|
|
30eb4cf648 | ||
|
|
29f4f9a5ac | ||
|
|
d3057155d5 | ||
|
|
8735a6823f | ||
|
|
d89bb4e01a | ||
|
|
0cd61ad840 | ||
|
|
5aeb94aeb4 | ||
|
|
2f4177fa6b | ||
|
|
eddd846acb | ||
|
|
84013f9573 | ||
|
|
98f5206a61 | ||
|
|
58be6ceff4 | ||
|
|
97a6cf3999 | ||
|
|
40f30dc54b | ||
|
|
833f309376 | ||
|
|
72b3b743fe | ||
|
|
0952a8a7bc | ||
|
|
be7efadaf2 | ||
|
|
d2caf6a98c | ||
|
|
c2981f6507 | ||
|
|
14aece6661 | ||
|
|
eddd7f971f | ||
|
|
df85b33ee3 | ||
|
|
d37e7835f9 | ||
|
|
d6df2d8561 | ||
|
|
db01eaed39 | ||
|
|
a423a1374f | ||
|
|
56dc5651a4 | ||
|
|
c559eefb84 | ||
|
|
517e8a6bc2 | ||
|
|
88a6b99b8d | ||
|
|
125de05913 | ||
|
|
496e09185a | ||
|
|
757de7fe90 | ||
|
|
bb53ccc5e9 | ||
|
|
9fc7c63a5a | ||
|
|
10acebe2cb | ||
|
|
d02b8ea082 | ||
|
|
a71d7cdd14 | ||
|
|
2e469b088b | ||
|
|
d5066f22eb | ||
|
|
9ac210f6a7 | ||
|
|
a3c2775889 | ||
|
|
7ae95c0ff8 | ||
|
|
12ec89c0e3 | ||
|
|
6157486144 | ||
|
|
4add54834d | ||
|
|
f03b3e48ea | ||
|
|
50a68130a3 | ||
|
|
088ab165c7 | ||
|
|
b08487e513 | ||
|
|
29d6a0aa75 | ||
|
|
85846c1ba1 | ||
|
|
42b1404b54 | ||
|
|
9516237211 | ||
|
|
b518fdab61 | ||
|
|
290fd86565 | ||
|
|
b6d1fca450 | ||
|
|
844f0224f0 | ||
|
|
e3d82c6734 | ||
|
|
d219e87e72 | ||
|
|
545a2cbc66 | ||
|
|
e6701bae6d | ||
|
|
0145667581 | ||
|
|
a641eab06a | ||
|
|
7beb8ac8aa | ||
|
|
8debb843b6 | ||
|
|
c908124639 | ||
|
|
5c7059a33a | ||
|
|
6c60fb0a7a | ||
|
|
650ea2e0b4 | ||
|
|
ca59fb27c2 | ||
|
|
19aa1f8a25 | ||
|
|
4cfab8f932 | ||
|
|
edcc5eb997 | ||
|
|
437a783072 | ||
|
|
9a16820c87 | ||
|
|
6b0a7a91d4 | ||
|
|
4259b70042 | ||
|
|
5cb8c8c0a0 | ||
|
|
043d1c865c | ||
|
|
9394a8280f | ||
|
|
c846dbf402 | ||
|
|
826dcda9c4 | ||
|
|
31ecd03e51 | ||
|
|
0fcc2606dd | ||
|
|
bea19ce09c | ||
|
|
4208ee3490 | ||
|
|
f7cfce8952 | ||
|
|
ff9b9b202c | ||
|
|
594b06988b | ||
|
|
faf92299a0 | ||
|
|
98dd4a3867 | ||
|
|
8661f4d615 | ||
|
|
7354c6077f | ||
|
|
48c6dffe80 | ||
|
|
cc7186a919 | ||
|
|
5c1001fdc5 | ||
|
|
6803a71d89 | ||
|
|
534deab287 | ||
|
|
b9db9921b8 | ||
|
|
c36284c505 | ||
|
|
a1eb481256 | ||
|
|
26bcc7757c | ||
|
|
6dd8936868 | ||
|
|
32ff553652 | ||
|
|
7fc37fe5ec | ||
|
|
655b4e6409 | ||
|
|
0fe3b0fe41 | ||
|
|
92f6a5cd8e | ||
|
|
dfddef17ac | ||
|
|
d10be8f4db | ||
|
|
1461770971 | ||
|
|
1f665cff54 | ||
|
|
e287f40259 | ||
|
|
af404ff8ce | ||
|
|
1ce828da28 | ||
|
|
073977f69f | ||
|
|
5ca6863e97 | ||
|
|
afe1e8e126 | ||
|
|
5641f6257f | ||
|
|
ce3986e75a | ||
|
|
f4d87ce11c | ||
|
|
8ecf5893e6 | ||
|
|
321402c5a8 | ||
|
|
3ce4615d65 | ||
|
|
0d5a8f6bb7 | ||
|
|
dda6851673 | ||
|
|
3feb52cde7 | ||
|
|
096f314e1d | ||
|
|
f22bce320b | ||
|
|
527fd8d7d2 | ||
|
|
f016b20824 | ||
|
|
251caade33 | ||
|
|
7d06f9cd1e | ||
|
|
e23fcf2db0 | ||
|
|
b217f05541 | ||
|
|
8c0a8b888f | ||
|
|
b896219d87 | ||
|
|
eb42da51bb | ||
|
|
d808469d48 | ||
|
|
a0fc5566dd | ||
|
|
e0ca9372fc | ||
|
|
a8bc6aee1c | ||
|
|
355fad3e85 | ||
|
|
b1a90bfff4 | ||
|
|
100cfd502c | ||
|
|
fc6d3b5995 | ||
|
|
5cb40b6726 | ||
|
|
784f0940b8 | ||
|
|
3cb1bf80e0 | ||
|
|
137c01c9a8 | ||
|
|
4433751d7a | ||
|
|
a13954f7a6 | ||
|
|
98b6b3780b | ||
|
|
11f11947b5 | ||
|
|
01c42af175 | ||
|
|
00a6ef7e2e | ||
|
|
03bc0dd04d | ||
|
|
4587e728aa | ||
|
|
40847a559f | ||
|
|
4c1d48cbfc | ||
|
|
2b195e22bd | ||
|
|
eb31b32e80 | ||
|
|
83a446e62a | ||
|
|
fb190362cc | ||
|
|
d21d0a4c04 | ||
|
|
5e62fc320b | ||
|
|
7386ed8bd1 | ||
|
|
ff9b51c885 | ||
|
|
85f656db4c | ||
|
|
63229c0a0d | ||
|
|
10cec9669d | ||
|
|
9370e7d2a8 | ||
|
|
3b89449b19 | ||
|
|
010641f8b7 | ||
|
|
527dcb236a | ||
|
|
55746a425e | ||
|
|
41d063607c | ||
|
|
113a192da5 | ||
|
|
293d7ffa73 | ||
|
|
a63b8f03f4 | ||
|
|
ff1b77a70a | ||
|
|
7157c29ee8 | ||
|
|
45b3b0a96d | ||
|
|
b65f84bf94 | ||
|
|
9ebf9199a4 | ||
|
|
a688ad3b57 | ||
|
|
57bb2e656e | ||
|
|
12ad88f5c1 | ||
|
|
8f717f92aa | ||
|
|
fac78c4d0c | ||
|
|
0d672bf048 | ||
|
|
b7d59be6a4 | ||
|
|
7206cd3b01 | ||
|
|
aca3853e18 | ||
|
|
93be9a66d7 | ||
|
|
edaeb62db6 | ||
|
|
e89ea03496 | ||
|
|
cd740223b3 | ||
|
|
a82d3db454 | ||
|
|
cea52734ee | ||
|
|
b52c000d3b | ||
|
|
31d214cd3a | ||
|
|
54d12f7edd | ||
|
|
f600c4d144 | ||
|
|
049ca98c74 | ||
|
|
7b2d50e3af | ||
|
|
e099a4b5ed | ||
|
|
29d3ba4a7b | ||
|
|
28334dafe4 | ||
|
|
45758bf193 | ||
|
|
8cad33941c | ||
|
|
fd6c956d13 | ||
|
|
bb72a58753 | ||
|
|
be7c99efe2 | ||
|
|
1999eb9197 | ||
|
|
8221bfd7cc | ||
|
|
1a8f8ca40c | ||
|
|
634dad84ba | ||
|
|
871812bcec | ||
|
|
14b2e25723 | ||
|
|
2f8ecdbb34 | ||
|
|
26963dfc15 | ||
|
|
449de5e30c | ||
|
|
aa077d5438 | ||
|
|
1a371e5119 | ||
|
|
c1fcde2307 | ||
|
|
e219c94cdf | ||
|
|
fdd07a7508 | ||
|
|
2c43f8c612 | ||
|
|
8e1e6d357a | ||
|
|
8b8685ef31 | ||
|
|
326489aecd | ||
|
|
d2b51acd38 | ||
|
|
b9a2465910 | ||
|
|
c82129a317 | ||
|
|
68773fe3f1 | ||
|
|
b1307f5aff | ||
|
|
3af9591bb8 | ||
|
|
169f13cd05 | ||
|
|
18341ac6a9 | ||
|
|
b79b91615f | ||
|
|
cae99570f4 | ||
|
|
00ede118ac | ||
|
|
62bef312ad | ||
|
|
e1bf326a99 | ||
|
|
ddfcfb0da3 | ||
|
|
5624900715 | ||
|
|
de85b5f902 | ||
|
|
d38bf8ccf7 | ||
|
|
b451be06d5 | ||
|
|
8d1e103424 | ||
|
|
77ec117299 | ||
|
|
ce4a63537c | ||
|
|
578156186d | ||
|
|
e2915cc17d | ||
|
|
edd988b3cc | ||
|
|
296fe5d782 | ||
|
|
13b113c1f3 | ||
|
|
883cd6c62d | ||
|
|
172290c201 | ||
|
|
1679d72fee | ||
|
|
317732f3d9 | ||
|
|
fc1d2abff1 | ||
|
|
8078034c5b | ||
|
|
747c6d4b60 | ||
|
|
d29f838428 | ||
|
|
464232e6bb | ||
|
|
76d10c457c | ||
|
|
6631abaa8b | ||
|
|
4507236cbe | ||
|
|
2b8209bca8 | ||
|
|
a98c656b54 | ||
|
|
e43759db0c | ||
|
|
507d0aa278 | ||
|
|
86845e9bfe | ||
|
|
633c0745b9 | ||
|
|
5bea77e1af | ||
|
|
4fef810c37 | ||
|
|
7717354351 | ||
|
|
07ab5fec9a | ||
|
|
8cf07d2253 | ||
|
|
aadde40206 | ||
|
|
aee6c49887 | ||
|
|
8041fd5301 | ||
|
|
7a80c0cacc | ||
|
|
c2f3af37bb | ||
|
|
fe56d629d1 | ||
|
|
6c5f00186d | ||
|
|
27acd938a1 | ||
|
|
dda6c3fdc4 | ||
|
|
9d343b0852 | ||
|
|
36aea8162f | ||
|
|
fb0afad994 | ||
|
|
847ee5a3bd | ||
|
|
649349a300 | ||
|
|
759591ae51 | ||
|
|
bb8bb211a1 | ||
|
|
47322c2a8e | ||
|
|
e86141f400 | ||
|
|
8ebde9b0bb | ||
|
|
47eed28390 | ||
|
|
72bd5150fd | ||
|
|
a8223df329 | ||
|
|
7c0e2db49b | ||
|
|
1f6347114a | ||
|
|
9c1810823d | ||
|
|
f25e10f24d | ||
|
|
9bb4588551 | ||
|
|
678d98c083 | ||
|
|
b0952dd045 | ||
|
|
20552b01be | ||
|
|
1b136ab2e9 | ||
|
|
d682521386 | ||
|
|
fb50c4895a | ||
|
|
29e2ec8676 | ||
|
|
f8845967cf | ||
|
|
a849cac5b5 | ||
|
|
d63f6d17dd | ||
|
|
979ea98a3e | ||
|
|
4dbf0a39a6 | ||
|
|
6a7e32b137 | ||
|
|
63444750ac | ||
|
|
4c1158bac0 | ||
|
|
43b2179550 | ||
|
|
ec940f653c | ||
|
|
7c270275fe | ||
|
|
09ce6f34a1 | ||
|
|
999a14a6a5 | ||
|
|
64a7649926 | ||
|
|
0d96fcf423 | ||
|
|
658207b433 | ||
|
|
1f1f9fe885 | ||
|
|
40e6e7a44e | ||
|
|
77dfc82293 | ||
|
|
5813e98ace | ||
|
|
b8cf92fee6 | ||
|
|
31ef40d60b | ||
|
|
66a4b0e7a3 | ||
|
|
3d9c2a6c35 | ||
|
|
282fa27b51 | ||
|
|
04d0388df4 | ||
|
|
d89210720b | ||
|
|
1347ab3fa2 | ||
|
|
35d44548fb | ||
|
|
269c31af34 | ||
|
|
afc2960851 | ||
|
|
d9aece69b3 | ||
|
|
d31f3e34a6 | ||
|
|
260ff68425 | ||
|
|
ddee3f420c | ||
|
|
8b7a023ff1 | ||
|
|
31c3ae1545 | ||
|
|
55e5a84fed | ||
|
|
35d017aa1d | ||
|
|
99c95d35e9 | ||
|
|
40a4ab97fe | ||
|
|
03062f0904 | ||
|
|
d6181296dd | ||
|
|
e2cc35f086 | ||
|
|
5e3d1430e3 | ||
|
|
9951c9f723 | ||
|
|
2781381e83 | ||
|
|
035e61e595 | ||
|
|
345ed2f0c4 | ||
|
|
c52336c440 | ||
|
|
9936c270a7 | ||
|
|
0c0a8f7180 | ||
|
|
dfd37e9e59 | ||
|
|
58d3cbbc5c | ||
|
|
6b239bb039 | ||
|
|
2e18b62d99 | ||
|
|
7392a5fd49 | ||
|
|
e413127dd4 | ||
|
|
fa183ca836 | ||
|
|
ab4923e01e | ||
|
|
2ffef0cd25 | ||
|
|
80862b8fb4 | ||
|
|
6cf7855da7 | ||
|
|
5d716e440a | ||
|
|
05073cdf67 | ||
|
|
a6ac5e555f | ||
|
|
5c67c91bb1 | ||
|
|
70bf2ee07d | ||
|
|
e40b2aea74 | ||
|
|
980db8d94b | ||
|
|
3f4d9d2baf | ||
|
|
2e35cf88d4 | ||
|
|
3b85a5c102 | ||
|
|
03885c59b5 | ||
|
|
47fe4e2b81 | ||
|
|
afed58448d | ||
|
|
83b7332303 | ||
|
|
b1a7c1d3f6 | ||
|
|
07730c119b | ||
|
|
ce286ec9da | ||
|
|
40f2b94df5 | ||
|
|
e03663fafd | ||
|
|
6d94f760a2 | ||
|
|
10ababf6b2 | ||
|
|
faae41a3ef | ||
|
|
177daedd5e | ||
|
|
aeedb315dd | ||
|
|
93d0c6c472 | ||
|
|
7138e43074 | ||
|
|
84b2bdcb3a | ||
|
|
787ee99d38 | ||
|
|
b8293a0364 | ||
|
|
5e8af70e24 | ||
|
|
d8c942fdef | ||
|
|
715f1c67f9 | ||
|
|
ffb0e90647 | ||
|
|
cf4a419332 | ||
|
|
490bf3d6e9 | ||
|
|
6ce0ab6d40 | ||
|
|
70ac08368a | ||
|
|
26310e4984 | ||
|
|
6b43446a33 | ||
|
|
c3a1a2a912 | ||
|
|
348f0efabe | ||
|
|
5b2acd8d30 | ||
|
|
488aef7301 | ||
|
|
be1784cf31 | ||
|
|
c453666c3a | ||
|
|
cbe550de62 | ||
|
|
333d061276 | ||
|
|
b0be1bfab9 | ||
|
|
c58c8f5fcf | ||
|
|
9733e004ef | ||
|
|
fd3817b9dc | ||
|
|
744efcce69 | ||
|
|
3d64706c7e | ||
|
|
774786b0cd | ||
|
|
22cb099f3c | ||
|
|
b737ed325a | ||
|
|
fedbe363a9 | ||
|
|
5df431d118 | ||
|
|
b43184c5e5 | ||
|
|
ab365a8297 | ||
|
|
f573721b82 | ||
|
|
1c1efebc1d | ||
|
|
be27aed1ec | ||
|
|
cf16d34a4d | ||
|
|
8d6ec015de | ||
|
|
5c4b305870 | ||
|
|
62ec3fd688 | ||
|
|
eda468af14 | ||
|
|
8775803a9d | ||
|
|
8c6fe7ba06 | ||
|
|
2e962bb26f | ||
|
|
3f8032ddc9 | ||
|
|
7a4fca9d77 | ||
|
|
c1aaa6492f | ||
|
|
f8f48d0023 | ||
|
|
e446ebf6c3 | ||
|
|
273d5d4925 | ||
|
|
bd8333c63d | ||
|
|
d176b68faa | ||
|
|
f6b673d543 | ||
|
|
bb84498a89 | ||
|
|
90eddc5478 | ||
|
|
e3fa0cb53b | ||
|
|
62205d8c7e | ||
|
|
6cac32ec7f | ||
|
|
4db6224838 | ||
|
|
ba088349be | ||
|
|
bbcd510bc5 | ||
|
|
489f1925be | ||
|
|
d813adbf1f | ||
|
|
13707ac76a | ||
|
|
b631b5c3ac | ||
|
|
06b0be15bb | ||
|
|
1f18465289 | ||
|
|
a8b0898ba5 | ||
|
|
9a2ff5e31c | ||
|
|
03caa431a0 | ||
|
|
231f8fc887 | ||
|
|
15ee939c3c | ||
|
|
893fdf84e8 | ||
|
|
f57f26e36a | ||
|
|
7d31261496 | ||
|
|
b67de020d9 | ||
|
|
06eee4e253 | ||
|
|
efa9563f3d | ||
|
|
ae5c430364 | ||
|
|
fe3a834b9f | ||
|
|
d32cf4d872 | ||
|
|
9e30aaca79 | ||
|
|
26c96331b2 | ||
|
|
81df043fdd | ||
|
|
d495aaf3e7 | ||
|
|
3705d57846 | ||
|
|
d5eb5821c6 | ||
|
|
48efd1644d | ||
|
|
a9d4aadb5e | ||
|
|
ce0262560b | ||
|
|
505805856e | ||
|
|
aef5ff97f7 | ||
|
|
7d7c104722 | ||
|
|
d0a520d367 | ||
|
|
4d5960cf1f | ||
|
|
5adc8fd591 | ||
|
|
47b4e7f1aa | ||
|
|
46980c56e0 | ||
|
|
86f00ce878 | ||
|
|
2c702c93fe | ||
|
|
c91b47d64f | ||
|
|
9e4428a605 | ||
|
|
b76b69c8a2 | ||
|
|
4f0cb8adcb | ||
|
|
cbe1109277 | ||
|
|
08e09e9ab4 | ||
|
|
f3f4a60164 | ||
|
|
dce8ba11dd | ||
|
|
45d534215a | ||
|
|
1a50efcd03 | ||
|
|
86a839108c | ||
|
|
aebba9cd1d | ||
|
|
42e962a284 | ||
|
|
0de00b9e6a | ||
|
|
f23d5119d8 | ||
|
|
0d9735fbb4 | ||
|
|
0b7e06d203 | ||
|
|
968d5b2bbf | ||
|
|
abab15deb9 | ||
|
|
570080ef25 | ||
|
|
595bfc8a83 | ||
|
|
dfb0540bb1 | ||
|
|
c099a14fac | ||
|
|
c219eb2daf | ||
|
|
c9c2cdda8b | ||
|
|
58da7aa5b3 | ||
|
|
7bce838dab | ||
|
|
24c45a756e | ||
|
|
d4db66a0fb | ||
|
|
09f1b5f940 | ||
|
|
a2e435c395 | ||
|
|
e1cc8122af | ||
|
|
8ce9f19835 | ||
|
|
f5ff12fcbc | ||
|
|
c7bd32731e | ||
|
|
0f9105c7be | ||
|
|
c4a0e46616 | ||
|
|
a33ca24833 | ||
|
|
465e3422e8 | ||
|
|
1a8bedfeb7 | ||
|
|
88e049caf5 | ||
|
|
8ecfdb48a9 | ||
|
|
c88a1e4466 | ||
|
|
4186d5762f | ||
|
|
c951e3f2c9 | ||
|
|
e48c320244 | ||
|
|
625a560403 | ||
|
|
f3a2399998 | ||
|
|
fc32116042 | ||
|
|
1a779705e8 | ||
|
|
6df5aa20d7 | ||
|
|
d29115d80f | ||
|
|
89d8c4e859 | ||
|
|
4ba6864c31 | ||
|
|
dc6a5317bc | ||
|
|
98379bfc4f | ||
|
|
cfa079e41d | ||
|
|
553fe00983 | ||
|
|
c4acbcc996 | ||
|
|
e8611c5714 | ||
|
|
9393315a06 | ||
|
|
7990f92f15 | ||
|
|
2435963a1f | ||
|
|
469d21a9d3 | ||
|
|
ddcb373abc | ||
|
|
e0a66a6600 | ||
|
|
d448da43d6 | ||
|
|
870858ccad | ||
|
|
fa25e451f9 | ||
|
|
3e115cf2b5 | ||
|
|
41a7e7c193 | ||
|
|
8024f33e45 | ||
|
|
1fe0bff2f4 | ||
|
|
c829e00d78 | ||
|
|
95b4ba5e0d | ||
|
|
f106184dd2 | ||
|
|
93a834533b | ||
|
|
2c3cad16b2 | ||
|
|
7f54d0b6b7 | ||
|
|
751d1a1888 | ||
|
|
47be9d6b2f | ||
|
|
4d034357da | ||
|
|
ea51a6cbaa | ||
|
|
065c2a2cda | ||
|
|
e9296ad49f | ||
|
|
588bb7b9e2 | ||
|
|
53000596a9 | ||
|
|
ccd763bee2 | ||
|
|
0c4d4d0081 | ||
|
|
ac9b999873 | ||
|
|
7a8e14b287 | ||
|
|
38b49a265f | ||
|
|
fb6ad846b4 | ||
|
|
67cf2e1e2e | ||
|
|
2b47bcaca6 | ||
|
|
11d24c8713 | ||
|
|
7c99efe376 | ||
|
|
6bcc673201 | ||
|
|
337515e1ed | ||
|
|
fda148fb1b | ||
|
|
e7d71e0725 | ||
|
|
110b79479d | ||
|
|
e64e8130b1 | ||
|
|
5fae922bab | ||
|
|
840aee01de | ||
|
|
dfc6a234b0 | ||
|
|
b07aaa6cd0 | ||
|
|
9e8497dd61 | ||
|
|
6a483c24a8 | ||
|
|
590f2decc5 | ||
|
|
489dafa7bc | ||
|
|
8ee46f4bf8 | ||
|
|
b6040be40a | ||
|
|
116bfa584d | ||
|
|
c3f357adf5 | ||
|
|
78992ab94f | ||
|
|
48bbfe2e71 | ||
|
|
f02fa3aa3e | ||
|
|
616361c4f6 | ||
|
|
48e3ed52ee | ||
|
|
46d6db5426 | ||
|
|
4841119c1a | ||
|
|
8c0c6b0468 | ||
|
|
5159046f88 | ||
|
|
0d5f220029 | ||
|
|
afd24c5869 | ||
|
|
9bb0428a59 | ||
|
|
cf0a18b69d | ||
|
|
6c7d8fd5b5 | ||
|
|
3eb8c1fea4 | ||
|
|
3ee8530a1e | ||
|
|
66cbf09569 | ||
|
|
3152cf6f82 | ||
|
|
0567a5d9c8 | ||
|
|
a69a2d6856 | ||
|
|
35ed98cc06 | ||
|
|
ff626bd3c0 | ||
|
|
b52f383a7f | ||
|
|
b14089f76b | ||
|
|
3df9479ab4 | ||
|
|
bbe32e1637 | ||
|
|
79732f800d | ||
|
|
c186123316 | ||
|
|
e50dab4ad9 | ||
|
|
5d0f90dff7 | ||
|
|
f3b0ab5eba | ||
|
|
551ab8474b | ||
|
|
12d6e4b1cd | ||
|
|
a5ab3d9aac | ||
|
|
fbe7dca27f | ||
|
|
0d47b4be52 | ||
|
|
59457bee16 | ||
|
|
a3b2c5389c | ||
|
|
1c4c285999 | ||
|
|
1b84791bc8 | ||
|
|
126e14b161 | ||
|
|
80fd95a91d | ||
|
|
ca974b3755 | ||
|
|
9f5307f1d3 | ||
|
|
97085c8df7 | ||
|
|
de1cb33196 | ||
|
|
741c7303a5 | ||
|
|
f23b3eb47a | ||
|
|
f488edddf7 | ||
|
|
60dabf5cd1 | ||
|
|
44381ed288 | ||
|
|
4717bb93f2 | ||
|
|
9442b6050b | ||
|
|
6adb0e4d56 | ||
|
|
6f06aad852 | ||
|
|
baf8720297 | ||
|
|
94966b9515 | ||
|
|
55d80ad41a | ||
|
|
7b9c964fde |
4
COPYING
4
COPYING
@@ -291,7 +291,7 @@ convey the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) 19yy <name of author>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
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
|
||||
@@ -313,7 +313,7 @@ Also add information on how to contact you by electronic and paper mail.
|
||||
If the program is interactive, make it output a short notice like this
|
||||
when it starts in an interactive mode:
|
||||
|
||||
Gnomovision version 69, Copyright (C) 19yy name of author
|
||||
Gnomovision version 69, Copyright (C) year name of author
|
||||
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
@@ -48,7 +48,7 @@ null_AM_MAKEFLAGS = \
|
||||
MAKEINFO=false
|
||||
|
||||
t=./=test
|
||||
my-distcheck:
|
||||
my-distcheck: writable-files po-check
|
||||
-rm -rf $(t)
|
||||
mkdir $(t)
|
||||
GZIP=$(GZIP) $(AMTAR) -C $(t) -zxf $(distdir).tar.gz
|
||||
@@ -60,8 +60,8 @@ my-distcheck:
|
||||
AM_MAKEFLAGS='$(null_AM_MAKEFLAGS)' \
|
||||
&& $(MAKE) dvi \
|
||||
&& $(MAKE) check \
|
||||
&& rm -rf $(DEPDIR) \
|
||||
&& $(MAKE) distclean
|
||||
&& $(MAKE) distclean \
|
||||
&& rm -rf $(DEPDIR)
|
||||
cd $(t) && mv $(distdir) $(distdir).old \
|
||||
&& $(AMTAR) -zxf ../$(distdir).tar.gz
|
||||
diff -ur $(t)/$(distdir).old $(t)/$(distdir)
|
||||
@@ -76,17 +76,17 @@ PREV_VERSION := $(shell echo $(VERSION)|tr b-z a-y|sed 's/a$$//')
|
||||
PREV_VERSION_REGEXP := $(shell echo $(PREV_VERSION)|sed 's/\./\\./g')
|
||||
v = Version
|
||||
|
||||
a_host=alpha.gnu.org
|
||||
b_host=tug.org
|
||||
a_host = alpha.gnu.org
|
||||
b_host = tug.org
|
||||
|
||||
a_url_dir=gnu/fetish
|
||||
b_url_dir=gnu/fetish
|
||||
alpha_subdir = gnu/fetish
|
||||
a_url_dir = $(alpha_subdir)
|
||||
b_url_dir = $(alpha_subdir)
|
||||
|
||||
a_real_dir=/fs/share/ftp/gnu/fetish
|
||||
b_real_dir=/home/ftp/pub/gnu/fetish
|
||||
a_real_dir = /fs/share/ftp/$(alpha_subdir)
|
||||
b_real_dir = /home/ftp/pub/$(alpha_subdir)
|
||||
|
||||
url_dir_list = $(foreach x,a b,ftp://$($(x)_host)/$($(x)_url_dir))
|
||||
real_dir_list = $(foreach x,a b,ftp://$($(x)_host)$($(x)_real_dir))
|
||||
|
||||
md5 = $(shell md5sum < $(distdir).tar.gz|sed 's/ -//')
|
||||
|
||||
@@ -99,6 +99,10 @@ rel-check:
|
||||
echo "$(md5) -" > $$md5_tmp; \
|
||||
md5sum -c $$md5_tmp < $$tarz
|
||||
|
||||
release-archive-dir = ../release
|
||||
prev-tgz = $(PACKAGE)-$(PREV_VERSION).tar.gz
|
||||
xd-delta = $(PACKAGE)-$(PREV_VERSION)-$(VERSION).xdelta
|
||||
|
||||
announcement: NEWS ChangeLog $(distdir).tar.gz
|
||||
@( \
|
||||
echo Subject: $(distdir) released; \
|
||||
@@ -109,6 +113,12 @@ announcement: NEWS ChangeLog $(distdir).tar.gz
|
||||
echo " $$url/$(distdir).tar.gz"; \
|
||||
done; \
|
||||
echo; \
|
||||
echo And here are xdelta-style diffs; \
|
||||
echo; \
|
||||
for url in $(url_dir_list); do \
|
||||
echo " $$url/$(xd-delta)"; \
|
||||
done; \
|
||||
echo; \
|
||||
echo "$(md5) $(distdir).tar.gz"; \
|
||||
echo; \
|
||||
echo NEWS:; \
|
||||
@@ -123,12 +133,27 @@ announcement: NEWS ChangeLog $(distdir).tar.gz
|
||||
-e 'print "\n"."*"x70 ."\n"; s///; print; print "*"x70 ."\n"'; \
|
||||
)
|
||||
|
||||
release-archive-dir = ../release
|
||||
prev-tgz = $(PACKAGE)-$(PREV_VERSION).tar.gz
|
||||
xd-delta = $(PACKAGE)-$(PREV_VERSION)-$(VERSION).xdelta
|
||||
writable-files:
|
||||
for file in $(distdir).tar.gz $(xd-delta) \
|
||||
../release/$(distdir).tar.gz ../release/$(xd-delta); do \
|
||||
test -e $$file || continue; \
|
||||
test -w $$file \
|
||||
|| { echo ERROR: $$file is not writable; fail=1; }; \
|
||||
done; \
|
||||
test "$$fail" && exit 1 || :
|
||||
|
||||
alpha:
|
||||
$(MAKE) po-check
|
||||
WGET = wget
|
||||
ftp-gnu = ftp://ftp.gnu.org/gnu
|
||||
|
||||
automake_repo=:pserver:anoncvs@anoncvs.cygnus.com:/cvs/automake
|
||||
.PHONY: wget-update
|
||||
wget-update:
|
||||
$(WGET) $(ftp-gnu)/texinfo/texinfo.tex -O $(srcdir)/doc/texinfo.tex
|
||||
$(WGET) $(ftp-gnu)/config/config.guess -O $(srcdir)/config.guess
|
||||
$(WGET) $(ftp-gnu)/config/config.sub -O $(srcdir)/config.sub
|
||||
cvs -d $(automake_repo) co -p automake/depcomp > depcomp
|
||||
|
||||
alpha: writable-files po-check
|
||||
$(MAKE) cvs-dist
|
||||
$(MAKE) -s announcement > /tmp/announce-$(distdir)
|
||||
ln $(distdir).tar.gz ../release
|
||||
@@ -138,9 +163,9 @@ alpha:
|
||||
ln $(release-archive-dir)/$(xd-delta) .
|
||||
chmod a-w $(release-archive-dir)/$(xd-delta)
|
||||
@echo =====================================
|
||||
@for url in $(real_dir_list); do \
|
||||
echo "ncftp -u $$url/"; \
|
||||
done
|
||||
@echo '# mput $(xd-delta) $(distdir).tar.gz'
|
||||
@echo =====================================
|
||||
@echo 'scp $(xd-delta) $(distdir).tar.gz \'
|
||||
@echo ' $(b_host):$(b_real_dir)'
|
||||
@echo '# send the /tmp/announcement e-mail'
|
||||
@echo =====================================
|
||||
@echo =====================================
|
||||
|
||||
383
THANKS
383
THANKS
@@ -1,107 +1,278 @@
|
||||
This is just a start at listing e-mail addresses of contributors.
|
||||
The rest of the addresses are still in the ChangeLog.
|
||||
These people have contributed to the GNU fileutils, textutils,
|
||||
and/or sh-utils packages. Some have reported problems, others have
|
||||
contributed improvements to the documentation, actual code, and even
|
||||
complete programs. Those contributions are described in the ChangeLog
|
||||
files. If your name has been left out, if you'd rather not be listed,
|
||||
or if you'd prefer a different address be used, please let me know.
|
||||
Some old names and 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@suse.de
|
||||
Andres Soolo: andres@soolo.matti.ee
|
||||
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
|
||||
Bengt Martensson: bengt@mathematik.uni-Bremen.de
|
||||
Bernd Leibing: bernd.leibing@rz.uni-ulm.de
|
||||
Bernhard Rosenkraenzer: bero@redhat.de
|
||||
Bjorn Helgaas: helgaas@rsn.hp.com
|
||||
Bob McCracken: kerouac@ravenet.com
|
||||
Bob Proulx: rwp@fc.hp.com
|
||||
Brendan O'Dea: bod@compusol.com.au
|
||||
Charles Karney: karney@pppl.gov
|
||||
Chip Salzenberg: chip@valinux.com
|
||||
Chris Yeo: cyeo@biking.org
|
||||
Christian von Roques: roques@pond.sub.org
|
||||
Colin Plumb: colin@nyx.net
|
||||
David Godfrey: dave@delta.demon.co.uk
|
||||
Dirk Lattermann: dlatt@t-online.de
|
||||
Don Parsons: dparsons@synapse.kent.edu
|
||||
Eirik Fuller: eirik@netcom.com
|
||||
Eli Zaretskii: eliz@is.elta.co.il
|
||||
Emile LeBlanc: leblanc@math.toronto.edu
|
||||
François Pinard: pinard@iro.umontreal.ca
|
||||
Galen Hazelwood: galenh@micron.net
|
||||
Germano Leichsenring: germano@jedi.cs.kobe-u.ac.jp
|
||||
Göran Uddeborg: goeran@uddeborg.pp.se
|
||||
Greg McGary: gkm@eng.ascend.com
|
||||
Gabor Z. Papp: gzp@gzp.org.hu
|
||||
Holger Berger: hberger@ess.nec.de
|
||||
Hugh Daniel: hugh@xanadu.com
|
||||
James: james@albion.glarp.com
|
||||
James Antill: jmanti%essex.ac.uk@seralph21.essex.ac.uk
|
||||
James Sneeringer: jvs@ocslink.com
|
||||
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
|
||||
Joe Orton: joe@orton.demon.co.uk
|
||||
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
|
||||
Jürgen Fluk: louis@dachau.marco.de
|
||||
jvogel: jvogel@linkny.com
|
||||
Kalle Olavi Niemitalo: tosi@stekt.oulu.fi
|
||||
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
|
||||
Mark A. Thomas: thommark@access.digex.net
|
||||
Mark Harris: mark@monitor.designacc.com
|
||||
Mark Kettenis: kettenis@phys.uva.nl
|
||||
Martin Mitchell: martin@debian.org
|
||||
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
|
||||
Michael ???:michael@roka.net
|
||||
Michael Veksler: mveksler@techunix.technion.ac.il
|
||||
Michael Stone: mstone@debian.org
|
||||
Miles Bader: miles@gnu.ai.mit.edu
|
||||
Nelson H. F. Beebe: beebe@math.utah.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 Moulder: reiter@netspace.net.au
|
||||
Peter Samuelson: psamuels@sampo.creighton.edu
|
||||
Paul Eggert: eggert@twinsun.com
|
||||
Paul Slootman: paul@debian.org
|
||||
Philippe De Muyter: phdm@macqel.be
|
||||
Rainer Orth: ro@TechFak.Uni-Bielefeld.DE
|
||||
Richard Braakman: dark@xs4all.nl
|
||||
Ross Ridge: rridge@calum.csclub.uwaterloo.ca
|
||||
Sami Farin: sfarin@ratol.fi
|
||||
Santiago Vila Doncel: sanvila@unex.es
|
||||
Scott Lurndal: slurn@griffin.engr.sgi.com
|
||||
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
|
||||
Torsten Landschoff: torsten@pclab.ifg.uni-kiel.de
|
||||
Tony Leneis: tony@plaza.ds.adp.com
|
||||
Ulrich Drepper: drepper@cygnus.com
|
||||
Vin Shelton: acs@alumni.princeton.edu
|
||||
Volker Borchert: bt@teknon.de
|
||||
Wayne Stewart: wstewa@atl.com
|
||||
Wichert Akkerman: wichert@cistron.nl
|
||||
William Bader: william@nscs.fast.net
|
||||
Achim Blumensath blume@corona.oche.de
|
||||
Adam Klein aklein@debian.org
|
||||
Akim Demaille demaille@inf.enst.fr
|
||||
Alain Magloire alain@qnx.com
|
||||
Alan Iwi iwi@atm.ox.ac.uk
|
||||
Alberto Accomazzi alberto@cfa0.harvard.edu
|
||||
aldomel aldomel@ix.netcom.com
|
||||
Alen Muzinic zveki@fly.cc.fer.hr
|
||||
Alexey Solovyov alekso@math.uu.se
|
||||
Andre Novaes Cunha Andre.Cunha@br.global-one.net
|
||||
Andreas Jaeger jaeger@gnu.org
|
||||
Andreas Luik luik@isa.de
|
||||
Andreas Schwab schwab@suse.de
|
||||
Andreas Stolcke stolcke@ICSI.Berkeley.EDU
|
||||
Andres Soolo andres@soolo.matti.ee
|
||||
Andrew Burgess aab@cichlid.com
|
||||
Andrew Dalke dalke@bioreason.com
|
||||
Andrew Tridgell tridge@samba.org
|
||||
Andries Brouwer Andries.Brouwer@cwi.nl
|
||||
Andy Longton alongton@metamark.com
|
||||
Ariel Faigon ariel@cthulhu.engr.sgi.com
|
||||
Arne H. Juul arnej@solan.unit.no
|
||||
Arne Henrik Juul arnej@imf.unit.no
|
||||
Arthur Pool pool@commerce.uq.edu.au
|
||||
Austin Donnelly Austin.Donnelly@cl.cam.ac.uk
|
||||
Bauke Jan Douma bjdouma@xs4all.nl
|
||||
Bengt Martensson bengt@mathematik.uni-Bremen.de
|
||||
Bernd Leibing bernd.leibing@rz.uni-ulm.de
|
||||
Bernhard Rosenkraenzer bero@redhat.de
|
||||
Bill Peters peters@gaffel.as.arizona.edu
|
||||
Bjorn Helgaas helgaas@rsn.hp.com
|
||||
Bob McCracken kerouac@ravenet.com
|
||||
Bob Proulx rwp@fc.hp.com
|
||||
Branden Robinson branden@necrotic.deadbeast.net
|
||||
Brendan O'Dea bod@compusol.com.au
|
||||
Brian Kimball bfk@footbag.org
|
||||
Brian Youmans 3diff@gnu.org
|
||||
Bruno Haible haible@clisp.cons.org
|
||||
Carl Johnson carlj@cjlinux.home.org
|
||||
Carl Lowenstein cdl@mpl.UCSD.EDU
|
||||
Carlos Canau Carlos.Canau@relay.puug.pt
|
||||
Charles Karney karney@pppl.gov
|
||||
Charles Randall crandall@matchlogic.com
|
||||
Chip Salzenberg chip@valinux.com
|
||||
Chris Yeo cyeo@biking.org
|
||||
Christi Alice Scarborough christi@chiark.greenend.org.uk
|
||||
Christian Krackowizer kra1@technodat.co.at
|
||||
Christian von Roques roques@pond.sub.org
|
||||
Chuck Hedrick hedrick@klinzhai.rutgers.edu
|
||||
Clark Morgan cmorgan@aracnet.com
|
||||
Colin Plumb colin@nyx.net
|
||||
Collin Rogowski collin@rogowski.de
|
||||
Dan Hagerty hag@gnu.ai.it.edu
|
||||
Daniel Bergstrom noa@melody.se
|
||||
David Dyck dcd@tc.fluke.COM
|
||||
David Godfrey dave@delta.demon.co.uk
|
||||
Dennis Henriksen opus@flamingo.osrl.dk
|
||||
Derek Clegg dclegg@next.com
|
||||
Dick Streefland dick_streefland@tasking.com
|
||||
Dirk Lattermann dlatt@t-online.de
|
||||
Dirk-Jan Faber djfaber@snow.nl
|
||||
Don Parsons dparsons@synapse.kent.edu
|
||||
Donni Erpel donald@appc11.gsi.de
|
||||
Doug McLaren dougmc@comco.com
|
||||
Dragos Harabor dharabor@us.oracle.com
|
||||
Ed Avis epa98@doc.ic.ac.uk
|
||||
Edzer Pebesma Edzer.Pebesma@rivm.nl
|
||||
Eirik Fuller eirik@netcom.com
|
||||
Eivind eivindt@multinet.no
|
||||
Eli Zaretskii eliz@is.elta.co.il
|
||||
Emile LeBlanc leblanc@math.toronto.edu
|
||||
Eric Backus ericb@lsid.hp.com
|
||||
Eric G. Miller egm2@jps.net
|
||||
Erik Bennett bennett@cvo.oneworld.com
|
||||
Erik Corry erik@kroete2.freinet.de
|
||||
Felix Lee flee@teleport.com
|
||||
Fletcher Mattox fletcher@cs.utexas.edu
|
||||
Florin Iucha fiucha@hsys.mic.ro
|
||||
Frank Adler fadler@allesklar.de
|
||||
Frank T Lofaro ftlofaro@snooks.Egr.UNLV.EDU
|
||||
François Pinard pinard@iro.umontreal.ca
|
||||
Fred Fish fnf@ninemoons.com
|
||||
Gabor Z. Papp gzp@gzp.org.hu
|
||||
Galen Hazelwood galenh@micron.net
|
||||
Gary Anderson ganderson@clark.net
|
||||
Gaël Quéri gqueri@mail.dotcom.fr
|
||||
Geoff Kuenning geoff@cs.hmc.edu
|
||||
Geoff Odhner geoff@franklin.com
|
||||
Gerhard Poul gpoul@gnu.org
|
||||
Germano Leichsenring germano@jedi.cs.kobe-u.ac.jp
|
||||
GOTO Masanori gotom@debian.or.jp
|
||||
Greg Louis glouis@dynamicro.on.ca
|
||||
Greg McGary gkm@gnu.org
|
||||
Greg Troxel gdt@bbn.com
|
||||
Greg Wooledge gawooledge@sherwin.com
|
||||
Gregory Leblanc gleblanc@cu-portland.edu
|
||||
Göran Uddeborg goeran@uddeborg.pp.se
|
||||
H. J. Lu hjl@valinux.com
|
||||
Hans Verkuil hans@wyst.hobby.nl
|
||||
Harry Liu rliu@lek.ugcs.caltech.edu
|
||||
Herbert Xu herbert@gondor.apana.org.au
|
||||
Holger Berger hberger@ess.nec.de
|
||||
Hugh Daniel hugh@xanadu.com
|
||||
Ian Jackson ijackson@chiark.greenend.org.uk
|
||||
Ian Lance Taylor ian@cygnus.com
|
||||
Ian Turner vectro@pipeline.com
|
||||
James james@albion.glarp.com
|
||||
James Antill jmanti%essex.ac.uk@seralph21.essex.ac.uk
|
||||
James Sneeringer jvs@ocslink.com
|
||||
James Tanis jtt@soscorp.com
|
||||
James Youngman james+usenet@free-lunch.demon.co.uk
|
||||
Jamie Lokier jamie@imbolc.ucc.ie
|
||||
Janos Farkas chexum@shadow.banki.hu
|
||||
Jarkko Hietaniemi jhi@epsilon.hut.fi
|
||||
Jeff Moore jbm@mordor.com
|
||||
Jeff Sheinberg jeffsh@erols.com
|
||||
Jens Schmidt jms@jsds.hamburg.com
|
||||
Jerome Abela abela@hsc.fr
|
||||
Jesse Thilo jgt2@eecs.lehigh.edu
|
||||
Jie Xu xuj@iag.net
|
||||
Jim Blandy jimb@cyclic.com
|
||||
Jim Dennis jimd@starshine.org
|
||||
Joakim Rosqvist dvljrt@cs.umu.se
|
||||
Jochen Hein jochen@jochen.org
|
||||
Joe Orton joe@orton.demon.co.uk
|
||||
Johan Danielsson joda@pdc.kth.se
|
||||
John Bley jbb6@acpub.duke.edu
|
||||
John David Anglin dave.anglin@nrc.ca
|
||||
John Gatewood Ham zappaman@alphabox.compsci.buu.ac.th
|
||||
John Gotts jgotts@umich.edu
|
||||
John Kendall kendall@capps.com
|
||||
John Kodis kodis@acm.org
|
||||
John Murphy jam@philabs.research.philips.com
|
||||
John Roll john@panic.harvard.edu
|
||||
John Salmon johns@mullet.anu.edu.au
|
||||
John Summerfield summer@OS2.ami.com.au
|
||||
Joost van Baal joostvb@xs4all.nl
|
||||
Joseph S. Myers jsm28@cam.ac.uk
|
||||
jvogel jvogel@linkny.com
|
||||
Jürgen Fluk louis@dachau.marco.de
|
||||
Kai-Uwe Rommel rommel@informatik.tu-muenchen.de
|
||||
Kalle Olavi Niemitalo tosi@stekt.oulu.fi
|
||||
Kamal Paul Nigam Kamal_Paul_Nigam@gs35.sp.cs.cmu.edu
|
||||
Karl Heuer kwzh@gnu.org
|
||||
Karsten Thygesen karthy@kom.auc.dk
|
||||
Kaveh R. Ghazi ghazi@caip.rutgers.edu
|
||||
Keith Owens kaos@audio.apana.org.au
|
||||
Ken Pizzini kenp@halcyon.com
|
||||
Kjetil Torgrim Homme kjetilho@ifi.uio.no
|
||||
Kristoffer Rose kris@diku.dk
|
||||
Larry McVoy lm@sgi.com
|
||||
Lars Hecking lhecking@nmrc.ucc.ie
|
||||
Lehti Rami rammer@cs.tut.fi
|
||||
Leonard N. Zubkoff lnz@dandelion.com
|
||||
Lorne Baker lbaker@nitro.avint.net
|
||||
Maciej Kwapulinski pikpok@univ.gda.pl
|
||||
Manas Garg manas@cygsoft.com
|
||||
Manfred Hollstein manfred@s-direktnet.de
|
||||
Marc Boucher marc@mbsi.ca
|
||||
Marc Olzheim marcolz@stack.nl
|
||||
Marco Franzen Marco.Franzen@Thyron.com
|
||||
Marcus Daniels marcus@ee.pdx.edu
|
||||
Mark A. Thomas thommark@access.digex.net
|
||||
Mark D. Roth roth@uiuc.edu
|
||||
Mark Harris mark@monitor.designacc.com
|
||||
Mark Hewitt mhewitt@armature.com
|
||||
Mark Kettenis kettenis@phys.uva.nl
|
||||
Mark W. Eichin eichin@cygnus.com
|
||||
Markus Demleitner msdemlei@auriga.ari.uni-heidelberg.de
|
||||
Martin martin@dresden.nacamar.de
|
||||
Martin Gallant martyg@goodbit.net
|
||||
Martin Hippe martin.hippe@schlund.de
|
||||
Martin Mitchell martin@debian.org
|
||||
Martin P.J. Zinser zinser@decus.de
|
||||
Marty Leisner leisner@sdsp.mc.xerox.com
|
||||
Masami Takikawa takikawm@CS.ORST.EDU
|
||||
Mate Wierdl mw@moni.msci.memphis.edu
|
||||
Matej Vela mvela@public.srce.hr
|
||||
Matthew Braun matthew@ans.net
|
||||
Matthew Clarke Matthew_Clarke@mindlink.bc.ca
|
||||
Matthew S. Levine mslevine@theory.lcs.mit.edu
|
||||
Matthew Swift swift@alum.mit.edu
|
||||
Matthias Urlichs smurf@noris.de
|
||||
Meelis Roos mroos@tartu.cyber.ee
|
||||
Michael ??? michael@roka.net
|
||||
Michael Deutschmann michael@talamasca.ocis.net
|
||||
Michael Hasselberg mikelh@zonta.ping.de
|
||||
Michael Hohn hohn@math.utah.edu
|
||||
Michael Stone mstone@debian.org
|
||||
Michael Stutz stutz@dsl.org
|
||||
Michael Veksler mveksler@techunix.technion.ac.il
|
||||
Michel Robitaille robitail@IRO.UMontreal.CA
|
||||
Michiel Bacchiani bacchian@raven.bu.edu
|
||||
Miles Bader miles@gnu.ai.mit.edu
|
||||
Minh Tran-Le tranle@intellicorp.com
|
||||
Morten Welinder terra@diku.dk
|
||||
Nelson H. F. Beebe beebe@math.utah.edu
|
||||
Niklas Edmundsson nikke@acc.umu.se
|
||||
Noah Friedman friedman@splode.com
|
||||
Noel Cragg noel@red-bean.com
|
||||
Olav Morkrid olav@funcom.com
|
||||
Ørn E. Hansen oehansen@daimi.aau.dk
|
||||
Paul Eggert eggert@twinsun.com
|
||||
Paul Nevai nevai@ops.mps.ohio-state.edu
|
||||
Paul Sauer paul@alexa.com
|
||||
Paul Slootman paul@debian.org
|
||||
Per Cederqvist ceder@lysator.liu.se
|
||||
Per Kristian Hove perhov@math.ntnu.no
|
||||
Peter Eriksson peter@ifm.liu.se
|
||||
Peter Moulder reiter@netspace.net.au
|
||||
Peter Samuelson psamuels@sampo.creighton.edu
|
||||
Peter Seebach seebs@taniemarie.solon.com
|
||||
Phil Richards phil.richards@vf.vodafone.co.uk
|
||||
Philippe De Muyter phdm@macqel.be
|
||||
Philippe Schnoebelen Philippe.Schnoebelen@imag.fr
|
||||
Piergiorgio Sartor sartor@sony.de
|
||||
Piotr Kwapulinski kwap@univ.gda.pl
|
||||
Prashant TR tr@eth.net
|
||||
Rainer Orth ro@TechFak.Uni-Bielefeld.DE
|
||||
Ralf W. Stephan stephan@tmt.de
|
||||
Ralph Loader loader@maths.ox.ac.uk
|
||||
Raul Miller moth@magenta.com
|
||||
Richard Braakman dark@xs4all.nl
|
||||
Richard J. Rauenzahn rrauenza@hairball.cup.hp.com
|
||||
Richard Sharman rsharman@magmacom.com
|
||||
Rick Sladkey jrs@world.std.com
|
||||
Rik Faith faith@cs.unc.edu
|
||||
Risto Kankkunen kankkune@lingsoft.fi
|
||||
Robert H. de Vries robert@and.nl
|
||||
Rogier Wolff R.E.Wolff@BitWizard.nl
|
||||
Ronald F. Guilmette rfg@netcom.com
|
||||
Ross Alexander r.alexander@auckland.ac.nz
|
||||
Ross Paterson rap@doc.ic.ac.uk
|
||||
Ross Ridge rridge@calum.csclub.uwaterloo.ca
|
||||
Sami Farin sfarin@ratol.fi
|
||||
Samuli Karkkainen Samuli.Karkkainen@hut.fi
|
||||
Sander van Malssen svm@kozmix.ow.nl
|
||||
Santiago Vila Doncel sanvila@unex.es
|
||||
Savochkin Andrey Vladimirovich saw@msu.ru
|
||||
Scott Lurndal slurn@griffin.engr.sgi.com
|
||||
Stephen Gildea gildea@x.org
|
||||
Stephen Smoogen ??????????
|
||||
Steve McConnel steve@acadcomp.sil.org
|
||||
Stuart Kemp skemp@peter.bmc.com
|
||||
Tadayoshi Funaba tadf@kt.rim.or.jp
|
||||
Theodore Ts'o tytso@rsts-11.mit.edu
|
||||
Thomas Bushnell thomas@gnu.ai.mit.edu
|
||||
Thomas Quinot thomas@Cuivre.FR.EU.ORG
|
||||
Tim Smithers mouse@dmouse.com.au
|
||||
Tim Waugh twaugh@redhat
|
||||
Todd A. Jacobs tjacobs@codegnome.org
|
||||
Tom Quinn trq@dionysos.thphys.ox.ac.uk
|
||||
Ton Hospel thospel@mail.dma.be
|
||||
Tony Leneis tony@plaza.ds.adp.com
|
||||
Tony Robinson ajr@eng.cam.ac.uk
|
||||
Torbjorn Granlund tege@nada.kth.se
|
||||
Torbjorn Lindgren tl@funcom.no
|
||||
Torsten Landschoff torsten@pclab.ifg.uni-kiel.de
|
||||
Ulrich Drepper drepper@gnu.org
|
||||
Urs Thuermann urs@isnogud.escape.de
|
||||
Vin Shelton acs@alumni.princeton.edu
|
||||
Volker Borchert bt@teknon.de
|
||||
Wayne Stewart wstewa@atl.com
|
||||
Wichert Akkerman wichert@cistron.nl
|
||||
Will Edgington wedgingt@acm.org
|
||||
William Bader william@nscs.fast.net
|
||||
William Dowling will@franklin.com
|
||||
William Lewis wiml@omnigroup.com
|
||||
Wolfram Kleff kleff@cs.uni-bonn.de
|
||||
Zvi Har'El rl@math.technion.ac.il
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Makefile.in generated automatically by automake 1.4a from Makefile.am
|
||||
|
||||
# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
|
||||
# Copyright (C) 1994, 1995-9, 2000 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.
|
||||
@@ -31,8 +31,6 @@ mandir = @mandir@
|
||||
includedir = @includedir@
|
||||
oldincludedir = /usr/include
|
||||
|
||||
DESTDIR =
|
||||
|
||||
pkgdatadir = $(datadir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
@@ -57,6 +55,8 @@ POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
|
||||
@SET_MAKE@
|
||||
host_alias = @host_alias@
|
||||
host_triplet = @host@
|
||||
AMDEP = @AMDEP@
|
||||
@@ -71,8 +71,10 @@ CXXCPP = @CXXCPP@
|
||||
DATADIRNAME = @DATADIRNAME@
|
||||
DEPDIR = @DEPDIR@
|
||||
DF_PROG = @DF_PROG@
|
||||
FESETROUND_LIBM = @FESETROUND_LIBM@
|
||||
GENCAT = @GENCAT@
|
||||
GETCONF = @GETCONF@
|
||||
GETLOADAVG_LIBS = @GETLOADAVG_LIBS@
|
||||
GLIBC21 = @GLIBC21@
|
||||
GMOFILES = @GMOFILES@
|
||||
GMSGFMT = @GMSGFMT@
|
||||
GNU_PACKAGE = @GNU_PACKAGE@
|
||||
@@ -83,14 +85,26 @@ INSTOBJEXT = @INSTOBJEXT@
|
||||
INTLDEPS = @INTLDEPS@
|
||||
INTLLIBS = @INTLLIBS@
|
||||
INTLOBJS = @INTLOBJS@
|
||||
KMEM_GROUP = @KMEM_GROUP@
|
||||
LIBICONV = @LIBICONV@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
LIB_CLOCK_GETTIME = @LIB_CLOCK_GETTIME@
|
||||
LIB_CRYPT = @LIB_CRYPT@
|
||||
LIB_NANOSLEEP = @LIB_NANOSLEEP@
|
||||
MAN = @MAN@
|
||||
MKINSTALLDIRS = @MKINSTALLDIRS@
|
||||
MSGFMT = @MSGFMT@
|
||||
NEED_SETGID = @NEED_SETGID@
|
||||
OPTIONAL_BIN_PROGS = @OPTIONAL_BIN_PROGS@
|
||||
OPTIONAL_BIN_ZCRIPTS = @OPTIONAL_BIN_ZCRIPTS@
|
||||
PACKAGE = @PACKAGE@
|
||||
PERL = @PERL@
|
||||
POFILES = @POFILES@
|
||||
POSUB = @POSUB@
|
||||
POW_LIBM = @POW_LIBM@
|
||||
RANLIB = @RANLIB@
|
||||
SEQ_LIBM = @SEQ_LIBM@
|
||||
SQRT_LIBM = @SQRT_LIBM@
|
||||
U = @U@
|
||||
USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@
|
||||
USE_NLS = @USE_NLS@
|
||||
@@ -135,7 +149,7 @@ all: all-redirect
|
||||
$(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)
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
cd $(top_builddir) \
|
||||
&& CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
|
||||
|
||||
@@ -144,9 +158,11 @@ $(srcdir)/version.texi: stamp-vti
|
||||
@:
|
||||
|
||||
$(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
|
||||
@(set `$(SHELL) $(srcdir)/mdate-sh $(srcdir)/fileutils.texi`; \
|
||||
echo "@set UPDATED $$1 $$2 $$3"; \
|
||||
echo "@set UPDATED-MONTH $$2 $$3"; \
|
||||
echo "@set EDITION $(VERSION)"; \
|
||||
echo "@set VERSION $(VERSION)") > vti.tmp
|
||||
@cmp -s vti.tmp $(srcdir)/version.texi \
|
||||
|| (echo "Updating $(srcdir)/version.texi"; \
|
||||
cp vti.tmp $(srcdir)/version.texi)
|
||||
@@ -259,7 +275,6 @@ dist-info: $(INFO_DEPS)
|
||||
d=$(srcdir); \
|
||||
for file in `CDPATH=: && cd $$d && eval echo $$base*`; do \
|
||||
test -f $(distdir)/$$file \
|
||||
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \
|
||||
|| cp -p $$d/$$file $(distdir)/$$file; \
|
||||
done; \
|
||||
done
|
||||
@@ -293,11 +308,12 @@ distdir: $(DISTFILES)
|
||||
@for file in $(DISTFILES); do \
|
||||
d=$(srcdir); \
|
||||
if test -d $$d/$$file; then \
|
||||
cp -pR $$d/$$file $(distdir); \
|
||||
cp -pR $$d/$$file $(distdir) \
|
||||
|| exit 1; \
|
||||
else \
|
||||
test -f $(distdir)/$$file \
|
||||
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \
|
||||
|| cp -p $$d/$$file $(distdir)/$$file || :; \
|
||||
|| cp -p $$d/$$file $(distdir)/$$file \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
$(MAKE) $(AM_MAKEFLAGS) top_distdir="$(top_distdir)" distdir="$(distdir)" dist-info
|
||||
|
||||
@@ -44,11 +44,11 @@ midnight, 1 January 1970 UCT.
|
||||
|
||||
@menu
|
||||
* General date syntax:: Common rules.
|
||||
* Calendar date item:: 19 Dec 1994.
|
||||
* Time of day item:: 9:20pm.
|
||||
* Time zone item:: EST, DST, BST, UTC, ...
|
||||
* Day of week item:: Monday and others.
|
||||
* Relative item in date strings:: next tuesday, 2 years ago.
|
||||
* Calendar date items:: 19 Dec 1994.
|
||||
* Time of day items:: 9:20pm.
|
||||
* Time zone items:: EST, DST, BST, UTC, ...
|
||||
* Day of week items:: Monday and others.
|
||||
* Relative items in date strings:: next tuesday, 2 years ago.
|
||||
* Pure numbers in date strings:: 19931219, 1440.
|
||||
* Authors of getdate:: Bellovin, Salz, Berets, et al.
|
||||
@end menu
|
||||
@@ -103,8 +103,8 @@ nested. Hyphens not followed by a digit are currently ignored. Leading
|
||||
zeros on numbers are ignored.
|
||||
|
||||
|
||||
@node Calendar date item
|
||||
@section Calendar date item
|
||||
@node Calendar date items
|
||||
@section Calendar date items
|
||||
|
||||
@cindex calendar date item
|
||||
|
||||
@@ -113,13 +113,14 @@ specified differently, depending on whether the month is specified
|
||||
numerically or literally. All these strings specify the same calendar date:
|
||||
|
||||
@example
|
||||
1970-09-17 # ISO 8601.
|
||||
70-9-17 # Assume 19xx for 69 through 99, 20xx for 00 through 68.
|
||||
70-09-17 # Leading zeros are ignored.
|
||||
9/17/72 # Common U.S. writing.
|
||||
1972-09-24 # ISO 8601.
|
||||
72-9-24 # Assume 19xx for 69 through 99,
|
||||
# 20xx for 00 through 68.
|
||||
72-09-24 # Leading zeros are ignored.
|
||||
9/24/72 # Common U.S. writing.
|
||||
24 September 1972
|
||||
24 Sept 72 # September has a special abbreviation.
|
||||
24 Sep 72 # Three-letter abbreviations always allowed.
|
||||
24 Sept 72 # September has a special abbreviation.
|
||||
24 Sep 72 # Three-letter abbreviations always allowed.
|
||||
Sep 24, 1972
|
||||
24-sep-72
|
||||
24sep72
|
||||
@@ -129,8 +130,8 @@ The year can also be omitted. In this case, the last specified year is
|
||||
used, or the current year if none. For example:
|
||||
|
||||
@example
|
||||
9/17
|
||||
sep 17
|
||||
9/24
|
||||
sep 24
|
||||
@end example
|
||||
|
||||
Here are the rules.
|
||||
@@ -173,8 +174,8 @@ Or, omitting the year:
|
||||
@end example
|
||||
|
||||
|
||||
@node Time of day item
|
||||
@section Time of day item
|
||||
@node Time of day items
|
||||
@section Time of day items
|
||||
|
||||
@cindex time of day item
|
||||
|
||||
@@ -223,8 +224,8 @@ Either @samp{am}/@samp{pm} or a time zone correction may be specified,
|
||||
but not both.
|
||||
|
||||
|
||||
@node Time zone item
|
||||
@section Time zone item
|
||||
@node Time zone items
|
||||
@section Time zone items
|
||||
|
||||
@cindex time zone item
|
||||
|
||||
@@ -343,8 +344,8 @@ may be specified.
|
||||
@end table
|
||||
|
||||
|
||||
@node Day of week item
|
||||
@section Day of week item
|
||||
@node Day of week items
|
||||
@section Day of week items
|
||||
|
||||
@cindex day of week item
|
||||
|
||||
@@ -370,8 +371,8 @@ the day that @var{day} by itself would represent.
|
||||
A comma following a day of the week item is ignored.
|
||||
|
||||
|
||||
@node Relative item in date strings
|
||||
@section Relative item in date strings
|
||||
@node Relative items in date strings
|
||||
@section Relative items in date strings
|
||||
|
||||
@cindex relative items in date strings
|
||||
@cindex displacement of dates
|
||||
@@ -423,12 +424,12 @@ one day in the past (equivalent to @samp{day ago}).
|
||||
The strings @samp{now} or @samp{today} are relative items corresponding
|
||||
to zero-valued time displacement, these strings come from the fact
|
||||
a zero-valued time displacement represents the current time when not
|
||||
otherwise change by previous items. They may be used to stress other
|
||||
otherwise changed by previous items. They may be used to stress other
|
||||
items, like in @samp{12:00 today}. The string @samp{this} also has
|
||||
the meaning of a zero-valued time displacement, but is preferred in
|
||||
date strings like @samp{this thursday}.
|
||||
|
||||
When a relative item makes the resulting date to cross the boundary
|
||||
When a relative item causes the resulting date to cross the boundary
|
||||
between DST and non-DST (or vice-versa), the hour is adjusted according
|
||||
to the local time.
|
||||
|
||||
@@ -438,11 +439,11 @@ to the local time.
|
||||
|
||||
@cindex pure numbers in date strings
|
||||
|
||||
The precise intepretation of a pure decimal number is dependent of
|
||||
The precise intepretation of a pure decimal number depends
|
||||
the context in the date string.
|
||||
|
||||
If the decimal number is of the form @var{yyyy}@var{mm}@var{dd} and no
|
||||
other calendar date item (@pxref{Calendar date item}) appears before it
|
||||
other calendar date item (@pxref{Calendar date items}) appears before it
|
||||
in the date string, then @var{yyyy} is read as the year, @var{mm} as the
|
||||
month number and @var{dd} as the day of the month, for the specified
|
||||
calendar date.
|
||||
|
||||
@@ -342,7 +342,7 @@ og+rX-w
|
||||
gives users other than the owner of the file read permission and, if
|
||||
it is a directory or if someone already had execute permission
|
||||
to it, gives them execute permission; and it also denies them write
|
||||
permission to it file. It does not affect the permission that the
|
||||
permission to the file. It does not affect the permission that the
|
||||
owner of the file has for it. The above mode is equivalent to
|
||||
the two modes:
|
||||
|
||||
|
||||
@@ -34,6 +34,7 @@ START-INFO-DIR-ENTRY
|
||||
* factor: (sh-utils)factor invocation. Print prime factors
|
||||
* false: (sh-utils)false invocation. Do nothing, unsuccessfully.
|
||||
* groups: (sh-utils)groups invocation. Print group names a user is in.
|
||||
* hostid: (sh-utils)hostid invocation. Print numeric host identifier.
|
||||
* hostname: (sh-utils)hostname invocation. Print or set system name.
|
||||
* id: (sh-utils)id invocation. Print real/effective uid/gid.
|
||||
* logname: (sh-utils)logname invocation. Print current login name.
|
||||
@@ -320,6 +321,21 @@ the @var{format} string.
|
||||
and @samp{\xhhh} as a hexadecimal number (if @var{hhh} is 1 to 3 hex
|
||||
digits) specifying a character to print.
|
||||
|
||||
@kindex \uhhhh
|
||||
@kindex \Uhhhhhhhh
|
||||
@code{printf} interprets two character syntaxes introduced in ISO C 99:
|
||||
@samp{\u} for 16-bit Unicode characters, specified as 4 hex digits
|
||||
@var{hhhh}, and @samp{\U} for 32-bit Unicode characters, specified as 8 hex
|
||||
digits @var{hhhhhhhh}. @code{printf} outputs the Unicode characters
|
||||
according to the LC_CTYPE part of the current locale, i.e. depending
|
||||
on the values of the environment variables @code{LC_ALL}, @code{LC_CTYPE},
|
||||
@code{LANG}.
|
||||
|
||||
The processing of @samp{\u} and @samp{\U} requires a full-featured
|
||||
@code{iconv} facility. It is activated on systems with glibc 2.2 (or newer),
|
||||
or when @code{libiconv} is installed prior to the sh-utils. Otherwise the
|
||||
use of @samp{\u} and @samp{\U} will give an error message.
|
||||
|
||||
@kindex \c
|
||||
An additional escape, @samp{\c}, causes @code{printf} to produce no
|
||||
further output.
|
||||
@@ -327,6 +343,41 @@ further output.
|
||||
The only options are a lone @samp{--help} or
|
||||
@samp{--version}. @xref{Common options}.
|
||||
|
||||
The Unicode character syntaxes are useful for writing strings in a locale
|
||||
independent way. For example, a string containing the Euro currency symbol
|
||||
|
||||
@example
|
||||
$ /usr/local/bin/printf '\u20AC 14.95'
|
||||
@end example
|
||||
|
||||
will be output correctly in all locales supporting the Euro symbol
|
||||
(ISO-8859-15, UTF-8, and others). Similarly, a Chinese string
|
||||
|
||||
@example
|
||||
$ /usr/local/bin/printf '\u4e2d\u6587'
|
||||
@end example
|
||||
|
||||
will be output correctly in all chinese locales (GB2312, BIG5, UTF-8, etc).
|
||||
|
||||
Note that in these examples, the full pathname of @code{printf} has been
|
||||
given, to distinguish it from the GNU @code{bash} builtin function
|
||||
@code{printf}.
|
||||
|
||||
For larger strings, you don't need to look up the hexadecimal code values of
|
||||
each character one by one. ASCII characters mixed with \u escape sequences
|
||||
is also known as the JAVA source file encoding. You can use GNU recode 3.5c
|
||||
(or newer) to convert strings to this encoding. Here is how to convert a
|
||||
piece of text into a shell script which will output this text in a locale-
|
||||
independent way:
|
||||
|
||||
@smallexample
|
||||
$ LC_CTYPE=zh_CN.big5 /usr/local/bin/printf \
|
||||
'\u4e2d\u6587\n' > sample.txt
|
||||
$ recode BIG5..JAVA < sample.txt \
|
||||
| sed -e "s|^|/usr/local/bin/printf '|" -e "s|$|\\\\n'|" \
|
||||
> sample.sh
|
||||
@end smallexample
|
||||
|
||||
|
||||
@node yes invocation
|
||||
@section @code{yes}: Print a string until interrupted
|
||||
@@ -706,7 +757,7 @@ True if either @var{expr1} or @var{expr2} is true.
|
||||
@code{expr} evaluates an expression and writes the result on standard
|
||||
output. Each token of the expression must be a separate argument.
|
||||
|
||||
Operands are either numbers or strings. @code{expr} coerces
|
||||
Operands are either numbers or strings. @code{expr} converts
|
||||
anything appearing in an operand position to an integer or a string
|
||||
depending on the operation being applied to it.
|
||||
|
||||
@@ -752,7 +803,7 @@ the next sections).
|
||||
@cindex pattern matching
|
||||
@cindex regular expression matching
|
||||
@cindex matching patterns
|
||||
Perform pattern matching. The arguments are coerced to strings and the
|
||||
Perform pattern matching. The arguments are converted to strings and the
|
||||
second is considered to be a (basic, a la GNU @code{grep}) regular
|
||||
expression, with a @code{^} implicitly prepended. The first argument is
|
||||
then matched against this regular expression.
|
||||
@@ -833,7 +884,7 @@ the connectives (next section) have higher.
|
||||
@kindex -
|
||||
@cindex addition
|
||||
@cindex subtraction
|
||||
Addition and subtraction. Both arguments are coerced to numbers;
|
||||
Addition and subtraction. Both arguments are converted to numbers;
|
||||
an error occurs if this cannot be done.
|
||||
|
||||
@item * / %
|
||||
@@ -843,7 +894,7 @@ an error occurs if this cannot be done.
|
||||
@cindex multiplication
|
||||
@cindex division
|
||||
@cindex remainder
|
||||
Multiplication, division, remainder. Both arguments are coerced to
|
||||
Multiplication, division, remainder. Both arguments are converted to
|
||||
numbers; an error occurs if this cannot be done.
|
||||
|
||||
@end table
|
||||
@@ -885,9 +936,9 @@ Return its first argument if neither argument is null or 0, otherwise
|
||||
@kindex >=
|
||||
@cindex comparison operators
|
||||
Compare the arguments and return 1 if the relation is true, 0 otherwise.
|
||||
@code{==} is a synonym for @code{=}. @code{expr} first tries to coerce
|
||||
@code{==} is a synonym for @code{=}. @code{expr} first tries to convert
|
||||
both arguments to numbers and do a numeric comparison; if either
|
||||
coercion fails, it does a lexicographic comparison.
|
||||
conversion fails, it does a lexicographic comparison.
|
||||
|
||||
@end table
|
||||
|
||||
@@ -1569,9 +1620,10 @@ values.
|
||||
Same as:
|
||||
@c This is too long to write inline.
|
||||
@example
|
||||
cread -ignbrk brkint -inlcr -igncr icrnl -ixoff -iuclc -ixany
|
||||
imaxbel opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel
|
||||
nl0 cr0 tab0 bs0 vt0 ff0 isig icanon iexten echo echoe echok -echonl
|
||||
cread -ignbrk brkint -inlcr -igncr icrnl -ixoff
|
||||
-iuclc -ixany imaxbel opost -olcuc -ocrnl onlcr
|
||||
-onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0
|
||||
ff0 isig icanon iexten echo echoe echok -echonl
|
||||
-noflsh -xcase -tostop -echoprt echoctl echoke
|
||||
@end example
|
||||
@noindent and also sets all special characters to their default values.
|
||||
@@ -1587,9 +1639,9 @@ May be negated. If negated, same as @code{raw}.
|
||||
@opindex raw
|
||||
Same as:
|
||||
@example
|
||||
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr
|
||||
-icrnl -ixon -ixoff -iuclc -ixany -imaxbel -opost -isig -icanon
|
||||
-xcase min 1 time 0
|
||||
-ignbrk -brkint -ignpar -parmrk -inpck -istrip
|
||||
-inlcr -igncr -icrnl -ixon -ixoff -iuclc -ixany
|
||||
-imaxbel -opost -isig -icanon -xcase min 1 time 0
|
||||
@end example
|
||||
@noindent May be negated. If negated, same as @code{cooked}.
|
||||
|
||||
@@ -1733,7 +1785,7 @@ the time value has expired, when @code{-icanon} is set.
|
||||
|
||||
@item time @var{n}
|
||||
@opindex time
|
||||
Set the number of tenths of a second before reads time out if the min
|
||||
Set the number of tenths of a second before reads time out if the minimum
|
||||
number of characters have not been read, when @code{-icanon} is set.
|
||||
|
||||
@item ispeed @var{n}
|
||||
@@ -1759,7 +1811,7 @@ Tell the kernel that the terminal has @var{n} columns. Non-POSIX.
|
||||
@vindex LINES
|
||||
@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
|
||||
terminal has. (Systems that don't support rows and columns in the kernel
|
||||
typically use the environment variables @env{LINES} and @env{COLUMNS}
|
||||
instead; however, GNU @code{stty} does not know anything about them.)
|
||||
Non-POSIX.
|
||||
@@ -1774,6 +1826,8 @@ Print the terminal speed.
|
||||
|
||||
@item @var{n}
|
||||
@cindex baud rate, setting
|
||||
@c FIXME: Is this still true that the baud rate can't be set
|
||||
@c higher than 38400?
|
||||
Set the input and output speeds to @var{n}. @var{n} can be one
|
||||
of: 0 50 75 110 134 134.5 150 200 300 600 1200 1800 2400 4800 9600
|
||||
19200 38400 @code{exta} @code{extb}. @code{exta} is the same as
|
||||
@@ -2131,6 +2185,7 @@ information.
|
||||
* date invocation:: Print or set system date and time.
|
||||
* uname invocation:: Print system information.
|
||||
* hostname invocation:: Print or set system name.
|
||||
* hostid invocation:: Print numeric host identifier.
|
||||
@end menu
|
||||
|
||||
|
||||
@@ -2545,7 +2600,7 @@ date --date='1970-01-01 00:00:01 UTC +5 hours' +%s
|
||||
@end example
|
||||
|
||||
Suppose you had @emph{not} specified time zone information in the example above.
|
||||
Then, date would have used your computer's idea of the time zone when
|
||||
Then, @code{date} would have used your computer's idea of the time zone when
|
||||
interpreting the string. Here's what you would get if you were in
|
||||
Greenwich, England:
|
||||
|
||||
@@ -2665,7 +2720,6 @@ Print the operating system version.
|
||||
|
||||
@end table
|
||||
|
||||
|
||||
@node hostname invocation
|
||||
@section @code{hostname}: Print or set system name
|
||||
|
||||
@@ -2688,6 +2742,29 @@ The only options are @samp{--help} and @samp{--version}. @xref{Common
|
||||
options}.
|
||||
|
||||
|
||||
@node hostid invocation
|
||||
@section @code{hostid}: Print numeric host identifier.
|
||||
|
||||
@pindex hostid
|
||||
@cindex printing the host identifier
|
||||
|
||||
@code{hostid} prints the numeric identifier of the current host
|
||||
in hexadecimal. This command accepts no arguments.
|
||||
The only options are @samp{--help} and @samp{--version}.
|
||||
@xref{Common options}.
|
||||
|
||||
For example, here's what it prints on one system I use:
|
||||
|
||||
@example
|
||||
$ hostid
|
||||
1bac013d
|
||||
@end example
|
||||
|
||||
On that system, the 32-bit quantity happens to be closely
|
||||
related to the system's Internet address, but that isn't always
|
||||
the case.
|
||||
|
||||
|
||||
@node Modified command invocation
|
||||
@chapter Modified command invocation
|
||||
|
||||
@@ -2734,6 +2811,34 @@ 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
|
||||
options}.
|
||||
|
||||
Here are a few tips to help avoid common problems in using chroot.
|
||||
To start with a simple example, make @var{command} refer to a statically
|
||||
linked binary. If you were to use a dynamically linked executable, then
|
||||
you'd have to arrange to have the shared libraries in the right place under
|
||||
your new root directory.
|
||||
|
||||
For example, if you create a statically linked `ls' executable,
|
||||
and put it in /tmp/empty, you can run this command as root:
|
||||
|
||||
@example
|
||||
$ chroot /tmp/empty /ls -Rl /
|
||||
@end example
|
||||
|
||||
Then you'll see output like this:
|
||||
|
||||
@example
|
||||
/:
|
||||
total 1023
|
||||
-rwxr-xr-x 1 0 0 1041745 Aug 16 11:17 ls
|
||||
@end example
|
||||
|
||||
If you want to use a dynamically linked executable, say @code{bash},
|
||||
then first run @samp{ldd bash} to see what shared objects it needs.
|
||||
Then, in addition to copying the actual binary, also copy the listed
|
||||
files to the required positions under your intended new root directory.
|
||||
Finally, if the executable requires any other files (e.g., data, state,
|
||||
device files), copy them into place, too.
|
||||
|
||||
|
||||
@node env invocation
|
||||
@section @code{env}: Run a command in a modified environment
|
||||
@@ -3100,12 +3205,13 @@ options}.
|
||||
|
||||
The algorithm it uses is not very sophisticated, so for some inputs
|
||||
@code{factor} runs for a long time. The hardest numbers to factor are
|
||||
the products of large primes. Factoring the square of the largest 32-bit
|
||||
prime number takes over 10 minutes of CPU time on a 400MHz Pentium II.
|
||||
the products of large primes. Factoring the product of the two largest 32-bit
|
||||
prime numbers takes over 10 minutes of CPU time on a 400MHz Pentium II.
|
||||
|
||||
@example
|
||||
$ factor `echo '4294967291^2'|bc`
|
||||
18446744030759878681: 4294967291 4294967291
|
||||
$ p=`echo '4294967279 * 4294967291'|bc`
|
||||
$ factor $p
|
||||
18446743979220271189: 4294967279 4294967291
|
||||
@end example
|
||||
|
||||
In contrast, @code{factor} factors the largest 64-bit number in just
|
||||
@@ -3126,13 +3232,13 @@ $ factor `echo '2^64-1'|bc`
|
||||
@code{seq} prints a sequence of numbers to standard output. Synopses:
|
||||
|
||||
@example
|
||||
seq [@var{option}]@dots{} [@var{first} [@var{step}]] @var{last}@dots{}
|
||||
seq [@var{option}]@dots{} [@var{first} [@var{increment}]] @var{last}@dots{}
|
||||
@end example
|
||||
|
||||
@code{seq} prints the numbers from @var{first} to @var{last} by
|
||||
@var{step}. By default, @var{first} and @var{step} are both 1, and each
|
||||
number is printed on its own line. All numbers can be reals, not just
|
||||
integers.
|
||||
@var{increment}. By default, @var{first} and @var{increment} are both 1,
|
||||
and each number is printed on its own line. All numbers can be reals,
|
||||
not just integers.
|
||||
|
||||
The program accepts the following options. Also see @ref{Common options}.
|
||||
|
||||
@@ -3143,8 +3249,8 @@ The program accepts the following options. Also see @ref{Common options}.
|
||||
@opindex --format=@var{format}
|
||||
@cindex formatting of numbers in @code{seq}
|
||||
Print all numbers using @var{format}; default @samp{%g}.
|
||||
@var{format} must contain exactly one of the standarding float output
|
||||
formats @samp{%e}, @samp{%f}, or @samp{%g}.
|
||||
@var{format} must contain exactly one of the floating point
|
||||
output formats @samp{%e}, @samp{%f}, or @samp{%g}.
|
||||
|
||||
@item -s @var{string}
|
||||
@itemx --separator=@var{string}
|
||||
@@ -3159,6 +3265,95 @@ Print all numbers with the same width, by padding with leading zeroes.
|
||||
|
||||
@end table
|
||||
|
||||
If you want to use @code{seq} to print sequences of large integer values,
|
||||
don't use the default @samp{%g} format since it can result in
|
||||
loss of precision:
|
||||
|
||||
@example
|
||||
$ seq 1000000 1000001
|
||||
1e+06
|
||||
1e+06
|
||||
@end example
|
||||
|
||||
Instead, you can use the format, @samp{%1.f},
|
||||
to print large decimal numbers with no exponent and no decimal point.
|
||||
|
||||
@example
|
||||
$ seq --format=%1.f 1000000 1000001
|
||||
1000000
|
||||
1000001
|
||||
@end example
|
||||
|
||||
If you want hexadecimal output, you can use @code{printf}
|
||||
to perform the conversion:
|
||||
|
||||
@example
|
||||
$ printf %x'\n' `seq -f %1.f 1048575 1024 1050623`
|
||||
fffff
|
||||
1003ff
|
||||
1007ff
|
||||
@end example
|
||||
|
||||
For very long lists of numbers, use xargs to avoid
|
||||
system limitations on the length of an argument list:
|
||||
|
||||
@example
|
||||
$ seq -f %1.f 1000000 | xargs printf %x'\n' |tail -3
|
||||
f423e
|
||||
f423f
|
||||
f4240
|
||||
@end example
|
||||
|
||||
To generate octal output, use the printf @code{%o} format instead
|
||||
of @code{%x}. Note however that using printf works only for numbers
|
||||
smaller than @code{2^32}:
|
||||
|
||||
@example
|
||||
$ printf "%x\n" `seq -f %1.f 4294967295 4294967296`
|
||||
ffffffff
|
||||
bash: printf: 4294967296: Numerical result out of range
|
||||
@end example
|
||||
|
||||
On most systems, seq can produce whole-number output for values up to
|
||||
@code{2^53}, so here's a more general approach to base conversion that
|
||||
also happens to be more robust for such large numbers. It works by
|
||||
using @code{bc} and setting its output radix variable, @var{obase},
|
||||
to @samp{16} in this case to produce hexadecimal output.
|
||||
|
||||
@example
|
||||
$ (echo obase=16; seq -f %1.f 4294967295 4294967296)|bc
|
||||
FFFFFFFF
|
||||
100000000
|
||||
@end example
|
||||
|
||||
Be careful when using @code{seq} with a fractional @var{increment},
|
||||
otherwise you may see surprising results. Most people would expect to
|
||||
see @code{0.3} printed as the last number in this example:
|
||||
|
||||
@example
|
||||
$ seq -s' ' 0 .1 .3
|
||||
0 0.1 0.2
|
||||
@end example
|
||||
|
||||
But doesn't happen on most systems because @code{seq} is implemented using
|
||||
binary floating point arithmetic (via the C @code{double} type) -- which
|
||||
means some decimal numbers like @code{.1} cannot be represented exactly.
|
||||
That in turn means some nonintuitive conditions like @code{.1 * 3 > .3}
|
||||
will end up being true.
|
||||
|
||||
To work around that in the above example, use a slightly larger number as
|
||||
the @var{last} value:
|
||||
|
||||
@example
|
||||
$ seq -s' ' 0 .1 .31
|
||||
0 0.1 0.2 0.3
|
||||
@end example
|
||||
|
||||
In general, when using an @var{increment} with a fractional part, where
|
||||
(@var{last} - @var{first}) / @var{increment} is (mathematically) a whole
|
||||
number, specify a slightly larger (or smaller, if @var{increment} is negative)
|
||||
value for @var{last} to ensure that @var{last} is the final value printed
|
||||
by seq.
|
||||
|
||||
@node Index
|
||||
@unnumbered Index
|
||||
|
||||
@@ -3,9 +3,9 @@
|
||||
% Load plain if necessary, i.e., if running under initex.
|
||||
\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
|
||||
%
|
||||
\def\texinfoversion{1999-09-25.10}
|
||||
\def\texinfoversion{2000-09-06.09}
|
||||
%
|
||||
% Copyright (C) 1985, 86, 88, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99
|
||||
% Copyright (C) 1985, 86, 88, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 2000
|
||||
% Free Software Foundation, Inc.
|
||||
%
|
||||
% This texinfo.tex file is free software; you can redistribute it and/or
|
||||
@@ -214,6 +214,9 @@
|
||||
\normalturnoffactive % \ in index entries must not stay \, e.g., if
|
||||
% the page break happens to be in the middle of an example.
|
||||
\shipout\vbox{%
|
||||
% Do this early so pdf references go to the beginning of the page.
|
||||
\ifpdfmakepagedest \pdfmkdest{\the\pageno} \fi
|
||||
%
|
||||
\ifcropmarks \vbox to \outervsize\bgroup
|
||||
\hsize = \outerhsize
|
||||
\vskip-\topandbottommargin
|
||||
@@ -243,8 +246,6 @@
|
||||
\unvbox\footlinebox
|
||||
\fi
|
||||
%
|
||||
\ifpdfmakepagedest \pdfmkdest{\the\pageno} \fi
|
||||
%
|
||||
\ifcropmarks
|
||||
\egroup % end of \vbox\bgroup
|
||||
\hfil\egroup % end of (centering) \line\bgroup
|
||||
@@ -891,7 +892,7 @@ where each line of input produces a line of output.}
|
||||
\fi}
|
||||
\def\pdfmkdest#1{\pdfdest name{#1@} xyz}
|
||||
\def\pdfmkpgn#1{#1@}
|
||||
\let\linkcolor = \Cyan
|
||||
\let\linkcolor = \Blue % was Cyan, but that seems light?
|
||||
\def\endlink{\Black\pdfendlink}
|
||||
% Adding outlines to PDF; macros for calculating structure of outlines
|
||||
% come from Petr Olsak
|
||||
@@ -906,7 +907,8 @@ where each line of input produces a line of output.}
|
||||
\closein 1
|
||||
\indexnofonts
|
||||
\def\tt{}
|
||||
% thanh's hack / proper braces in bookmarks
|
||||
\let\_ = \normalunderscore
|
||||
% Thanh's hack / proper braces in bookmarks
|
||||
\edef\mylbrace{\iftrue \string{\else}\fi}\let\{=\mylbrace
|
||||
\edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace
|
||||
%
|
||||
@@ -1670,7 +1672,10 @@ where each line of input produces a line of output.}
|
||||
}
|
||||
|
||||
% Subroutines used in generating headings
|
||||
% Produces Day Month Year style of output.
|
||||
% This produces Day Month Year style of output.
|
||||
% Only define if not already defined, in case a txi-??.tex file has set
|
||||
% up a different format (e.g., txi-cs.tex does this).
|
||||
\ifx\today\undefined
|
||||
\def\today{%
|
||||
\number\day\space
|
||||
\ifcase\month
|
||||
@@ -1679,6 +1684,7 @@ where each line of input produces a line of output.}
|
||||
\or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec
|
||||
\fi
|
||||
\space\number\year}
|
||||
\fi
|
||||
|
||||
% @settitle line... specifies the title of the document, for headings.
|
||||
% It generates no output of its own.
|
||||
@@ -3149,7 +3155,6 @@ width0pt\relax} \fi
|
||||
%
|
||||
% Double the \vsize as well. (We don't need a separate register here,
|
||||
% since nobody clobbers \vsize.)
|
||||
\advance\vsize by -\ht\partialpage
|
||||
\vsize = 2\vsize
|
||||
}
|
||||
|
||||
@@ -3163,6 +3168,7 @@ width0pt\relax} \fi
|
||||
% previous page.
|
||||
\dimen@ = \vsize
|
||||
\divide\dimen@ by 2
|
||||
\advance\dimen@ by -\ht\partialpage
|
||||
%
|
||||
% box0 will be the left-hand column, box2 the right.
|
||||
\setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@
|
||||
@@ -3170,15 +3176,18 @@ width0pt\relax} \fi
|
||||
\unvbox255
|
||||
\penalty\outputpenalty
|
||||
}
|
||||
%
|
||||
% Re-output the contents of the output page -- any previous material,
|
||||
% followed by the two boxes we just split, in box0 and box2.
|
||||
\def\pagesofar{%
|
||||
% Re-output the contents of the output page -- any previous material,
|
||||
% followed by the two boxes we just split, in box0 and box2.
|
||||
\unvbox\partialpage
|
||||
%
|
||||
\hsize = \doublecolumnhsize
|
||||
\wd0=\hsize \wd2=\hsize
|
||||
\hbox to\pagewidth{\box0\hfil\box2}%
|
||||
}
|
||||
%
|
||||
% All done with double columns.
|
||||
\def\enddoublecolumns{%
|
||||
\output = {%
|
||||
% Split the last of the double-column material. Leave it on the
|
||||
@@ -3203,8 +3212,9 @@ width0pt\relax} \fi
|
||||
% \endgroup where \vsize got restored).
|
||||
\pagegoal = \vsize
|
||||
}
|
||||
%
|
||||
% Called at the end of the double column material.
|
||||
\def\balancecolumns{%
|
||||
% Called at the end of the double column material.
|
||||
\setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120.
|
||||
\dimen@ = \ht0
|
||||
\advance\dimen@ by \topskip
|
||||
@@ -4710,7 +4720,8 @@ width0pt\relax} \fi
|
||||
\def\deftypeivarheader#1#2#3{%
|
||||
\dosubind{vr}{\code{#3}}{\putwordof\ \code{#1}}% entry in variable index
|
||||
\begingroup
|
||||
\defname{#3}{\putwordInstanceVariableof\ \code{#1}}%
|
||||
\defname{\defheaderxcond#2\relax$$$#3}
|
||||
{\putwordInstanceVariableof\ \code{#1}}%
|
||||
\defvarargs{#3}%
|
||||
\endgroup
|
||||
}
|
||||
@@ -5794,7 +5805,7 @@ should work if nowhere else does.}
|
||||
% Use @afourwide to print on European A4 paper in wide format.
|
||||
\def\afourwide{%
|
||||
\afourpaper
|
||||
\internalpagesizes{9.5in}{6.5in}{\hoffset}{\normaloffset}{\bindingoffset}{7mm}%
|
||||
\internalpagesizes{6.5in}{9.5in}{\hoffset}{\normaloffset}{\bindingoffset}{7mm}%
|
||||
%
|
||||
\globaldefs = 0
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
@c %**end of header
|
||||
|
||||
@include version.texi
|
||||
@include constants.texi
|
||||
|
||||
@c Define new indices.
|
||||
@defcodeindex op
|
||||
@@ -248,14 +249,13 @@ overall process.
|
||||
|
||||
@cindex common options
|
||||
|
||||
Certain options are available in all these programs. Rather than
|
||||
Certain options are available in all of these programs. Rather than
|
||||
writing identical descriptions for each of the programs, they are
|
||||
described here. (In fact, every GNU program accepts (or should accept)
|
||||
these options.)
|
||||
|
||||
A few of these programs take arbitrary strings as arguments. In those
|
||||
cases, @samp{--help} and @samp{--version} are taken as these options
|
||||
only if there is one and exactly one command line argument.
|
||||
Some of these programs recognize the @samp{--help} and @samp{--version}
|
||||
options only when one of them is the sole command line argument.
|
||||
|
||||
@table @samp
|
||||
|
||||
@@ -317,19 +317,19 @@ Equivalent to @samp{-vET}.
|
||||
@opindex -B
|
||||
@opindex --binary
|
||||
@cindex binary and text I/O in cat
|
||||
On MS-DOS and MS-Windows only, read and write the
|
||||
files in binary mode. By default, @code{cat} on MS-DOS/MS-Windows uses
|
||||
binary mode only when standard output is redirected to a file or a pipe;
|
||||
this option overrides that. Binary file I/O is used so that the files
|
||||
retain their format (Unix text as opposed to DOS text and binary),
|
||||
because @code{cat} is frequently used as a file-copying program. Some
|
||||
options (see below) cause @code{cat} read and write files in text mode
|
||||
because then the original file contents aren't important (e.g., when
|
||||
lines are numbered by @code{cat}, or when line endings should be
|
||||
marked). This is so these options work as DOS/Windows users would
|
||||
expect; for example, DOS-style text files have their lines end with
|
||||
the CR-LF pair of characters which won't be processed as an empty line
|
||||
by @samp{-b} unless the file is read in text mode.
|
||||
On MS-DOS and MS-Windows only, read and write the files in binary mode.
|
||||
By default, @code{cat} on MS-DOS/MS-Windows uses binary mode only when
|
||||
standard output is redirected to a file or a pipe; this option overrides
|
||||
that. Binary file I/O is used so that the files retain their format
|
||||
(Unix text as opposed to DOS text and binary), because @code{cat} is
|
||||
frequently used as a file-copying program. Some options (see below)
|
||||
cause @code{cat} to read and write files in text mode because in those
|
||||
cases the original file contents aren't important (e.g., when lines are
|
||||
numbered by @code{cat}, or when line endings should be marked). This is
|
||||
so these options work as DOS/Windows users would expect; for example,
|
||||
DOS-style text files have their lines end with the CR-LF pair of
|
||||
characters, which won't be processed as an empty line by @samp{-b} unless
|
||||
the file is read in text mode.
|
||||
|
||||
@item -b
|
||||
@itemx --number-nonblank
|
||||
@@ -813,12 +813,12 @@ Output as hexadecimal shorts. Equivalent to @samp{-tx2}.
|
||||
@item -C
|
||||
@itemx --traditional
|
||||
@opindex --traditional
|
||||
Recognize the pre-POSIX non-option arguments that traditional @code{od}
|
||||
Recognize the pre-@sc{posix} non-option arguments that traditional @code{od}
|
||||
accepted. The following syntax:
|
||||
|
||||
@example
|
||||
@smallexample
|
||||
od --traditional [@var{file}] [[+]@var{offset}[.][b] [[+]@var{label}[.][b]]]
|
||||
@end example
|
||||
@end smallexample
|
||||
|
||||
@noindent
|
||||
can be used to specify at most one file and optional arguments
|
||||
@@ -983,24 +983,27 @@ is @samp{space}). For multicolumn output, lines will always be truncated to
|
||||
column output no line truncation occurs by default. Use @samp{-W} option to
|
||||
truncate lines in that case.
|
||||
|
||||
@c FIXME:??? Should this be something like "Starting with version 1.22i,..."
|
||||
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.
|
||||
@c FIXME: this whole section here sounds very awkward to me. I
|
||||
@c made a few small changes, but really it all needs to be redone. - Brian
|
||||
Some small @var{letter options} (@samp{-s}, @samp{-w}) have been redefined
|
||||
with the object of a better @sc{posix} compliance. The output of some
|
||||
further cases has been adapted to other Unix systems. These changes are
|
||||
not compatible with earlier versions of the program.
|
||||
|
||||
Some @var{new capital letter} options (@samp{-J}, @samp{-S}, @samp{-W})
|
||||
has been introduced to turn off unexpected interferences of small letter
|
||||
have 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.
|
||||
form feeds set in the input files requires the @samp{-T} option.
|
||||
|
||||
Capital letter options dominate small letter ones.
|
||||
Capital letter options override 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).
|
||||
preceding option letter (already stated in the @sc{posix} specification).
|
||||
|
||||
The program accepts the following options. Also see @ref{Common options}.
|
||||
|
||||
@@ -1110,7 +1113,7 @@ Merge lines of full length. Used together with the column options
|
||||
@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
|
||||
to disentangle the old (@sc{posix}-compliant) options @samp{-w} and
|
||||
@samp{-s} along with the three column options.
|
||||
|
||||
|
||||
@@ -1120,7 +1123,7 @@ to disentangle the old (@var{posix} compliant) options @samp{-w} and
|
||||
@opindex --length
|
||||
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
|
||||
than or equal to 10 (or <= 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.
|
||||
|
||||
@@ -1129,7 +1132,7 @@ the @samp{-T} option had been given.
|
||||
@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, unless @samp{-J}
|
||||
line is too long to fit in a column, it is truncated, unless the @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
|
||||
@@ -1146,8 +1149,8 @@ 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{-m} does. Default counting of the line numbers starts with the
|
||||
first line of the input file (not the first 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
|
||||
@@ -1155,8 +1158,8 @@ separator is the TAB character. In a strict sense a 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
|
||||
@samp{equal width of output columns} (a @sc{posix} specification).
|
||||
The @var{TAB}-width is fixed to the value of the first 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
|
||||
@@ -1196,7 +1199,7 @@ is the 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.
|
||||
That is a @sc{posix}-compliant formulation.
|
||||
|
||||
|
||||
@item -S[@var{string}]
|
||||
@@ -1251,7 +1254,7 @@ 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.
|
||||
A @sc{posix}-compliant formulation.
|
||||
|
||||
@item -W @var{page_width}
|
||||
@itemx --page_width=@var{page_width}
|
||||
@@ -1546,26 +1549,16 @@ terminate until long after the real writer has terminated.
|
||||
Note that @samp{--pid} cannot be supported on some systems; @code{tail}
|
||||
will print a warning if this is the case.
|
||||
|
||||
@itemx --max-consecutive-size-changes=@var{n}
|
||||
@opindex --max-consecutive-size-changes
|
||||
This option is meaningful only when following by name.
|
||||
Use it to control how long @code{tail} follows the descriptor of a file
|
||||
that continues growing at a rapid pace even after it is deleted or renamed.
|
||||
After detecting @var{n} consecutive size changes for a file,
|
||||
@code{open}/@code{fstat} the file to determine if that file name is
|
||||
still associated with the same device/inode-number pair as before.
|
||||
See the output of @code{tail --help} for the default value.
|
||||
|
||||
@itemx --max-unchanged-stats=@var{n}
|
||||
@opindex --max-unchanged-stats
|
||||
When tailing a file by name, if there have been this many consecutive
|
||||
When tailing a file by name, if there have been @var{n} (default
|
||||
N=@value{DEFAULT_MAX_N_UNCHANGED_STATS_BETWEEN_OPENS}) consecutive
|
||||
iterations for which the size has remained the same, then
|
||||
@code{open}/@code{fstat} the file to determine if that file name is
|
||||
still associated with the same device/inode-number pair as before.
|
||||
When following a log file that is rotated, this is approximately the
|
||||
number of seconds between when tail prints the last pre-rotation lines
|
||||
and when it prints the lines that have accumulated in the new log file.
|
||||
See the output of @code{tail --help} for the default value.
|
||||
This option is meaningful only when following by name.
|
||||
|
||||
@itemx -n @var{n}
|
||||
@@ -1803,32 +1796,34 @@ contents of files.
|
||||
|
||||
@pindex wc
|
||||
@cindex byte count
|
||||
@cindex character count
|
||||
@cindex word count
|
||||
@cindex line count
|
||||
|
||||
@code{wc} counts the number of bytes, whitespace-separated words, and
|
||||
newlines in each given @var{file}, or standard input if none are given
|
||||
or for a @var{file} of @samp{-}. Synopsis:
|
||||
@code{wc} counts the number of bytes, characters, whitespace-separated
|
||||
words, and newlines in each given @var{file}, or standard input if none
|
||||
are given or for a @var{file} of @samp{-}. Synopsis:
|
||||
|
||||
@example
|
||||
wc [@var{option}]@dots{} [@var{file}]@dots{}
|
||||
@end example
|
||||
|
||||
@cindex total counts
|
||||
@vindex POSIXLY_CORRECT
|
||||
@code{wc} prints one line of counts for each file, and if the file was
|
||||
given as an argument, it prints the file name following the counts. If
|
||||
more than one @var{file} is given, @code{wc} prints a final line
|
||||
containing the cumulative counts, with the file name @file{total}. The
|
||||
counts are printed in this order: newlines, words, bytes.
|
||||
counts are printed in this order: newlines, words, characters, bytes.
|
||||
By default, each count is output right-justified in a 7-byte field with
|
||||
one space between fields so that the numbers and file names line up nicely
|
||||
in columns. However, POSIX requires that there be exactly one space
|
||||
separating columns. You can make @code{wc} use the POSIX-mandated
|
||||
in columns. However, @sc{posix} requires that there be exactly one space
|
||||
separating columns. You can make @code{wc} use the @sc{posix}-mandated
|
||||
output format by setting the @env{POSIXLY_CORRECT} environment variable.
|
||||
|
||||
By default, @code{wc} prints all three counts. Options can specify
|
||||
that only certain counts be printed. Options do not undo others
|
||||
previously given, so
|
||||
By default, @code{wc} prints three counts: the newline, words, byte counts.
|
||||
Options can specify that only certain counts be printed. Options do not
|
||||
undo others previously given, so
|
||||
|
||||
@example
|
||||
wc --bytes --words
|
||||
@@ -1847,12 +1842,16 @@ The program accepts the following options. Also see @ref{Common options}.
|
||||
|
||||
@item -c
|
||||
@itemx --bytes
|
||||
@itemx --chars
|
||||
@opindex -c
|
||||
@opindex --bytes
|
||||
@opindex --chars
|
||||
Print only the byte counts.
|
||||
|
||||
@item -m
|
||||
@itemx --chars
|
||||
@opindex -m
|
||||
@opindex --chars
|
||||
Print only the character counts.
|
||||
|
||||
@item -w
|
||||
@itemx --words
|
||||
@opindex -w
|
||||
@@ -2144,42 +2143,49 @@ value as the directory for temporary files instead of @file{/tmp}. The
|
||||
@samp{-T @var{tempdir}} option in turn overrides the environment
|
||||
variable.
|
||||
|
||||
@vindex LC_CTYPE
|
||||
The following options affect the ordering of output lines. They may be
|
||||
specified globally or as part of a specific key field. If no key
|
||||
fields are specified, global options apply to comparison of entire
|
||||
lines; otherwise the global options are inherited by key fields that do
|
||||
not specify any special options of their own. The @samp{-b}, @samp{-d},
|
||||
@samp{-f} and @samp{-i} options classify characters according to
|
||||
the @env{LC_CTYPE} locale.
|
||||
not specify any special options of their own. In pre-@sc{posix}
|
||||
versions of @command{sort}, global options affect only later key fields,
|
||||
so portable shell scripts should specify global options first.
|
||||
|
||||
@table @samp
|
||||
|
||||
@item -b
|
||||
@opindex -b
|
||||
@cindex blanks, ignoring leading
|
||||
@vindex LC_CTYPE
|
||||
Ignore leading blanks when finding sort keys in each line.
|
||||
The @env{LC_CTYPE} locale determines character types.
|
||||
|
||||
@item -d
|
||||
@opindex -d
|
||||
@cindex phone directory order
|
||||
@cindex telephone directory order
|
||||
@vindex LC_CTYPE
|
||||
Sort in @dfn{phone directory} order: ignore all characters except
|
||||
letters, digits and blanks when sorting.
|
||||
The @env{LC_CTYPE} locale determines character types.
|
||||
|
||||
@item -f
|
||||
@opindex -f
|
||||
@cindex case folding
|
||||
@vindex LC_CTYPE
|
||||
Fold lowercase characters into the equivalent uppercase characters when
|
||||
sorting so that, for example, @samp{b} and @samp{B} sort as equal.
|
||||
The @env{LC_CTYPE} locale determines character types.
|
||||
|
||||
@item -g
|
||||
@opindex -g
|
||||
@cindex general numeric sort
|
||||
@vindex LC_NUMERIC
|
||||
Sort numerically, using the standard C function @code{strtod} to convert
|
||||
a prefix of each line to a double-precision floating point number.
|
||||
This allows floating point numbers to be specified in scientific notation,
|
||||
like @code{1.0e-34} and @code{10e100}.
|
||||
The @env{LC_NUMERIC} locale determines the decimal-point character.
|
||||
Do not report overflow, underflow, or conversion errors.
|
||||
Use the following collating sequence:
|
||||
|
||||
@@ -2203,7 +2209,9 @@ Use this option only if there is no alternative; it is much slower than
|
||||
@item -i
|
||||
@opindex -i
|
||||
@cindex unprintable characters, ignoring
|
||||
@vindex LC_CTYPE
|
||||
Ignore unprintable characters.
|
||||
The @env{LC_CTYPE} locale determines character types.
|
||||
|
||||
@item -M
|
||||
@opindex -M
|
||||
@@ -2222,13 +2230,13 @@ determines the month spellings.
|
||||
Sort numerically: the number begins each line; specifically, it consists
|
||||
of optional whitespace, an optional @samp{-} sign, and zero or more
|
||||
digits possibly separated by thousands separators, optionally followed
|
||||
by a radix character and zero or more digits. The @env{LC_NUMERIC}
|
||||
locale specifies the radix character and thousands separator.
|
||||
by a decimal-point character and zero or more digits. The @env{LC_NUMERIC}
|
||||
locale specifies the decimal-point character and thousands separator.
|
||||
|
||||
@code{sort -n} uses what might be considered an unconventional method
|
||||
to compare strings representing floating point numbers. Rather than
|
||||
first converting each string to the C @code{double} type and then
|
||||
comparing those values, sort aligns the radix characters in the two
|
||||
comparing those values, sort aligns the decimal-point characters in the two
|
||||
strings and compares the strings a character at a time. One benefit
|
||||
of using this approach is its speed. In practice this is much more
|
||||
efficient than performing the two corresponding string-to-double (or even
|
||||
@@ -2271,6 +2279,17 @@ into fields @w{@samp{ foo}} and @w{@samp{ bar}}. The field separator is
|
||||
not considered to be part of either the field preceding or the field
|
||||
following.
|
||||
|
||||
@item -T @var{tempdir}
|
||||
@opindex -T
|
||||
@cindex temporary directory
|
||||
@vindex TMPDIR
|
||||
Use directory @var{tempdir} to store temporary files, overriding the
|
||||
@env{TMPDIR} environment variable. If this option is given more than
|
||||
once, temporary files are stored in all the directories given. If you
|
||||
have a large sort or merge that is I/O-bound, you can often improve
|
||||
performance by using this option to specify directories on different
|
||||
disks and controllers.
|
||||
|
||||
@item -u
|
||||
@opindex -u
|
||||
@cindex uniquifying output
|
||||
@@ -2398,13 +2417,13 @@ sort -t : -n -k 5b,5 -k 3,3 /etc/passwd
|
||||
@end example
|
||||
|
||||
@item
|
||||
Generate a tags file in case insensitive sorted order.
|
||||
Generate a tags file in case-insensitive sorted order.
|
||||
|
||||
@example
|
||||
@smallexample
|
||||
find src -type f -print0 | sort -t / -z -f | xargs -0 etags --append
|
||||
@end example
|
||||
@end smallexample
|
||||
|
||||
The use of @samp{-print0}, @samp{-z}, and @samp{-0} in this case mean
|
||||
The use of @samp{-print0}, @samp{-z}, and @samp{-0} in this case means
|
||||
that pathnames that contain Line Feed characters will not get broken up
|
||||
by the sort operation.
|
||||
|
||||
@@ -2473,7 +2492,7 @@ The program accepts the following options. Also see @ref{Common options}.
|
||||
@opindex --skip-fields
|
||||
Skip @var{n} fields on each line before checking for uniqueness. Fields
|
||||
are sequences of non-space non-tab characters that are separated from
|
||||
each other by at least one spaces or tabs.
|
||||
each other by at least one space or tab.
|
||||
|
||||
@item +@var{n}
|
||||
@itemx -s @var{n}
|
||||
@@ -2549,8 +2568,8 @@ comm [@var{option}]@dots{} @var{file1} @var{file2}
|
||||
|
||||
@vindex LC_COLLATE
|
||||
Before @code{comm} can be used, the input files must be sorted using the
|
||||
collating sequence specified by the @env{LC_COLLATE} locale, with
|
||||
trailing newlines significant. If an input file ends in a non-newline
|
||||
collating sequence specified by the @env{LC_COLLATE} locale.
|
||||
If an input file ends in a non-newline
|
||||
character, a newline is silently appended. The @code{sort} command with
|
||||
no options always outputs a file that is suitable input to @code{comm}.
|
||||
|
||||
@@ -2640,35 +2659,35 @@ ptx -G [@var{option} @dots{}] [@var{input} [@var{output}]]
|
||||
@end example
|
||||
|
||||
The @samp{-G} (or its equivalent: @samp{--traditional}) option disables
|
||||
all GNU extensions and revert to traditional mode, thus introducing some
|
||||
limitations, and changes several of the program's default option values.
|
||||
all GNU extensions and reverts to traditional mode, thus introducing some
|
||||
limitations and changing several of the program's default option values.
|
||||
When @samp{-G} is not specified, GNU extensions are always enabled. GNU
|
||||
extensions to @code{ptx} are documented wherever appropriate in this
|
||||
document. For the full list, see @xref{Compatibility in ptx}.
|
||||
|
||||
Individual options are explained in incoming sections.
|
||||
Individual options are explained in the following sections.
|
||||
|
||||
When GNU extensions are enabled, there may be zero, one or several
|
||||
@var{file} after the options. If there is no @var{file}, the program
|
||||
reads the standard input. If there is one or several @var{file}, they
|
||||
@var{file}s after the options. If there is no @var{file}, the program
|
||||
reads the standard input. If there is one or several @var{file}s, they
|
||||
give the name of input files which are all read in turn, as if all the
|
||||
input files were concatenated. However, there is a full contextual
|
||||
break between each file and, when automatic referencing is requested,
|
||||
file names and line numbers refer to individual text input files. In
|
||||
all cases, the program produces the permuted index onto the standard
|
||||
all cases, the program outputs the permuted index to the standard
|
||||
output.
|
||||
|
||||
When GNU extensions are @emph{not} enabled, that is, when the program
|
||||
operates in traditional mode, there may be zero, one or two parameters
|
||||
besides the options. If there is no parameters, the program reads the
|
||||
standard input and produces the permuted index onto the standard output.
|
||||
besides the options. If there are no parameters, the program reads the
|
||||
standard input and outputs the permuted index to the standard output.
|
||||
If there is only one parameter, it names the text @var{input} to be read
|
||||
instead of the standard input. If two parameters are given, they give
|
||||
respectively the name of the @var{input} file to read and the name of
|
||||
the @var{output} file to produce. @emph{Be very careful} to note that,
|
||||
in this case, the contents of file given by the second parameter is
|
||||
destroyed. This behaviour is dictated only by System V @code{ptx}
|
||||
compatibility, because GNU Standards discourage output parameters not
|
||||
destroyed. This behavior is dictated by System V @code{ptx}
|
||||
compatibility; GNU Standards normally discourage output parameters not
|
||||
introduced by an option.
|
||||
|
||||
Note that for @emph{any} file named as the value of an option or as an
|
||||
@@ -2677,7 +2696,7 @@ standard input is assumed. However, it would not make sense to use this
|
||||
convention more than once per program invocation.
|
||||
|
||||
@menu
|
||||
* 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.
|
||||
@@ -2692,20 +2711,20 @@ convention more than once per program invocation.
|
||||
|
||||
@item -C
|
||||
@itemx --copyright
|
||||
Prints a short note about the Copyright and copying conditions, then
|
||||
Print a short note about the copyright and copying conditions, then
|
||||
exit without further processing.
|
||||
|
||||
@item -G
|
||||
@itemx --traditional
|
||||
As already explained, this option disables all GNU extensions to
|
||||
@code{ptx} and switch to traditional mode.
|
||||
@code{ptx} and switches to traditional mode.
|
||||
|
||||
@item --help
|
||||
Prints a short help on standard output, then exit without further
|
||||
Print a short help on standard output, then exit without further
|
||||
processing.
|
||||
|
||||
@item --version
|
||||
Prints the program verison on standard output, then exit without further
|
||||
Print the program version on standard output, then exit without further
|
||||
processing.
|
||||
|
||||
@end table
|
||||
@@ -2714,16 +2733,17 @@ processing.
|
||||
@node Charset selection in ptx
|
||||
@subsection Charset selection
|
||||
|
||||
As it is setup now, the program assumes that the input file is coded
|
||||
@c FIXME: People don't necessarily know what an IBM-PC was these days.
|
||||
As it is set up now, the program assumes that the input file is coded
|
||||
using 8-bit ISO 8859-1 code, also known as Latin-1 character set,
|
||||
@emph{unless} if it is compiled for MS-DOS, in which case it uses the
|
||||
@emph{unless} it is compiled for MS-DOS, in which case it uses the
|
||||
character set of the IBM-PC. (GNU @code{ptx} is not known to work on
|
||||
smaller MS-DOS machines anymore.) Compared to 7-bit @sc{ascii}, the set of
|
||||
characters which are letters is then different, this fact alters the
|
||||
behaviour of regular expression matching. Thus, the default regular
|
||||
expression for a keyword allows foreign or diacriticized letters.
|
||||
Keyword sorting, however, is still crude; it obeys the underlying
|
||||
character set ordering quite blindly.
|
||||
smaller MS-DOS machines anymore.) Compared to 7-bit @sc{ascii}, the set
|
||||
of characters which are letters is different; this alters the behavior
|
||||
of regular expression matching. Thus, the default regular 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 @samp
|
||||
|
||||
@@ -2745,7 +2765,7 @@ Fold lower case letters to upper case for sorting.
|
||||
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
|
||||
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
|
||||
@samp{-b} and @samp{-W} are specified, then @samp{-W} has precedence and
|
||||
@samp{-b} is ignored.
|
||||
@@ -2774,21 +2794,21 @@ default Ignore file, specify @code{/dev/null} instead.
|
||||
@itemx --only-file=@var{file}
|
||||
|
||||
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
|
||||
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 @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
|
||||
only if it is given in the Only file and not given in the Ignore file.
|
||||
Only file and an Ignore file, a word can be a keyword only if it is
|
||||
given in the Only file and not given in the Ignore file.
|
||||
|
||||
@item -r
|
||||
@itemx --references
|
||||
|
||||
On each input line, the leading sequence of non white characters will be
|
||||
On each input line, the leading sequence of non-white space 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
|
||||
line in the resulting permuted index. For more information about reference
|
||||
production, see @xref{Output formatting in ptx}.
|
||||
Using this option changes the default value for option @samp{-S}.
|
||||
|
||||
@@ -2803,12 +2823,12 @@ excluded from the output contexts.
|
||||
@itemx --sentence-regexp=@var{regexp}
|
||||
|
||||
This option selects which regular expression will describe the end of a
|
||||
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
|
||||
@samp{-r} option is not used, end of sentences are used. In this
|
||||
case, the precise @var{regex} is imported from GNU emacs:
|
||||
line or the end of a sentence. In fact, this regular expression is not
|
||||
the only distinction between end of lines or end of sentences, and input
|
||||
line boundaries have no special significance outside this option. By
|
||||
default, when GNU extensions are enabled and if @samp{-r} option is not
|
||||
used, end of sentences are used. In this case, this @var{regex} is
|
||||
imported from GNU Emacs:
|
||||
|
||||
@example
|
||||
[.?!][]\"')@}]*\\($\\|\t\\| \\)[ \t\n]*
|
||||
@@ -2839,8 +2859,8 @@ the head of the input line or sentence is used to fill the unused area
|
||||
on the right of the output line.
|
||||
|
||||
As a matter of convenience to the user, many usual backslashed escape
|
||||
sequences, as found in the C language, are recognized and converted to
|
||||
the corresponding characters by @code{ptx} itself.
|
||||
sequences from the C language are recognized and converted to the
|
||||
corresponding characters by @code{ptx} itself.
|
||||
|
||||
@item -W @var{regexp}
|
||||
@itemx --word-regexp=@var{regexp}
|
||||
@@ -2851,9 +2871,9 @@ 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 @samp{[^ \t\n]+}.
|
||||
|
||||
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}.
|
||||
An empty @var{regexp} is equivalent to not using this option.
|
||||
@xref{Regexps, , Syntax of Regular Expressions, emacs, The GNU Emacs
|
||||
Manual}.
|
||||
|
||||
As a matter of convenience to the user, many usual backslashed escape
|
||||
sequences, as found in the C language, are recognized and converted to
|
||||
@@ -2865,13 +2885,13 @@ the corresponding characters by @code{ptx} itself.
|
||||
@node Output formatting in ptx
|
||||
@subsection Output formatting
|
||||
|
||||
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 format is mainly controlled by the @samp{-O} and @samp{-T} options
|
||||
described in the table below. When neither @samp{-O} nor @samp{-T} are
|
||||
selected, and if GNU extensions are enabled, the program chooses an
|
||||
output format suitable 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
|
||||
can be readily observed. As a special feature, if automatic
|
||||
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
|
||||
@@ -2889,8 +2909,8 @@ Output format is further controlled by the following options.
|
||||
@item -g @var{number}
|
||||
@itemx --gap-size=@var{number}
|
||||
|
||||
Select the size of the minimum white gap between the fields on the output
|
||||
line.
|
||||
Select the size of the minimum white space gap between the fields on the
|
||||
output line.
|
||||
|
||||
@item -w @var{number}
|
||||
@itemx --width=@var{number}
|
||||
@@ -2900,7 +2920,7 @@ used, they are included or excluded from the output maximum width
|
||||
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
|
||||
references. If this option is selected, that is, when references are
|
||||
output after the right context, the output maximum width does not take
|
||||
into account the space taken by references, nor the gap that precedes
|
||||
them.
|
||||
@@ -2940,12 +2960,12 @@ towards the beginning or the end of the current line, or current
|
||||
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,
|
||||
to be truncated because it cannot extend beyond the beginning or the end of
|
||||
the current line to fit in, then a truncation occurs. By default,
|
||||
the string used is a single slash, as in @samp{-F /}.
|
||||
|
||||
@var{string} may have more than one character, as in @samp{-F ...}.
|
||||
Also, in the particular case @var{string} is empty (@samp{-F ""}),
|
||||
Also, in the particular case when @var{string} is empty (@samp{-F ""}),
|
||||
truncation flagging is disabled, and no truncation marks are appended in
|
||||
this case.
|
||||
|
||||
@@ -2965,11 +2985,11 @@ generating output suitable for @code{nroff}, @code{troff} or @TeX{}.
|
||||
Choose an output format suitable for @code{nroff} or @code{troff}
|
||||
processing. Each output line will look like:
|
||||
|
||||
@example
|
||||
@smallexample
|
||||
.xx "@var{tail}" "@var{before}" "@var{keyword_and_after}" "@var{head}" "@var{ref}"
|
||||
@end example
|
||||
@end smallexample
|
||||
|
||||
so it will be possible to write an @samp{.xx} roff macro to take care of
|
||||
so it will be possible to write a @samp{.xx} roff macro to take care of
|
||||
the output typesetting. This is the default output format when GNU
|
||||
extensions are disabled. Option @samp{-M} might be used to change
|
||||
@samp{xx} to another macro name.
|
||||
@@ -2985,9 +3005,9 @@ so it will be correctly processed by @code{nroff} or @code{troff}.
|
||||
Choose an output format suitable for @TeX{} processing. Each output
|
||||
line will look like:
|
||||
|
||||
@example
|
||||
@smallexample
|
||||
\xx @{@var{tail}@}@{@var{before}@}@{@var{keyword}@}@{@var{after}@}@{@var{head}@}@{@var{ref}@}
|
||||
@end example
|
||||
@end smallexample
|
||||
|
||||
@noindent
|
||||
so it will be possible to write a @code{\xx} definition to take care of
|
||||
@@ -3035,11 +3055,11 @@ or, if a second @var{file} parameter is given on the command, to that
|
||||
|
||||
Having output parameters not introduced by options is a quite dangerous
|
||||
practice which GNU avoids as far as possible. So, for using @code{ptx}
|
||||
portably between GNU and System V, you should pay attention to always
|
||||
use it with a single input file, and always expect the result on
|
||||
standard output. You might also want to automatically configure in a
|
||||
@samp{-G} option to @code{ptx} calls in products using @code{ptx}, if
|
||||
the configurator finds that the installed @code{ptx} accepts @samp{-G}.
|
||||
portably between GNU and System V, you should always use it with a
|
||||
single input file, and always expect the result on standard output. You
|
||||
might also want to automatically configure in a @samp{-G} option to
|
||||
@code{ptx} calls in products using @code{ptx}, if the configurator finds
|
||||
that the installed @code{ptx} accepts @samp{-G}.
|
||||
|
||||
@item
|
||||
The only options available in System V @code{ptx} are options @samp{-b},
|
||||
@@ -3063,7 +3083,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 tilde @kbd{~} is condemned.
|
||||
control characters are rejected, and the tilde @kbd{~} is also rejected.
|
||||
|
||||
@item
|
||||
Input line length is only limited by available memory, even if GNU
|
||||
@@ -3145,6 +3165,8 @@ take up 1 character.
|
||||
@opindex --fields
|
||||
Print only the fields listed in @var{field-list}. Fields are
|
||||
separated by a TAB character by default.
|
||||
Also print any line that contains no delimiter character, unless
|
||||
the @samp{--only-delimited} (@samp{-s}) option is specified
|
||||
|
||||
@item -d @var{input_delim_byte}
|
||||
@itemx --delimiter=@var{input_delim_byte}
|
||||
@@ -3166,7 +3188,7 @@ character.
|
||||
|
||||
@itemx --output-delimiter=@var{output_delim_string}
|
||||
@opindex --output-delimiter
|
||||
For @samp{-f}, output fields are separated by @var{output_delim_string}
|
||||
For @samp{-f}, output fields are separated by @var{output_delim_string}.
|
||||
The default is to use the input delimiter.
|
||||
|
||||
|
||||
@@ -3416,11 +3438,23 @@ A backslash.
|
||||
The notation @samp{@var{m}-@var{n}} expands to all of the characters
|
||||
from @var{m} through @var{n}, in ascending order. @var{m} should
|
||||
collate before @var{n}; if it doesn't, an error results. As an example,
|
||||
@samp{0-9} is the same as @samp{0123456789}. Although GNU @code{tr}
|
||||
does not support the System V syntax that uses square brackets to
|
||||
enclose ranges, translations specified in that format will still work as
|
||||
long as the brackets in @var{string1} correspond to identical brackets
|
||||
in @var{string2}.
|
||||
@samp{0-9} is the same as @samp{0123456789}.
|
||||
|
||||
GNU @code{tr} does not support the System V syntax that uses square
|
||||
brackets to enclose ranges. Translations specified in that format
|
||||
sometimes work as expected, since the brackets are often transliterated
|
||||
to themselves. However, they should be avoided because they sometimes
|
||||
behave unexpectedly. For example, @samp{tr -d '[0-9]'} deletes brackets
|
||||
as well as digits.
|
||||
|
||||
Many historically common and even accepted uses of ranges are not
|
||||
portable. For example, on @sc{ebcdic} hosts using the @samp{A-Z}
|
||||
range will not do what most would expect because @samp{A} through @samp{Z}
|
||||
are not contiguous as they are in @sc{ascii}.
|
||||
If you can rely on a @sc{posix} compliant version of @code{tr}, then
|
||||
the best way to work around this is to use character classes (see below).
|
||||
Otherwise, it is most portable (and most ugly) to enumerate the members
|
||||
of the ranges.
|
||||
|
||||
@item Repeated characters
|
||||
@cindex repeated characters
|
||||
@@ -3529,6 +3563,9 @@ tr a-z A-Z
|
||||
tr '[:lower:]' '[:upper:]'
|
||||
@end example
|
||||
|
||||
@noindent
|
||||
But note that using ranges like @code{a-z} above is not portable.
|
||||
|
||||
When @code{tr} is performing translation, @var{set1} and @var{set2}
|
||||
typically have the same length. If @var{set1} is shorter than
|
||||
@var{set2}, the extra characters at the end of @var{set2} are ignored.
|
||||
@@ -3556,6 +3593,14 @@ because it converts only zero bytes (the first element in the
|
||||
complement of @var{set1}), rather than all non-alphanumerics, to
|
||||
newlines.
|
||||
|
||||
@noindent
|
||||
By the way, the above idiom is not portable because it uses ranges.
|
||||
Assuming a @sc{posix} compliant @code{tr}, here is a better way to write it:
|
||||
|
||||
@example
|
||||
tr -cs '[:alnum:]' '[\n*]'
|
||||
@end example
|
||||
|
||||
|
||||
@node Squeezing
|
||||
@subsection Squeezing repeats and deleting
|
||||
@@ -3595,7 +3640,7 @@ non-alphanumeric characters to newlines, then squeezes each string
|
||||
of repeated newlines into a single newline:
|
||||
|
||||
@example
|
||||
tr -cs 'a-zA-Z0-9' '[\n*]'
|
||||
tr -cs '[:alnum:]' '[\n*]'
|
||||
@end example
|
||||
|
||||
@item
|
||||
@@ -3881,9 +3926,9 @@ water pipeline.
|
||||
|
||||
With the Unix shell, it's very easy to set up data pipelines:
|
||||
|
||||
@example
|
||||
@smallexample
|
||||
program_to_create_data | filter1 | .... | filterN > final.pretty.data
|
||||
@end example
|
||||
@end smallexample
|
||||
|
||||
We start out by creating the raw data; each filter applies some successive
|
||||
transformation to the data, until by the time it comes out of the pipeline,
|
||||
@@ -4081,7 +4126,7 @@ characters. Normally it is used for things like mapping upper case to
|
||||
lower case:
|
||||
|
||||
@example
|
||||
$ echo ThIs ExAmPlE HaS MIXED case! | tr '[A-Z]' '[a-z]'
|
||||
$ echo ThIs ExAmPlE HaS MIXED case! | tr '[:upper:]' '[:lower:]'
|
||||
this example has mixed case!
|
||||
@end example
|
||||
|
||||
@@ -4140,16 +4185,16 @@ The first step is to change the case of all the letters in our input file
|
||||
to one case. ``The'' and ``the'' are the same word when doing counting.
|
||||
|
||||
@example
|
||||
$ tr '[A-Z]' '[a-z]' < whats.gnu | ...
|
||||
$ tr '[:upper:]' '[:lower:]' < whats.gnu | ...
|
||||
@end example
|
||||
|
||||
The next step is to get rid of punctuation. Quoted words and unquoted words
|
||||
should be treated identically; it's easiest to just get the punctuation out of
|
||||
the way.
|
||||
|
||||
@example
|
||||
$ tr '[A-Z]' '[a-z]' < whats.gnu | tr -cd '[A-Za-z0-9_ \012]' | ...
|
||||
@end example
|
||||
@smallexample
|
||||
$ tr '[:upper:]' '[:lower:]' < whats.gnu | tr -cd '[:alnum:]_ \012' | ...
|
||||
@end smallexample
|
||||
|
||||
The second @code{tr} command operates on the complement of the listed
|
||||
characters, which are all the letters, the digits, the underscore, and
|
||||
@@ -4162,10 +4207,10 @@ The words only contain alphanumeric characters (and the underscore). The
|
||||
next step is break the data apart so that we have one word per line. This
|
||||
makes the counting operation much easier, as we will see shortly.
|
||||
|
||||
@example
|
||||
$ tr '[A-Z]' '[a-z]' < whats.gnu | tr -cd '[A-Za-z0-9_ \012]' |
|
||||
> tr -s '[ ]' '\012' | ...
|
||||
@end example
|
||||
@smallexample
|
||||
$ tr '[:upper:]' '[:lower:]' < whats.gnu | tr -cd '[:alnum:]_ \012' |
|
||||
> tr -s ' ' '\012' | ...
|
||||
@end smallexample
|
||||
|
||||
This command turns blanks into newlines. The @samp{-s} option squeezes
|
||||
multiple newline characters in the output into just one. This helps us
|
||||
@@ -4176,10 +4221,10 @@ typing in all of a command.)
|
||||
We now have data consisting of one word per line, no punctuation, all one
|
||||
case. We're ready to count each word:
|
||||
|
||||
@example
|
||||
$ tr '[A-Z]' '[a-z]' < whats.gnu | tr -cd '[A-Za-z0-9_ \012]' |
|
||||
> tr -s '[ ]' '\012' | sort | uniq -c | ...
|
||||
@end example
|
||||
@smallexample
|
||||
$ tr '[:upper:]' '[:lower:]' < whats.gnu | tr -cd '[:alnum:]_ \012' |
|
||||
> tr -s ' ' '\012' | sort | uniq -c | ...
|
||||
@end smallexample
|
||||
|
||||
At this point, the data might look something like this:
|
||||
|
||||
@@ -4208,16 +4253,16 @@ reverse the order of the sort
|
||||
|
||||
The final pipeline looks like this:
|
||||
|
||||
@example
|
||||
$ tr '[A-Z]' '[a-z]' < whats.gnu | tr -cd '[A-Za-z0-9_ \012]' |
|
||||
> tr -s '[ ]' '\012' | sort | uniq -c | sort -nr
|
||||
@smallexample
|
||||
$ tr '[:upper:]' '[:lower:]' < whats.gnu | tr -cd '[:alnum:]_ \012' |
|
||||
> tr -s ' ' '\012' | sort | uniq -c | sort -nr
|
||||
156 the
|
||||
60 a
|
||||
58 to
|
||||
51 of
|
||||
51 and
|
||||
...
|
||||
@end example
|
||||
@end smallexample
|
||||
|
||||
Whew! That's a lot to digest. Yet, the same principles apply. With six
|
||||
commands, on two lines (really one long one split for convenience), we've
|
||||
@@ -4235,19 +4280,19 @@ dictionary.
|
||||
Now, how to compare our file with the dictionary? As before, we generate
|
||||
a sorted list of words, one per line:
|
||||
|
||||
@example
|
||||
$ tr '[A-Z]' '[a-z]' < whats.gnu | tr -cd '[A-Za-z0-9_ \012]' |
|
||||
> tr -s '[ ]' '\012' | sort -u | ...
|
||||
@end example
|
||||
@smallexample
|
||||
$ tr '[:upper:]' '[:lower:]' < whats.gnu | tr -cd '[:alnum:]_ \012' |
|
||||
> tr -s ' ' '\012' | sort -u | ...
|
||||
@end smallexample
|
||||
|
||||
Now, all we need is a list of words that are @emph{not} in the
|
||||
dictionary. Here is where the @code{comm} command comes in.
|
||||
|
||||
@example
|
||||
$ tr '[A-Z]' '[a-z]' < whats.gnu | tr -cd '[A-Za-z0-9_ \012]' |
|
||||
> tr -s '[ ]' '\012' | sort -u |
|
||||
@smallexample
|
||||
$ tr '[:upper:]' '[:lower:]' < whats.gnu | tr -cd '[:alnum:]_ \012' |
|
||||
> tr -s ' ' '\012' | sort -u |
|
||||
> comm -23 - /usr/lib/ispell/ispell.words
|
||||
@end example
|
||||
@end smallexample
|
||||
|
||||
The @samp{-2} and @samp{-3} options eliminate lines that are only in the
|
||||
dictionary (the second file), and lines that are in both files. Lines
|
||||
|
||||
@@ -6,4 +6,5 @@ getopt1.c
|
||||
md5.h
|
||||
obstack.h
|
||||
regex.h
|
||||
regex.c
|
||||
getpagesize.h
|
||||
|
||||
@@ -1,8 +1,11 @@
|
||||
.deps
|
||||
Makefile
|
||||
charset.alias
|
||||
getdate.c
|
||||
getdate.tab.c
|
||||
lstat.c
|
||||
ref-add.sed
|
||||
ref-del.sed
|
||||
safe-lstat.c
|
||||
safe-lstat.h
|
||||
safe-stat.c
|
||||
|
||||
198
lib/.gdb-history
198
lib/.gdb-history
@@ -19,3 +19,201 @@ n
|
||||
p (he->h_addrtype)
|
||||
n
|
||||
q
|
||||
r a:b
|
||||
b main
|
||||
r a:b
|
||||
n
|
||||
s
|
||||
n
|
||||
p separator
|
||||
n
|
||||
l 128
|
||||
c
|
||||
q
|
||||
r meyering:store
|
||||
p *username
|
||||
p *username[separator - name]
|
||||
p separator - name
|
||||
p username[separator - name]
|
||||
r ''
|
||||
l
|
||||
q
|
||||
r ''
|
||||
l
|
||||
q
|
||||
r meyering
|
||||
b main
|
||||
r meyering
|
||||
n
|
||||
r
|
||||
n
|
||||
s
|
||||
n
|
||||
p u
|
||||
n
|
||||
n
|
||||
q
|
||||
r ''
|
||||
r meyering
|
||||
up
|
||||
l
|
||||
q
|
||||
b main
|
||||
b a.out 1
|
||||
r a.out 1
|
||||
n
|
||||
s
|
||||
fin
|
||||
s
|
||||
n
|
||||
p uid
|
||||
p gid
|
||||
p euid
|
||||
p egid
|
||||
n
|
||||
p mode
|
||||
p path
|
||||
fin
|
||||
r -v -c 10 -n 20 -x 80 < in-2
|
||||
up
|
||||
up
|
||||
p &dummy
|
||||
p *ovp
|
||||
p *(int*)*ovp
|
||||
p ((struct item*)*ovp)->key
|
||||
p old_vec@10
|
||||
r -v -c 10 -n 20 -x 80 < in-3
|
||||
p *(int*)*ovp
|
||||
up
|
||||
dow
|
||||
p *(int*)*ovp
|
||||
up
|
||||
p *(int*)*ovp
|
||||
i loca
|
||||
dow
|
||||
p key
|
||||
p dummy
|
||||
p &dummy
|
||||
up
|
||||
p old_vec
|
||||
p *ovp
|
||||
p ovp
|
||||
p ovp - old_vec
|
||||
p *old_vec@10
|
||||
p *old_vec@13
|
||||
b hash_insert_item
|
||||
r
|
||||
b hash_insert_item_at
|
||||
r
|
||||
n
|
||||
p fail
|
||||
p *(ht->vec)@13
|
||||
p *(ht->ht_vec)@13
|
||||
p ((struct item*)(ht->ht_vec)[10])->key
|
||||
b hash_delete_item
|
||||
b hash_delete_item_at
|
||||
c
|
||||
n
|
||||
p slot
|
||||
p item
|
||||
n
|
||||
n
|
||||
p *(ht->ht_vec)@13
|
||||
p &dummy
|
||||
p dummy
|
||||
n
|
||||
s
|
||||
n
|
||||
n
|
||||
p *(ht->ht_vec)@13
|
||||
n
|
||||
p new_size
|
||||
n
|
||||
p *old_vec@13
|
||||
p old_vec@13
|
||||
n
|
||||
p *old_vec@13
|
||||
n
|
||||
p *old_vec@13
|
||||
n
|
||||
l
|
||||
n
|
||||
p ovp - old_vec
|
||||
n
|
||||
p ovp - old_vec
|
||||
n
|
||||
p ovp - old_vec
|
||||
p *old_vec@13
|
||||
p &dummy
|
||||
q
|
||||
r 444444444444 44444444444
|
||||
b human_readable
|
||||
r
|
||||
n
|
||||
q
|
||||
b main
|
||||
r 444444444444 44444444444
|
||||
n
|
||||
p a
|
||||
p b
|
||||
r 34343434 3434343434
|
||||
c
|
||||
r
|
||||
n
|
||||
n
|
||||
p a
|
||||
p b
|
||||
r 343434343 343434343
|
||||
c
|
||||
q
|
||||
b posixtime
|
||||
r
|
||||
n
|
||||
s
|
||||
n
|
||||
p len
|
||||
n
|
||||
p pair
|
||||
p len
|
||||
n
|
||||
b year
|
||||
y
|
||||
c
|
||||
c
|
||||
p n
|
||||
up
|
||||
p len
|
||||
q
|
||||
complete b user
|
||||
complete b user
|
||||
complete b pars
|
||||
b parse_user_spec
|
||||
r a.b
|
||||
n
|
||||
n
|
||||
p u
|
||||
n
|
||||
p u
|
||||
n
|
||||
r -r .aa > k
|
||||
pwd
|
||||
q
|
||||
b main
|
||||
r
|
||||
b get_date
|
||||
c
|
||||
n
|
||||
p tm
|
||||
n
|
||||
p tm
|
||||
n
|
||||
p pc
|
||||
n
|
||||
p tm
|
||||
n
|
||||
p tm
|
||||
n
|
||||
p delta
|
||||
n
|
||||
p Start
|
||||
q
|
||||
|
||||
858
lib/ChangeLog
Normal file
858
lib/ChangeLog
Normal file
@@ -0,0 +1,858 @@
|
||||
2000-09-09 Jim Meyering <meyering@lucent.com>
|
||||
|
||||
Don't use atoi.
|
||||
* userspec.c: Include sys/param.h and limits.h.
|
||||
Include xstrtol.h.
|
||||
(CHAR_BIT, TYPE_SIGNED, TYPE_MINIMUM, TYPE_MAXIMUM): Define.
|
||||
(UID_T_MAX, GID_T_MAX, MAXUID, MAXGID): Define.
|
||||
(parse_user_spec): Use xstrtoul, not atoi when converting numeric
|
||||
UID, GID. Check range.
|
||||
|
||||
2000-09-06 Jim Meyering <meyering@lucent.com>
|
||||
|
||||
* getopt.c (_getopt_internal): Update from glibc.
|
||||
|
||||
2000-08-30 Jim Meyering <meyering@lucent.com>
|
||||
|
||||
* strftime.c: Merge in changes from GNU libc.
|
||||
|
||||
2000-08-26 Jim Meyering <meyering@lucent.com>
|
||||
|
||||
* closeout.c: Include "__fpending.h".
|
||||
(close_stdout_status): Return right away if there's nothing to flush.
|
||||
|
||||
* Makefile.am (noinst_HEADERS): Add __fpending.h.
|
||||
* __fpending.c: New file.
|
||||
* __fpending.h: New file.
|
||||
|
||||
2000-08-07 Paul Eggert <eggert@twinsun.com>
|
||||
|
||||
Standardize on "memory exhausted" instead of "Memory exhausted"
|
||||
or "virtual memory exhausted".
|
||||
* obstack.c (print_and_abort): Use "memory exhausted", not
|
||||
"virtual memory exhausted".
|
||||
* same.c (same_name): Invoke xalloc_die instead of printing
|
||||
our own message.
|
||||
* userspec.c (parse_user_spec): Likewise.
|
||||
* bumpalloc.h: comment fix
|
||||
* same.c, userspec.c: Include xalloc.h.
|
||||
|
||||
* xalloc.h (xalloc_msg_memory_exhausted): Now char const[],
|
||||
not char *const and pointing to a constant array.
|
||||
* xmalloc.c (xalloc_msg_memory_exhausted): Likewise.
|
||||
(xrealloc): Comment fix.
|
||||
|
||||
* userspec.c (parse_user_spec):
|
||||
Don't translate a message until just before returning,
|
||||
to avoid unnecessary translation.
|
||||
|
||||
2000-08-07 Jim Meyering <meyering@lucent.com>
|
||||
|
||||
* addext.c, argmatch.c, argmatch.h, backupfile.h, bumpalloc.h,
|
||||
chown.c, diacrit.h, dirname.h, dup2.c, exclude.h, fileblocks.c,
|
||||
fnmatch.c, fnmatch.h, fsusage.c, fsusage.h, getdate.h,
|
||||
getgroups.c, gethostname.c, getopt.h, group-member.c,
|
||||
hard-locale.c, hash.h, isdir.c, lchown.c, linebuffer.c,
|
||||
linebuffer.h, long-options.h, malloc.c, md5.c, md5.h, memchr.c,
|
||||
memcmp.c, memcoll.c, memset.c, mktime.c, modechange.h, obstack.h,
|
||||
pathmax.h, realloc.c, rmdir.c, safe-read.c, save-cwd.c, stime.c,
|
||||
stpcpy.c, strcasecmp.c, strcspn.c, strdup.c, stripslash.c,
|
||||
strstr.c, strtod.c, strtol.c, strtoul.c, strtoull.c, strtoumax.c,
|
||||
utime.c, version-etc.h, xalloc.h, xstrdup.c, xstrtoumax.c,
|
||||
yesno.c: Back out Copyright date changes for each file with no change
|
||||
this year. This eases coordination with other programs using the same
|
||||
source code modules. From Paul Eggert.
|
||||
|
||||
2000-08-03 Greg McGary <greg@mcgary.org>
|
||||
|
||||
* regex.c (SET_HIGH_BOUND, MOVE_BUFFER_POINTER,
|
||||
ELSE_EXTEND_BUFFER_HIGH_BOUND): New macros.
|
||||
(EXTEND_BUFFER): Use them.
|
||||
|
||||
2000-08-01 Jim Meyering <meyering@lucent.com>
|
||||
|
||||
* dirname.c (ISSLASH): Define.
|
||||
(BACKSLASH_IS_PATH_SEPARATOR): Define.
|
||||
(dir_name) [BACKSLASH_IS_PATH_SEPARATOR]: Handle the case in which
|
||||
both `\' and `/' may be use as path separators.
|
||||
Based on a patch from Prashant TR.
|
||||
|
||||
2000-07-31 Paul Eggert <eggert@twinsun.com>
|
||||
|
||||
* quotearg.c (quotearg_n_options): Don't make the initial
|
||||
slot vector a constant, since it might get modified.
|
||||
|
||||
2000-07-31 Jim Meyering <meyering@lucent.com>
|
||||
|
||||
* xmalloc.c: Use `virtual memory exhausted', not `Memory exhausted'.
|
||||
* obstack.c (print_and_abort): Likewise.
|
||||
|
||||
2000-07-30 Paul Eggert <eggert@twinsun.com>
|
||||
|
||||
* quotearg.c (quotearg_n_options): Preallocate a slot 0
|
||||
buffer, so that the caller can always quote one small
|
||||
component of a "memory exhausted" message in slot 0.
|
||||
From a suggestion by Jim Meyering.
|
||||
|
||||
2000-07-30 Jim Meyering <meyering@lucent.com>
|
||||
|
||||
* makepath.c (make_path): Quote the other instance, too.
|
||||
|
||||
* quotearg.c (N_STATIC_SLOTVECS): Define.
|
||||
(STATIC_BUF_SIZE): Define.
|
||||
(quotearg_n_options): Use only statically allocated storage when
|
||||
N < N_STATIC_SLOTVECS and the length of the quoted result is smaller
|
||||
than STATIC_BUF_SIZE.
|
||||
|
||||
2000-07-29 Jim Meyering <meyering@lucent.com>
|
||||
|
||||
* diacrit.c (diacrit_diac): Use __MSDOS__ in favor of MSDOS.
|
||||
* dirname.c (dir_name): Likewise.
|
||||
|
||||
* basename.c (base_name): Use ISSLASH rather than comparing against `/'.
|
||||
|
||||
* dirname.c (dir_name) [MSDOS]: Declare `lim' to be const.
|
||||
(dir_name): Assert that there are no trailing slashes.
|
||||
|
||||
2000-07-18 Bruno Haible <haible@clisp.cons.org>
|
||||
|
||||
* mbswidth.h (mbswidth): Add a flags argument.
|
||||
(mbswidth): New declaration.
|
||||
(MBSW_ACCEPT_INVALID, MBSW_ACCEPT_UNPRINTABLE): New macros.
|
||||
* mbswidth.c (mbswidth): Add a flags argument.
|
||||
(mbsnwidth): New function.
|
||||
|
||||
2000-07-24 Jim Meyering <meyering@lucent.com>
|
||||
|
||||
* mbswidth.c: Remove useless #else. From Bruno Haible.
|
||||
|
||||
2000-07-23 Paul Eggert <eggert@twinsun.com>
|
||||
|
||||
* mbswidth.c (_XOPEN_SOURCE):
|
||||
Don't define; this causes problems on Solaris 7.
|
||||
(wcwidth) [!HAVE_DECL_WCWIDTH]: Declare.
|
||||
|
||||
2000-07-23 Paul Eggert <eggert@twinsun.com>
|
||||
|
||||
* quotearg.c:
|
||||
Include <wchar.h> even if ! (HAVE_MBRTOWC && 1 < MB_LEN_MAX),
|
||||
so that mbstate_t is always defined.
|
||||
|
||||
Do not inspect MB_LEN_MAX, since it's incorrectly defined to
|
||||
be 1 in at least one GCC installation, and this configuration
|
||||
error is likely to be common. Ignoring MB_LEN_MAX hurts
|
||||
performance on hosts that have mbrtowc but have only unibyte
|
||||
locales, but I assume these hosts are rare.
|
||||
|
||||
2000-07-23 Paul Eggert <eggert@twinsun.com>
|
||||
|
||||
* quotearg.c: Streamline by invoking multibyte code only if needed.
|
||||
<wchar.h>: Include only if HAVE_MBRTOWC && 1 < MB_LEN_MAX.
|
||||
(MB_CUR_MAX): Redefine to 1 if ! (HAVE_MBRTOWC && 1 < MB_LEN_MAX).
|
||||
(quotearg_buffer_restyled): If a unibyte locale, don't bother to
|
||||
invoke multibyte primitives.
|
||||
|
||||
2000-07-23 Jim Meyering <meyering@lucent.com>
|
||||
|
||||
* basename.c (base_name): Add an assertion.
|
||||
|
||||
2000-07-15 Bruno Haible <clisp.cons.org>
|
||||
|
||||
* quotearg.c: When the system forces us to redefine mbstate_t,
|
||||
shadow its mbsinit function.
|
||||
|
||||
2000-07-16 Bruno Haible <haible@clisp.cons.org>
|
||||
|
||||
* mbswidth.h: New file.
|
||||
* mbswidth.c: New file.
|
||||
* Makefile.am (libfetish_a_SOURCES): Add mbswidth.c.
|
||||
(noinst_HEADERS): Add mbswidth.h.
|
||||
|
||||
2000-07-17 Bruno Haible <haible@clisp.cons.org>
|
||||
|
||||
* config.charset: Add support for FreeBSD. Improve support for HP-UX
|
||||
and IRIX 6.
|
||||
|
||||
2000-07-15 Jim Meyering <meyering@lucent.com>
|
||||
|
||||
* makepath.c: Include quote.h.
|
||||
(make_path): Convert "`%s'" in format strings to "%s", and wrap each
|
||||
corresponding argument in a `quote (...)' call.
|
||||
Give better diagnostics.
|
||||
|
||||
* Makefile.am (libfetish_a_SOURCES): Add quote.c.
|
||||
(noinst_HEADERS): Add quote.h.
|
||||
|
||||
* quote.c (quote, quote_n): New file. Two functions taken verbatim
|
||||
from tar's src/misc.c.
|
||||
* quote.h: New file. Prototypes for same.
|
||||
|
||||
2000-07-10 Paul Eggert <eggert@twinsun.com>
|
||||
|
||||
From a suggestion by Bruno Haible.
|
||||
* quotearg.c (mbrtowc): Do not use HAVE_WCHAR_H in the definition.
|
||||
Use defined mbstate_t, not HAVE_MBSTATE_T_OBJECT,
|
||||
to decide whether to define the BeOS workaround macro;
|
||||
this adjusts to the change to AC_MBSTATE_T.
|
||||
|
||||
2000-07-13 Paul Eggert <eggert@twinsun.com>
|
||||
|
||||
* quotearg.h (enum quoting style): New enum clocale_quoting_style.
|
||||
|
||||
* quotearg.c: (quoting_style_args, quoting_style_vals,
|
||||
quotearg_buffer_restyled): Add support for
|
||||
clocale_quoting_style. Undo previous change to
|
||||
locale_quoting_style behavior, and undo the "{LEFT QUOTATION MARK}"
|
||||
and "{RIGHT QUOTATION MARK}" msgids.
|
||||
|
||||
2000-07-05 Paul Eggert <eggert@twinsun.com>
|
||||
|
||||
The old behavior of quoting `like this' doesn't look good with
|
||||
newer, ISO-style fonts. See:
|
||||
http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html
|
||||
|
||||
Instead, quote "like this" by default. Let the translator
|
||||
tailor the locale-specific quoting behavior by providing
|
||||
translations for {LEFT QUOTATION MARK} and {RIGHT QUOTATION MARK}.
|
||||
|
||||
* quotearg.c (N_): New macro.
|
||||
(gettext_default): New function.
|
||||
(quotearg_buffer_restyled): Use
|
||||
gettext_default ("{LEFT QUOTATION MARK}", "\"") for left quote, and
|
||||
gettext_default ("{RIGHT QUOTATION MARK}", "\"") for right quote.
|
||||
|
||||
2000-07-09 Jim Meyering <meyering@lucent.com>
|
||||
|
||||
* Most files: Update copyright dates to include 2000.
|
||||
|
||||
2000-07-08 Jim Meyering <meyering@lucent.com>
|
||||
|
||||
* xgethostname.c (ENAMETOOLONG): Define to an unlikely value
|
||||
if not defined.
|
||||
(xgethostname): Remove now-unnecessary #ifdef.
|
||||
Move declaration of `err' into loop where it's used.
|
||||
|
||||
2000-07-05 Bruno Haible <haible@clisp.cons.org>
|
||||
|
||||
* xgethostname.c (xgethostname): Protect against the SunOS5.5 bug
|
||||
by allocating a larger buffer. Test the gethostname return value for
|
||||
being >= 0, not == 0, for BeOS. Don't exhaust memory if gethostname
|
||||
returns an error and ENAMETOOLONG isn't defined.
|
||||
|
||||
2000-07-05 Paul Eggert <eggert@twinsun.com>
|
||||
and Bruno Haible <haible@clisp.cons.org>
|
||||
|
||||
* quotearg.c (mbrtowc): Declare returned type, since BeOS doesn't.
|
||||
|
||||
2000-07-05 Bruno Haible <haible@clisp.cons.org>
|
||||
|
||||
* quotearg.c (struct quoting_options): Simplify quote_these_too
|
||||
dimension.
|
||||
|
||||
2000-07-03 Jim Meyering <meyering@lucent.com>
|
||||
|
||||
* strndup.c: [!HAVE_DECL_STRNLEN]: Declare strnlen.
|
||||
Reported by Bruno Haible.
|
||||
|
||||
2000-07-04 Jim Meyering <meyering@lucent.com>
|
||||
|
||||
* quotearg.c: Make inclusion of <wchar.h> independent of whether
|
||||
HAVE_MBRTOWC is set. Required at least for irix-5.6, which
|
||||
lacks mbrtowc.
|
||||
|
||||
2000-07-03 Paul Eggert <eggert@twinsun.com>
|
||||
and Bruno Haible <haible@clisp.cons.org>
|
||||
|
||||
* quotearg.c (mbrtowc):
|
||||
Assign to *pwc, and return 1 only if result is nonzero.
|
||||
(iswprint): Use ISPRINT when substituting our own mbrtowc.
|
||||
|
||||
2000-07-03 Jim Meyering <meyering@lucent.com>
|
||||
|
||||
* readutmp.h: [HAVE_UTMPX_H]: Include <utmp.h> if HAVE_UTMP_H.
|
||||
This is necessary to get a definition of e.g., UTMP_FILE on HP-UX 10.20.
|
||||
From Bob Proulx.
|
||||
|
||||
2000-07-02 Jim Meyering <meyering@lucent.com>
|
||||
|
||||
* quotearg.c (mbstate_t): Don't define here.
|
||||
|
||||
2000-07-02 Jim Meyering <meyering@lucent.com>
|
||||
|
||||
* nanosleep.c (SIGCONT): Define if not already defined.
|
||||
|
||||
2000-06-17 Bruno Haible <haible@clisp.cons.org>
|
||||
|
||||
* mountlist.c: Use MOUNTED_FS_STAT_DEV instead of MOUNTED_NEXT_DEV,
|
||||
per change in ../m4/ls-mntd-fs.m4.
|
||||
(read_filesystem_list): Ignore symbolic links.
|
||||
|
||||
2000-06-29 Jim Meyering <meyering@lucent.com>
|
||||
|
||||
* same.c: Include <string.h> or <strings.h>, as appropriate,
|
||||
for declaration of strcmp.
|
||||
|
||||
* long-options.c: Include <stdlib.h>, for declaration of exit.
|
||||
|
||||
* mountlist.c (fsp_to_string) [HAVE_F_FSTYPENAME_IN_STATFS]:
|
||||
Avoid warning by casting result to `char *' to remove `const'.
|
||||
|
||||
2000-06-17 Bruno Haible <haible@clisp.cons.org>
|
||||
|
||||
* Makefile.am (libfetish_a_SOURCES): Remove readutmp.c.
|
||||
|
||||
2000-06-26 Paul Eggert <eggert@twinsun.com>
|
||||
|
||||
savedir now sets errno on failure and invokes xmalloc to get memory.
|
||||
Fix a couple of other minor bugs while we're at it.
|
||||
|
||||
* savedir.c (<unistd.h>): Do not include; there's no need.
|
||||
(NAMLEN): Remove macro.
|
||||
(malloc, realloc): Remove decls.
|
||||
(stpcpy): Likewise.
|
||||
("xalloc.h"): Include.
|
||||
(NAME_SIZE_DEFAULT): New macro.
|
||||
(savedir): Use xmalloc / xrealloc to allocate memory.
|
||||
Use NAME_SIZE_DEFAULT if name_size is negative or overflows to zero.
|
||||
Skip "" directory entries.
|
||||
Use strlen to calculate directory entry length, since the old method
|
||||
is rarely used these days and isn't worth supporting.
|
||||
Don't use a pointer after freeing it.
|
||||
Check for integer overflow when calculating allocation size.
|
||||
Use memcpy to copy entries, instead of stpcpy.
|
||||
Set errno properly when returning NULL.
|
||||
Check for readdir error.
|
||||
|
||||
2000-06-26 Jim Meyering <meyering@lucent.com>
|
||||
|
||||
* posixtm.c [HAVE_STDLIB_H]: Include stdlib.h, for decl of abort.
|
||||
|
||||
2000-06-17 Bruno Haible <haible@clisp.cons.org>
|
||||
|
||||
* getusershell.c (xmalloc, xrealloc): Remove functions.
|
||||
Include xalloc.h.
|
||||
Don't include <stdlib.h>. Don't declare malloc, realloc.
|
||||
|
||||
2000-06-23 Bruno Haible <haible@clisp.cons.org>
|
||||
|
||||
* unicodeio.c (print_unicode_char): Work around ansi2knr deficiency.
|
||||
|
||||
2000-06-24 Jim Meyering <meyering@lucent.com>
|
||||
|
||||
* error.c [!HAVE_DECL_STRERROR_R]: Declare strerror_r.
|
||||
|
||||
2000-06-21 Jim Meyering <meyering@lucent.com>
|
||||
|
||||
* getpass.c: New file, from Bruno Haible. Required for BeOS.
|
||||
|
||||
2000-06-19 Paul Eggert <eggert@twinsun.com>
|
||||
|
||||
* quotearg.c: Include <wctype.h> after <wchar.h>, for Solaris 2.5.
|
||||
(mbrtowc, mbstate_t): Define substitutes if
|
||||
HAVE_MBRTOWC && HAVE_WCHAR_H && !HAVE_MBSTATE_T_OBJECT.
|
||||
(iswprint): Define to 1 if !defined iswprint && !HAVE_ISWPRINT,
|
||||
not if ! (HAVE_MBRTOWC && HAVE_WCHAR_H).
|
||||
|
||||
2000-06-17 Bruno Haible <haible@clisp.cons.org>
|
||||
|
||||
* xgetcwd.c (xgetcwd): If the required pathname length is smaller
|
||||
than 1024, return a memory chunk of least possible size, instead
|
||||
of size PATH_MAX + 2. In the loop, increment the size proportionally.
|
||||
Use free/xmalloc instead of xrealloc to avoid copying for very long
|
||||
paths.
|
||||
|
||||
2000-06-17 Bruno Haible <haible@clisp.cons.org>
|
||||
|
||||
* canon-host.c (canon_host): Use malloc and memcpy to copy an
|
||||
address, not strdup. Include <stdlib.h> and don't declare free().
|
||||
|
||||
2000-06-17 Bruno Haible <haible@clisp.cons.org>
|
||||
|
||||
* path-concat.c (path_concat): Don't access dir[-1] if dir is
|
||||
the empty string.
|
||||
|
||||
2000-06-21 Jim Meyering <meyering@lucent.com>
|
||||
|
||||
* Makefile.am (libfetish_a_SOURCES): Add getstr.c.
|
||||
(noinst_HEADERS): Add getstr.h.
|
||||
|
||||
* getline.c (getstr): Move into a separate file.
|
||||
* getstr.c (getstr): New file, extracted from getline.c, with
|
||||
the following changes: new parameter, delim2; both delim[12]
|
||||
parameters have type `int', not `char'. The latter would lose
|
||||
with 8-bit delimiters.
|
||||
* getstr.h: New file.
|
||||
|
||||
2000-06-19 Jim Meyering <meyering@lucent.com>
|
||||
|
||||
* getloadavg.c [HAVE_NLIST_H] (NLIST_STRUCT): Define.
|
||||
|
||||
2000-06-18 Jim Meyering <meyering@lucent.com>
|
||||
|
||||
* mkdir.c: Remove file, due mainly to copyright incompatibility.
|
||||
Besides, these days every porting target provides a mkdir function.
|
||||
|
||||
* strnlen.c: Include memory.h, string.h, and/or strings.h as needed.
|
||||
(this snippet comes from src/system.h).
|
||||
|
||||
2000-06-15 Paul Eggert <eggert@twinsun.com>
|
||||
|
||||
* human.c (adjust_value): New function.
|
||||
(human_readable_inexact): Apply rounding style even when
|
||||
printing approximate values.
|
||||
|
||||
2000-06-14 Paul Eggert <eggert@twinsun.com>
|
||||
|
||||
* human.c (human_readable_inexact): Allow an input block
|
||||
size that is not a multiple of the output block size, and vice versa.
|
||||
Reported by Piergiorgio Sartor.
|
||||
|
||||
2000-06-14 Paul Eggert <eggert@twinsun.com>
|
||||
|
||||
* getdate.y (get_date): Apply relative times after time
|
||||
zone indicator, not before. Reported by Todd A. Jacobs.
|
||||
|
||||
2000-06-13 Jim Meyering <meyering@lucent.com>
|
||||
|
||||
* Makefile.am (all-local): Depend on lstat.c and stat.c.
|
||||
|
||||
* xstat.in [!HAVE_DECL_FREE]: Declare free in lstat.c.
|
||||
|
||||
2000-06-12 Paul Eggert <eggert@twinsun.com>
|
||||
|
||||
* xstat.in: Include <stdlib.h> in lstat, to declare "free".
|
||||
|
||||
2000-06-04 Paul Eggert <eggert@twinsun.com>
|
||||
|
||||
* strnlen.c: Include <config.h> if HAVE_CONFIG_H.
|
||||
|
||||
2000-06-04 Jim Meyering <meyering@lucent.com>
|
||||
|
||||
* getugroups.c (getugroups): Cast -1 to gid_t, for systems like
|
||||
SunOS4.1.4 for which gid_t is an unsigned type.
|
||||
|
||||
2000-06-03 Jim Meyering <meyering@lucent.com>
|
||||
|
||||
* strnlen.c [!HAVE_DECL_MEMCHR]: Declare memchr.
|
||||
|
||||
2000-05-26 Bruno Haible <haible@clisp.cons.org>
|
||||
|
||||
* Makefile.am (install-exec-local): On systems with glibc-2.1 or
|
||||
newer, don't install charset.alias.
|
||||
* config.charset: Change the Linux/glibc rules so they become empty
|
||||
on glibc-2.1 or newer.
|
||||
|
||||
2000-06-02 Jim Meyering <meyering@lucent.com>
|
||||
|
||||
* mountlist.c: Back out last change. Instead, do this...
|
||||
* mountlist.c (read_filesystem_list) [MOUNTED_VMOUNT]: Set the me_dummy
|
||||
member using the same `ignore'-testing code.
|
||||
* mountlist.h (ME_DUMMY): Add `autofs' to the list of ignored
|
||||
fs_type strings.
|
||||
From Mark D. Roth.
|
||||
|
||||
2000-05-29 Jim Meyering <meyering@lucent.com>
|
||||
|
||||
* mountlist.c (read_filesystem_list) [MOUNTED_VMOUNT]: Ignore mounts
|
||||
with the `ignore' attribute. Based on a patch from Mark D. Roth.
|
||||
|
||||
2000-05-22 Jim Meyering <meyering@lucent.com>
|
||||
|
||||
* makepath.c: Remove old, now-unnecessary `#ifdef __MSDOS__' block.
|
||||
|
||||
2000-05-18 Jim Meyering <meyering@lucent.com>
|
||||
|
||||
* hash.c (hash_rehash): Fix a nasty bug: copy the free entry list
|
||||
back, too, since it may have been modified by allocate_entry.
|
||||
(hash_delete): Rewrite to use neither the assignment operator
|
||||
nor the comma operator in an if-expression.
|
||||
|
||||
2000-05-15 Paul Eggert <eggert@twinsun.com>
|
||||
|
||||
* closeout.c:
|
||||
<sys/stat.h>, <sys/types.h>, <unistd.h>, (STDOUT_FILENO):
|
||||
Remove; no longer needed.
|
||||
"quotearg.h": Add include.
|
||||
(file_name): Do not bother to explicitly initialize to NULL; it's less
|
||||
efficient on some hosts.
|
||||
(close_stdout_status): Remove test as to whether stdout was already
|
||||
closed; it breaks for the case "echo x | sort >&-".
|
||||
Quote file name colons.
|
||||
Do not assume that _("write error") lacks format strings.
|
||||
|
||||
2000-05-15 Jim Meyering <meyering@lucent.com>
|
||||
|
||||
* version-etc.c (version_etc_copyright): Update the copyright string
|
||||
used in all --version output.
|
||||
|
||||
2000-05-14 Jim Meyering <meyering@lucent.com>
|
||||
|
||||
* closeout.c (close_stdout_set_file_name): New function.
|
||||
(close_stdout_status): Use new file-scoped global.
|
||||
Return right away if fstat says the stdout file descriptor is invalid.
|
||||
* closeout.h (close_stdout_set_file_name): Declare.
|
||||
|
||||
2000-05-10 Jim Meyering <meyering@lucent.com>
|
||||
|
||||
* closeout.c [default_exit_status]: New file-scoped variable.
|
||||
(close_stdout_set_status): New function.
|
||||
* closeout.h (close_stdout_set_status): Declare.
|
||||
|
||||
2000-05-08 Jim Meyering <meyering@lucent.com>
|
||||
|
||||
* long-options.c: Don't include closeout.h.
|
||||
(parse_long_options): Don't call close_stdout for --version.
|
||||
|
||||
2000-05-06 Jim Meyering <meyering@lucent.com>
|
||||
|
||||
* strnlen.c: Undefine __strnlen and strnlen.
|
||||
[!weak_alias]: Define __strnlen to strnlen.
|
||||
|
||||
* atexit.c: New file, from libiberty.
|
||||
|
||||
2000-05-06 Jim Meyering <meyering@lucent.com>
|
||||
|
||||
* closeout.c (close_stdout_status): Also check for errors on the
|
||||
stderr stream.
|
||||
|
||||
2000-05-05 Bruno Haible <haible@clisp.cons.org>
|
||||
|
||||
* localcharset.c (get_charset_aliases): Use malloc, realloc and memcpy
|
||||
instead of xmalloc, xrealloc, path_concat.
|
||||
(locale_charset): Treat empty environment variables as absent.
|
||||
(DIRECTORY_SEPARATOR, ISSLASH): New macros.
|
||||
|
||||
2000-05-04 Jim Meyering <meyering@lucent.com>
|
||||
|
||||
* getopt.c: Update from glibc.
|
||||
* obstack.c: Likewise.
|
||||
* obstack.h: Likewise.
|
||||
* regex.c: Likewise. NB: K&R compiler support is dropped for this file
|
||||
|
||||
* regex.h: Likewise.
|
||||
* strndup.c: Likewise.
|
||||
* strnlen.c: New file, from glibc.
|
||||
|
||||
2000-05-01 Jim Meyering <meyering@lucent.com>
|
||||
|
||||
* full-write.c (full_write): Remove `FIXME' part of comment.
|
||||
|
||||
2000-04-29 Jim Meyering <meyering@lucent.com>
|
||||
|
||||
* path-concat.c: Declare strdup only if it's not defined.
|
||||
* canon-host.c: Likewise.
|
||||
|
||||
2000-04-28 Jim Meyering <meyering@lucent.com>
|
||||
|
||||
* rpmatch.c [HAVE_LIMITS_H]: Include limits.h before regex.h to avoid
|
||||
redefinition warning on some systems (HPUX). Otherwise, regex.h is
|
||||
included first, then limits.h is included by locale.h by libintl.h.
|
||||
From John David Anglin.
|
||||
|
||||
2000-04-25 Jim Meyering <meyering@lucent.com>
|
||||
|
||||
* makepath.c (S_IRWXUGO): Define.
|
||||
(make_path): Always perform explicit chmod if MODE specifies any
|
||||
of the `special' permission bits. Prompted by a bug report against
|
||||
install from Mate Wierdl and Joost van Baal.
|
||||
|
||||
2000-04-18 Jim Meyering <meyering@lucent.com>
|
||||
|
||||
* README: New file.
|
||||
|
||||
* getpagesize.h [!getpagesize && HAVE_OS_H && B_PAGE_SIZE]: Define
|
||||
getpagesize. For BeOS. Based on a patch from Bruno Haible.
|
||||
|
||||
2000-04-17 Jim Meyering <meyering@lucent.com>
|
||||
|
||||
* strftime.c (my_strftime) [strftime]: Declare strftime here, since
|
||||
the definition of it to rpl_strftime also defined-away the system's
|
||||
declaration.
|
||||
|
||||
2000-04-15 Jim Meyering <meyering@lucent.com>
|
||||
|
||||
Use `C' to denote so-called `contiguous' files, the same way
|
||||
that tar does.
|
||||
* filemode.c (S_ISCTG) [!S_ISCTG && S_IFCTG]: Define.
|
||||
(ftypelet): Use S_ISCTG.
|
||||
From Michael Deutschmann.
|
||||
|
||||
2000-04-14 Jim Meyering <meyering@lucent.com>
|
||||
|
||||
* strftime.c (my_strftime) [#ifdef strftime]: Declare strftime.
|
||||
|
||||
2000-04-08 Jim Meyering <meyering@lucent.com>
|
||||
|
||||
* Makefile.am (charset.alias): Use t-$@, not $@-t so the DOS 8.3
|
||||
names don't conflict. Reported by Eli Zaretskii.
|
||||
|
||||
2000-03-28 Bruno Haible <haible@clisp.cons.org>
|
||||
|
||||
* unicodeio.c (print_unicode_char): Avoid triggering Solaris iconv
|
||||
bug. Deal with the different error behavior of Irix iconv.
|
||||
|
||||
2000-04-07 Jim Meyering <meyering@lucent.com>
|
||||
|
||||
* putenv.c: Move inclusion of errno.h so it follows that of sys/types.h,
|
||||
to work around system header problems on AIX 3.2.5. From Bruno Haible.
|
||||
|
||||
2000-04-05 Jim Meyering <meyering@lucent.com>
|
||||
|
||||
Portability tweaks required for ultrix4.3.
|
||||
* readutmp.h [HAVE_UTMPX_H && !HAVE_DECL_GETUTENT]: Declare getutent.
|
||||
* readutmp.c: Include sys/types.h before sys/stat.h.
|
||||
* canon-host.c: Declare strdup.
|
||||
* path-concat.c: Likewise.
|
||||
From John David Anglin.
|
||||
|
||||
2000-04-04 Jim Meyering <meyering@lucent.com>
|
||||
|
||||
Be more DOS 8.3-friendly.
|
||||
* ref-add.sin: Renamed from ref-add.sed.in.
|
||||
* ref-del.sin: Renamed from ref-del.sed.in.
|
||||
* Makefile.am: Reflect renaming.
|
||||
Reported by Eli Zaretskii.
|
||||
|
||||
Use a temporary file name that won't clash with `charset.alias'
|
||||
in the DOS 8.3 name space.
|
||||
* Makefile.am (charset_tmp): Define.
|
||||
(install-exec-local): Use $(charset_tmp) instead of $(charset_alias)-t.
|
||||
(uninstall-local): Likewise.
|
||||
Reported by Eli Zaretskii.
|
||||
|
||||
2000-03-29 Paul Eggert <eggert@twinsun.com>
|
||||
|
||||
* time/strftime.c (my_strftime): Make sure we call the system
|
||||
strftime, not ourselves, when invoking the underlying strftime.
|
||||
|
||||
2000-03-24 Jim Meyering <meyering@lucent.com>
|
||||
|
||||
* Makefile.am (EXTRA_DIST): Add ref-add.sed.in and ref-del.sed.in.
|
||||
(charset_alias): Define.
|
||||
(install-exec-local): Factor out common code.
|
||||
(uninstall-local): Split lines longer than 80.
|
||||
(ref-add.sed, ref-del.sed): Remove rules... (do the following instead)
|
||||
(SUFFIXES): Define.
|
||||
(.sed.in.sed): New rule. Don't redirect directly to $@.
|
||||
(CLEANFILES): Add ref-add.sed and ref-del.sed.
|
||||
|
||||
2000-03-19 Bruno Haible <haible@clisp.cons.org>
|
||||
|
||||
* config.charset: Output a line containing "Packages using this file".
|
||||
* ref-add.sed.in, ref-del.sed.in: New files.
|
||||
* Makefile.am (install-exec-local, uninstall-local, ref-add.sed,
|
||||
ref-del.sed): New rules.
|
||||
|
||||
2000-03-17 Jim Meyering <meyering@lucent.com>
|
||||
|
||||
* unicodeio.c (<string.h>): Include only #if HAVE_STRING_H.
|
||||
Otherwise, include <strings.h>
|
||||
|
||||
2000-03-17 Bruno Haible <haible@clisp.cons.org>
|
||||
|
||||
* unicodeio.c (utf8_wctomb): New function.
|
||||
(print_unicode_char): Pass the Unicode character to iconv in UTF-8
|
||||
format instead of in UCS-4 with platform dependent endianness.
|
||||
|
||||
2000-03-07 Paul Eggert <eggert@twinsun.com>
|
||||
|
||||
* savedir.c (savedir): Work even if directory size is
|
||||
negative; this can happen with some screwy NFS configurations.
|
||||
|
||||
2000-03-06 Jim Meyering <meyering@lucent.com>
|
||||
|
||||
* localcharset.c (get_charset_aliases): Don't try to free file_name
|
||||
if it's NULL (because we ran out of memory). From Bruno Haible.
|
||||
|
||||
2000-03-05 Jim Meyering <meyering@lucent.com>
|
||||
|
||||
* localcharset.c ("path-concat.h"): Include.
|
||||
(get_charset_aliases): Use path_concat instead of ANSI string
|
||||
concatenation.
|
||||
|
||||
* unicodeio.h (PARAMS): Define.
|
||||
Use it to guard prototype.
|
||||
|
||||
2000-03-04 Jim Meyering <meyering@lucent.com>
|
||||
|
||||
* Makefile.am (install-exec-local): Create $(libdir) before installing
|
||||
into it.
|
||||
(uninstall-local): Uncomment this rule so `make distcheck' works
|
||||
once again.
|
||||
|
||||
* unicodeio.c (<errno.h>): Include it.
|
||||
(errno): Declare if not defined.
|
||||
|
||||
* localcharset.c: Add Bruno's comment justifying use of volatile.
|
||||
|
||||
* config.charset: New version, incorporating remarks from a linux
|
||||
i18n mailing list. From Bruno Haible.
|
||||
|
||||
2000-03-02 Jim Meyering <meyering@lucent.com>
|
||||
|
||||
* Makefile.am (EXTRA_DIST): Add config.charset.
|
||||
|
||||
2000-03-01 Jim Meyering <meyering@lucent.com>
|
||||
|
||||
* localcharset.c: Guard some #includes with `#if HAVE_...'.
|
||||
* unicodeio.c: Likewise.
|
||||
|
||||
2000-02-02 Bruno Haible <haible@clisp.cons.org>
|
||||
|
||||
* config.charset: New file.
|
||||
* localcharset.c: New file.
|
||||
* unicodeio.h, unicodeio.c: New files.
|
||||
* Makefile.am (DEFS): Add -DLIBDIR=...
|
||||
(libfetish_a_SOURCES): Add localcharset.c and unicodeio.c.
|
||||
(noinst_HEADERS): Add unicodeio.h.
|
||||
(all-local, install-exec-local, charset.alias): New targets.
|
||||
|
||||
2000-02-28 Paul Eggert <eggert@twinsun.com>
|
||||
|
||||
* quotearg.c (ALERT_CHAR): New macro.
|
||||
(quotearg_buffer_restyled): Use it.
|
||||
|
||||
2000-02-27 Jim Meyering <meyering@lucent.com>
|
||||
|
||||
* strtoumax.c: Fix typo in decl of strtoul: s/long long/long/.
|
||||
Guard declaration of strtoull also with `&& HAVE_UNSIGNED_LONG_LONG'.
|
||||
|
||||
* backupfile.c: Guard inclusion of stdlib.h with `#if HAVE_STDLIB_H',
|
||||
not `#if STDC_HEADERS'.
|
||||
Declare malloc if needed.
|
||||
|
||||
* backupfile.c: Use `#if !HAVE_DECL...' instead of `#ifndef HAVE_DECL..'
|
||||
now that autoconf always defines the HAVE_DECL_ symbols.
|
||||
* human.c: Likewise.
|
||||
* same.c: Likewise.
|
||||
* strtoumax.c: Likewise.
|
||||
|
||||
* backupfile.c: Arrange for cpp to fail if the configure-time
|
||||
declaration check was not run.
|
||||
* hash.c: Likewise.
|
||||
* human.c: Likewise.
|
||||
* same.c: Likewise.
|
||||
* strtoumax.c: Likewise.
|
||||
|
||||
* userspec.c (parse_user_spec): If there is no `:' but there is a `.',
|
||||
then first look up the entire `.'-containing string as a login name.
|
||||
|
||||
2000-02-18 Paul Eggert <eggert@twinsun.com>
|
||||
|
||||
* getdate.y: Handle two-digit years with leading zeros correctly.
|
||||
(textint): New typedef.
|
||||
(parser_control): Member year changed from int to textint.
|
||||
All uses changed.
|
||||
(YYSTYPE): Removed; replaced by %union with int and textint members.
|
||||
(tDAY, tDAY_UNIT, tDAYZONE, tHOUR_UNIT, tID, tLOCAL_ZONE, tMERIDIAN,
|
||||
tMINUTE_UNIT, tMONTH, tMONTH_UNIT tSEC_UNIT, tSNUMBER, tUNUMBER,
|
||||
tYEAR_UNIT, tZONE, o_merid): Now of type <intval>.
|
||||
(tSNUMBER, tUNUMBER): Now of type <textintval>.
|
||||
(date, number, to_year): Use width of number in digits, not its value,
|
||||
to determine whether it's a 2-digit year, or a 2-digit time.
|
||||
(yylex): Store number of digits of numeric tokens.
|
||||
Reported by John Kendall.
|
||||
|
||||
(parser_control): Changed from struct parser_control to typedef (for
|
||||
consistency). All uses changed.
|
||||
|
||||
(tID): Removed; not used.
|
||||
(yylex): Return '?' for unknown identifiers, rather than (unused) tID.
|
||||
|
||||
2000-02-14 Paul Eggert <eggert@twinsun.com>
|
||||
|
||||
* getpagesize.h (getpagesize): Port to VMS for Alpha;
|
||||
adapted from changes to grep getpagesize.h by Martin P.J. Zinser.
|
||||
|
||||
2000-02-12 Jim Meyering <meyering@lucent.com>
|
||||
|
||||
* userspec.c (ISDIGIT): Define it.
|
||||
(isdigit): Remove definition.
|
||||
(is_number): Use ISDIGIT, not isdigit.
|
||||
<libintl.h>: Include.
|
||||
(_ and N_): Define.
|
||||
(parse_user_spec): Mark translatable strings.
|
||||
|
||||
2000-02-10 Jim Meyering <meyering@lucent.com>
|
||||
|
||||
With these changes, nanosleep.[ch] are finally enough like the other
|
||||
lib/* replacement files to compile on a few more losing systems.
|
||||
|
||||
* nanosleep.h: Don't include config.h.
|
||||
Remove prototype from declaration of nanosleep.
|
||||
(PARAMS): Remove now-unneeded definition.
|
||||
* nanosleep.c: #undef nanosleep.
|
||||
(rpl_nanosleep): Rename from nanosleep.
|
||||
|
||||
2000-02-03 Jim Meyering <meyering@lucent.com>
|
||||
|
||||
* readutmp.c (read_utmp): Guard with `#ifdef UTMP_NAME_FUNCTION',
|
||||
rather than with `#if HAVE_UTMPNAME'.
|
||||
|
||||
2000-02-01 Jim Meyering <meyering@lucent.com>
|
||||
|
||||
* readutmp.h (UT_USER): Add parens. From Andreas Schwab.
|
||||
|
||||
2000-01-31 Jim Meyering <meyering@lucent.com>
|
||||
|
||||
* nanosleep.h (nanosleep): Guard declaration with
|
||||
`#if ! HAVE_DECL_NANOSLEEP'.
|
||||
Without this, OFS gets a redeclaration error for rpl_nanosleep, due to
|
||||
the declaration in that vendor's sys/timers.h.
|
||||
Reported by Christian Krackowizer.
|
||||
|
||||
* quotearg.c (ISASCII): Add #undef and move definition to follow
|
||||
inclusion of wctype.h to work around solaris2.6 namespace pollution.
|
||||
(ISPRINT): Likewise.
|
||||
Reported by Tom Tromey.
|
||||
|
||||
2000-01-30 Jim Meyering <meyering@lucent.com>
|
||||
|
||||
* readutmp.c (extract_trimmed_name): Use UT_USER instead of hard-coding
|
||||
uses of ->ut_name. The latter doesn't work with new Linux header files
|
||||
where only utmpx.ut_user is declared.
|
||||
|
||||
* readutmp.h (UT_USER): Define.
|
||||
|
||||
2000-01-23 Jim Meyering <meyering@lucent.com>
|
||||
|
||||
* Makefile.am (libfetish_a_SOURCES): Remove explicit mention of
|
||||
obstack.c.
|
||||
|
||||
2000-01-22 Jim Meyering <meyering@lucent.com>
|
||||
|
||||
* strtoumax.c: [! HAVE_DECL_STRTOUL]: Declare strtoul.
|
||||
[! HAVE_DECL_STRTOULL]: Declare strtoull.
|
||||
Required for some AIX systems. Reported by Christian Krackowizer.
|
||||
[TESTING] (main): New function.
|
||||
|
||||
1997-10-17 Eli Zaretskii <eliz@is.elta.co.il>
|
||||
* dirname.c (dir_name): Support for DOS-style file names with drive
|
||||
letters.
|
||||
|
||||
* quotearg.c [HAVE_WCTYPE_H]: Include <wctype.h> for decl of iswprint.
|
||||
|
||||
* strverscmp.c (ISDIGIT): Define.
|
||||
(strverscmp): Use ISDIGIT, not isdigit.
|
||||
|
||||
2000-01-17 Paul Eggert <eggert@twinsun.com>
|
||||
|
||||
* nanosleep.c (nanosleep):
|
||||
Don't use SA_INTERRUPT to decide whether to call sigaction, as
|
||||
POSIX.1 doesn't require SA_INTERRUPT and some systems
|
||||
(e.g. Solaris 7) don't define it. Use SA_NOCLDSTOP instead;
|
||||
it's been part of POSIX.1 since day 1 (in 1988).
|
||||
|
||||
2000-01-17 Jim Meyering <meyering@lucent.com>
|
||||
|
||||
* interlock: Remove unused file. Reported by François Pinard.
|
||||
|
||||
2000-01-16 Paul Eggert <eggert@twinsun.com>
|
||||
|
||||
* quotearg.c (quotearg_buffer_restyled): Do not quote
|
||||
alert, backslash, formfeed, and vertical tab unnecessarily in
|
||||
shell quoting style.
|
||||
|
||||
Local Variables:
|
||||
version-control: never
|
||||
End:
|
||||
@@ -2,36 +2,42 @@
|
||||
|
||||
AUTOMAKE_OPTIONS = ../src/ansi2knr
|
||||
|
||||
noinst_LIBRARIES = libfu.a
|
||||
noinst_LIBRARIES = libfetish.a
|
||||
|
||||
INCLUDES = -I.. -I$(srcdir) -I../intl
|
||||
DEFS = -DLIBDIR=\"$(libdir)\" @DEFS@
|
||||
|
||||
libfu_a_SOURCES = getdate.y posixtm.c getopt.c getopt1.c \
|
||||
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 same.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
|
||||
libfetish_a_SOURCES = \
|
||||
getdate.y posixtm.c addext.c argmatch.c backupfile.c basename.c \
|
||||
canon-host.c closeout.c diacrit.c dirname.c exclude.c filemode.c \
|
||||
full-write.c getopt.c getopt1.c getstr.c getugroups.c hard-locale.c hash.c \
|
||||
human.c idcache.c isdir.c linebuffer.c localcharset.c long-options.c \
|
||||
makepath.c mbswidth.c md5.c memcasecmp.c memcoll.c modechange.c \
|
||||
path-concat.c \
|
||||
quote.c quotearg.c readtokens.c safe-read.c same.c save-cwd.c \
|
||||
savedir.c stripslash.c unicodeio.c userspec.c version-etc.c xgetcwd.c \
|
||||
xgethostname.c xmalloc.c xstrdup.c xstrtod.c xstrtol.c xstrtoul.c \
|
||||
xstrtoumax.c yesno.c
|
||||
|
||||
libfu_a_LIBADD = @LIBOBJS@ @ALLOCA@
|
||||
libfu_a_DEPENDENCIES = $(libfu_a_LIBADD)
|
||||
libfetish_a_LIBADD = @LIBOBJS@ @ALLOCA@
|
||||
libfetish_a_DEPENDENCIES = $(libfetish_a_LIBADD)
|
||||
|
||||
noinst_HEADERS = argmatch.h backupfile.h closeout.h \
|
||||
dirname.h error.h exclude.h filemode.h fnmatch.h fsusage.h \
|
||||
getdate.h getline.h getopt.h getpagesize.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 same.h save-cwd.h \
|
||||
savedir.h strverscmp.h \
|
||||
version-etc.h xalloc.h xstrtol.h
|
||||
noinst_HEADERS = \
|
||||
argmatch.h backupfile.h bumpalloc.h closeout.h diacrit.h dirname.h error.h \
|
||||
exclude.h filemode.h fnmatch.h __fpending.h fsusage.h \
|
||||
getdate.h getline.h getopt.h \
|
||||
getstr.h getpagesize.h group-member.h hard-locale.h hash.h human.h lchown.h \
|
||||
linebuffer.h long-options.h mbswidth.h md5.h memcasecmp.h memcoll.h \
|
||||
makepath.h mbswidth.h modechange.h mountlist.h nanosleep.h obstack.h \
|
||||
path-concat.h pathmax.h posixtm.h quote.h quotearg.h readtokens.h \
|
||||
readutmp.h regex.h safe-read.h same.h save-cwd.h savedir.h \
|
||||
strverscmp.h unicodeio.h version-etc.h xalloc.h xstrtod.h xstrtol.h
|
||||
|
||||
BUILT_SOURCES = getdate.c lstat.c stat.c
|
||||
MAINTAINERCLEANFILES = $(BUILT_SOURCES)
|
||||
DISTCLEANFILES = lstat.c stat.c
|
||||
|
||||
EXTRA_DIST = xstat.in
|
||||
EXTRA_DIST = xstat.in config.charset ref-add.sin ref-del.sin
|
||||
lstat.c: xstat.in
|
||||
sed \
|
||||
-e '/@IGNORE@/d' \
|
||||
@@ -49,3 +55,52 @@ stat.c: xstat.in
|
||||
-e '/@BEGIN_LSTAT_ONLY@/,/@END_LSTAT_ONLY@/d' \
|
||||
$(srcdir)/xstat.in > $@-t
|
||||
mv $@-t $@
|
||||
|
||||
|
||||
# The following is needed in order to install a simple file in $(libdir)
|
||||
# which is shared with other installed packages. We use a list of referencing
|
||||
# packages so that "make uninstall" will remove the file if and only if it
|
||||
# is not used by another installed package.
|
||||
# On systems with glibc-2.1 or newer, the file is redundant, therefore we
|
||||
# avoid installing it.
|
||||
|
||||
all-local: charset.alias ref-add.sed ref-del.sed lstat.c stat.c
|
||||
|
||||
charset_alias = $(DESTDIR)$(libdir)/charset.alias
|
||||
charset_tmp = $(DESTDIR)$(libdir)/charset.tmp
|
||||
install-exec-local: all-local
|
||||
$(mkinstalldirs) $(DESTDIR)$(libdir)
|
||||
if test -f $(charset_alias); then \
|
||||
sed -f ref-add.sed $(charset_alias) > $(charset_tmp) ; \
|
||||
$(INSTALL_DATA) $(charset_tmp) $(charset_alias) ; \
|
||||
rm -f $(charset_tmp) ; \
|
||||
else \
|
||||
if test @GLIBC21@ = no; then \
|
||||
sed -f ref-add.sed charset.alias > $(charset_tmp) ; \
|
||||
$(INSTALL_DATA) $(charset_tmp) $(charset_alias) ; \
|
||||
rm -f $(charset_tmp) ; \
|
||||
fi ; \
|
||||
fi
|
||||
|
||||
uninstall-local: all-local
|
||||
if test -f $(charset_alias); then \
|
||||
sed -f ref-del.sed $(charset_alias) > $(charset_tmp); \
|
||||
if grep '^# Packages using this file: $$' $(charset_tmp) \
|
||||
> /dev/null; then \
|
||||
rm -f $(charset_alias); \
|
||||
else \
|
||||
$(INSTALL_DATA) $(charset_tmp) $(charset_alias); \
|
||||
fi; \
|
||||
rm -f $(charset_tmp); \
|
||||
fi
|
||||
|
||||
charset.alias: config.charset
|
||||
$(SHELL) $(srcdir)/config.charset '@host@' > t-$@
|
||||
mv t-$@ $@
|
||||
|
||||
SUFFIXES = .sed .sin
|
||||
.sin.sed:
|
||||
sed -e '/^#/d' -e 's/@''PACKAGE''@/@PACKAGE@/g' $< > $@-t
|
||||
mv $@-t $@
|
||||
|
||||
CLEANFILES = charset.alias ref-add.sed ref-del.sed
|
||||
|
||||
425
lib/Makefile.in
425
lib/Makefile.in
@@ -1,6 +1,6 @@
|
||||
# Makefile.in generated automatically by automake 1.4a from Makefile.am
|
||||
|
||||
# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
|
||||
# Copyright (C) 1994, 1995-9, 2000 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.
|
||||
@@ -31,8 +31,6 @@ mandir = @mandir@
|
||||
includedir = @includedir@
|
||||
oldincludedir = /usr/include
|
||||
|
||||
DESTDIR =
|
||||
|
||||
pkgdatadir = $(datadir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
@@ -57,6 +55,8 @@ POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
|
||||
@SET_MAKE@
|
||||
host_alias = @host_alias@
|
||||
host_triplet = @host@
|
||||
AMDEP = @AMDEP@
|
||||
@@ -71,8 +71,10 @@ CXXCPP = @CXXCPP@
|
||||
DATADIRNAME = @DATADIRNAME@
|
||||
DEPDIR = @DEPDIR@
|
||||
DF_PROG = @DF_PROG@
|
||||
FESETROUND_LIBM = @FESETROUND_LIBM@
|
||||
GENCAT = @GENCAT@
|
||||
GETCONF = @GETCONF@
|
||||
GETLOADAVG_LIBS = @GETLOADAVG_LIBS@
|
||||
GLIBC21 = @GLIBC21@
|
||||
GMOFILES = @GMOFILES@
|
||||
GMSGFMT = @GMSGFMT@
|
||||
GNU_PACKAGE = @GNU_PACKAGE@
|
||||
@@ -83,15 +85,27 @@ INSTOBJEXT = @INSTOBJEXT@
|
||||
INTLDEPS = @INTLDEPS@
|
||||
INTLLIBS = @INTLLIBS@
|
||||
INTLOBJS = @INTLOBJS@
|
||||
KMEM_GROUP = @KMEM_GROUP@
|
||||
LIBICONV = @LIBICONV@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
LIB_CLOCK_GETTIME = @LIB_CLOCK_GETTIME@
|
||||
LIB_CRYPT = @LIB_CRYPT@
|
||||
LIB_NANOSLEEP = @LIB_NANOSLEEP@
|
||||
MAKEINFO = @MAKEINFO@
|
||||
MAN = @MAN@
|
||||
MKINSTALLDIRS = @MKINSTALLDIRS@
|
||||
MSGFMT = @MSGFMT@
|
||||
NEED_SETGID = @NEED_SETGID@
|
||||
OPTIONAL_BIN_PROGS = @OPTIONAL_BIN_PROGS@
|
||||
OPTIONAL_BIN_ZCRIPTS = @OPTIONAL_BIN_ZCRIPTS@
|
||||
PACKAGE = @PACKAGE@
|
||||
PERL = @PERL@
|
||||
POFILES = @POFILES@
|
||||
POSUB = @POSUB@
|
||||
POW_LIBM = @POW_LIBM@
|
||||
RANLIB = @RANLIB@
|
||||
SEQ_LIBM = @SEQ_LIBM@
|
||||
SQRT_LIBM = @SQRT_LIBM@
|
||||
U = @U@
|
||||
USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@
|
||||
USE_NLS = @USE_NLS@
|
||||
@@ -103,119 +117,146 @@ l = @l@
|
||||
|
||||
AUTOMAKE_OPTIONS = ../src/ansi2knr
|
||||
|
||||
noinst_LIBRARIES = libfu.a
|
||||
noinst_LIBRARIES = libfetish.a
|
||||
|
||||
INCLUDES = -I.. -I$(srcdir) -I../intl
|
||||
DEFS = -DLIBDIR=\"$(libdir)\" @DEFS@
|
||||
|
||||
libfu_a_SOURCES = getdate.y posixtm.c getopt.c getopt1.c \
|
||||
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 same.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
|
||||
libfetish_a_SOURCES = \
|
||||
getdate.y posixtm.c addext.c argmatch.c backupfile.c basename.c \
|
||||
canon-host.c closeout.c diacrit.c dirname.c exclude.c filemode.c \
|
||||
full-write.c getopt.c getopt1.c getstr.c getugroups.c hard-locale.c hash.c \
|
||||
human.c idcache.c isdir.c linebuffer.c localcharset.c long-options.c \
|
||||
makepath.c mbswidth.c md5.c memcasecmp.c memcoll.c modechange.c \
|
||||
path-concat.c \
|
||||
quote.c quotearg.c readtokens.c safe-read.c same.c save-cwd.c \
|
||||
savedir.c stripslash.c unicodeio.c userspec.c version-etc.c xgetcwd.c \
|
||||
xgethostname.c xmalloc.c xstrdup.c xstrtod.c xstrtol.c xstrtoul.c \
|
||||
xstrtoumax.c yesno.c
|
||||
|
||||
|
||||
libfu_a_LIBADD = @LIBOBJS@ @ALLOCA@
|
||||
libfu_a_DEPENDENCIES = $(libfu_a_LIBADD)
|
||||
libfetish_a_LIBADD = @LIBOBJS@ @ALLOCA@
|
||||
libfetish_a_DEPENDENCIES = $(libfetish_a_LIBADD)
|
||||
|
||||
noinst_HEADERS = argmatch.h backupfile.h closeout.h \
|
||||
dirname.h error.h exclude.h filemode.h fnmatch.h fsusage.h \
|
||||
getdate.h getline.h getopt.h getpagesize.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 same.h save-cwd.h \
|
||||
savedir.h strverscmp.h \
|
||||
version-etc.h xalloc.h xstrtol.h
|
||||
noinst_HEADERS = \
|
||||
argmatch.h backupfile.h bumpalloc.h closeout.h diacrit.h dirname.h error.h \
|
||||
exclude.h filemode.h fnmatch.h __fpending.h fsusage.h \
|
||||
getdate.h getline.h getopt.h \
|
||||
getstr.h getpagesize.h group-member.h hard-locale.h hash.h human.h lchown.h \
|
||||
linebuffer.h long-options.h mbswidth.h md5.h memcasecmp.h memcoll.h \
|
||||
makepath.h mbswidth.h modechange.h mountlist.h nanosleep.h obstack.h \
|
||||
path-concat.h pathmax.h posixtm.h quote.h quotearg.h readtokens.h \
|
||||
readutmp.h regex.h safe-read.h same.h save-cwd.h savedir.h \
|
||||
strverscmp.h unicodeio.h version-etc.h xalloc.h xstrtod.h xstrtol.h
|
||||
|
||||
|
||||
BUILT_SOURCES = getdate.c lstat.c stat.c
|
||||
MAINTAINERCLEANFILES = $(BUILT_SOURCES)
|
||||
DISTCLEANFILES = lstat.c stat.c
|
||||
|
||||
EXTRA_DIST = xstat.in
|
||||
EXTRA_DIST = xstat.in config.charset ref-add.sin ref-del.sin
|
||||
|
||||
charset_alias = $(DESTDIR)$(libdir)/charset.alias
|
||||
charset_tmp = $(DESTDIR)$(libdir)/charset.tmp
|
||||
|
||||
SUFFIXES = .sed .sin
|
||||
|
||||
CLEANFILES = charset.alias ref-add.sed ref-del.sed
|
||||
subdir = lib
|
||||
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
|
||||
CONFIG_HEADER = ../config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
LIBRARIES = $(noinst_LIBRARIES)
|
||||
|
||||
|
||||
DEFS = @DEFS@ -I. -I$(srcdir) -I..
|
||||
CPPFLAGS = @CPPFLAGS@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LIBS = @LIBS@
|
||||
ANSI2KNR = ../src/ansi2knr
|
||||
libfu_a_AR = $(AR) cru
|
||||
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 same$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_OBJECTS = $(am_libfu_a_OBJECTS)
|
||||
libfetish_a_AR = $(AR) cru
|
||||
am_libfetish_a_OBJECTS = getdate$U.o posixtm$U.o addext$U.o \
|
||||
argmatch$U.o backupfile$U.o basename$U.o canon-host$U.o closeout$U.o \
|
||||
diacrit$U.o dirname$U.o exclude$U.o filemode$U.o full-write$U.o \
|
||||
getopt$U.o getopt1$U.o getstr$U.o getugroups$U.o hard-locale$U.o \
|
||||
hash$U.o human$U.o idcache$U.o isdir$U.o linebuffer$U.o \
|
||||
localcharset$U.o long-options$U.o makepath$U.o mbswidth$U.o md5$U.o \
|
||||
memcasecmp$U.o memcoll$U.o modechange$U.o path-concat$U.o quote$U.o \
|
||||
quotearg$U.o readtokens$U.o safe-read$U.o same$U.o save-cwd$U.o \
|
||||
savedir$U.o stripslash$U.o unicodeio$U.o userspec$U.o version-etc$U.o \
|
||||
xgetcwd$U.o xgethostname$U.o xmalloc$U.o xstrdup$U.o xstrtod$U.o \
|
||||
xstrtol$U.o xstrtoul$U.o xstrtoumax$U.o yesno$U.o
|
||||
libfetish_a_OBJECTS = $(am_libfetish_a_OBJECTS)
|
||||
AR = ar
|
||||
COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
||||
CFLAGS = @CFLAGS@
|
||||
CCLD = $(CC)
|
||||
LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
|
||||
DIST_SOURCES = $(libfu_a_SOURCES)
|
||||
DIST_SOURCES = $(libfetish_a_SOURCES)
|
||||
HEADERS = $(noinst_HEADERS)
|
||||
|
||||
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 malloc.c memchr.c memcmp.c memcpy.c memmove.c memset.c mkdir.c \
|
||||
mktime.c mountlist.c nanosleep.c obstack.c obstack.h realloc.c regex.c \
|
||||
rmdir.c rpmatch.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
|
||||
depcomp = $(SHELL) $(top_srcdir)/depcomp
|
||||
DEP_FILES = @AMDEP@ $(DEPDIR)/__fpending.Po $(DEPDIR)/addext$U.Po \
|
||||
$(DEPDIR)/alloca.Po $(DEPDIR)/argmatch$U.Po $(DEPDIR)/atexit.Po \
|
||||
$(DEPDIR)/backupfile$U.Po $(DEPDIR)/basename$U.Po \
|
||||
$(DEPDIR)/canon-host$U.Po $(DEPDIR)/chown.Po $(DEPDIR)/closeout$U.Po \
|
||||
$(DEPDIR)/diacrit$U.Po $(DEPDIR)/dirname$U.Po $(DEPDIR)/dup2.Po \
|
||||
$(DEPDIR)/error.Po $(DEPDIR)/euidaccess.Po $(DEPDIR)/exclude$U.Po \
|
||||
$(DEPDIR)/fileblocks.Po $(DEPDIR)/filemode$U.Po $(DEPDIR)/fnmatch.Po \
|
||||
$(DEPDIR)/fsusage.Po $(DEPDIR)/ftruncate.Po $(DEPDIR)/full-write$U.Po \
|
||||
$(DEPDIR)/getdate$U.Po $(DEPDIR)/getgroups.Po $(DEPDIR)/gethostname.Po \
|
||||
$(DEPDIR)/getline.Po $(DEPDIR)/getloadavg.Po $(DEPDIR)/getopt$U.Po \
|
||||
$(DEPDIR)/getopt1$U.Po $(DEPDIR)/getpass.Po $(DEPDIR)/getstr$U.Po \
|
||||
$(DEPDIR)/getugroups$U.Po $(DEPDIR)/getusershell.Po \
|
||||
$(DEPDIR)/group-member.Po $(DEPDIR)/hard-locale$U.Po \
|
||||
$(DEPDIR)/hash$U.Po $(DEPDIR)/human$U.Po $(DEPDIR)/idcache$U.Po \
|
||||
$(DEPDIR)/isdir$U.Po $(DEPDIR)/lchown.Po $(DEPDIR)/linebuffer$U.Po \
|
||||
$(DEPDIR)/localcharset$U.Po $(DEPDIR)/long-options$U.Po \
|
||||
$(DEPDIR)/lstat.Po $(DEPDIR)/makepath$U.Po $(DEPDIR)/malloc.Po \
|
||||
$(DEPDIR)/mbswidth$U.Po $(DEPDIR)/md5$U.Po $(DEPDIR)/memcasecmp$U.Po \
|
||||
$(DEPDIR)/memchr.Po $(DEPDIR)/memcmp.Po $(DEPDIR)/memcoll$U.Po \
|
||||
$(DEPDIR)/memcpy.Po $(DEPDIR)/memmove.Po $(DEPDIR)/memset.Po \
|
||||
$(DEPDIR)/mktime.Po $(DEPDIR)/modechange$U.Po $(DEPDIR)/mountlist.Po \
|
||||
$(DEPDIR)/nanosleep.Po $(DEPDIR)/obstack.Po $(DEPDIR)/path-concat$U.Po \
|
||||
$(DEPDIR)/posixtm$U.Po $(DEPDIR)/putenv.Po $(DEPDIR)/quote$U.Po \
|
||||
$(DEPDIR)/quotearg$U.Po $(DEPDIR)/readtokens$U.Po $(DEPDIR)/readutmp.Po \
|
||||
$(DEPDIR)/realloc.Po $(DEPDIR)/regex.Po $(DEPDIR)/rmdir.Po \
|
||||
$(DEPDIR)/rpmatch.Po $(DEPDIR)/safe-read$U.Po $(DEPDIR)/same$U.Po \
|
||||
$(DEPDIR)/save-cwd$U.Po $(DEPDIR)/savedir$U.Po $(DEPDIR)/stat.Po \
|
||||
$(DEPDIR)/stime.Po $(DEPDIR)/stpcpy.Po $(DEPDIR)/strcasecmp.Po \
|
||||
$(DEPDIR)/strcspn.Po $(DEPDIR)/strdup.Po $(DEPDIR)/strftime.Po \
|
||||
$(DEPDIR)/stripslash$U.Po $(DEPDIR)/strncasecmp.Po $(DEPDIR)/strndup.Po \
|
||||
$(DEPDIR)/strnlen.Po $(DEPDIR)/strpbrk.Po $(DEPDIR)/strstr.Po \
|
||||
$(DEPDIR)/strtod.Po $(DEPDIR)/strtol.Po $(DEPDIR)/strtoul.Po \
|
||||
$(DEPDIR)/strtoull.Po $(DEPDIR)/strtoumax.Po $(DEPDIR)/strverscmp.Po \
|
||||
$(DEPDIR)/unicodeio$U.Po $(DEPDIR)/userspec$U.Po $(DEPDIR)/utime.Po \
|
||||
$(DEPDIR)/version-etc$U.Po $(DEPDIR)/xgetcwd$U.Po \
|
||||
$(DEPDIR)/xgethostname$U.Po $(DEPDIR)/xmalloc$U.Po \
|
||||
$(DEPDIR)/xstrdup$U.Po $(DEPDIR)/xstrtod$U.Po $(DEPDIR)/xstrtol$U.Po \
|
||||
$(DEPDIR)/xstrtoul$U.Po $(DEPDIR)/xstrtoumax$U.Po $(DEPDIR)/yesno$U.Po
|
||||
DIST_COMMON = README $(noinst_HEADERS) ChangeLog Makefile.am \
|
||||
Makefile.in TODO __fpending.c alloca.c atexit.c chown.c dup2.c error.c \
|
||||
error.h euidaccess.c fileblocks.c fnmatch.c fsusage.c ftruncate.c \
|
||||
getdate.c getgroups.c gethostname.c getline.c getloadavg.c getpass.c \
|
||||
getusershell.c group-member.c lchown.c malloc.c memchr.c memcmp.c \
|
||||
memcpy.c memmove.c memset.c mktime.c mountlist.c nanosleep.c obstack.c \
|
||||
obstack.h putenv.c readutmp.c realloc.c regex.c rmdir.c rpmatch.c \
|
||||
stime.c stpcpy.c strcasecmp.c strcspn.c strdup.c strftime.c \
|
||||
strncasecmp.c strndup.c strnlen.c strpbrk.c strstr.c strtod.c strtol.c \
|
||||
strtoul.c strtoull.c strtoumax.c strverscmp.c utime.c
|
||||
|
||||
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
|
||||
GZIP_ENV = --best
|
||||
depcomp = $(SHELL) $(top_srcdir)/depcomp
|
||||
DEP_FILES = @AMDEP@ $(DEPDIR)/addext$U.Po $(DEPDIR)/alloca.Po \
|
||||
$(DEPDIR)/argmatch$U.Po $(DEPDIR)/backupfile$U.Po \
|
||||
$(DEPDIR)/basename$U.Po $(DEPDIR)/chown.Po $(DEPDIR)/closeout$U.Po \
|
||||
$(DEPDIR)/dirname$U.Po $(DEPDIR)/dup2.Po $(DEPDIR)/error.Po \
|
||||
$(DEPDIR)/euidaccess.Po $(DEPDIR)/exclude$U.Po $(DEPDIR)/fileblocks.Po \
|
||||
$(DEPDIR)/filemode$U.Po $(DEPDIR)/fnmatch.Po $(DEPDIR)/fsusage.Po \
|
||||
$(DEPDIR)/ftruncate.Po $(DEPDIR)/full-write$U.Po $(DEPDIR)/getdate$U.Po \
|
||||
$(DEPDIR)/getgroups.Po $(DEPDIR)/getline.Po $(DEPDIR)/getopt$U.Po \
|
||||
$(DEPDIR)/getopt1$U.Po $(DEPDIR)/group-member.Po $(DEPDIR)/hash$U.Po \
|
||||
$(DEPDIR)/human$U.Po $(DEPDIR)/idcache$U.Po $(DEPDIR)/isdir$U.Po \
|
||||
$(DEPDIR)/lchown.Po $(DEPDIR)/long-options$U.Po $(DEPDIR)/lstat.Po \
|
||||
$(DEPDIR)/makepath$U.Po $(DEPDIR)/malloc.Po $(DEPDIR)/memchr.Po \
|
||||
$(DEPDIR)/memcmp.Po $(DEPDIR)/memcpy.Po $(DEPDIR)/memmove.Po \
|
||||
$(DEPDIR)/memset.Po $(DEPDIR)/mkdir.Po $(DEPDIR)/mktime.Po \
|
||||
$(DEPDIR)/modechange$U.Po $(DEPDIR)/mountlist.Po $(DEPDIR)/nanosleep.Po \
|
||||
$(DEPDIR)/obstack.Po $(DEPDIR)/path-concat$U.Po $(DEPDIR)/posixtm$U.Po \
|
||||
$(DEPDIR)/quotearg$U.Po $(DEPDIR)/realloc.Po $(DEPDIR)/regex.Po \
|
||||
$(DEPDIR)/rmdir.Po $(DEPDIR)/rpmatch.Po $(DEPDIR)/safe-read$U.Po \
|
||||
$(DEPDIR)/same$U.Po $(DEPDIR)/save-cwd$U.Po $(DEPDIR)/savedir$U.Po \
|
||||
$(DEPDIR)/stat.Po $(DEPDIR)/stpcpy.Po $(DEPDIR)/strcasecmp.Po \
|
||||
$(DEPDIR)/strdup.Po $(DEPDIR)/strftime.Po $(DEPDIR)/stripslash$U.Po \
|
||||
$(DEPDIR)/strncasecmp.Po $(DEPDIR)/strndup.Po $(DEPDIR)/strstr.Po \
|
||||
$(DEPDIR)/strtol.Po $(DEPDIR)/strtoul.Po $(DEPDIR)/strtoull.Po \
|
||||
$(DEPDIR)/strtoumax.Po $(DEPDIR)/strverscmp.Po $(DEPDIR)/userspec$U.Po \
|
||||
$(DEPDIR)/utime.Po $(DEPDIR)/version-etc$U.Po $(DEPDIR)/xgetcwd$U.Po \
|
||||
$(DEPDIR)/xmalloc$U.Po $(DEPDIR)/xstrdup$U.Po $(DEPDIR)/xstrtol$U.Po \
|
||||
$(DEPDIR)/xstrtoul$U.Po $(DEPDIR)/xstrtoumax$U.Po $(DEPDIR)/yesno$U.Po
|
||||
SOURCES = $(libfu_a_SOURCES)
|
||||
OBJECTS = $(am_libfu_a_OBJECTS)
|
||||
SOURCES = $(libfetish_a_SOURCES)
|
||||
OBJECTS = $(am_libfetish_a_OBJECTS)
|
||||
|
||||
all: all-redirect
|
||||
.SUFFIXES:
|
||||
.SUFFIXES: .c .o .y
|
||||
.SUFFIXES: .c .o .sed .sin .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)
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
cd $(top_builddir) \
|
||||
&& CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
|
||||
|
||||
@@ -254,24 +295,32 @@ distclean-kr:
|
||||
|
||||
maintainer-clean-kr:
|
||||
|
||||
libfu.a: $(libfu_a_OBJECTS) $(libfu_a_DEPENDENCIES)
|
||||
-rm -f libfu.a
|
||||
$(libfu_a_AR) libfu.a $(libfu_a_OBJECTS) $(libfu_a_LIBADD)
|
||||
$(RANLIB) libfu.a
|
||||
libfetish.a: $(libfetish_a_OBJECTS) $(libfetish_a_DEPENDENCIES)
|
||||
-rm -f libfetish.a
|
||||
$(libfetish_a_AR) libfetish.a $(libfetish_a_OBJECTS) $(libfetish_a_LIBADD)
|
||||
$(RANLIB) libfetish.a
|
||||
__fpending_.c: __fpending.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/__fpending.c; then echo $(srcdir)/__fpending.c; else echo __fpending.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > __fpending_.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` | 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
|
||||
atexit_.c: atexit.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/atexit.c; then echo $(srcdir)/atexit.c; else echo atexit.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > atexit_.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
|
||||
canon-host_.c: canon-host.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/canon-host.c; then echo $(srcdir)/canon-host.c; else echo canon-host.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > canon-host_.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
|
||||
diacrit_.c: diacrit.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/diacrit.c; then echo $(srcdir)/diacrit.c; else echo diacrit.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > diacrit_.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)
|
||||
@@ -298,14 +347,28 @@ 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
|
||||
gethostname_.c: gethostname.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/gethostname.c; then echo $(srcdir)/gethostname.c; else echo gethostname.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > gethostname_.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
|
||||
getloadavg_.c: getloadavg.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/getloadavg.c; then echo $(srcdir)/getloadavg.c; else echo getloadavg.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > getloadavg_.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
|
||||
getpass_.c: getpass.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/getpass.c; then echo $(srcdir)/getpass.c; else echo getpass.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > getpass_.c
|
||||
getstr_.c: getstr.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/getstr.c; then echo $(srcdir)/getstr.c; else echo getstr.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > getstr_.c
|
||||
getugroups_.c: getugroups.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/getugroups.c; then echo $(srcdir)/getugroups.c; else echo getugroups.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > getugroups_.c
|
||||
getusershell_.c: getusershell.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/getusershell.c; then echo $(srcdir)/getusershell.c; else echo getusershell.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > getusershell_.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
|
||||
hard-locale_.c: hard-locale.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/hard-locale.c; then echo $(srcdir)/hard-locale.c; else echo hard-locale.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > hard-locale_.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)
|
||||
@@ -316,6 +379,10 @@ 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
|
||||
linebuffer_.c: linebuffer.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/linebuffer.c; then echo $(srcdir)/linebuffer.c; else echo linebuffer.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > linebuffer_.c
|
||||
localcharset_.c: localcharset.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/localcharset.c; then echo $(srcdir)/localcharset.c; else echo localcharset.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > localcharset_.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)
|
||||
@@ -324,18 +391,24 @@ 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
|
||||
mbswidth_.c: mbswidth.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/mbswidth.c; then echo $(srcdir)/mbswidth.c; else echo mbswidth.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > mbswidth_.c
|
||||
md5_.c: md5.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/md5.c; then echo $(srcdir)/md5.c; else echo md5.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > md5_.c
|
||||
memcasecmp_.c: memcasecmp.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/memcasecmp.c; then echo $(srcdir)/memcasecmp.c; else echo memcasecmp.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > memcasecmp_.c
|
||||
memchr_.c: memchr.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/memchr.c; then echo $(srcdir)/memchr.c; else echo memchr.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > memchr_.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
|
||||
memcoll_.c: memcoll.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/memcoll.c; then echo $(srcdir)/memcoll.c; else echo memcoll.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > memcoll_.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
|
||||
memmove_.c: memmove.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/memmove.c; then echo $(srcdir)/memmove.c; else echo memmove.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > memmove_.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)
|
||||
@@ -350,8 +423,16 @@ 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
|
||||
putenv_.c: putenv.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/putenv.c; then echo $(srcdir)/putenv.c; else echo putenv.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > putenv_.c
|
||||
quote_.c: quote.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/quote.c; then echo $(srcdir)/quote.c; else echo quote.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > quote_.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
|
||||
readtokens_.c: readtokens.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/readtokens.c; then echo $(srcdir)/readtokens.c; else echo readtokens.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > readtokens_.c
|
||||
readutmp_.c: readutmp.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/readutmp.c; then echo $(srcdir)/readutmp.c; else echo readutmp.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > readutmp_.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)
|
||||
@@ -370,10 +451,14 @@ 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
|
||||
stime_.c: stime.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/stime.c; then echo $(srcdir)/stime.c; else echo stime.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > stime_.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
|
||||
strcspn_.c: strcspn.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/strcspn.c; then echo $(srcdir)/strcspn.c; else echo strcspn.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > strcspn_.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)
|
||||
@@ -384,8 +469,14 @@ 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
|
||||
strnlen_.c: strnlen.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/strnlen.c; then echo $(srcdir)/strnlen.c; else echo strnlen.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > strnlen_.c
|
||||
strpbrk_.c: strpbrk.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/strpbrk.c; then echo $(srcdir)/strpbrk.c; else echo strpbrk.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > strpbrk_.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
|
||||
strtod_.c: strtod.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/strtod.c; then echo $(srcdir)/strtod.c; else echo strtod.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > strtod_.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)
|
||||
@@ -396,6 +487,8 @@ 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
|
||||
unicodeio_.c: unicodeio.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/unicodeio.c; then echo $(srcdir)/unicodeio.c; else echo unicodeio.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > unicodeio_.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)
|
||||
@@ -404,10 +497,14 @@ 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
|
||||
xgethostname_.c: xgethostname.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/xgethostname.c; then echo $(srcdir)/xgethostname.c; else echo xgethostname.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > xgethostname_.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
|
||||
xstrtod_.c: xstrtod.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/xstrtod.c; then echo $(srcdir)/xstrtod.c; else echo xstrtod.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > xstrtod_.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)
|
||||
@@ -416,20 +513,26 @@ 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 memchr_.o memcmp_.o \
|
||||
memcpy_.o memmove_.o memset_.o mkdir_.o mktime_.o modechange_.o \
|
||||
mountlist_.o nanosleep_.o obstack_.o path-concat_.o posixtm_.o \
|
||||
quotearg_.o realloc_.o regex_.o rmdir_.o rpmatch_.o safe-read_.o \
|
||||
same_.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)
|
||||
__fpending_.o addext_.o alloca_.o argmatch_.o atexit_.o backupfile_.o \
|
||||
basename_.o canon-host_.o chown_.o closeout_.o diacrit_.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 gethostname_.o getline_.o getloadavg_.o getopt_.o \
|
||||
getopt1_.o getpass_.o getstr_.o getugroups_.o getusershell_.o \
|
||||
group-member_.o hard-locale_.o hash_.o human_.o idcache_.o isdir_.o \
|
||||
lchown_.o linebuffer_.o localcharset_.o long-options_.o lstat_.o \
|
||||
makepath_.o malloc_.o mbswidth_.o md5_.o memcasecmp_.o memchr_.o \
|
||||
memcmp_.o memcoll_.o memcpy_.o memmove_.o memset_.o mktime_.o \
|
||||
modechange_.o mountlist_.o nanosleep_.o obstack_.o path-concat_.o \
|
||||
posixtm_.o putenv_.o quote_.o quotearg_.o readtokens_.o readutmp_.o \
|
||||
realloc_.o regex_.o rmdir_.o rpmatch_.o safe-read_.o same_.o \
|
||||
save-cwd_.o savedir_.o stat_.o stime_.o stpcpy_.o strcasecmp_.o \
|
||||
strcspn_.o strdup_.o strftime_.o stripslash_.o strncasecmp_.o \
|
||||
strndup_.o strnlen_.o strpbrk_.o strstr_.o strtod_.o strtol_.o \
|
||||
strtoul_.o strtoull_.o strtoumax_.o strverscmp_.o unicodeio_.o \
|
||||
userspec_.o utime_.o version-etc_.o xgetcwd_.o xgethostname_.o \
|
||||
xmalloc_.o xstrdup_.o xstrtod_.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 \
|
||||
@@ -446,7 +549,7 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
mkid -f$$here/ID $$unique $(LISP)
|
||||
mkid -fID $$unique $(LISP)
|
||||
|
||||
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
@@ -470,27 +573,17 @@ distclean-tags:
|
||||
|
||||
maintainer-clean-tags:
|
||||
|
||||
distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
@for file in $(DISTFILES); do \
|
||||
d=$(srcdir); \
|
||||
if test -d $$d/$$file; then \
|
||||
cp -pR $$d/$$file $(distdir); \
|
||||
else \
|
||||
test -f $(distdir)/$$file \
|
||||
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \
|
||||
|| cp -p $$d/$$file $(distdir)/$$file || :; \
|
||||
fi; \
|
||||
done
|
||||
|
||||
@AMDEP@include $(DEPDIR)/__fpending.Po
|
||||
@AMDEP@include $(DEPDIR)/addext$U.Po
|
||||
@AMDEP@include $(DEPDIR)/alloca.Po
|
||||
@AMDEP@include $(DEPDIR)/argmatch$U.Po
|
||||
@AMDEP@include $(DEPDIR)/atexit.Po
|
||||
@AMDEP@include $(DEPDIR)/backupfile$U.Po
|
||||
@AMDEP@include $(DEPDIR)/basename$U.Po
|
||||
@AMDEP@include $(DEPDIR)/canon-host$U.Po
|
||||
@AMDEP@include $(DEPDIR)/chown.Po
|
||||
@AMDEP@include $(DEPDIR)/closeout$U.Po
|
||||
@AMDEP@include $(DEPDIR)/diacrit$U.Po
|
||||
@AMDEP@include $(DEPDIR)/dirname$U.Po
|
||||
@AMDEP@include $(DEPDIR)/dup2.Po
|
||||
@AMDEP@include $(DEPDIR)/error.Po
|
||||
@@ -504,25 +597,37 @@ distdir: $(DISTFILES)
|
||||
@AMDEP@include $(DEPDIR)/full-write$U.Po
|
||||
@AMDEP@include $(DEPDIR)/getdate$U.Po
|
||||
@AMDEP@include $(DEPDIR)/getgroups.Po
|
||||
@AMDEP@include $(DEPDIR)/gethostname.Po
|
||||
@AMDEP@include $(DEPDIR)/getline.Po
|
||||
@AMDEP@include $(DEPDIR)/getloadavg.Po
|
||||
@AMDEP@include $(DEPDIR)/getopt$U.Po
|
||||
@AMDEP@include $(DEPDIR)/getopt1$U.Po
|
||||
@AMDEP@include $(DEPDIR)/getpass.Po
|
||||
@AMDEP@include $(DEPDIR)/getstr$U.Po
|
||||
@AMDEP@include $(DEPDIR)/getugroups$U.Po
|
||||
@AMDEP@include $(DEPDIR)/getusershell.Po
|
||||
@AMDEP@include $(DEPDIR)/group-member.Po
|
||||
@AMDEP@include $(DEPDIR)/hard-locale$U.Po
|
||||
@AMDEP@include $(DEPDIR)/hash$U.Po
|
||||
@AMDEP@include $(DEPDIR)/human$U.Po
|
||||
@AMDEP@include $(DEPDIR)/idcache$U.Po
|
||||
@AMDEP@include $(DEPDIR)/isdir$U.Po
|
||||
@AMDEP@include $(DEPDIR)/lchown.Po
|
||||
@AMDEP@include $(DEPDIR)/linebuffer$U.Po
|
||||
@AMDEP@include $(DEPDIR)/localcharset$U.Po
|
||||
@AMDEP@include $(DEPDIR)/long-options$U.Po
|
||||
@AMDEP@include $(DEPDIR)/lstat.Po
|
||||
@AMDEP@include $(DEPDIR)/makepath$U.Po
|
||||
@AMDEP@include $(DEPDIR)/malloc.Po
|
||||
@AMDEP@include $(DEPDIR)/mbswidth$U.Po
|
||||
@AMDEP@include $(DEPDIR)/md5$U.Po
|
||||
@AMDEP@include $(DEPDIR)/memcasecmp$U.Po
|
||||
@AMDEP@include $(DEPDIR)/memchr.Po
|
||||
@AMDEP@include $(DEPDIR)/memcmp.Po
|
||||
@AMDEP@include $(DEPDIR)/memcoll$U.Po
|
||||
@AMDEP@include $(DEPDIR)/memcpy.Po
|
||||
@AMDEP@include $(DEPDIR)/memmove.Po
|
||||
@AMDEP@include $(DEPDIR)/memset.Po
|
||||
@AMDEP@include $(DEPDIR)/mkdir.Po
|
||||
@AMDEP@include $(DEPDIR)/mktime.Po
|
||||
@AMDEP@include $(DEPDIR)/modechange$U.Po
|
||||
@AMDEP@include $(DEPDIR)/mountlist.Po
|
||||
@@ -530,7 +635,11 @@ distdir: $(DISTFILES)
|
||||
@AMDEP@include $(DEPDIR)/obstack.Po
|
||||
@AMDEP@include $(DEPDIR)/path-concat$U.Po
|
||||
@AMDEP@include $(DEPDIR)/posixtm$U.Po
|
||||
@AMDEP@include $(DEPDIR)/putenv.Po
|
||||
@AMDEP@include $(DEPDIR)/quote$U.Po
|
||||
@AMDEP@include $(DEPDIR)/quotearg$U.Po
|
||||
@AMDEP@include $(DEPDIR)/readtokens$U.Po
|
||||
@AMDEP@include $(DEPDIR)/readutmp.Po
|
||||
@AMDEP@include $(DEPDIR)/realloc.Po
|
||||
@AMDEP@include $(DEPDIR)/regex.Po
|
||||
@AMDEP@include $(DEPDIR)/rmdir.Po
|
||||
@@ -540,25 +649,33 @@ distdir: $(DISTFILES)
|
||||
@AMDEP@include $(DEPDIR)/save-cwd$U.Po
|
||||
@AMDEP@include $(DEPDIR)/savedir$U.Po
|
||||
@AMDEP@include $(DEPDIR)/stat.Po
|
||||
@AMDEP@include $(DEPDIR)/stime.Po
|
||||
@AMDEP@include $(DEPDIR)/stpcpy.Po
|
||||
@AMDEP@include $(DEPDIR)/strcasecmp.Po
|
||||
@AMDEP@include $(DEPDIR)/strcspn.Po
|
||||
@AMDEP@include $(DEPDIR)/strdup.Po
|
||||
@AMDEP@include $(DEPDIR)/strftime.Po
|
||||
@AMDEP@include $(DEPDIR)/stripslash$U.Po
|
||||
@AMDEP@include $(DEPDIR)/strncasecmp.Po
|
||||
@AMDEP@include $(DEPDIR)/strndup.Po
|
||||
@AMDEP@include $(DEPDIR)/strnlen.Po
|
||||
@AMDEP@include $(DEPDIR)/strpbrk.Po
|
||||
@AMDEP@include $(DEPDIR)/strstr.Po
|
||||
@AMDEP@include $(DEPDIR)/strtod.Po
|
||||
@AMDEP@include $(DEPDIR)/strtol.Po
|
||||
@AMDEP@include $(DEPDIR)/strtoul.Po
|
||||
@AMDEP@include $(DEPDIR)/strtoull.Po
|
||||
@AMDEP@include $(DEPDIR)/strtoumax.Po
|
||||
@AMDEP@include $(DEPDIR)/strverscmp.Po
|
||||
@AMDEP@include $(DEPDIR)/unicodeio$U.Po
|
||||
@AMDEP@include $(DEPDIR)/userspec$U.Po
|
||||
@AMDEP@include $(DEPDIR)/utime.Po
|
||||
@AMDEP@include $(DEPDIR)/version-etc$U.Po
|
||||
@AMDEP@include $(DEPDIR)/xgetcwd$U.Po
|
||||
@AMDEP@include $(DEPDIR)/xgethostname$U.Po
|
||||
@AMDEP@include $(DEPDIR)/xmalloc$U.Po
|
||||
@AMDEP@include $(DEPDIR)/xstrdup$U.Po
|
||||
@AMDEP@include $(DEPDIR)/xstrtod$U.Po
|
||||
@AMDEP@include $(DEPDIR)/xstrtol$U.Po
|
||||
@AMDEP@include $(DEPDIR)/xstrtoul$U.Po
|
||||
@AMDEP@include $(DEPDIR)/xstrtoumax$U.Po
|
||||
@@ -576,11 +693,26 @@ maintainer-clean-depend:
|
||||
@AMDEP@CCDEPMODE = @CCDEPMODE@
|
||||
|
||||
.c.o:
|
||||
@AMDEP@ source='$<' object='$@' @AMDEPBACKSLASH@
|
||||
@AMDEP@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
|
||||
@AMDEP@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(COMPILE) -c -o $@ $<
|
||||
$(COMPILE) -c -o $@ `test -f $< || echo '$(srcdir)/'`$<
|
||||
|
||||
|
||||
distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
@for file in $(DISTFILES); do \
|
||||
d=$(srcdir); \
|
||||
if test -d $$d/$$file; then \
|
||||
cp -pR $$d/$$file $(distdir) \
|
||||
|| exit 1; \
|
||||
else \
|
||||
test -f $(distdir)/$$file \
|
||||
|| cp -p $$d/$$file $(distdir)/$$file \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
info-am:
|
||||
info: info-am
|
||||
dvi-am:
|
||||
@@ -589,7 +721,7 @@ check-am: all-am
|
||||
check: check-am
|
||||
installcheck-am:
|
||||
installcheck: installcheck-am
|
||||
install-exec-am:
|
||||
install-exec-am: install-exec-local
|
||||
install-exec: install-exec-am
|
||||
|
||||
install-data-am:
|
||||
@@ -598,9 +730,9 @@ install-data: install-data-am
|
||||
install-am: all-am
|
||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
||||
install: install-am
|
||||
uninstall-am:
|
||||
uninstall-am: uninstall-local
|
||||
uninstall: uninstall-am
|
||||
all-am: Makefile $(LIBRARIES) $(HEADERS)
|
||||
all-am: Makefile $(LIBRARIES) $(HEADERS) all-local
|
||||
all-redirect: all-am
|
||||
install-strip:
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_STRIP_FLAG=-s install
|
||||
@@ -610,6 +742,7 @@ installdirs:
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
|
||||
|
||||
distclean-generic:
|
||||
-rm -f Makefile $(CONFIG_CLEAN_FILES)
|
||||
@@ -650,13 +783,14 @@ 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-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
|
||||
maintainer-clean-tags mostlyclean-depend distclean-depend clean-depend \
|
||||
maintainer-clean-depend distdir info-am info dvi-am dvi check check-am \
|
||||
installcheck-am installcheck install-exec-local install-exec-am \
|
||||
install-exec install-data-am install-data install-am install \
|
||||
uninstall-local uninstall-am uninstall all-local all-redirect all-am \
|
||||
all install-strip installdirs mostlyclean-generic distclean-generic \
|
||||
clean-generic maintainer-clean-generic clean mostlyclean distclean \
|
||||
maintainer-clean
|
||||
|
||||
lstat.c: xstat.in
|
||||
sed \
|
||||
@@ -676,6 +810,47 @@ stat.c: xstat.in
|
||||
$(srcdir)/xstat.in > $@-t
|
||||
mv $@-t $@
|
||||
|
||||
# The following is needed in order to install a simple file in $(libdir)
|
||||
# which is shared with other installed packages. We use a list of referencing
|
||||
# packages so that "make uninstall" will remove the file if and only if it
|
||||
# is not used by another installed package.
|
||||
# On systems with glibc-2.1 or newer, the file is redundant, therefore we
|
||||
# avoid installing it.
|
||||
|
||||
all-local: charset.alias ref-add.sed ref-del.sed lstat.c stat.c
|
||||
install-exec-local: all-local
|
||||
$(mkinstalldirs) $(DESTDIR)$(libdir)
|
||||
if test -f $(charset_alias); then \
|
||||
sed -f ref-add.sed $(charset_alias) > $(charset_tmp) ; \
|
||||
$(INSTALL_DATA) $(charset_tmp) $(charset_alias) ; \
|
||||
rm -f $(charset_tmp) ; \
|
||||
else \
|
||||
if test @GLIBC21@ = no; then \
|
||||
sed -f ref-add.sed charset.alias > $(charset_tmp) ; \
|
||||
$(INSTALL_DATA) $(charset_tmp) $(charset_alias) ; \
|
||||
rm -f $(charset_tmp) ; \
|
||||
fi ; \
|
||||
fi
|
||||
|
||||
uninstall-local: all-local
|
||||
if test -f $(charset_alias); then \
|
||||
sed -f ref-del.sed $(charset_alias) > $(charset_tmp); \
|
||||
if grep '^# Packages using this file: $$' $(charset_tmp) \
|
||||
> /dev/null; then \
|
||||
rm -f $(charset_alias); \
|
||||
else \
|
||||
$(INSTALL_DATA) $(charset_tmp) $(charset_alias); \
|
||||
fi; \
|
||||
rm -f $(charset_tmp); \
|
||||
fi
|
||||
|
||||
charset.alias: config.charset
|
||||
$(SHELL) $(srcdir)/config.charset '@host@' > t-$@
|
||||
mv t-$@ $@
|
||||
.sin.sed:
|
||||
sed -e '/^#/d' -e 's/@''PACKAGE''@/@PACKAGE@/g' $< > $@-t
|
||||
mv $@-t $@
|
||||
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
||||
|
||||
6
lib/README
Normal file
6
lib/README
Normal file
@@ -0,0 +1,6 @@
|
||||
The files in this directory are shared between the fileutils, sh-utils,
|
||||
and textutils packages. Not all files are used by each package.
|
||||
The autoconf tests required for these files are in ../m4.
|
||||
|
||||
The library name, fetish, is a permutation of the first two
|
||||
letters of each of the package names: FIleutils, TExtutils, SH-utils.
|
||||
30
lib/__fpending.c
Normal file
30
lib/__fpending.c
Normal file
@@ -0,0 +1,30 @@
|
||||
/* __fpending.c -- return the number of pending output bytes on a stream
|
||||
Copyright (C) 2000 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 Jim Meyering. */
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#include "__fpending.h"
|
||||
|
||||
size_t
|
||||
__fpending (FILE *fp)
|
||||
{
|
||||
return PENDING_OUTPUT_N_BYTES;
|
||||
}
|
||||
18
lib/__fpending.h
Normal file
18
lib/__fpending.h
Normal file
@@ -0,0 +1,18 @@
|
||||
#if HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#if HAVE_STDIO_EXT_H
|
||||
# include <stdio_ext.h>
|
||||
#endif
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
#ifndef HAVE_DECL___FPENDING
|
||||
"this configure-time declaration test was not run"
|
||||
#endif
|
||||
#if !HAVE_DECL___FPENDING
|
||||
size_t __fpending (FILE *);
|
||||
#endif
|
||||
10
lib/alloca.c
10
lib/alloca.c
@@ -25,6 +25,13 @@
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#if HAVE_STRING_H
|
||||
# include <string.h>
|
||||
#endif
|
||||
#if HAVE_STDLIB_H
|
||||
# include <stdlib.h>
|
||||
#endif
|
||||
|
||||
#ifdef emacs
|
||||
# include "blockinput.h"
|
||||
#endif
|
||||
@@ -210,6 +217,9 @@ alloca (unsigned size)
|
||||
register pointer new = malloc (sizeof (header) + size);
|
||||
/* Address of header. */
|
||||
|
||||
if (new == 0)
|
||||
abort();
|
||||
|
||||
((header *) new)->h.next = last_alloca_header;
|
||||
((header *) new)->h.deep = depth;
|
||||
|
||||
|
||||
14
lib/atexit.c
Normal file
14
lib/atexit.c
Normal file
@@ -0,0 +1,14 @@
|
||||
/* Wrapper to implement ANSI C's atexit using SunOS's on_exit. */
|
||||
/* This function is in the public domain. --Mike Stump. */
|
||||
|
||||
#include "config.h"
|
||||
|
||||
int
|
||||
atexit(f)
|
||||
void (*f)();
|
||||
{
|
||||
/* If the system doesn't provide a definition for atexit, use on_exit
|
||||
if the system provides that. */
|
||||
on_exit (f, 0);
|
||||
return 0;
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
/* backupfile.c -- make Emacs style backup file names
|
||||
Copyright (C) 1990-1997, 1998, 1999 Free Software Foundation, Inc.
|
||||
Copyright (C) 1990-1997, 1998, 1999, 2000 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
|
||||
@@ -58,16 +58,24 @@
|
||||
# define CLOSEDIR(d) closedir (d)
|
||||
#endif
|
||||
|
||||
#if STDC_HEADERS
|
||||
#if HAVE_STDLIB_H
|
||||
# include <stdlib.h>
|
||||
#else
|
||||
char *malloc ();
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_DECL_GETENV
|
||||
"this configure-time declaration test was not run"
|
||||
#endif
|
||||
#if !HAVE_DECL_GETENV
|
||||
char *getenv ();
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_DECL_MALLOC
|
||||
"this configure-time declaration test was not run"
|
||||
#endif
|
||||
#if !HAVE_DECL_MALLOC
|
||||
char *malloc ();
|
||||
#endif
|
||||
|
||||
char *base_name PARAMS ((char const *));
|
||||
|
||||
#if HAVE_DIRENT_H || HAVE_NDIR_H || HAVE_SYS_DIR_H || HAVE_SYS_NDIR_H
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* basename.c -- return the last element in a path
|
||||
Copyright (C) 1990, 1998, 1999 Free Software Foundation, Inc.
|
||||
Copyright (C) 1990, 1998, 1999, 2000 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>
|
||||
#endif
|
||||
|
||||
#include <assert.h>
|
||||
|
||||
#ifndef FILESYSTEM_PREFIX_LEN
|
||||
# define FILESYSTEM_PREFIX_LEN(Filename) 0
|
||||
#endif
|
||||
@@ -61,5 +63,8 @@ base_name (char const *name)
|
||||
if (*base == '\0' && ISSLASH (*name) && all_slashes)
|
||||
--base;
|
||||
|
||||
/* Make sure the last byte is not a slash. */
|
||||
assert (all_slashes || !ISSLASH (*(p - 1)));
|
||||
|
||||
return (char *) base;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* BUMP_ALLOC macro - increase table allocation by one element.
|
||||
Copyright (C) 1990, 1991, 1993, 1998 Free Software Foundation, Inc.
|
||||
Copyright (C) 1990, 1991, 1993, 1998, 2000 Free Software Foundation, Inc.
|
||||
François Pinard <pinard@iro.umontreal.ca>, 1990.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
@@ -25,8 +25,8 @@
|
||||
`-------------------------------------------------------------------------*/
|
||||
|
||||
/* Routines `xmalloc' and `xrealloc' are called to do the actual memory
|
||||
management. This implies that the program will abort with an `Memory
|
||||
exhausted!' error if any problem arise.
|
||||
management. This implies that the program will abort with a "memory
|
||||
exhausted" error if any problem arise.
|
||||
|
||||
To work correctly, at least EXPONENT and TYPE should always be the
|
||||
same for all uses of this macro for any given TABLE. A secure way to
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/* Host name canonicalization
|
||||
|
||||
Copyright (C) 1995, 1999 Free Software Foundation, Inc.
|
||||
Copyright (C) 1995, 1999, 2000 Free Software Foundation, Inc.
|
||||
|
||||
Written by Miles Bader <miles@gnu.ai.mit.edu>
|
||||
|
||||
@@ -26,6 +26,9 @@
|
||||
#ifdef HAVE_UNISTD_H
|
||||
# include <unistd.h>
|
||||
#endif
|
||||
#ifdef HAVE_STDLIB_H
|
||||
# include <stdlib.h>
|
||||
#endif
|
||||
#ifdef HAVE_STRING_H
|
||||
# include <string.h>
|
||||
#endif
|
||||
@@ -43,7 +46,9 @@
|
||||
# include <arpa/inet.h>
|
||||
#endif
|
||||
|
||||
void free ();
|
||||
#ifndef strdup
|
||||
char *strdup ();
|
||||
#endif
|
||||
|
||||
/* Returns the canonical hostname associated with HOST (allocated in a static
|
||||
buffer), or 0 if it can't be determined. */
|
||||
@@ -77,11 +82,12 @@ canon_host (const char *host)
|
||||
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);
|
||||
char *h_addr_copy = (char *) malloc (he->h_length);
|
||||
if (h_addr_copy == NULL)
|
||||
he = NULL;
|
||||
else
|
||||
{
|
||||
memcpy (h_addr_copy, he->h_addr, he->h_length);
|
||||
he = gethostbyaddr (h_addr_copy, he->h_length, he->h_addrtype);
|
||||
free (h_addr_copy);
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* closeout.c - close standard output
|
||||
Copyright (C) 1998, 1999 Free Software Foundation, Inc.
|
||||
Copyright (C) 1998, 1999, 2000 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
|
||||
@@ -33,14 +33,37 @@
|
||||
# define EXIT_FAILURE 1
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#include <errno.h>
|
||||
#ifndef errno
|
||||
extern int errno;
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
#include "closeout.h"
|
||||
#include "error.h"
|
||||
#include "quotearg.h"
|
||||
#include "__fpending.h"
|
||||
|
||||
static int default_exit_status = EXIT_FAILURE;
|
||||
static const char *file_name;
|
||||
|
||||
/* Set the value to be used for the exit status when close_stdout is called.
|
||||
This is useful when it is not convenient to call close_stdout_status,
|
||||
e.g., when close_stdout is called via atexit. */
|
||||
void
|
||||
close_stdout_set_status (int status)
|
||||
{
|
||||
default_exit_status = status;
|
||||
}
|
||||
|
||||
/* Set the file name to be reported in the event an error is detected
|
||||
by close_stdout_status. */
|
||||
void
|
||||
close_stdout_set_file_name (const char *file)
|
||||
{
|
||||
file_name = file;
|
||||
}
|
||||
|
||||
/* Close standard output, exiting with status STATUS on failure.
|
||||
If a program writes *anything* to stdout, that program should `fflush'
|
||||
@@ -64,18 +87,31 @@ extern int errno;
|
||||
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)
|
||||
{
|
||||
if (ferror (stdout))
|
||||
error (status, 0, _("write error"));
|
||||
int e = ferror (stdout) ? 0 : -1;
|
||||
|
||||
if (__fpending (stdout) == 0)
|
||||
return;
|
||||
|
||||
if (fclose (stdout) != 0)
|
||||
error (status, errno, _("write error"));
|
||||
e = errno;
|
||||
|
||||
if (0 <= e)
|
||||
{
|
||||
char const *write_error = _("write error");
|
||||
if (file_name)
|
||||
error (status, e, "%s: %s", quotearg_colon (file_name), write_error);
|
||||
else
|
||||
error (status, e, "%s", write_error);
|
||||
}
|
||||
}
|
||||
|
||||
/* Close standard output, exiting with status EXIT_FAILURE on failure. */
|
||||
void
|
||||
close_stdout (void)
|
||||
{
|
||||
close_stdout_status (EXIT_FAILURE);
|
||||
close_stdout_status (default_exit_status);
|
||||
}
|
||||
|
||||
@@ -6,5 +6,7 @@
|
||||
# endif
|
||||
#endif
|
||||
|
||||
void close_stdout_set_status PARAMS ((int status));
|
||||
void close_stdout_set_file_name PARAMS ((const char *file));
|
||||
void close_stdout PARAMS ((void));
|
||||
void close_stdout_status PARAMS ((int status));
|
||||
|
||||
216
lib/config.charset
Executable file
216
lib/config.charset
Executable file
@@ -0,0 +1,216 @@
|
||||
#! /bin/sh
|
||||
# Output a system dependent table of character encoding aliases.
|
||||
#
|
||||
# Copyright (C) 2000 Free Software Foundation, Inc.
|
||||
#
|
||||
# This program 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, 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
|
||||
# Library General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Library 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.
|
||||
#
|
||||
# The table consists of lines of the form
|
||||
# ALIAS CANONICAL
|
||||
#
|
||||
# ALIAS is the (system dependent) result of "nl_langinfo (CODESET)".
|
||||
# ALIAS is compared in a case sensitive way.
|
||||
#
|
||||
# CANONICAL is the GNU canonical name for this character encoding.
|
||||
# It must be an encoding supported by libiconv. Support by GNU libc is
|
||||
# also desirable. CANONICAL is case insensitive. Usually an upper case
|
||||
# MIME charset name is preferred.
|
||||
# The current list of GNU canonical charset names is as follows.
|
||||
#
|
||||
# name used by which systems a MIME name?
|
||||
# ASCII, ANSI_X3.4-1968 glibc solaris freebsd
|
||||
# ISO-8859-1 glibc aix hpux irix osf solaris freebsd yes
|
||||
# ISO-8859-2 glibc aix hpux irix solaris freebsd yes
|
||||
# ISO-8859-4 solaris yes
|
||||
# ISO-8859-5 glibc aix hpux irix solaris yes
|
||||
# ISO-8859-6 glibc aix hpux solaris yes
|
||||
# ISO-8859-7 glibc aix hpux irix osf solaris yes
|
||||
# ISO-8859-8 glibc aix hpux solaris yes
|
||||
# ISO-8859-9 glibc aix hpux irix osf solaris yes
|
||||
# ISO-8859-13 glibc
|
||||
# ISO-8859-15 aix solaris freebsd
|
||||
# KOI8-R glibc solaris freebsd yes
|
||||
# KOI8-U glibc yes
|
||||
# CP850 aix osf
|
||||
# CP856 aix
|
||||
# CP866 freebsd
|
||||
# CP922 aix
|
||||
# CP932 aix
|
||||
# CP943 aix
|
||||
# CP1046 aix
|
||||
# CP1124 aix
|
||||
# CP1129 aix
|
||||
# CP1251 glibc
|
||||
# CP1252 aix
|
||||
# EUC-CN aix hpux irix solaris
|
||||
# EUC-JP aix hpux irix solaris yes
|
||||
# EUC-KR aix hpux irix solaris yes
|
||||
# EUC-TW aix hpux irix solaris
|
||||
# BIG5 aix hpux solaris yes
|
||||
# GBK aix
|
||||
# SJIS hpux solaris
|
||||
# TIS-620 aix hpux solaris
|
||||
# HP-ROMAN8 hpux
|
||||
# HP-ARABIC8 hpux
|
||||
# HP-GREEK8 hpux
|
||||
# HP-HEBREW8 hpux
|
||||
# HP-TURKISH8 hpux
|
||||
# HP-KANA8 hpux
|
||||
# UTF-8 glibc aix hpux solaris yes
|
||||
#
|
||||
# Note: Names which are not marked as being a MIME name should not be used in
|
||||
# Internet protocols for information interchange (mail, news, etc.).
|
||||
#
|
||||
# Note: ASCII and ANSI_X3.4-1968 are synonymous canonical names. Applications
|
||||
# must understand both names and treat them as equivalent.
|
||||
#
|
||||
# The first argument passed to this file is the canonical host specification,
|
||||
# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
|
||||
# or
|
||||
# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
|
||||
|
||||
host="$1"
|
||||
os=`echo "$host" | sed -e 's/^[^-]*-[^-]*-\(.*\)$/\1/'`
|
||||
echo "# This file contains a table of character encoding aliases,"
|
||||
echo "# suitable for operating system '${os}'."
|
||||
echo "# It was automatically generated from config.charset."
|
||||
# List of references, updated during installation:
|
||||
echo "# Packages using this file: "
|
||||
case "$os" in
|
||||
linux* | *-gnu*)
|
||||
# With glibc-2.1 or newer, we don't need any canonicalization,
|
||||
# because glibc has iconv and both glibc and libiconv support all
|
||||
# GNU canonical names directly. Therefore, the Makefile does not
|
||||
# need to install the alias file at all.
|
||||
# The following applies only to glibc-2.0.x and older libcs.
|
||||
echo "ISO_646.IRV:1983 ASCII"
|
||||
;;
|
||||
aix*)
|
||||
echo "ISO8859-1 ISO-8859-1"
|
||||
echo "ISO8859-2 ISO-8859-2"
|
||||
echo "ISO8859-5 ISO-8859-5"
|
||||
echo "ISO8859-6 ISO-8859-6"
|
||||
echo "ISO8859-7 ISO-8859-7"
|
||||
echo "ISO8859-8 ISO-8859-8"
|
||||
echo "ISO8859-9 ISO-8859-9"
|
||||
echo "ISO8859-15 ISO-8859-15"
|
||||
echo "IBM-850 CP850"
|
||||
echo "IBM-856 CP856"
|
||||
echo "IBM-921 ISO-8859-13"
|
||||
echo "IBM-922 CP922"
|
||||
echo "IBM-932 CP932"
|
||||
echo "IBM-943 CP943"
|
||||
echo "IBM-1046 CP1046"
|
||||
echo "IBM-1124 CP1124"
|
||||
echo "IBM-1129 CP1129"
|
||||
echo "IBM-1252 CP1252"
|
||||
echo "IBM-eucCN EUC-CN"
|
||||
echo "IBM-eucJP EUC-JP"
|
||||
echo "IBM-eucKR EUC-KR"
|
||||
echo "IBM-eucTW EUC-TW"
|
||||
echo "big5 BIG5"
|
||||
echo "GBK GBK"
|
||||
echo "TIS-620 TIS-620"
|
||||
echo "UTF-8 UTF-8"
|
||||
;;
|
||||
hpux*)
|
||||
echo "iso88591 ISO-8859-1"
|
||||
echo "iso88592 ISO-8859-2"
|
||||
echo "iso88595 ISO-8859-5"
|
||||
echo "iso88596 ISO-8859-6"
|
||||
echo "iso88597 ISO-8859-7"
|
||||
echo "iso88598 ISO-8859-8"
|
||||
echo "iso88599 ISO-8859-9"
|
||||
echo "iso885915 ISO-8859-15"
|
||||
echo "roman8 HP-ROMAN8"
|
||||
echo "arabic8 HP-ARABIC8"
|
||||
echo "greek8 HP-GREEK8"
|
||||
echo "hebrew8 HP-HEBREW8"
|
||||
echo "turkish8 HP-TURKISH8"
|
||||
echo "kana8 HP-KANA8"
|
||||
echo "tis620 TIS-620"
|
||||
echo "big5 BIG5"
|
||||
echo "eucJP EUC-JP"
|
||||
echo "eucKR EUC-KR"
|
||||
echo "eucTW EUC-TW"
|
||||
echo "hp15CN EUC-CN"
|
||||
#echo "ccdc ?" # what is this?
|
||||
echo "SJIS SJIS"
|
||||
echo "utf8 UTF-8"
|
||||
;;
|
||||
irix*)
|
||||
echo "ISO8859-1 ISO-8859-1"
|
||||
echo "ISO8859-2 ISO-8859-2"
|
||||
echo "ISO8859-5 ISO-8859-5"
|
||||
echo "ISO8859-7 ISO-8859-7"
|
||||
echo "ISO8859-9 ISO-8859-9"
|
||||
echo "eucCN EUC-CN"
|
||||
echo "eucJP EUC-JP"
|
||||
echo "eucKR EUC-KR"
|
||||
echo "eucTW EUC-TW"
|
||||
;;
|
||||
osf*)
|
||||
echo "ISO8859-1 ISO-8859-1"
|
||||
echo "ISO8859-7 ISO-8859-7"
|
||||
echo "ISO8859-9 ISO-8859-9"
|
||||
echo "cp850 CP850"
|
||||
;;
|
||||
solaris*)
|
||||
echo "646 ASCII"
|
||||
echo "ISO8859-1 ISO-8859-1"
|
||||
echo "ISO8859-2 ISO-8859-2"
|
||||
echo "ISO8859-4 ISO-8859-4"
|
||||
echo "ISO8859-5 ISO-8859-5"
|
||||
echo "ISO8859-6 ISO-8859-6"
|
||||
echo "ISO8859-7 ISO-8859-7"
|
||||
echo "ISO8859-8 ISO-8859-8"
|
||||
echo "ISO8859-9 ISO-8859-9"
|
||||
echo "ISO8859-15 ISO-8859-15"
|
||||
echo "koi8-r KOI8-R"
|
||||
echo "BIG5 BIG5"
|
||||
echo "gb2312 EUC-CN"
|
||||
echo "cns11643 EUC-TW"
|
||||
echo "5601 EUC-KR"
|
||||
echo "eucJP EUC-JP"
|
||||
echo "PCK SJIS"
|
||||
echo "TIS620.2533 TIS-620"
|
||||
#echo "sun_eu_greek ?" # what is this?
|
||||
echo "UTF-8 UTF-8"
|
||||
;;
|
||||
freebsd*)
|
||||
# FreeBSD 3.3 doesn't have nl_langinfo(CODESET); therefore
|
||||
# localcharset.c falls back to using the full locale name
|
||||
# from the environment variables.
|
||||
echo "C ASCII"
|
||||
echo "US-ASCII ASCII"
|
||||
for l in lt_LN; do
|
||||
echo "$l.ASCII ASCII"
|
||||
done
|
||||
for l in da_DK de_AT de_CH de_DE en_AU en_CA en_GB en_US es_ES \
|
||||
fi_FI fr_BE fr_CA fr_CH fr_FR is_IS it_CH it_IT lt_LN \
|
||||
nl_BE nl_NL no_NO pt_PT sv_SE; do
|
||||
echo "$l.ISO_8859-1 ISO-8859-1"
|
||||
echo "$l.DIS_8859-15 ISO-8859-15"
|
||||
done
|
||||
for l in hr_HR hu_HU lt_LN pl_PL sl_SI; do
|
||||
echo "$l.ISO_8859-2 ISO-8859-2"
|
||||
done
|
||||
for l in ru_RU ru_SU; do
|
||||
echo "$l.KOI8-R KOI8-R"
|
||||
echo "$l.CP866 CP866"
|
||||
done
|
||||
;;
|
||||
esac
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Diacritics processing for a few character codes.
|
||||
Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc.
|
||||
Copyright (C) 1990, 1991, 1992, 1993, 2000 Free Software Foundation, Inc.
|
||||
François Pinard <pinard@iro.umontreal.ca>, 1988.
|
||||
|
||||
All this file is a temporary hack, waiting for locales in GNU.
|
||||
@@ -38,7 +38,7 @@ const char diacrit_base[256] =
|
||||
'p', 'q', 'r', 's', 't', 'u', 'v', 'w',
|
||||
'x', 'y', 'z', 0, 0, 0, 0, 0,
|
||||
|
||||
#ifdef MSDOS
|
||||
#ifdef __MSDOS__
|
||||
|
||||
'C', 'u', 'e', 'a', 'a', 'a', 'a', 'c',
|
||||
'e', 'e', 'e', 'i', 'i', 'i', 'A', 'A',
|
||||
@@ -57,7 +57,7 @@ const char diacrit_base[256] =
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
|
||||
#else /* not MSDOS */
|
||||
#else
|
||||
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
@@ -76,7 +76,7 @@ const char diacrit_base[256] =
|
||||
0, 'n', 'o', 'o', 'o', 'o', 'o', 0,
|
||||
'o', 'u', 'u', 'u', 'u', 'y', 0, 'y',
|
||||
|
||||
#endif /* not MSDOS */
|
||||
#endif
|
||||
};
|
||||
|
||||
/*------------------------------------------------------------------------.
|
||||
@@ -106,7 +106,7 @@ const char diacrit_diac[256] =
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 6, 0,
|
||||
|
||||
#ifdef MSDOS
|
||||
#ifdef __MSDOS__
|
||||
|
||||
7, 5, 2, 4, 5, 3, 8, 7,
|
||||
4, 5, 3, 5, 4, 3, 5, 8,
|
||||
@@ -125,7 +125,7 @@ const char diacrit_diac[256] =
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
|
||||
#else /* not MSDOS */
|
||||
#else
|
||||
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
@@ -144,5 +144,5 @@ const char diacrit_diac[256] =
|
||||
0, 6, 3, 2, 4, 6, 5, 0,
|
||||
9, 3, 2, 4, 5, 2, 0, 0,
|
||||
|
||||
#endif /* not MSDOS */
|
||||
#endif
|
||||
};
|
||||
|
||||
@@ -13,4 +13,3 @@ extern const char diacrit_diac[]; /* diacritic code for each character */
|
||||
|
||||
/* Returns a diacritic code for CHAR. CHAR is known to be alphabetic. */
|
||||
#define todiac(Char) (diacrit_diac[(unsigned char) (Char)])
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* dirname.c -- return all but the last element in a path
|
||||
Copyright (C) 1990, 1998 Free Software Foundation, Inc.
|
||||
Copyright (C) 1990, 1998, 2000 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
|
||||
@@ -32,9 +32,16 @@ char *malloc ();
|
||||
# define strrchr rindex
|
||||
# endif
|
||||
#endif
|
||||
#include <assert.h>
|
||||
|
||||
#include "dirname.h"
|
||||
|
||||
#ifndef ISSLASH
|
||||
# define ISSLASH(C) ((C) == '/')
|
||||
#endif
|
||||
|
||||
#define BACKSLASH_IS_PATH_SEPARATOR ISSLASH ('\\')
|
||||
|
||||
/* Return the leading directories part of PATH,
|
||||
allocated with malloc. If out of memory, return 0.
|
||||
Assumes that trailing slashes have already been
|
||||
@@ -48,6 +55,19 @@ dir_name (const char *path)
|
||||
int length; /* Length of result, not including NUL. */
|
||||
|
||||
slash = strrchr (path, '/');
|
||||
if (BACKSLASH_IS_PATH_SEPARATOR)
|
||||
{
|
||||
char *b = strrchr (path, '\\');
|
||||
if (b && slash < b)
|
||||
slash = b;
|
||||
}
|
||||
|
||||
/* Make sure there are no trailing slashes. */
|
||||
assert (slash == NULL /* There are no slashes in PATH. */
|
||||
|| slash[1] != 0 /* There is a non-NUL byte after the last slash. */
|
||||
|| path == slash /* PATH is just `/'. */
|
||||
);
|
||||
|
||||
if (slash == 0)
|
||||
{
|
||||
/* File is in the current directory. */
|
||||
@@ -57,11 +77,25 @@ dir_name (const char *path)
|
||||
else
|
||||
{
|
||||
/* Remove any trailing slashes from the result. */
|
||||
while (slash > path && *slash == '/')
|
||||
--slash;
|
||||
if (BACKSLASH_IS_PATH_SEPARATOR)
|
||||
{
|
||||
const char *lim = ((path[0] >= 'A' && path[0] <= 'z'
|
||||
&& path[1] == ':')
|
||||
? path + 2 : path);
|
||||
|
||||
/* If canonicalized "d:/path", leave alone the root case "d:/". */
|
||||
while (slash > lim && ISSLASH (*slash))
|
||||
--slash;
|
||||
}
|
||||
else
|
||||
{
|
||||
while (slash > path && ISSLASH (*slash))
|
||||
--slash;
|
||||
}
|
||||
|
||||
length = slash - path + 1;
|
||||
}
|
||||
|
||||
newpath = (char *) malloc (length + 1);
|
||||
if (newpath == 0)
|
||||
return 0;
|
||||
|
||||
@@ -49,6 +49,13 @@ void exit ();
|
||||
|
||||
#include "error.h"
|
||||
|
||||
#ifndef HAVE_DECL_STRERROR_R
|
||||
"this configure-time declaration test was not run"
|
||||
#endif
|
||||
#if !HAVE_DECL_STRERROR_R
|
||||
char *strerror_r ();
|
||||
#endif
|
||||
|
||||
#ifndef _
|
||||
# define _(String) String
|
||||
#endif
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Declaration for error-reporting function
|
||||
Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
|
||||
Copyright (C) 1995, 1996, 1997, 2000 Free Software Foundation, Inc.
|
||||
|
||||
|
||||
NOTE: The canonical source of this file is maintained with the GNU C Library.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* exclude.c -- exclude file names
|
||||
Copyright 1992, 1993, 1994, 1997 Free Software Foundation, Inc.
|
||||
Copyright 1992, 1993, 1994, 1997, 1999, 2000 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
|
||||
@@ -54,14 +54,14 @@ new_exclude (void)
|
||||
}
|
||||
|
||||
int
|
||||
excluded_filename (struct exclude const *ex, char const *f)
|
||||
excluded_filename (struct exclude const *ex, char const *f, int options)
|
||||
{
|
||||
char const * const *exclude = ex->exclude;
|
||||
int exclude_count = ex->exclude_count;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < exclude_count; i++)
|
||||
if (fnmatch (exclude[i], f, 0) == 0)
|
||||
if (fnmatch (exclude[i], f, options) == 0)
|
||||
return 1;
|
||||
|
||||
return 0;
|
||||
@@ -79,7 +79,8 @@ add_exclude (struct exclude *ex, char const *pattern)
|
||||
}
|
||||
|
||||
int
|
||||
add_exclude_file (struct exclude *ex, char const *filename, char line_end)
|
||||
add_exclude_file (void (*add_func) PARAMS ((struct exclude *, char const *)),
|
||||
struct exclude *ex, char const *filename, char line_end)
|
||||
{
|
||||
int use_stdin = filename[0] == '-' && !filename[1];
|
||||
FILE *in;
|
||||
@@ -118,7 +119,7 @@ add_exclude_file (struct exclude *ex, char const *filename, char line_end)
|
||||
if (p < lim ? *p == line_end : buf < p && p[-1])
|
||||
{
|
||||
*p = '\0';
|
||||
add_exclude (ex, pattern);
|
||||
(*add_func) (ex, pattern);
|
||||
pattern = p + 1;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* exclude.h -- declarations for excluding file names
|
||||
Copyright 1992, 1993, 1994, 1997 Free Software Foundation, Inc.
|
||||
Copyright 1992, 1993, 1994, 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
|
||||
@@ -30,5 +30,6 @@ struct exclude;
|
||||
|
||||
struct exclude *new_exclude PARAMS ((void));
|
||||
void add_exclude PARAMS ((struct exclude *, char const *));
|
||||
int add_exclude_file PARAMS ((struct exclude *, char const *, char));
|
||||
int excluded_filename PARAMS ((struct exclude const *, char const *));
|
||||
int add_exclude_file PARAMS ((void (*) (struct exclude *, char const *),
|
||||
struct exclude *, char const *, char));
|
||||
int excluded_filename PARAMS ((struct exclude const *, char const *, int));
|
||||
|
||||
70
lib/fatal.c
Normal file
70
lib/fatal.c
Normal file
@@ -0,0 +1,70 @@
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
/* FIXME: define EXIT_FAILURE */
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#if HAVE_VPRINTF || HAVE_DOPRNT || _LIBC
|
||||
# if __STDC__
|
||||
# include <stdarg.h>
|
||||
# define VA_START(args, lastarg) va_start(args, lastarg)
|
||||
# else
|
||||
# include <varargs.h>
|
||||
# define VA_START(args, lastarg) va_start(args)
|
||||
# endif
|
||||
#else
|
||||
# define va_alist a1, a2, a3, a4, a5, a6, a7, a8
|
||||
# define va_dcl char *a1, *a2, *a3, *a4, *a5, *a6, *a7, *a8;
|
||||
#endif
|
||||
|
||||
#if STDC_HEADERS || _LIBC
|
||||
# include <stdlib.h>
|
||||
# include <string.h>
|
||||
#else
|
||||
void exit ();
|
||||
#endif
|
||||
|
||||
#ifdef _LIBC
|
||||
# define program_name program_invocation_name
|
||||
#else /* not _LIBC */
|
||||
/* The calling program should define program_name and set it to the
|
||||
name of the executing program. */
|
||||
extern char *program_name;
|
||||
#endif
|
||||
|
||||
#include "fatal.h"
|
||||
|
||||
/* Like error, but always exit with EXIT_FAILURE. */
|
||||
|
||||
void
|
||||
#if defined VA_START && __STDC__
|
||||
fatal (int errnum, const char *message, ...)
|
||||
#else
|
||||
fatal (errnum, message, va_alist)
|
||||
int errnum;
|
||||
char *message;
|
||||
va_dcl
|
||||
#endif
|
||||
{
|
||||
#ifdef VA_START
|
||||
va_list args;
|
||||
#endif
|
||||
|
||||
if (error_print_progname)
|
||||
(*error_print_progname) ();
|
||||
else
|
||||
{
|
||||
fflush (stdout);
|
||||
fprintf (stderr, "%s: ", program_name);
|
||||
}
|
||||
|
||||
#ifdef VA_START
|
||||
VA_START (args, message);
|
||||
error (EXIT_FAILURE, errnum, message, args);
|
||||
va_end (args);
|
||||
#else
|
||||
error (EXIT_FAILURE, errnum, message, a1, a2, a3, a4, a5, a6, a7, a8);
|
||||
#endif
|
||||
}
|
||||
68
lib/fatal.h
Normal file
68
lib/fatal.h
Normal file
@@ -0,0 +1,68 @@
|
||||
#include "error.h"
|
||||
|
||||
/* FIXME: this is all from ansidecl. better to simply swipe
|
||||
that file from egcs/include and include it from here. */
|
||||
|
||||
/* Using MACRO(x,y) in cpp #if conditionals does not work with some
|
||||
older preprocessors. Thus we can't define something like this:
|
||||
|
||||
#define HAVE_GCC_VERSION(MAJOR, MINOR) \
|
||||
(__GNUC__ > (MAJOR) || (__GNUC__ == (MAJOR) && __GNUC_MINOR__ >= (MINOR)))
|
||||
|
||||
and then test "#if HAVE_GCC_VERSION(2,7)".
|
||||
|
||||
So instead we use the macro below and test it against specific values. */
|
||||
|
||||
/* This macro simplifies testing whether we are using gcc, and if it
|
||||
is of a particular minimum version. (Both major & minor numbers are
|
||||
significant.) This macro will evaluate to 0 if we are not using
|
||||
gcc at all. */
|
||||
#ifndef GCC_VERSION
|
||||
# define GCC_VERSION (__GNUC__ * 1000 + __GNUC_MINOR__)
|
||||
#endif /* GCC_VERSION */
|
||||
|
||||
/* Define macros for some gcc attributes. This permits us to use the
|
||||
macros freely, and know that they will come into play for the
|
||||
version of gcc in which they are supported. */
|
||||
|
||||
#if (GCC_VERSION < 2007)
|
||||
# define __attribute__(x)
|
||||
#endif
|
||||
|
||||
/* Attribute __malloc__ on functions was valid as of gcc 2.96. */
|
||||
#ifndef ATTRIBUTE_MALLOC
|
||||
# if (GCC_VERSION >= 2096)
|
||||
# define ATTRIBUTE_MALLOC __attribute__ ((__malloc__))
|
||||
# else
|
||||
# define ATTRIBUTE_MALLOC
|
||||
# endif /* GNUC >= 2.96 */
|
||||
#endif /* ATTRIBUTE_MALLOC */
|
||||
|
||||
/* Attributes on labels were valid as of gcc 2.93. */
|
||||
#ifndef ATTRIBUTE_UNUSED_LABEL
|
||||
# if (GCC_VERSION >= 2093)
|
||||
# define ATTRIBUTE_UNUSED_LABEL ATTRIBUTE_UNUSED
|
||||
# else
|
||||
# define ATTRIBUTE_UNUSED_LABEL
|
||||
# endif /* GNUC >= 2.93 */
|
||||
#endif /* ATTRIBUTE_UNUSED_LABEL */
|
||||
|
||||
#ifndef ATTRIBUTE_UNUSED
|
||||
# define ATTRIBUTE_UNUSED __attribute__ ((__unused__))
|
||||
#endif /* ATTRIBUTE_UNUSED */
|
||||
|
||||
#ifndef ATTRIBUTE_NORETURN
|
||||
# define ATTRIBUTE_NORETURN __attribute__ ((__noreturn__))
|
||||
#endif /* ATTRIBUTE_NORETURN */
|
||||
|
||||
#ifndef ATTRIBUTE_PRINTF
|
||||
# define ATTRIBUTE_PRINTF(m, n) __attribute__ ((__format__ (__printf__, m, n)))
|
||||
# define ATTRIBUTE_PRINTF_1 ATTRIBUTE_PRINTF(1, 2)
|
||||
# define ATTRIBUTE_PRINTF_2 ATTRIBUTE_PRINTF(2, 3)
|
||||
# define ATTRIBUTE_PRINTF_3 ATTRIBUTE_PRINTF(3, 4)
|
||||
# define ATTRIBUTE_PRINTF_4 ATTRIBUTE_PRINTF(4, 5)
|
||||
# define ATTRIBUTE_PRINTF_5 ATTRIBUTE_PRINTF(5, 6)
|
||||
#endif /* ATTRIBUTE_PRINTF */
|
||||
|
||||
extern void fatal (int errnum, const char *format, ...)
|
||||
ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF_2;
|
||||
@@ -1,5 +1,5 @@
|
||||
/* filemode.c -- make a string describing file modes
|
||||
Copyright (C) 1985, 1990, 1993, 1998, 1999 Free Software Foundation, Inc.
|
||||
Copyright (C) 1985, 1990, 1993, 1998-2000 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
|
||||
@@ -14,7 +14,7 @@
|
||||
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
|
||||
@@ -80,37 +80,42 @@
|
||||
# undef S_ISSOCK
|
||||
#endif /* STAT_MACROS_BROKEN. */
|
||||
|
||||
#if !defined(S_ISBLK) && defined(S_IFBLK)
|
||||
#if !defined S_ISBLK && defined S_IFBLK
|
||||
# define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK)
|
||||
#endif
|
||||
#if !defined(S_ISCHR) && defined(S_IFCHR)
|
||||
#if !defined S_ISCHR && defined S_IFCHR
|
||||
# define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR)
|
||||
#endif
|
||||
#if !defined(S_ISDIR) && defined(S_IFDIR)
|
||||
#if !defined S_ISDIR && defined S_IFDIR
|
||||
# define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
|
||||
#endif
|
||||
#if !defined(S_ISREG) && defined(S_IFREG)
|
||||
#if !defined S_ISREG && defined S_IFREG
|
||||
# define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
|
||||
#endif
|
||||
#if !defined(S_ISFIFO) && defined(S_IFIFO)
|
||||
#if !defined S_ISFIFO && defined S_IFIFO
|
||||
# define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO)
|
||||
#endif
|
||||
#if !defined(S_ISLNK) && defined(S_IFLNK)
|
||||
#if !defined S_ISLNK && defined S_IFLNK
|
||||
# define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)
|
||||
#endif
|
||||
#if !defined(S_ISSOCK) && defined(S_IFSOCK)
|
||||
#if !defined S_ISSOCK && defined S_IFSOCK
|
||||
# define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK)
|
||||
#endif
|
||||
#if !defined(S_ISMPB) && defined(S_IFMPB) /* V7 */
|
||||
#if !defined S_ISMPB && defined S_IFMPB /* V7 */
|
||||
# define S_ISMPB(m) (((m) & S_IFMT) == S_IFMPB)
|
||||
# define S_ISMPC(m) (((m) & S_IFMT) == S_IFMPC)
|
||||
#endif
|
||||
#if !defined(S_ISNWK) && defined(S_IFNWK) /* HP/UX */
|
||||
#if !defined S_ISNWK && defined S_IFNWK /* HP/UX */
|
||||
# define S_ISNWK(m) (((m) & S_IFMT) == S_IFNWK)
|
||||
#endif
|
||||
#if !defined(S_ISDOOR) && defined(S_IFDOOR) /* Solaris 2.5 and up */
|
||||
#if !defined S_ISDOOR && defined S_IFDOOR /* Solaris 2.5 and up */
|
||||
# define S_ISDOOR(m) (((m) & S_IFMT) == S_IFDOOR)
|
||||
#endif
|
||||
#if !defined S_ISCTG && defined S_IFCTG /* MassComp */
|
||||
# define S_ISCTG(m) (((m) & S_IFMT) == S_IFCTG)
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
/* Set the 's' and 't' flags in file attributes string CHARS,
|
||||
according to the file mode BITS. */
|
||||
@@ -156,11 +161,13 @@ setst (mode_t bits, char *chars)
|
||||
'D' for doors
|
||||
'b' for block special files
|
||||
'c' for character special files
|
||||
'n' for network special files
|
||||
'm' for multiplexor files
|
||||
'M' for an off-line (regular) file
|
||||
'l' for symbolic links
|
||||
's' for sockets
|
||||
'p' for fifos
|
||||
'C' for contigous data files
|
||||
'-' for regular files
|
||||
'?' for any other file type. */
|
||||
|
||||
@@ -201,6 +208,10 @@ ftypelet (mode_t bits)
|
||||
if (S_ISDOOR (bits))
|
||||
return 'D';
|
||||
#endif
|
||||
#ifdef S_ISCTG
|
||||
if (S_ISCTG (bits))
|
||||
return 'C';
|
||||
#endif
|
||||
|
||||
/* The following two tests are for Cray DMF (Data Migration
|
||||
Facility), which is a HSM file system. A migrated file has a
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* full-write.c -- an interface to write that retries after interrupts
|
||||
Copyright (C) 1993, 1994, 1997, 1998 Free Software Foundation, Inc.
|
||||
Copyright (C) 1993, 1994, 1997, 1998, 2000 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
|
||||
@@ -45,10 +45,11 @@ full_write (int desc, const char *ptr, size_t len)
|
||||
while (len > 0)
|
||||
{
|
||||
int written = write (desc, ptr, len);
|
||||
/* FIXME: write on my slackware Linux 1.2.13 returns zero when
|
||||
/* write on an old Slackware Linux 1.2.13 returns zero when
|
||||
I try to write more data than there is room on a floppy disk.
|
||||
This puts dd into an infinite loop. Reproduce with
|
||||
dd if=/dev/zero of=/dev/fd0. */
|
||||
dd if=/dev/zero of=/dev/fd0. If you have this problem,
|
||||
consider upgrading to a newer kernel. */
|
||||
if (written < 0)
|
||||
{
|
||||
#ifdef EINTR
|
||||
|
||||
220
lib/getdate.y
220
lib/getdate.y
@@ -1,6 +1,6 @@
|
||||
%{
|
||||
/* Parse a string into an internal time stamp.
|
||||
Copyright 1999 Free Software Foundation, Inc.
|
||||
Copyright 1999, 2000 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
|
||||
@@ -86,6 +86,14 @@
|
||||
|
||||
#define HOUR(x) ((x) * 60)
|
||||
|
||||
/* An integer value, and the number of digits in its textual
|
||||
representation. */
|
||||
typedef struct
|
||||
{
|
||||
int value;
|
||||
int digits;
|
||||
} textint;
|
||||
|
||||
/* An entry in the lexical lookup table. */
|
||||
typedef struct
|
||||
{
|
||||
@@ -98,7 +106,7 @@ typedef struct
|
||||
enum { MERam, MERpm, MER24 };
|
||||
|
||||
/* Information passed to and from the parser. */
|
||||
struct parser_control
|
||||
typedef struct
|
||||
{
|
||||
/* The input string remaining to be parsed. */
|
||||
const char *input;
|
||||
@@ -119,7 +127,7 @@ struct parser_control
|
||||
int meridian;
|
||||
|
||||
/* Gregorian year, month, day, hour, minutes, and seconds. */
|
||||
int year;
|
||||
textint year;
|
||||
int month;
|
||||
int day;
|
||||
int hour;
|
||||
@@ -144,12 +152,11 @@ struct parser_control
|
||||
|
||||
/* Table of local time zone abbrevations, terminated by a null entry. */
|
||||
table local_time_zone_table[3];
|
||||
};
|
||||
} parser_control;
|
||||
|
||||
#define PC (* (struct parser_control *) parm)
|
||||
#define PC (* (parser_control *) parm)
|
||||
#define YYLEX_PARAM parm
|
||||
#define YYPARSE_PARAM parm
|
||||
#define YYSTYPE int
|
||||
|
||||
static int yyerror ();
|
||||
static int yylex ();
|
||||
@@ -162,9 +169,20 @@ static int yylex ();
|
||||
/* This grammar has 13 shift/reduce conflicts. */
|
||||
%expect 13
|
||||
|
||||
%token tAGO tDAY tDAY_UNIT tDAYZONE tDST tHOUR_UNIT tID
|
||||
%token tLOCAL_ZONE tMERIDIAN tMINUTE_UNIT tMONTH tMONTH_UNIT
|
||||
%token tSEC_UNIT tSNUMBER tUNUMBER tYEAR_UNIT tZONE
|
||||
%union
|
||||
{
|
||||
int intval;
|
||||
textint textintval;
|
||||
}
|
||||
|
||||
%token tAGO tDST
|
||||
|
||||
%token <intval> tDAY tDAY_UNIT tDAYZONE tHOUR_UNIT tLOCAL_ZONE tMERIDIAN
|
||||
%token <intval> tMINUTE_UNIT tMONTH tMONTH_UNIT tSEC_UNIT tYEAR_UNIT tZONE
|
||||
|
||||
%token <textintval> tSNUMBER tUNUMBER
|
||||
|
||||
%type <intval> o_merid
|
||||
|
||||
%%
|
||||
|
||||
@@ -192,41 +210,41 @@ item:
|
||||
time:
|
||||
tUNUMBER tMERIDIAN
|
||||
{
|
||||
PC.hour = $1;
|
||||
PC.hour = $1.value;
|
||||
PC.minutes = 0;
|
||||
PC.seconds = 0;
|
||||
PC.meridian = $2;
|
||||
}
|
||||
| tUNUMBER ':' tUNUMBER o_merid
|
||||
{
|
||||
PC.hour = $1;
|
||||
PC.minutes = $3;
|
||||
PC.hour = $1.value;
|
||||
PC.minutes = $3.value;
|
||||
PC.seconds = 0;
|
||||
PC.meridian = $4;
|
||||
}
|
||||
| tUNUMBER ':' tUNUMBER tSNUMBER
|
||||
{
|
||||
PC.hour = $1;
|
||||
PC.minutes = $3;
|
||||
PC.hour = $1.value;
|
||||
PC.minutes = $3.value;
|
||||
PC.meridian = MER24;
|
||||
PC.zones_seen++;
|
||||
PC.time_zone = $4 % 100 + ($4 / 100) * 60;
|
||||
PC.time_zone = $4.value % 100 + ($4.value / 100) * 60;
|
||||
}
|
||||
| tUNUMBER ':' tUNUMBER ':' tUNUMBER o_merid
|
||||
{
|
||||
PC.hour = $1;
|
||||
PC.minutes = $3;
|
||||
PC.seconds = $5;
|
||||
PC.hour = $1.value;
|
||||
PC.minutes = $3.value;
|
||||
PC.seconds = $5.value;
|
||||
PC.meridian = $6;
|
||||
}
|
||||
| tUNUMBER ':' tUNUMBER ':' tUNUMBER tSNUMBER
|
||||
{
|
||||
PC.hour = $1;
|
||||
PC.minutes = $3;
|
||||
PC.seconds = $5;
|
||||
PC.hour = $1.value;
|
||||
PC.minutes = $3.value;
|
||||
PC.seconds = $5.value;
|
||||
PC.meridian = MER24;
|
||||
PC.zones_seen++;
|
||||
PC.time_zone = $6 % 100 + ($6 / 100) * 60;
|
||||
PC.time_zone = $6.value % 100 + ($6.value / 100) * 60;
|
||||
}
|
||||
;
|
||||
|
||||
@@ -259,7 +277,7 @@ day:
|
||||
}
|
||||
| tUNUMBER tDAY
|
||||
{
|
||||
PC.day_ordinal = $1;
|
||||
PC.day_ordinal = $1.value;
|
||||
PC.day_number = $2;
|
||||
}
|
||||
;
|
||||
@@ -267,25 +285,26 @@ day:
|
||||
date:
|
||||
tUNUMBER '/' tUNUMBER
|
||||
{
|
||||
PC.month = $1;
|
||||
PC.day = $3;
|
||||
PC.month = $1.value;
|
||||
PC.day = $3.value;
|
||||
}
|
||||
| tUNUMBER '/' tUNUMBER '/' tUNUMBER
|
||||
{
|
||||
/* Interpret as YYYY/MM/DD if 1000 <= $1, otherwise as MM/DD/YY.
|
||||
/* Interpret as YYYY/MM/DD if the first value has 4 or more digits,
|
||||
otherwise as MM/DD/YY.
|
||||
The goal in recognizing YYYY/MM/DD is solely to support legacy
|
||||
machine-generated dates like those in an RCS log listing. If
|
||||
you want portability, use the ISO 8601 format. */
|
||||
if (1000 <= $1)
|
||||
if (4 <= $1.digits)
|
||||
{
|
||||
PC.year = $1;
|
||||
PC.month = $3;
|
||||
PC.day = $5;
|
||||
PC.month = $3.value;
|
||||
PC.day = $5.value;
|
||||
}
|
||||
else
|
||||
{
|
||||
PC.month = $1;
|
||||
PC.day = $3;
|
||||
PC.month = $1.value;
|
||||
PC.day = $3.value;
|
||||
PC.year = $5;
|
||||
}
|
||||
}
|
||||
@@ -293,36 +312,37 @@ date:
|
||||
{
|
||||
/* ISO 8601 format. YYYY-MM-DD. */
|
||||
PC.year = $1;
|
||||
PC.month = -$2;
|
||||
PC.day = -$3;
|
||||
PC.month = -$2.value;
|
||||
PC.day = -$3.value;
|
||||
}
|
||||
| tUNUMBER tMONTH tSNUMBER
|
||||
{
|
||||
/* e.g. 17-JUN-1992. */
|
||||
PC.day = $1;
|
||||
PC.day = $1.value;
|
||||
PC.month = $2;
|
||||
PC.year = -$3;
|
||||
PC.year.value = -$3.value;
|
||||
PC.year.digits = $3.digits;
|
||||
}
|
||||
| tMONTH tUNUMBER
|
||||
{
|
||||
PC.month = $1;
|
||||
PC.day = $2;
|
||||
PC.day = $2.value;
|
||||
}
|
||||
| tMONTH tUNUMBER ',' tUNUMBER
|
||||
{
|
||||
PC.month = $1;
|
||||
PC.day = $2;
|
||||
PC.day = $2.value;
|
||||
PC.year = $4;
|
||||
}
|
||||
| tUNUMBER tMONTH
|
||||
{
|
||||
PC.day = $1.value;
|
||||
PC.month = $2;
|
||||
PC.day = $1;
|
||||
}
|
||||
| tUNUMBER tMONTH tUNUMBER
|
||||
{
|
||||
PC.day = $1.value;
|
||||
PC.month = $2;
|
||||
PC.day = $1;
|
||||
PC.year = $3;
|
||||
}
|
||||
;
|
||||
@@ -342,39 +362,39 @@ rel:
|
||||
|
||||
relunit:
|
||||
tUNUMBER tYEAR_UNIT
|
||||
{ PC.rel_year += $1 * $2; }
|
||||
{ PC.rel_year += $1.value * $2; }
|
||||
| tSNUMBER tYEAR_UNIT
|
||||
{ PC.rel_year += $1 * $2; }
|
||||
{ PC.rel_year += $1.value * $2; }
|
||||
| tYEAR_UNIT
|
||||
{ PC.rel_year += $1; }
|
||||
| tUNUMBER tMONTH_UNIT
|
||||
{ PC.rel_month += $1 * $2; }
|
||||
{ PC.rel_month += $1.value * $2; }
|
||||
| tSNUMBER tMONTH_UNIT
|
||||
{ PC.rel_month += $1 * $2; }
|
||||
{ PC.rel_month += $1.value * $2; }
|
||||
| tMONTH_UNIT
|
||||
{ PC.rel_month += $1; }
|
||||
| tUNUMBER tDAY_UNIT
|
||||
{ PC.rel_day += $1 * $2; }
|
||||
{ PC.rel_day += $1.value * $2; }
|
||||
| tSNUMBER tDAY_UNIT
|
||||
{ PC.rel_day += $1 * $2; }
|
||||
{ PC.rel_day += $1.value * $2; }
|
||||
| tDAY_UNIT
|
||||
{ PC.rel_day += $1; }
|
||||
{ PC.rel_day += $1 }
|
||||
| tUNUMBER tHOUR_UNIT
|
||||
{ PC.rel_hour += $1 * $2; }
|
||||
{ PC.rel_hour += $1.value * $2; }
|
||||
| tSNUMBER tHOUR_UNIT
|
||||
{ PC.rel_hour += $1 * $2; }
|
||||
{ PC.rel_hour += $1.value * $2; }
|
||||
| tHOUR_UNIT
|
||||
{ PC.rel_hour += $1; }
|
||||
{ PC.rel_hour += $1 }
|
||||
| tUNUMBER tMINUTE_UNIT
|
||||
{ PC.rel_minutes += $1 * $2; }
|
||||
{ PC.rel_minutes += $1.value * $2; }
|
||||
| tSNUMBER tMINUTE_UNIT
|
||||
{ PC.rel_minutes += $1 * $2; }
|
||||
{ PC.rel_minutes += $1.value * $2; }
|
||||
| tMINUTE_UNIT
|
||||
{ PC.rel_minutes += $1; }
|
||||
{ PC.rel_minutes += $1 }
|
||||
| tUNUMBER tSEC_UNIT
|
||||
{ PC.rel_seconds += $1 * $2; }
|
||||
{ PC.rel_seconds += $1.value * $2; }
|
||||
| tSNUMBER tSEC_UNIT
|
||||
{ PC.rel_seconds += $1 * $2; }
|
||||
{ PC.rel_seconds += $1.value * $2; }
|
||||
| tSEC_UNIT
|
||||
{ PC.rel_seconds += $1; }
|
||||
;
|
||||
@@ -382,29 +402,31 @@ relunit:
|
||||
number:
|
||||
tUNUMBER
|
||||
{
|
||||
if (PC.dates_seen && ! PC.rels_seen && (PC.times_seen || 100 <= $1))
|
||||
if (PC.dates_seen
|
||||
&& ! PC.rels_seen && (PC.times_seen || 2 < $1.digits))
|
||||
PC.year = $1;
|
||||
else
|
||||
{
|
||||
if (10000 < $1)
|
||||
if (4 < $1.digits)
|
||||
{
|
||||
PC.dates_seen++;
|
||||
PC.day = $1 % 100;
|
||||
PC.month = ($1 / 100) % 100;
|
||||
PC.year = $1 / 10000;
|
||||
PC.day = $1.value % 100;
|
||||
PC.month = ($1.value / 100) % 100;
|
||||
PC.year.value = $1.value / 10000;
|
||||
PC.year.digits = $1.digits - 4;
|
||||
}
|
||||
else
|
||||
{
|
||||
PC.times_seen++;
|
||||
if ($1 < 100)
|
||||
if ($1.digits <= 2)
|
||||
{
|
||||
PC.hour = $1;
|
||||
PC.hour = $1.value;
|
||||
PC.minutes = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
PC.hour = $1 / 100;
|
||||
PC.minutes = $1 % 100;
|
||||
PC.hour = $1.value / 100;
|
||||
PC.minutes = $1.value % 100;
|
||||
}
|
||||
PC.seconds = 0;
|
||||
PC.meridian = MER24;
|
||||
@@ -632,23 +654,23 @@ to_hour (int hours, int meridian)
|
||||
}
|
||||
|
||||
static int
|
||||
to_year (int year)
|
||||
to_year (textint textyear)
|
||||
{
|
||||
int year = textyear.value;
|
||||
|
||||
if (year < 0)
|
||||
year = -year;
|
||||
|
||||
/* XPG4 suggests that years 00-68 map to 2000-2068, and
|
||||
years 69-99 map to 1969-1999. */
|
||||
if (year < 69)
|
||||
year += 2000;
|
||||
else if (year < 100)
|
||||
year += 1900;
|
||||
if (textyear.digits == 2)
|
||||
year += year < 69 ? 2000 : 1900;
|
||||
|
||||
return year;
|
||||
}
|
||||
|
||||
static table const *
|
||||
lookup_zone (struct parser_control const *pc, char const *name)
|
||||
lookup_zone (parser_control const *pc, char const *name)
|
||||
{
|
||||
table const *tp;
|
||||
|
||||
@@ -692,7 +714,7 @@ tm_diff (struct tm const *a, struct tm const *b)
|
||||
#endif /* ! HAVE_TM_GMTOFF */
|
||||
|
||||
static table const *
|
||||
lookup_word (struct parser_control const *pc, char *word)
|
||||
lookup_word (parser_control const *pc, char *word)
|
||||
{
|
||||
char *p;
|
||||
char *q;
|
||||
@@ -761,7 +783,7 @@ lookup_word (struct parser_control const *pc, char *word)
|
||||
}
|
||||
|
||||
static int
|
||||
yylex (YYSTYPE *lvalp, struct parser_control *pc)
|
||||
yylex (YYSTYPE *lvalp, parser_control *pc)
|
||||
{
|
||||
unsigned char c;
|
||||
int count;
|
||||
@@ -773,21 +795,30 @@ yylex (YYSTYPE *lvalp, struct parser_control *pc)
|
||||
|
||||
if (ISDIGIT (c) || c == '-' || c == '+')
|
||||
{
|
||||
char const *p;
|
||||
int sign;
|
||||
int value;
|
||||
if (c == '-' || c == '+')
|
||||
{
|
||||
sign = c == '-' ? -1 : 1;
|
||||
if (! ISDIGIT (*++pc->input))
|
||||
c = *++pc->input;
|
||||
if (! ISDIGIT (c))
|
||||
/* skip the '-' sign */
|
||||
continue;
|
||||
}
|
||||
else
|
||||
sign = 0;
|
||||
for (*lvalp = 0; ISDIGIT (c = *pc->input++);)
|
||||
*lvalp = 10 * *lvalp + (c - '0');
|
||||
pc->input--;
|
||||
if (sign < 0)
|
||||
*lvalp = - *lvalp;
|
||||
p = pc->input;
|
||||
value = 0;
|
||||
do
|
||||
{
|
||||
value = 10 * value + c - '0';
|
||||
c = *++p;
|
||||
}
|
||||
while (ISDIGIT (c));
|
||||
lvalp->textintval.value = sign < 0 ? -value : value;
|
||||
lvalp->textintval.digits = p - pc->input;
|
||||
pc->input = p;
|
||||
return sign ? tSNUMBER : tUNUMBER;
|
||||
}
|
||||
|
||||
@@ -808,8 +839,8 @@ yylex (YYSTYPE *lvalp, struct parser_control *pc)
|
||||
*p = '\0';
|
||||
tp = lookup_word (pc, buff);
|
||||
if (! tp)
|
||||
return tID;
|
||||
*lvalp = tp->value;
|
||||
return '?';
|
||||
lvalp->intval = tp->value;
|
||||
return tp->type;
|
||||
}
|
||||
|
||||
@@ -848,13 +879,14 @@ get_date (const char *p, const time_t *now)
|
||||
struct tm *tmp = localtime (&Start);
|
||||
struct tm tm;
|
||||
struct tm tm0;
|
||||
struct parser_control pc;
|
||||
parser_control pc;
|
||||
|
||||
if (! tmp)
|
||||
return -1;
|
||||
|
||||
pc.input = p;
|
||||
pc.year = tmp->tm_year + TM_YEAR_BASE;
|
||||
pc.year.value = tmp->tm_year + TM_YEAR_BASE;
|
||||
pc.year.digits = 4;
|
||||
pc.month = tmp->tm_mon + 1;
|
||||
pc.day = tmp->tm_mday;
|
||||
pc.hour = tmp->tm_hour;
|
||||
@@ -955,9 +987,6 @@ get_date (const char *p, const time_t *now)
|
||||
{
|
||||
tm.tm_hour = tm.tm_min = tm.tm_sec = 0;
|
||||
}
|
||||
tm.tm_hour += pc.rel_hour;
|
||||
tm.tm_min += pc.rel_minutes;
|
||||
tm.tm_sec += pc.rel_seconds;
|
||||
|
||||
/* Let mktime deduce tm_isdst if we have an absolute time stamp,
|
||||
or if the relative time stamp mentions days, months, or years. */
|
||||
@@ -1029,6 +1058,29 @@ get_date (const char *p, const time_t *now)
|
||||
Start -= delta;
|
||||
}
|
||||
|
||||
/* Add relative hours, minutes, and seconds. Ignore leap seconds;
|
||||
i.e. "+ 10 minutes" means 600 seconds, even if one of them is a
|
||||
leap second. Typically this is not what the user wants, but it's
|
||||
too hard to do it the other way, because the time zone indicator
|
||||
must be applied before relative times, and if mktime is applied
|
||||
again the time zone will be lost. */
|
||||
{
|
||||
time_t t0 = Start;
|
||||
long d1 = 60 * 60 * (long) pc.rel_hour;
|
||||
time_t t1 = t0 + d1;
|
||||
long d2 = 60 * (long) pc.rel_minutes;
|
||||
time_t t2 = t1 + d2;
|
||||
int d3 = pc.rel_seconds;
|
||||
time_t t3 = t2 + d3;
|
||||
if ((d1 / (60 * 60) ^ pc.rel_hour)
|
||||
| (d2 / 60 ^ pc.rel_minutes)
|
||||
| ((t0 + d1 < t0) ^ (d1 < 0))
|
||||
| ((t1 + d2 < t1) ^ (d2 < 0))
|
||||
| ((t2 + d3 < t2) ^ (d3 < 0)))
|
||||
return -1;
|
||||
Start = t3;
|
||||
}
|
||||
|
||||
return Start;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/* getline.c -- Replacement for GNU C library function getline
|
||||
|
||||
Copyright (C) 1993, 1996, 1997, 1998 Free Software Foundation, Inc.
|
||||
Copyright (C) 1993, 1996, 1997, 1998, 2000 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
|
||||
@@ -39,105 +39,19 @@ getline (char **lineptr, size_t *n, FILE *stream)
|
||||
return getdelim (lineptr, n, '\n', stream);
|
||||
}
|
||||
|
||||
|
||||
#else /* ! have getdelim */
|
||||
|
||||
# define NDEBUG
|
||||
# include <assert.h>
|
||||
|
||||
# if STDC_HEADERS
|
||||
# include <stdlib.h>
|
||||
# else
|
||||
char *malloc (), *realloc ();
|
||||
# endif
|
||||
|
||||
/* Always add at least this many bytes when extending the buffer. */
|
||||
# define MIN_CHUNK 64
|
||||
|
||||
/* Read up to (and including) a TERMINATOR from STREAM into *LINEPTR
|
||||
+ OFFSET (and null-terminate it). *LINEPTR is a pointer returned from
|
||||
malloc (or NULL), pointing to *N characters of space. It is realloc'd
|
||||
as necessary. Return the number of characters read (not including the
|
||||
null terminator), or -1 on error or EOF. */
|
||||
|
||||
int
|
||||
getstr (char **lineptr, size_t *n, FILE *stream, char terminator, size_t offset)
|
||||
{
|
||||
int nchars_avail; /* Allocated but unused chars in *LINEPTR. */
|
||||
char *read_pos; /* Where we're reading into *LINEPTR. */
|
||||
int ret;
|
||||
|
||||
if (!lineptr || !n || !stream)
|
||||
return -1;
|
||||
|
||||
if (!*lineptr)
|
||||
{
|
||||
*n = MIN_CHUNK;
|
||||
*lineptr = malloc (*n);
|
||||
if (!*lineptr)
|
||||
return -1;
|
||||
}
|
||||
|
||||
nchars_avail = *n - offset;
|
||||
read_pos = *lineptr + offset;
|
||||
|
||||
for (;;)
|
||||
{
|
||||
register int c = getc (stream);
|
||||
|
||||
/* We always want at least one char left in the buffer, since we
|
||||
always (unless we get an error while reading the first char)
|
||||
NUL-terminate the line buffer. */
|
||||
|
||||
assert(*n - nchars_avail == read_pos - *lineptr);
|
||||
if (nchars_avail < 2)
|
||||
{
|
||||
if (*n > MIN_CHUNK)
|
||||
*n *= 2;
|
||||
else
|
||||
*n += MIN_CHUNK;
|
||||
|
||||
nchars_avail = *n + *lineptr - read_pos;
|
||||
*lineptr = realloc (*lineptr, *n);
|
||||
if (!*lineptr)
|
||||
return -1;
|
||||
read_pos = *n - nchars_avail + *lineptr;
|
||||
assert(*n - nchars_avail == read_pos - *lineptr);
|
||||
}
|
||||
|
||||
if (c == EOF || ferror (stream))
|
||||
{
|
||||
/* Return partial line, if any. */
|
||||
if (read_pos == *lineptr)
|
||||
return -1;
|
||||
else
|
||||
break;
|
||||
}
|
||||
|
||||
*read_pos++ = c;
|
||||
nchars_avail--;
|
||||
|
||||
if (c == terminator)
|
||||
/* Return the line. */
|
||||
break;
|
||||
}
|
||||
|
||||
/* Done - NUL terminate and return the number of chars read. */
|
||||
*read_pos = '\0';
|
||||
|
||||
ret = read_pos - (*lineptr + offset);
|
||||
return ret;
|
||||
}
|
||||
# include "getstr.h"
|
||||
|
||||
int
|
||||
getline (char **lineptr, size_t *n, FILE *stream)
|
||||
{
|
||||
return getstr (lineptr, n, stream, '\n', 0);
|
||||
return getstr (lineptr, n, stream, '\n', 0, 0);
|
||||
}
|
||||
|
||||
int
|
||||
getdelim (char **lineptr, size_t *n, int delimiter, FILE *stream)
|
||||
{
|
||||
return getstr (lineptr, n, stream, delimiter, 0);
|
||||
return getstr (lineptr, n, stream, delimiter, 0, 0);
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1995, 1997, 1999 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1995, 1997, 1999, 2000 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
|
||||
|
||||
@@ -308,6 +308,12 @@ extern int errno;
|
||||
# define LDAV_CVT(n) (((double) (n)) / FSCALE)
|
||||
# endif
|
||||
|
||||
# ifndef NLIST_STRUCT
|
||||
# if HAVE_NLIST_H
|
||||
# define NLIST_STRUCT
|
||||
# endif
|
||||
# endif
|
||||
|
||||
/* VAX C can't handle multi-line #ifs, or lines longer that 256 characters. */
|
||||
# ifndef NLIST_STRUCT
|
||||
|
||||
|
||||
47
lib/getopt.c
47
lib/getopt.c
@@ -2,7 +2,7 @@
|
||||
NOTE: The canonical source of this file is maintained with the GNU
|
||||
C Library. Bugs can be reported to bug-glibc@gnu.org.
|
||||
|
||||
Copyright (C) 1987, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99
|
||||
Copyright (C) 1987, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 2000
|
||||
Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it
|
||||
@@ -27,13 +27,13 @@
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#else
|
||||
# if !defined __STDC__ || !__STDC__
|
||||
#endif
|
||||
|
||||
#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
|
||||
|
||||
@@ -515,6 +515,13 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
|
||||
int *longind;
|
||||
int long_only;
|
||||
{
|
||||
int print_errors = opterr;
|
||||
if (optstring[0] == ':')
|
||||
print_errors = 0;
|
||||
|
||||
if (argc < 1)
|
||||
return -1;
|
||||
|
||||
optarg = NULL;
|
||||
|
||||
if (optind == 0 || !__getopt_initialized)
|
||||
@@ -664,14 +671,16 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
|
||||
pfound = p;
|
||||
indfound = option_index;
|
||||
}
|
||||
else
|
||||
else if (pfound->has_arg != p->has_arg
|
||||
|| pfound->flag != p->flag
|
||||
|| pfound->val != p->val)
|
||||
/* Second or later nonexact match found. */
|
||||
ambig = 1;
|
||||
}
|
||||
|
||||
if (ambig && !exact)
|
||||
{
|
||||
if (opterr)
|
||||
if (print_errors)
|
||||
fprintf (stderr, _("%s: option `%s' is ambiguous\n"),
|
||||
argv[0], argv[optind]);
|
||||
nextchar += strlen (nextchar);
|
||||
@@ -692,7 +701,7 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
|
||||
optarg = nameend + 1;
|
||||
else
|
||||
{
|
||||
if (opterr)
|
||||
if (print_errors)
|
||||
{
|
||||
if (argv[optind - 1][1] == '-')
|
||||
/* --option */
|
||||
@@ -718,7 +727,7 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
|
||||
optarg = argv[optind++];
|
||||
else
|
||||
{
|
||||
if (opterr)
|
||||
if (print_errors)
|
||||
fprintf (stderr,
|
||||
_("%s: option `%s' requires an argument\n"),
|
||||
argv[0], argv[optind - 1]);
|
||||
@@ -745,7 +754,7 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
|
||||
if (!long_only || argv[optind][1] == '-'
|
||||
|| my_index (optstring, *nextchar) == NULL)
|
||||
{
|
||||
if (opterr)
|
||||
if (print_errors)
|
||||
{
|
||||
if (argv[optind][1] == '-')
|
||||
/* --option */
|
||||
@@ -775,7 +784,7 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
|
||||
|
||||
if (temp == NULL || c == ':')
|
||||
{
|
||||
if (opterr)
|
||||
if (print_errors)
|
||||
{
|
||||
if (posixly_correct)
|
||||
/* 1003.2 specifies the format of this message. */
|
||||
@@ -809,7 +818,7 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
|
||||
}
|
||||
else if (optind == argc)
|
||||
{
|
||||
if (opterr)
|
||||
if (print_errors)
|
||||
{
|
||||
/* 1003.2 specifies the format of this message. */
|
||||
fprintf (stderr, _("%s: option requires an argument -- %c\n"),
|
||||
@@ -858,7 +867,7 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
|
||||
}
|
||||
if (ambig && !exact)
|
||||
{
|
||||
if (opterr)
|
||||
if (print_errors)
|
||||
fprintf (stderr, _("%s: option `-W %s' is ambiguous\n"),
|
||||
argv[0], argv[optind]);
|
||||
nextchar += strlen (nextchar);
|
||||
@@ -876,7 +885,7 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
|
||||
optarg = nameend + 1;
|
||||
else
|
||||
{
|
||||
if (opterr)
|
||||
if (print_errors)
|
||||
fprintf (stderr, _("\
|
||||
%s: option `-W %s' doesn't allow an argument\n"),
|
||||
argv[0], pfound->name);
|
||||
@@ -891,7 +900,7 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
|
||||
optarg = argv[optind++];
|
||||
else
|
||||
{
|
||||
if (opterr)
|
||||
if (print_errors)
|
||||
fprintf (stderr,
|
||||
_("%s: option `%s' requires an argument\n"),
|
||||
argv[0], argv[optind - 1]);
|
||||
@@ -938,12 +947,12 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
|
||||
}
|
||||
else if (optind == argc)
|
||||
{
|
||||
if (opterr)
|
||||
if (print_errors)
|
||||
{
|
||||
/* 1003.2 specifies the format of this message. */
|
||||
fprintf (stderr,
|
||||
_("%s: option requires an argument -- %c\n"),
|
||||
argv[0], c);
|
||||
_("%s: option requires an argument -- %c\n"),
|
||||
argv[0], c);
|
||||
}
|
||||
optopt = c;
|
||||
if (optstring[0] == ':')
|
||||
|
||||
@@ -2,34 +2,48 @@
|
||||
|
||||
#ifndef HAVE_GETPAGESIZE
|
||||
|
||||
#ifdef VMS
|
||||
#define getpagesize() 512
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_UNISTD_H
|
||||
#include <unistd.h>
|
||||
# include <unistd.h>
|
||||
#endif
|
||||
|
||||
#ifdef _SC_PAGESIZE
|
||||
#define getpagesize() sysconf(_SC_PAGESIZE)
|
||||
#else
|
||||
#if !defined getpagesize && defined _SC_PAGESIZE
|
||||
# if !(defined VMS && __VMS_VER < 70000000)
|
||||
# define getpagesize() sysconf (_SC_PAGESIZE)
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#include <sys/param.h>
|
||||
#if !defined getpagesize && defined VMS
|
||||
# ifdef __ALPHA
|
||||
# define getpagesize() 8192
|
||||
# else
|
||||
# define getpagesize() 512
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifdef EXEC_PAGESIZE
|
||||
#define getpagesize() EXEC_PAGESIZE
|
||||
#else
|
||||
#ifdef NBPG
|
||||
#define getpagesize() NBPG * CLSIZE
|
||||
#ifndef CLSIZE
|
||||
#define CLSIZE 1
|
||||
#endif /* no CLSIZE */
|
||||
#else /* no NBPG */
|
||||
#ifdef NBPC
|
||||
#define getpagesize() NBPC
|
||||
#endif /* NBPC */
|
||||
#endif /* no NBPG */
|
||||
#endif /* no EXEC_PAGESIZE */
|
||||
#endif /* no _SC_PAGESIZE */
|
||||
/* This is for BeOS. */
|
||||
#if !defined getpagesize && HAVE_OS_H
|
||||
# include <OS.h>
|
||||
# if defined B_PAGE_SIZE
|
||||
# define getpagesize() B_PAGE_SIZE
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifndef getpagesize
|
||||
# include <sys/param.h>
|
||||
# ifdef EXEC_PAGESIZE
|
||||
# define getpagesize() EXEC_PAGESIZE
|
||||
# else
|
||||
# ifdef NBPG
|
||||
# ifndef CLSIZE
|
||||
# define CLSIZE 1
|
||||
# endif
|
||||
# define getpagesize() (NBPG * CLSIZE)
|
||||
# else
|
||||
# ifdef NBPC
|
||||
# define getpagesize() NBPC
|
||||
# endif
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#endif /* not HAVE_GETPAGESIZE */
|
||||
|
||||
101
lib/getpass.c
Normal file
101
lib/getpass.c
Normal file
@@ -0,0 +1,101 @@
|
||||
/* Copyright (C) 1992,93,94,95,96,97,98,99,2000 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
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. */
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
#include <termios.h>
|
||||
#include <unistd.h>
|
||||
#include "getline.h"
|
||||
|
||||
/* It is desirable to use this bit on systems that have it.
|
||||
The only bit of terminal state we want to twiddle is echoing, which is
|
||||
done in software; there is no need to change the state of the terminal
|
||||
hardware. */
|
||||
|
||||
#ifndef TCSASOFT
|
||||
# define TCSASOFT 0
|
||||
#endif
|
||||
|
||||
char *
|
||||
getpass (const char *prompt)
|
||||
{
|
||||
FILE *in, *out;
|
||||
struct termios s, t;
|
||||
int tty_changed;
|
||||
static char *buf;
|
||||
static size_t bufsize;
|
||||
ssize_t nread;
|
||||
|
||||
/* Try to write to and read from the terminal if we can.
|
||||
If we can't open the terminal, use stderr and stdin. */
|
||||
|
||||
in = fopen ("/dev/tty", "w+");
|
||||
if (in == NULL)
|
||||
{
|
||||
in = stdin;
|
||||
out = stderr;
|
||||
}
|
||||
else
|
||||
out = in;
|
||||
|
||||
/* Turn echoing off if it is on now. */
|
||||
|
||||
if (tcgetattr (fileno (in), &t) == 0)
|
||||
{
|
||||
/* Save the old one. */
|
||||
s = t;
|
||||
/* Tricky, tricky. */
|
||||
t.c_lflag &= ~(ECHO|ISIG);
|
||||
tty_changed = (tcsetattr (fileno (in), TCSAFLUSH|TCSASOFT, &t) == 0);
|
||||
}
|
||||
else
|
||||
tty_changed = 0;
|
||||
|
||||
/* Write the prompt. */
|
||||
fputs (prompt, out);
|
||||
fflush (out);
|
||||
|
||||
/* Read the password. */
|
||||
nread = getline (&buf, &bufsize, in);
|
||||
if (buf != NULL)
|
||||
{
|
||||
if (nread < 0)
|
||||
buf[0] = '\0';
|
||||
else if (buf[nread - 1] == '\n')
|
||||
{
|
||||
/* Remove the newline. */
|
||||
buf[nread - 1] = '\0';
|
||||
if (tty_changed)
|
||||
/* Write the newline that was not echoed. */
|
||||
putc ('\n', out);
|
||||
}
|
||||
}
|
||||
|
||||
/* Restore the original setting. */
|
||||
if (tty_changed)
|
||||
(void) tcsetattr (fileno (in), TCSAFLUSH|TCSASOFT, &s);
|
||||
|
||||
if (in != stdin)
|
||||
/* We opened the terminal; now close it. */
|
||||
fclose (in);
|
||||
|
||||
return buf;
|
||||
}
|
||||
114
lib/getstr.c
Normal file
114
lib/getstr.c
Normal file
@@ -0,0 +1,114 @@
|
||||
/* getstr.c -- core function for GNU C library getline replacement function
|
||||
|
||||
Copyright (C) 1993, 1996-2000 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 of the
|
||||
License, 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 Jan Brittenson, bson@gnu.ai.mit.edu. */
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
#include <assert.h>
|
||||
|
||||
#if STDC_HEADERS
|
||||
# include <stdlib.h>
|
||||
#else
|
||||
char *malloc (), *realloc ();
|
||||
#endif
|
||||
|
||||
/* Always add at least this many bytes when extending the buffer. */
|
||||
#define MIN_CHUNK 64
|
||||
|
||||
/* Read up to (and including) a delimiter DELIM1 from STREAM into *LINEPTR
|
||||
+ OFFSET (and NUL-terminate it). If DELIM2 is non-zero, then read up
|
||||
and including the first occurrence of DELIM1 or DELIM2. *LINEPTR is
|
||||
a pointer returned from malloc (or NULL), pointing to *N characters of
|
||||
space. It is realloc'd as necessary. Return the number of characters
|
||||
read (not including the NUL terminator), or -1 on error or EOF. */
|
||||
|
||||
int
|
||||
getstr (char **lineptr, size_t *n, FILE *stream, int delim1, int delim2,
|
||||
size_t offset)
|
||||
{
|
||||
int nchars_avail; /* Allocated but unused chars in *LINEPTR. */
|
||||
char *read_pos; /* Where we're reading into *LINEPTR. */
|
||||
int ret;
|
||||
|
||||
if (!lineptr || !n || !stream)
|
||||
return -1;
|
||||
|
||||
if (!*lineptr)
|
||||
{
|
||||
*n = MIN_CHUNK;
|
||||
*lineptr = malloc (*n);
|
||||
if (!*lineptr)
|
||||
return -1;
|
||||
}
|
||||
|
||||
nchars_avail = *n - offset;
|
||||
read_pos = *lineptr + offset;
|
||||
|
||||
for (;;)
|
||||
{
|
||||
register int c = getc (stream);
|
||||
|
||||
/* We always want at least one char left in the buffer, since we
|
||||
always (unless we get an error while reading the first char)
|
||||
NUL-terminate the line buffer. */
|
||||
|
||||
assert(*n - nchars_avail == read_pos - *lineptr);
|
||||
if (nchars_avail < 2)
|
||||
{
|
||||
if (*n > MIN_CHUNK)
|
||||
*n *= 2;
|
||||
else
|
||||
*n += MIN_CHUNK;
|
||||
|
||||
nchars_avail = *n + *lineptr - read_pos;
|
||||
*lineptr = realloc (*lineptr, *n);
|
||||
if (!*lineptr)
|
||||
return -1;
|
||||
read_pos = *n - nchars_avail + *lineptr;
|
||||
assert(*n - nchars_avail == read_pos - *lineptr);
|
||||
}
|
||||
|
||||
if (c == EOF || ferror (stream))
|
||||
{
|
||||
/* Return partial line, if any. */
|
||||
if (read_pos == *lineptr)
|
||||
return -1;
|
||||
else
|
||||
break;
|
||||
}
|
||||
|
||||
*read_pos++ = c;
|
||||
nchars_avail--;
|
||||
|
||||
if (c == delim1 || (delim2 && c == delim2))
|
||||
/* Return the line. */
|
||||
break;
|
||||
}
|
||||
|
||||
/* Done - NUL terminate and return the number of chars read. */
|
||||
*read_pos = '\0';
|
||||
|
||||
ret = read_pos - (*lineptr + offset);
|
||||
return ret;
|
||||
}
|
||||
19
lib/getstr.h
Normal file
19
lib/getstr.h
Normal file
@@ -0,0 +1,19 @@
|
||||
#ifndef GETSTR_H_
|
||||
# define GETSTR_H_ 1
|
||||
|
||||
# include <stdio.h>
|
||||
|
||||
# ifndef PARAMS
|
||||
# if defined PROTOTYPES || (defined __STDC__ && __STDC__)
|
||||
# define PARAMS(Args) Args
|
||||
# else
|
||||
# define PARAMS(Args) ()
|
||||
# endif
|
||||
# endif
|
||||
|
||||
int
|
||||
getstr PARAMS ((char **lineptr, size_t *n, FILE *stream,
|
||||
int delim1, int delim2,
|
||||
size_t offset));
|
||||
|
||||
#endif
|
||||
@@ -1,5 +1,5 @@
|
||||
/* getugroups.c -- return a list of the groups a user is in
|
||||
Copyright (C) 1990, 1991, 1998, 1999 Free Software Foundation.
|
||||
Copyright (C) 1990, 1991, 1998, 1999, 2000 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
|
||||
@@ -57,7 +57,7 @@ getugroups (int maxcount, GETGROUPS_T *grouplist, char *username, gid_t gid)
|
||||
register char **cp;
|
||||
register int count = 0;
|
||||
|
||||
if (gid != -1)
|
||||
if (gid != (gid_t) -1)
|
||||
{
|
||||
if (maxcount != 0)
|
||||
grouplist[count] = gid;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* getusershell.c -- Return names of valid user shells.
|
||||
Copyright (C) 1991, 1997 Free Software Foundation, Inc.
|
||||
Copyright (C) 1991, 1997, 2000 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,6 +28,7 @@
|
||||
|
||||
#include <stdio.h>
|
||||
#include <ctype.h>
|
||||
#include "xalloc.h"
|
||||
|
||||
#if defined (STDC_HEADERS) || (!defined (isascii) && !defined (HAVE_ISASCII))
|
||||
# define IN_CTYPE_DOMAIN(c) 1
|
||||
@@ -37,15 +38,6 @@
|
||||
|
||||
#define ISSPACE(c) (IN_CTYPE_DOMAIN (c) && isspace (c))
|
||||
|
||||
#ifdef STDC_HEADERS
|
||||
# include <stdlib.h>
|
||||
#else
|
||||
char *malloc ();
|
||||
char *realloc ();
|
||||
#endif
|
||||
|
||||
char *xstrdup ();
|
||||
|
||||
static int readname ();
|
||||
|
||||
/* List of shells to use if the shells file is missing. */
|
||||
@@ -126,39 +118,6 @@ endusershell ()
|
||||
}
|
||||
}
|
||||
|
||||
/* Allocate N bytes of memory dynamically, with error checking. */
|
||||
|
||||
static char *
|
||||
xmalloc (n)
|
||||
unsigned n;
|
||||
{
|
||||
char *p;
|
||||
|
||||
p = malloc (n);
|
||||
if (p == 0)
|
||||
{
|
||||
fprintf (stderr, "virtual memory exhausted\n");
|
||||
exit (1);
|
||||
}
|
||||
return p;
|
||||
}
|
||||
|
||||
/* Reallocate space P to size N, with error checking. */
|
||||
|
||||
static char *
|
||||
xrealloc (p, n)
|
||||
char *p;
|
||||
unsigned n;
|
||||
{
|
||||
p = realloc (p, n);
|
||||
if (p == 0)
|
||||
{
|
||||
fprintf (stderr, "virtual memory exhausted\n");
|
||||
exit (1);
|
||||
}
|
||||
return p;
|
||||
}
|
||||
|
||||
/* Read a line from STREAM, removing any newline at the end.
|
||||
Place the result in *NAME, which is malloc'd
|
||||
and/or realloc'd as necessary and can start out NULL,
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* getversion.c -- select backup filename type
|
||||
Copyright (C) 1990, 1998 Free Software Foundation, Inc.
|
||||
Copyright (C) 1990, 1998, 2000 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
|
||||
|
||||
40
lib/hash.c
40
lib/hash.c
@@ -1,5 +1,5 @@
|
||||
/* hash - hashing table processing.
|
||||
Copyright (C) 1998, 1999 Free Software Foundation, Inc.
|
||||
Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.
|
||||
Written by Jim Meyering, 1992.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
@@ -35,9 +35,16 @@ typedef enum {false = 0, true = 1} bool;
|
||||
#include <stdio.h>
|
||||
#include <assert.h>
|
||||
|
||||
#ifndef HAVE_DECL_FREE
|
||||
"this configure-time declaration test was not run"
|
||||
#endif
|
||||
#if !HAVE_DECL_FREE
|
||||
void free ();
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_DECL_MALLOC
|
||||
"this configure-time declaration test was not run"
|
||||
#endif
|
||||
#if !HAVE_DECL_MALLOC
|
||||
char *malloc ();
|
||||
#endif
|
||||
@@ -445,8 +452,8 @@ hash_reset_tuning (Hash_tuning *tuning)
|
||||
|
||||
/* 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
|
||||
Otherwise, definitively 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. */
|
||||
|
||||
static bool
|
||||
@@ -468,15 +475,14 @@ check_tuning (Hash_table *table)
|
||||
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.
|
||||
/* 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
|
||||
@@ -717,7 +723,7 @@ hash_find_entry (Hash_table *table, const void *entry,
|
||||
if (bucket->data == NULL)
|
||||
return NULL;
|
||||
|
||||
/* Check if then entry is found as the bucket head. */
|
||||
/* See if the entry is the first in the bucket. */
|
||||
if ((*table->comparator) (entry, bucket->data))
|
||||
{
|
||||
void *data = bucket->data;
|
||||
@@ -769,8 +775,8 @@ hash_find_entry (Hash_table *table, const void *entry,
|
||||
|
||||
/* 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
|
||||
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. */
|
||||
@@ -848,6 +854,7 @@ hash_rehash (Hash_table *table, unsigned candidate)
|
||||
table->bucket_limit = new_table->bucket_limit;
|
||||
table->n_buckets = new_table->n_buckets;
|
||||
table->n_buckets_used = new_table->n_buckets_used;
|
||||
table->free_entry_list = new_table->free_entry_list;
|
||||
/* table->n_entries already holds its value. */
|
||||
#if USE_OBSTACK
|
||||
table->entry_stack = new_table->entry_stack;
|
||||
@@ -937,7 +944,8 @@ hash_delete (Hash_table *table, const void *entry)
|
||||
void *data;
|
||||
struct hash_entry *bucket;
|
||||
|
||||
if (data = hash_find_entry (table, entry, &bucket, true), !data)
|
||||
data = hash_find_entry (table, entry, &bucket, true);
|
||||
if (!data)
|
||||
return NULL;
|
||||
|
||||
table->n_entries--;
|
||||
|
||||
118
lib/human.c
118
lib/human.c
@@ -1,5 +1,5 @@
|
||||
/* human.c -- print human readable file size
|
||||
Copyright (C) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
|
||||
Copyright (C) 1996, 1997, 1998, 1999, 2000 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
|
||||
@@ -44,6 +44,9 @@
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_DECL_GETENV
|
||||
"this configure-time declaration test was not run"
|
||||
#endif
|
||||
#if !HAVE_DECL_GETENV
|
||||
char *getenv ();
|
||||
#endif
|
||||
|
||||
@@ -73,6 +76,23 @@ static const char suffixes[] =
|
||||
'Y' /* Yotta */
|
||||
};
|
||||
|
||||
/* If INEXACT_STYLE is not human_round_to_even, and if easily
|
||||
possible, adjust VALUE according to the style. */
|
||||
static double
|
||||
adjust_value (enum human_inexact_style inexact_style, double value)
|
||||
{
|
||||
/* Do not use the floor or ceil functions, as that would mean
|
||||
linking with the standard math library, which is a porting pain.
|
||||
So leave the value alone if it is too large to easily round. */
|
||||
if (inexact_style != human_round_to_even && value < (uintmax_t) -1)
|
||||
{
|
||||
uintmax_t u = value;
|
||||
value = u + (inexact_style == human_ceiling && u != value);
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
/* Like human_readable_inexact, except always round to even. */
|
||||
char *
|
||||
human_readable (uintmax_t n, char *buf,
|
||||
@@ -87,9 +107,8 @@ human_readable (uintmax_t n, char *buf,
|
||||
N is expressed in units of FROM_BLOCK_SIZE. FROM_BLOCK_SIZE must
|
||||
be nonnegative.
|
||||
|
||||
If OUTPUT_BLOCK_SIZE is positive, use units of OUTPUT_BLOCK_SIZE in
|
||||
the output number. OUTPUT_BLOCK_SIZE must be a multiple of
|
||||
FROM_BLOCK_SIZE or vice versa.
|
||||
OUTPUT_BLOCK_SIZE must be nonzero. If it is positive, use units of
|
||||
OUTPUT_BLOCK_SIZE in the output number.
|
||||
|
||||
Use INEXACT_STYLE to determine whether to take the ceiling or floor
|
||||
of any result that cannot be expressed exactly.
|
||||
@@ -145,57 +164,58 @@ human_readable_inexact (uintmax_t n, char *buf,
|
||||
|
||||
/* Adjust AMT out of FROM_BLOCK_SIZE units and into TO_BLOCK_SIZE units. */
|
||||
|
||||
if (to_block_size <= from_block_size)
|
||||
{
|
||||
int multiplier = from_block_size / to_block_size;
|
||||
amt = n * multiplier;
|
||||
{
|
||||
int multiplier;
|
||||
int divisor;
|
||||
int r2;
|
||||
int r10;
|
||||
if (to_block_size <= from_block_size
|
||||
? (from_block_size % to_block_size != 0
|
||||
|| (multiplier = from_block_size / to_block_size,
|
||||
(amt = n * multiplier) / multiplier != n))
|
||||
: (from_block_size == 0
|
||||
|| to_block_size % from_block_size != 0
|
||||
|| (divisor = to_block_size / from_block_size,
|
||||
r10 = (n % divisor) * 10,
|
||||
r2 = (r10 % divisor) * 2,
|
||||
amt = n / divisor,
|
||||
tenths = r10 / divisor,
|
||||
rounding = r2 < divisor ? 0 < r2 : 2 + (divisor < r2),
|
||||
0)))
|
||||
{
|
||||
/* Either the result cannot be computed easily using uintmax_t,
|
||||
or from_block_size is zero. Fall back on floating point.
|
||||
FIXME: This can yield answers that are slightly off. */
|
||||
|
||||
if (amt / multiplier != n)
|
||||
{
|
||||
/* Overflow occurred during multiplication. We should use
|
||||
multiple precision arithmetic here, but we'll be lazy and
|
||||
resort to floating point. This can yield answers that
|
||||
are slightly off. In practice it is quite rare to
|
||||
overflow uintmax_t, so this is good enough for now. */
|
||||
double damt = n * (from_block_size / (double) to_block_size);
|
||||
|
||||
double damt = n * (double) multiplier;
|
||||
if (! base)
|
||||
sprintf (buf, "%.0f", adjust_value (inexact_style, damt));
|
||||
else
|
||||
{
|
||||
double e = 1;
|
||||
power = 0;
|
||||
|
||||
if (! base)
|
||||
sprintf (buf, "%.0f", damt);
|
||||
else
|
||||
{
|
||||
double e = 1;
|
||||
power = 0;
|
||||
do
|
||||
{
|
||||
e *= base;
|
||||
power++;
|
||||
}
|
||||
while (e * base <= damt && power < sizeof suffixes - 1);
|
||||
|
||||
do
|
||||
{
|
||||
e *= base;
|
||||
power++;
|
||||
}
|
||||
while (e * base <= damt && power < sizeof suffixes - 1);
|
||||
damt /= e;
|
||||
|
||||
damt /= e;
|
||||
|
||||
sprintf (buf, "%.1f%c", damt, suffixes[power]);
|
||||
if (4 < strlen (buf))
|
||||
sprintf (buf, "%.0f%c", damt, suffixes[power]);
|
||||
}
|
||||
|
||||
return buf;
|
||||
}
|
||||
}
|
||||
else if (from_block_size == 0)
|
||||
amt = 0;
|
||||
else
|
||||
{
|
||||
int divisor = to_block_size / from_block_size;
|
||||
int r10 = (n % divisor) * 10;
|
||||
int r2 = (r10 % divisor) * 2;
|
||||
amt = n / divisor;
|
||||
tenths = r10 / divisor;
|
||||
rounding = r2 < divisor ? 0 < r2 : 2 + (divisor < r2);
|
||||
}
|
||||
sprintf (buf, "%.1f%c", adjust_value (inexact_style, damt),
|
||||
suffixes[power]);
|
||||
if (4 < strlen (buf))
|
||||
sprintf (buf, "%.0f%c",
|
||||
adjust_value (inexact_style, damt * 10) / 10,
|
||||
suffixes[power]);
|
||||
}
|
||||
|
||||
return buf;
|
||||
}
|
||||
}
|
||||
|
||||
/* Use power of BASE notation if adjusted AMT is large enough. */
|
||||
|
||||
|
||||
@@ -1,46 +0,0 @@
|
||||
#! /bin/sh
|
||||
|
||||
# interlock - wrap program invocation in lock to allow
|
||||
# parallel builds to work.
|
||||
# Written by Tom Tromey <tromey@cygnus.com>, Aug 10 1996
|
||||
#
|
||||
# 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:
|
||||
# interlock lock-dir-name program args-to-program...
|
||||
|
||||
dirname="$1"
|
||||
program="$2"
|
||||
|
||||
shift
|
||||
shift
|
||||
|
||||
while (mkdir $dirname > /dev/null 2>&1 && exit 1 || exit 0); do
|
||||
# Wait a bit.
|
||||
sleep 1
|
||||
done
|
||||
|
||||
# Race condition here: if interrupted after the loop but before this
|
||||
# trap, the lock can be left around.
|
||||
trap "rmdir $dirname > /dev/null 2>&1" 1 2 3 15
|
||||
|
||||
# We have the lock, so run the program.
|
||||
$program ${1+"$@"}
|
||||
ret=$?
|
||||
|
||||
# Release the lock.
|
||||
rmdir $dirname > /dev/null 2>&1
|
||||
|
||||
exit $ret
|
||||
228
lib/localcharset.c
Normal file
228
lib/localcharset.c
Normal file
@@ -0,0 +1,228 @@
|
||||
/* Determine a canonical name for the current locale's character encoding.
|
||||
|
||||
Copyright (C) 2000 Free Software Foundation, Inc.
|
||||
|
||||
This program 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, 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library 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 Bruno Haible <haible@clisp.cons.org>. */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#if HAVE_STDDEF_H
|
||||
# include <stddef.h>
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
#if HAVE_STRING_H
|
||||
# include <string.h>
|
||||
#else
|
||||
# include <strings.h>
|
||||
#endif
|
||||
#if HAVE_STDLIB_H
|
||||
# include <stdlib.h>
|
||||
#endif
|
||||
|
||||
#if HAVE_LANGINFO_CODESET
|
||||
# include <langinfo.h>
|
||||
#else
|
||||
# if HAVE_SETLOCALE
|
||||
# include <locale.h>
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifndef DIRECTORY_SEPARATOR
|
||||
# define DIRECTORY_SEPARATOR '/'
|
||||
#endif
|
||||
|
||||
#ifndef ISSLASH
|
||||
# define ISSLASH(C) ((C) == DIRECTORY_SEPARATOR)
|
||||
#endif
|
||||
|
||||
/* The following static variable is declared 'volatile' to avoid a
|
||||
possible multithread problem in the function get_charset_aliases. If we
|
||||
are running in a threaded environment, and if two threads initialize
|
||||
'charset_aliases' simultaneously, both will produce the same value,
|
||||
and everything will be ok if the two assignments to 'charset_aliases'
|
||||
are atomic. But I don't know what will happen if the two assignments mix. */
|
||||
/* Pointer to the contents of the charset.alias file, if it has already been
|
||||
read, else NULL. Its format is:
|
||||
ALIAS_1 '\0' CANONICAL_1 '\0' ... ALIAS_n '\0' CANONICAL_n '\0' '\0' */
|
||||
static char * volatile charset_aliases;
|
||||
|
||||
/* Return a pointer to the contents of the charset.alias file. */
|
||||
static const char *
|
||||
get_charset_aliases ()
|
||||
{
|
||||
char *cp;
|
||||
|
||||
cp = charset_aliases;
|
||||
if (cp == NULL)
|
||||
{
|
||||
FILE *fp;
|
||||
const char *dir = LIBDIR;
|
||||
const char *base = "charset.alias";
|
||||
char *file_name;
|
||||
|
||||
/* Concatenate dir and base into freshly allocated file_name. */
|
||||
{
|
||||
size_t dir_len = strlen (dir);
|
||||
size_t base_len = strlen (base);
|
||||
int add_slash = (dir_len > 0 && !ISSLASH (dir[dir_len - 1]));
|
||||
file_name = (char *) malloc (dir_len + add_slash + base_len + 1);
|
||||
if (file_name != NULL)
|
||||
{
|
||||
memcpy (file_name, dir, dir_len);
|
||||
if (add_slash)
|
||||
file_name[dir_len] = DIRECTORY_SEPARATOR;
|
||||
memcpy (file_name + dir_len + add_slash, base, base_len + 1);
|
||||
}
|
||||
}
|
||||
|
||||
if (file_name == NULL || (fp = fopen (file_name, "r")) == NULL)
|
||||
/* Out of memory or file not found, treat it as empty. */
|
||||
cp = "";
|
||||
else
|
||||
{
|
||||
/* Parse the file's contents. */
|
||||
int c;
|
||||
char buf1[50+1];
|
||||
char buf2[50+1];
|
||||
char *res_ptr = NULL;
|
||||
size_t res_size = 0;
|
||||
size_t l1, l2;
|
||||
|
||||
for (;;)
|
||||
{
|
||||
c = getc (fp);
|
||||
if (c == EOF)
|
||||
break;
|
||||
if (c == '\n' || c == ' ' || c == '\t')
|
||||
continue;
|
||||
if (c == '#')
|
||||
{
|
||||
/* Skip comment, to end of line. */
|
||||
do
|
||||
c = getc (fp);
|
||||
while (!(c == EOF || c == '\n'));
|
||||
if (c == EOF)
|
||||
break;
|
||||
continue;
|
||||
}
|
||||
ungetc (c, fp);
|
||||
if (fscanf(fp, "%50s %50s", buf1, buf2) < 2)
|
||||
break;
|
||||
l1 = strlen (buf1);
|
||||
l2 = strlen (buf2);
|
||||
if (res_size == 0)
|
||||
{
|
||||
res_size = l1 + 1 + l2 + 1;
|
||||
res_ptr = malloc (res_size + 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
res_size += l1 + 1 + l2 + 1;
|
||||
res_ptr = realloc (res_ptr, res_size + 1);
|
||||
}
|
||||
if (res_ptr == NULL)
|
||||
{
|
||||
/* Out of memory. */
|
||||
res_size = 0;
|
||||
break;
|
||||
}
|
||||
strcpy (res_ptr + res_size - (l2 + 1) - (l1 + 1), buf1);
|
||||
strcpy (res_ptr + res_size - (l2 + 1), buf2);
|
||||
}
|
||||
fclose (fp);
|
||||
if (res_size == 0)
|
||||
cp = "";
|
||||
else
|
||||
{
|
||||
*(res_ptr + res_size) = '\0';
|
||||
cp = res_ptr;
|
||||
}
|
||||
}
|
||||
|
||||
charset_aliases = cp;
|
||||
if (file_name != NULL)
|
||||
free (file_name);
|
||||
}
|
||||
|
||||
return cp;
|
||||
}
|
||||
|
||||
/* Determine the current locale's character encoding, and canonicalize it
|
||||
into one of the canonical names listed in config.charset.
|
||||
The result must not be freed; it is statically allocated.
|
||||
If the canonical name cannot be determined, the result is a non-canonical
|
||||
name or NULL. */
|
||||
|
||||
#ifdef STATIC
|
||||
STATIC
|
||||
#endif
|
||||
const char *
|
||||
locale_charset ()
|
||||
{
|
||||
const char *codeset;
|
||||
const char *aliases;
|
||||
|
||||
#if HAVE_LANGINFO_CODESET
|
||||
|
||||
/* Most systems support nl_langinfo (CODESET) nowadays. */
|
||||
codeset = nl_langinfo (CODESET);
|
||||
|
||||
#else
|
||||
|
||||
/* On old systems which lack it, use setlocale and getenv. */
|
||||
const char *locale = NULL;
|
||||
|
||||
# if HAVE_SETLOCALE
|
||||
locale = setlocale (LC_CTYPE, NULL);
|
||||
# endif
|
||||
if (locale == NULL || locale[0] == '\0')
|
||||
{
|
||||
locale = getenv ("LC_ALL");
|
||||
if (locale == NULL || locale[0] == '\0')
|
||||
{
|
||||
locale = getenv ("LC_CTYPE");
|
||||
if (locale == NULL || locale[0] == '\0')
|
||||
locale = getenv ("LANG");
|
||||
}
|
||||
}
|
||||
|
||||
/* On some old systems, one used to set locale = "iso8859_1". On others,
|
||||
you set it to "language_COUNTRY.charset". In any case, we resolve it
|
||||
through the charset.alias file. */
|
||||
codeset = locale;
|
||||
|
||||
#endif
|
||||
|
||||
if (codeset != NULL && codeset[0] != '\0')
|
||||
{
|
||||
/* Resolve alias. */
|
||||
for (aliases = get_charset_aliases ();
|
||||
*aliases != '\0';
|
||||
aliases += strlen (aliases) + 1, aliases += strlen (aliases) + 1)
|
||||
if (!strcmp (codeset, aliases))
|
||||
{
|
||||
codeset = aliases + strlen (aliases) + 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return codeset;
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Utility to accept --help and --version options as unobtrusively as possible.
|
||||
Copyright (C) 1993, 1994, 1998, 1999 Free Software Foundation, Inc.
|
||||
Copyright (C) 1993, 1994, 1998, 1999, 2000 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
|
||||
@@ -23,7 +23,10 @@
|
||||
|
||||
#include <stdio.h>
|
||||
#include <getopt.h>
|
||||
#include "closeout.h"
|
||||
#if HAVE_STDLIB_H
|
||||
# include <stdlib.h>
|
||||
#endif
|
||||
|
||||
#include "long-options.h"
|
||||
#include "version-etc.h"
|
||||
|
||||
@@ -71,8 +74,6 @@ parse_long_options (int argc,
|
||||
|
||||
case 'v':
|
||||
version_etc (stdout, command_name, package, version, authors);
|
||||
close_stdout (); /* FIXME: output failure exit status
|
||||
should be settable via an arg. */
|
||||
exit (0);
|
||||
|
||||
default:
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* makepath.c -- Ensure that a directory path exists.
|
||||
Copyright (C) 1990, 1997, 1998, 1999 Free Software Foundation, Inc.
|
||||
Copyright (C) 1990, 1997, 1998, 1999, 2000 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
|
||||
@@ -50,6 +50,10 @@ char *alloca ();
|
||||
# define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
|
||||
#endif
|
||||
|
||||
#ifndef S_IRWXUGO
|
||||
# define S_IRWXUGO (S_IRWXU | S_IRWXG | S_IRWXO)
|
||||
#endif
|
||||
|
||||
#if STDC_HEADERS
|
||||
# include <stdlib.h>
|
||||
#endif
|
||||
@@ -110,13 +114,9 @@ extern int errno;
|
||||
# define _(Text) Text
|
||||
#endif
|
||||
|
||||
#ifdef __MSDOS__
|
||||
typedef int uid_t;
|
||||
typedef int gid_t;
|
||||
#endif
|
||||
|
||||
#include "save-cwd.h"
|
||||
#include "error.h"
|
||||
#include "quote.h"
|
||||
|
||||
void strip_trailing_slashes ();
|
||||
|
||||
@@ -174,12 +174,13 @@ make_dir (const char *dir, const char *dirpath, mode_t mode, int *created_dir_p)
|
||||
|
||||
if (stat (dir, &stats))
|
||||
{
|
||||
error (0, saved_errno, _("cannot create directory `%s'"), dirpath);
|
||||
error (0, saved_errno, _("cannot create directory %s"),
|
||||
quote (dirpath));
|
||||
fail = 1;
|
||||
}
|
||||
else if (!S_ISDIR (stats.st_mode))
|
||||
{
|
||||
error (0, 0, _("`%s' exists but is not a directory"), dirpath);
|
||||
error (0, 0, _("%s exists but is not a directory"), quote (dirpath));
|
||||
fail = 1;
|
||||
}
|
||||
else
|
||||
@@ -308,7 +309,7 @@ make_path (const char *argpath,
|
||||
if (newly_created_dir)
|
||||
{
|
||||
if (verbose_fmt_string)
|
||||
error (0, 0, verbose_fmt_string, dirpath);
|
||||
error (0, 0, verbose_fmt_string, quote (dirpath));
|
||||
|
||||
if ((owner != (uid_t) -1 || group != (gid_t) -1)
|
||||
&& chown (basename_dir, owner, group)
|
||||
@@ -317,7 +318,8 @@ make_path (const char *argpath,
|
||||
#endif
|
||||
)
|
||||
{
|
||||
error (0, errno, "%s", dirpath);
|
||||
error (0, errno, _("cannot change owner and/or group of %s"),
|
||||
quote (dirpath));
|
||||
CLEANUP;
|
||||
return 1;
|
||||
}
|
||||
@@ -338,7 +340,8 @@ make_path (const char *argpath,
|
||||
stat and mkdir process O(n^2) file name components. */
|
||||
if (do_chdir && chdir (basename_dir) < 0)
|
||||
{
|
||||
error (0, errno, _("cannot chdir to directory, %s"), dirpath);
|
||||
error (0, errno, _("cannot chdir to directory, %s"),
|
||||
quote (dirpath));
|
||||
CLEANUP;
|
||||
return 1;
|
||||
}
|
||||
@@ -367,7 +370,7 @@ make_path (const char *argpath,
|
||||
umask (oldmask);
|
||||
|
||||
if (verbose_fmt_string != NULL)
|
||||
error (0, 0, verbose_fmt_string, dirpath);
|
||||
error (0, 0, verbose_fmt_string, quote (dirpath));
|
||||
|
||||
if (owner != (uid_t) -1 || group != (gid_t) -1)
|
||||
{
|
||||
@@ -377,18 +380,24 @@ make_path (const char *argpath,
|
||||
#endif
|
||||
)
|
||||
{
|
||||
error (0, errno, _("cannot chown %s"), dirpath);
|
||||
retval = 1;
|
||||
}
|
||||
/* chown may have turned off some permission bits we wanted. */
|
||||
if ((mode & (S_ISUID | S_ISGID | S_ISVTX))
|
||||
&& chmod (basename_dir, mode))
|
||||
{
|
||||
error (0, errno, _("cannot chmod %s"), dirpath);
|
||||
error (0, errno, _("cannot change owner and/or group of %s"),
|
||||
quote (dirpath));
|
||||
retval = 1;
|
||||
}
|
||||
}
|
||||
|
||||
/* The above chown may have turned off some permission bits in MODE.
|
||||
Another reason we may have to use chmod here is that mkdir(2) is
|
||||
required to honor only the file permission bits. In particular,
|
||||
it need not honor the `special' bits, so if MODE includes any
|
||||
special bits, set them here. */
|
||||
if ((mode & ~S_IRWXUGO)
|
||||
&& chmod (basename_dir, mode))
|
||||
{
|
||||
error (0, errno, _("cannot change permissions of %s"), quote (dirpath));
|
||||
retval = 1;
|
||||
}
|
||||
|
||||
CLEANUP_CWD;
|
||||
|
||||
/* If the mode for leading directories didn't include owner "wx"
|
||||
@@ -399,7 +408,8 @@ make_path (const char *argpath,
|
||||
*(p->dirname_end) = '\0';
|
||||
if (chmod (dirpath, parent_mode))
|
||||
{
|
||||
error (0, errno, "%s", dirpath);
|
||||
error (0, errno, "cannot change permissions of %s",
|
||||
quote (dirpath));
|
||||
retval = 1;
|
||||
}
|
||||
}
|
||||
@@ -412,7 +422,7 @@ make_path (const char *argpath,
|
||||
|
||||
if (!S_ISDIR (stats.st_mode))
|
||||
{
|
||||
error (0, 0, _("`%s' exists but is not a directory"), dirpath);
|
||||
error (0, 0, _("%s exists but is not a directory"), quote (dirpath));
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -431,12 +441,14 @@ make_path (const char *argpath,
|
||||
#endif
|
||||
)
|
||||
{
|
||||
error (0, errno, "%s", dirpath);
|
||||
error (0, errno, _("cannot change owner and/or group of %s"),
|
||||
quote (dirpath));
|
||||
retval = 1;
|
||||
}
|
||||
if (chmod (dirpath, mode))
|
||||
{
|
||||
error (0, errno, "%s", dirpath);
|
||||
error (0, errno, _("cannot change permissions of %s"),
|
||||
quote (dirpath));
|
||||
retval = 1;
|
||||
}
|
||||
}
|
||||
|
||||
207
lib/mbswidth.c
Normal file
207
lib/mbswidth.c
Normal file
@@ -0,0 +1,207 @@
|
||||
/* Determine the number of screen columns needed for a string.
|
||||
Copyright (C) 2000 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 Bruno Haible <haible@clisp.cons.org>. */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
/* Get MB_LEN_MAX. */
|
||||
#if HAVE_LIMITS_H
|
||||
# include <limits.h>
|
||||
#endif
|
||||
|
||||
/* Get MB_CUR_MAX. */
|
||||
#if HAVE_STDLIB_H
|
||||
# include <stdlib.h>
|
||||
#endif
|
||||
|
||||
#if HAVE_STRING_H
|
||||
# include <string.h>
|
||||
#endif
|
||||
|
||||
/* Get isprint(). */
|
||||
#include <ctype.h>
|
||||
|
||||
/* Get mbstate_t, mbrtowc(), mbsinit(), wcwidth(). */
|
||||
#if HAVE_WCHAR_H
|
||||
# include <wchar.h>
|
||||
#endif
|
||||
|
||||
/* Get iswprint(). */
|
||||
#if HAVE_WCTYPE_H
|
||||
# include <wctype.h>
|
||||
#endif
|
||||
#if !defined iswprint && !HAVE_ISWPRINT
|
||||
# define iswprint(wc) 1
|
||||
#endif
|
||||
|
||||
/* Some systems, like BeOS, have multibyte encodings but lack mbstate_t. */
|
||||
#if HAVE_MBRTOWC && defined mbstate_t
|
||||
# define mbrtowc(pwc, s, n, ps) (mbrtowc) (pwc, s, n, 0)
|
||||
# define mbsinit(ps) 1
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_DECL_WCWIDTH
|
||||
"this configure-time declaration test was not run"
|
||||
#endif
|
||||
#if !HAVE_DECL_WCWIDTH
|
||||
int wcwidth ();
|
||||
#endif
|
||||
|
||||
#ifndef wcwidth
|
||||
# if !HAVE_WCWIDTH
|
||||
/* wcwidth doesn't exist, so assume all printable characters have
|
||||
width 1. */
|
||||
# define wcwidth(wc) ((wc) == 0 ? 0 : iswprint (wc) ? 1 : -1)
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* Get ISPRINT. */
|
||||
#if defined (STDC_HEADERS) || (!defined (isascii) && !defined (HAVE_ISASCII))
|
||||
/* Undefine to protect against the definition in wctype.h of solaris2.6. */
|
||||
# undef ISASCII
|
||||
# define ISASCII(c) 1
|
||||
#else
|
||||
# define ISASCII(c) isascii (c)
|
||||
#endif
|
||||
/* Undefine to protect against the definition in wctype.h of solaris2.6. */
|
||||
#undef ISPRINT
|
||||
#define ISPRINT(c) (ISASCII (c) && isprint (c))
|
||||
|
||||
#include "mbswidth.h"
|
||||
|
||||
/* Returns the number of columns needed to represent the multibyte
|
||||
character string pointed to by STRING. If a non-printable character
|
||||
occurs, -1 is returned, unless MBSW_ACCEPT_UNPRINTABLE is specified.
|
||||
With flags = 0, this is the multibyte analogon of the wcswidth function. */
|
||||
int
|
||||
mbswidth (const char *string, int flags)
|
||||
{
|
||||
return mbsnwidth (string, strlen (string), flags);
|
||||
}
|
||||
|
||||
/* Returns the number of columns needed to represent the multibyte
|
||||
character string pointed to by STRING of length NBYTES. If a
|
||||
non-printable character occurs, -1 is returned, unless
|
||||
MBSW_ACCEPT_UNPRINTABLE is specified. */
|
||||
int
|
||||
mbsnwidth (const char *string, size_t nbytes, int flags)
|
||||
{
|
||||
const char *p = string;
|
||||
const char *plimit = p + nbytes;
|
||||
int width;
|
||||
|
||||
width = 0;
|
||||
#if HAVE_MBRTOWC && (MB_LEN_MAX > 1)
|
||||
if (MB_CUR_MAX > 1)
|
||||
{
|
||||
while (p < plimit)
|
||||
switch (*p)
|
||||
{
|
||||
case ' ': case '!': case '"': case '#': case '%':
|
||||
case '&': case '\'': case '(': case ')': case '*':
|
||||
case '+': case ',': case '-': case '.': case '/':
|
||||
case '0': case '1': case '2': case '3': case '4':
|
||||
case '5': case '6': case '7': case '8': case '9':
|
||||
case ':': case ';': case '<': case '=': case '>':
|
||||
case '?':
|
||||
case 'A': case 'B': case 'C': case 'D': case 'E':
|
||||
case 'F': case 'G': case 'H': case 'I': case 'J':
|
||||
case 'K': case 'L': case 'M': case 'N': case 'O':
|
||||
case 'P': case 'Q': case 'R': case 'S': case 'T':
|
||||
case 'U': case 'V': case 'W': case 'X': case 'Y':
|
||||
case 'Z':
|
||||
case '[': case '\\': case ']': case '^': case '_':
|
||||
case 'a': case 'b': case 'c': case 'd': case 'e':
|
||||
case 'f': case 'g': case 'h': case 'i': case 'j':
|
||||
case 'k': case 'l': case 'm': case 'n': case 'o':
|
||||
case 'p': case 'q': case 'r': case 's': case 't':
|
||||
case 'u': case 'v': case 'w': case 'x': case 'y':
|
||||
case 'z': case '{': case '|': case '}': case '~':
|
||||
/* These characters are printable ASCII characters. */
|
||||
p++;
|
||||
width++;
|
||||
break;
|
||||
default:
|
||||
/* If we have a multibyte sequence, scan it up to its end. */
|
||||
{
|
||||
mbstate_t mbstate;
|
||||
memset (&mbstate, 0, sizeof mbstate);
|
||||
do
|
||||
{
|
||||
wchar_t wc;
|
||||
size_t bytes;
|
||||
int w;
|
||||
|
||||
bytes = mbrtowc (&wc, p, plimit - p, &mbstate);
|
||||
|
||||
if (bytes == (size_t) -1)
|
||||
/* An invalid multibyte sequence was encountered. */
|
||||
{
|
||||
if (flags & MBSW_ACCEPT_INVALID)
|
||||
break;
|
||||
else
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (bytes == (size_t) -2)
|
||||
/* An incomplete multibyte character at the end. */
|
||||
{
|
||||
if (flags & MBSW_ACCEPT_INVALID)
|
||||
break;
|
||||
else
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (bytes == 0)
|
||||
/* A null wide character was encountered. */
|
||||
bytes = 1;
|
||||
|
||||
w = wcwidth (wc);
|
||||
if (w >= 0)
|
||||
/* A printable multibyte character. */
|
||||
width += w;
|
||||
else
|
||||
/* An unprintable multibyte character. */
|
||||
if (flags & MBSW_ACCEPT_UNPRINTABLE)
|
||||
width += 1;
|
||||
else
|
||||
return -1;
|
||||
|
||||
p += bytes;
|
||||
}
|
||||
while (! mbsinit (&mbstate));
|
||||
}
|
||||
break;
|
||||
}
|
||||
return width;
|
||||
}
|
||||
#endif
|
||||
|
||||
while (p < plimit)
|
||||
{
|
||||
unsigned char c = (unsigned char) *p++;
|
||||
|
||||
if ((flags & MBSW_ACCEPT_UNPRINTABLE) || ISPRINT (c))
|
||||
width++;
|
||||
else
|
||||
return -1;
|
||||
}
|
||||
return width;
|
||||
}
|
||||
41
lib/mbswidth.h
Normal file
41
lib/mbswidth.h
Normal file
@@ -0,0 +1,41 @@
|
||||
/* Determine the number of screen columns needed for a string.
|
||||
Copyright (C) 2000 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. */
|
||||
|
||||
#ifndef PARAMS
|
||||
# if defined PROTOTYPES || defined __STDC__
|
||||
# define PARAMS(Args) Args
|
||||
# else
|
||||
# define PARAMS(Args) ()
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* Optional flags to influence mbswidth/mbsnwidth behavior. */
|
||||
|
||||
/* If this bit is set, assume invalid characters have width 0.
|
||||
Otherwise, return -1 upon finding an invalid or incomplete character. */
|
||||
#define MBSW_ACCEPT_INVALID 1
|
||||
|
||||
/* If this bit is set, assume unprintable characters have width 1.
|
||||
Otherwise, return -1 upon finding a non-printable character. */
|
||||
#define MBSW_ACCEPT_UNPRINTABLE 2
|
||||
|
||||
/* Returns the number of screen columns needed for STRING. */
|
||||
extern int mbswidth PARAMS ((const char *string, int flags));
|
||||
|
||||
/* Returns the number of screen columns needed for the NBYTES bytes
|
||||
starting at BUF. */
|
||||
extern int mbsnwidth PARAMS ((const char *buf, size_t nbytes, int flags));
|
||||
@@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1995, 1997 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1995, 1997, 2000 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,10 +25,7 @@
|
||||
Return DESTADDR. */
|
||||
|
||||
char *
|
||||
memcpy (destaddr, srcaddr, len)
|
||||
char *destaddr;
|
||||
const char *srcaddr;
|
||||
int len;
|
||||
memcpy (char *destaddr, const char *srcaddr, int len)
|
||||
{
|
||||
char *dest = destaddr;
|
||||
|
||||
|
||||
108
lib/mkdir.c
108
lib/mkdir.c
@@ -1,108 +0,0 @@
|
||||
/* BSD compatible make directory function for System V
|
||||
Copyright (C) 1988, 1990, 1998 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 <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <errno.h>
|
||||
#ifndef errno
|
||||
extern int errno;
|
||||
#endif
|
||||
|
||||
#if STAT_MACROS_BROKEN
|
||||
# undef S_ISDIR
|
||||
#endif
|
||||
|
||||
#if !defined(S_ISDIR) && defined(S_IFDIR)
|
||||
# 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.
|
||||
|
||||
Written by Robert Rother, Mariah Corporation, August 1985
|
||||
(sdcsvax!rmr or rmr@uscd). If you want it, it's yours.
|
||||
|
||||
Severely hacked over by John Gilmore to make a 4.2BSD compatible
|
||||
subroutine. 11Mar86; hoptoad!gnu
|
||||
|
||||
Modified by rmtodd@uokmax 6-28-87 -- when making an already existing dir,
|
||||
subroutine didn't return EEXIST. It does now. */
|
||||
|
||||
int
|
||||
mkdir (const char *dpath, mode_t dmode)
|
||||
{
|
||||
pid_t cpid;
|
||||
mode_t mode;
|
||||
int status;
|
||||
struct stat statbuf;
|
||||
|
||||
if (stat (dpath, &statbuf) == 0)
|
||||
{
|
||||
errno = EEXIST; /* stat worked, so it already exists. */
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* If stat fails for a reason other than non-existence, return error. */
|
||||
if (errno != ENOENT)
|
||||
return -1;
|
||||
|
||||
cpid = fork ();
|
||||
switch (cpid)
|
||||
{
|
||||
case -1: /* Cannot fork. */
|
||||
return -1; /* errno is already set. */
|
||||
|
||||
case 0: /* Child process. */
|
||||
/* Cheap hack to set mode of new directory. Since this child
|
||||
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. */
|
||||
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);
|
||||
|
||||
default: /* Parent process. */
|
||||
/* Wait for kid to finish. */
|
||||
while (wait (&status) != cpid)
|
||||
/* Do nothing. */ ;
|
||||
|
||||
if (status)
|
||||
{
|
||||
/* /bin/mkdir failed. */
|
||||
errno = EIO;
|
||||
return -1;
|
||||
}
|
||||
return chmod (dpath, dmode);
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
/* modechange.c -- file mode manipulation
|
||||
Copyright (C) 1989, 1990, 1997, 1998, 1999 Free Software Foundation, Inc.
|
||||
Copyright (C) 1989, 1990, 1997-2000 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
|
||||
@@ -157,7 +157,7 @@ mode_compile (const char *mode_string, unsigned int masked_ops)
|
||||
{
|
||||
struct mode_change *head; /* First element of the linked list. */
|
||||
struct mode_change *tail; /* An element of the linked list. */
|
||||
unsigned long mode_value; /* The mode value, if octal. */
|
||||
uintmax_t mode_value; /* The mode value, if octal. */
|
||||
char *string_end; /* Pointer to end of parsed value. */
|
||||
mode_t umask_value; /* The umask value (surprise). */
|
||||
|
||||
@@ -166,10 +166,10 @@ mode_compile (const char *mode_string, unsigned int masked_ops)
|
||||
tail = NULL;
|
||||
#endif
|
||||
|
||||
if (xstrtoul (mode_string, &string_end, 8, &mode_value, "") == LONGINT_OK)
|
||||
if (xstrtoumax (mode_string, &string_end, 8, &mode_value, "") == LONGINT_OK)
|
||||
{
|
||||
struct mode_change *p;
|
||||
if (mode_value > CHMOD_MODE_BITS)
|
||||
if (mode_value != (mode_value & CHMOD_MODE_BITS))
|
||||
return MODE_INVALID;
|
||||
p = make_node_op_equals ((mode_t) mode_value);
|
||||
if (p == NULL)
|
||||
|
||||
124
lib/mountlist.c
124
lib/mountlist.c
@@ -1,5 +1,5 @@
|
||||
/* mountlist.c -- return a list of mounted filesystems
|
||||
Copyright (C) 1991, 1992, 1997, 1998, 1999 Free Software Foundation, Inc.
|
||||
Copyright (C) 1991, 1992, 1997-2000 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
|
||||
@@ -40,7 +40,6 @@ char *strstr ();
|
||||
char *xmalloc ();
|
||||
char *xrealloc ();
|
||||
char *xstrdup ();
|
||||
void error ();
|
||||
|
||||
#include <errno.h>
|
||||
#ifndef errno
|
||||
@@ -85,6 +84,11 @@ extern int errno;
|
||||
# include <sys/fs_types.h>
|
||||
#endif
|
||||
|
||||
#ifdef MOUNTED_FS_STAT_DEV /* BeOS. */
|
||||
# include <fs_info.h>
|
||||
# include <dirent.h>
|
||||
#endif
|
||||
|
||||
#ifdef MOUNTED_FREAD /* SVR2. */
|
||||
# include <mnttab.h>
|
||||
#endif
|
||||
@@ -256,7 +260,7 @@ static char *
|
||||
fsp_to_string (const struct statfs *fsp)
|
||||
{
|
||||
# if defined HAVE_F_FSTYPENAME_IN_STATFS
|
||||
return fsp->f_fstypename;
|
||||
return (char *) (fsp->f_fstypename);
|
||||
# else
|
||||
return fstype_to_string (fsp->f_type);
|
||||
# endif
|
||||
@@ -413,6 +417,111 @@ read_filesystem_list (int need_fs_type)
|
||||
}
|
||||
#endif /* MOUNTED_GETMNT. */
|
||||
|
||||
#if defined (MOUNTED_FS_STAT_DEV) /* BeOS */
|
||||
{
|
||||
/* The next_dev() and fs_stat_dev() system calls give the list of
|
||||
all filesystems, including the information returned by statvfs()
|
||||
(fs type, total blocks, free blocks etc.), but without the mount
|
||||
point. But on BeOS all filesystems except / are mounted in the
|
||||
rootfs, directly under /.
|
||||
The directory name of the mount point is often, but not always,
|
||||
identical to the volume name of the device.
|
||||
We therefore get the list of subdirectories of /, and the list
|
||||
of all filesystems, and match the two lists. */
|
||||
|
||||
DIR *dirp;
|
||||
struct rootdir_entry
|
||||
{
|
||||
char *name;
|
||||
dev_t dev;
|
||||
ino_t ino;
|
||||
struct rootdir_entry *next;
|
||||
};
|
||||
struct rootdir_entry *rootdir_list;
|
||||
struct rootdir_entry **rootdir_tail;
|
||||
int32 pos;
|
||||
dev_t dev;
|
||||
fs_info fi;
|
||||
|
||||
/* All volumes are mounted in the rootfs, directly under /. */
|
||||
rootdir_list = NULL;
|
||||
rootdir_tail = &rootdir_list;
|
||||
dirp = opendir ("/");
|
||||
if (dirp)
|
||||
{
|
||||
struct dirent *d;
|
||||
|
||||
while ((d = readdir (dirp)) != NULL)
|
||||
{
|
||||
char *name;
|
||||
struct stat statbuf;
|
||||
|
||||
if (strcmp (d->d_name, "..") == 0)
|
||||
continue;
|
||||
|
||||
if (strcmp (d->d_name, ".") == 0)
|
||||
name = xstrdup ("/");
|
||||
else
|
||||
{
|
||||
name = xmalloc (1 + strlen (d->d_name) + 1);
|
||||
name[0] = '/';
|
||||
strcpy (name + 1, d->d_name);
|
||||
}
|
||||
|
||||
if (lstat (name, &statbuf) >= 0 && S_ISDIR (statbuf.st_mode))
|
||||
{
|
||||
struct rootdir_entry *re;
|
||||
|
||||
re = (struct rootdir_entry *) xmalloc (sizeof (struct rootdir_entry));
|
||||
re->name = name;
|
||||
re->dev = statbuf.st_dev;
|
||||
re->ino = statbuf.st_ino;
|
||||
|
||||
/* Add to the linked list. */
|
||||
*rootdir_tail = re;
|
||||
rootdir_tail = &re->next;
|
||||
}
|
||||
else
|
||||
free (name);
|
||||
}
|
||||
closedir (dirp);
|
||||
}
|
||||
*rootdir_tail = NULL;
|
||||
|
||||
for (pos = 0; (dev = next_dev (&pos)) >= 0; )
|
||||
if (fs_stat_dev (dev, &fi) >= 0)
|
||||
{
|
||||
/* Note: fi.dev == dev. */
|
||||
struct rootdir_entry *re;
|
||||
|
||||
for (re = rootdir_list; re; re = re->next)
|
||||
if (re->dev == fi.dev && re->ino == fi.root)
|
||||
break;
|
||||
|
||||
me = (struct mount_entry *) xmalloc (sizeof (struct mount_entry));
|
||||
me->me_devname = xstrdup (fi.device_name[0] != '\0' ? fi.device_name : fi.fsh_name);
|
||||
me->me_mountdir = xstrdup (re != NULL ? re->name : fi.fsh_name);
|
||||
me->me_type = xstrdup (fi.fsh_name);
|
||||
me->me_dev = fi.dev;
|
||||
me->me_dummy = 0;
|
||||
me->me_remote = (fi.flags & B_FS_IS_SHARED) != 0;
|
||||
|
||||
/* Add to the linked list. */
|
||||
*mtail = me;
|
||||
mtail = &me->me_next;
|
||||
}
|
||||
*mtail = NULL;
|
||||
|
||||
while (rootdir_list != NULL)
|
||||
{
|
||||
struct rootdir_entry *re = rootdir_list;
|
||||
rootdir_list = re->next;
|
||||
free (re->name);
|
||||
free (re);
|
||||
}
|
||||
}
|
||||
#endif /* MOUNTED_FS_STAT_DEV */
|
||||
|
||||
#if defined (MOUNTED_GETFSSTAT) /* __alpha running OSF_1 */
|
||||
{
|
||||
int numsys, counter, bufsize;
|
||||
@@ -615,6 +724,8 @@ read_filesystem_list (int need_fs_type)
|
||||
for (thisent = entries; thisent < entries + bufsize;
|
||||
thisent += vmp->vmt_length)
|
||||
{
|
||||
char *options, *ignore;
|
||||
|
||||
vmp = (struct vmount *) thisent;
|
||||
me = (struct mount_entry *) xmalloc (sizeof (struct mount_entry));
|
||||
if (vmp->vmt_flags & MNT_REMOTE)
|
||||
@@ -638,7 +749,12 @@ read_filesystem_list (int need_fs_type)
|
||||
}
|
||||
me->me_mountdir = xstrdup (thisent + vmp->vmt_data[VMT_STUB].vmt_off);
|
||||
me->me_type = xstrdup (fstype_to_string (vmp->vmt_gfstype));
|
||||
me->me_dummy = ME_DUMMY (me->me_devname, me->me_type);
|
||||
options = thisent + vmp->vmt_data[VMT_ARGS].vmt_off;
|
||||
ignore = strstr (options, "ignore");
|
||||
me->me_dummy = (ignore
|
||||
&& (ignore == options || ignore[-1] == ',')
|
||||
&& (ignore[sizeof "ignore" - 1] == ','
|
||||
|| ignore[sizeof "ignore" - 1] == '\0'));
|
||||
me->me_dev = (dev_t) -1; /* vmt_fsid might be the info we want. */
|
||||
|
||||
/* Add to the linked list. */
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* mountlist.h -- declarations for list of mounted filesystems
|
||||
Copyright (C) 1991, 1992, 1998 Free Software Foundation, Inc.
|
||||
Copyright (C) 1991, 1992, 1998, 2000 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
|
||||
@@ -39,7 +39,10 @@ struct mount_entry *read_filesystem_list PARAMS ((int need_fs_type));
|
||||
|
||||
#ifndef ME_DUMMY
|
||||
# define ME_DUMMY(fs_name, fs_type) \
|
||||
(!strcmp (fs_type, "auto") || !strcmp (fs_type, "ignore"))
|
||||
(!strcmp (fs_type, "auto") \
|
||||
|| !strcmp (fs_type, "autofs") \
|
||||
/* for Irix 6.5 */ \
|
||||
|| !strcmp (fs_type, "ignore"))
|
||||
#endif
|
||||
|
||||
#ifndef ME_REMOTE
|
||||
|
||||
@@ -18,6 +18,11 @@
|
||||
/* written by Jim Meyering */
|
||||
|
||||
#include <config.h>
|
||||
|
||||
/* Undefine nanosleep here so any prototype is not redefined to be a
|
||||
prototype for rpl_nanosleep. (they'd conflict e.g., on alpha-dec-osf3.2) */
|
||||
#undef nanosleep
|
||||
|
||||
#include <stdio.h>
|
||||
#include <sys/types.h>
|
||||
#include <signal.h>
|
||||
@@ -31,6 +36,13 @@ extern int errno;
|
||||
# include <unistd.h>
|
||||
#endif
|
||||
|
||||
/* Some systems (MSDOS) don't have SIGCONT.
|
||||
Using SIGTERM here turns the signal-handling code below
|
||||
into a no-op on such systems. */
|
||||
#ifndef SIGCONT
|
||||
# define SIGCONT SIGTERM
|
||||
#endif
|
||||
|
||||
#include "nanosleep.h"
|
||||
|
||||
static int suspended;
|
||||
@@ -58,10 +70,10 @@ my_usleep (const struct timespec *ts_delay)
|
||||
/* FIXME: comment */
|
||||
|
||||
int
|
||||
nanosleep (const struct timespec *requested_delay,
|
||||
struct timespec *remaining_delay)
|
||||
rpl_nanosleep (const struct timespec *requested_delay,
|
||||
struct timespec *remaining_delay)
|
||||
{
|
||||
#ifdef SA_INTERRUPT
|
||||
#ifdef SA_NOCLDSTOP
|
||||
struct sigaction oldact, newact;
|
||||
#endif
|
||||
|
||||
@@ -70,7 +82,7 @@ nanosleep (const struct timespec *requested_delay,
|
||||
/* set up sig handler */
|
||||
if (first_call)
|
||||
{
|
||||
#ifdef SA_INTERRUPT
|
||||
#ifdef SA_NOCLDSTOP
|
||||
newact.sa_handler = sighandler;
|
||||
sigemptyset (&newact.sa_mask);
|
||||
newact.sa_flags = 0;
|
||||
|
||||
@@ -17,17 +17,7 @@
|
||||
#if ! defined NANOSLEEP_H
|
||||
# define NANOSLEEP_H
|
||||
|
||||
# if HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
# endif
|
||||
|
||||
# ifndef PARAMS
|
||||
# if defined PROTOTYPES || (defined __STDC__ && __STDC__)
|
||||
# define PARAMS(Args) Args
|
||||
# else
|
||||
# define PARAMS(Args) ()
|
||||
# endif
|
||||
# endif
|
||||
/* You must include config.h before including this file. */
|
||||
|
||||
# include <sys/types.h>
|
||||
# if TIME_WITH_SYS_TIME
|
||||
@@ -50,8 +40,10 @@ struct timespec
|
||||
};
|
||||
# endif
|
||||
|
||||
int
|
||||
nanosleep PARAMS ((const struct timespec *requested_delay,
|
||||
struct timespec *remaining_delay));
|
||||
# if ! HAVE_DECL_NANOSLEEP
|
||||
/* Don't specify a prototype here. Some systems (e.g., OSF) declare
|
||||
nanosleep with a conflicting one (const-less first parameter). */
|
||||
int nanosleep ();
|
||||
# endif
|
||||
|
||||
#endif
|
||||
|
||||
146
lib/obstack.c
146
lib/obstack.c
@@ -1,5 +1,5 @@
|
||||
/* obstack.c - subroutines used implicitly by object stack macros
|
||||
Copyright (C) 1988,89,90,91,92,93,94,96 Free Software Foundation, Inc.
|
||||
Copyright (C) 1988-1994,96,97,98,1999, 2000 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.
|
||||
@@ -19,6 +19,10 @@
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#include "obstack.h"
|
||||
|
||||
/* NOTE BEFORE MODIFYING THIS FILE: This version number must be
|
||||
@@ -37,60 +41,62 @@
|
||||
|
||||
#include <stdio.h> /* Random thing to get __GNU_LIBRARY__. */
|
||||
#if !defined (_LIBC) && defined (__GNU_LIBRARY__) && __GNU_LIBRARY__ > 1
|
||||
#include <gnu-versions.h>
|
||||
#if _GNU_OBSTACK_INTERFACE_VERSION == OBSTACK_INTERFACE_VERSION
|
||||
#define ELIDE_CODE
|
||||
#endif
|
||||
# include <gnu-versions.h>
|
||||
# if _GNU_OBSTACK_INTERFACE_VERSION == OBSTACK_INTERFACE_VERSION
|
||||
# define ELIDE_CODE
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef ELIDE_CODE
|
||||
|
||||
|
||||
#if defined (__STDC__) && __STDC__
|
||||
#define POINTER void *
|
||||
#else
|
||||
#define POINTER char *
|
||||
#endif
|
||||
# if defined (__STDC__) && __STDC__
|
||||
# define POINTER void *
|
||||
# else
|
||||
# define POINTER char *
|
||||
# endif
|
||||
|
||||
/* Determine default alignment. */
|
||||
struct fooalign {char x; double d;};
|
||||
#define DEFAULT_ALIGNMENT \
|
||||
# define DEFAULT_ALIGNMENT \
|
||||
((PTR_INT_TYPE) ((char *) &((struct fooalign *) 0)->d - (char *) 0))
|
||||
/* If malloc were really smart, it would round addresses to DEFAULT_ALIGNMENT.
|
||||
But in fact it might be less smart and round addresses to as much as
|
||||
DEFAULT_ROUNDING. So we prepare for it to do that. */
|
||||
union fooround {long x; double d;};
|
||||
#define DEFAULT_ROUNDING (sizeof (union fooround))
|
||||
# define DEFAULT_ROUNDING (sizeof (union fooround))
|
||||
|
||||
/* When we copy a long block of data, this is the unit to do it with.
|
||||
On some machines, copying successive ints does not work;
|
||||
in such a case, redefine COPYING_UNIT to `long' (if that works)
|
||||
or `char' as a last resort. */
|
||||
#ifndef COPYING_UNIT
|
||||
#define COPYING_UNIT int
|
||||
#endif
|
||||
# ifndef COPYING_UNIT
|
||||
# define COPYING_UNIT int
|
||||
# endif
|
||||
|
||||
|
||||
/* The functions allocating more room by calling `obstack_chunk_alloc'
|
||||
jump to the handler pointed to by `obstack_alloc_failed_handler'.
|
||||
This variable by default points to the internal function
|
||||
This can be set to a user defined function which should either
|
||||
abort gracefully or use longjump - but shouldn't return. This
|
||||
variable by default points to the internal function
|
||||
`print_and_abort'. */
|
||||
#if defined (__STDC__) && __STDC__
|
||||
# if defined (__STDC__) && __STDC__
|
||||
static void print_and_abort (void);
|
||||
void (*obstack_alloc_failed_handler) (void) = print_and_abort;
|
||||
#else
|
||||
# else
|
||||
static void print_and_abort ();
|
||||
void (*obstack_alloc_failed_handler) () = print_and_abort;
|
||||
#endif
|
||||
# endif
|
||||
|
||||
/* Exit value used when `print_and_abort' is used. */
|
||||
#if defined __GNU_LIBRARY__ || defined HAVE_STDLIB_H
|
||||
#include <stdlib.h>
|
||||
#endif
|
||||
#ifndef EXIT_FAILURE
|
||||
#define EXIT_FAILURE 1
|
||||
#endif
|
||||
# if defined __GNU_LIBRARY__ || defined HAVE_STDLIB_H
|
||||
# include <stdlib.h>
|
||||
# endif
|
||||
# ifndef EXIT_FAILURE
|
||||
# define EXIT_FAILURE 1
|
||||
# endif
|
||||
int obstack_exit_failure = EXIT_FAILURE;
|
||||
|
||||
/* The non-GNU-C macros copy the obstack into this global variable
|
||||
@@ -104,33 +110,33 @@ struct obstack *_obstack;
|
||||
For free, do not use ?:, since some compilers, like the MIPS compilers,
|
||||
do not allow (expr) ? void : void. */
|
||||
|
||||
#if defined (__STDC__) && __STDC__
|
||||
#define CALL_CHUNKFUN(h, size) \
|
||||
# if defined (__STDC__) && __STDC__
|
||||
# define CALL_CHUNKFUN(h, size) \
|
||||
(((h) -> use_extra_arg) \
|
||||
? (*(h)->chunkfun) ((h)->extra_arg, (size)) \
|
||||
: (*(struct _obstack_chunk *(*) (long)) (h)->chunkfun) ((size)))
|
||||
|
||||
#define CALL_FREEFUN(h, old_chunk) \
|
||||
# define CALL_FREEFUN(h, old_chunk) \
|
||||
do { \
|
||||
if ((h) -> use_extra_arg) \
|
||||
(*(h)->freefun) ((h)->extra_arg, (old_chunk)); \
|
||||
else \
|
||||
(*(void (*) (void *)) (h)->freefun) ((old_chunk)); \
|
||||
} while (0)
|
||||
#else
|
||||
#define CALL_CHUNKFUN(h, size) \
|
||||
# else
|
||||
# define CALL_CHUNKFUN(h, size) \
|
||||
(((h) -> use_extra_arg) \
|
||||
? (*(h)->chunkfun) ((h)->extra_arg, (size)) \
|
||||
: (*(struct _obstack_chunk *(*) ()) (h)->chunkfun) ((size)))
|
||||
|
||||
#define CALL_FREEFUN(h, old_chunk) \
|
||||
# define CALL_FREEFUN(h, old_chunk) \
|
||||
do { \
|
||||
if ((h) -> use_extra_arg) \
|
||||
(*(h)->freefun) ((h)->extra_arg, (old_chunk)); \
|
||||
else \
|
||||
(*(void (*) ()) (h)->freefun) ((old_chunk)); \
|
||||
} while (0)
|
||||
#endif
|
||||
# endif
|
||||
|
||||
|
||||
/* Initialize an obstack H for use. Specify chunk size SIZE (0 means default).
|
||||
@@ -138,27 +144,26 @@ struct obstack *_obstack;
|
||||
CHUNKFUN is the function to use to allocate chunks,
|
||||
and FREEFUN the function to free them.
|
||||
|
||||
Return nonzero if successful, zero if out of memory.
|
||||
To recover from an out of memory error,
|
||||
free up some memory, then call this again. */
|
||||
Return nonzero if successful, calls obstack_alloc_failed_handler if
|
||||
allocation fails. */
|
||||
|
||||
int
|
||||
_obstack_begin (h, size, alignment, chunkfun, freefun)
|
||||
struct obstack *h;
|
||||
int size;
|
||||
int alignment;
|
||||
#if defined (__STDC__) && __STDC__
|
||||
# if defined (__STDC__) && __STDC__
|
||||
POINTER (*chunkfun) (long);
|
||||
void (*freefun) (void *);
|
||||
#else
|
||||
# else
|
||||
POINTER (*chunkfun) ();
|
||||
void (*freefun) ();
|
||||
#endif
|
||||
# endif
|
||||
{
|
||||
register struct _obstack_chunk *chunk; /* points to new chunk */
|
||||
|
||||
if (alignment == 0)
|
||||
alignment = DEFAULT_ALIGNMENT;
|
||||
alignment = (int) DEFAULT_ALIGNMENT;
|
||||
if (size == 0)
|
||||
/* Default size is what GNU malloc can fit in a 4096-byte block. */
|
||||
{
|
||||
@@ -176,13 +181,13 @@ _obstack_begin (h, size, alignment, chunkfun, freefun)
|
||||
size = 4096 - extra;
|
||||
}
|
||||
|
||||
#if defined (__STDC__) && __STDC__
|
||||
# if defined (__STDC__) && __STDC__
|
||||
h->chunkfun = (struct _obstack_chunk * (*)(void *, long)) chunkfun;
|
||||
h->freefun = (void (*) (void *, struct _obstack_chunk *)) freefun;
|
||||
#else
|
||||
# else
|
||||
h->chunkfun = (struct _obstack_chunk * (*)()) chunkfun;
|
||||
h->freefun = freefun;
|
||||
#endif
|
||||
# endif
|
||||
h->chunk_size = size;
|
||||
h->alignment_mask = alignment - 1;
|
||||
h->use_extra_arg = 0;
|
||||
@@ -205,19 +210,19 @@ _obstack_begin_1 (h, size, alignment, chunkfun, freefun, arg)
|
||||
struct obstack *h;
|
||||
int size;
|
||||
int alignment;
|
||||
#if defined (__STDC__) && __STDC__
|
||||
# if defined (__STDC__) && __STDC__
|
||||
POINTER (*chunkfun) (POINTER, long);
|
||||
void (*freefun) (POINTER, POINTER);
|
||||
#else
|
||||
# else
|
||||
POINTER (*chunkfun) ();
|
||||
void (*freefun) ();
|
||||
#endif
|
||||
# endif
|
||||
POINTER arg;
|
||||
{
|
||||
register struct _obstack_chunk *chunk; /* points to new chunk */
|
||||
|
||||
if (alignment == 0)
|
||||
alignment = DEFAULT_ALIGNMENT;
|
||||
alignment = (int) DEFAULT_ALIGNMENT;
|
||||
if (size == 0)
|
||||
/* Default size is what GNU malloc can fit in a 4096-byte block. */
|
||||
{
|
||||
@@ -235,13 +240,13 @@ _obstack_begin_1 (h, size, alignment, chunkfun, freefun, arg)
|
||||
size = 4096 - extra;
|
||||
}
|
||||
|
||||
#if defined(__STDC__) && __STDC__
|
||||
# if defined(__STDC__) && __STDC__
|
||||
h->chunkfun = (struct _obstack_chunk * (*)(void *,long)) chunkfun;
|
||||
h->freefun = (void (*) (void *, struct _obstack_chunk *)) freefun;
|
||||
#else
|
||||
# else
|
||||
h->chunkfun = (struct _obstack_chunk * (*)()) chunkfun;
|
||||
h->freefun = freefun;
|
||||
#endif
|
||||
# endif
|
||||
h->chunk_size = size;
|
||||
h->alignment_mask = alignment - 1;
|
||||
h->extra_arg = arg;
|
||||
@@ -274,9 +279,9 @@ _obstack_newchunk (h, length)
|
||||
register struct _obstack_chunk *old_chunk = h->chunk;
|
||||
register struct _obstack_chunk *new_chunk;
|
||||
register long new_size;
|
||||
register int obj_size = h->next_free - h->object_base;
|
||||
register int i;
|
||||
int already;
|
||||
register long obj_size = h->next_free - h->object_base;
|
||||
register long i;
|
||||
long already;
|
||||
|
||||
/* Compute size for new chunk. */
|
||||
new_size = (obj_size + length) + (obj_size >> 3) + 100;
|
||||
@@ -330,11 +335,11 @@ _obstack_newchunk (h, length)
|
||||
This is here for debugging.
|
||||
If you use it in a program, you are probably losing. */
|
||||
|
||||
#if defined (__STDC__) && __STDC__
|
||||
# if defined (__STDC__) && __STDC__
|
||||
/* Suppress -Wmissing-prototypes warning. We don't want to declare this in
|
||||
obstack.h because it is just for debugging. */
|
||||
int _obstack_allocated_p (struct obstack *h, POINTER obj);
|
||||
#endif
|
||||
# endif
|
||||
|
||||
int
|
||||
_obstack_allocated_p (h, obj)
|
||||
@@ -359,7 +364,7 @@ _obstack_allocated_p (h, obj)
|
||||
/* Free objects in obstack H, including OBJ and everything allocate
|
||||
more recently than OBJ. If OBJ is zero, free everything in H. */
|
||||
|
||||
#undef obstack_free
|
||||
# undef obstack_free
|
||||
|
||||
/* This function has two names with identical definitions.
|
||||
This is the first one, called from non-ANSI code. */
|
||||
@@ -445,32 +450,37 @@ _obstack_memory_used (h)
|
||||
}
|
||||
|
||||
/* Define the error handler. */
|
||||
#ifndef _
|
||||
# ifdef HAVE_LIBINTL_H
|
||||
# include <libintl.h>
|
||||
# ifndef _
|
||||
# define _(Str) gettext (Str)
|
||||
# ifndef _
|
||||
# ifdef HAVE_LIBINTL_H
|
||||
# include <libintl.h>
|
||||
# ifndef _
|
||||
# define _(Str) gettext (Str)
|
||||
# endif
|
||||
# else
|
||||
# define _(Str) (Str)
|
||||
# endif
|
||||
# else
|
||||
# define _(Str) (Str)
|
||||
# endif
|
||||
#endif
|
||||
# if defined _LIBC && defined USE_IN_LIBIO
|
||||
# include <libio/iolibio.h>
|
||||
# define fputs(s, f) _IO_fputs (s, f)
|
||||
# endif
|
||||
|
||||
static void
|
||||
print_and_abort ()
|
||||
{
|
||||
fputs (_("memory exhausted\n"), stderr);
|
||||
fputs (_("memory exhausted"), stderr);
|
||||
fputc ('\n', stderr);
|
||||
exit (obstack_exit_failure);
|
||||
}
|
||||
|
||||
#if 0
|
||||
# if 0
|
||||
/* These are now turned off because the applications do not use it
|
||||
and it uses bcopy via obstack_grow, which causes trouble on sysV. */
|
||||
|
||||
/* Now define the functional versions of the obstack macros.
|
||||
Define them to simply use the corresponding macros to do the job. */
|
||||
|
||||
#if defined (__STDC__) && __STDC__
|
||||
# if defined (__STDC__) && __STDC__
|
||||
/* These function definitions do not work with non-ANSI preprocessors;
|
||||
they won't pass through the macro names in parentheses. */
|
||||
|
||||
@@ -581,8 +591,8 @@ POINTER (obstack_copy0) (obstack, pointer, length)
|
||||
return obstack_copy0 (obstack, pointer, length);
|
||||
}
|
||||
|
||||
#endif /* __STDC__ */
|
||||
# endif /* __STDC__ */
|
||||
|
||||
#endif /* 0 */
|
||||
# endif /* 0 */
|
||||
|
||||
#endif /* !ELIDE_CODE */
|
||||
|
||||
179
lib/obstack.h
179
lib/obstack.h
@@ -1,5 +1,5 @@
|
||||
/* obstack.h - object stack macros
|
||||
Copyright (C) 1988,89,90,91,92,93,94,96,97 Free Software Foundation, Inc.
|
||||
Copyright (C) 1988,89,90,91,92,93,94,96,97,98,99 Free Software Foundation, Inc.
|
||||
|
||||
the C library, however. The master source lives in /gd/gnu/lib.
|
||||
|
||||
@@ -118,45 +118,39 @@ extern "C" {
|
||||
may ignore the byte-within-word field of the pointer. */
|
||||
|
||||
#ifndef __PTR_TO_INT
|
||||
#define __PTR_TO_INT(P) ((P) - (char *) 0)
|
||||
# define __PTR_TO_INT(P) ((P) - (char *) 0)
|
||||
#endif
|
||||
|
||||
#ifndef __INT_TO_PTR
|
||||
#define __INT_TO_PTR(P) ((P) + (char *) 0)
|
||||
# define __INT_TO_PTR(P) ((P) + (char *) 0)
|
||||
#endif
|
||||
|
||||
/* We need the type of the resulting object. In ANSI C it is ptrdiff_t
|
||||
but in traditional C it is usually long. If we are in ANSI C and
|
||||
don't already have ptrdiff_t get it. */
|
||||
/* We need the type of the resulting object. If __PTRDIFF_TYPE__ is
|
||||
defined, as with GNU C, use that; that way we don't pollute the
|
||||
namespace with <stddef.h>'s symbols. Otherwise, if <stddef.h> is
|
||||
available, include it and use ptrdiff_t. In traditional C, long is
|
||||
the best that we can do. */
|
||||
|
||||
#if defined (__STDC__) && __STDC__ && ! defined (offsetof)
|
||||
#if defined (__GNUC__) && defined (IN_GCC)
|
||||
/* On Next machine, the system's stddef.h screws up if included
|
||||
after we have defined just ptrdiff_t, so include all of stddef.h.
|
||||
Otherwise, define just ptrdiff_t, which is all we need. */
|
||||
#ifndef __NeXT__
|
||||
#define __need_ptrdiff_t
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#include <stddef.h>
|
||||
#endif
|
||||
|
||||
#if defined (__STDC__) && __STDC__
|
||||
#define PTR_INT_TYPE ptrdiff_t
|
||||
#ifdef __PTRDIFF_TYPE__
|
||||
# define PTR_INT_TYPE __PTRDIFF_TYPE__
|
||||
#else
|
||||
#define PTR_INT_TYPE long
|
||||
# ifdef HAVE_STDDEF_H
|
||||
# include <stddef.h>
|
||||
# define PTR_INT_TYPE ptrdiff_t
|
||||
# else
|
||||
# define PTR_INT_TYPE long
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if defined (_LIBC) || defined (HAVE_STRING_H)
|
||||
#include <string.h>
|
||||
#define _obstack_memcpy(To, From, N) memcpy ((To), (From), (N))
|
||||
#if defined _LIBC || defined HAVE_STRING_H
|
||||
# include <string.h>
|
||||
# define _obstack_memcpy(To, From, N) memcpy ((To), (From), (N))
|
||||
#else
|
||||
#ifdef memcpy
|
||||
#define _obstack_memcpy(To, From, N) memcpy ((To), (From), (N))
|
||||
#else
|
||||
#define _obstack_memcpy(To, From, N) bcopy ((From), (To), (N))
|
||||
#endif
|
||||
# ifdef memcpy
|
||||
# define _obstack_memcpy(To, From, N) memcpy ((To), (From), (N))
|
||||
# else
|
||||
# define _obstack_memcpy(To, From, N) bcopy ((From), (To), (N))
|
||||
# endif
|
||||
#endif
|
||||
|
||||
struct _obstack_chunk /* Lives at front of each chunk. */
|
||||
@@ -175,7 +169,7 @@ struct obstack /* control current object in current chunk */
|
||||
char *chunk_limit; /* address of char after current chunk */
|
||||
PTR_INT_TYPE temp; /* Temporary for some macros. */
|
||||
int alignment_mask; /* Mask of alignment for each object. */
|
||||
#if defined (__STDC__) && __STDC__
|
||||
#if defined __STDC__ && __STDC__
|
||||
/* These prototypes vary based on `use_extra_arg', and we use
|
||||
casts to the prototypeless function type in all assignments,
|
||||
but having prototypes here quiets -Wstrict-prototypes. */
|
||||
@@ -199,7 +193,7 @@ struct obstack /* control current object in current chunk */
|
||||
|
||||
/* Declare the external functions we use; they are in obstack.c. */
|
||||
|
||||
#if defined (__STDC__) && __STDC__
|
||||
#if defined __STDC__ && __STDC__
|
||||
extern void _obstack_newchunk (struct obstack *, int);
|
||||
extern void _obstack_free (struct obstack *, void *);
|
||||
extern int _obstack_begin (struct obstack *, int, int,
|
||||
@@ -216,7 +210,7 @@ extern int _obstack_begin_1 ();
|
||||
extern int _obstack_memory_used ();
|
||||
#endif
|
||||
|
||||
#if defined (__STDC__) && __STDC__
|
||||
#if defined __STDC__ && __STDC__
|
||||
|
||||
/* Do the function-declarations after the structs
|
||||
but before defining the macros. */
|
||||
@@ -262,9 +256,10 @@ int obstack_memory_used (struct obstack *obstack);
|
||||
so we do not declare them. */
|
||||
|
||||
/* Error handler called when `obstack_chunk_alloc' failed to allocate
|
||||
more memory. This can be set to a user defined function. The
|
||||
default action is to print a message and abort. */
|
||||
#if defined (__STDC__) && __STDC__
|
||||
more memory. This can be set to a user defined function which
|
||||
should either abort gracefully or use longjump - but shouldn't
|
||||
return. The default action is to print a message and abort. */
|
||||
#if defined __STDC__ && __STDC__
|
||||
extern void (*obstack_alloc_failed_handler) (void);
|
||||
#else
|
||||
extern void (*obstack_alloc_failed_handler) ();
|
||||
@@ -293,53 +288,53 @@ extern int obstack_exit_failure;
|
||||
|
||||
/* To prevent prototype warnings provide complete argument list in
|
||||
standard C version. */
|
||||
#if defined (__STDC__) && __STDC__
|
||||
#if defined __STDC__ && __STDC__
|
||||
|
||||
#define obstack_init(h) \
|
||||
# define obstack_init(h) \
|
||||
_obstack_begin ((h), 0, 0, \
|
||||
(void *(*) (long)) obstack_chunk_alloc, (void (*) (void *)) obstack_chunk_free)
|
||||
|
||||
#define obstack_begin(h, size) \
|
||||
# define obstack_begin(h, size) \
|
||||
_obstack_begin ((h), (size), 0, \
|
||||
(void *(*) (long)) obstack_chunk_alloc, (void (*) (void *)) obstack_chunk_free)
|
||||
|
||||
#define obstack_specify_allocation(h, size, alignment, chunkfun, freefun) \
|
||||
# define obstack_specify_allocation(h, size, alignment, chunkfun, freefun) \
|
||||
_obstack_begin ((h), (size), (alignment), \
|
||||
(void *(*) (long)) (chunkfun), (void (*) (void *)) (freefun))
|
||||
|
||||
#define obstack_specify_allocation_with_arg(h, size, alignment, chunkfun, freefun, arg) \
|
||||
# define obstack_specify_allocation_with_arg(h, size, alignment, chunkfun, freefun, arg) \
|
||||
_obstack_begin_1 ((h), (size), (alignment), \
|
||||
(void *(*) (void *, long)) (chunkfun), \
|
||||
(void (*) (void *, void *)) (freefun), (arg))
|
||||
|
||||
#define obstack_chunkfun(h, newchunkfun) \
|
||||
# define obstack_chunkfun(h, newchunkfun) \
|
||||
((h) -> chunkfun = (struct _obstack_chunk *(*)(void *, long)) (newchunkfun))
|
||||
|
||||
#define obstack_freefun(h, newfreefun) \
|
||||
# define obstack_freefun(h, newfreefun) \
|
||||
((h) -> freefun = (void (*)(void *, struct _obstack_chunk *)) (newfreefun))
|
||||
|
||||
#else
|
||||
|
||||
#define obstack_init(h) \
|
||||
# define obstack_init(h) \
|
||||
_obstack_begin ((h), 0, 0, \
|
||||
(void *(*) ()) obstack_chunk_alloc, (void (*) ()) obstack_chunk_free)
|
||||
|
||||
#define obstack_begin(h, size) \
|
||||
# define obstack_begin(h, size) \
|
||||
_obstack_begin ((h), (size), 0, \
|
||||
(void *(*) ()) obstack_chunk_alloc, (void (*) ()) obstack_chunk_free)
|
||||
|
||||
#define obstack_specify_allocation(h, size, alignment, chunkfun, freefun) \
|
||||
# define obstack_specify_allocation(h, size, alignment, chunkfun, freefun) \
|
||||
_obstack_begin ((h), (size), (alignment), \
|
||||
(void *(*) ()) (chunkfun), (void (*) ()) (freefun))
|
||||
|
||||
#define obstack_specify_allocation_with_arg(h, size, alignment, chunkfun, freefun, arg) \
|
||||
# define obstack_specify_allocation_with_arg(h, size, alignment, chunkfun, freefun, arg) \
|
||||
_obstack_begin_1 ((h), (size), (alignment), \
|
||||
(void *(*) ()) (chunkfun), (void (*) ()) (freefun), (arg))
|
||||
|
||||
#define obstack_chunkfun(h, newchunkfun) \
|
||||
# define obstack_chunkfun(h, newchunkfun) \
|
||||
((h) -> chunkfun = (struct _obstack_chunk *(*)()) (newchunkfun))
|
||||
|
||||
#define obstack_freefun(h, newfreefun) \
|
||||
# define obstack_freefun(h, newfreefun) \
|
||||
((h) -> freefun = (void (*)()) (newfreefun))
|
||||
|
||||
#endif
|
||||
@@ -350,30 +345,30 @@ extern int obstack_exit_failure;
|
||||
|
||||
#define obstack_memory_used(h) _obstack_memory_used (h)
|
||||
|
||||
#if defined (__GNUC__) && defined (__STDC__) && __STDC__
|
||||
#if defined __GNUC__ && defined __STDC__ && __STDC__
|
||||
/* NextStep 2.0 cc is really gcc 1.93 but it defines __GNUC__ = 2 and
|
||||
does not implement __extension__. But that compiler doesn't define
|
||||
__GNUC_MINOR__. */
|
||||
#if __GNUC__ < 2 || (__NeXT__ && !__GNUC_MINOR__)
|
||||
#define __extension__
|
||||
#endif
|
||||
# if __GNUC__ < 2 || (__NeXT__ && !__GNUC_MINOR__)
|
||||
# define __extension__
|
||||
# endif
|
||||
|
||||
/* For GNU C, if not -traditional,
|
||||
we can define these macros to compute all args only once
|
||||
without using a global variable.
|
||||
Also, we can avoid using the `temp' slot, to make faster code. */
|
||||
|
||||
#define obstack_object_size(OBSTACK) \
|
||||
# define obstack_object_size(OBSTACK) \
|
||||
__extension__ \
|
||||
({ struct obstack *__o = (OBSTACK); \
|
||||
(unsigned) (__o->next_free - __o->object_base); })
|
||||
|
||||
#define obstack_room(OBSTACK) \
|
||||
# define obstack_room(OBSTACK) \
|
||||
__extension__ \
|
||||
({ struct obstack *__o = (OBSTACK); \
|
||||
(unsigned) (__o->chunk_limit - __o->next_free); })
|
||||
|
||||
#define obstack_make_room(OBSTACK,length) \
|
||||
# define obstack_make_room(OBSTACK,length) \
|
||||
__extension__ \
|
||||
({ struct obstack *__o = (OBSTACK); \
|
||||
int __len = (length); \
|
||||
@@ -381,12 +376,12 @@ __extension__ \
|
||||
_obstack_newchunk (__o, __len); \
|
||||
(void) 0; })
|
||||
|
||||
#define obstack_empty_p(OBSTACK) \
|
||||
# define obstack_empty_p(OBSTACK) \
|
||||
__extension__ \
|
||||
({ struct obstack *__o = (OBSTACK); \
|
||||
(__o->chunk->prev == 0 && __o->next_free - __o->chunk->contents == 0); })
|
||||
|
||||
#define obstack_grow(OBSTACK,where,length) \
|
||||
# define obstack_grow(OBSTACK,where,length) \
|
||||
__extension__ \
|
||||
({ struct obstack *__o = (OBSTACK); \
|
||||
int __len = (length); \
|
||||
@@ -396,7 +391,7 @@ __extension__ \
|
||||
__o->next_free += __len; \
|
||||
(void) 0; })
|
||||
|
||||
#define obstack_grow0(OBSTACK,where,length) \
|
||||
# define obstack_grow0(OBSTACK,where,length) \
|
||||
__extension__ \
|
||||
({ struct obstack *__o = (OBSTACK); \
|
||||
int __len = (length); \
|
||||
@@ -407,7 +402,7 @@ __extension__ \
|
||||
*(__o->next_free)++ = 0; \
|
||||
(void) 0; })
|
||||
|
||||
#define obstack_1grow(OBSTACK,datum) \
|
||||
# define obstack_1grow(OBSTACK,datum) \
|
||||
__extension__ \
|
||||
({ struct obstack *__o = (OBSTACK); \
|
||||
if (__o->next_free + 1 > __o->chunk_limit) \
|
||||
@@ -419,7 +414,7 @@ __extension__ \
|
||||
and that the data added so far to the current object
|
||||
shares that much alignment. */
|
||||
|
||||
#define obstack_ptr_grow(OBSTACK,datum) \
|
||||
# define obstack_ptr_grow(OBSTACK,datum) \
|
||||
__extension__ \
|
||||
({ struct obstack *__o = (OBSTACK); \
|
||||
if (__o->next_free + sizeof (void *) > __o->chunk_limit) \
|
||||
@@ -427,7 +422,7 @@ __extension__ \
|
||||
*((void **)__o->next_free)++ = ((void *)datum); \
|
||||
(void) 0; })
|
||||
|
||||
#define obstack_int_grow(OBSTACK,datum) \
|
||||
# define obstack_int_grow(OBSTACK,datum) \
|
||||
__extension__ \
|
||||
({ struct obstack *__o = (OBSTACK); \
|
||||
if (__o->next_free + sizeof (int) > __o->chunk_limit) \
|
||||
@@ -435,10 +430,10 @@ __extension__ \
|
||||
*((int *)__o->next_free)++ = ((int)datum); \
|
||||
(void) 0; })
|
||||
|
||||
#define obstack_ptr_grow_fast(h,aptr) (*((void **) (h)->next_free)++ = (void *)aptr)
|
||||
#define obstack_int_grow_fast(h,aint) (*((int *) (h)->next_free)++ = (int) aint)
|
||||
# define obstack_ptr_grow_fast(h,aptr) (*((void **) (h)->next_free)++ = (void *)aptr)
|
||||
# define obstack_int_grow_fast(h,aint) (*((int *) (h)->next_free)++ = (int) aint)
|
||||
|
||||
#define obstack_blank(OBSTACK,length) \
|
||||
# define obstack_blank(OBSTACK,length) \
|
||||
__extension__ \
|
||||
({ struct obstack *__o = (OBSTACK); \
|
||||
int __len = (length); \
|
||||
@@ -447,19 +442,19 @@ __extension__ \
|
||||
__o->next_free += __len; \
|
||||
(void) 0; })
|
||||
|
||||
#define obstack_alloc(OBSTACK,length) \
|
||||
# define obstack_alloc(OBSTACK,length) \
|
||||
__extension__ \
|
||||
({ struct obstack *__h = (OBSTACK); \
|
||||
obstack_blank (__h, (length)); \
|
||||
obstack_finish (__h); })
|
||||
|
||||
#define obstack_copy(OBSTACK,where,length) \
|
||||
# define obstack_copy(OBSTACK,where,length) \
|
||||
__extension__ \
|
||||
({ struct obstack *__h = (OBSTACK); \
|
||||
obstack_grow (__h, (where), (length)); \
|
||||
obstack_finish (__h); })
|
||||
|
||||
#define obstack_copy0(OBSTACK,where,length) \
|
||||
# define obstack_copy0(OBSTACK,where,length) \
|
||||
__extension__ \
|
||||
({ struct obstack *__h = (OBSTACK); \
|
||||
obstack_grow0 (__h, (where), (length)); \
|
||||
@@ -467,7 +462,7 @@ __extension__ \
|
||||
|
||||
/* The local variable is named __o1 to avoid a name conflict
|
||||
when obstack_blank is called. */
|
||||
#define obstack_finish(OBSTACK) \
|
||||
# define obstack_finish(OBSTACK) \
|
||||
__extension__ \
|
||||
({ struct obstack *__o1 = (OBSTACK); \
|
||||
void *value; \
|
||||
@@ -483,23 +478,23 @@ __extension__ \
|
||||
__o1->object_base = __o1->next_free; \
|
||||
value; })
|
||||
|
||||
#define obstack_free(OBSTACK, OBJ) \
|
||||
# define obstack_free(OBSTACK, OBJ) \
|
||||
__extension__ \
|
||||
({ struct obstack *__o = (OBSTACK); \
|
||||
void *__obj = (OBJ); \
|
||||
if (__obj > (void *)__o->chunk && __obj < (void *)__o->chunk_limit) \
|
||||
__o->next_free = __o->object_base = __obj; \
|
||||
__o->next_free = __o->object_base = (char *)__obj; \
|
||||
else (obstack_free) (__o, __obj); })
|
||||
|
||||
#else /* not __GNUC__ or not __STDC__ */
|
||||
|
||||
#define obstack_object_size(h) \
|
||||
# define obstack_object_size(h) \
|
||||
(unsigned) ((h)->next_free - (h)->object_base)
|
||||
|
||||
#define obstack_room(h) \
|
||||
# define obstack_room(h) \
|
||||
(unsigned) ((h)->chunk_limit - (h)->next_free)
|
||||
|
||||
#define obstack_empty_p(h) \
|
||||
# define obstack_empty_p(h) \
|
||||
((h)->chunk->prev == 0 && (h)->next_free - (h)->chunk->contents == 0)
|
||||
|
||||
/* Note that the call to _obstack_newchunk is enclosed in (..., 0)
|
||||
@@ -508,19 +503,19 @@ __extension__ \
|
||||
Casting the third operand to void was tried before,
|
||||
but some compilers won't accept it. */
|
||||
|
||||
#define obstack_make_room(h,length) \
|
||||
# define obstack_make_room(h,length) \
|
||||
( (h)->temp = (length), \
|
||||
(((h)->next_free + (h)->temp > (h)->chunk_limit) \
|
||||
? (_obstack_newchunk ((h), (h)->temp), 0) : 0))
|
||||
|
||||
#define obstack_grow(h,where,length) \
|
||||
# define obstack_grow(h,where,length) \
|
||||
( (h)->temp = (length), \
|
||||
(((h)->next_free + (h)->temp > (h)->chunk_limit) \
|
||||
? (_obstack_newchunk ((h), (h)->temp), 0) : 0), \
|
||||
_obstack_memcpy ((h)->next_free, (char *) (where), (h)->temp), \
|
||||
(h)->next_free += (h)->temp)
|
||||
|
||||
#define obstack_grow0(h,where,length) \
|
||||
# define obstack_grow0(h,where,length) \
|
||||
( (h)->temp = (length), \
|
||||
(((h)->next_free + (h)->temp + 1 > (h)->chunk_limit) \
|
||||
? (_obstack_newchunk ((h), (h)->temp + 1), 0) : 0), \
|
||||
@@ -528,40 +523,40 @@ __extension__ \
|
||||
(h)->next_free += (h)->temp, \
|
||||
*((h)->next_free)++ = 0)
|
||||
|
||||
#define obstack_1grow(h,datum) \
|
||||
# define obstack_1grow(h,datum) \
|
||||
( (((h)->next_free + 1 > (h)->chunk_limit) \
|
||||
? (_obstack_newchunk ((h), 1), 0) : 0), \
|
||||
(*((h)->next_free)++ = (datum)))
|
||||
|
||||
#define obstack_ptr_grow(h,datum) \
|
||||
# define obstack_ptr_grow(h,datum) \
|
||||
( (((h)->next_free + sizeof (char *) > (h)->chunk_limit) \
|
||||
? (_obstack_newchunk ((h), sizeof (char *)), 0) : 0), \
|
||||
(*((char **) (((h)->next_free+=sizeof(char *))-sizeof(char *))) = ((char *) datum)))
|
||||
|
||||
#define obstack_int_grow(h,datum) \
|
||||
# define obstack_int_grow(h,datum) \
|
||||
( (((h)->next_free + sizeof (int) > (h)->chunk_limit) \
|
||||
? (_obstack_newchunk ((h), sizeof (int)), 0) : 0), \
|
||||
(*((int *) (((h)->next_free+=sizeof(int))-sizeof(int))) = ((int) datum)))
|
||||
|
||||
#define obstack_ptr_grow_fast(h,aptr) (*((char **) (h)->next_free)++ = (char *) aptr)
|
||||
#define obstack_int_grow_fast(h,aint) (*((int *) (h)->next_free)++ = (int) aint)
|
||||
# define obstack_ptr_grow_fast(h,aptr) (*((char **) (h)->next_free)++ = (char *) aptr)
|
||||
# define obstack_int_grow_fast(h,aint) (*((int *) (h)->next_free)++ = (int) aint)
|
||||
|
||||
#define obstack_blank(h,length) \
|
||||
# define obstack_blank(h,length) \
|
||||
( (h)->temp = (length), \
|
||||
(((h)->chunk_limit - (h)->next_free < (h)->temp) \
|
||||
? (_obstack_newchunk ((h), (h)->temp), 0) : 0), \
|
||||
((h)->next_free += (h)->temp))
|
||||
|
||||
#define obstack_alloc(h,length) \
|
||||
# define obstack_alloc(h,length) \
|
||||
(obstack_blank ((h), (length)), obstack_finish ((h)))
|
||||
|
||||
#define obstack_copy(h,where,length) \
|
||||
# define obstack_copy(h,where,length) \
|
||||
(obstack_grow ((h), (where), (length)), obstack_finish ((h)))
|
||||
|
||||
#define obstack_copy0(h,where,length) \
|
||||
# define obstack_copy0(h,where,length) \
|
||||
(obstack_grow0 ((h), (where), (length)), obstack_finish ((h)))
|
||||
|
||||
#define obstack_finish(h) \
|
||||
# define obstack_finish(h) \
|
||||
( ((h)->next_free == (h)->object_base \
|
||||
? (((h)->maybe_empty_object = 1), 0) \
|
||||
: 0), \
|
||||
@@ -575,21 +570,21 @@ __extension__ \
|
||||
(h)->object_base = (h)->next_free, \
|
||||
__INT_TO_PTR ((h)->temp))
|
||||
|
||||
#if defined (__STDC__) && __STDC__
|
||||
#define obstack_free(h,obj) \
|
||||
# if defined __STDC__ && __STDC__
|
||||
# define obstack_free(h,obj) \
|
||||
( (h)->temp = (char *) (obj) - (char *) (h)->chunk, \
|
||||
(((h)->temp > 0 && (h)->temp < (h)->chunk_limit - (char *) (h)->chunk)\
|
||||
? (int) ((h)->next_free = (h)->object_base \
|
||||
= (h)->temp + (char *) (h)->chunk) \
|
||||
: (((obstack_free) ((h), (h)->temp + (char *) (h)->chunk), 0), 0)))
|
||||
#else
|
||||
#define obstack_free(h,obj) \
|
||||
# else
|
||||
# define obstack_free(h,obj) \
|
||||
( (h)->temp = (char *) (obj) - (char *) (h)->chunk, \
|
||||
(((h)->temp > 0 && (h)->temp < (h)->chunk_limit - (char *) (h)->chunk)\
|
||||
? (int) ((h)->next_free = (h)->object_base \
|
||||
= (h)->temp + (char *) (h)->chunk) \
|
||||
: (_obstack_free ((h), (h)->temp + (char *) (h)->chunk), 0)))
|
||||
#endif
|
||||
# endif
|
||||
|
||||
#endif /* not __GNUC__ or not __STDC__ */
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* path-concat.c -- concatenate two arbitrary pathnames
|
||||
Copyright (C) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
|
||||
Copyright (C) 1996, 1997, 1998, 1999, 2000 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
|
||||
@@ -32,6 +32,9 @@
|
||||
#include <sys/types.h>
|
||||
|
||||
char *malloc ();
|
||||
#ifndef strdup
|
||||
char *strdup ();
|
||||
#endif
|
||||
|
||||
#ifndef DIRECTORY_SEPARATOR
|
||||
# define DIRECTORY_SEPARATOR '/'
|
||||
@@ -83,10 +86,13 @@ path_concat (const char *dir, const char *base, char **base_in_result)
|
||||
|
||||
p = mempcpy (p_concat, dir, dir_len);
|
||||
|
||||
if (ISSLASH (*(p - 1)) && ISSLASH(*base))
|
||||
--p;
|
||||
else if (!ISSLASH (*(p - 1)) && !ISSLASH(*base))
|
||||
*p++ = DIRECTORY_SEPARATOR;
|
||||
if (dir_len > 0)
|
||||
{
|
||||
if (ISSLASH (*(p - 1)) && ISSLASH(*base))
|
||||
--p;
|
||||
else if (!ISSLASH (*(p - 1)) && !ISSLASH(*base))
|
||||
*p++ = DIRECTORY_SEPARATOR;
|
||||
}
|
||||
|
||||
if (base_in_result)
|
||||
*base_in_result = p;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Parse dates for touch and date.
|
||||
Copyright (C) 1989, 1990, 1991, 1998 Free Software Foundation Inc.
|
||||
Copyright (C) 1989, 1990, 1991, 1998, 2000 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
|
||||
@@ -23,6 +23,9 @@
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
#if HAVE_STDLIB_H
|
||||
# include <stdlib.h>
|
||||
#endif
|
||||
#include <sys/types.h>
|
||||
#if HAVE_STRING_H
|
||||
# include <string.h>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1991, 1994, 1997, 1998 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1991, 1994, 1997, 1998, 2000 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.
|
||||
@@ -17,14 +17,16 @@
|
||||
along with this program; if not, write to the Free Software Foundation,
|
||||
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include <errno.h>
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
/* Include errno.h *after* sys/types.h to work around header problems
|
||||
on AIX 3.2.5. */
|
||||
#include <errno.h>
|
||||
|
||||
/* Don't include stdlib.h because some (e.g., Solaris 2.7) declare putenv
|
||||
with a non-const argument. That would conflict with the declaration of
|
||||
rpl_putenv below (due to the #define putenv rpl_putenv from config.h). */
|
||||
|
||||
25
lib/quote.c
Normal file
25
lib/quote.c
Normal file
@@ -0,0 +1,25 @@
|
||||
/* Written by Paul Eggert <eggert@twinsun.com> */
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <quotearg.h>
|
||||
#include <quote.h>
|
||||
|
||||
/* Return an unambiguous printable representated, allocated in slot N,
|
||||
for NAME, suitable for diagnostics. */
|
||||
char const *
|
||||
quote_n (int n, char const *name)
|
||||
{
|
||||
return quotearg_n_style (n, locale_quoting_style, name);
|
||||
}
|
||||
|
||||
/* Return an unambiguous printable representation of NAME, suitable
|
||||
for diagnostics. */
|
||||
char const *
|
||||
quote (char const *name)
|
||||
{
|
||||
return quote_n (0, name);
|
||||
}
|
||||
4
lib/quote.h
Normal file
4
lib/quote.h
Normal file
@@ -0,0 +1,4 @@
|
||||
/* prototypes for quote.c */
|
||||
|
||||
char const *quote_n (int n, char const *name);
|
||||
char const *quote (char const *name);
|
||||
568
lib/quotearg.c
568
lib/quotearg.c
@@ -1,5 +1,5 @@
|
||||
/* quotearg.c - quote arguments for output
|
||||
Copyright (C) 1998, 1999 Free Software Foundation, Inc.
|
||||
Copyright (C) 1998, 1999, 2000 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
|
||||
@@ -17,8 +17,6 @@
|
||||
|
||||
/* Written by Paul Eggert <eggert@twinsun.com> */
|
||||
|
||||
/* FIXME: Multibyte characters are not supported yet. */
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
@@ -28,16 +26,6 @@
|
||||
#include <xalloc.h>
|
||||
|
||||
#include <ctype.h>
|
||||
#if defined (STDC_HEADERS) || (!defined (isascii) && !defined (HAVE_ISASCII))
|
||||
# define ISASCII(c) 1
|
||||
#else
|
||||
# define ISASCII(c) isascii (c)
|
||||
#endif
|
||||
#ifdef isgraph
|
||||
# define ISGRAPH(c) (ISASCII (c) && isgraph (c))
|
||||
#else
|
||||
# define ISGRAPH(c) (ISASCII (c) && isprint (c) && !isspace (c))
|
||||
#endif
|
||||
|
||||
#if ENABLE_NLS
|
||||
# include <libintl.h>
|
||||
@@ -45,6 +33,7 @@
|
||||
#else
|
||||
# define _(text) text
|
||||
#endif
|
||||
#define N_(text) text
|
||||
|
||||
#if HAVE_LIMITS_H
|
||||
# include <limits.h>
|
||||
@@ -56,6 +45,12 @@
|
||||
# define UCHAR_MAX ((unsigned char) -1)
|
||||
#endif
|
||||
|
||||
#if HAVE_C_BACKSLASH_A
|
||||
# define ALERT_CHAR '\a'
|
||||
#else
|
||||
# define ALERT_CHAR '\7'
|
||||
#endif
|
||||
|
||||
#if HAVE_STDLIB_H
|
||||
# include <stdlib.h>
|
||||
#endif
|
||||
@@ -64,17 +59,57 @@
|
||||
# include <string.h>
|
||||
#endif
|
||||
|
||||
#if HAVE_WCHAR_H
|
||||
# include <wchar.h>
|
||||
#endif
|
||||
|
||||
#if HAVE_MBRTOWC
|
||||
size_t mbrtowc ();
|
||||
# ifdef mbstate_t
|
||||
# define mbrtowc(pwc, s, n, ps) (mbrtowc) (pwc, s, n, 0)
|
||||
# define mbsinit(ps) 1
|
||||
# endif
|
||||
#else
|
||||
/* Disable multibyte processing entirely. Since MB_CUR_MAX is 1, the
|
||||
other macros are defined only for documentation and to satisfy C
|
||||
syntax. */
|
||||
# undef MB_CUR_MAX
|
||||
# define MB_CUR_MAX 1
|
||||
# define mbrtowc(pwc, s, n, ps) ((*(pwc) = *(s)) != 0)
|
||||
# define mbsinit(ps) 1
|
||||
# define iswprint(wc) ISPRINT ((unsigned char) (wc))
|
||||
#endif
|
||||
|
||||
#ifndef iswprint
|
||||
# if HAVE_WCTYPE_H
|
||||
# include <wctype.h>
|
||||
# endif
|
||||
# if !defined iswprint && !HAVE_ISWPRINT
|
||||
# define iswprint(wc) 1
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#define INT_BITS (sizeof (int) * CHAR_BIT)
|
||||
|
||||
#if defined (STDC_HEADERS) || (!defined (isascii) && !defined (HAVE_ISASCII))
|
||||
/* Undefine to protect against the definition in wctype.h of solaris2.6. */
|
||||
# undef ISASCII
|
||||
# define ISASCII(c) 1
|
||||
#else
|
||||
# define ISASCII(c) isascii (c)
|
||||
#endif
|
||||
/* Undefine to protect against the definition in wctype.h of solaris2.6. */
|
||||
#undef ISPRINT
|
||||
#define ISPRINT(c) (ISASCII (c) && isprint (c))
|
||||
|
||||
struct quoting_options
|
||||
{
|
||||
/* Basic quoting style. */
|
||||
enum quoting_style style;
|
||||
|
||||
/* Quote the chararacters indicated by this bit vector even if the
|
||||
/* Quote the characters indicated by this bit vector even if the
|
||||
quoting style would not normally require them to be quoted. */
|
||||
int quote_these_too[((UCHAR_MAX + 1) / INT_BITS
|
||||
+ ((UCHAR_MAX + 1) % INT_BITS != 0))];
|
||||
int quote_these_too[(UCHAR_MAX / INT_BITS) + 1];
|
||||
};
|
||||
|
||||
/* Names of quoting styles. */
|
||||
@@ -86,10 +121,11 @@ char const *const quoting_style_args[] =
|
||||
"c",
|
||||
"escape",
|
||||
"locale",
|
||||
"clocale",
|
||||
0
|
||||
};
|
||||
|
||||
/* Correspondances to quoting style names. */
|
||||
/* Correspondences to quoting style names. */
|
||||
enum quoting_style const quoting_style_vals[] =
|
||||
{
|
||||
literal_quoting_style,
|
||||
@@ -97,7 +133,8 @@ enum quoting_style const quoting_style_vals[] =
|
||||
shell_always_quoting_style,
|
||||
c_quoting_style,
|
||||
escape_quoting_style,
|
||||
locale_quoting_style
|
||||
locale_quoting_style,
|
||||
clocale_quoting_style
|
||||
};
|
||||
|
||||
/* The default quoting options. */
|
||||
@@ -146,6 +183,325 @@ set_char_quoting (struct quoting_options *o, char c, int i)
|
||||
return r;
|
||||
}
|
||||
|
||||
/* MSGID approximates a quotation mark. Return its translation if it
|
||||
has one; otherwise, return either it or "\"", depending on S. */
|
||||
static char const *
|
||||
gettext_quote (char const *msgid, enum quoting_style s)
|
||||
{
|
||||
char const *translation = _(msgid);
|
||||
if (translation == msgid && s == clocale_quoting_style)
|
||||
translation = "\"";
|
||||
return translation;
|
||||
}
|
||||
|
||||
/* Place into buffer BUFFER (of size BUFFERSIZE) a quoted version of
|
||||
argument ARG (of size ARGSIZE), using QUOTING_STYLE and the
|
||||
non-quoting-style part of O to control quoting.
|
||||
Terminate the output with a null character, and return the written
|
||||
size of the output, not counting the terminating null.
|
||||
If BUFFERSIZE is too small to store the output string, return the
|
||||
value that would have been returned had BUFFERSIZE been large enough.
|
||||
If ARGSIZE is -1, use the string length of the argument for ARGSIZE.
|
||||
|
||||
This function acts like quotearg_buffer (BUFFER, BUFFERSIZE, ARG,
|
||||
ARGSIZE, O), except it uses QUOTING_STYLE instead of the quoting
|
||||
style specified by O, and O may not be null. */
|
||||
|
||||
static size_t
|
||||
quotearg_buffer_restyled (char *buffer, size_t buffersize,
|
||||
char const *arg, size_t argsize,
|
||||
enum quoting_style quoting_style,
|
||||
struct quoting_options const *o)
|
||||
{
|
||||
size_t i;
|
||||
size_t len = 0;
|
||||
char const *quote_string = 0;
|
||||
size_t quote_string_len = 0;
|
||||
int backslash_escapes = 0;
|
||||
int unibyte_locale = MB_CUR_MAX == 1;
|
||||
|
||||
#define STORE(c) \
|
||||
do \
|
||||
{ \
|
||||
if (len < buffersize) \
|
||||
buffer[len] = (c); \
|
||||
len++; \
|
||||
} \
|
||||
while (0)
|
||||
|
||||
switch (quoting_style)
|
||||
{
|
||||
case c_quoting_style:
|
||||
STORE ('"');
|
||||
backslash_escapes = 1;
|
||||
quote_string = "\"";
|
||||
quote_string_len = 1;
|
||||
break;
|
||||
|
||||
case escape_quoting_style:
|
||||
backslash_escapes = 1;
|
||||
break;
|
||||
|
||||
case locale_quoting_style:
|
||||
case clocale_quoting_style:
|
||||
{
|
||||
/* Get translations for open and closing quotation marks.
|
||||
|
||||
The message catalog should translate "`" to a left
|
||||
quotation mark suitable for the locale, and similarly for
|
||||
"'". If the catalog has no translation,
|
||||
locale_quoting_style quotes `like this', and
|
||||
clocale_quoting_style quotes "like this".
|
||||
|
||||
For example, an American English Unicode locale should
|
||||
translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and
|
||||
should translate "'" to U+201D (RIGHT DOUBLE QUOTATION
|
||||
MARK). A British English Unicode locale should instead
|
||||
translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and
|
||||
U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. */
|
||||
|
||||
char const *left = gettext_quote (N_("`"), quoting_style);
|
||||
char const *right = gettext_quote (N_("'"), quoting_style);
|
||||
for (quote_string = left; *quote_string; quote_string++)
|
||||
STORE (*quote_string);
|
||||
backslash_escapes = 1;
|
||||
quote_string = right;
|
||||
quote_string_len = strlen (quote_string);
|
||||
}
|
||||
break;
|
||||
|
||||
case shell_always_quoting_style:
|
||||
STORE ('\'');
|
||||
quote_string = "'";
|
||||
quote_string_len = 1;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
for (i = 0; ! (argsize == (size_t) -1 ? arg[i] == '\0' : i == argsize); i++)
|
||||
{
|
||||
unsigned char c;
|
||||
unsigned char esc;
|
||||
|
||||
if (backslash_escapes
|
||||
&& quote_string_len
|
||||
&& i + quote_string_len <= argsize
|
||||
&& memcmp (arg + i, quote_string, quote_string_len) == 0)
|
||||
STORE ('\\');
|
||||
|
||||
c = arg[i];
|
||||
switch (c)
|
||||
{
|
||||
case '?':
|
||||
switch (quoting_style)
|
||||
{
|
||||
case shell_quoting_style:
|
||||
goto use_shell_always_quoting_style;
|
||||
|
||||
case c_quoting_style:
|
||||
if (i + 2 < argsize && arg[i + 1] == '?')
|
||||
switch (arg[i + 2])
|
||||
{
|
||||
case '!': case '\'':
|
||||
case '(': case ')': case '-': case '/':
|
||||
case '<': case '=': case '>':
|
||||
/* Escape the second '?' in what would otherwise be
|
||||
a trigraph. */
|
||||
i += 2;
|
||||
c = arg[i + 2];
|
||||
STORE ('?');
|
||||
STORE ('\\');
|
||||
STORE ('?');
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case ALERT_CHAR: esc = 'a'; goto c_escape;
|
||||
case '\b': esc = 'b'; goto c_escape;
|
||||
case '\f': esc = 'f'; goto c_escape;
|
||||
case '\n': esc = 'n'; goto c_and_shell_escape;
|
||||
case '\r': esc = 'r'; goto c_and_shell_escape;
|
||||
case '\t': esc = 't'; goto c_and_shell_escape;
|
||||
case '\v': esc = 'v'; goto c_escape;
|
||||
case '\\': esc = c; goto c_and_shell_escape;
|
||||
|
||||
c_and_shell_escape:
|
||||
if (quoting_style == shell_quoting_style)
|
||||
goto use_shell_always_quoting_style;
|
||||
c_escape:
|
||||
if (backslash_escapes)
|
||||
{
|
||||
c = esc;
|
||||
goto store_escape;
|
||||
}
|
||||
break;
|
||||
|
||||
case '#': case '~':
|
||||
if (i != 0)
|
||||
break;
|
||||
/* Fall through. */
|
||||
case ' ':
|
||||
case '!': /* special in bash */
|
||||
case '"': case '$': case '&':
|
||||
case '(': case ')': case '*': case ';':
|
||||
case '<': case '>': case '[':
|
||||
case '^': /* special in old /bin/sh, e.g. SunOS 4.1.4 */
|
||||
case '`': case '|':
|
||||
/* A shell special character. In theory, '$' and '`' could
|
||||
be the first bytes of multibyte characters, which means
|
||||
we should check them with mbrtowc, but in practice this
|
||||
doesn't happen so it's not worth worrying about. */
|
||||
if (quoting_style == shell_quoting_style)
|
||||
goto use_shell_always_quoting_style;
|
||||
break;
|
||||
|
||||
case '\'':
|
||||
switch (quoting_style)
|
||||
{
|
||||
case shell_quoting_style:
|
||||
goto use_shell_always_quoting_style;
|
||||
|
||||
case shell_always_quoting_style:
|
||||
STORE ('\'');
|
||||
STORE ('\\');
|
||||
STORE ('\'');
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case '%': case '+': case ',': case '-': case '.': case '/':
|
||||
case '0': case '1': case '2': case '3': case '4': case '5':
|
||||
case '6': case '7': case '8': case '9': case ':': case '=':
|
||||
case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
|
||||
case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
|
||||
case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
|
||||
case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
|
||||
case 'Y': case 'Z': case ']': case '_': case 'a': case 'b':
|
||||
case 'c': case 'd': case 'e': case 'f': case 'g': case 'h':
|
||||
case 'i': case 'j': case 'k': case 'l': case 'm': case 'n':
|
||||
case 'o': case 'p': case 'q': case 'r': case 's': case 't':
|
||||
case 'u': case 'v': case 'w': case 'x': case 'y': case 'z':
|
||||
case '{': case '}':
|
||||
/* These characters don't cause problems, no matter what the
|
||||
quoting style is. They cannot start multibyte sequences. */
|
||||
break;
|
||||
|
||||
default:
|
||||
/* If we have a multibyte sequence, copy it until we reach
|
||||
its end, find an error, or come back to the initial shift
|
||||
state. For C-like styles, if the sequence has
|
||||
unprintable characters, escape the whole sequence, since
|
||||
we can't easily escape single characters within it. */
|
||||
{
|
||||
/* Length of multibyte sequence found so far. */
|
||||
size_t m;
|
||||
|
||||
int printable;
|
||||
|
||||
if (unibyte_locale)
|
||||
{
|
||||
m = 1;
|
||||
printable = ISPRINT (c);
|
||||
}
|
||||
else
|
||||
{
|
||||
mbstate_t mbstate;
|
||||
memset (&mbstate, 0, sizeof mbstate);
|
||||
|
||||
m = 0;
|
||||
printable = 1;
|
||||
if (argsize == (size_t) -1)
|
||||
argsize = strlen (arg);
|
||||
|
||||
do
|
||||
{
|
||||
wchar_t w;
|
||||
size_t bytes = mbrtowc (&w, &arg[i + m],
|
||||
argsize - (i + m), &mbstate);
|
||||
if (bytes == 0)
|
||||
break;
|
||||
else if (bytes == (size_t) -1)
|
||||
{
|
||||
printable = 0;
|
||||
break;
|
||||
}
|
||||
else if (bytes == (size_t) -2)
|
||||
{
|
||||
printable = 0;
|
||||
while (i + m < argsize && arg[i + m])
|
||||
m++;
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (! iswprint (w))
|
||||
printable = 0;
|
||||
m += bytes;
|
||||
}
|
||||
}
|
||||
while (! mbsinit (&mbstate));
|
||||
}
|
||||
|
||||
if (1 < m || (backslash_escapes && ! printable))
|
||||
{
|
||||
/* Output a multibyte sequence, or an escaped
|
||||
unprintable unibyte character. */
|
||||
size_t ilim = i + m;
|
||||
|
||||
for (;;)
|
||||
{
|
||||
if (backslash_escapes && ! printable)
|
||||
{
|
||||
STORE ('\\');
|
||||
STORE ('0' + (c >> 6));
|
||||
STORE ('0' + ((c >> 3) & 7));
|
||||
c = '0' + (c & 7);
|
||||
}
|
||||
if (ilim <= i + 1)
|
||||
break;
|
||||
STORE (c);
|
||||
c = arg[++i];
|
||||
}
|
||||
|
||||
goto store_c;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (! (backslash_escapes
|
||||
&& o->quote_these_too[c / INT_BITS] & (1 << (c % INT_BITS))))
|
||||
goto store_c;
|
||||
|
||||
store_escape:
|
||||
STORE ('\\');
|
||||
|
||||
store_c:
|
||||
STORE (c);
|
||||
}
|
||||
|
||||
if (quote_string)
|
||||
for (; *quote_string; quote_string++)
|
||||
STORE (*quote_string);
|
||||
|
||||
if (len < buffersize)
|
||||
buffer[len] = '\0';
|
||||
return len;
|
||||
|
||||
use_shell_always_quoting_style:
|
||||
return quotearg_buffer_restyled (buffer, buffersize, arg, argsize,
|
||||
shell_always_quoting_style, o);
|
||||
}
|
||||
|
||||
/* Place into buffer BUFFER (of size BUFFERSIZE) a quoted version of
|
||||
argument ARG (of size ARGSIZE), using O to control quoting.
|
||||
If O is null, use the default.
|
||||
@@ -159,179 +515,32 @@ quotearg_buffer (char *buffer, size_t buffersize,
|
||||
char const *arg, size_t argsize,
|
||||
struct quoting_options const *o)
|
||||
{
|
||||
unsigned char c;
|
||||
size_t i;
|
||||
size_t len = 0;
|
||||
char const *quote_string;
|
||||
size_t quote_string_len;
|
||||
struct quoting_options const *p = o ? o : &default_quoting_options;
|
||||
enum quoting_style quoting_style = p->style;
|
||||
#define STORE(c) \
|
||||
do \
|
||||
{ \
|
||||
if (len < buffersize) \
|
||||
buffer[len] = (c); \
|
||||
len++; \
|
||||
} \
|
||||
while (0)
|
||||
|
||||
switch (quoting_style)
|
||||
{
|
||||
case shell_quoting_style:
|
||||
if (! (argsize == (size_t) -1 ? arg[0] == '\0' : argsize == 0))
|
||||
{
|
||||
switch (arg[0])
|
||||
{
|
||||
case '#': case '~':
|
||||
break;
|
||||
|
||||
default:
|
||||
for (i = 0; ; i++)
|
||||
{
|
||||
if (argsize == (size_t) -1 ? arg[i] == '\0' : i == argsize)
|
||||
goto done;
|
||||
|
||||
c = arg[i];
|
||||
|
||||
switch (c)
|
||||
{
|
||||
case '\t': case '\n': case ' ':
|
||||
case '!': /* special in csh */
|
||||
case '"': case '$': case '&': case '\'':
|
||||
case '(': case ')': case '*': case ';':
|
||||
case '<': case '>': case '?': case '[': case '\\':
|
||||
case '^': /* special in old /bin/sh, e.g. SunOS 4.1.4 */
|
||||
case '`': case '|':
|
||||
goto needs_quoting;
|
||||
}
|
||||
|
||||
if (p->quote_these_too[c / INT_BITS] & (1 << (c % INT_BITS)))
|
||||
goto needs_quoting;
|
||||
|
||||
STORE (c);
|
||||
}
|
||||
needs_quoting:;
|
||||
|
||||
len = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
/* Fall through. */
|
||||
|
||||
case shell_always_quoting_style:
|
||||
STORE ('\'');
|
||||
quote_string = "'";
|
||||
quote_string_len = 1;
|
||||
break;
|
||||
|
||||
case c_quoting_style:
|
||||
STORE ('"');
|
||||
quote_string = "\"";
|
||||
quote_string_len = 1;
|
||||
break;
|
||||
|
||||
case locale_quoting_style:
|
||||
for (quote_string = _("`"); *quote_string; quote_string++)
|
||||
STORE (*quote_string);
|
||||
quote_string = _("'");
|
||||
quote_string_len = strlen (quote_string);
|
||||
break;
|
||||
|
||||
default:
|
||||
quote_string = 0;
|
||||
quote_string_len = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
for (i = 0; ! (argsize == (size_t) -1 ? arg[i] == '\0' : i == argsize); i++)
|
||||
{
|
||||
c = arg[i];
|
||||
|
||||
switch (quoting_style)
|
||||
{
|
||||
case literal_quoting_style:
|
||||
break;
|
||||
|
||||
case shell_quoting_style:
|
||||
case shell_always_quoting_style:
|
||||
if (c == '\'')
|
||||
{
|
||||
STORE ('\'');
|
||||
STORE ('\\');
|
||||
STORE ('\'');
|
||||
}
|
||||
break;
|
||||
|
||||
case c_quoting_style:
|
||||
case escape_quoting_style:
|
||||
case locale_quoting_style:
|
||||
switch (c)
|
||||
{
|
||||
case '?': /* Do not generate trigraphs. */
|
||||
case '\\': goto store_escape;
|
||||
/* Not all C compilers know what \a means. */
|
||||
case 7 : c = 'a'; goto store_escape;
|
||||
case '\b': c = 'b'; goto store_escape;
|
||||
case '\f': c = 'f'; goto store_escape;
|
||||
case '\n': c = 'n'; goto store_escape;
|
||||
case '\r': c = 'r'; goto store_escape;
|
||||
case '\t': c = 't'; goto store_escape;
|
||||
case '\v': c = 'v'; goto store_escape;
|
||||
|
||||
case ' ': break;
|
||||
|
||||
default:
|
||||
if (quote_string_len
|
||||
&& strncmp (arg + i, quote_string, quote_string_len) == 0)
|
||||
goto store_escape;
|
||||
if (!ISGRAPH (c))
|
||||
{
|
||||
STORE ('\\');
|
||||
STORE ('0' + (c >> 6));
|
||||
STORE ('0' + ((c >> 3) & 7));
|
||||
c = '0' + (c & 7);
|
||||
goto store_c;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (! (p->quote_these_too[c / INT_BITS] & (1 << (c % INT_BITS))))
|
||||
goto store_c;
|
||||
|
||||
store_escape:
|
||||
STORE ('\\');
|
||||
}
|
||||
|
||||
store_c:
|
||||
STORE (c);
|
||||
}
|
||||
|
||||
if (quote_string)
|
||||
for (; *quote_string; quote_string++)
|
||||
STORE (*quote_string);
|
||||
|
||||
done:
|
||||
if (len < buffersize)
|
||||
buffer[len] = '\0';
|
||||
return len;
|
||||
return quotearg_buffer_restyled (buffer, buffersize, arg, argsize,
|
||||
p->style, p);
|
||||
}
|
||||
|
||||
/* Use storage slot N to return a quoted version of the string ARG.
|
||||
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 is deliberately declared with type `int'
|
||||
N must be nonnegative. N is deliberately declared with type "int"
|
||||
to allow for future extensions (using negative values). */
|
||||
static char *
|
||||
quotearg_n_options (int n, char const *arg,
|
||||
struct quoting_options const *options)
|
||||
{
|
||||
static unsigned int nslots;
|
||||
static struct slotvec
|
||||
/* Preallocate a slot 0 buffer, so that the caller can always quote
|
||||
one small component of a "memory exhausted" message in slot 0. */
|
||||
static char slot0[256];
|
||||
static unsigned int nslots = 1;
|
||||
struct slotvec
|
||||
{
|
||||
size_t size;
|
||||
char *val;
|
||||
} *slotvec;
|
||||
};
|
||||
static struct slotvec slotvec0 = {sizeof slot0, slot0};
|
||||
static struct slotvec *slotvec = &slotvec0;
|
||||
|
||||
if (nslots <= n)
|
||||
{
|
||||
@@ -339,6 +548,11 @@ quotearg_n_options (int n, char const *arg,
|
||||
size_t s = n1 * sizeof (struct slotvec);
|
||||
if (! (0 < n1 && n1 == s / sizeof (struct slotvec)))
|
||||
abort ();
|
||||
if (slotvec == &slotvec0)
|
||||
{
|
||||
slotvec = (struct slotvec *) xmalloc (sizeof (struct slotvec));
|
||||
*slotvec = slotvec0;
|
||||
}
|
||||
slotvec = (struct slotvec *) xrealloc (slotvec, s);
|
||||
memset (slotvec + nslots, 0, (n1 - nslots) * sizeof (struct slotvec));
|
||||
nslots = n;
|
||||
@@ -352,7 +566,7 @@ quotearg_n_options (int n, char const *arg,
|
||||
if (size <= qsize)
|
||||
{
|
||||
slotvec[n].size = size = qsize + 1;
|
||||
slotvec[n].val = val = xrealloc (val, size);
|
||||
slotvec[n].val = val = xrealloc (val == slot0 ? 0 : val, size);
|
||||
quotearg_buffer (val, size, arg, (size_t) -1, options);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* quotearg.h - quote arguments for output
|
||||
Copyright (C) 1998, 1999 Free Software Foundation, Inc.
|
||||
Copyright (C) 1998, 1999, 2000 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,7 +25,8 @@ enum quoting_style
|
||||
shell_always_quoting_style, /* --quoting-style=shell-always */
|
||||
c_quoting_style, /* --quoting-style=c */
|
||||
escape_quoting_style, /* --quoting-style=escape */
|
||||
locale_quoting_style /* --quoting-style=locale */
|
||||
locale_quoting_style, /* --quoting-style=locale */
|
||||
clocale_quoting_style /* --quoting-style=clocale */
|
||||
};
|
||||
|
||||
/* For now, --quoting-style=literal is the default, but this may change. */
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* GNU's read utmp module.
|
||||
Copyright (C) 1992-1999 Free Software Foundation, Inc.
|
||||
Copyright (C) 1992-2000 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,7 @@
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#if defined(STDC_HEADERS) || defined(HAVE_STRING_H)
|
||||
# include <string.h>
|
||||
@@ -41,11 +42,11 @@ extract_trimmed_name (const STRUCT_UTMP *ut)
|
||||
{
|
||||
char *p, *trimmed_name;
|
||||
|
||||
trimmed_name = xmalloc (sizeof (ut->ut_name) + 1);
|
||||
strncpy (trimmed_name, ut->ut_name, sizeof (ut->ut_name));
|
||||
trimmed_name = xmalloc (sizeof (UT_USER (ut)) + 1);
|
||||
strncpy (trimmed_name, UT_USER (ut), sizeof (UT_USER (ut)));
|
||||
/* Append a trailing space character. Some systems pad names shorter than
|
||||
the maximum with spaces, others pad with NULs. Remove any spaces. */
|
||||
trimmed_name[sizeof (ut->ut_name)] = ' ';
|
||||
trimmed_name[sizeof (UT_USER (ut))] = ' ';
|
||||
p = strchr (trimmed_name, ' ');
|
||||
if (p != NULL)
|
||||
*p = '\0';
|
||||
@@ -57,7 +58,7 @@ extract_trimmed_name (const STRUCT_UTMP *ut)
|
||||
the number of entries, and return zero. If there is any error,
|
||||
return non-zero and don't modify the parameters. */
|
||||
|
||||
#if HAVE_UTMPNAME
|
||||
#ifdef UTMP_NAME_FUNCTION
|
||||
|
||||
int
|
||||
read_utmp (const char *filename, int *n_entries, STRUCT_UTMP **utmp_buf)
|
||||
@@ -129,4 +130,4 @@ read_utmp (const char *filename, int *n_entries, STRUCT_UTMP **utmp_buf)
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif /* HAVE_UTMPNAME */
|
||||
#endif
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Declarations for GNU's read utmp module.
|
||||
Copyright (C) 1992-1999 Free Software Foundation, Inc.
|
||||
Copyright (C) 1992-2000 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
|
||||
@@ -31,21 +31,55 @@
|
||||
# include <sys/types.h>
|
||||
|
||||
# ifdef HAVE_UTMPX_H
|
||||
# ifdef HAVE_UTMP_H
|
||||
/* HPUX 10.20 needs utmp.h, for the definition of e.g., UTMP_FILE. */
|
||||
# include <utmp.h>
|
||||
# endif
|
||||
# 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
|
||||
# ifdef HAVE_UTMPXNAME
|
||||
# define UTMP_NAME_FUNCTION utmpxname
|
||||
# endif
|
||||
# else
|
||||
# include <utmp.h>
|
||||
# if !HAVE_DECL_GETUTENT
|
||||
struct utmp *getutent();
|
||||
# endif
|
||||
# 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
|
||||
# ifdef HAVE_UTMPNAME
|
||||
# define UTMP_NAME_FUNCTION utmpname
|
||||
# endif
|
||||
# endif
|
||||
|
||||
/* Accessor macro for the member named ut_user or ut_name. */
|
||||
# ifdef HAVE_UTMPX_H
|
||||
|
||||
# if HAVE_STRUCT_UTMPX_UT_USER
|
||||
# define UT_USER(Utmp) ((Utmp)->ut_user)
|
||||
# endif
|
||||
# if HAVE_STRUCT_UTMPX_UT_NAME
|
||||
# undef UT_USER
|
||||
# define UT_USER(Utmp) ((Utmp)->ut_name)
|
||||
# endif
|
||||
|
||||
# else
|
||||
|
||||
# if HAVE_STRUCT_UTMP_UT_USER
|
||||
# define UT_USER(Utmp) Utmp->ut_user
|
||||
# endif
|
||||
# if HAVE_STRUCT_UTMP_UT_NAME
|
||||
# undef UT_USER
|
||||
# define UT_USER(Utmp) Utmp->ut_name
|
||||
# endif
|
||||
|
||||
# endif
|
||||
|
||||
typedef struct UTMP_STRUCT_NAME STRUCT_UTMP;
|
||||
|
||||
31
lib/ref-add.sin
Normal file
31
lib/ref-add.sin
Normal file
@@ -0,0 +1,31 @@
|
||||
# Add this package to a list of references stored in a text file.
|
||||
#
|
||||
# Copyright (C) 2000 Free Software Foundation, Inc.
|
||||
#
|
||||
# This program 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, 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
|
||||
# Library General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Library 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 Bruno Haible <haible@clisp.cons.org>.
|
||||
#
|
||||
/^# Packages using this file: / {
|
||||
s/# Packages using this file://
|
||||
ta
|
||||
:a
|
||||
s/ @PACKAGE@ / @PACKAGE@ /
|
||||
tb
|
||||
s/ $/ @PACKAGE@ /
|
||||
:b
|
||||
s/^/# Packages using this file:/
|
||||
}
|
||||
26
lib/ref-del.sin
Normal file
26
lib/ref-del.sin
Normal file
@@ -0,0 +1,26 @@
|
||||
# Remove this package from a list of references stored in a text file.
|
||||
#
|
||||
# Copyright (C) 2000 Free Software Foundation, Inc.
|
||||
#
|
||||
# This program 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, 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
|
||||
# Library General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Library 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 Bruno Haible <haible@clisp.cons.org>.
|
||||
#
|
||||
/^# Packages using this file: / {
|
||||
s/# Packages using this file://
|
||||
s/ @PACKAGE@ / /
|
||||
s/^/# Packages using this file:/
|
||||
}
|
||||
710
lib/regex.c
710
lib/regex.c
@@ -2,7 +2,7 @@
|
||||
version 0.12.
|
||||
(Implements POSIX draft P1003.2/D11.2, except for some of the
|
||||
internationalization features.)
|
||||
Copyright (C) 1993, 94, 95, 96, 97, 98, 99 Free Software Foundation, Inc.
|
||||
Copyright (C) 1993-1999, 2000 Free Software Foundation, Inc.
|
||||
|
||||
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
|
||||
@@ -78,7 +78,12 @@
|
||||
__re_search_2 (bufp, st1, s1, st2, s2, startpos, range, regs, stop)
|
||||
# define re_compile_fastmap(bufp) __re_compile_fastmap (bufp)
|
||||
|
||||
#define btowc __btowc
|
||||
# define btowc __btowc
|
||||
|
||||
/* We are also using some library internals. */
|
||||
# include <locale/localeinfo.h>
|
||||
# include <locale/elem-hash.h>
|
||||
# include <langinfo.h>
|
||||
#endif
|
||||
|
||||
/* This is for other GNU distributions with internationalized messages. */
|
||||
@@ -164,47 +169,15 @@ char *realloc ();
|
||||
# define SWITCH_ENUM_CAST(x) (x)
|
||||
# endif
|
||||
|
||||
/* How many characters in the character set. */
|
||||
# define CHAR_SET_SIZE 256
|
||||
|
||||
# ifdef SYNTAX_TABLE
|
||||
|
||||
extern char *re_syntax_table;
|
||||
|
||||
# else /* not SYNTAX_TABLE */
|
||||
|
||||
static char re_syntax_table[CHAR_SET_SIZE];
|
||||
|
||||
static void
|
||||
init_syntax_once ()
|
||||
{
|
||||
register int c;
|
||||
static int done = 0;
|
||||
|
||||
if (done)
|
||||
return;
|
||||
|
||||
bzero (re_syntax_table, sizeof re_syntax_table);
|
||||
|
||||
for (c = 'a'; c <= 'z'; c++)
|
||||
re_syntax_table[c] = Sword;
|
||||
|
||||
for (c = 'A'; c <= 'Z'; c++)
|
||||
re_syntax_table[c] = Sword;
|
||||
|
||||
for (c = '0'; c <= '9'; c++)
|
||||
re_syntax_table[c] = Sword;
|
||||
|
||||
re_syntax_table['_'] = Sword;
|
||||
|
||||
done = 1;
|
||||
}
|
||||
|
||||
# endif /* not SYNTAX_TABLE */
|
||||
|
||||
# define SYNTAX(c) re_syntax_table[c]
|
||||
|
||||
#endif /* not emacs */
|
||||
|
||||
#if defined _LIBC || HAVE_LIMITS_H
|
||||
# include <limits.h>
|
||||
#endif
|
||||
|
||||
#ifndef MB_LEN_MAX
|
||||
# define MB_LEN_MAX 1
|
||||
#endif
|
||||
|
||||
/* Get the interface, including the syntax bits. */
|
||||
#include <regex.h>
|
||||
@@ -276,6 +249,43 @@ init_syntax_once ()
|
||||
# define SIGN_EXTEND_CHAR(c) ((((unsigned char) (c)) ^ 128) - 128)
|
||||
#endif
|
||||
|
||||
#ifndef emacs
|
||||
/* How many characters in the character set. */
|
||||
# define CHAR_SET_SIZE 256
|
||||
|
||||
# ifdef SYNTAX_TABLE
|
||||
|
||||
extern char *re_syntax_table;
|
||||
|
||||
# else /* not SYNTAX_TABLE */
|
||||
|
||||
static char re_syntax_table[CHAR_SET_SIZE];
|
||||
|
||||
static void
|
||||
init_syntax_once ()
|
||||
{
|
||||
register int c;
|
||||
static int done = 0;
|
||||
|
||||
if (done)
|
||||
return;
|
||||
bzero (re_syntax_table, sizeof re_syntax_table);
|
||||
|
||||
for (c = 0; c < CHAR_SET_SIZE; ++c)
|
||||
if (ISALNUM (c))
|
||||
re_syntax_table[c] = Sword;
|
||||
|
||||
re_syntax_table['_'] = Sword;
|
||||
|
||||
done = 1;
|
||||
}
|
||||
|
||||
# endif /* not SYNTAX_TABLE */
|
||||
|
||||
# define SYNTAX(c) re_syntax_table[(unsigned char) (c)]
|
||||
|
||||
#endif /* emacs */
|
||||
|
||||
/* Should we use malloc or alloca? If REGEX_MALLOC is not defined, we
|
||||
use `alloca' instead of `malloc'. This is because using malloc in
|
||||
re_search* or re_match* could cause memory leaks when C-g is used in
|
||||
@@ -615,7 +625,7 @@ extract_number_and_incr (destination, source)
|
||||
/* It is useful to test things that ``must'' be true when debugging. */
|
||||
# include <assert.h>
|
||||
|
||||
static int debug = 0;
|
||||
static int debug;
|
||||
|
||||
# define DEBUG_STATEMENT(e) e
|
||||
# define DEBUG_PRINT1(x) if (debug) printf (x)
|
||||
@@ -681,7 +691,11 @@ print_partial_compiled_pattern (start, end)
|
||||
/* Loop over pattern commands. */
|
||||
while (p < pend)
|
||||
{
|
||||
printf ("%d:\t", p - start);
|
||||
#ifdef _LIBC
|
||||
printf ("%t:\t", p - start);
|
||||
#else
|
||||
printf ("%ld:\t", (long int) (p - start));
|
||||
#endif
|
||||
|
||||
switch ((re_opcode_t) *p++)
|
||||
{
|
||||
@@ -771,17 +785,30 @@ print_partial_compiled_pattern (start, end)
|
||||
|
||||
case on_failure_jump:
|
||||
extract_number_and_incr (&mcnt, &p);
|
||||
printf ("/on_failure_jump to %d", p + mcnt - start);
|
||||
#ifdef _LIBC
|
||||
printf ("/on_failure_jump to %t", p + mcnt - start);
|
||||
#else
|
||||
printf ("/on_failure_jump to %ld", (long int) (p + mcnt - start));
|
||||
#endif
|
||||
break;
|
||||
|
||||
case on_failure_keep_string_jump:
|
||||
extract_number_and_incr (&mcnt, &p);
|
||||
printf ("/on_failure_keep_string_jump to %d", p + mcnt - start);
|
||||
#ifdef _LIBC
|
||||
printf ("/on_failure_keep_string_jump to %t", p + mcnt - start);
|
||||
#else
|
||||
printf ("/on_failure_keep_string_jump to %ld",
|
||||
(long int) (p + mcnt - start));
|
||||
#endif
|
||||
break;
|
||||
|
||||
case dummy_failure_jump:
|
||||
extract_number_and_incr (&mcnt, &p);
|
||||
printf ("/dummy_failure_jump to %d", p + mcnt - start);
|
||||
#ifdef _LIBC
|
||||
printf ("/dummy_failure_jump to %t", p + mcnt - start);
|
||||
#else
|
||||
printf ("/dummy_failure_jump to %ld", (long int) (p + mcnt - start));
|
||||
#endif
|
||||
break;
|
||||
|
||||
case push_dummy_failure:
|
||||
@@ -790,29 +817,50 @@ print_partial_compiled_pattern (start, end)
|
||||
|
||||
case maybe_pop_jump:
|
||||
extract_number_and_incr (&mcnt, &p);
|
||||
printf ("/maybe_pop_jump to %d", p + mcnt - start);
|
||||
#ifdef _LIBC
|
||||
printf ("/maybe_pop_jump to %t", p + mcnt - start);
|
||||
#else
|
||||
printf ("/maybe_pop_jump to %ld", (long int) (p + mcnt - start));
|
||||
#endif
|
||||
break;
|
||||
|
||||
case pop_failure_jump:
|
||||
extract_number_and_incr (&mcnt, &p);
|
||||
printf ("/pop_failure_jump to %d", p + mcnt - start);
|
||||
#ifdef _LIBC
|
||||
printf ("/pop_failure_jump to %t", p + mcnt - start);
|
||||
#else
|
||||
printf ("/pop_failure_jump to %ld", (long int) (p + mcnt - start));
|
||||
#endif
|
||||
break;
|
||||
|
||||
case jump_past_alt:
|
||||
extract_number_and_incr (&mcnt, &p);
|
||||
printf ("/jump_past_alt to %d", p + mcnt - start);
|
||||
#ifdef _LIBC
|
||||
printf ("/jump_past_alt to %t", p + mcnt - start);
|
||||
#else
|
||||
printf ("/jump_past_alt to %ld", (long int) (p + mcnt - start));
|
||||
#endif
|
||||
break;
|
||||
|
||||
case jump:
|
||||
extract_number_and_incr (&mcnt, &p);
|
||||
printf ("/jump to %d", p + mcnt - start);
|
||||
#ifdef _LIBC
|
||||
printf ("/jump to %t", p + mcnt - start);
|
||||
#else
|
||||
printf ("/jump to %ld", (long int) (p + mcnt - start));
|
||||
#endif
|
||||
break;
|
||||
|
||||
case succeed_n:
|
||||
extract_number_and_incr (&mcnt, &p);
|
||||
p1 = p + mcnt;
|
||||
extract_number_and_incr (&mcnt2, &p);
|
||||
printf ("/succeed_n to %d, %d times", p1 - start, mcnt2);
|
||||
#ifdef _LIBC
|
||||
printf ("/succeed_n to %t, %d times", p1 - start, mcnt2);
|
||||
#else
|
||||
printf ("/succeed_n to %ld, %d times",
|
||||
(long int) (p1 - start), mcnt2);
|
||||
#endif
|
||||
break;
|
||||
|
||||
case jump_n:
|
||||
@@ -826,7 +874,12 @@ print_partial_compiled_pattern (start, end)
|
||||
extract_number_and_incr (&mcnt, &p);
|
||||
p1 = p + mcnt;
|
||||
extract_number_and_incr (&mcnt2, &p);
|
||||
printf ("/set_number_at location %d to %d", p1 - start, mcnt2);
|
||||
#ifdef _LIBC
|
||||
printf ("/set_number_at location %t to %d", p1 - start, mcnt2);
|
||||
#else
|
||||
printf ("/set_number_at location %ld to %d",
|
||||
(long int) (p1 - start), mcnt2);
|
||||
#endif
|
||||
break;
|
||||
|
||||
case wordbound:
|
||||
@@ -893,7 +946,11 @@ print_partial_compiled_pattern (start, end)
|
||||
putchar ('\n');
|
||||
}
|
||||
|
||||
printf ("%d:\tend of pattern.\n", p - start);
|
||||
#ifdef _LIBC
|
||||
printf ("%t:\tend of pattern.\n", p - start);
|
||||
#else
|
||||
printf ("%ld:\tend of pattern.\n", (long int) (p - start));
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@@ -913,7 +970,11 @@ print_compiled_pattern (bufp)
|
||||
print_fastmap (bufp->fastmap);
|
||||
}
|
||||
|
||||
printf ("re_nsub: %d\t", bufp->re_nsub);
|
||||
#ifdef _LIBC
|
||||
printf ("re_nsub: %Zd\t", bufp->re_nsub);
|
||||
#else
|
||||
printf ("re_nsub: %ld\t", (long int) bufp->re_nsub);
|
||||
#endif
|
||||
printf ("regs_alloc: %d\t", bufp->regs_allocated);
|
||||
printf ("can_be_null: %d\t", bufp->can_be_null);
|
||||
printf ("newline_anchor: %d\n", bufp->newline_anchor);
|
||||
@@ -1013,25 +1074,79 @@ weak_alias (__re_set_syntax, re_set_syntax)
|
||||
POSIX doesn't require that we do anything for REG_NOERROR,
|
||||
but why not be nice? */
|
||||
|
||||
static const char *re_error_msgid[] =
|
||||
static const char re_error_msgid[] =
|
||||
{
|
||||
gettext_noop ("Success"), /* REG_NOERROR */
|
||||
gettext_noop ("No match"), /* REG_NOMATCH */
|
||||
gettext_noop ("Invalid regular expression"), /* REG_BADPAT */
|
||||
gettext_noop ("Invalid collation character"), /* REG_ECOLLATE */
|
||||
gettext_noop ("Invalid character class name"), /* REG_ECTYPE */
|
||||
gettext_noop ("Trailing backslash"), /* REG_EESCAPE */
|
||||
gettext_noop ("Invalid back reference"), /* REG_ESUBREG */
|
||||
gettext_noop ("Unmatched [ or [^"), /* REG_EBRACK */
|
||||
gettext_noop ("Unmatched ( or \\("), /* REG_EPAREN */
|
||||
gettext_noop ("Unmatched \\{"), /* REG_EBRACE */
|
||||
gettext_noop ("Invalid content of \\{\\}"), /* REG_BADBR */
|
||||
gettext_noop ("Invalid range end"), /* REG_ERANGE */
|
||||
gettext_noop ("Memory exhausted"), /* REG_ESPACE */
|
||||
gettext_noop ("Invalid preceding regular expression"), /* REG_BADRPT */
|
||||
gettext_noop ("Premature end of regular expression"), /* REG_EEND */
|
||||
gettext_noop ("Regular expression too big"), /* REG_ESIZE */
|
||||
gettext_noop ("Unmatched ) or \\)"), /* REG_ERPAREN */
|
||||
#define REG_NOERROR_IDX 0
|
||||
gettext_noop ("Success") /* REG_NOERROR */
|
||||
"\0"
|
||||
#define REG_NOMATCH_IDX (REG_NOERROR_IDX + sizeof "Success")
|
||||
gettext_noop ("No match") /* REG_NOMATCH */
|
||||
"\0"
|
||||
#define REG_BADPAT_IDX (REG_NOMATCH_IDX + sizeof "No match")
|
||||
gettext_noop ("Invalid regular expression") /* REG_BADPAT */
|
||||
"\0"
|
||||
#define REG_ECOLLATE_IDX (REG_BADPAT_IDX + sizeof "Invalid regular expression")
|
||||
gettext_noop ("Invalid collation character") /* REG_ECOLLATE */
|
||||
"\0"
|
||||
#define REG_ECTYPE_IDX (REG_ECOLLATE_IDX + sizeof "Invalid collation character")
|
||||
gettext_noop ("Invalid character class name") /* REG_ECTYPE */
|
||||
"\0"
|
||||
#define REG_EESCAPE_IDX (REG_ECTYPE_IDX + sizeof "Invalid character class name")
|
||||
gettext_noop ("Trailing backslash") /* REG_EESCAPE */
|
||||
"\0"
|
||||
#define REG_ESUBREG_IDX (REG_EESCAPE_IDX + sizeof "Trailing backslash")
|
||||
gettext_noop ("Invalid back reference") /* REG_ESUBREG */
|
||||
"\0"
|
||||
#define REG_EBRACK_IDX (REG_ESUBREG_IDX + sizeof "Invalid back reference")
|
||||
gettext_noop ("Unmatched [ or [^") /* REG_EBRACK */
|
||||
"\0"
|
||||
#define REG_EPAREN_IDX (REG_EBRACK_IDX + sizeof "Unmatched [ or [^")
|
||||
gettext_noop ("Unmatched ( or \\(") /* REG_EPAREN */
|
||||
"\0"
|
||||
#define REG_EBRACE_IDX (REG_EPAREN_IDX + sizeof "Unmatched ( or \\(")
|
||||
gettext_noop ("Unmatched \\{") /* REG_EBRACE */
|
||||
"\0"
|
||||
#define REG_BADBR_IDX (REG_EBRACE_IDX + sizeof "Unmatched \\{")
|
||||
gettext_noop ("Invalid content of \\{\\}") /* REG_BADBR */
|
||||
"\0"
|
||||
#define REG_ERANGE_IDX (REG_BADBR_IDX + sizeof "Invalid content of \\{\\}")
|
||||
gettext_noop ("Invalid range end") /* REG_ERANGE */
|
||||
"\0"
|
||||
#define REG_ESPACE_IDX (REG_ERANGE_IDX + sizeof "Invalid range end")
|
||||
gettext_noop ("Memory exhausted") /* REG_ESPACE */
|
||||
"\0"
|
||||
#define REG_BADRPT_IDX (REG_ESPACE_IDX + sizeof "Memory exhausted")
|
||||
gettext_noop ("Invalid preceding regular expression") /* REG_BADRPT */
|
||||
"\0"
|
||||
#define REG_EEND_IDX (REG_BADRPT_IDX + sizeof "Invalid preceding regular expression")
|
||||
gettext_noop ("Premature end of regular expression") /* REG_EEND */
|
||||
"\0"
|
||||
#define REG_ESIZE_IDX (REG_EEND_IDX + sizeof "Premature end of regular expression")
|
||||
gettext_noop ("Regular expression too big") /* REG_ESIZE */
|
||||
"\0"
|
||||
#define REG_ERPAREN_IDX (REG_ESIZE_IDX + sizeof "Regular expression too big")
|
||||
gettext_noop ("Unmatched ) or \\)") /* REG_ERPAREN */
|
||||
};
|
||||
|
||||
static const size_t re_error_msgid_idx[] =
|
||||
{
|
||||
REG_NOERROR_IDX,
|
||||
REG_NOMATCH_IDX,
|
||||
REG_BADPAT_IDX,
|
||||
REG_ECOLLATE_IDX,
|
||||
REG_ECTYPE_IDX,
|
||||
REG_EESCAPE_IDX,
|
||||
REG_ESUBREG_IDX,
|
||||
REG_EBRACK_IDX,
|
||||
REG_EPAREN_IDX,
|
||||
REG_EBRACE_IDX,
|
||||
REG_BADBR_IDX,
|
||||
REG_ERANGE_IDX,
|
||||
REG_ESPACE_IDX,
|
||||
REG_BADRPT_IDX,
|
||||
REG_EEND_IDX,
|
||||
REG_ESIZE_IDX,
|
||||
REG_ERPAREN_IDX
|
||||
};
|
||||
|
||||
/* Avoiding alloca during matching, to placate r_alloc. */
|
||||
@@ -1514,7 +1629,8 @@ static boolean at_begline_loc_p _RE_ARGS ((const char *pattern, const char *p,
|
||||
reg_syntax_t syntax));
|
||||
static boolean at_endline_loc_p _RE_ARGS ((const char *p, const char *pend,
|
||||
reg_syntax_t syntax));
|
||||
static reg_errcode_t compile_range _RE_ARGS ((const char **p_ptr,
|
||||
static reg_errcode_t compile_range _RE_ARGS ((unsigned int range_start,
|
||||
const char **p_ptr,
|
||||
const char *pend,
|
||||
char *translate,
|
||||
reg_syntax_t syntax,
|
||||
@@ -1631,29 +1747,51 @@ static reg_errcode_t compile_range _RE_ARGS ((const char **p_ptr,
|
||||
reset the pointers that pointed into the old block to point to the
|
||||
correct places in the new one. If extending the buffer results in it
|
||||
being larger than MAX_BUF_SIZE, then flag memory exhausted. */
|
||||
#if __BOUNDED_POINTERS__
|
||||
# define SET_HIGH_BOUND(P) (__ptrhigh (P) = __ptrlow (P) + bufp->allocated)
|
||||
# define MOVE_BUFFER_POINTER(P) \
|
||||
(__ptrlow (P) += incr, SET_HIGH_BOUND (P), __ptrvalue (P) += incr)
|
||||
# define ELSE_EXTEND_BUFFER_HIGH_BOUND \
|
||||
else \
|
||||
{ \
|
||||
SET_HIGH_BOUND (b); \
|
||||
SET_HIGH_BOUND (begalt); \
|
||||
if (fixup_alt_jump) \
|
||||
SET_HIGH_BOUND (fixup_alt_jump); \
|
||||
if (laststart) \
|
||||
SET_HIGH_BOUND (laststart); \
|
||||
if (pending_exact) \
|
||||
SET_HIGH_BOUND (pending_exact); \
|
||||
}
|
||||
#else
|
||||
# define MOVE_BUFFER_POINTER(P) (P) += incr
|
||||
# define ELSE_EXTEND_BUFFER_HIGH_BOUND
|
||||
#endif
|
||||
#define EXTEND_BUFFER() \
|
||||
do { \
|
||||
do { \
|
||||
unsigned char *old_buffer = bufp->buffer; \
|
||||
if (bufp->allocated == MAX_BUF_SIZE) \
|
||||
if (bufp->allocated == MAX_BUF_SIZE) \
|
||||
return REG_ESIZE; \
|
||||
bufp->allocated <<= 1; \
|
||||
if (bufp->allocated > MAX_BUF_SIZE) \
|
||||
bufp->allocated = MAX_BUF_SIZE; \
|
||||
bufp->allocated = MAX_BUF_SIZE; \
|
||||
bufp->buffer = (unsigned char *) REALLOC (bufp->buffer, bufp->allocated);\
|
||||
if (bufp->buffer == NULL) \
|
||||
return REG_ESPACE; \
|
||||
/* If the buffer moved, move all the pointers into it. */ \
|
||||
if (old_buffer != bufp->buffer) \
|
||||
{ \
|
||||
b = (b - old_buffer) + bufp->buffer; \
|
||||
begalt = (begalt - old_buffer) + bufp->buffer; \
|
||||
if (fixup_alt_jump) \
|
||||
fixup_alt_jump = (fixup_alt_jump - old_buffer) + bufp->buffer;\
|
||||
if (laststart) \
|
||||
laststart = (laststart - old_buffer) + bufp->buffer; \
|
||||
if (pending_exact) \
|
||||
pending_exact = (pending_exact - old_buffer) + bufp->buffer; \
|
||||
int incr = bufp->buffer - old_buffer; \
|
||||
MOVE_BUFFER_POINTER (b); \
|
||||
MOVE_BUFFER_POINTER (begalt); \
|
||||
if (fixup_alt_jump) \
|
||||
MOVE_BUFFER_POINTER (fixup_alt_jump); \
|
||||
if (laststart) \
|
||||
MOVE_BUFFER_POINTER (laststart); \
|
||||
if (pending_exact) \
|
||||
MOVE_BUFFER_POINTER (pending_exact); \
|
||||
} \
|
||||
ELSE_EXTEND_BUFFER_HIGH_BOUND \
|
||||
} while (0)
|
||||
|
||||
|
||||
@@ -1712,7 +1850,7 @@ typedef struct
|
||||
{ if (p != pend) \
|
||||
{ \
|
||||
PATFETCH (c); \
|
||||
while (ISDIGIT (c)) \
|
||||
while ('0' <= c && c <= '9') \
|
||||
{ \
|
||||
if (num < 0) \
|
||||
num = 0; \
|
||||
@@ -2118,6 +2256,7 @@ regex_compile (pattern, size, syntax, bufp)
|
||||
case '[':
|
||||
{
|
||||
boolean had_char_class = false;
|
||||
unsigned int range_start = 0xffffffff;
|
||||
|
||||
if (p == pend) FREE_STACK_RETURN (REG_EBRACK);
|
||||
|
||||
@@ -2161,6 +2300,7 @@ regex_compile (pattern, size, syntax, bufp)
|
||||
|
||||
PATFETCH (c1);
|
||||
SET_LIST_BIT (c1);
|
||||
range_start = c1;
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -2185,8 +2325,10 @@ regex_compile (pattern, size, syntax, bufp)
|
||||
&& *p != ']')
|
||||
{
|
||||
reg_errcode_t ret
|
||||
= compile_range (&p, pend, translate, syntax, b);
|
||||
= compile_range (range_start, &p, pend, translate,
|
||||
syntax, b);
|
||||
if (ret != REG_NOERROR) FREE_STACK_RETURN (ret);
|
||||
range_start = 0xffffffff;
|
||||
}
|
||||
|
||||
else if (p[0] == '-' && p[1] != ']')
|
||||
@@ -2196,8 +2338,9 @@ regex_compile (pattern, size, syntax, bufp)
|
||||
/* Move past the `-'. */
|
||||
PATFETCH (c1);
|
||||
|
||||
ret = compile_range (&p, pend, translate, syntax, b);
|
||||
ret = compile_range (c, &p, pend, translate, syntax, b);
|
||||
if (ret != REG_NOERROR) FREE_STACK_RETURN (ret);
|
||||
range_start = 0xffffffff;
|
||||
}
|
||||
|
||||
/* See if we're at the beginning of a possible character
|
||||
@@ -2320,13 +2463,289 @@ regex_compile (pattern, size, syntax, bufp)
|
||||
PATUNFETCH;
|
||||
SET_LIST_BIT ('[');
|
||||
SET_LIST_BIT (':');
|
||||
range_start = ':';
|
||||
had_char_class = false;
|
||||
}
|
||||
}
|
||||
else if (syntax & RE_CHAR_CLASSES && c == '[' && *p == '=')
|
||||
{
|
||||
unsigned char str[MB_LEN_MAX + 1];
|
||||
#ifdef _LIBC
|
||||
uint32_t nrules =
|
||||
_NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES);
|
||||
#endif
|
||||
|
||||
PATFETCH (c);
|
||||
c1 = 0;
|
||||
|
||||
/* If pattern is `[[='. */
|
||||
if (p == pend) FREE_STACK_RETURN (REG_EBRACK);
|
||||
|
||||
for (;;)
|
||||
{
|
||||
PATFETCH (c);
|
||||
if ((c == '=' && *p == ']') || p == pend)
|
||||
break;
|
||||
if (c1 < MB_LEN_MAX)
|
||||
str[c1++] = c;
|
||||
else
|
||||
/* This is in any case an invalid class name. */
|
||||
str[0] = '\0';
|
||||
}
|
||||
str[c1] = '\0';
|
||||
|
||||
if (c == '=' && *p == ']' && str[0] != '\0')
|
||||
{
|
||||
/* If we have no collation data we use the default
|
||||
collation in which each character is in a class
|
||||
by itself. It also means that ASCII is the
|
||||
character set and therefore we cannot have character
|
||||
with more than one byte in the multibyte
|
||||
representation. */
|
||||
#ifdef _LIBC
|
||||
if (nrules == 0)
|
||||
#endif
|
||||
{
|
||||
if (c1 != 1)
|
||||
FREE_STACK_RETURN (REG_ECOLLATE);
|
||||
|
||||
/* Throw away the ] at the end of the equivalence
|
||||
class. */
|
||||
PATFETCH (c);
|
||||
|
||||
/* Set the bit for the character. */
|
||||
SET_LIST_BIT (str[0]);
|
||||
}
|
||||
#ifdef _LIBC
|
||||
else
|
||||
{
|
||||
/* Try to match the byte sequence in `str' against
|
||||
those known to the collate implementation.
|
||||
First find out whether the bytes in `str' are
|
||||
actually from exactly one character. */
|
||||
const int32_t *table;
|
||||
const unsigned char *weights;
|
||||
const unsigned char *extra;
|
||||
const int32_t *indirect;
|
||||
int32_t idx;
|
||||
const unsigned char *cp = str;
|
||||
int ch;
|
||||
|
||||
/* This #include defines a local function! */
|
||||
# include <locale/weight.h>
|
||||
|
||||
table = (const int32_t *)
|
||||
_NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB);
|
||||
weights = (const unsigned char *)
|
||||
_NL_CURRENT (LC_COLLATE, _NL_COLLATE_WEIGHTMB);
|
||||
extra = (const unsigned char *)
|
||||
_NL_CURRENT (LC_COLLATE, _NL_COLLATE_EXTRAMB);
|
||||
indirect = (const int32_t *)
|
||||
_NL_CURRENT (LC_COLLATE, _NL_COLLATE_INDIRECTMB);
|
||||
|
||||
idx = findidx (&cp);
|
||||
if (idx == 0 || cp < str + c1)
|
||||
/* This is no valid character. */
|
||||
FREE_STACK_RETURN (REG_ECOLLATE);
|
||||
|
||||
/* Throw away the ] at the end of the equivalence
|
||||
class. */
|
||||
PATFETCH (c);
|
||||
|
||||
/* Now we have to go throught the whole table
|
||||
and find all characters which have the same
|
||||
first level weight.
|
||||
|
||||
XXX Note that this is not entirely correct.
|
||||
we would have to match multibyte sequences
|
||||
but this is not possible with the current
|
||||
implementation. */
|
||||
for (ch = 1; ch < 256; ++ch)
|
||||
/* XXX This test would have to be changed if we
|
||||
would allow matching multibyte sequences. */
|
||||
if (table[ch] > 0)
|
||||
{
|
||||
int32_t idx2 = table[ch];
|
||||
size_t len = weights[idx2];
|
||||
|
||||
/* Test whether the lenghts match. */
|
||||
if (weights[idx] == len)
|
||||
{
|
||||
/* They do. New compare the bytes of
|
||||
the weight. */
|
||||
size_t cnt = 0;
|
||||
|
||||
while (cnt < len
|
||||
&& (weights[idx + 1 + cnt]
|
||||
== weights[idx2 + 1 + cnt]))
|
||||
++len;
|
||||
|
||||
if (cnt == len)
|
||||
/* They match. Mark the character as
|
||||
acceptable. */
|
||||
SET_LIST_BIT (ch);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
had_char_class = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
c1++;
|
||||
while (c1--)
|
||||
PATUNFETCH;
|
||||
SET_LIST_BIT ('[');
|
||||
SET_LIST_BIT ('=');
|
||||
range_start = '=';
|
||||
had_char_class = false;
|
||||
}
|
||||
}
|
||||
else if (syntax & RE_CHAR_CLASSES && c == '[' && *p == '.')
|
||||
{
|
||||
unsigned char str[128]; /* Should be large enough. */
|
||||
#ifdef _LIBC
|
||||
uint32_t nrules =
|
||||
_NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES);
|
||||
#endif
|
||||
|
||||
PATFETCH (c);
|
||||
c1 = 0;
|
||||
|
||||
/* If pattern is `[[='. */
|
||||
if (p == pend) FREE_STACK_RETURN (REG_EBRACK);
|
||||
|
||||
for (;;)
|
||||
{
|
||||
PATFETCH (c);
|
||||
if ((c == '.' && *p == ']') || p == pend)
|
||||
break;
|
||||
if (c1 < sizeof (str))
|
||||
str[c1++] = c;
|
||||
else
|
||||
/* This is in any case an invalid class name. */
|
||||
str[0] = '\0';
|
||||
}
|
||||
str[c1] = '\0';
|
||||
|
||||
if (c == '.' && *p == ']' && str[0] != '\0')
|
||||
{
|
||||
/* If we have no collation data we use the default
|
||||
collation in which each character is the name
|
||||
for its own class which contains only the one
|
||||
character. It also means that ASCII is the
|
||||
character set and therefore we cannot have character
|
||||
with more than one byte in the multibyte
|
||||
representation. */
|
||||
#ifdef _LIBC
|
||||
if (nrules == 0)
|
||||
#endif
|
||||
{
|
||||
if (c1 != 1)
|
||||
FREE_STACK_RETURN (REG_ECOLLATE);
|
||||
|
||||
/* Throw away the ] at the end of the equivalence
|
||||
class. */
|
||||
PATFETCH (c);
|
||||
|
||||
/* Set the bit for the character. */
|
||||
SET_LIST_BIT (str[0]);
|
||||
range_start = ((const unsigned char *) str)[0];
|
||||
}
|
||||
#ifdef _LIBC
|
||||
else
|
||||
{
|
||||
/* Try to match the byte sequence in `str' against
|
||||
those known to the collate implementation.
|
||||
First find out whether the bytes in `str' are
|
||||
actually from exactly one character. */
|
||||
int32_t table_size;
|
||||
const int32_t *symb_table;
|
||||
const unsigned char *extra;
|
||||
int32_t idx;
|
||||
int32_t elem;
|
||||
int32_t second;
|
||||
int32_t hash;
|
||||
|
||||
table_size =
|
||||
_NL_CURRENT_WORD (LC_COLLATE,
|
||||
_NL_COLLATE_SYMB_HASH_SIZEMB);
|
||||
symb_table = (const int32_t *)
|
||||
_NL_CURRENT (LC_COLLATE,
|
||||
_NL_COLLATE_SYMB_TABLEMB);
|
||||
extra = (const unsigned char *)
|
||||
_NL_CURRENT (LC_COLLATE,
|
||||
_NL_COLLATE_SYMB_EXTRAMB);
|
||||
|
||||
/* Locate the character in the hashing table. */
|
||||
hash = elem_hash (str, c1);
|
||||
|
||||
idx = 0;
|
||||
elem = hash % table_size;
|
||||
second = hash % (table_size - 2);
|
||||
while (symb_table[2 * elem] != 0)
|
||||
{
|
||||
/* First compare the hashing value. */
|
||||
if (symb_table[2 * elem] == hash
|
||||
&& c1 == extra[symb_table[2 * elem + 1]]
|
||||
&& memcmp (str,
|
||||
&extra[symb_table[2 * elem + 1]
|
||||
+ 1],
|
||||
c1) == 0)
|
||||
{
|
||||
/* Yep, this is the entry. */
|
||||
idx = symb_table[2 * elem + 1];
|
||||
idx += 1 + extra[idx];
|
||||
break;
|
||||
}
|
||||
|
||||
/* Next entry. */
|
||||
elem += second;
|
||||
}
|
||||
|
||||
if (symb_table[2 * elem] == 0)
|
||||
/* This is no valid character. */
|
||||
FREE_STACK_RETURN (REG_ECOLLATE);
|
||||
|
||||
/* Throw away the ] at the end of the equivalence
|
||||
class. */
|
||||
PATFETCH (c);
|
||||
|
||||
/* Now add the multibyte character(s) we found
|
||||
to the acceptabed list.
|
||||
|
||||
XXX Note that this is not entirely correct.
|
||||
we would have to match multibyte sequences
|
||||
but this is not possible with the current
|
||||
implementation. Also, we have to match
|
||||
collating symbols, which expand to more than
|
||||
one file, as a whole and not allow the
|
||||
individual bytes. */
|
||||
c1 = extra[idx++];
|
||||
if (c1 == 1)
|
||||
range_start = extra[idx];
|
||||
while (c1-- > 0)
|
||||
SET_LIST_BIT (extra[idx++]);
|
||||
}
|
||||
#endif
|
||||
had_char_class = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
c1++;
|
||||
while (c1--)
|
||||
PATUNFETCH;
|
||||
SET_LIST_BIT ('[');
|
||||
SET_LIST_BIT ('.');
|
||||
range_start = '.';
|
||||
had_char_class = false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
had_char_class = false;
|
||||
SET_LIST_BIT (c);
|
||||
range_start = c;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2553,8 +2972,7 @@ regex_compile (pattern, size, syntax, bufp)
|
||||
if (!(syntax & RE_INTERVALS)
|
||||
/* If we're at `\{' and it's not the open-interval
|
||||
operator. */
|
||||
|| ((syntax & RE_INTERVALS) && (syntax & RE_NO_BK_BRACES))
|
||||
|| (p - 2 == pattern && p == pend))
|
||||
|| (syntax & RE_NO_BK_BRACES))
|
||||
goto normal_backslash;
|
||||
|
||||
handle_interval:
|
||||
@@ -2568,7 +2986,7 @@ regex_compile (pattern, size, syntax, bufp)
|
||||
|
||||
if (p == pend)
|
||||
{
|
||||
if (syntax & RE_NO_BK_BRACES)
|
||||
if (!(syntax & RE_INTERVALS) && (syntax & RE_NO_BK_BRACES))
|
||||
goto unfetch_interval;
|
||||
else
|
||||
FREE_STACK_RETURN (REG_EBRACE);
|
||||
@@ -2579,7 +2997,12 @@ regex_compile (pattern, size, syntax, bufp)
|
||||
if (c == ',')
|
||||
{
|
||||
GET_UNSIGNED_NUMBER (upper_bound);
|
||||
if (upper_bound < 0) upper_bound = RE_DUP_MAX;
|
||||
if ((!(syntax & RE_NO_BK_BRACES) && c != '\\')
|
||||
|| ((syntax & RE_NO_BK_BRACES) && c != '}'))
|
||||
FREE_STACK_RETURN (REG_BADBR);
|
||||
|
||||
if (upper_bound < 0)
|
||||
upper_bound = RE_DUP_MAX;
|
||||
}
|
||||
else
|
||||
/* Interval such as `{1}' => match exactly once. */
|
||||
@@ -2588,7 +3011,7 @@ regex_compile (pattern, size, syntax, bufp)
|
||||
if (lower_bound < 0 || upper_bound > RE_DUP_MAX
|
||||
|| lower_bound > upper_bound)
|
||||
{
|
||||
if (syntax & RE_NO_BK_BRACES)
|
||||
if (!(syntax & RE_INTERVALS) && (syntax & RE_NO_BK_BRACES))
|
||||
goto unfetch_interval;
|
||||
else
|
||||
FREE_STACK_RETURN (REG_BADBR);
|
||||
@@ -2603,7 +3026,7 @@ regex_compile (pattern, size, syntax, bufp)
|
||||
|
||||
if (c != '}')
|
||||
{
|
||||
if (syntax & RE_NO_BK_BRACES)
|
||||
if (!(syntax & RE_INTERVALS) && (syntax & RE_NO_BK_BRACES))
|
||||
goto unfetch_interval;
|
||||
else
|
||||
FREE_STACK_RETURN (REG_BADBR);
|
||||
@@ -3076,49 +3499,53 @@ group_in_compile_stack (compile_stack, regnum)
|
||||
`regex_compile' itself. */
|
||||
|
||||
static reg_errcode_t
|
||||
compile_range (p_ptr, pend, translate, syntax, b)
|
||||
const char **p_ptr, *pend;
|
||||
RE_TRANSLATE_TYPE translate;
|
||||
reg_syntax_t syntax;
|
||||
unsigned char *b;
|
||||
compile_range (range_start_char, p_ptr, pend, translate, syntax, b)
|
||||
unsigned int range_start_char;
|
||||
const char **p_ptr, *pend;
|
||||
RE_TRANSLATE_TYPE translate;
|
||||
reg_syntax_t syntax;
|
||||
unsigned char *b;
|
||||
{
|
||||
unsigned this_char;
|
||||
|
||||
const char *p = *p_ptr;
|
||||
unsigned int range_start, range_end;
|
||||
reg_errcode_t ret;
|
||||
char range_start[2];
|
||||
char range_end[2];
|
||||
char ch[2];
|
||||
|
||||
if (p == pend)
|
||||
return REG_ERANGE;
|
||||
|
||||
/* Even though the pattern is a signed `char *', we need to fetch
|
||||
with unsigned char *'s; if the high bit of the pattern character
|
||||
is set, the range endpoints will be negative if we fetch using a
|
||||
signed char *.
|
||||
|
||||
We also want to fetch the endpoints without translating them; the
|
||||
/* Fetch the endpoints without translating them; the
|
||||
appropriate translation is done in the bit-setting loop below. */
|
||||
/* The SVR4 compiler on the 3B2 had trouble with unsigned const char *. */
|
||||
range_start = ((const unsigned char *) p)[-2];
|
||||
range_end = ((const unsigned char *) p)[0];
|
||||
range_start[0] = range_start_char;
|
||||
range_start[1] = '\0';
|
||||
range_end[0] = p[0];
|
||||
range_end[1] = '\0';
|
||||
|
||||
/* Have to increment the pointer into the pattern string, so the
|
||||
caller isn't still at the ending character. */
|
||||
(*p_ptr)++;
|
||||
|
||||
/* If the start is after the end, the range is empty. */
|
||||
if (range_start > range_end)
|
||||
return syntax & RE_NO_EMPTY_RANGES ? REG_ERANGE : REG_NOERROR;
|
||||
/* Report an error if the range is empty and the syntax prohibits this. */
|
||||
ret = syntax & RE_NO_EMPTY_RANGES ? REG_ERANGE : REG_NOERROR;
|
||||
|
||||
/* Here we see why `this_char' has to be larger than an `unsigned
|
||||
char' -- the range is inclusive, so if `range_end' == 0xff
|
||||
(assuming 8-bit characters), we would otherwise go into an infinite
|
||||
loop, since all characters <= 0xff. */
|
||||
for (this_char = range_start; this_char <= range_end; this_char++)
|
||||
char' -- we would otherwise go into an infinite loop, since all
|
||||
characters <= 0xff. */
|
||||
ch[1] = '\0';
|
||||
for (this_char = 0; this_char <= (unsigned char) -1; ++this_char)
|
||||
{
|
||||
SET_LIST_BIT (TRANSLATE (this_char));
|
||||
ch[0] = this_char;
|
||||
if (strcoll (range_start, ch) <= 0 && strcoll (ch, range_end) <= 0)
|
||||
{
|
||||
SET_LIST_BIT (TRANSLATE (this_char));
|
||||
ret = REG_NOERROR;
|
||||
}
|
||||
}
|
||||
|
||||
return REG_NOERROR;
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* re_compile_fastmap computes a ``fastmap'' for the compiled pattern in
|
||||
@@ -3848,7 +4275,7 @@ re_match_2_internal (bufp, string1, size1, string2, size2, pos, regs, stop)
|
||||
fail_stack_type fail_stack;
|
||||
#endif
|
||||
#ifdef DEBUG
|
||||
static unsigned failure_id = 0;
|
||||
static unsigned failure_id;
|
||||
unsigned nfailure_points_pushed = 0, nfailure_points_popped = 0;
|
||||
#endif
|
||||
|
||||
@@ -4779,26 +5206,15 @@ re_match_2_internal (bufp, string1, size1, string2, size2, pos, regs, stop)
|
||||
}
|
||||
else if ((re_opcode_t) *p2 == charset)
|
||||
{
|
||||
#ifdef DEBUG
|
||||
register unsigned char c
|
||||
= *p2 == (unsigned char) endline ? '\n' : p2[2];
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
/* We win if the first character of the loop is not part
|
||||
of the charset. */
|
||||
if ((re_opcode_t) p1[3] == exactn
|
||||
&& ! ((int) p2[1] * BYTEWIDTH > (int) p1[5]
|
||||
&& (p2[2 + p1[5] / BYTEWIDTH]
|
||||
& (1 << (p1[5] % BYTEWIDTH)))))
|
||||
#else
|
||||
if ((re_opcode_t) p1[3] == exactn
|
||||
&& ! ((int) p2[1] * BYTEWIDTH > (int) p1[4]
|
||||
&& (p2[2 + p1[4] / BYTEWIDTH]
|
||||
& (1 << (p1[4] % BYTEWIDTH)))))
|
||||
#endif
|
||||
{
|
||||
p[-3] = (unsigned char) pop_failure_jump;
|
||||
DEBUG_PRINT3 (" %c != %c => pop_failure_jump.\n",
|
||||
c, p1[5]);
|
||||
&& ! ((int) p2[1] * BYTEWIDTH > (int) p1[5]
|
||||
&& (p2[2 + p1[5] / BYTEWIDTH]
|
||||
& (1 << (p1[5] % BYTEWIDTH)))))
|
||||
{
|
||||
p[-3] = (unsigned char) pop_failure_jump;
|
||||
DEBUG_PRINT1 (" No match => pop_failure_jump.\n");
|
||||
}
|
||||
|
||||
else if ((re_opcode_t) p1[3] == charset_not)
|
||||
@@ -5489,7 +5905,7 @@ re_compile_pattern (pattern, length, bufp)
|
||||
|
||||
if (!ret)
|
||||
return NULL;
|
||||
return gettext (re_error_msgid[(int) ret]);
|
||||
return gettext (re_error_msgid + re_error_msgid_idx[(int) ret]);
|
||||
}
|
||||
#ifdef _LIBC
|
||||
weak_alias (__re_compile_pattern, re_compile_pattern)
|
||||
@@ -5526,12 +5942,14 @@ re_comp (s)
|
||||
{
|
||||
re_comp_buf.buffer = (unsigned char *) malloc (200);
|
||||
if (re_comp_buf.buffer == NULL)
|
||||
return (char *) gettext (re_error_msgid[(int) REG_ESPACE]);
|
||||
return (char *) gettext (re_error_msgid
|
||||
+ re_error_msgid_idx[(int) REG_ESPACE]);
|
||||
re_comp_buf.allocated = 200;
|
||||
|
||||
re_comp_buf.fastmap = (char *) malloc (1 << BYTEWIDTH);
|
||||
if (re_comp_buf.fastmap == NULL)
|
||||
return (char *) gettext (re_error_msgid[(int) REG_ESPACE]);
|
||||
return (char *) gettext (re_error_msgid
|
||||
+ re_error_msgid_idx[(int) REG_ESPACE]);
|
||||
}
|
||||
|
||||
/* Since `re_exec' always passes NULL for the `regs' argument, we
|
||||
@@ -5546,7 +5964,7 @@ re_comp (s)
|
||||
return NULL;
|
||||
|
||||
/* Yes, we're discarding `const' here if !HAVE_LIBINTL. */
|
||||
return (char *) gettext (re_error_msgid[(int) ret]);
|
||||
return (char *) gettext (re_error_msgid + re_error_msgid_idx[(int) ret]);
|
||||
}
|
||||
|
||||
|
||||
@@ -5666,7 +6084,7 @@ regcomp (preg, pattern, cflags)
|
||||
buffer. */
|
||||
if (re_compile_fastmap (preg) == -2)
|
||||
{
|
||||
/* Some error occured while computing the fastmap, just forget
|
||||
/* Some error occurred while computing the fastmap, just forget
|
||||
about it. */
|
||||
free (preg->fastmap);
|
||||
preg->fastmap = NULL;
|
||||
@@ -5772,15 +6190,15 @@ regerror (errcode, preg, errbuf, errbuf_size)
|
||||
size_t msg_size;
|
||||
|
||||
if (errcode < 0
|
||||
|| errcode >= (int) (sizeof (re_error_msgid)
|
||||
/ sizeof (re_error_msgid[0])))
|
||||
|| errcode >= (int) (sizeof (re_error_msgid_idx)
|
||||
/ sizeof (re_error_msgid_idx[0])))
|
||||
/* Only error codes returned by the rest of the code should be passed
|
||||
to this routine. If we are given anything else, or if other regex
|
||||
code generates an invalid error code, then the program has a bug.
|
||||
Dump core so we can fix it. */
|
||||
abort ();
|
||||
|
||||
msg = gettext (re_error_msgid[errcode]);
|
||||
msg = gettext (re_error_msgid + re_error_msgid_idx[errcode]);
|
||||
|
||||
msg_size = strlen (msg) + 1; /* Includes the null. */
|
||||
|
||||
|
||||
14
lib/regex.h
14
lib/regex.h
@@ -1,6 +1,6 @@
|
||||
/* 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,98 Free Software Foundation, Inc.
|
||||
Copyright (C) 1985,1989-1993,1995-1998, 2000 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.
|
||||
@@ -221,13 +221,13 @@ extern reg_syntax_t re_syntax_options;
|
||||
(_RE_SYNTAX_POSIX_COMMON | RE_LIMITED_OPS)
|
||||
|
||||
#define RE_SYNTAX_POSIX_EXTENDED \
|
||||
(_RE_SYNTAX_POSIX_COMMON | RE_CONTEXT_INDEP_ANCHORS \
|
||||
| RE_CONTEXT_INDEP_OPS | RE_NO_BK_BRACES \
|
||||
| RE_NO_BK_PARENS | RE_NO_BK_VBAR \
|
||||
| RE_UNMATCHED_RIGHT_PAREN_ORD)
|
||||
(_RE_SYNTAX_POSIX_COMMON | RE_CONTEXT_INDEP_ANCHORS \
|
||||
| RE_CONTEXT_INDEP_OPS | RE_NO_BK_BRACES \
|
||||
| RE_NO_BK_PARENS | RE_NO_BK_VBAR \
|
||||
| RE_CONTEXT_INVALID_OPS | RE_UNMATCHED_RIGHT_PAREN_ORD)
|
||||
|
||||
/* Differs from ..._POSIX_EXTENDED in that RE_CONTEXT_INVALID_OPS
|
||||
replaces RE_CONTEXT_INDEP_OPS and RE_NO_BK_REFS is added. */
|
||||
/* Differs from ..._POSIX_EXTENDED in that RE_CONTEXT_INDEP_OPS is
|
||||
removed and RE_NO_BK_REFS is added. */
|
||||
#define RE_SYNTAX_POSIX_MINIMAL_EXTENDED \
|
||||
(_RE_SYNTAX_POSIX_COMMON | RE_CONTEXT_INDEP_ANCHORS \
|
||||
| RE_CONTEXT_INVALID_OPS | RE_NO_BK_BRACES \
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/* Determine whether string value is affirmation or negative response
|
||||
according to current locale's data.
|
||||
Copyright (C) 1996, 1998 Free Software Foundation, Inc.
|
||||
Copyright (C) 1996, 1998, 2000 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
|
||||
@@ -31,6 +31,9 @@
|
||||
|
||||
#if ENABLE_NLS
|
||||
# include <sys/types.h>
|
||||
# if HAVE_LIMITS_H
|
||||
# include <limits.h>
|
||||
# endif
|
||||
# include <regex.h>
|
||||
# include <libintl.h>
|
||||
# define _(Text) gettext (Text)
|
||||
|
||||
12
lib/same.c
12
lib/same.c
@@ -36,9 +36,16 @@
|
||||
extern int errno;
|
||||
#endif
|
||||
|
||||
#if HAVE_STRING_H
|
||||
# include <string.h>
|
||||
#else
|
||||
# include <strings.h>
|
||||
#endif
|
||||
|
||||
#include "same.h"
|
||||
#include "dirname.h"
|
||||
#include "error.h"
|
||||
#include "xalloc.h"
|
||||
|
||||
#if ENABLE_NLS
|
||||
# include <libintl.h>
|
||||
@@ -50,6 +57,9 @@ extern int errno;
|
||||
#define STREQ(a, b) (strcmp ((a), (b)) == 0)
|
||||
|
||||
#ifndef HAVE_DECL_FREE
|
||||
"this configure-time declaration test was not run"
|
||||
#endif
|
||||
#if !HAVE_DECL_FREE
|
||||
void free ();
|
||||
#endif
|
||||
|
||||
@@ -72,7 +82,7 @@ same_name (const char *source, const char *dest)
|
||||
source_dirname = dir_name (source);
|
||||
dest_dirname = dir_name (dest);
|
||||
if (source_dirname == NULL || dest_dirname == NULL)
|
||||
error (1, 0, _("virtual memory exhausted"));
|
||||
xalloc_die ();
|
||||
|
||||
if (stat (source_dirname, &source_dir_stats))
|
||||
{
|
||||
|
||||
@@ -23,16 +23,15 @@
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
#if HAVE_UNISTD_H
|
||||
# include <unistd.h>
|
||||
#include <errno.h>
|
||||
#ifndef errno
|
||||
extern int errno;
|
||||
#endif
|
||||
|
||||
#if HAVE_DIRENT_H
|
||||
# include <dirent.h>
|
||||
# define NAMLEN(dirent) strlen((dirent)->d_name)
|
||||
#else
|
||||
# define dirent direct
|
||||
# define NAMLEN(dirent) (dirent)->d_namlen
|
||||
# if HAVE_SYS_NDIR_H
|
||||
# include <sys/ndir.h>
|
||||
# endif
|
||||
@@ -54,26 +53,25 @@
|
||||
#ifdef STDC_HEADERS
|
||||
# include <stdlib.h>
|
||||
# include <string.h>
|
||||
#else
|
||||
char *malloc ();
|
||||
char *realloc ();
|
||||
#endif
|
||||
#ifndef NULL
|
||||
# define NULL 0
|
||||
#endif
|
||||
|
||||
#ifndef stpcpy
|
||||
char *stpcpy ();
|
||||
#endif
|
||||
|
||||
#include "savedir.h"
|
||||
#include "xalloc.h"
|
||||
|
||||
/* Return a freshly allocated string containing the filenames
|
||||
in directory DIR, separated by '\0' characters;
|
||||
the end is marked by two '\0' characters in a row.
|
||||
NAME_SIZE is the number of bytes to initially allocate
|
||||
for the string; it will be enlarged as needed.
|
||||
Return NULL if DIR cannot be opened or if out of memory. */
|
||||
Use NAME_SIZE == -1 if you do not know the size.
|
||||
Return NULL (setting errno) if DIR cannot be opened, read, or closed. */
|
||||
|
||||
#ifndef NAME_SIZE_DEFAULT
|
||||
# define NAME_SIZE_DEFAULT 512
|
||||
#endif
|
||||
|
||||
char *
|
||||
savedir (const char *dir, off_t name_size)
|
||||
@@ -81,56 +79,58 @@ savedir (const char *dir, off_t name_size)
|
||||
DIR *dirp;
|
||||
struct dirent *dp;
|
||||
char *name_space;
|
||||
char *namep;
|
||||
size_t allocated = name_size; /* Overflow is checked indirectly below. */
|
||||
size_t used = 0;
|
||||
int save_errno;
|
||||
|
||||
dirp = opendir (dir);
|
||||
if (dirp == NULL)
|
||||
return NULL;
|
||||
|
||||
/* Be sure name_size is at least `1' so there's room for
|
||||
the final NUL byte. */
|
||||
name_size += !name_size;
|
||||
/* Use the default if the size is not known. Be sure "allocated"
|
||||
is at least `1' so there's room for the final NUL byte.
|
||||
Do not simply test name_size <= 0, because the initialization
|
||||
of "allocated" might have overflowed. */
|
||||
if (name_size < 0 || allocated == 0)
|
||||
allocated = NAME_SIZE_DEFAULT;
|
||||
|
||||
name_space = (char *) malloc (name_size);
|
||||
if (name_space == NULL)
|
||||
{
|
||||
closedir (dirp);
|
||||
return NULL;
|
||||
}
|
||||
namep = name_space;
|
||||
name_space = xmalloc (allocated);
|
||||
|
||||
errno = 0;
|
||||
while ((dp = readdir (dirp)) != NULL)
|
||||
{
|
||||
/* Skip "." and ".." (some NFS filesystems' directories lack them). */
|
||||
if (dp->d_name[0] != '.'
|
||||
|| (dp->d_name[1] != '\0'
|
||||
&& (dp->d_name[1] != '.' || dp->d_name[2] != '\0')))
|
||||
/* Skip "", ".", and "..". "" is returned by at least one buggy
|
||||
implementation: Solaris 2.4 readdir on NFS filesystems. */
|
||||
char const *entry = dp->d_name;
|
||||
if (entry[entry[0] != '.' ? 0 : entry[1] != '.' ? 1 : 2] != '\0')
|
||||
{
|
||||
off_t size_needed = (namep - name_space) + NAMLEN (dp) + 2;
|
||||
|
||||
if (size_needed > name_size)
|
||||
size_t entry_size = strlen (entry) + 1;
|
||||
if (used + entry_size < used)
|
||||
xalloc_die ();
|
||||
if (allocated <= used + entry_size)
|
||||
{
|
||||
char *new_name_space;
|
||||
|
||||
while (size_needed > name_size)
|
||||
name_size += 1024;
|
||||
|
||||
new_name_space = realloc (name_space, name_size);
|
||||
if (new_name_space == NULL)
|
||||
do
|
||||
{
|
||||
closedir (dirp);
|
||||
return NULL;
|
||||
if (2 * allocated < allocated)
|
||||
xalloc_die ();
|
||||
allocated *= 2;
|
||||
}
|
||||
namep += new_name_space - name_space;
|
||||
name_space = new_name_space;
|
||||
while (allocated <= used + entry_size);
|
||||
|
||||
name_space = xrealloc (name_space, allocated);
|
||||
}
|
||||
namep = stpcpy (namep, dp->d_name) + 1;
|
||||
memcpy (name_space + used, entry, entry_size);
|
||||
used += entry_size;
|
||||
}
|
||||
}
|
||||
*namep = '\0';
|
||||
if (CLOSEDIR (dirp))
|
||||
name_space[used] = '\0';
|
||||
save_errno = errno;
|
||||
if (CLOSEDIR (dirp) != 0)
|
||||
save_errno = errno;
|
||||
if (save_errno != 0)
|
||||
{
|
||||
free (name_space);
|
||||
errno = save_errno;
|
||||
return NULL;
|
||||
}
|
||||
return name_space;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1992, 1995 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1992, 1995, 2000 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.
|
||||
@@ -35,7 +35,7 @@ USA. */
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_GNU_LD
|
||||
# define __environ environ
|
||||
# define __environ environ
|
||||
#endif
|
||||
|
||||
int
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1991,92,93,94,95,96,97,98,99 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1991-1999, 2000 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.
|
||||
@@ -98,8 +98,8 @@ extern char *tzname[];
|
||||
# define L_(Str) L##Str
|
||||
# define NLW(Sym) _NL_W##Sym
|
||||
|
||||
# define MEMCPY(d, s, n) wmemcpy (d, s, n)
|
||||
# define STRLEN(s) wcslen (s)
|
||||
# define MEMCPY(d, s, n) __wmemcpy (d, s, n)
|
||||
# define STRLEN(s) __wcslen (s)
|
||||
|
||||
#else
|
||||
# define CHAR_T char
|
||||
@@ -752,6 +752,11 @@ my_strftime (s, maxsize, format, tp ut_argument)
|
||||
|
||||
case L_('b'):
|
||||
case L_('h'): /* POSIX.2 extension. */
|
||||
if (change_case)
|
||||
{
|
||||
to_uppcase = 1;
|
||||
to_lowcase = 0;
|
||||
}
|
||||
if (modifier != 0)
|
||||
goto bad_format;
|
||||
#if defined _NL_CURRENT || !HAVE_STRFTIME
|
||||
@@ -817,6 +822,14 @@ my_strftime (s, maxsize, format, tp ut_argument)
|
||||
char *u = ufmt;
|
||||
char ubuf[1024]; /* enough for any single format in practice */
|
||||
size_t len;
|
||||
/* Make sure we're calling the actual underlying strftime.
|
||||
In some cases, config.h contains something like
|
||||
"#define strftime rpl_strftime". */
|
||||
# ifdef strftime
|
||||
# undef strftime
|
||||
size_t strftime ();
|
||||
# endif
|
||||
|
||||
*u++ = '%';
|
||||
if (modifier != 0)
|
||||
*u++ = modifier;
|
||||
@@ -840,7 +853,7 @@ my_strftime (s, maxsize, format, tp ut_argument)
|
||||
if (era)
|
||||
{
|
||||
# ifdef COMPILE_WIDE
|
||||
size_t len = wcslen (era->era_wname);
|
||||
size_t len = __wcslen (era->era_wname);
|
||||
cpy (len, era->era_wname);
|
||||
# else
|
||||
size_t len = strlen (era->era_name);
|
||||
|
||||
@@ -1,21 +1,21 @@
|
||||
/* Copyright (C) 1996, 1997 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1996, 1997, 1998, 2000 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.
|
||||
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.
|
||||
|
||||
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 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.
|
||||
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 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. */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include "config.h"
|
||||
@@ -24,22 +24,39 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
#include <stdio.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
#ifdef STDC_HEADERS
|
||||
# include <string.h>
|
||||
#if defined _LIBC || defined STDC_HEADERS
|
||||
# include <stdlib.h>
|
||||
# include <string.h>
|
||||
#else
|
||||
char *malloc ();
|
||||
#endif
|
||||
|
||||
/* Duplicate S, returning an identical malloc'd string. */
|
||||
#ifndef HAVE_DECL_STRNLEN
|
||||
"this configure-time declaration test was not run"
|
||||
#endif
|
||||
#if !HAVE_DECL_STRNLEN
|
||||
size_t strnlen ();
|
||||
#endif
|
||||
|
||||
#undef __strndup
|
||||
#undef strndup
|
||||
|
||||
#ifndef weak_alias
|
||||
# define __strndup strndup
|
||||
#endif
|
||||
|
||||
char *
|
||||
strndup (const char *s, size_t n)
|
||||
__strndup (const char *s, size_t n)
|
||||
{
|
||||
char *new = malloc (n + 1);
|
||||
size_t len = strnlen (s, n);
|
||||
char *new = malloc (len + 1);
|
||||
|
||||
if (new == NULL)
|
||||
return NULL;
|
||||
|
||||
new[n] = '\0';
|
||||
return (char *) memcpy (new, s, n);
|
||||
new[len] = '\0';
|
||||
return (char *) memcpy (new, s, len);
|
||||
}
|
||||
#ifdef weak_alias
|
||||
weak_alias (__strndup, strndup)
|
||||
#endif
|
||||
|
||||
58
lib/strnlen.c
Normal file
58
lib/strnlen.c
Normal file
@@ -0,0 +1,58 @@
|
||||
/* Find the length of STRING, but scan at most MAXLEN characters.
|
||||
Copyright (C) 1996, 1997, 1998, 2000 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
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. */
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#if HAVE_STRING_H
|
||||
# if !STDC_HEADERS && HAVE_MEMORY_H
|
||||
# include <memory.h>
|
||||
# endif
|
||||
# include <string.h>
|
||||
#else
|
||||
# include <strings.h>
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_DECL_MEMCHR
|
||||
"this configure-time declaration test was not run"
|
||||
#endif
|
||||
#if !HAVE_DECL_MEMCHR
|
||||
char *memchr ();
|
||||
#endif
|
||||
|
||||
#undef __strnlen
|
||||
#undef strnlen
|
||||
|
||||
#ifndef weak_alias
|
||||
# define __strnlen strnlen
|
||||
#endif
|
||||
|
||||
/* Find the length of STRING, but scan at most MAXLEN characters.
|
||||
If no '\0' terminator is found in that many characters, return MAXLEN. */
|
||||
|
||||
size_t
|
||||
__strnlen (const char *string, size_t maxlen)
|
||||
{
|
||||
const char *end = memchr (string, '\0', maxlen);
|
||||
return end ? end - string : maxlen;
|
||||
}
|
||||
#ifdef weak_alias
|
||||
weak_alias (__strnlen, strnlen)
|
||||
#endif
|
||||
@@ -37,8 +37,18 @@
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if HAVE_UNSIGNED_LONG_LONG && ! HAVE_STRTOULL
|
||||
unsigned long long strtoull PARAMS ((char const *, char **, int));
|
||||
#ifndef HAVE_DECL_STRTOUL
|
||||
"this configure-time declaration test was not run"
|
||||
#endif
|
||||
#if !HAVE_DECL_STRTOUL
|
||||
unsigned long strtoul PARAMS ((char const *, char **, int));
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_DECL_STRTOULL
|
||||
"this configure-time declaration test was not run"
|
||||
#endif
|
||||
#if !HAVE_DECL_STRTOULL && HAVE_UNSIGNED_LONG_LONG
|
||||
unsigned long long strtoull PARAMS ((char const *, char **, int));
|
||||
#endif
|
||||
|
||||
uintmax_t
|
||||
@@ -56,3 +66,16 @@ strtoumax (char const *ptr, char **endptr, int base)
|
||||
|
||||
abort ();
|
||||
}
|
||||
|
||||
#ifdef TESTING
|
||||
# include <stdio.h>
|
||||
int
|
||||
main ()
|
||||
{
|
||||
char *p, *endptr;
|
||||
printf ("sizeof uintmax_t: %d\n", sizeof (uintmax_t));
|
||||
printf ("sizeof strtoull(): %d\n", sizeof strtoull(p, &endptr, 10));
|
||||
printf ("sizeof strtoul(): %d\n", sizeof strtoul(p, &endptr, 10));
|
||||
exit (0);
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* Compare strings while treating digits characters numerically.
|
||||
Copyright (C) 1997 Free Software Foundation, Inc.
|
||||
Copyright (C) 1997, 2000 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Jean-Francois Bignolles <bignolle@ecoledoc.ibp.fr>, 1997.
|
||||
Contributed by Jean-François Bignolles <bignolle@ecoledoc.ibp.fr>, 1997.
|
||||
|
||||
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
|
||||
@@ -36,6 +36,15 @@
|
||||
#define CMP 2
|
||||
#define LEN 3
|
||||
|
||||
/* ISDIGIT differs from isdigit, as follows:
|
||||
- Its arg may be any int or unsigned int; it need not be an unsigned char.
|
||||
- It's guaranteed to evaluate its argument exactly once.
|
||||
- It's typically faster.
|
||||
Posix 1003.2-1992 section 2.5.2.1 page 50 lines 1556-1558 says that
|
||||
only '0' through '9' are digits. Prefer ISDIGIT to isdigit unless
|
||||
it's important to use the locale's definition of `digit' even when the
|
||||
host does not conform to Posix. */
|
||||
#define ISDIGIT(c) ((unsigned) (c) - '0' <= 9)
|
||||
|
||||
/* Compare S1 and S2 as strings holding indices/version numbers,
|
||||
returning less than, equal to or greater than zero if S1 is less than,
|
||||
@@ -83,17 +92,17 @@ strverscmp (const char *s1, const char *s2)
|
||||
c1 = *p1++;
|
||||
c2 = *p2++;
|
||||
/* Hint: '0' is a digit too. */
|
||||
state = S_N | ((c1 == '0') + (isdigit (c1) != 0));
|
||||
state = S_N | ((c1 == '0') + (ISDIGIT (c1) != 0));
|
||||
|
||||
while ((diff = c1 - c2) == 0 && c1 != '\0')
|
||||
{
|
||||
state = next_state[state];
|
||||
c1 = *p1++;
|
||||
c2 = *p2++;
|
||||
state |= (c1 == '0') + (isdigit (c1) != 0);
|
||||
state |= (c1 == '0') + (ISDIGIT (c1) != 0);
|
||||
}
|
||||
|
||||
state = result_type[state << 2 | ((c2 == '0') + (isdigit (c2) != 0))];
|
||||
state = result_type[state << 2 | ((c2 == '0') + (ISDIGIT (c2) != 0))];
|
||||
|
||||
switch (state)
|
||||
{
|
||||
@@ -101,11 +110,11 @@ strverscmp (const char *s1, const char *s2)
|
||||
return diff;
|
||||
|
||||
case LEN:
|
||||
while (isdigit (*p1++))
|
||||
if (!isdigit (*p2++))
|
||||
while (ISDIGIT (*p1++))
|
||||
if (!ISDIGIT (*p2++))
|
||||
return 1;
|
||||
|
||||
return isdigit (*p2) ? -1 : diff;
|
||||
return ISDIGIT (*p2) ? -1 : diff;
|
||||
|
||||
default:
|
||||
return state;
|
||||
|
||||
200
lib/unicodeio.c
Normal file
200
lib/unicodeio.c
Normal file
@@ -0,0 +1,200 @@
|
||||
/* Unicode character output to streams with locale dependent encoding.
|
||||
|
||||
Copyright (C) 2000 Free Software Foundation, Inc.
|
||||
|
||||
This program 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, 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library 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 Bruno Haible <haible@clisp.cons.org>. */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#if HAVE_STDDEF_H
|
||||
# include <stddef.h>
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
#if HAVE_STRING_H
|
||||
# include <string.h>
|
||||
#else
|
||||
# include <strings.h>
|
||||
#endif
|
||||
|
||||
#include <errno.h>
|
||||
#ifndef errno
|
||||
extern int errno;
|
||||
#endif
|
||||
|
||||
#if HAVE_ICONV
|
||||
# include <iconv.h>
|
||||
#endif
|
||||
|
||||
#include <error.h>
|
||||
|
||||
#if ENABLE_NLS
|
||||
# include <libintl.h>
|
||||
# define _(Text) gettext (Text)
|
||||
#else
|
||||
# define _(Text) Text
|
||||
#endif
|
||||
|
||||
#include "unicodeio.h"
|
||||
|
||||
/* When we pass a Unicode character to iconv(), we must pass it in a
|
||||
suitable encoding. The standardized Unicode encodings are
|
||||
UTF-8, UCS-2, UCS-4, UTF-16, UTF-16BE, UTF-16LE, UTF-7.
|
||||
UCS-2 supports only characters up to \U0000FFFF.
|
||||
UTF-16 and variants support only characters up to \U0010FFFF.
|
||||
UTF-7 is way too complex and not supported by glibc-2.1.
|
||||
UCS-4 specification leaves doubts about endianness and byte order
|
||||
mark. glibc currently interprets it as big endian without byte order
|
||||
mark, but this is not backed by an RFC.
|
||||
So we use UTF-8. It supports characters up to \U7FFFFFFF and is
|
||||
unambiguously defined. */
|
||||
|
||||
/* Stores the UTF-8 representation of the Unicode character wc in r[0..5].
|
||||
Returns the number of bytes stored, or -1 if wc is out of range. */
|
||||
static int
|
||||
utf8_wctomb (unsigned char *r, unsigned int wc)
|
||||
{
|
||||
int count;
|
||||
|
||||
if (wc < 0x80)
|
||||
count = 1;
|
||||
else if (wc < 0x800)
|
||||
count = 2;
|
||||
else if (wc < 0x10000)
|
||||
count = 3;
|
||||
else if (wc < 0x200000)
|
||||
count = 4;
|
||||
else if (wc < 0x4000000)
|
||||
count = 5;
|
||||
else if (wc <= 0x7fffffff)
|
||||
count = 6;
|
||||
else
|
||||
return -1;
|
||||
|
||||
switch (count)
|
||||
{
|
||||
/* Note: code falls through cases! */
|
||||
case 6: r[5] = 0x80 | (wc & 0x3f); wc = wc >> 6; wc |= 0x4000000;
|
||||
case 5: r[4] = 0x80 | (wc & 0x3f); wc = wc >> 6; wc |= 0x200000;
|
||||
case 4: r[3] = 0x80 | (wc & 0x3f); wc = wc >> 6; wc |= 0x10000;
|
||||
case 3: r[2] = 0x80 | (wc & 0x3f); wc = wc >> 6; wc |= 0x800;
|
||||
case 2: r[1] = 0x80 | (wc & 0x3f); wc = wc >> 6; wc |= 0xc0;
|
||||
case 1: r[0] = wc;
|
||||
}
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
/* Luckily, the encoding's name is platform independent. */
|
||||
#define UTF8_NAME "UTF-8"
|
||||
|
||||
/* Outputs the Unicode character CODE to the output stream STREAM.
|
||||
Assumes that the locale doesn't change between two calls. */
|
||||
void
|
||||
print_unicode_char (FILE *stream, unsigned int code)
|
||||
{
|
||||
static int initialized;
|
||||
static int is_utf8;
|
||||
#if HAVE_ICONV
|
||||
static iconv_t utf8_to_local;
|
||||
#endif
|
||||
|
||||
char inbuf[6];
|
||||
int count;
|
||||
|
||||
if (!initialized)
|
||||
{
|
||||
extern const char *locale_charset PARAMS ((void));
|
||||
const char *charset = locale_charset ();
|
||||
|
||||
is_utf8 = (charset != NULL && !strcmp (charset, UTF8_NAME));
|
||||
#if HAVE_ICONV
|
||||
if (!is_utf8)
|
||||
{
|
||||
utf8_to_local = (charset != NULL
|
||||
? iconv_open (charset, UTF8_NAME)
|
||||
: (iconv_t)(-1));
|
||||
if (utf8_to_local == (iconv_t)(-1))
|
||||
{
|
||||
/* For an unknown encoding, assume ASCII. */
|
||||
utf8_to_local = iconv_open ("ASCII", UTF8_NAME);
|
||||
if (utf8_to_local == (iconv_t)(-1))
|
||||
error (1, 0,
|
||||
_("cannot output U+%04X: iconv function not usable"),
|
||||
code);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
initialized = 1;
|
||||
}
|
||||
|
||||
/* Convert the character to UTF-8. */
|
||||
count = utf8_wctomb ((unsigned char *) inbuf, code);
|
||||
if (count < 0)
|
||||
error (1, 0, _("U+%04X: character out of range"), code);
|
||||
|
||||
if (is_utf8)
|
||||
{
|
||||
fwrite (inbuf, 1, count, stream);
|
||||
}
|
||||
else
|
||||
{
|
||||
#if HAVE_ICONV
|
||||
char outbuf[25];
|
||||
const char *inptr;
|
||||
size_t inbytesleft;
|
||||
char *outptr;
|
||||
size_t outbytesleft;
|
||||
size_t res;
|
||||
|
||||
inptr = inbuf;
|
||||
inbytesleft = count;
|
||||
outptr = outbuf;
|
||||
outbytesleft = sizeof (outbuf);
|
||||
|
||||
/* Convert the character from UTF-8 to the locale's charset. */
|
||||
res = iconv (utf8_to_local, &inptr, &inbytesleft, &outptr, &outbytesleft);
|
||||
if (inbytesleft > 0 || res == (size_t)(-1)
|
||||
/* Irix iconv() inserts a NUL byte if it cannot convert. */
|
||||
# if !defined _LIBICONV_VERSION && (defined sgi || defined __sgi)
|
||||
|| (res > 0 && code != 0 && outptr - outbuf == 1 && *outbuf == '\0')
|
||||
# endif
|
||||
)
|
||||
error (1, res == (size_t)(-1) ? errno : 0,
|
||||
_("cannot convert U+%04X to local character set"), code);
|
||||
|
||||
/* Avoid glibc-2.1 bug and Solaris 2.7 bug. */
|
||||
# if defined _LIBICONV_VERSION \
|
||||
|| !((__GLIBC__ - 0 == 2 && __GLIBC_MINOR__ - 0 <= 1) || defined __sun)
|
||||
|
||||
/* Get back to the initial shift state. */
|
||||
res = iconv (utf8_to_local, NULL, NULL, &outptr, &outbytesleft);
|
||||
if (res == (size_t)(-1))
|
||||
error (1, errno, _("cannot convert U+%04X to local character set"),
|
||||
code);
|
||||
# endif
|
||||
|
||||
fwrite (outbuf, 1, outptr - outbuf, stream);
|
||||
#else
|
||||
error (1, 0, _("cannot output U+%04X: iconv function not available"),
|
||||
code);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
17
lib/unicodeio.h
Normal file
17
lib/unicodeio.h
Normal file
@@ -0,0 +1,17 @@
|
||||
#ifndef UNICODEIO_H
|
||||
# define UNICODEIO_H
|
||||
|
||||
# include <stdio.h>
|
||||
|
||||
# ifndef PARAMS
|
||||
# if defined PROTOTYPES || (defined __STDC__ && __STDC__)
|
||||
# define PARAMS(Args) Args
|
||||
# else
|
||||
# define PARAMS(Args) ()
|
||||
# endif
|
||||
# endif
|
||||
|
||||
/* Outputs the Unicode character CODE to the output stream STREAM. */
|
||||
extern void print_unicode_char PARAMS((FILE *stream, unsigned int code));
|
||||
|
||||
#endif
|
||||
134
lib/userspec.c
134
lib/userspec.c
@@ -1,5 +1,5 @@
|
||||
/* userspec.c -- Parse a user and group string.
|
||||
Copyright (C) 1989-1992, 1997, 1998 Free Software Foundation, Inc.
|
||||
Copyright (C) 1989-1992, 1997, 1998, 2000 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
|
||||
@@ -40,6 +40,14 @@ char *alloca ();
|
||||
#include <pwd.h>
|
||||
#include <grp.h>
|
||||
|
||||
#if HAVE_SYS_PARAM_H
|
||||
# include <sys/param.h>
|
||||
#endif
|
||||
|
||||
#if HAVE_LIMITS_H
|
||||
# include <limits.h>
|
||||
#endif
|
||||
|
||||
#if HAVE_STRING_H
|
||||
# include <string.h>
|
||||
#else
|
||||
@@ -57,6 +65,17 @@ char *alloca ();
|
||||
# include <unistd.h>
|
||||
#endif
|
||||
|
||||
#include "xalloc.h"
|
||||
#include "xstrtol.h"
|
||||
|
||||
#if ENABLE_NLS
|
||||
# include <libintl.h>
|
||||
# define _(Text) gettext (Text)
|
||||
#else
|
||||
# define _(Text) Text
|
||||
#endif
|
||||
#define N_(Text) Text
|
||||
|
||||
#ifndef _POSIX_VERSION
|
||||
struct passwd *getpwnam ();
|
||||
struct group *getgrnam ();
|
||||
@@ -71,6 +90,34 @@ struct group *getgrgid ();
|
||||
# define endpwent() ((void) 0)
|
||||
#endif
|
||||
|
||||
#ifndef CHAR_BIT
|
||||
# define CHAR_BIT 8
|
||||
#endif
|
||||
|
||||
/* The extra casts work around common compiler bugs. */
|
||||
#define TYPE_SIGNED(t) (! ((t) 0 < (t) -1))
|
||||
/* The outer cast is needed to work around a bug in Cray C 5.0.3.0.
|
||||
It is necessary at least when t == time_t. */
|
||||
#define TYPE_MINIMUM(t) ((t) (TYPE_SIGNED (t) \
|
||||
? ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1) : (t) 0))
|
||||
#define TYPE_MAXIMUM(t) ((t) (~ (t) 0 - TYPE_MINIMUM (t)))
|
||||
|
||||
#ifndef UID_T_MAX
|
||||
# define UID_T_MAX TYPE_MAXIMUM (uid_t)
|
||||
#endif
|
||||
|
||||
#ifndef GID_T_MAX
|
||||
# define GID_T_MAX TYPE_MAXIMUM (gid_t)
|
||||
#endif
|
||||
|
||||
/* MAXUID may come from limits.h or sys/params.h. */
|
||||
#ifndef MAXUID
|
||||
# define MAXUID UID_T_MAX
|
||||
#endif
|
||||
#ifndef MAXGID
|
||||
# define MAXGID GID_T_MAX
|
||||
#endif
|
||||
|
||||
/* Perform the equivalent of the statement `dest = strdup (src);',
|
||||
but obtaining storage via alloca instead of from the heap. */
|
||||
|
||||
@@ -83,7 +130,15 @@ struct group *getgrgid ();
|
||||
} \
|
||||
while (0)
|
||||
|
||||
#define isdigit(c) ((c) >= '0' && (c) <= '9')
|
||||
/* ISDIGIT differs from isdigit, as follows:
|
||||
- Its arg may be any int or unsigned int; it need not be an unsigned char.
|
||||
- It's guaranteed to evaluate its argument exactly once.
|
||||
- It's typically faster.
|
||||
Posix 1003.2-1992 section 2.5.2.1 page 50 lines 1556-1558 says that
|
||||
only '0' through '9' are digits. Prefer ISDIGIT to isdigit unless
|
||||
it's important to use the locale's definition of `digit' even when the
|
||||
host does not conform to Posix. */
|
||||
#define ISDIGIT(c) ((unsigned) (c) - '0' <= 9)
|
||||
|
||||
#ifndef strdup
|
||||
char *strdup ();
|
||||
@@ -96,7 +151,7 @@ static int
|
||||
is_number (const char *str)
|
||||
{
|
||||
for (; *str; str++)
|
||||
if (!isdigit (*str))
|
||||
if (!ISDIGIT (*str))
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
@@ -104,8 +159,12 @@ is_number (const char *str)
|
||||
/* Extract from NAME, which has the form "[user][:.][group]",
|
||||
a USERNAME, UID U, GROUPNAME, and GID G.
|
||||
Either user or group, or both, must be present.
|
||||
If the group is omitted but the ":" or "." separator is given,
|
||||
If the group is omitted but the ":" separator is given,
|
||||
use the given user's login group.
|
||||
If SPEC_ARG contains a `:', then use that as the separator, ignoring
|
||||
any `.'s. If there is no `:', but there is a `.', then first look
|
||||
up SPEC_ARG as a login name. If that look-up fails, then try again
|
||||
interpreting the `.' as a separator.
|
||||
|
||||
USERNAME and GROUPNAME will be in newly malloc'd memory.
|
||||
Either one might be NULL instead, indicating that it was not
|
||||
@@ -117,13 +176,21 @@ const char *
|
||||
parse_user_spec (const char *spec_arg, uid_t *uid, gid_t *gid,
|
||||
char **username_arg, char **groupname_arg)
|
||||
{
|
||||
static const char *tired = "virtual memory exhausted";
|
||||
static const char *E_invalid_user = N_("invalid user");
|
||||
static const char *E_invalid_group = N_("invalid group");
|
||||
static const char *E_bad_spec =
|
||||
N_("cannot get the login group of a numeric UID");
|
||||
static const char *E_cannot_omit_both =
|
||||
N_("cannot omit both user and group");
|
||||
|
||||
const char *error_msg;
|
||||
char *spec; /* A copy we can write on. */
|
||||
struct passwd *pwd;
|
||||
struct group *grp;
|
||||
char *g, *u, *separator;
|
||||
char *groupname;
|
||||
int maybe_retry = 0;
|
||||
char *dot = NULL;
|
||||
|
||||
error_msg = NULL;
|
||||
*username_arg = *groupname_arg = NULL;
|
||||
@@ -131,10 +198,24 @@ parse_user_spec (const char *spec_arg, uid_t *uid, gid_t *gid,
|
||||
|
||||
V_STRDUP (spec, spec_arg);
|
||||
|
||||
/* Find the separator if there is one. */
|
||||
/* Find the POSIX `:' separator if there is one. */
|
||||
separator = strchr (spec, ':');
|
||||
|
||||
/* If there is no colon, then see if there's a `.'. */
|
||||
if (separator == NULL)
|
||||
separator = strchr (spec, '.');
|
||||
{
|
||||
dot = strchr (spec, '.');
|
||||
/* If there's no colon but there is a `.', then first look up the
|
||||
whole spec, in case it's an OWNER name that includes a dot.
|
||||
If that fails, then we'll try again, but interpreting the `.'
|
||||
as a separator. */
|
||||
/* FIXME: accepting `.' as the separator is contrary to POSIX.
|
||||
someday we should drop support for this. */
|
||||
if (dot)
|
||||
maybe_retry = 1;
|
||||
}
|
||||
|
||||
retry:
|
||||
|
||||
/* Replace separator with a NUL. */
|
||||
if (separator != NULL)
|
||||
@@ -149,7 +230,7 @@ parse_user_spec (const char *spec_arg, uid_t *uid, gid_t *gid,
|
||||
: separator + 1);
|
||||
|
||||
if (u == NULL && g == NULL)
|
||||
return "can not omit both user and group";
|
||||
return _(E_cannot_omit_both);
|
||||
|
||||
#ifdef __DJGPP__
|
||||
/* Pretend that we are the user U whose group is G. This makes
|
||||
@@ -167,15 +248,22 @@ parse_user_spec (const char *spec_arg, uid_t *uid, gid_t *gid,
|
||||
{
|
||||
|
||||
if (!is_number (u))
|
||||
error_msg = "invalid user";
|
||||
error_msg = E_invalid_user;
|
||||
else
|
||||
{
|
||||
int use_login_group;
|
||||
use_login_group = (separator != NULL && g == NULL);
|
||||
if (use_login_group)
|
||||
error_msg = "cannot get the login group of a numeric UID";
|
||||
error_msg = E_bad_spec;
|
||||
else
|
||||
*uid = atoi (u);
|
||||
{
|
||||
unsigned long int tmp_long;
|
||||
if (xstrtoul (u, NULL, 0, &tmp_long, NULL) != LONGINT_OK
|
||||
|| tmp_long > MAXUID)
|
||||
return _(E_invalid_user);
|
||||
printf ("MAXUID: %u\n", (uid_t) MAXUID);
|
||||
*uid = tmp_long;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -213,9 +301,15 @@ parse_user_spec (const char *spec_arg, uid_t *uid, gid_t *gid,
|
||||
if (grp == NULL)
|
||||
{
|
||||
if (!is_number (g))
|
||||
error_msg = "invalid group";
|
||||
error_msg = E_invalid_group;
|
||||
else
|
||||
*gid = atoi (g);
|
||||
{
|
||||
unsigned long int tmp_long;
|
||||
if (xstrtoul (u, NULL, 0, &tmp_long, NULL) != LONGINT_OK
|
||||
|| tmp_long > MAXGID)
|
||||
return _(E_invalid_group);
|
||||
*gid = tmp_long;
|
||||
}
|
||||
}
|
||||
else
|
||||
*gid = grp->gr_gid;
|
||||
@@ -231,7 +325,7 @@ parse_user_spec (const char *spec_arg, uid_t *uid, gid_t *gid,
|
||||
{
|
||||
*username_arg = strdup (u);
|
||||
if (*username_arg == NULL)
|
||||
error_msg = tired;
|
||||
error_msg = xalloc_msg_memory_exhausted;
|
||||
}
|
||||
|
||||
if (groupname != NULL && error_msg == NULL)
|
||||
@@ -244,12 +338,20 @@ parse_user_spec (const char *spec_arg, uid_t *uid, gid_t *gid,
|
||||
free (*username_arg);
|
||||
*username_arg = NULL;
|
||||
}
|
||||
error_msg = tired;
|
||||
error_msg = xalloc_msg_memory_exhausted;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return error_msg;
|
||||
if (error_msg && maybe_retry)
|
||||
{
|
||||
maybe_retry = 0;
|
||||
separator = dot;
|
||||
error_msg = NULL;
|
||||
goto retry;
|
||||
}
|
||||
|
||||
return _(error_msg);
|
||||
}
|
||||
|
||||
#ifdef TEST
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Utility to help print --version output in a consistent format.
|
||||
Copyright (C) 1999 Free Software Foundation, Inc.
|
||||
Copyright (C) 1999, 2000 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
|
||||
@@ -35,7 +35,7 @@
|
||||
/* Default copyright goes to the FSF. */
|
||||
|
||||
char* version_etc_copyright =
|
||||
N_("Copyright (C) 1999 Free Software Foundation, Inc.");
|
||||
N_("Copyright (C) 2000 Free Software Foundation, Inc.");
|
||||
|
||||
|
||||
/* Display the --version information the standard way.
|
||||
|
||||
@@ -46,9 +46,9 @@ extern int xalloc_exit_failure;
|
||||
extern void (*xalloc_fail_func) PARAMS ((void));
|
||||
|
||||
/* If XALLOC_FAIL_FUNC is undefined or a function that returns, this
|
||||
message must be non-NULL. It is translated via gettext.
|
||||
The default value is "Memory exhausted". */
|
||||
extern char *const xalloc_msg_memory_exhausted;
|
||||
message is output. It is translated via gettext.
|
||||
Its value is "memory exhausted". */
|
||||
extern char const xalloc_msg_memory_exhausted[];
|
||||
|
||||
/* This function is always triggered when memory is exhausted. It is
|
||||
in charge of honoring the three previous items. This is the
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* xgetcwd.c -- return current directory with unlimited length
|
||||
Copyright (C) 1992, 1996 Free Software Foundation, Inc.
|
||||
Copyright (C) 1992, 1996, 2000 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
|
||||
@@ -37,12 +37,9 @@ char *getwd ();
|
||||
# define getcwd(Buf, Max) getwd (Buf)
|
||||
#endif
|
||||
|
||||
/* Amount to increase buffer size by in each try. */
|
||||
#define PATH_INCR 32
|
||||
|
||||
char *xmalloc ();
|
||||
char *xrealloc ();
|
||||
void free ();
|
||||
extern void *xmalloc ();
|
||||
extern char *xstrdup ();
|
||||
extern void free ();
|
||||
|
||||
/* Return the current directory, newly allocated, arbitrarily long.
|
||||
Return NULL and set errno on error. */
|
||||
@@ -50,30 +47,39 @@ void free ();
|
||||
char *
|
||||
xgetcwd ()
|
||||
{
|
||||
char *cwd;
|
||||
char *ret;
|
||||
unsigned path_max;
|
||||
char buf[1024];
|
||||
|
||||
errno = 0;
|
||||
ret = getcwd (buf, sizeof (buf));
|
||||
if (ret != NULL)
|
||||
return xstrdup (buf);
|
||||
if (errno != ERANGE)
|
||||
return NULL;
|
||||
|
||||
path_max = (unsigned) PATH_MAX;
|
||||
path_max += 2; /* The getcwd docs say to do this. */
|
||||
|
||||
cwd = xmalloc (path_max);
|
||||
|
||||
errno = 0;
|
||||
while ((ret = getcwd (cwd, path_max)) == NULL && errno == ERANGE)
|
||||
for (;;)
|
||||
{
|
||||
path_max += PATH_INCR;
|
||||
cwd = xrealloc (cwd, path_max);
|
||||
char *cwd = (char *) xmalloc (path_max);
|
||||
|
||||
errno = 0;
|
||||
}
|
||||
ret = getcwd (cwd, path_max);
|
||||
if (ret != NULL)
|
||||
return ret;
|
||||
if (errno != ERANGE)
|
||||
{
|
||||
int save_errno = errno;
|
||||
free (cwd);
|
||||
errno = save_errno;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (ret == NULL)
|
||||
{
|
||||
int save_errno = errno;
|
||||
free (cwd);
|
||||
errno = save_errno;
|
||||
return NULL;
|
||||
|
||||
path_max += path_max / 16;
|
||||
path_max += 32;
|
||||
}
|
||||
return cwd;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* xgethostname.c -- return current hostname with unlimited length
|
||||
Copyright (C) 1992, 1996 Free Software Foundation, Inc.
|
||||
Copyright (C) 1992, 1996, 2000 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
|
||||
@@ -30,6 +30,10 @@ extern int errno;
|
||||
|
||||
#include "error.h"
|
||||
|
||||
#ifndef ENAMETOOLONG
|
||||
# define ENAMETOOLONG 9999
|
||||
#endif
|
||||
|
||||
#ifndef EXIT_FAILURE
|
||||
# define EXIT_FAILURE 1
|
||||
#endif
|
||||
@@ -47,28 +51,26 @@ xgethostname ()
|
||||
{
|
||||
char *hostname;
|
||||
size_t size;
|
||||
int err;
|
||||
|
||||
size = INITIAL_HOSTNAME_LENGTH;
|
||||
hostname = xmalloc (size);
|
||||
/* Use size + 1 here rather than size to work around the bug
|
||||
in SunOS5.5's gethostname whereby it NUL-terminates HOSTNAME
|
||||
even when the name is longer than the supplied buffer. */
|
||||
hostname = xmalloc (size + 1);
|
||||
while (1)
|
||||
{
|
||||
/* Use size - 2 here rather than size - 1 to work around the bug
|
||||
in SunOS5.5's gethostname whereby it NUL-terminates HOSTNAME
|
||||
even when the name is longer than the supplied buffer. */
|
||||
int k = size - 2;
|
||||
int k = size - 1;
|
||||
int err;
|
||||
|
||||
errno = 0;
|
||||
hostname[k] = '\0';
|
||||
err = gethostname (hostname, size);
|
||||
if (err == 0 && hostname[k] == '\0')
|
||||
if (err >= 0 && hostname[k] == '\0')
|
||||
break;
|
||||
#ifdef ENAMETOOLONG
|
||||
else if (err != 0 && errno != ENAMETOOLONG && errno != 0)
|
||||
else if (err < 0 && errno != ENAMETOOLONG && errno != 0)
|
||||
error (EXIT_FAILURE, errno, "gethostname");
|
||||
#endif
|
||||
size *= 2;
|
||||
hostname = xrealloc (hostname, size);
|
||||
hostname = xrealloc (hostname, size + 1);
|
||||
}
|
||||
|
||||
return hostname;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* xmalloc.c -- malloc with out of memory checking
|
||||
Copyright (C) 1990-1997, 98, 99 Free Software Foundation, Inc.
|
||||
Copyright (C) 1990-1999, 2000 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
|
||||
@@ -63,7 +63,7 @@ void (*xalloc_fail_func) PARAMS ((void)) = 0;
|
||||
|
||||
/* If XALLOC_FAIL_FUNC is NULL, or does return, display this message
|
||||
before exiting when memory is exhausted. Goes through gettext. */
|
||||
char *const xalloc_msg_memory_exhausted = N_("Memory exhausted");
|
||||
char const xalloc_msg_memory_exhausted[] = N_("memory exhausted");
|
||||
|
||||
void
|
||||
xalloc_die (void)
|
||||
@@ -91,8 +91,7 @@ xmalloc (size_t n)
|
||||
}
|
||||
|
||||
/* Change the size of an allocated block of memory P to N bytes,
|
||||
with error checking.
|
||||
If P is NULL, run xmalloc. */
|
||||
with error checking. */
|
||||
|
||||
void *
|
||||
xrealloc (void *p, size_t n)
|
||||
|
||||
11
lib/xstat.in
11
lib/xstat.in
@@ -32,6 +32,10 @@ extern int errno;
|
||||
#endif
|
||||
@BEGIN_LSTAT_ONLY@
|
||||
|
||||
#if HAVE_STDLIB_H
|
||||
# include <stdlib.h>
|
||||
#endif
|
||||
|
||||
#ifdef STAT_MACROS_BROKEN
|
||||
# undef S_ISLNK
|
||||
#endif
|
||||
@@ -39,6 +43,13 @@ extern int errno;
|
||||
# define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_DECL_FREE
|
||||
"this configure-time declaration test was not run"
|
||||
#endif
|
||||
#if !HAVE_DECL_FREE
|
||||
void free ();
|
||||
#endif
|
||||
|
||||
char *xmalloc ();
|
||||
|
||||
/* lstat works different on Linux and Solaris systems. POSIX (see
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user