mirror of
https://git.savannah.gnu.org/git/coreutils.git
synced 2025-09-10 07:59:52 +02:00
Compare commits
355 Commits
FILEUTILS-
...
FILEUTILS-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c98ea50c21 | ||
|
|
78697777d7 | ||
|
|
83696460f0 | ||
|
|
bb8acb3640 | ||
|
|
4f29f1aeb2 | ||
|
|
36a4ba8ba3 | ||
|
|
aaafa60129 | ||
|
|
866e778210 | ||
|
|
805484b693 | ||
|
|
a10e992cbc | ||
|
|
44b11d6e67 | ||
|
|
108f50670d | ||
|
|
5885cbf0d2 | ||
|
|
640cdd2df4 | ||
|
|
a4d13e4b8f | ||
|
|
12beb90e58 | ||
|
|
4623f5dca3 | ||
|
|
b124be4eb1 | ||
|
|
c8feafc2a5 | ||
|
|
84b6d13a3c | ||
|
|
fb604ebdf4 | ||
|
|
778dd49f55 | ||
|
|
3e0fdc1a0b | ||
|
|
c4610f8bb6 | ||
|
|
824081f660 | ||
|
|
417bda1b99 | ||
|
|
dbb6fa88fd | ||
|
|
013f2fe433 | ||
|
|
de75384c2b | ||
|
|
9d691ba42f | ||
|
|
744ef2d96f | ||
|
|
0d978396d7 | ||
|
|
581db2ffeb | ||
|
|
0d1de84756 | ||
|
|
c4f9b63aea | ||
|
|
0472107417 | ||
|
|
e1de1d3a93 | ||
|
|
46b486ab5b | ||
|
|
68bd38e8a0 | ||
|
|
b5c86e8130 | ||
|
|
bd54740062 | ||
|
|
8596e37d97 | ||
|
|
5eb689ade0 | ||
|
|
195f8a213e | ||
|
|
4d6b56a932 | ||
|
|
62a9c01c6d | ||
|
|
12dd329a29 | ||
|
|
4a7000742c | ||
|
|
f41e1ff806 | ||
|
|
fa5ef15197 | ||
|
|
2b1f600cbd | ||
|
|
0396e35b5a | ||
|
|
9824efff73 | ||
|
|
7fbe57368e | ||
|
|
21c0d8f1f0 | ||
|
|
316490baea | ||
|
|
bd77322580 | ||
|
|
09cf102456 | ||
|
|
f8514af7a6 | ||
|
|
6b4aadc588 | ||
|
|
e2e512d2d6 | ||
|
|
a7d29c59fa | ||
|
|
b2e339dc25 | ||
|
|
e7342330e5 | ||
|
|
3f868304cf | ||
|
|
2926167cfa | ||
|
|
84448306a4 | ||
|
|
b97436b18b | ||
|
|
db07df5448 | ||
|
|
4adeb81260 | ||
|
|
9684207d04 | ||
|
|
b467d6d513 | ||
|
|
36454232a5 | ||
|
|
ce85352146 | ||
|
|
7786c6e2cf | ||
|
|
4bd1ffa49a | ||
|
|
38762b8f78 | ||
|
|
7b2cea5ab2 | ||
|
|
b0d3bfa316 | ||
|
|
1672bf6d27 | ||
|
|
8736952b0b | ||
|
|
bd1fc1c256 | ||
|
|
bb4d193ac7 | ||
|
|
7379bd7274 | ||
|
|
1372968ab0 | ||
|
|
d2b4bca42e | ||
|
|
6dceaa1d9d | ||
|
|
b288652bbd | ||
|
|
2b37242292 | ||
|
|
afd2d8e4cf | ||
|
|
c18996947c | ||
|
|
23b80c8e30 | ||
|
|
3b92bd0090 | ||
|
|
14bc2891a8 | ||
|
|
1ebe204c2f | ||
|
|
27725d0745 | ||
|
|
8977920253 | ||
|
|
41b9ee8834 | ||
|
|
c4d50b0133 | ||
|
|
bb389bead8 | ||
|
|
326cc336af | ||
|
|
cd53ea93c5 | ||
|
|
aec69ce220 | ||
|
|
b2d08f91db | ||
|
|
50cdbb37c8 | ||
|
|
e81d02baf1 | ||
|
|
b73817cc6e | ||
|
|
0fefdeb526 | ||
|
|
8dfac9573a | ||
|
|
369361ae70 | ||
|
|
1afd3473fb | ||
|
|
117fb47f99 | ||
|
|
1bff89846b | ||
|
|
ba87d08c0e | ||
|
|
d9c0413f79 | ||
|
|
216777ea17 | ||
|
|
325411e109 | ||
|
|
e5aecd47c4 | ||
|
|
c84a7a232e | ||
|
|
16c5d19ce5 | ||
|
|
ac96f15bf3 | ||
|
|
0c0537fdce | ||
|
|
f58702e8f9 | ||
|
|
80c03e37ba | ||
|
|
71e65bb036 | ||
|
|
522141076e | ||
|
|
408a47499e | ||
|
|
30a65b1aa3 | ||
|
|
0a3fdd250a | ||
|
|
b617aa5f3f | ||
|
|
8b0cf1dde4 | ||
|
|
d392de74de | ||
|
|
e5b4feb70a | ||
|
|
af41baeb91 | ||
|
|
5540d977f4 | ||
|
|
98b663a29b | ||
|
|
e3c3d0b385 | ||
|
|
cfda609a21 | ||
|
|
229598b807 | ||
|
|
4c6221ee37 | ||
|
|
d76f7a7ce4 | ||
|
|
fc05e28803 | ||
|
|
0bbec4b26e | ||
|
|
93cff2fae1 | ||
|
|
ec0f2c34d3 | ||
|
|
e26d180b8c | ||
|
|
cb0cd6afdb | ||
|
|
b95e3d2f47 | ||
|
|
b5eadff384 | ||
|
|
a0321a68c0 | ||
|
|
9ed0e96ba7 | ||
|
|
087f809fe7 | ||
|
|
dd6c617d24 | ||
|
|
b4e8fc709e | ||
|
|
487366d091 | ||
|
|
6099222717 | ||
|
|
608e780536 | ||
|
|
0f73666749 | ||
|
|
e72e877181 | ||
|
|
4063f0aea3 | ||
|
|
0c8d33de03 | ||
|
|
e94070eb22 | ||
|
|
8aef0cde12 | ||
|
|
d355dcec62 | ||
|
|
c0a9e11235 | ||
|
|
8469bec1cc | ||
|
|
28a71c3409 | ||
|
|
85c407a740 | ||
|
|
2a01f209a6 | ||
|
|
1137a26bcf | ||
|
|
8157b18b8a | ||
|
|
c8c25a4610 | ||
|
|
031e782bb9 | ||
|
|
289ee58ce3 | ||
|
|
53af79cfe4 | ||
|
|
57beda9b45 | ||
|
|
0f3ff1725d | ||
|
|
7188179fc0 | ||
|
|
6544a589ed | ||
|
|
79ae2a4af9 | ||
|
|
b952290dc3 | ||
|
|
737f1f03a5 | ||
|
|
cf83dc5456 | ||
|
|
652ad8aaa3 | ||
|
|
5e969c1033 | ||
|
|
e42cc5be8a | ||
|
|
8cb05a6bfa | ||
|
|
4fb75ded4c | ||
|
|
1c883e2882 | ||
|
|
d6bf80ccc7 | ||
|
|
cd536776a0 | ||
|
|
f51eb4a5cc | ||
|
|
de40301f0a | ||
|
|
aa41cdbb65 | ||
|
|
4d02bdd9b0 | ||
|
|
41e8b21fb7 | ||
|
|
fe9da7ee9b | ||
|
|
bd8218fbe9 | ||
|
|
d52bc68220 | ||
|
|
090cd9f443 | ||
|
|
b6c83bbaa0 | ||
|
|
5946c46972 | ||
|
|
20522f2f5d | ||
|
|
7b297f76c4 | ||
|
|
3c467c0d22 | ||
|
|
b2ae052c6d | ||
|
|
8ee7e2c0c8 | ||
|
|
3270b340e8 | ||
|
|
22978078f7 | ||
|
|
53e41464fd | ||
|
|
86f7daf592 | ||
|
|
91e12f541f | ||
|
|
176a02c5d9 | ||
|
|
c6836cfdda | ||
|
|
090a56eb9c | ||
|
|
8c0d3621b3 | ||
|
|
86d6d4c47c | ||
|
|
f1d4b41340 | ||
|
|
ab8cec12c9 | ||
|
|
3bd31fac90 | ||
|
|
31f9f9f24c | ||
|
|
e7b4a0bced | ||
|
|
a3b44d2fd5 | ||
|
|
55dcae1c8d | ||
|
|
a01eaef0fd | ||
|
|
9da759a317 | ||
|
|
d2d2d043ff | ||
|
|
afd4dcf3b2 | ||
|
|
9b7bbe7b0b | ||
|
|
d84462d473 | ||
|
|
e3579cb231 | ||
|
|
1a34934e94 | ||
|
|
c2705c1e62 | ||
|
|
63d49273c4 | ||
|
|
2df44bba5b | ||
|
|
4b17c0b9ac | ||
|
|
71d6f09173 | ||
|
|
5faf3cd5fb | ||
|
|
b4a30ded4c | ||
|
|
e1dc14d3a1 | ||
|
|
4c8f853735 | ||
|
|
6225a43223 | ||
|
|
abda80a05a | ||
|
|
6ab8d020db | ||
|
|
5daa998b30 | ||
|
|
5840eaec8d | ||
|
|
4a6d0824c9 | ||
|
|
166523ca2b | ||
|
|
04a5f54547 | ||
|
|
8f47502291 | ||
|
|
fb71b69665 | ||
|
|
f8a5744b34 | ||
|
|
e3fa3463d6 | ||
|
|
a712177a4b | ||
|
|
b9ad7b9a9c | ||
|
|
47e20014b0 | ||
|
|
2f4e768ff4 | ||
|
|
f1aea23023 | ||
|
|
4734b96d4e | ||
|
|
faf0038376 | ||
|
|
dd7aea80f7 | ||
|
|
4ff1b892d0 | ||
|
|
22125a047d | ||
|
|
b2191ea8e1 | ||
|
|
971c5b1379 | ||
|
|
2d8de9b8ab | ||
|
|
271a7e6bb3 | ||
|
|
573c16a666 | ||
|
|
bae16cb45b | ||
|
|
b80225264a | ||
|
|
dcc145f13a | ||
|
|
51958e82aa | ||
|
|
ca0a087f3d | ||
|
|
22dc22c127 | ||
|
|
a56783bbb4 | ||
|
|
699808bcad | ||
|
|
7176037aa2 | ||
|
|
55447abbdf | ||
|
|
2c226bf49d | ||
|
|
8a623ebc61 | ||
|
|
fce70ef38b | ||
|
|
9622bd6207 | ||
|
|
f177941b93 | ||
|
|
a2c6905133 | ||
|
|
3df9acbfc9 | ||
|
|
9f58b3b3d5 | ||
|
|
e6b5a4d682 | ||
|
|
1fb27efd70 | ||
|
|
d4a3e63ec8 | ||
|
|
f64964aa1d | ||
|
|
97775c5655 | ||
|
|
483e2421c9 | ||
|
|
ac4a274dcf | ||
|
|
8b3d87d197 | ||
|
|
bee873f407 | ||
|
|
7b33a9910c | ||
|
|
d60264342d | ||
|
|
3cd2c9e1c8 | ||
|
|
c94ffee869 | ||
|
|
7da69e79df | ||
|
|
a79461545e | ||
|
|
32e36bd888 | ||
|
|
15e49fdbfb | ||
|
|
1b0419e8fd | ||
|
|
bd395b3bfc | ||
|
|
b7c1e2526a | ||
|
|
9300fb41f8 | ||
|
|
c434fa5195 | ||
|
|
7f504f2317 | ||
|
|
cafa5c1c2d | ||
|
|
73a90d1006 | ||
|
|
d4e2205ea9 | ||
|
|
8e9d1adf75 | ||
|
|
2f6c94da4c | ||
|
|
68898bb9a7 | ||
|
|
812fdadfca | ||
|
|
0e307a526c | ||
|
|
c1997cb5c3 | ||
|
|
74445dae42 | ||
|
|
fcf3192814 | ||
|
|
916861c0e8 | ||
|
|
437e9a0bc4 | ||
|
|
389c4049b3 | ||
|
|
a9ec4db8f2 | ||
|
|
9cda4e6527 | ||
|
|
cf1bd0e401 | ||
|
|
419daeb511 | ||
|
|
5555b3c9db | ||
|
|
482d5be531 | ||
|
|
87afdbeb7d | ||
|
|
a84f4f6087 | ||
|
|
12da649245 | ||
|
|
22aec49d4c | ||
|
|
6580f24783 | ||
|
|
a3c143bd82 | ||
|
|
07e148c8e7 | ||
|
|
8455ea2e13 | ||
|
|
95439d0f33 | ||
|
|
aa7d0d8c85 | ||
|
|
3ce3cb772d | ||
|
|
e08a28e045 | ||
|
|
6ea9602009 | ||
|
|
ea11fd8868 | ||
|
|
346b0368cf | ||
|
|
175585876f | ||
|
|
1ecd1b9c52 | ||
|
|
30f76e827e | ||
|
|
8b9e784e1e | ||
|
|
5a5938db82 | ||
|
|
3c57cea2ce | ||
|
|
0143b2901f | ||
|
|
527b07a1ad | ||
|
|
347c2d6d30 | ||
|
|
9af8f15624 | ||
|
|
c17caa0c0f |
153
ABOUT-NLS
153
ABOUT-NLS
@@ -2,9 +2,9 @@ Notes on the GNU Translation Project
|
||||
************************************
|
||||
|
||||
GNU is going international! The GNU Translation Project is a way to
|
||||
get maintainers, translators and users all together, so GNU will
|
||||
gradually become able to speak many native languages. A few packages
|
||||
already provide native language translation for their messages.
|
||||
get maintainers, translators, and users all together, so that GNU will
|
||||
gradually become able to speak many languages. A few packages already
|
||||
provide translations for their messages.
|
||||
|
||||
If you found this `ABOUT-NLS' file inside a GNU distribution, you
|
||||
may assume that the distributed package does use GNU `gettext'
|
||||
@@ -28,7 +28,7 @@ One advise in advance
|
||||
If you want to exploit the full power of internationalization, you
|
||||
should configure it using
|
||||
|
||||
./configure --with-gnu-gettext
|
||||
./configure --with-included-gettext
|
||||
|
||||
to force usage of internationalizing routines provided within this
|
||||
package, despite the existence of internationalizing capabilities in
|
||||
@@ -58,7 +58,7 @@ the GNU `gettext' package is *not* required. Installers may use
|
||||
special options at configuration time for changing the default
|
||||
behaviour. The commands:
|
||||
|
||||
./configure --with-gnu-gettext
|
||||
./configure --with-included-gettext
|
||||
./configure --with-catgets
|
||||
./configure --disable-nls
|
||||
|
||||
@@ -75,7 +75,7 @@ should use the more recent version of the GNU `gettext' library. I.e.
|
||||
if the file `intl/VERSION' shows that the library which comes with this
|
||||
package is more recent, you should use
|
||||
|
||||
./configure --with-gnu-gettext
|
||||
./configure --with-included-gettext
|
||||
|
||||
to prevent auto-detection.
|
||||
|
||||
@@ -90,7 +90,7 @@ want to use the `catgets' functions use
|
||||
to enable the test for `catgets' (this causes no harm if `catgets' is
|
||||
not available on your system). If you really select this option we
|
||||
would like to hear about the reasons because we cannot think of any
|
||||
good ones outself.
|
||||
good one ourself.
|
||||
|
||||
Internationalized packages have usually many `po/LL.po' files, where
|
||||
LL gives an ISO 639 two-letter code identifying the language. Unless
|
||||
@@ -127,109 +127,96 @@ leaving `LANG' to `sv'.
|
||||
Translating Teams
|
||||
=================
|
||||
|
||||
The GNU `gettext' tool set contains *everything* maintainers need
|
||||
for internationalizing their packages for messages. It also contains
|
||||
quite useful tools for helping translators at localizing messages to
|
||||
their native language, once a package has already been
|
||||
internationalized.
|
||||
|
||||
To achieve the GNU Translation Project, we need many interested
|
||||
For the GNU Translation Project to be a success, we need interested
|
||||
people who like their own language and write it well, and who are also
|
||||
able to synergize with other translators speaking the same language.
|
||||
Each translating team has its own mailing list, courtesy of Linux
|
||||
International. You may reach your translating team at the address
|
||||
Each translation team has its own mailing list, courtesy of Linux
|
||||
International. You may reach your translation team at the address
|
||||
`LL@li.org', replacing LL by the two-letter ISO 639 code for your
|
||||
language. Language codes are *not* the same as country codes given in
|
||||
ISO 3166. The following translating teams exist, as of January 1996:
|
||||
language. Language codes are *not* the same as the country codes given
|
||||
in ISO 3166. The following translation teams exist, as of May 1996:
|
||||
|
||||
Chinese `zh', Czech `cs', Danish `da', Dutch `nl', English `en',
|
||||
Esperanto `eo', Finnish `fi', French `fr', Irish `ga', German
|
||||
`de', Greek `el', Italian `it', Japanese `ja', Indonesian `in',
|
||||
Arabic `ar', Chinese `zh', Czech `cs', Danish `da', Dutch `nl',
|
||||
English `en', Esperanto `eo', Finnish `fi', French `fr', German
|
||||
`de', Greek `el', Hebrew `he', Hungarian `hu', Irish `ga', Italian
|
||||
`it', Indonesian `id', Japanese `ja', Korean `ko', Latin `la',
|
||||
Norwegian `no', Persian `fa', Polish `pl', Portuguese `pt',
|
||||
Russian `ru', Spanish `es', Swedish `sv', Telugu `te' and Turkish
|
||||
`tr'.
|
||||
Russian `ru', Slovenian `sl', Spanish `es', Swedish `sv', Telugu
|
||||
`te', Turkish `tr' and Ukrainian `uk'.
|
||||
|
||||
For example, you may reach the Chinese translating team by writing to
|
||||
For example, you may reach the Chinese translation team by writing to
|
||||
`zh@li.org'.
|
||||
|
||||
If you'd like to volunteer to *work* at translating messages, you
|
||||
should become a member of the translating team for your own language.
|
||||
The subscribing address is *not* the same as the list itself, it has
|
||||
`-request' appended. For example, Swedish people can send a message to
|
||||
`sv-request@li.org', having this message body:
|
||||
`-request' appended. For example, speakers of Swedish can send a
|
||||
message to `sv-request@li.org', having this message body:
|
||||
|
||||
subscribe
|
||||
|
||||
Keep in mind that team members should be interested in *working* at
|
||||
translations, or at solving translational difficulties, rather than
|
||||
merely lurking around. If your team does not exist yet and you want to
|
||||
start one, please write to `gnu-translation@gnu.ai.mit.edu'; you will
|
||||
then reach the GNU coordinator for all translator teams.
|
||||
Keep in mind that team members are expected to participate
|
||||
*actively* in translations, or at solving translational difficulties,
|
||||
rather than merely lurking around. If your team does not exist yet and
|
||||
you want to start one, or if you are unsure about what to do or how to
|
||||
get started, please write to `gnu-translation@gnu.ai.mit.edu' to reach
|
||||
the GNU coordinator for all translator teams.
|
||||
|
||||
The English team is special. It works at improving and uniformizing
|
||||
the terminology used in GNU. Proven linguistic skill are praised more
|
||||
than programming skill, here. For the time being, please avoid
|
||||
subscribing to the English team unless explicitely invited to do so.
|
||||
subscribing to the English team unless explicitly invited to do so.
|
||||
|
||||
Available Packages
|
||||
==================
|
||||
|
||||
Languages are not equally supported in all GNU packages. The
|
||||
following matrix shows the current state of GNU internationalization,
|
||||
as of January 1996. Listed are: internationalized packages, and
|
||||
languages for which work is in progress, or about to start.
|
||||
as of May 1996. The matrix shows, in regard of each package, for which
|
||||
languages PO files have been submitted to translation coordination.
|
||||
|
||||
See note cs de en fr it ja ko nl no pl pt sv
|
||||
\ .-------------------------------------.
|
||||
chess (1) | X / X |
|
||||
clisp | X X X |
|
||||
diffutils (2) | / . |
|
||||
fileutils | . / |
|
||||
flex (3) | / . |
|
||||
m4 | - / - - . - |
|
||||
gettext | X / X - X - X |
|
||||
ptx | - / - - |
|
||||
recode | - / - - - |
|
||||
sh-utils | . / . |
|
||||
sharutils | X / X X X X X |
|
||||
tar | X / X - X X |
|
||||
textutils | . / . |
|
||||
wdiff | - - / - - |
|
||||
`-------------------------------------'
|
||||
cs de en fr it ja ko nl no pl pt sv
|
||||
cs de en es fi fr ja ko nl no pl pt sl sv
|
||||
.-------------------------------------------.
|
||||
bash | [] | 1
|
||||
bison | [] | 1
|
||||
clisp | [] [] [] | 3
|
||||
cpio | [] | 1
|
||||
diffutils | [] [] [] | 3
|
||||
enscript | [] [] [] [] | 4
|
||||
fileutils | [] [] [] [] | 4
|
||||
findutils | [] [] | 2
|
||||
flex | [] | 1
|
||||
gcal | [] | 1
|
||||
gettext | [] [] [] [] [] [] [] [] | 9
|
||||
glibc | [] [] [] | 3
|
||||
grep | [] [] [] [] [] [] | 6
|
||||
hello | [] [] [] [] [] [] | 6
|
||||
m4 | [] [] [] [] | 4
|
||||
make | | 0
|
||||
mkid | [] [] | 2
|
||||
music | [] | 1
|
||||
ptx | [] [] [] | 3
|
||||
recode | [] [] [] [] [] | 5
|
||||
sh-utils | [] [] | 2
|
||||
sharutils | [] [] [] [] | 4
|
||||
tar | [] [] [] [] [] [] [] | 7
|
||||
textutils | [] [] [] [] | 4
|
||||
wdiff | [] [] [] [] | 4
|
||||
`-------------------------------------------'
|
||||
cs de en es fi fr ja ko nl no pl pt sl sv
|
||||
1 17 1 3 1 22 1 6 3 3 4 3 6 10 81
|
||||
|
||||
The interpretation legend and notes are:
|
||||
Some counters in the preceding matrix are higher than the number of
|
||||
visible blocks let us expect. This is because a few extra PO files are
|
||||
used for implementing regional variants of languages, or language
|
||||
dialects.
|
||||
|
||||
`/'
|
||||
There is no PO file, this package merely defaults to this language.
|
||||
For a PO file in the matrix above to be effective, the package to
|
||||
which it applies should also have been internationalized and
|
||||
distributed as such by its maintainer. There might be an observable
|
||||
lag between the mere existence a PO file and its wide availability in a
|
||||
GNU distribution.
|
||||
|
||||
`.'
|
||||
The effort of localizing this package has been undertaken by
|
||||
someone, or by a translating team, and work is, or should be in
|
||||
progress.
|
||||
|
||||
`-'
|
||||
A PO file for this package and this language is completed and is
|
||||
currently available in a pretest release, or is all ready for
|
||||
inclusion in the next release of this package.
|
||||
|
||||
`X'
|
||||
The localization of this package to this particular language is
|
||||
fully completed, and now distributed through an official release.
|
||||
|
||||
(1)
|
||||
This package is translated to specific languages by methods
|
||||
predating GNU `gettext'. Translations are all kept on disk files,
|
||||
and sources contain numbers where one normally expects strings.
|
||||
|
||||
(2)
|
||||
This package is planned to switch to GNU `gettext'. For the time
|
||||
being, it uses temporary means for internationalization.
|
||||
|
||||
(3)
|
||||
This package has its translatable strings marked, but does not use
|
||||
GNU `gettext'. A convenience patch may be available separately.
|
||||
|
||||
If January 1996 seems to be old, you may fetch a more recent copy of
|
||||
If May 1996 seems to be old, you may fetch a more recent copy of
|
||||
this `ABOUT-NLS' file on most GNU archive sites.
|
||||
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
## Process this file with automake to produce Makefile.in
|
||||
info_TEXINFOS = fileutils.texi
|
||||
EXTRA_DIST = perm.texi getdate.texi
|
||||
|
||||
# FIXME: remove texinfo.tex when automake has been fixed to include it
|
||||
# automatically
|
||||
EXTRA_DIST = perm.texi getdate.texi texinfo.tex
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Makefile.in generated automatically by automake 0.31 from Makefile.am
|
||||
# Makefile.in generated automatically by automake 1.0 from Makefile.am
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996 Free Software Foundation, Inc.
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
@@ -39,7 +39,11 @@ INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
transform = @program_transform_name@
|
||||
|
||||
info_TEXINFOS = fileutils.texi
|
||||
EXTRA_DIST = perm.texi getdate.texi
|
||||
|
||||
# FIXME: remove texinfo.tex when automake has been fixed to include it
|
||||
# automatically
|
||||
EXTRA_DIST = perm.texi getdate.texi texinfo.tex
|
||||
mkinstalldirs = $(top_srcdir)/mkinstalldirs
|
||||
CONFIG_HEADER = ../config.h
|
||||
|
||||
MAKEINFO = makeinfo
|
||||
@@ -49,8 +53,7 @@ INFO_DEPS = fileutils.info
|
||||
DVIS = fileutils.dvi
|
||||
TEXINFOS = fileutils.texi
|
||||
|
||||
DIST_COMMON = Makefile.am Makefile.in mdate-sh stamp-vti texinfo.tex \
|
||||
version.texi
|
||||
DIST_COMMON = Makefile.am Makefile.in mdate-sh stamp-vti version.texi
|
||||
|
||||
|
||||
PACKAGE = @PACKAGE@
|
||||
@@ -60,20 +63,22 @@ DISTFILES = $(DIST_COMMON) $(SOURCES) $(BUILT_SOURCES) $(HEADERS) \
|
||||
$(TEXINFOS) $(INFOS) $(MANS) $(EXTRA_DIST) $(DATA)
|
||||
DEP_DISTFILES = $(DIST_COMMON) $(SOURCES) $(BUILT_SOURCES) $(HEADERS) \
|
||||
$(TEXINFOS) $(INFO_DEPS) $(MANS) $(EXTRA_DIST) $(DATA)
|
||||
|
||||
TAR = tar
|
||||
default: all
|
||||
|
||||
|
||||
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in
|
||||
$(srcdir)/Makefile.in: @MAINT@Makefile.am $(top_srcdir)/configure.in
|
||||
cd $(top_srcdir) && automake $(subdir)/Makefile
|
||||
|
||||
Makefile: $(top_builddir)/config.status Makefile.in
|
||||
cd $(top_builddir) && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= ./config.status
|
||||
|
||||
version.texi: stamp-vti
|
||||
version.texi: @MAINT@stamp-vti
|
||||
|
||||
stamp-vti: fileutils.texi $(top_srcdir)/configure.in
|
||||
echo "@set UPDATED `cd $(srcdir) && $(SHELL) mdate-sh fileutils.texi`" \
|
||||
> vti.tmp
|
||||
echo "@set UPDATED `cd $(srcdir) \
|
||||
&& $(SHELL) ./mdate-sh fileutils.texi`" > vti.tmp
|
||||
echo "@set EDITION $(VERSION)" >> vti.tmp
|
||||
echo "@set VERSION $(VERSION)" >> vti.tmp
|
||||
if cmp -s vti.tmp $(srcdir)/version.texi; then \
|
||||
@@ -91,19 +96,19 @@ clean-vti:
|
||||
distclean-vti:
|
||||
|
||||
maintainer-clean-vti:
|
||||
rm -f stamp-vti version.texi
|
||||
@MAINT@rm -f stamp-vti version.texi
|
||||
|
||||
fileutils.info: fileutils.texi version.texi
|
||||
|
||||
|
||||
.texi.info:
|
||||
$(MAKEINFO) -I$(srcdir) $<
|
||||
$(MAKEINFO) -I$(srcdir) $< -o $(srcdir)/$@
|
||||
|
||||
.texi.dvi:
|
||||
TEXINPUTS=$(srcdir):$$TEXINPUTS $(TEXI2DVI) $<
|
||||
|
||||
install-info: $(INFO_DEPS)
|
||||
$(top_srcdir)/mkinstalldirs $(infodir)
|
||||
$(mkinstalldirs) $(infodir)
|
||||
for file in $(INFO_DEPS); do \
|
||||
for ifile in `cd $(srcdir) && echo $$file*`; do \
|
||||
$(INSTALL_DATA) $(srcdir)/$$ifile $(infodir)/$$ifile; \
|
||||
@@ -133,7 +138,7 @@ TAGS:
|
||||
|
||||
subdir = doc
|
||||
distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
|
||||
dist: $(DEP_DISTFILES)
|
||||
distdir: $(DEP_DISTFILES)
|
||||
@for file in `cd $(srcdir) && echo $(DISTFILES)`; do \
|
||||
test -f $(distdir)/$$file \
|
||||
|| ln $(srcdir)/$$file $(distdir)/$$file 2> /dev/null \
|
||||
@@ -151,7 +156,7 @@ install-exec:
|
||||
|
||||
install-data: install-info
|
||||
|
||||
install: install-exec install-data
|
||||
install: install-exec install-data all
|
||||
@:
|
||||
|
||||
uninstall: uninstall-info
|
||||
@@ -161,7 +166,7 @@ all: $(INFO_DEPS) Makefile
|
||||
install-strip:
|
||||
$(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' install
|
||||
installdirs:
|
||||
$(top_srcdir)/mkinstalldirs $(infodir)
|
||||
$(mkinstalldirs) $(infodir)
|
||||
|
||||
|
||||
mostlyclean-generic:
|
||||
@@ -191,7 +196,7 @@ maintainer-clean: maintainer-clean-vti maintainer-clean-info \
|
||||
|
||||
.PHONY: default mostlyclean-vti distclean-vti clean-vti \
|
||||
maintainer-clean-vti install-info uninstall-info mostlyclean-info \
|
||||
distclean-info clean-info maintainer-clean-info tags dist info dvi \
|
||||
distclean-info clean-info maintainer-clean-info tags distdir info dvi \
|
||||
check installcheck install-exec install-data install uninstall all \
|
||||
installdirs mostlyclean-generic distclean-generic clean-generic \
|
||||
maintainer-clean-generic clean mostlyclean distclean maintainer-clean
|
||||
|
||||
@@ -94,7 +94,7 @@ specified differently, depending on whether the month is specified
|
||||
numerically or literally. All these strings specify the same calendar date:
|
||||
|
||||
@example
|
||||
1970-9-17 # ISO 8601.
|
||||
1970-09-17 # ISO 8601.
|
||||
70-9-17 # This century assumed by default.
|
||||
70-09-17 # Leading zeros are ignored.
|
||||
9/17/72 # Common U.S. writing.
|
||||
@@ -120,9 +120,10 @@ Here are the rules.
|
||||
@cindex date format, ISO 8601
|
||||
For numeric months, the ISO 8601 format
|
||||
@samp{@var{year}-@var{month}-@var{day}} is allowed, where @var{year} is
|
||||
any positive number, @var{month} is a number between 1 and 12, and
|
||||
@var{day} is a number between 1 and 31. If @var{year} is less than 100,
|
||||
then 1900 is added to it to force a date in this century. The construct
|
||||
any positive number, @var{month} is a number between 01 and 12, and
|
||||
@var{day} is a number between 01 and 31. A leading zero must be present
|
||||
if a number is less than ten. If @var{year} is less than 100, then 1900
|
||||
is added to it to force a date in this century. The construct
|
||||
@samp{@var{month}/@var{day}/@var{year}}, popular in the United States,
|
||||
is accepted. Also @samp{@var{month}/@var{day}}, omitting the year.
|
||||
|
||||
|
||||
@@ -217,17 +217,14 @@ og-rxw
|
||||
|
||||
@cindex copying existing permissions
|
||||
@cindex permissions, copying existing
|
||||
You can base part of a file's permissions on part of its existing
|
||||
permissions. To do this, instead of using @samp{r}, @samp{w}, or
|
||||
@samp{x} after the operator, you use the letter @samp{u}, @samp{g}, or
|
||||
@samp{o}. For example, the mode
|
||||
|
||||
You can base a file's permissions on its existing permissions. To do
|
||||
this, instead of using @samp{r}, @samp{w}, or @samp{x} after the
|
||||
operator, you use the letter @samp{u}, @samp{g}, or @samp{o}. For
|
||||
example, the mode
|
||||
@example
|
||||
o+g
|
||||
@end example
|
||||
|
||||
@noindent
|
||||
@c FIXME describe the ls -l notation for showing permissions.
|
||||
adds the permissions for users who are in a file's group to the
|
||||
permissions that other users have for the file. Thus, if the file
|
||||
started out as mode 664 (@samp{rw-rw-r--}), the above mode would change
|
||||
|
||||
@@ -28,36 +28,39 @@
|
||||
@ifinfo
|
||||
@format
|
||||
START-INFO-DIR-ENTRY
|
||||
* Shell utilities: (sh-utils). GNU shell utilities.
|
||||
* basename: (sh-utils)basename invocation. Strip directory and suffix.
|
||||
* date: (sh-utils)date invocation. Print/set system date and time.
|
||||
* dirname: (sh-utils)dirname invocation. Strip non-directory suffix.
|
||||
* echo: (sh-utils)echo invocation. Print a line of text.
|
||||
* env: (sh-utils)env invocation. Modify the environment.
|
||||
* expr: (sh-utils)expr invocation. Evaluate expressions.
|
||||
* false: (sh-utils)false invocation. Do nothing, unsuccessfully.
|
||||
* groups: (sh-utils)groups invocation. Print group names a user is in.
|
||||
* 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.
|
||||
* nice: (sh-utils)nice invocation. Modify scheduling priority.
|
||||
* nohup: (sh-utils)nohup invocation. Immunize to hangups.
|
||||
* pathchk: (sh-utils)pathchk invocation. Check file name portability.
|
||||
* printenv: (sh-utils)printenv invocation. Print environment variables.
|
||||
* printf: (sh-utils)printf invocation. Format and print data.
|
||||
* pwd: (sh-utils)pwd invocation. Print working directory.
|
||||
* sleep: (sh-utils)sleep invocation. Delay for a specified time.
|
||||
* stty: (sh-utils)stty invocation. Print/change terminal settings.
|
||||
* su: (sh-utils)su invocation. Modify user and group id.
|
||||
* tee: (sh-utils)tee invocation. Redirect to multiple files.
|
||||
* test: (sh-utils)test invocation. File/string tests.
|
||||
* true: (sh-utils)true invocation. Do nothing, successfully.
|
||||
* tty: (sh-utils)tty invocation. Print terminal name.
|
||||
* uname: (sh-utils)uname invocation. Print system information.
|
||||
* users: (sh-utils)users invocation. Print current user names.
|
||||
* who: (sh-utils)who invocation. Print who is logged in.
|
||||
* whoami: (sh-utils)whoami invocation. Print effective user id.
|
||||
* yes: (sh-utils)yes invocation. Print a string indefinitely.
|
||||
* Shell utilities: (sh-utils). GNU shell utilities.
|
||||
* basename: (sh-utils)basename invocation. Strip directory and suffix.
|
||||
* chroot: (sh-utils)chroot invocation. Specify the root directory.
|
||||
* date: (sh-utils)date invocation. Print/set system date and time.
|
||||
* dirname: (sh-utils)dirname invocation. Strip non-directory suffix.
|
||||
* echo: (sh-utils)echo invocation. Print a line of text.
|
||||
* env: (sh-utils)env invocation. Modify the environment.
|
||||
* expr: (sh-utils)expr invocation. Evaluate expressions.
|
||||
* 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.
|
||||
* 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.
|
||||
* nice: (sh-utils)nice invocation. Modify scheduling priority.
|
||||
* nohup: (sh-utils)nohup invocation. Immunize to hangups.
|
||||
* pathchk: (sh-utils)pathchk invocation. Check file name portability.
|
||||
* printenv: (sh-utils)printenv invocation. Print environment variables.
|
||||
* printf: (sh-utils)printf invocation. Format and print data.
|
||||
* pwd: (sh-utils)pwd invocation. Print working directory.
|
||||
* seq: (sh-utils)seq invocation. Print numeric sequences
|
||||
* sleep: (sh-utils)sleep invocation. Delay for a specified time.
|
||||
* stty: (sh-utils)stty invocation. Print/change terminal settings.
|
||||
* su: (sh-utils)su invocation. Modify user and group id.
|
||||
* tee: (sh-utils)tee invocation. Redirect to multiple files.
|
||||
* test: (sh-utils)test invocation. File/string tests.
|
||||
* true: (sh-utils)true invocation. Do nothing, successfully.
|
||||
* tty: (sh-utils)tty invocation. Print terminal name.
|
||||
* uname: (sh-utils)uname invocation. Print system information.
|
||||
* users: (sh-utils)users invocation. Print current user names.
|
||||
* who: (sh-utils)who invocation. Print who is logged in.
|
||||
* whoami: (sh-utils)whoami invocation. Print effective user id.
|
||||
* yes: (sh-utils)yes invocation. Print a string indefinitely.
|
||||
END-INFO-DIR-ENTRY
|
||||
@end format
|
||||
@end ifinfo
|
||||
@@ -65,7 +68,7 @@ END-INFO-DIR-ENTRY
|
||||
@ifinfo
|
||||
This file documents the GNU shell utilities.
|
||||
|
||||
Copyright (C) 1994 Free Software Foundation, Inc.
|
||||
Copyright (C) 1994, 95, 96 Free Software Foundation, Inc.
|
||||
|
||||
Permission is granted to make and distribute verbatim copies of
|
||||
this manual provided the copyright notice and this permission notice
|
||||
@@ -92,12 +95,12 @@ by the Foundation.
|
||||
@titlepage
|
||||
@title GNU @code{sh-utils}
|
||||
@subtitle A set of shell utilities
|
||||
@subtitle for version @value{VERSION}, @value{RELEASEDATE}
|
||||
@subtitle for version @value{VERSION}, @value{UPDATED}
|
||||
@author David MacKenzie et al.
|
||||
|
||||
@page
|
||||
@vskip 0pt plus 1filll
|
||||
Copyright @copyright{} 1994 Free Software Foundation, Inc.
|
||||
Copyright @copyright{} 1994, 95, 96 Free Software Foundation, Inc.
|
||||
|
||||
Permission is granted to make and distribute verbatim copies of
|
||||
this manual provided the copyright notice and this permission notice
|
||||
@@ -126,18 +129,21 @@ This manual minimally documents version @value{VERSION} of the GNU shell
|
||||
utilities.
|
||||
|
||||
@menu
|
||||
* Introduction:: Caveats, overview, and authors.
|
||||
* Introduction:: Caveats, overview, and authors.
|
||||
* Common options:: Common options.
|
||||
* Date input formats:: Specifying date strings.
|
||||
|
||||
* Date input formats:: Specifying date strings.
|
||||
* Printing text:: echo printf yes
|
||||
* Conditions:: false true test expr
|
||||
* Redirection:: tee
|
||||
* File name manipulation:: dirname basename pathchk
|
||||
* Working context:: pwd stty printenv tty
|
||||
* Working context:: pwd stty printenv tty
|
||||
* User information:: id logname whoami groups users who
|
||||
* System context:: date uname hostname
|
||||
* Modified command invocation:: env nice nohup su
|
||||
* Modified command invocation:: chroot env nice nohup su
|
||||
* Delaying:: sleep
|
||||
* Numeric operations:: factor seq
|
||||
|
||||
* Index:: General index.
|
||||
@end menu
|
||||
@end ifinfo
|
||||
@@ -245,15 +251,13 @@ This section describes commands that display text strings.
|
||||
@cindex text, displaying
|
||||
@cindex arbitrary text, displaying
|
||||
|
||||
Synopsis:
|
||||
@code{echo} writes each given @var{string} to standard output, with a
|
||||
space between each and a newline after the last one. Synopsis:
|
||||
|
||||
@example
|
||||
echo [@var{option}]@dots{} [@var{string}]@dots{}
|
||||
@end example
|
||||
|
||||
@code{echo} writes each given @var{string} to standard output, with a
|
||||
space between each and a newline after the last one.
|
||||
|
||||
The program accepts the following options. Also see @ref{Common options}.
|
||||
|
||||
@table @samp
|
||||
@@ -298,7 +302,7 @@ a valid octal number, it is printed literally.
|
||||
@section @code{printf}: Format and print data
|
||||
|
||||
@pindex printf
|
||||
Synopsis:
|
||||
@code{printf} does formatted printing of text. Synopsis:
|
||||
|
||||
@example
|
||||
printf @var{format} [@var{argument}]@dots{}
|
||||
@@ -699,9 +703,9 @@ Operands are either numbers or strings. @code{expr} coerces
|
||||
anything appearing in an operand position to an integer or a string
|
||||
depending on the operation being applied to it.
|
||||
|
||||
Strings are not quoted for @code{expr}, though you may need to quote
|
||||
them to protect characters with special meaning to the shell, e.g.,
|
||||
spaces.
|
||||
Strings are not quoted for @code{expr} itself, though you may need to
|
||||
quote them to protect characters with special meaning to the shell,
|
||||
e.g., spaces.
|
||||
|
||||
@cindex parentheses for grouping
|
||||
Operators may given as infix symbols or prefix keywords. Parentheses
|
||||
@@ -897,11 +901,11 @@ to change the input source or output destination of a command. But one
|
||||
useful redirection is performed by a separate command, not by the shell;
|
||||
it's described here.
|
||||
|
||||
|
||||
@menu
|
||||
* tee invocation:: Redirect output to multiple files.
|
||||
@end menu
|
||||
|
||||
|
||||
@node tee invocation
|
||||
@section @code{tee}: Redirect output to multiple files
|
||||
|
||||
@@ -912,9 +916,7 @@ it's described here.
|
||||
|
||||
The @code{tee} command copies standard input to standard output and also
|
||||
to any files given as arguments. This is useful when you want not only
|
||||
to send some data down a pipe, but also to save a copy.
|
||||
|
||||
Synopsis:
|
||||
to send some data down a pipe, but also to save a copy. Synopsis:
|
||||
|
||||
@example
|
||||
tee [@var{option}]@dots{} [@var{file}]@dots{}
|
||||
@@ -969,16 +971,16 @@ This section describes commands that manipulate file names.
|
||||
@cindex file names, stripping directory and suffix
|
||||
@cindex leading directory components, stripping
|
||||
|
||||
Synopsis:
|
||||
@code{basename} removes any leading directory components from
|
||||
@var{name}. Synopsis:
|
||||
|
||||
@example
|
||||
basename @var{name} [@var{suffix}]
|
||||
@end example
|
||||
|
||||
The @code{basename} command removes any leading directory components
|
||||
from @var{name}. If @var{suffix} is specified and is identical
|
||||
to the end of @var{name}, it is removed from @var{name} as well.
|
||||
@code{basename} prints the result on standard output.
|
||||
If @var{suffix} is specified and is identical to the end of @var{name},
|
||||
it is removed from @var{name} as well. @code{basename} prints the
|
||||
result on standard output.
|
||||
|
||||
The only options are @samp{--help} and @samp{--version}. @xref{Common
|
||||
options}.
|
||||
@@ -992,15 +994,15 @@ options}.
|
||||
@cindex stripping non-directory suffix
|
||||
@cindex non-directory suffix, stripping
|
||||
|
||||
Synopsis:
|
||||
@code{dirname} prints all but the final slash-delimited component of
|
||||
a string (presumably a filename). Synopsis:
|
||||
|
||||
@example
|
||||
dirname @var{name}
|
||||
@end example
|
||||
|
||||
@code{dirname} prints all but the final slash-delimited component
|
||||
of @var{name}. If @var{name} is a single component,
|
||||
@code{dirname} prints @samp{.} (meaning the current directory).
|
||||
If @var{name} is a single component, @code{dirname} prints @samp{.}
|
||||
(meaning the current directory).
|
||||
|
||||
The only options are @samp{--help} and @samp{--version}. @xref{Common
|
||||
options}.
|
||||
@@ -1014,7 +1016,7 @@ options}.
|
||||
@cindex valid file names, checking for
|
||||
@cindex portable file names, checking for
|
||||
|
||||
Synopsis:
|
||||
@code{pathchk} checks portability of filenames. Synopsis:
|
||||
|
||||
@example
|
||||
pathchk [@var{option}]@dots{} @var{name}@dots{}
|
||||
@@ -1108,6 +1110,14 @@ The only options are a lone @samp{--help} or
|
||||
@cindex terminal settings
|
||||
@cindex line settings of terminal
|
||||
|
||||
@code{stty} prints or changes terminal characteristics, such as baud rate.
|
||||
Synopses:
|
||||
|
||||
@example
|
||||
stty [@var{setting}]@dots{}
|
||||
stty [@var{option}]
|
||||
@end example
|
||||
|
||||
If given no arguments, @code{stty} prints the baud rate, line
|
||||
discipline number (on systems that support it), and line settings
|
||||
that have been changed from the values set by @samp{stty sane}.
|
||||
@@ -1117,13 +1127,6 @@ standard input.
|
||||
@code{stty} accepts many non-option arguments that change aspects of
|
||||
the terminal line operation, as described below.
|
||||
|
||||
Synopses:
|
||||
|
||||
@example
|
||||
stty [@var{setting}]@dots{}
|
||||
stty [@var{option}]
|
||||
@end example
|
||||
|
||||
The program accepts the following options. Also see @ref{Common options}.
|
||||
|
||||
@table @samp
|
||||
@@ -1735,7 +1738,7 @@ of: 0 50 75 110 134 134.5 150 200 300 600 1200 1800 2400 4800 9600
|
||||
@cindex printing all or some environment variables
|
||||
@cindex environment variables, printing
|
||||
|
||||
Synopsis:
|
||||
@code{printenv} prints environment variable values. Synopsis:
|
||||
|
||||
@example
|
||||
printenv [@var{option}] [@var{variable}]@dots{}
|
||||
@@ -1767,7 +1770,6 @@ Exit status:
|
||||
|
||||
@code{tty} prints the file name of the tty connected to its standard
|
||||
input. It prints @samp{not a tty} if standard input is not a tty.
|
||||
|
||||
Synopsis:
|
||||
|
||||
@example
|
||||
@@ -1826,10 +1828,8 @@ logins, groups, and so forth.
|
||||
@cindex effective uid and gid, printing
|
||||
@cindex printing real and effective uid and gid
|
||||
|
||||
@noindent @code{id} prints information about the given user, or the process
|
||||
running it if no user is specified.
|
||||
|
||||
Synopsis:
|
||||
@code{id} prints information about the given user, or the process
|
||||
running it if no user is specified. Synopsis:
|
||||
|
||||
@example
|
||||
id [@var{option}]@dots{} [@var{username}]
|
||||
@@ -1923,11 +1923,9 @@ options}.
|
||||
@cindex supplementary groups, printing
|
||||
|
||||
@code{groups} prints the names of the primary and any supplementary
|
||||
groups that each given @var{username}, or the current process if none
|
||||
are given, is in. If user names are given, the name of each user is
|
||||
printed before the list of that user's groups.
|
||||
|
||||
Synopsis:
|
||||
groups for each given @var{username}, or the current process if no names
|
||||
are given. If names are given, the name of each user is printed before
|
||||
the list of that user's groups. Synopsis:
|
||||
|
||||
@example
|
||||
groups [@var{username}]@dots{}
|
||||
@@ -1951,9 +1949,7 @@ options}.
|
||||
names of users currently logged in to the current host. Each user name
|
||||
corresponds to a login session, so if a user has more than one login
|
||||
session, that user's name will appear the same number of times in the
|
||||
output.
|
||||
|
||||
Synopsis:
|
||||
output. Synopsis:
|
||||
|
||||
@example
|
||||
users [@var{file}]
|
||||
@@ -1976,6 +1972,7 @@ options}.
|
||||
@cindex printing current user information
|
||||
@cindex information, about current users
|
||||
|
||||
@code{who} prints information about users who are currently logged on.
|
||||
Synopsis:
|
||||
|
||||
@example
|
||||
@@ -2085,10 +2082,8 @@ information.
|
||||
@cindex time, printing or setting
|
||||
@cindex printing the current time
|
||||
|
||||
@code{date} with no arguments prints the current time and date, in
|
||||
the format of the @samp{%c} directive (described below).
|
||||
|
||||
Synopses:
|
||||
@code{date} with no arguments prints the current time and date, in the
|
||||
format of the @samp{%c} directive (described below). Synopses:
|
||||
|
||||
@example
|
||||
date [@var{option}]@dots{} [+@var{format}]
|
||||
@@ -2107,10 +2102,10 @@ directives, which start with @samp{%}, characters in the format string
|
||||
are printed unchanged. The directives are described below.
|
||||
|
||||
@menu
|
||||
* Time directives:: %[HIklMprsSTXZ]
|
||||
* Time directives:: %[HIklMprsSTXzZ]
|
||||
* Date directives:: %[aAbBcdDhjmUwWxyY]
|
||||
* Literal directives:: %[%nt]
|
||||
* Padding:: Pad with zeroes, spaces (%_), or nothing (%-).
|
||||
* Padding:: Pad with zeroes, spaces (%_), or nothing (%-).
|
||||
* Setting the time:: Changing the system clock.
|
||||
* Options for date:: Instead of the current time.
|
||||
* Examples of date:: Examples.
|
||||
@@ -2155,10 +2150,9 @@ time, 24-hour (hh:mm:ss)
|
||||
@item %X
|
||||
locale's time representation (%H:%M:%S)
|
||||
@item %z
|
||||
RFC-822 style numeric time zone (e.g., -0600 or +0100), or nothing
|
||||
if no time zone is determinable.
|
||||
Note that this value reflects the @emph{current} time zone.
|
||||
It isn't changed by the @samp{--date} option.
|
||||
RFC-822 style numeric time zone (e.g., -0600 or +0100), or nothing if no
|
||||
time zone is determinable. This value reflects the @emph{current} time
|
||||
zone. It isn't changed by the @samp{--date} option.
|
||||
@item %Z
|
||||
time zone (e.g., EDT), or nothing if no timezone is
|
||||
determinable.
|
||||
@@ -2197,11 +2191,19 @@ day of year (001@dots{}366)
|
||||
@item %m
|
||||
month (01@dots{}12)
|
||||
@item %U
|
||||
week number of year with Sunday as first day of week (00@dots{}53)
|
||||
week number of year with Sunday as first day of week (00@dots{}53).
|
||||
Days in a new year preceding the first Sunday are in week zero.
|
||||
@item %V
|
||||
week number of year with Monday as first day of the week as a decimal
|
||||
(01@dots{}53). If the week containing January 1 has four or more days in
|
||||
the new year, then it is considered week 1; otherwise, it is week 53 of
|
||||
the previous year, and the next week is week 1. (See the ISO 8601: 1988
|
||||
standard.)
|
||||
@item %w
|
||||
day of week (0@dots{}6) with 0 corresponding to Sunday
|
||||
@item %W
|
||||
week number of year with Monday as first day of week (00@dots{}53)
|
||||
week number of year with Monday as first day of week (00@dots{}53).
|
||||
Days in a new year preceding the first Sunday are in week zero.
|
||||
@item %x
|
||||
locale's date representation (mm/dd/yy)
|
||||
@item %y
|
||||
@@ -2351,10 +2353,8 @@ If @samp{--utc} is also specified, use @samp{GMT} in place of @samp{%z}.
|
||||
@itemx --reference=@var{file}
|
||||
@opindex -r
|
||||
@opindex --reference
|
||||
Display the time and date as obtained from a reference @var{file},
|
||||
instead of the current time and date. Each file has a few timestamps
|
||||
associated with it. In this context, the time and date of the last
|
||||
modification are used.
|
||||
Display the time and date reference according to the last modification
|
||||
time of @var{file}, instead of the current time and date.
|
||||
|
||||
@item -s @var{datestr}
|
||||
@itemx --set=@var{datestr}
|
||||
@@ -2456,9 +2456,7 @@ Mon, 25 Mar 1996 23:34:17 -0600
|
||||
|
||||
@code{uname} prints information about the machine and operating system
|
||||
it is run on. If no options are given, @code{uname} acts as if the
|
||||
@code{-s} option were given.
|
||||
|
||||
Synopsis:
|
||||
@code{-s} option were given. Synopsis:
|
||||
|
||||
@example
|
||||
uname [@var{option}]@dots{}
|
||||
@@ -2543,9 +2541,7 @@ Print the operating system version.
|
||||
With no arguments, @code{hostname} prints the name of the current host
|
||||
system. With one argument, it sets the current host name to the
|
||||
specified string. You must have appropriate privileges to set the host
|
||||
name.
|
||||
|
||||
Synopsis:
|
||||
name. Synopsis:
|
||||
|
||||
@example
|
||||
hostname [@var{name}]
|
||||
@@ -2567,6 +2563,7 @@ different than the current one: a modified environment, as a different
|
||||
user, etc.
|
||||
|
||||
@menu
|
||||
* chroot invocation:: Modify the root directory.
|
||||
* env invocation:: Modify environment variables.
|
||||
* nice invocation:: Modify scheduling priority.
|
||||
* nohup invocation:: Immunize to hangups.
|
||||
@@ -2574,17 +2571,42 @@ user, etc.
|
||||
@end menu
|
||||
|
||||
|
||||
@node chroot invocation
|
||||
@section @code{chroot}: Run a command with a different root directory
|
||||
|
||||
@pindex chroot
|
||||
@cindex running a program in a specified root directory
|
||||
@cindex root directory, running a program in a specified
|
||||
|
||||
@code{chroot} runs a command with a specified root directory.
|
||||
On many systems, only the super-user can do this.
|
||||
Synopses:
|
||||
|
||||
@example
|
||||
chroot @var{newroot} [@var{command} [@var{args}]@dots{}]
|
||||
chroot @var{option}
|
||||
@end example
|
||||
|
||||
Ordinarily, filenames are looked up starting at the root of the
|
||||
directory structure, i.e., @file{/}. @code{chroot} changes the root to
|
||||
the directory @var{newroot} (which must exist) and then runs
|
||||
@var{command} with optional @var{args}. If @var{command} is not
|
||||
specified, the default is the value of the @code{SHELL} environment
|
||||
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}.
|
||||
|
||||
|
||||
@node env invocation
|
||||
@section @code{env}: Run a command in a modified environment
|
||||
|
||||
@pindex env
|
||||
@cindex environment, running a program in a modified
|
||||
@cindex modified environment, running a program in
|
||||
@cindex modified environment, running a program in a
|
||||
@cindex running a program in a modified environment
|
||||
|
||||
@code{env} runs a command with an environment modified as specified
|
||||
by the command line arguments.
|
||||
|
||||
Synopses:
|
||||
@code{env} runs a command with a modified environment. Synopses:
|
||||
|
||||
@example
|
||||
env [@var{option}]@dots{} [@var{name}=@var{value}]@dots{} @c
|
||||
@@ -2639,6 +2661,13 @@ Start with an empty environment, ignoring the inherited environment.
|
||||
@cindex priority, modifying
|
||||
@cindex appropriate privileges
|
||||
|
||||
@code{nice} prints or modifies the scheduling priority of a job.
|
||||
Synopsis:
|
||||
|
||||
@example
|
||||
nice [@var{option}]@dots{} [@var{command} [@var{arg}]@dots{}]
|
||||
@end example
|
||||
|
||||
If no arguments are given, @code{nice} prints the current scheduling
|
||||
priority, which it inherited. Otherwise, @code{nice} runs the given
|
||||
@var{command} with its scheduling priority adjusted. If no
|
||||
@@ -2647,12 +2676,6 @@ priority, which it inherited. Otherwise, @code{nice} runs the given
|
||||
adjustment. The priority can be adjusted by @code{nice} over the range
|
||||
of -20 (the highest priority) to 19 (the lowest).
|
||||
|
||||
Synopsis:
|
||||
|
||||
@example
|
||||
nice [@var{option}]@dots{} [@var{command} [@var{arg}]@dots{}]
|
||||
@end example
|
||||
|
||||
@cindex conflicts with shell built-ins
|
||||
@cindex built-in shell commands, conflicts with
|
||||
Because most shells have a built-in command by the same name, using the
|
||||
@@ -2678,24 +2701,24 @@ Add @var{adjustment} instead of 10 to the command's priority.
|
||||
@pindex nohup
|
||||
@cindex hangups, immunity to
|
||||
@cindex immunity to hangups
|
||||
@cindex logging out and continuing to run
|
||||
|
||||
@flindex nohup.out
|
||||
@code{nohup} runs the given @var{command} with hangup signals ignored,
|
||||
so that the command can continue running in the background after you log
|
||||
out.
|
||||
|
||||
Synopsis:
|
||||
out. Synopsis:
|
||||
|
||||
@example
|
||||
nohup @var{command} [@var{arg}]@dots{}
|
||||
@end example
|
||||
|
||||
@flindex nohup.out
|
||||
Also, the scheduling priority is increased by 5. If standard output is a
|
||||
tty, it and standard error are redirected so that they are appended to
|
||||
the file @file{nohup.out}; if that cannot be written to, they are
|
||||
appended to the file @file{$HOME/nohup.out}. If that cannot be written
|
||||
to, the command is not run.
|
||||
@code{nohup} increases the scheduling priority of @var{command} by 5, so
|
||||
it has a slightly smaller change to run. If standard output is a tty,
|
||||
it and standard error are redirected so that they are appended to the
|
||||
file @file{nohup.out}; if that cannot be written to, they are appended
|
||||
to the file @file{$HOME/nohup.out}. If that cannot be written to, the
|
||||
command is not run.
|
||||
|
||||
If @code{nohup} creates either @file{nohup.out} or
|
||||
@file{$HOME/nohup.out}, it creates it with no ``group'' or ``other''
|
||||
@@ -2721,9 +2744,7 @@ options}.
|
||||
|
||||
@code{su} allows one user to temporarily become another user. It runs a
|
||||
command (often an interactive shell) with the real and effective user
|
||||
id, group id, and supplemental groups of a given @var{user}.
|
||||
|
||||
Synopsis:
|
||||
id, group id, and supplemental groups of a given @var{user}. Synopsis:
|
||||
|
||||
@example
|
||||
su [@var{option}]@dots{} [@var{user} [@var{arg}]@dots{}]
|
||||
@@ -2865,7 +2886,7 @@ might find this idea strange at first.
|
||||
@cindex delaying commands
|
||||
@cindex commands for delaying
|
||||
|
||||
Perhaps @code{wait} or other commands should be described here also?
|
||||
@c Perhaps @code{wait} or other commands should be described here also?
|
||||
|
||||
@menu
|
||||
* sleep invocation:: Delay for a specified time.
|
||||
@@ -2880,7 +2901,6 @@ Perhaps @code{wait} or other commands should be described here also?
|
||||
|
||||
@code{sleep} pauses for an amount of time specified by the sum of
|
||||
the values of the command line arguments.
|
||||
|
||||
Synopsis:
|
||||
|
||||
@example
|
||||
@@ -2906,6 +2926,82 @@ The only options are @samp{--help} and @samp{--version}. @xref{Common
|
||||
options}.
|
||||
|
||||
|
||||
@node Numeric operations
|
||||
@chapter Numeric operations
|
||||
|
||||
@cindex numeric operations
|
||||
These programs do numerically-related operations.
|
||||
|
||||
@menu
|
||||
* factor invocation:: Show factors of numbers.
|
||||
* seq invocation:: Print sequences of numbers.
|
||||
@end menu
|
||||
|
||||
|
||||
@node factor invocation
|
||||
@section @code{factor}: Print prime factors
|
||||
|
||||
@pindex factor
|
||||
@cindex prime factors
|
||||
|
||||
@code{factor} prints prime factors. Synopses:
|
||||
|
||||
@example
|
||||
factor [@var{number}]@dots{}
|
||||
factor @var{option}
|
||||
@end example
|
||||
|
||||
If no @var{number} is specified on the command line, @code{factor} reads
|
||||
numbers from standard input, delimited by newlines, tabs, or spaces.
|
||||
|
||||
The only options are @samp{--help} and @samp{--version}. @xref{Common
|
||||
options}.
|
||||
|
||||
|
||||
@node seq invocation
|
||||
@section @code{seq}: Print numeric sequences
|
||||
|
||||
@pindex seq
|
||||
@cindex numeric sequences
|
||||
@cindex sequence of numbers
|
||||
|
||||
@code{seq} prints a sequence of numbers to standard output. Synopses:
|
||||
|
||||
@example
|
||||
seq [@var{option}]@dots{} [@var{first} [@var{step}]] @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.
|
||||
|
||||
The program accepts the following options. Also see @ref{Common options}.
|
||||
|
||||
@table @samp
|
||||
@item -f @var{format}
|
||||
@itemx --format=@var{format}
|
||||
@opindex -f @var{format}
|
||||
@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}.
|
||||
|
||||
@item -s @var{string}
|
||||
@itemx --separator=@var{string}
|
||||
@cindex separator for numbers in @code{seq}
|
||||
Separate numbers with @var{string}; default is a newline.
|
||||
The output always terminates with a newline.
|
||||
|
||||
@item -w
|
||||
@itemx --equal-width
|
||||
Print all numbers with the same width, by padding with leading zeroes.
|
||||
(To have other kinds of padding, use @samp{--format}).
|
||||
|
||||
@end table
|
||||
|
||||
|
||||
@node Index
|
||||
@unnumbered Index
|
||||
|
||||
|
||||
399
doc/texinfo.tex
399
doc/texinfo.tex
@@ -1,6 +1,7 @@
|
||||
%% TeX macros to handle texinfo files
|
||||
|
||||
% Copyright (C) 1985, 86, 88, 90, 91, 92, 93, 1994 Free Software Foundation, Inc.
|
||||
% Copyright (C) 1985, 86, 88, 90, 91, 92, 93,
|
||||
% 94, 95, 1996 Free Software Foundation, Inc.
|
||||
|
||||
%This texinfo.tex file is free software; you can redistribute it and/or
|
||||
%modify it under the terms of the GNU General Public License as
|
||||
@@ -14,8 +15,8 @@
|
||||
|
||||
%You should have received a copy of the GNU General Public License
|
||||
%along with this texinfo.tex file; see the file COPYING. If not, write
|
||||
%to the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139,
|
||||
%USA.
|
||||
%to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
%Boston, MA 02111-1307, USA.
|
||||
|
||||
|
||||
%In other words, you are welcome to use, share and improve this program.
|
||||
@@ -34,7 +35,7 @@
|
||||
|
||||
% This automatically updates the version number based on RCS.
|
||||
\def\deftexinfoversion$#1: #2 ${\def\texinfoversion{#2}}
|
||||
\deftexinfoversion$Revision: 1.9 $
|
||||
\deftexinfoversion$Revision: 1.10 $
|
||||
\message{Loading texinfo package [Version \texinfoversion]:}
|
||||
|
||||
% If in a .fmt file, print the version number
|
||||
@@ -69,7 +70,7 @@
|
||||
% Avoid using \@M directly, because that causes trouble
|
||||
% if the definition is written into an index file.
|
||||
\global\let\tiepenalty = \@M
|
||||
\gdef\tie{\lvvmode\penalty\tiepenalty\ }
|
||||
\gdef\tie{\leavevmode\penalty\tiepenalty\ }
|
||||
}
|
||||
\let\~ = \tie % And make it available as @~.
|
||||
|
||||
@@ -536,17 +537,34 @@ where each line of input produces a line of output.}
|
||||
\def\nofillexdentyyy #1{{\advance \leftskip by -\exdentamount
|
||||
\leftline{\hskip\leftskip{\rm#1}}}}
|
||||
|
||||
% @inmargin{TEXT} puts TEXT in the margin next to the current paragraph.
|
||||
|
||||
\def\inmargin#1{%
|
||||
\strut\vadjust{\nobreak\kern-\strutdepth
|
||||
\vtop to \strutdepth{\baselineskip\strutdepth\vss
|
||||
\llap{\rightskip=\inmarginspacing \vbox{\noindent #1}}\null}}}
|
||||
\newskip\inmarginspacing \inmarginspacing=1cm
|
||||
\def\strutdepth{\dp\strutbox}
|
||||
|
||||
%\hbox{{\rm#1}}\hfil\break}}
|
||||
|
||||
% @include file insert text of that file as input.
|
||||
|
||||
\def\include{\parsearg\includezzz}
|
||||
%Use \input\thisfile to avoid blank after \input, which may be an active
|
||||
%char (in which case the blank would become the \input argument).
|
||||
%The grouping keeps the value of \thisfile correct even when @include
|
||||
%is nested.
|
||||
\def\includezzz #1{\begingroup
|
||||
\def\thisfile{#1}\input\thisfile
|
||||
% Allow normal characters that we make active in the argument (a file name).
|
||||
\def\include{\begingroup
|
||||
\catcode`\\=12
|
||||
\catcode`~=12
|
||||
\catcode`^=12
|
||||
\catcode`_=12
|
||||
\catcode`|=12
|
||||
\catcode`<=12
|
||||
\catcode`>=12
|
||||
\catcode`+=12
|
||||
\parsearg\includezzz}
|
||||
% Restore active chars for included file.
|
||||
\def\includezzz#1{\endgroup\begingroup
|
||||
% Read the included file in a group so nested @include's work.
|
||||
\def\thisfile{#1}%
|
||||
\input\thisfile
|
||||
\endgroup}
|
||||
|
||||
\def\thisfile{}
|
||||
@@ -631,6 +649,15 @@ where each line of input produces a line of output.}
|
||||
\let\printindex = \relax
|
||||
\let\pxref = \relax
|
||||
\let\settitle = \relax
|
||||
\let\setchapternewpage = \relax
|
||||
\let\setchapterstyle = \relax
|
||||
\let\everyheading = \relax
|
||||
\let\evenheading = \relax
|
||||
\let\oddheading = \relax
|
||||
\let\everyfooting = \relax
|
||||
\let\evenfooting = \relax
|
||||
\let\oddfooting = \relax
|
||||
\let\headings = \relax
|
||||
\let\include = \relax
|
||||
\let\lowersections = \relax
|
||||
\let\down = \relax
|
||||
@@ -654,6 +681,11 @@ where each line of input produces a line of output.}
|
||||
\def\menu{\doignore{menu}}
|
||||
\def\direntry{\doignore{direntry}}
|
||||
|
||||
% @dircategory CATEGORY -- specify a category of the dir file
|
||||
% which this file should belong to. Ignore this in TeX.
|
||||
|
||||
\def\dircategory{\comment}
|
||||
|
||||
% Ignore text until a line `@end #1'.
|
||||
%
|
||||
\def\doignore#1{\begingroup
|
||||
@@ -689,7 +721,7 @@ where each line of input produces a line of output.}
|
||||
\immediate\write16{ script ``tex3patch'' from the Texinfo distribution}
|
||||
\immediate\write16{ to use a workaround.}
|
||||
\immediate\write16{}
|
||||
\warnedobstrue
|
||||
\global\warnedobstrue
|
||||
\fi
|
||||
}
|
||||
|
||||
@@ -765,15 +797,17 @@ where each line of input produces a line of output.}
|
||||
% Since we want to separate VAR from REST-OF-LINE (which might be
|
||||
% empty), we can't just use \parsearg; we have to insert a space of our
|
||||
% own to delimit the rest of the line, and then take it out again if we
|
||||
% didn't need it.
|
||||
% didn't need it. Make sure the catcode of space is correct to avoid
|
||||
% losing inside @example, for instance.
|
||||
%
|
||||
\def\set{\parsearg\setxxx}
|
||||
\def\set{\begingroup\catcode` =10 \parsearg\setxxx}
|
||||
\def\setxxx#1{\setyyy#1 \endsetyyy}
|
||||
\def\setyyy#1 #2\endsetyyy{%
|
||||
\def\temp{#2}%
|
||||
\ifx\temp\empty \global\expandafter\let\csname SET#1\endcsname = \empty
|
||||
\else \setzzz{#1}#2\endsetzzz % Remove the trailing space \setxxx inserted.
|
||||
\fi
|
||||
\endgroup
|
||||
}
|
||||
% Can't use \xdef to pre-expand #2 and save some time, since \temp or
|
||||
% \next or other control sequences that we've defined might get us into
|
||||
@@ -910,6 +944,21 @@ where each line of input produces a line of output.}
|
||||
\def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}},
|
||||
node \samp{\ignorespaces#1{}}}
|
||||
|
||||
\def\macro#1{\begingroup\ignoresections\catcode`\#=6\def\macrotemp{#1}\parsearg\macroxxx}
|
||||
\def\macroxxx#1#2 \end macro{%
|
||||
\expandafter\gdef\macrotemp#1{#2}%
|
||||
\endgroup}
|
||||
|
||||
%\def\linemacro#1{\begingroup\ignoresections\catcode`\#=6\def\macrotemp{#1}\parsearg\linemacroxxx}
|
||||
%\def\linemacroxxx#1#2 \end linemacro{%
|
||||
%\let\parsearg=\relax
|
||||
%\edef\macrotempx{\csname M\butfirst\expandafter\string\macrotemp\endcsname}%
|
||||
%\expandafter\xdef\macrotemp{\parsearg\macrotempx}%
|
||||
%\expandafter\gdef\macrotempx#1{#2}%
|
||||
%\endgroup}
|
||||
|
||||
%\def\butfirst#1{}
|
||||
|
||||
\message{fonts,}
|
||||
|
||||
% Font-change commands.
|
||||
@@ -920,12 +969,16 @@ where each line of input produces a line of output.}
|
||||
\def\sf{\fam=\sffam \tensf}
|
||||
\let\li = \sf % Sometimes we call it \li, not \sf.
|
||||
|
||||
% We don't need math for this one.
|
||||
\def\ttsl{\tenttsl}
|
||||
|
||||
%% Try out Computer Modern fonts at \magstephalf
|
||||
\let\mainmagstep=\magstephalf
|
||||
|
||||
% Set the font macro #1 to the font named #2, adding on the
|
||||
% specified font prefix (normally `cm').
|
||||
\def\setfont#1#2{\font#1=\fontprefix#2}
|
||||
% #3 is the font's design size, #4 is a scale factor
|
||||
\def\setfont#1#2#3#4{\font#1=\fontprefix#2#3 scaled #4}
|
||||
|
||||
% Use cm as the default font prefix.
|
||||
% To specify the font prefix, you must define \fontprefix
|
||||
@@ -933,29 +986,46 @@ where each line of input produces a line of output.}
|
||||
\ifx\fontprefix\undefined
|
||||
\def\fontprefix{cm}
|
||||
\fi
|
||||
% Support font families that don't use the same naming scheme as CM.
|
||||
\def\rmshape{r}
|
||||
\def\rmbshape{bx} %where the normal face is bold
|
||||
\def\bfshape{b}
|
||||
\def\bxshape{bx}
|
||||
\def\ttshape{tt}
|
||||
\def\ttbshape{tt}
|
||||
\def\ttslshape{sltt}
|
||||
\def\itshape{ti}
|
||||
\def\itbshape{bxti}
|
||||
\def\slshape{sl}
|
||||
\def\slbshape{bxsl}
|
||||
\def\sfshape{ss}
|
||||
\def\sfbshape{ss}
|
||||
\def\scshape{csc}
|
||||
\def\scbshape{csc}
|
||||
|
||||
\ifx\bigger\relax
|
||||
\let\mainmagstep=\magstep1
|
||||
\setfont\textrm{r12}
|
||||
\setfont\texttt{tt12}
|
||||
\setfont\textrm\rmshape{12}{1000}
|
||||
\setfont\texttt\ttshape{12}{1000}
|
||||
\else
|
||||
\setfont\textrm{r10 scaled \mainmagstep}
|
||||
\setfont\texttt{tt10 scaled \mainmagstep}
|
||||
\setfont\textrm\rmshape{10}{\mainmagstep}
|
||||
\setfont\texttt\ttshape{10}{\mainmagstep}
|
||||
\fi
|
||||
% Instead of cmb10, you many want to use cmbx10.
|
||||
% cmbx10 is a prettier font on its own, but cmb10
|
||||
% looks better when embedded in a line with cmr10.
|
||||
\setfont\textbf{b10 scaled \mainmagstep}
|
||||
\setfont\textit{ti10 scaled \mainmagstep}
|
||||
\setfont\textsl{sl10 scaled \mainmagstep}
|
||||
\setfont\textsf{ss10 scaled \mainmagstep}
|
||||
\setfont\textsc{csc10 scaled \mainmagstep}
|
||||
\setfont\textbf\bfshape{10}{\mainmagstep}
|
||||
\setfont\textit\itshape{10}{\mainmagstep}
|
||||
\setfont\textsl\slshape{10}{\mainmagstep}
|
||||
\setfont\textsf\sfshape{10}{\mainmagstep}
|
||||
\setfont\textsc\scshape{10}{\mainmagstep}
|
||||
\setfont\textttsl\ttslshape{10}{\mainmagstep}
|
||||
\font\texti=cmmi10 scaled \mainmagstep
|
||||
\font\textsy=cmsy10 scaled \mainmagstep
|
||||
|
||||
% A few fonts for @defun, etc.
|
||||
\setfont\defbf{bx10 scaled \magstep1} %was 1314
|
||||
\setfont\deftt{tt10 scaled \magstep1}
|
||||
\setfont\defbf\bxshape{10}{\magstep1} %was 1314
|
||||
\setfont\deftt\ttshape{10}{\magstep1}
|
||||
\def\df{\let\tentt=\deftt \let\tenbf = \defbf \bf}
|
||||
|
||||
% Fonts for indices and small examples.
|
||||
@@ -963,66 +1033,70 @@ where each line of input produces a line of output.}
|
||||
% because texinfo normally uses the slanted fonts for that.
|
||||
% Do not make many font distinctions in general in the index, since they
|
||||
% aren't very useful.
|
||||
\setfont\ninett{tt9}
|
||||
\setfont\indrm{r9}
|
||||
\setfont\indit{sl9}
|
||||
\setfont\ninett\ttshape{9}{1000}
|
||||
\setfont\indrm\rmshape{9}{1000}
|
||||
\setfont\indit\slshape{9}{1000}
|
||||
\let\indsl=\indit
|
||||
\let\indtt=\ninett
|
||||
\let\indttsl=\ninett
|
||||
\let\indsf=\indrm
|
||||
\let\indbf=\indrm
|
||||
\setfont\indsc{csc10 at 9pt}
|
||||
\setfont\indsc\scshape{10}{900}
|
||||
\font\indi=cmmi9
|
||||
\font\indsy=cmsy9
|
||||
|
||||
% Fonts for headings
|
||||
\setfont\chaprm{bx12 scaled \magstep2}
|
||||
\setfont\chapit{ti12 scaled \magstep2}
|
||||
\setfont\chapsl{sl12 scaled \magstep2}
|
||||
\setfont\chaptt{tt12 scaled \magstep2}
|
||||
\setfont\chapsf{ss12 scaled \magstep2}
|
||||
\setfont\chaprm\rmbshape{12}{\magstep2}
|
||||
\setfont\chapit\itbshape{10}{\magstep3}
|
||||
\setfont\chapsl\slbshape{10}{\magstep3}
|
||||
\setfont\chaptt\ttbshape{12}{\magstep2}
|
||||
\setfont\chapttsl\ttslshape{10}{\magstep3}
|
||||
\setfont\chapsf\sfbshape{12}{\magstep2}
|
||||
\let\chapbf=\chaprm
|
||||
\setfont\chapsc{csc10 scaled\magstep3}
|
||||
\setfont\chapsc\scbshape{10}{\magstep3}
|
||||
\font\chapi=cmmi12 scaled \magstep2
|
||||
\font\chapsy=cmsy10 scaled \magstep3
|
||||
|
||||
\setfont\secrm{bx12 scaled \magstep1}
|
||||
\setfont\secit{ti12 scaled \magstep1}
|
||||
\setfont\secsl{sl12 scaled \magstep1}
|
||||
\setfont\sectt{tt12 scaled \magstep1}
|
||||
\setfont\secsf{ss12 scaled \magstep1}
|
||||
\setfont\secbf{bx12 scaled \magstep1}
|
||||
\setfont\secsc{csc10 scaled\magstep2}
|
||||
\setfont\secrm\rmbshape{12}{\magstep1}
|
||||
\setfont\secit\itbshape{10}{\magstep2}
|
||||
\setfont\secsl\slbshape{10}{\magstep2}
|
||||
\setfont\sectt\ttbshape{12}{\magstep1}
|
||||
\setfont\secttsl\ttslshape{10}{\magstep2}
|
||||
\setfont\secsf\sfbshape{12}{\magstep1}
|
||||
\let\secbf\secrm
|
||||
\setfont\secsc\scbshape{10}{\magstep2}
|
||||
\font\seci=cmmi12 scaled \magstep1
|
||||
\font\secsy=cmsy10 scaled \magstep2
|
||||
|
||||
% \setfont\ssecrm{bx10 scaled \magstep1} % This size an font looked bad.
|
||||
% \setfont\ssecit{cmti10 scaled \magstep1} % The letters were too crowded.
|
||||
% \setfont\ssecsl{sl10 scaled \magstep1}
|
||||
% \setfont\ssectt{tt10 scaled \magstep1}
|
||||
% \setfont\ssecsf{ss10 scaled \magstep1}
|
||||
% \setfont\ssecrm\bxshape{10}{\magstep1} % This size an font looked bad.
|
||||
% \setfont\ssecit\itshape{10}{\magstep1} % The letters were too crowded.
|
||||
% \setfont\ssecsl\slshape{10}{\magstep1}
|
||||
% \setfont\ssectt\ttshape{10}{\magstep1}
|
||||
% \setfont\ssecsf\sfshape{10}{\magstep1}
|
||||
|
||||
%\setfont\ssecrm{b10 scaled 1315} % Note the use of cmb rather than cmbx.
|
||||
%\setfont\ssecit{ti10 scaled 1315} % Also, the size is a little larger than
|
||||
%\setfont\ssecsl{sl10 scaled 1315} % being scaled magstep1.
|
||||
%\setfont\ssectt{tt10 scaled 1315}
|
||||
%\setfont\ssecsf{ss10 scaled 1315}
|
||||
%\setfont\ssecrm\bfshape{10}{1315} % Note the use of cmb rather than cmbx.
|
||||
%\setfont\ssecit\itshape{10}{1315} % Also, the size is a little larger than
|
||||
%\setfont\ssecsl\slshape{10}{1315} % being scaled magstep1.
|
||||
%\setfont\ssectt\ttshape{10}{1315}
|
||||
%\setfont\ssecsf\sfshape{10}{1315}
|
||||
|
||||
%\let\ssecbf=\ssecrm
|
||||
|
||||
\setfont\ssecrm{bx12 scaled \magstephalf}
|
||||
\setfont\ssecit{ti12 scaled \magstephalf}
|
||||
\setfont\ssecsl{sl12 scaled \magstephalf}
|
||||
\setfont\ssectt{tt12 scaled \magstephalf}
|
||||
\setfont\ssecsf{ss12 scaled \magstephalf}
|
||||
\setfont\ssecbf{bx12 scaled \magstephalf}
|
||||
\setfont\ssecsc{csc10 scaled \magstep1}
|
||||
\setfont\ssecrm\rmbshape{12}{\magstephalf}
|
||||
\setfont\ssecit\itbshape{10}{1315}
|
||||
\setfont\ssecsl\slbshape{10}{1315}
|
||||
\setfont\ssectt\ttbshape{12}{\magstephalf}
|
||||
\setfont\ssecttsl\ttslshape{10}{\magstep1}
|
||||
\setfont\ssecsf\sfbshape{12}{\magstephalf}
|
||||
\let\ssecbf\ssecrm
|
||||
\setfont\ssecsc\scbshape{10}{\magstep1}
|
||||
\font\sseci=cmmi12 scaled \magstephalf
|
||||
\font\ssecsy=cmsy10 scaled \magstep1
|
||||
% The smallcaps and symbol fonts should actually be scaled \magstep1.5,
|
||||
% but that is not a standard magnification.
|
||||
|
||||
% Fonts for title page:
|
||||
\setfont\titlerm{bx12 scaled \magstep3}
|
||||
\setfont\titlerm\rmbshape{12}{\magstep3}
|
||||
\let\authorrm = \secrm
|
||||
|
||||
% In order for the font changes to affect most math symbols and letters,
|
||||
@@ -1041,33 +1115,33 @@ where each line of input produces a line of output.}
|
||||
% The font-changing commands redefine the meanings of \tenSTYLE, instead
|
||||
% of just \STYLE. We do this so that font changes will continue to work
|
||||
% in math mode, where it is the current \fam that is relevant in most
|
||||
% cases, not the current. Plain TeX does, for example,
|
||||
% \def\bf{\fam=\bffam \tenbf} By redefining \tenbf, we obviate the need
|
||||
% to redefine \bf itself.
|
||||
% cases, not the current font. Plain TeX does \def\bf{\fam=\bffam
|
||||
% \tenbf}, for example. By redefining \tenbf, we obviate the need to
|
||||
% redefine \bf itself.
|
||||
\def\textfonts{%
|
||||
\let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl
|
||||
\let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc
|
||||
\let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy
|
||||
\let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy \let\tenttsl=\textttsl
|
||||
\resetmathfonts}
|
||||
\def\chapfonts{%
|
||||
\let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl
|
||||
\let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc
|
||||
\let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy
|
||||
\let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy \let\tenttsl=\chapttsl
|
||||
\resetmathfonts}
|
||||
\def\secfonts{%
|
||||
\let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl
|
||||
\let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc
|
||||
\let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy
|
||||
\let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy \let\tenttsl=\secttsl
|
||||
\resetmathfonts}
|
||||
\def\subsecfonts{%
|
||||
\let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl
|
||||
\let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc
|
||||
\let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy
|
||||
\let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy \let\tenttsl=\ssecttsl
|
||||
\resetmathfonts}
|
||||
\def\indexfonts{%
|
||||
\let\tenrm=\indrm \let\tenit=\indit \let\tensl=\indsl
|
||||
\let\tenbf=\indbf \let\tentt=\indtt \let\smallcaps=\indsc
|
||||
\let\tensf=\indsf \let\teni=\indi \let\tensy=\indsy
|
||||
\let\tensf=\indsf \let\teni=\indi \let\tensy=\indsy \let\tenttsl=\indttsl
|
||||
\resetmathfonts}
|
||||
|
||||
% Set up the default fonts, so we can use them for creating boxes.
|
||||
@@ -1078,9 +1152,9 @@ where each line of input produces a line of output.}
|
||||
\newcount\fontdepth \fontdepth=0
|
||||
|
||||
% Fonts for short table of contents.
|
||||
\setfont\shortcontrm{r12}
|
||||
\setfont\shortcontbf{bx12}
|
||||
\setfont\shortcontsl{sl12}
|
||||
\setfont\shortcontrm\rmshape{12}{1000}
|
||||
\setfont\shortcontbf\bxshape{12}{1000}
|
||||
\setfont\shortcontsl\slshape{12}{1000}
|
||||
|
||||
%% Add scribe-like font environments, plus @l for inline lisp (usually sans
|
||||
%% serif) and @ii for TeX italic
|
||||
@@ -1112,10 +1186,11 @@ where each line of input produces a line of output.}
|
||||
}
|
||||
\let\ttfont=\t
|
||||
\def\samp #1{`\tclose{#1}'\null}
|
||||
\def\key #1{{\tt \nohyphenation \uppercase{#1}}\null}
|
||||
\def\key #1{{\ttsl \nohyphenation \uppercase{#1}}\null}
|
||||
\def\ctrl #1{{\tt \rawbackslash \hat}#1}
|
||||
|
||||
\let\file=\samp
|
||||
\let\url=\samp % perhaps include a hypertex \special eventually
|
||||
|
||||
% @code is a modification of @t,
|
||||
% which makes spaces the same size as normal in the surrounding text.
|
||||
@@ -1141,7 +1216,7 @@ where each line of input produces a line of output.}
|
||||
}
|
||||
|
||||
% We *must* turn on hyphenation at `-' and `_' in \code.
|
||||
% Otherwise, it is too hard to avoid overful hboxes
|
||||
% Otherwise, it is too hard to avoid overfull hboxes
|
||||
% in the Emacs manual, the Library manual, etc.
|
||||
|
||||
% Unfortunately, TeX uses one parameter (\hyphenchar) to control
|
||||
@@ -1170,12 +1245,19 @@ where each line of input produces a line of output.}
|
||||
|
||||
% @kbd is like @code, except that if the argument is just one @key command,
|
||||
% then @kbd has no effect.
|
||||
|
||||
%
|
||||
\def\xkey{\key}
|
||||
\def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}%
|
||||
\ifx\one\xkey\ifx\threex\three \key{#2}%
|
||||
\else\tclose{\look}\fi
|
||||
\else\tclose{\look}\fi}
|
||||
\else{\tclose{\ttsl\look}}\fi
|
||||
\else{\tclose{\ttsl\look}}\fi}
|
||||
|
||||
% Check if we are currently using a typewriter font. Since all the
|
||||
% Computer Modern typewriter fonts have zero interword stretch (and
|
||||
% shrink), and it is reasonable to expect all typewriter fonts to have
|
||||
% this property, we can check that font parameter.
|
||||
%
|
||||
\def\ifmonospace{\ifdim\fontdimen3\font=0pt }
|
||||
|
||||
% Typeset a dimension, e.g., `in' or `pt'. The only reason for the
|
||||
% argument is to make the input look right: @dmn{pt} instead of
|
||||
@@ -1440,7 +1522,7 @@ July\or August\or September\or October\or November\or December\fi
|
||||
|
||||
\newif\ifitemxneedsnegativevskip
|
||||
|
||||
\def\itemxpar{\par\ifitemxneedsnegativevskip\vskip-\parskip\nobreak\fi}
|
||||
\def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi}
|
||||
|
||||
\def\internalBitem{\smallbreak \parsearg\itemzzz}
|
||||
\def\internalBitemx{\itemxpar \parsearg\itemzzz}
|
||||
@@ -1711,10 +1793,10 @@ July\or August\or September\or October\or November\or December\fi
|
||||
\flushcr}
|
||||
|
||||
% @multitable macros
|
||||
% Amy Hendrickson, 8/18/94
|
||||
% Amy Hendrickson, 8/18/94, 3/6/96
|
||||
%
|
||||
% @multitable ... @endmultitable will make as many columns as desired.
|
||||
% Contents of each column will wrap at width given in preamble. Width
|
||||
% @multitable ... @end multitable will make as many columns as desired.
|
||||
% Contents of each column will wrap at width given in preamble. Width
|
||||
% can be specified either with sample text given in a template line,
|
||||
% or in percent of \hsize, the current width of text on page.
|
||||
|
||||
@@ -1723,10 +1805,10 @@ July\or August\or September\or October\or November\or December\fi
|
||||
% To make preamble:
|
||||
%
|
||||
% Either define widths of columns in terms of percent of \hsize:
|
||||
% @multitable @percentofhsize .2 .3 .5
|
||||
% @multitable @columnfractions .25 .3 .45
|
||||
% @item ...
|
||||
%
|
||||
% Numbers following @percentofhsize are the percent of the total
|
||||
% Numbers following @columnfractions are the percent of the total
|
||||
% current hsize to be used for each column. You may use as many
|
||||
% columns as desired.
|
||||
|
||||
@@ -1734,7 +1816,16 @@ July\or August\or September\or October\or November\or December\fi
|
||||
% @multitable {Column 1 template} {Column 2 template} {Column 3 template}
|
||||
% @item ...
|
||||
% using the widest term desired in each column.
|
||||
|
||||
%
|
||||
% For those who want to use more than one line's worth of words in
|
||||
% the preamble, break the line within one argument and it
|
||||
% will parse correctly, i.e.,
|
||||
%
|
||||
% @multitable {Column 1 template} {Column 2 template} {Column 3
|
||||
% template}
|
||||
% Not:
|
||||
% @multitable {Column 1 template} {Column 2 template}
|
||||
% {Column 3 template}
|
||||
|
||||
% Each new table line starts with @item, each subsequent new column
|
||||
% starts with @tab. Empty columns may be produced by supplying @tab's
|
||||
@@ -1759,71 +1850,84 @@ July\or August\or September\or October\or November\or December\fi
|
||||
%
|
||||
% They will wrap at the width determined by the template.
|
||||
% @item@tab@tab This will be in third column.
|
||||
% @endmultitable
|
||||
% @end multitable
|
||||
|
||||
% Default dimensions may be reset by user.
|
||||
% @intableparskip will set vertical space between paragraphs in table.
|
||||
% @intableparindent will set paragraph indent in table.
|
||||
% @spacebetweencols will set horizontal space to be left between columns.
|
||||
% @spacebetweenlines will set vertical space to be left between lines.
|
||||
% @multitableparskip is vertical space between paragraphs in table.
|
||||
% @multitableparindent is paragraph indent in table.
|
||||
% @multitablecolmargin is horizontal space to be left between columns.
|
||||
% @multitablelinespace is space to leave between table items;
|
||||
% 0 means it depends on current normal line spacing.
|
||||
|
||||
%%%%
|
||||
% Dimensions
|
||||
|
||||
\newdimen\intableparskip
|
||||
\newdimen\intableparindent
|
||||
\newdimen\spacebetweencols
|
||||
\newdimen\spacebetweenlines
|
||||
\intableparskip=0pt
|
||||
\intableparindent=6pt
|
||||
\spacebetweencols=12pt
|
||||
\spacebetweenlines=12pt
|
||||
\newskip\multitableparskip
|
||||
\newskip\multitableparindent
|
||||
\newdimen\multitablecolspace
|
||||
\newskip\multitablelinespace
|
||||
\multitableparskip=0pt
|
||||
\multitableparindent=6pt
|
||||
\multitablecolspace=12pt
|
||||
\multitablelinespace=0pt
|
||||
|
||||
%%%%
|
||||
% Macros used to set up halign preamble:
|
||||
\let\endsetuptable\relax
|
||||
\def\xendsetuptable{\endsetuptable}
|
||||
\let\percentofhsize\relax
|
||||
\def\xpercentofhsize{\percentofhsize}
|
||||
\let\columnfractions\relax
|
||||
\def\xcolumnfractions{\columnfractions}
|
||||
\newif\ifsetpercent
|
||||
|
||||
%% 2/1/96, to allow fractions to be given with more than one digit.
|
||||
\def\pickupwholefraction#1 {\global\advance\colcount by1 %
|
||||
\expandafter\xdef\csname col\the\colcount\endcsname{.#1\hsize}%
|
||||
\setuptable}
|
||||
|
||||
\newcount\colcount
|
||||
\def\setuptable#1{\def\firstarg{#1}%
|
||||
\ifx\firstarg\xendsetuptable\let\go\relax%
|
||||
\else
|
||||
\ifx\firstarg\xpercentofhsize\global\setpercenttrue%
|
||||
\ifx\firstarg\xcolumnfractions\global\setpercenttrue%
|
||||
\else
|
||||
\ifsetpercent
|
||||
\if#1.\else%
|
||||
\global\advance\colcount by1 %
|
||||
\expandafter\xdef\csname col\the\colcount\endcsname{.#1\hsize}%
|
||||
\fi
|
||||
\let\go\pickupwholefraction % In this case arg of setuptable
|
||||
% is the decimal point before the
|
||||
% number given in percent of hsize.
|
||||
% We don't need this so we don't use it.
|
||||
\else
|
||||
\global\advance\colcount by1
|
||||
\setbox0=\hbox{#1}%
|
||||
\expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}%
|
||||
\fi%
|
||||
\fi%
|
||||
\let\go\setuptable%
|
||||
\ifx\go\pickupwholefraction\else\let\go\setuptable\fi%
|
||||
\fi\go}
|
||||
|
||||
%%%%
|
||||
% multitable syntax
|
||||
\def\tab{&}
|
||||
\def\tab{&\hskip1sp\relax} % 2/2/96
|
||||
% tiny skip here makes sure this column space is
|
||||
% maintained, even if it is never used.
|
||||
|
||||
|
||||
%%%%
|
||||
% @multitable ... @endmultitable definitions:
|
||||
% @multitable ... @end multitable definitions:
|
||||
|
||||
\def\multitable#1\item{\bgroup
|
||||
\def\multitable{\parsearg\dotable}
|
||||
|
||||
\def\dotable#1{\bgroup
|
||||
\let\item\cr
|
||||
\tolerance=9500
|
||||
\hbadness=9500
|
||||
\parskip=\intableparskip
|
||||
\parindent=\intableparindent
|
||||
\setmultitablespacing
|
||||
\parskip=\multitableparskip
|
||||
\parindent=\multitableparindent
|
||||
\overfullrule=0pt
|
||||
\global\colcount=0\relax%
|
||||
\def\Emultitable{\global\setpercentfalse\global\everycr{}\cr\egroup\egroup}%
|
||||
% To parse everything between @multitable and @item :
|
||||
\def\one{#1}\expandafter\setuptable\one\endsetuptable
|
||||
\setuptable#1 \endsetuptable
|
||||
% Need to reset this to 0 after \setuptable.
|
||||
\global\colcount=0\relax%
|
||||
%
|
||||
@@ -1834,9 +1938,9 @@ July\or August\or September\or October\or November\or December\fi
|
||||
\halign\bgroup&\global\advance\colcount by 1\relax%
|
||||
\vtop{\hsize=\expandafter\csname col\the\colcount\endcsname
|
||||
% In order to keep entries from bumping into each other
|
||||
% we will add a \leftskip of \spacebetweencols to all columns after
|
||||
% we will add a \leftskip of \multitablecolspace to all columns after
|
||||
% the first one.
|
||||
% If a template has been used, we will add \spacebetweencols
|
||||
% If a template has been used, we will add \multitablecolspace
|
||||
% to the width of each template entry.
|
||||
% If user has set preamble in terms of percent of \hsize
|
||||
% we will use that dimension as the width of the column, and
|
||||
@@ -1848,21 +1952,42 @@ July\or August\or September\or October\or November\or December\fi
|
||||
\ifsetpercent
|
||||
\else
|
||||
% If user has <not> set preamble in terms of percent of \hsize
|
||||
% we will advance \hsize by \spacebetweencols
|
||||
\advance\hsize by \spacebetweencols
|
||||
% we will advance \hsize by \multitablecolspace
|
||||
\advance\hsize by \multitablecolspace
|
||||
\fi
|
||||
% In either case we will make \leftskip=\spacebetweencols:
|
||||
\leftskip=\spacebetweencols
|
||||
% In either case we will make \leftskip=\multitablecolspace:
|
||||
\leftskip=\multitablecolspace
|
||||
\fi
|
||||
\noindent##}\cr%
|
||||
\noindent##%\par
|
||||
%\vskip\multitablelinespace
|
||||
}\cr%
|
||||
% \everycr will reset column counter, \colcount, at the end of
|
||||
% each line. Every column entry will cause \colcount to advance by one.
|
||||
% The table preamble
|
||||
% looks at the current \colcount to find the correct column width.
|
||||
\global\everycr{\noalign{\nointerlineskip\vskip\spacebetweenlines
|
||||
\global\everycr{\noalign{\nointerlineskip\vskip\multitablelinespace
|
||||
\filbreak%% keeps underfull box messages off when table breaks over pages.
|
||||
\global\colcount=0\relax}}}
|
||||
|
||||
\def\setmultitablespacing{% test to see if user has set \multitablelinespace.
|
||||
% If so, do nothing. If not, give it an appropriate dimension based on
|
||||
% current baselineskip.
|
||||
\ifdim\multitablelinespace=0pt
|
||||
\setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip
|
||||
\global\advance\multitablelinespace by-\ht0\fi
|
||||
%% Test to see if parskip is larger than space between lines of
|
||||
%% table. If not, do nothing.
|
||||
%% If so, set to same dimension as multitablelinespace.
|
||||
\ifdim\multitableparskip>\multitablelinespace
|
||||
\global\multitableparskip=\multitablelinespace
|
||||
\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller
|
||||
%% than skip between lines in the table.
|
||||
\fi%
|
||||
\ifdim\multitableparskip=0pt
|
||||
\global\multitableparskip=\multitablelinespace
|
||||
\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller
|
||||
%% than skip between lines in the table.
|
||||
\fi}
|
||||
\message{indexing,}
|
||||
% Index generation facilities
|
||||
|
||||
@@ -3847,7 +3972,7 @@ July\or August\or September\or October\or November\or December\fi
|
||||
\setbox0=\hbox{\printednodename}%
|
||||
\ifdim \wd0 = 0pt
|
||||
% No printed node name was explicitly given.
|
||||
\ifx\SETxref-automatic-section-title\thisisundefined
|
||||
\expandafter\ifx\csname SETxref-automatic-section-title\endcsname\relax
|
||||
% Use the node name inside the square brackets.
|
||||
\def\printednodename{\ignorespaces #1}%
|
||||
\else
|
||||
@@ -4250,11 +4375,13 @@ July\or August\or September\or October\or November\or December\fi
|
||||
}
|
||||
|
||||
% Allow control of the text dimensions. Parameters in order: textheight;
|
||||
% textwidth; \voffset; \hoffset (!); binding offset. All require a dimension;
|
||||
% textwidth; voffset; hoffset; binding offset; topskip.
|
||||
% All require a dimension;
|
||||
% header is additional; added length extends the bottom of the page.
|
||||
|
||||
\def\changepagesizes#1#2#3#4#5{
|
||||
\def\changepagesizes#1#2#3#4#5#6{
|
||||
\global\vsize= #1
|
||||
\global\topskip= #6
|
||||
\advance\vsize by \topskip
|
||||
\global\voffset= #3
|
||||
\global\hsize= #2
|
||||
@@ -4267,13 +4394,20 @@ July\or August\or September\or October\or November\or December\fi
|
||||
\global\normaloffset= #4
|
||||
\global\bindingoffset= #5}
|
||||
|
||||
% This layout is compatible with Latex on A4 paper.
|
||||
|
||||
\def\afourlatex{\changepagesizes{22cm}{15cm}{7mm}{4.6mm}{5mm}}
|
||||
% A specific text layout, 24x15cm overall, intended for A4 paper. Top margin
|
||||
% 29mm, hence bottom margin 28mm, nominal side margin 3cm.
|
||||
\def\afourlatex
|
||||
{\global\tolerance=700
|
||||
\global\hfuzz=1pt
|
||||
\setleading{12pt}
|
||||
\global\parskip 15pt plus 1pt
|
||||
\advance\baselineskip by 1.6pt
|
||||
\changepagesizes{237mm}{150mm}{3.6mm}{3.6mm}{3mm}{7mm}
|
||||
}
|
||||
|
||||
% Use @afourwide to print on European A4 paper in wide format.
|
||||
\def\afourwide{\afourpaper
|
||||
\changepagesizes{9.5in}{6.5in}{\hoffset}{\normaloffset}{\bindingoffset}}
|
||||
\changepagesizes{9.5in}{6.5in}{\hoffset}{\normaloffset}{\bindingoffset}{7mm}}
|
||||
|
||||
% Define macros to output various characters with catcode for normal text.
|
||||
\catcode`\"=\other
|
||||
@@ -4322,14 +4456,7 @@ July\or August\or September\or October\or November\or December\fi
|
||||
\catcode`\_=\active
|
||||
\def_{\ifusingtt\normalunderscore\_}
|
||||
% Subroutine for the previous macro.
|
||||
\def\_{\lvvmode \kern.06em \vbox{\hrule width.3em height.1ex}}
|
||||
|
||||
% \lvvmode is equivalent in function to \leavevmode.
|
||||
% Using \leavevmode runs into trouble when written out to
|
||||
% an index file due to the expansion of \leavevmode into ``\unhbox
|
||||
% \voidb@x'' ---which looks to TeX like ``\unhbox \voidb\x'' due to our
|
||||
% magic tricks with @.
|
||||
\def\lvvmode{\vbox to 0pt{}}
|
||||
\def\_{\leavevmode \kern.06em \vbox{\hrule width.3em height.1ex}}
|
||||
|
||||
\catcode`\|=\active
|
||||
\def|{{\tt \char '174}}
|
||||
|
||||
@@ -26,31 +26,31 @@
|
||||
@ifinfo
|
||||
@format
|
||||
START-INFO-DIR-ENTRY
|
||||
* Text utilities: (textutils). GNU text utilities.
|
||||
* cat: (textutils)cat invocation. Concatenate and write files.
|
||||
* cksum: (textutils)cksum invocation. Print @sc{POSIX} CRC checksum.
|
||||
* comm: (textutils)comm invocation. Compare sorted files by line.
|
||||
* csplit: (textutils)csplit invocation. Split by context.
|
||||
* cut: (textutils)cut invocation. Print selected parts of lines.
|
||||
* expand: (textutils)expand invocation. Convert tabs to spaces.
|
||||
* fmt: (textutils)fmt invocation. Reformat paragraph text.
|
||||
* fold: (textutils)fold invocation. Wrap long input lines.
|
||||
* head: (textutils)head invocation. Output the first part of files.
|
||||
* join: (textutils)join invocation. Join lines on a common field.
|
||||
* md5sum: (textutils)md5sum invocation. Print or check message-digests.
|
||||
* nl: (textutils)nl invocation. Number lines and write files.
|
||||
* od: (textutils)od invocation. Dump files in octal, etc.
|
||||
* paste: (textutils)paste invocation. Merge lines of files.
|
||||
* pr: (textutils)pr invocation. Paginate or columnate files.
|
||||
* sort: (textutils)sort invocation. Sort text files.
|
||||
* split: (textutils)split invocation. Split into fixed-size pieces.
|
||||
* sum: (textutils)sum invocation. Print traditional checksum.
|
||||
* tac: (textutils)tac invocation. Reverse files.
|
||||
* tail: (textutils)tail invocation. Output the last part of files.
|
||||
* tr: (textutils)tr invocation. Translate characters.
|
||||
* unexpand: (textutils)unexpand invocation. Convert spaces to tabs.
|
||||
* uniq: (textutils)uniq invocation. Uniqify files.
|
||||
* wc: (textutils)wc invocation. Byte, word, and line counts.
|
||||
* Text utilities: (textutils). GNU text utilities.
|
||||
* cat: (textutils)cat invocation. Concatenate and write files.
|
||||
* cksum: (textutils)cksum invocation. Print @sc{POSIX} CRC checksum.
|
||||
* comm: (textutils)comm invocation. Compare sorted files by line.
|
||||
* csplit: (textutils)csplit invocation. Split by context.
|
||||
* cut: (textutils)cut invocation. Print selected parts of lines.
|
||||
* expand: (textutils)expand invocation. Convert tabs to spaces.
|
||||
* fmt: (textutils)fmt invocation. Reformat paragraph text.
|
||||
* fold: (textutils)fold invocation. Wrap long input lines.
|
||||
* head: (textutils)head invocation. Output the first part of files.
|
||||
* join: (textutils)join invocation. Join lines on a common field.
|
||||
* md5sum: (textutils)md5sum invocation. Print or check message-digests.
|
||||
* nl: (textutils)nl invocation. Number lines and write files.
|
||||
* od: (textutils)od invocation. Dump files in octal, etc.
|
||||
* paste: (textutils)paste invocation. Merge lines of files.
|
||||
* pr: (textutils)pr invocation. Paginate or columnate files.
|
||||
* sort: (textutils)sort invocation. Sort text files.
|
||||
* split: (textutils)split invocation. Split into fixed-size pieces.
|
||||
* sum: (textutils)sum invocation. Print traditional checksum.
|
||||
* tac: (textutils)tac invocation. Reverse files.
|
||||
* tail: (textutils)tail invocation. Output the last part of files.
|
||||
* tr: (textutils)tr invocation. Translate characters.
|
||||
* unexpand: (textutils)unexpand invocation. Convert spaces to tabs.
|
||||
* uniq: (textutils)uniq invocation. Uniqify files.
|
||||
* wc: (textutils)wc invocation. Byte, word, and line counts.
|
||||
END-INFO-DIR-ENTRY
|
||||
@end format
|
||||
@end ifinfo
|
||||
@@ -58,7 +58,7 @@ END-INFO-DIR-ENTRY
|
||||
@ifinfo
|
||||
This file documents the GNU text utilities.
|
||||
|
||||
Copyright (C) 1994, 95 Free Software Foundation, Inc.
|
||||
Copyright (C) 1994, 95, 96 Free Software Foundation, Inc.
|
||||
|
||||
Permission is granted to make and distribute verbatim copies of
|
||||
this manual provided the copyright notice and this permission notice
|
||||
@@ -85,12 +85,12 @@ by the Foundation.
|
||||
@titlepage
|
||||
@title GNU @code{textutils}
|
||||
@subtitle A set of text utilities
|
||||
@subtitle for version @value{VERSION}, @value{RELEASEDATE}
|
||||
@subtitle for version @value{VERSION}, @value{UPDATED}
|
||||
@author David MacKenzie et al.
|
||||
|
||||
@page
|
||||
@vskip 0pt plus 1filll
|
||||
Copyright @copyright{} 1994, 95 Free Software Foundation, Inc.
|
||||
Copyright @copyright{} 1994, 95, 96 Free Software Foundation, Inc.
|
||||
|
||||
Permission is granted to make and distribute verbatim copies of
|
||||
this manual provided the copyright notice and this permission notice
|
||||
@@ -733,7 +733,7 @@ address.
|
||||
These commands reformat the contents of files.
|
||||
|
||||
@menu
|
||||
* fmt invocation:: Reformat paragraph text.
|
||||
* fmt invocation:: Reformat paragraph text.
|
||||
* pr invocation:: Paginate or columnate files for printing.
|
||||
* fold invocation:: Wrap input lines to fit in specified width.
|
||||
@end menu
|
||||
@@ -827,7 +827,7 @@ room to balance line lengths.
|
||||
@item -p @var{prefix}
|
||||
@itemx --prefix=@var{prefix}
|
||||
Only lines beginning with @var{prefix} (possibly preceded by whitespace)
|
||||
are subject to formatting. The prefix and any preceding whitespace is
|
||||
are subject to formatting. The prefix and any preceding whitespace are
|
||||
stripped for the formatting and then re-attached to each formatted output
|
||||
line. One use is to format certain kinds of program comments, while
|
||||
leaving the code unchanged.
|
||||
@@ -1407,7 +1407,7 @@ contents of files.
|
||||
* wc invocation:: Print byte, word, and line counts.
|
||||
* sum invocation:: Print checksum and block counts.
|
||||
* cksum invocation:: Print CRC checksum and byte counts.
|
||||
* md5sum invocation:: Print or check message-digests.
|
||||
* md5sum invocation:: Print or check message-digests.
|
||||
@end menu
|
||||
|
||||
|
||||
@@ -1772,8 +1772,8 @@ like @code{1.0e-34} and @code{10e100}. Use this option only if there
|
||||
is no alternative; it is much slower than @samp{-n} and numbers with
|
||||
too many significant digits will be compared as if they had been
|
||||
truncated. In addition, numbers outside the range of representable
|
||||
double precision floating point numbers are treated as if they were zeroes.
|
||||
@c FIXME: Someday there will be an option to warn about underflow and overflow.
|
||||
double precision floating point numbers are treated as if they were
|
||||
zeroes; overflow and underflow are not reported.
|
||||
|
||||
@item -i
|
||||
@opindex -i
|
||||
@@ -1796,6 +1796,21 @@ Sort numerically: the number begins each line; specifically, it consists
|
||||
of optional whitespace, an optional @samp{-} sign, and zero or more
|
||||
digits, optionally followed by a decimal point and zero or more digits.
|
||||
|
||||
@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 decimal points 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
|
||||
string-to-integer) conversions and then comparing doubles. In addition,
|
||||
there is no corresponding loss of precision. Converting each string to
|
||||
@code{double} before comparison would limit precision to about 16 digits
|
||||
on most systems.
|
||||
|
||||
Neither a leading @samp{+} nor exponential notation is recognized.
|
||||
To compare such strings numerically, use the @samp{-g} option.
|
||||
|
||||
@item -r
|
||||
@opindex -r
|
||||
@cindex reverse sorting
|
||||
@@ -2739,8 +2754,8 @@ ones, to tabs.
|
||||
@end table
|
||||
|
||||
|
||||
@c What's GNU?
|
||||
@c Arnold Robbins
|
||||
@c What's GNU?
|
||||
@c Arnold Robbins
|
||||
@node Opening the software toolbox
|
||||
@chapter Opening the software toolbox
|
||||
|
||||
|
||||
@@ -1,16 +1,17 @@
|
||||
## Process this file with automake to produce Makefile.in
|
||||
noinst_LIBRARIES = fu
|
||||
|
||||
EXTRA_DIST = alloca.c euidaccess.c fnmatch.c fsusage.c ftruncate.c \
|
||||
getdate.y getopt.c getopt1.c memcmp.c memcpy.c memset.c \
|
||||
mkdir.c mktime.c mountlist.c \
|
||||
posixtm.y rename.c rmdir.c stpcpy.c strdup.c strstr.c strtol.c strtoul.c
|
||||
EXTRA_DIST = alloca.c basename.c euidaccess.c fnmatch.c fsusage.c \
|
||||
ftruncate.c getdate.y getopt.c getopt1.c group-member.c \
|
||||
memcmp.c memcpy.c memset.c \
|
||||
mkdir.c mktime.c mountlist.c posixtm.y rename.c rmdir.c \
|
||||
stpcpy.c strcasecmp.c strdup.c strndup.c strstr.c strtol.c strtoul.c
|
||||
|
||||
INCLUDES = -I.. -I$(srcdir)
|
||||
|
||||
fu_SOURCES = getdate.c posixtm.c argmatch.c backupfile.c basename.c \
|
||||
fu_SOURCES = getdate.c getline.c posixtm.c argmatch.c backupfile.c \
|
||||
dirname.c error.c fileblocks.c filemode.c \
|
||||
full-write.c getversion.c group-member.c idcache.c \
|
||||
full-write.c getversion.c idcache.c \
|
||||
isdir.c long-options.c makepath.c modechange.c obstack.c \
|
||||
safe-read.c save-cwd.c savedir.c stripslash.c userspec.c xgetcwd.c \
|
||||
xmalloc.c xstrdup.c xstrtol.c xstrtoul.c yesno.c
|
||||
@@ -18,14 +19,14 @@ xmalloc.c xstrdup.c xstrtol.c xstrtoul.c yesno.c
|
||||
fu_LIBADD = @LIBOBJS@ @ALLOCA@
|
||||
|
||||
noinst_HEADERS = argmatch.h backupfile.h error.h fnmatch.h fsusage.h \
|
||||
getopt.h group-member.h long-options.h makepath.h modechange.h mountlist.h \
|
||||
obstack.h pathmax.h save-cwd.h xstrtol.h xstrtoul.h
|
||||
getline.h getopt.h group-member.h long-options.h makepath.h modechange.h \
|
||||
mountlist.h obstack.h pathmax.h save-cwd.h xstrtol.h xstrtoul.h
|
||||
|
||||
BUILT_SOURCES = getdate.c posixtm.c
|
||||
|
||||
# Since this directory contains two parsers, we have to be careful to avoid
|
||||
# running two $(YACC)s during parallel makes. See below.
|
||||
getdate.c: getdate.y
|
||||
getdate.c: @MAINT@getdate.y
|
||||
@echo expect 10 shift/reduce conflicts
|
||||
$(YACC) $(srcdir)/getdate.y
|
||||
mv y.tab.c getdate.c
|
||||
@@ -34,7 +35,7 @@ getdate.c: getdate.y
|
||||
# The artificial dependency on getdate.c keeps the two parsers from being
|
||||
# built in parallel. Enforcing this little bit of sequentiality lets
|
||||
# everyone (even those without bison) still run mostly parallel builds.
|
||||
posixtm.c: posixtm.y getdate.c
|
||||
posixtm.c: @MAINT@posixtm.y getdate.c
|
||||
$(YACC) $(srcdir)/posixtm.y
|
||||
mv y.tab.c posixtm.tab.c
|
||||
sed -e 's/yy/zz/g' posixtm.tab.c > tposixtm.c
|
||||
|
||||
131
lib/Makefile.in
131
lib/Makefile.in
@@ -1,4 +1,4 @@
|
||||
# Makefile.in generated automatically by automake 0.31 from Makefile.am
|
||||
# Makefile.in generated automatically by automake 1.0 from Makefile.am
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996 Free Software Foundation, Inc.
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
@@ -40,16 +40,17 @@ transform = @program_transform_name@
|
||||
|
||||
noinst_LIBRARIES = fu
|
||||
|
||||
EXTRA_DIST = alloca.c euidaccess.c fnmatch.c fsusage.c ftruncate.c \
|
||||
getdate.y getopt.c getopt1.c memcmp.c memcpy.c memset.c \
|
||||
mkdir.c mktime.c mountlist.c \
|
||||
posixtm.y rename.c rmdir.c stpcpy.c strdup.c strstr.c strtol.c strtoul.c
|
||||
EXTRA_DIST = alloca.c basename.c euidaccess.c fnmatch.c fsusage.c \
|
||||
ftruncate.c getdate.y getopt.c getopt1.c group-member.c \
|
||||
memcmp.c memcpy.c memset.c \
|
||||
mkdir.c mktime.c mountlist.c posixtm.y rename.c rmdir.c \
|
||||
stpcpy.c strcasecmp.c strdup.c strndup.c strstr.c strtol.c strtoul.c
|
||||
|
||||
INCLUDES = -I.. -I$(srcdir)
|
||||
|
||||
fu_SOURCES = getdate.c posixtm.c argmatch.c backupfile.c basename.c \
|
||||
fu_SOURCES = getdate.c getline.c posixtm.c argmatch.c backupfile.c \
|
||||
dirname.c error.c fileblocks.c filemode.c \
|
||||
full-write.c getversion.c group-member.c idcache.c \
|
||||
full-write.c getversion.c idcache.c \
|
||||
isdir.c long-options.c makepath.c modechange.c obstack.c \
|
||||
safe-read.c save-cwd.c savedir.c stripslash.c userspec.c xgetcwd.c \
|
||||
xmalloc.c xstrdup.c xstrtol.c xstrtoul.c yesno.c
|
||||
@@ -57,10 +58,11 @@ xmalloc.c xstrdup.c xstrtol.c xstrtoul.c yesno.c
|
||||
fu_LIBADD = @LIBOBJS@ @ALLOCA@
|
||||
|
||||
noinst_HEADERS = argmatch.h backupfile.h error.h fnmatch.h fsusage.h \
|
||||
getopt.h group-member.h long-options.h makepath.h modechange.h mountlist.h \
|
||||
obstack.h pathmax.h save-cwd.h xstrtol.h xstrtoul.h
|
||||
getline.h getopt.h group-member.h long-options.h makepath.h modechange.h \
|
||||
mountlist.h obstack.h pathmax.h save-cwd.h xstrtol.h xstrtoul.h
|
||||
|
||||
BUILT_SOURCES = getdate.c posixtm.c
|
||||
mkinstalldirs = $(top_srcdir)/mkinstalldirs
|
||||
CONFIG_HEADER = ../config.h
|
||||
LIBRARIES = $(noinst_LIBRARIES)
|
||||
|
||||
@@ -78,19 +80,18 @@ LIBS = @LIBS@
|
||||
|
||||
COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS)
|
||||
LINK = $(CC) $(LDFLAGS) -o $@
|
||||
fu_OBJECTS = getdate.o posixtm.o argmatch.o backupfile.o basename.o \
|
||||
fu_OBJECTS = getdate.o getline.o posixtm.o argmatch.o backupfile.o \
|
||||
dirname.o error.o fileblocks.o filemode.o full-write.o getversion.o \
|
||||
group-member.o idcache.o isdir.o long-options.o makepath.o modechange.o \
|
||||
obstack.o safe-read.o save-cwd.o savedir.o stripslash.o userspec.o \
|
||||
xgetcwd.o xmalloc.o xstrdup.o xstrtol.o xstrtoul.o yesno.o
|
||||
idcache.o isdir.o long-options.o makepath.o modechange.o obstack.o \
|
||||
safe-read.o save-cwd.o savedir.o stripslash.o userspec.o xgetcwd.o \
|
||||
xmalloc.o xstrdup.o xstrtol.o xstrtoul.o yesno.o
|
||||
EXTRA_fu_SOURCES =
|
||||
LIBFILES = libfu.a
|
||||
|
||||
AR = ar
|
||||
RANLIB = @RANLIB@
|
||||
HEADERS = $(noinst_HEADERS)
|
||||
|
||||
DIST_COMMON = Makefile.am Makefile.in alloca.c fileblocks.c fnmatch.c \
|
||||
fsusage.c ftruncate.c mountlist.c
|
||||
DIST_COMMON = Makefile.am Makefile.in
|
||||
|
||||
|
||||
PACKAGE = @PACKAGE@
|
||||
@@ -100,13 +101,33 @@ DISTFILES = $(DIST_COMMON) $(SOURCES) $(BUILT_SOURCES) $(HEADERS) \
|
||||
$(TEXINFOS) $(INFOS) $(MANS) $(EXTRA_DIST) $(DATA)
|
||||
DEP_DISTFILES = $(DIST_COMMON) $(SOURCES) $(BUILT_SOURCES) $(HEADERS) \
|
||||
$(TEXINFOS) $(INFO_DEPS) $(MANS) $(EXTRA_DIST) $(DATA)
|
||||
|
||||
TAR = tar
|
||||
DEP_FILES = $(srcdir)/.deps/alloca.P $(srcdir)/.deps/argmatch.P \
|
||||
$(srcdir)/.deps/backupfile.P $(srcdir)/.deps/dirname.P \
|
||||
$(srcdir)/.deps/error.P $(srcdir)/.deps/fileblocks.P \
|
||||
$(srcdir)/.deps/filemode.P $(srcdir)/.deps/fnmatch.P \
|
||||
$(srcdir)/.deps/fsusage.P $(srcdir)/.deps/ftruncate.P \
|
||||
$(srcdir)/.deps/full-write.P $(srcdir)/.deps/getdate.P \
|
||||
$(srcdir)/.deps/getline.P $(srcdir)/.deps/getopt.P \
|
||||
$(srcdir)/.deps/getopt1.P $(srcdir)/.deps/getversion.P \
|
||||
$(srcdir)/.deps/idcache.P $(srcdir)/.deps/isdir.P \
|
||||
$(srcdir)/.deps/long-options.P $(srcdir)/.deps/makepath.P \
|
||||
$(srcdir)/.deps/modechange.P $(srcdir)/.deps/mountlist.P \
|
||||
$(srcdir)/.deps/obstack.P $(srcdir)/.deps/posixtm.P \
|
||||
$(srcdir)/.deps/safe-read.P $(srcdir)/.deps/save-cwd.P \
|
||||
$(srcdir)/.deps/savedir.P $(srcdir)/.deps/stripslash.P \
|
||||
$(srcdir)/.deps/userspec.P $(srcdir)/.deps/xgetcwd.P \
|
||||
$(srcdir)/.deps/xmalloc.P $(srcdir)/.deps/xstrdup.P \
|
||||
$(srcdir)/.deps/xstrtol.P $(srcdir)/.deps/xstrtoul.P \
|
||||
$(srcdir)/.deps/yesno.P
|
||||
SOURCES = $(fu_SOURCES)
|
||||
OBJECTS = $(fu_OBJECTS)
|
||||
|
||||
default: all
|
||||
|
||||
|
||||
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in
|
||||
$(srcdir)/Makefile.in: @MAINT@Makefile.am $(top_srcdir)/configure.in
|
||||
cd $(top_srcdir) && automake $(subdir)/Makefile
|
||||
|
||||
Makefile: $(top_builddir)/config.status Makefile.in
|
||||
@@ -141,11 +162,11 @@ libfu.a: $(fu_OBJECTS) $(fu_LIBADD)
|
||||
$(RANLIB) libfu.a
|
||||
|
||||
ID: $(HEADERS) $(SOURCES)
|
||||
here=`pwd` && cd $(srcdir) && mkid -f $$here/ID $(SOURCES) $(HEADERS)
|
||||
here=`pwd` && cd $(srcdir) && mkid -f$$here/ID $(SOURCES) $(HEADERS)
|
||||
|
||||
tags: TAGS
|
||||
|
||||
TAGS:
|
||||
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES)
|
||||
here=`pwd` && cd $(srcdir) && etags $(ETAGS_ARGS) $(SOURCES) $(HEADERS) -o $$here/TAGS
|
||||
|
||||
mostlyclean-tags:
|
||||
@@ -159,49 +180,39 @@ maintainer-clean-tags:
|
||||
|
||||
subdir = lib
|
||||
distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
|
||||
dist: $(DEP_DISTFILES)
|
||||
distdir: $(DEP_DISTFILES)
|
||||
@for file in `cd $(srcdir) && echo $(DISTFILES)`; do \
|
||||
test -f $(distdir)/$$file \
|
||||
|| ln $(srcdir)/$$file $(distdir)/$$file 2> /dev/null \
|
||||
|| cp -p $(srcdir)/$$file $(distdir)/$$file; \
|
||||
done
|
||||
alloca.o: alloca.c
|
||||
argmatch.o: argmatch.c
|
||||
backupfile.o: backupfile.c backupfile.h
|
||||
basename.o: basename.c
|
||||
dirname.o: dirname.c
|
||||
error.o: error.c
|
||||
fileblocks.o: fileblocks.c
|
||||
filemode.o: filemode.c
|
||||
fnmatch.o: fnmatch.c
|
||||
fsusage.o: fsusage.c fsusage.h
|
||||
ftruncate.o: ftruncate.c
|
||||
full-write.o: full-write.c
|
||||
getdate.o: getdate.c
|
||||
getopt.o: getopt.c
|
||||
getopt1.o: getopt1.c getopt.h
|
||||
getversion.o: getversion.c backupfile.h
|
||||
group-member.o: group-member.c group-member.h
|
||||
idcache.o: idcache.c
|
||||
isdir.o: isdir.c
|
||||
long-options.o: long-options.c long-options.h
|
||||
makepath.o: makepath.c makepath.h
|
||||
modechange.o: modechange.c modechange.h
|
||||
mountlist.o: mountlist.c mountlist.h
|
||||
obstack.o: obstack.c obstack.h
|
||||
posixtm.o: posixtm.c
|
||||
safe-read.o: safe-read.c
|
||||
save-cwd.o: save-cwd.c ../config.h save-cwd.h error.h
|
||||
savedir.o: savedir.c
|
||||
stripslash.o: stripslash.c
|
||||
userspec.o: userspec.c
|
||||
xgetcwd.o: xgetcwd.c pathmax.h
|
||||
xmalloc.o: xmalloc.c
|
||||
xstrdup.o: xstrdup.c
|
||||
xstrtol.o: xstrtol.c xstrtol.h
|
||||
xstrtoul.o: xstrtoul.c xstrtol.c xstrtol.h
|
||||
yesno.o: yesno.c
|
||||
|
||||
# This fragment is probably only useful for maintainers. It relies on
|
||||
# GNU make and gcc. It is only included in the generated Makefile.in
|
||||
# if `automake' is not passed the `--include-deps' flag.
|
||||
|
||||
MKDEP = gcc -MM $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS)
|
||||
|
||||
-include $(srcdir)/.deps/.P
|
||||
$(srcdir)/.deps/.P: $(BUILT_SOURCES)
|
||||
cd $(srcdir) && test -d .deps || mkdir .deps
|
||||
echo > $@
|
||||
|
||||
-include $(DEP_FILES)
|
||||
$(DEP_FILES): $(srcdir)/.deps/.P
|
||||
|
||||
$(srcdir)/.deps/%.P: $(srcdir)/%.c
|
||||
@echo "mkdeps $< > $@"
|
||||
@re=`echo 's,^$(srcdir)//*,,g;s, $(srcdir)//*, ,g' | sed 's,\.,\\\\.,g'`; \
|
||||
$(MKDEP) $< | sed "$$re" > $@-tmp
|
||||
@if test -n "$o"; then \
|
||||
sed 's/\.o:/$$o:/' $@-tmp > $@; \
|
||||
rm $@-tmp; \
|
||||
else \
|
||||
mv $@-tmp $@; \
|
||||
fi
|
||||
|
||||
# End of maintainer-only section
|
||||
info:
|
||||
|
||||
dvi:
|
||||
@@ -214,7 +225,7 @@ install-exec:
|
||||
|
||||
install-data:
|
||||
|
||||
install: install-exec install-data
|
||||
install: install-exec install-data all
|
||||
@:
|
||||
|
||||
uninstall:
|
||||
@@ -259,7 +270,7 @@ maintainer-clean: maintainer-clean-noinstLIBRARIES \
|
||||
clean-noinstLIBRARIES maintainer-clean-noinstLIBRARIES \
|
||||
mostlyclean-compile distclean-compile clean-compile \
|
||||
maintainer-clean-compile tags mostlyclean-tags distclean-tags \
|
||||
clean-tags maintainer-clean-tags dist info dvi check installcheck \
|
||||
clean-tags maintainer-clean-tags distdir info dvi check installcheck \
|
||||
install-exec install-data install uninstall all installdirs \
|
||||
mostlyclean-generic distclean-generic clean-generic \
|
||||
maintainer-clean-generic clean mostlyclean distclean maintainer-clean
|
||||
@@ -267,7 +278,7 @@ maintainer-clean-generic clean mostlyclean distclean maintainer-clean
|
||||
|
||||
# Since this directory contains two parsers, we have to be careful to avoid
|
||||
# running two $(YACC)s during parallel makes. See below.
|
||||
getdate.c: getdate.y
|
||||
getdate.c: @MAINT@getdate.y
|
||||
@echo expect 10 shift/reduce conflicts
|
||||
$(YACC) $(srcdir)/getdate.y
|
||||
mv y.tab.c getdate.c
|
||||
@@ -276,7 +287,7 @@ getdate.c: getdate.y
|
||||
# The artificial dependency on getdate.c keeps the two parsers from being
|
||||
# built in parallel. Enforcing this little bit of sequentiality lets
|
||||
# everyone (even those without bison) still run mostly parallel builds.
|
||||
posixtm.c: posixtm.y getdate.c
|
||||
posixtm.c: @MAINT@posixtm.y getdate.c
|
||||
$(YACC) $(srcdir)/posixtm.y
|
||||
mv y.tab.c posixtm.tab.c
|
||||
sed -e 's/yy/zz/g' posixtm.tab.c > tposixtm.c
|
||||
|
||||
@@ -63,12 +63,12 @@ char *malloc ();
|
||||
#endif
|
||||
|
||||
#if defined (STDC_HEADERS) || (!defined (isascii) && !defined (HAVE_ISASCII))
|
||||
# define ISASCII(c) 1
|
||||
# define IN_CTYPE_DOMAIN(c) 1
|
||||
#else
|
||||
# define ISASCII(c) isascii(c)
|
||||
# define IN_CTYPE_DOMAIN(c) isascii(c)
|
||||
#endif
|
||||
|
||||
#define ISDIGIT(c) (ISASCII ((unsigned char) (c)) \
|
||||
#define ISDIGIT(c) (IN_CTYPE_DOMAIN ((unsigned char) (c)) \
|
||||
&& isdigit ((unsigned char) (c)))
|
||||
|
||||
#if defined (HAVE_UNISTD_H)
|
||||
|
||||
@@ -22,44 +22,44 @@ Cambridge, MA 02139, USA. */
|
||||
Adapted for GNU C library by Roland McGrath. */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include <config.h>
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
|
||||
#ifdef S_IEXEC
|
||||
#ifndef S_IXUSR
|
||||
#define S_IXUSR S_IEXEC
|
||||
#endif
|
||||
#ifndef S_IXGRP
|
||||
#define S_IXGRP (S_IEXEC >> 3)
|
||||
#endif
|
||||
#ifndef S_IXOTH
|
||||
#define S_IXOTH (S_IEXEC >> 6)
|
||||
#endif
|
||||
# ifndef S_IXUSR
|
||||
# define S_IXUSR S_IEXEC
|
||||
# endif
|
||||
# ifndef S_IXGRP
|
||||
# define S_IXGRP (S_IEXEC >> 3)
|
||||
# endif
|
||||
# ifndef S_IXOTH
|
||||
# define S_IXOTH (S_IEXEC >> 6)
|
||||
# endif
|
||||
#endif /* S_IEXEC */
|
||||
|
||||
#if defined (HAVE_UNISTD_H) || defined (_LIBC)
|
||||
#include <unistd.h>
|
||||
# include <unistd.h>
|
||||
#endif
|
||||
|
||||
#ifdef _POSIX_VERSION
|
||||
#include <limits.h>
|
||||
#if !defined(NGROUPS_MAX) || NGROUPS_MAX < 1
|
||||
#undef NGROUPS_MAX
|
||||
#define NGROUPS_MAX sysconf (_SC_NGROUPS_MAX)
|
||||
#endif /* NGROUPS_MAX */
|
||||
# include <limits.h>
|
||||
# if !defined(NGROUPS_MAX) || NGROUPS_MAX < 1
|
||||
# undef NGROUPS_MAX
|
||||
# define NGROUPS_MAX sysconf (_SC_NGROUPS_MAX)
|
||||
# endif /* NGROUPS_MAX */
|
||||
|
||||
#else /* not _POSIX_VERSION */
|
||||
uid_t getuid ();
|
||||
gid_t getgid ();
|
||||
uid_t geteuid ();
|
||||
gid_t getegid ();
|
||||
#include <sys/param.h>
|
||||
#if !defined(NGROUPS_MAX) && defined(NGROUPS)
|
||||
#define NGROUPS_MAX NGROUPS
|
||||
#endif /* not NGROUPS_MAX and NGROUPS */
|
||||
# include <sys/param.h>
|
||||
# if !defined(NGROUPS_MAX) && defined(NGROUPS)
|
||||
# define NGROUPS_MAX NGROUPS
|
||||
# endif /* not NGROUPS_MAX and NGROUPS */
|
||||
#endif /* not POSIX_VERSION */
|
||||
|
||||
#include <errno.h>
|
||||
@@ -68,20 +68,31 @@ extern int errno;
|
||||
#endif
|
||||
|
||||
#if defined(EACCES) && !defined(EACCESS)
|
||||
#define EACCESS EACCES
|
||||
# define EACCESS EACCES
|
||||
#endif
|
||||
|
||||
#ifndef F_OK
|
||||
#define F_OK 0
|
||||
#define X_OK 1
|
||||
#define W_OK 2
|
||||
#define R_OK 4
|
||||
# define F_OK 0
|
||||
# define X_OK 1
|
||||
# define W_OK 2
|
||||
# define R_OK 4
|
||||
#endif
|
||||
|
||||
#if !defined (S_IROTH) && defined (R_OK)
|
||||
# define S_IROTH R_OK
|
||||
#endif
|
||||
|
||||
#if !defined (S_IWOTH) && defined (W_OK)
|
||||
# define S_IWOTH W_OK
|
||||
#endif
|
||||
|
||||
#if !defined (S_IXOTH) && defined (X_OK)
|
||||
# define S_IXOTH X_OK
|
||||
#endif
|
||||
|
||||
#ifdef _LIBC
|
||||
|
||||
#define group_member __group_member
|
||||
# define group_member __group_member
|
||||
|
||||
#else
|
||||
|
||||
@@ -100,11 +111,11 @@ static gid_t egid;
|
||||
/* Nonzero if UID, GID, EUID, and EGID have valid values. */
|
||||
static int have_ids = 0;
|
||||
|
||||
#ifdef HAVE_GETGROUPS
|
||||
# ifdef HAVE_GETGROUPS
|
||||
int group_member ();
|
||||
#else
|
||||
#define group_member(gid) 0
|
||||
#endif
|
||||
# else
|
||||
# define group_member(gid) 0
|
||||
# endif
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -18,26 +18,26 @@
|
||||
/* Written by Brian L. Matthews, blm@6sceng.UUCP. */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include <config.h>
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#if !defined (HAVE_ST_BLOCKS) && !defined(_POSIX_VERSION)
|
||||
#include <sys/types.h>
|
||||
#include <sys/param.h>
|
||||
# include <sys/types.h>
|
||||
# include <sys/param.h>
|
||||
|
||||
#ifndef NINDIR
|
||||
# ifndef NINDIR
|
||||
/* Some SysV's, like Irix, seem to lack these. Hope they're correct. */
|
||||
/* Size of a indirect block, in bytes. */
|
||||
#ifndef BSIZE
|
||||
#define BSIZE 1024
|
||||
#endif
|
||||
# ifndef BSIZE
|
||||
# define BSIZE 1024
|
||||
# endif
|
||||
|
||||
/* Number of inode pointers per indirect block. */
|
||||
#define NINDIR (BSIZE/sizeof(daddr_t))
|
||||
#endif /* !NINDIR */
|
||||
# define NINDIR (BSIZE/sizeof(daddr_t))
|
||||
# endif /* !NINDIR */
|
||||
|
||||
/* Number of direct block addresses in an inode. */
|
||||
#define NDIR 10
|
||||
# define NDIR 10
|
||||
|
||||
/* Return the number of 512-byte blocks in a file of SIZE bytes. */
|
||||
|
||||
@@ -63,4 +63,8 @@ st_blocks (size)
|
||||
|
||||
return datablks + indrblks;
|
||||
}
|
||||
#else
|
||||
/* This declaration is solely to ensure that after preprocessing
|
||||
this file is never empty. */
|
||||
extern int textutils_fileblocks_unused;
|
||||
#endif
|
||||
|
||||
@@ -37,7 +37,7 @@ int statfs ();
|
||||
#include <sys/vfs.h>
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_SYS_FILSYS_H
|
||||
#if defined(HAVE_SYS_FILSYS_H) && !defined(_CRAY)
|
||||
#include <sys/filsys.h> /* SVR2. */
|
||||
#endif
|
||||
|
||||
@@ -90,7 +90,8 @@ adjust_blocks (blocks, fromsize, tosize)
|
||||
|
||||
int
|
||||
get_fs_usage (path, disk, fsp)
|
||||
char *path, *disk;
|
||||
const char *path;
|
||||
const char *disk;
|
||||
struct fs_usage *fsp;
|
||||
{
|
||||
#if defined (STAT_STATFS3_OSF1)
|
||||
|
||||
@@ -25,8 +25,13 @@ struct fs_usage
|
||||
long fsu_ffree; /* Free file nodes. */
|
||||
};
|
||||
|
||||
#if __STDC__
|
||||
int get_fs_usage (char *path, char *disk, struct fs_usage *fsp);
|
||||
#ifndef __P
|
||||
#if defined (__GNUC__) || (defined (__STDC__) && __STDC__)
|
||||
#define __P(args) args
|
||||
#else
|
||||
int get_fs_usage ();
|
||||
#endif
|
||||
#define __P(args) ()
|
||||
#endif /* GCC. */
|
||||
#endif /* Not __P. */
|
||||
|
||||
int get_fs_usage __P ((const char *path, const char *disk,
|
||||
struct fs_usage *fsp));
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/* getline.c -- Replacement for GNU C library function getline
|
||||
|
||||
Copyright (C) 1993 Free Software Foundation, Inc.
|
||||
Copyright (C) 1993, 1996 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
|
||||
@@ -22,6 +22,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
/* The `getdelim' function is only declared if there following symbol
|
||||
is defined. */
|
||||
#define _GNU_SOURCE 1
|
||||
#include <stdio.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
|
||||
111
lib/getopt.c
111
lib/getopt.c
@@ -3,7 +3,7 @@
|
||||
"Keep this file name-space clean" means, talk to roland@gnu.ai.mit.edu
|
||||
before changing it!
|
||||
|
||||
Copyright (C) 1987, 88, 89, 90, 91, 92, 93, 94, 95
|
||||
Copyright (C) 1987, 88, 89, 90, 91, 92, 93, 94, 95, 1996
|
||||
Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it
|
||||
@@ -18,7 +18,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, 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||
Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
|
||||
/* This tells Alpha OSF/1 not to define a getopt prototype in <stdio.h>.
|
||||
Ditto for AIX 3.2 and <stdlib.h>. */
|
||||
@@ -53,12 +53,28 @@
|
||||
|
||||
/* This needs to come after some library #include
|
||||
to get __GNU_LIBRARY__ defined. */
|
||||
#ifdef __GNU_LIBRARY__
|
||||
#ifdef __GNU_LIBRARY__
|
||||
/* Don't include stdlib.h for non-GNU C libraries because some of them
|
||||
contain conflicting prototypes for getopt. */
|
||||
#include <stdlib.h>
|
||||
#if defined (_LIBC) || defined (HAVE_UNISTD_H)
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
#endif /* GNU C library. */
|
||||
|
||||
#ifdef VMS
|
||||
#include <unixlib.h>
|
||||
#if HAVE_STRING_H - 0
|
||||
#include <string.h>
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef WIN32
|
||||
/* It's not Unix, really. See? Capital letters. */
|
||||
#include <windows.h>
|
||||
#define getpid() GetCurrentProcessId()
|
||||
#endif
|
||||
|
||||
#ifndef _
|
||||
/* This is for other GNU distributions with internationalized messages.
|
||||
When compiling libc, the _ macro is predefined. */
|
||||
@@ -166,7 +182,7 @@ static enum
|
||||
/* Value of POSIXLY_CORRECT environment variable. */
|
||||
static char *posixly_correct;
|
||||
|
||||
#ifdef __GNU_LIBRARY__
|
||||
#ifdef __GNU_LIBRARY__
|
||||
/* We want to avoid inclusion of string.h with non-GNU libraries
|
||||
because there are many ways it can cause trouble.
|
||||
On some systems, it contains special magic macros that don't work
|
||||
@@ -217,6 +233,12 @@ extern int strlen (const char *);
|
||||
static int first_nonopt;
|
||||
static int last_nonopt;
|
||||
|
||||
/* Bash 2.0 gives us an environment variable containing flags
|
||||
indicating ARGV elements that should not be considered arguments. */
|
||||
|
||||
static const char *nonoption_flags;
|
||||
static int nonoption_flags_len;
|
||||
|
||||
/* Exchange two adjacent subsequences of ARGV.
|
||||
One subsequence is elements [first_nonopt,last_nonopt)
|
||||
which contains all the non-options that have been skipped so far.
|
||||
@@ -226,6 +248,10 @@ static int last_nonopt;
|
||||
`first_nonopt' and `last_nonopt' are relocated so that they describe
|
||||
the new indices of the non-options in ARGV after they are moved. */
|
||||
|
||||
#if defined (__STDC__) && __STDC__
|
||||
static void exchange (char **);
|
||||
#endif
|
||||
|
||||
static void
|
||||
exchange (argv)
|
||||
char **argv;
|
||||
@@ -284,6 +310,9 @@ exchange (argv)
|
||||
|
||||
/* Initialize the internal data when the first call is made. */
|
||||
|
||||
#if defined (__STDC__) && __STDC__
|
||||
static const char *_getopt_initialize (const char *);
|
||||
#endif
|
||||
static const char *
|
||||
_getopt_initialize (optstring)
|
||||
const char *optstring;
|
||||
@@ -315,6 +344,21 @@ _getopt_initialize (optstring)
|
||||
else
|
||||
ordering = PERMUTE;
|
||||
|
||||
if (posixly_correct == NULL)
|
||||
{
|
||||
/* Bash 2.0 puts a special variable in the environment for each
|
||||
command it runs, specifying which ARGV elements are the results of
|
||||
file name wildcard expansion and therefore should not be
|
||||
considered as options. */
|
||||
char var[100];
|
||||
sprintf (var, "_%d_GNU_nonoption_argv_flags_", getpid ());
|
||||
nonoption_flags = getenv (var);
|
||||
if (nonoption_flags == NULL)
|
||||
nonoption_flags_len = 0;
|
||||
else
|
||||
nonoption_flags_len = strlen (nonoption_flags);
|
||||
}
|
||||
|
||||
return optstring;
|
||||
}
|
||||
|
||||
@@ -391,10 +435,24 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
|
||||
optind = 1; /* Don't scan ARGV[0], the program name. */
|
||||
}
|
||||
|
||||
/* Test whether ARGV[optind] points to a non-option argument.
|
||||
Either it does not have option syntax, or there is an environment flag
|
||||
from the shell indicating it is not an option. */
|
||||
#define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0' \
|
||||
|| (optind < nonoption_flags_len \
|
||||
&& nonoption_flags[optind] == '1'))
|
||||
|
||||
if (nextchar == NULL || *nextchar == '\0')
|
||||
{
|
||||
/* Advance to the next ARGV-element. */
|
||||
|
||||
/* Give FIRST_NONOPT & LAST_NONOPT rational values if OPTIND has been
|
||||
moved back by the user (who may also have changed the arguments). */
|
||||
if (last_nonopt > optind)
|
||||
last_nonopt = optind;
|
||||
if (first_nonopt > optind)
|
||||
first_nonopt = optind;
|
||||
|
||||
if (ordering == PERMUTE)
|
||||
{
|
||||
/* If we have just processed some options following some non-options,
|
||||
@@ -408,8 +466,7 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
|
||||
/* Skip any additional non-options
|
||||
and extend the range of non-options previously skipped. */
|
||||
|
||||
while (optind < argc
|
||||
&& (argv[optind][0] != '-' || argv[optind][1] == '\0'))
|
||||
while (optind < argc && NONOPTION_P)
|
||||
optind++;
|
||||
last_nonopt = optind;
|
||||
}
|
||||
@@ -447,7 +504,7 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
|
||||
/* If we have come to a non-option and did not permute it,
|
||||
either stop the scan or describe it to the caller and pass it by. */
|
||||
|
||||
if ((argv[optind][0] != '-' || argv[optind][1] == '\0'))
|
||||
if (NONOPTION_P)
|
||||
{
|
||||
if (ordering == REQUIRE_ORDER)
|
||||
return EOF;
|
||||
@@ -479,8 +536,7 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
|
||||
|
||||
if (longopts != NULL
|
||||
&& (argv[optind][1] == '-'
|
||||
|| (long_only && (argv[optind][2]
|
||||
|| !my_index (optstring, argv[optind][1])))))
|
||||
|| (long_only && (argv[optind][2] || !my_index (optstring, argv[optind][1])))))
|
||||
{
|
||||
char *nameend;
|
||||
const struct option *p;
|
||||
@@ -493,8 +549,8 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
|
||||
for (nameend = nextchar; *nameend && *nameend != '='; nameend++)
|
||||
/* Do nothing. */ ;
|
||||
|
||||
#ifdef lint
|
||||
indfound = 0; /* Avoid spurious compiler warning. */
|
||||
#ifdef lint /* Suppress `used before initialized' warning. */
|
||||
indfound = 0;
|
||||
#endif
|
||||
|
||||
/* Test all long options for either exact match
|
||||
@@ -528,6 +584,7 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
|
||||
argv[0], argv[optind]);
|
||||
nextchar += strlen (nextchar);
|
||||
optind++;
|
||||
optopt = 0;
|
||||
return '?';
|
||||
}
|
||||
|
||||
@@ -544,18 +601,20 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
|
||||
else
|
||||
{
|
||||
if (opterr)
|
||||
if (argv[optind - 1][1] == '-')
|
||||
/* --option */
|
||||
fprintf (stderr,
|
||||
_("%s: option `--%s' doesn't allow an argument\n"),
|
||||
argv[0], pfound->name);
|
||||
else
|
||||
/* +option or -option */
|
||||
fprintf (stderr,
|
||||
_("%s: option `%c%s' doesn't allow an argument\n"),
|
||||
argv[0], argv[optind - 1][0], pfound->name);
|
||||
if (argv[optind - 1][1] == '-')
|
||||
/* --option */
|
||||
fprintf (stderr,
|
||||
_("%s: option `--%s' doesn't allow an argument\n"),
|
||||
argv[0], pfound->name);
|
||||
else
|
||||
/* +option or -option */
|
||||
fprintf (stderr,
|
||||
_("%s: option `%c%s' doesn't allow an argument\n"),
|
||||
argv[0], argv[optind - 1][0], pfound->name);
|
||||
|
||||
nextchar += strlen (nextchar);
|
||||
|
||||
optopt = pfound->val;
|
||||
return '?';
|
||||
}
|
||||
}
|
||||
@@ -567,9 +626,10 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
|
||||
{
|
||||
if (opterr)
|
||||
fprintf (stderr,
|
||||
_("%s: option `%s' requires an argument\n"),
|
||||
argv[0], argv[optind - 1]);
|
||||
_("%s: option `%s' requires an argument\n"),
|
||||
argv[0], argv[optind - 1]);
|
||||
nextchar += strlen (nextchar);
|
||||
optopt = pfound->val;
|
||||
return optstring[0] == ':' ? ':' : '?';
|
||||
}
|
||||
}
|
||||
@@ -604,6 +664,7 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
|
||||
}
|
||||
nextchar = (char *) "";
|
||||
optind++;
|
||||
optopt = 0;
|
||||
return '?';
|
||||
}
|
||||
}
|
||||
@@ -663,8 +724,8 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
|
||||
{
|
||||
/* 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] == ':')
|
||||
|
||||
@@ -13,7 +13,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, 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||
Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
|
||||
#ifndef _GETOPT_H
|
||||
#define _GETOPT_H 1
|
||||
|
||||
@@ -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, 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||
Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include <config.h>
|
||||
|
||||
@@ -25,11 +25,11 @@
|
||||
#include <ctype.h>
|
||||
|
||||
#if defined (STDC_HEADERS) || (!defined (isascii) && !defined (HAVE_ISASCII))
|
||||
#define ISASCII(c) 1
|
||||
#define IN_CTYPE_DOMAIN(c) 1
|
||||
#else
|
||||
#define ISASCII(c) isascii(c)
|
||||
#define IN_CTYPE_DOMAIN(c) isascii(c)
|
||||
#endif
|
||||
#define ISUPPER(c) (ISASCII (c) && isupper (c))
|
||||
#define ISUPPER(c) (IN_CTYPE_DOMAIN (c) && isupper (c))
|
||||
|
||||
#if _LIBC || STDC_HEADERS
|
||||
# define TOLOWER(c) tolower (c)
|
||||
|
||||
@@ -72,7 +72,7 @@ static int oatoi ();
|
||||
|
||||
struct mode_change *
|
||||
mode_compile (mode_string, masked_ops)
|
||||
register char *mode_string;
|
||||
const char *mode_string;
|
||||
unsigned masked_ops;
|
||||
{
|
||||
struct mode_change *head; /* First element of the linked list. */
|
||||
@@ -244,7 +244,7 @@ invalid:
|
||||
unsigned short
|
||||
mode_adjust (oldmode, changes)
|
||||
unsigned oldmode;
|
||||
register struct mode_change *changes;
|
||||
const struct mode_change *changes;
|
||||
{
|
||||
unsigned short newmode; /* The adjusted mode and one operand. */
|
||||
unsigned short value; /* The other operand. */
|
||||
|
||||
@@ -44,12 +44,14 @@ struct mode_change
|
||||
#define MODE_INVALID (struct mode_change *) 0
|
||||
#define MODE_MEMORY_EXHAUSTED (struct mode_change *) 1
|
||||
|
||||
#ifdef __STDC__
|
||||
struct mode_change *mode_compile (char *, unsigned);
|
||||
unsigned short mode_adjust (unsigned, struct mode_change *);
|
||||
void mode_free (struct mode_change *);
|
||||
#ifndef __P
|
||||
#if defined (__GNUC__) || (defined (__STDC__) && __STDC__)
|
||||
#define __P(args) args
|
||||
#else
|
||||
struct mode_change *mode_compile ();
|
||||
unsigned short mode_adjust ();
|
||||
void mode_free ();
|
||||
#endif
|
||||
#define __P(args) ()
|
||||
#endif /* GCC. */
|
||||
#endif /* Not __P. */
|
||||
|
||||
struct mode_change *mode_compile __P ((const char *, unsigned));
|
||||
unsigned short mode_adjust __P ((unsigned, const struct mode_change *));
|
||||
void mode_free __P ((struct mode_change *));
|
||||
|
||||
@@ -80,6 +80,10 @@ void error ();
|
||||
#include <sys/statfs.h>
|
||||
#endif
|
||||
|
||||
#ifdef MOUNTED_LISTMNTENT
|
||||
#include <mntent.h>
|
||||
#endif
|
||||
|
||||
#ifdef MOUNTED_GETMNTENT2 /* SVR4. */
|
||||
#include <sys/mnttab.h>
|
||||
#endif
|
||||
@@ -195,6 +199,36 @@ read_filesystem_list (need_fs_type, all_fs)
|
||||
me->me_next = NULL;
|
||||
mount_list = mtail = me;
|
||||
|
||||
#ifdef MOUNTED_LISTMNTENT
|
||||
{
|
||||
struct tabmntent *mntlist, *p;
|
||||
struct mntent *mnt;
|
||||
struct mount_entry *me;
|
||||
|
||||
/* the third and fourth arguments could be used to filter mounts,
|
||||
but Crays doesn't seem to have any mounts that we want to
|
||||
remove. Specifically, automount create normal NFS mounts.
|
||||
*/
|
||||
|
||||
if(listmntent(&mntlist, KMTAB, NULL, NULL) < 0)
|
||||
return NULL;
|
||||
p = mntlist;
|
||||
while(p){
|
||||
mnt = p->ment;
|
||||
me = (struct mount_entry*) xmalloc(sizeof (struct mount_entry));
|
||||
me->me_devname = xstrdup(mnt->mnt_fsname);
|
||||
me->me_mountdir = xstrdup(mnt->mnt_dir);
|
||||
me->me_type = xstrdup(mnt->mnt_type);
|
||||
me->me_dev = -1;
|
||||
me->me_next = NULL;
|
||||
mtail->me_next = me;
|
||||
mtail = me;
|
||||
p = p->next;
|
||||
}
|
||||
freemntlist(mntlist);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef MOUNTED_GETMNTENT1 /* 4.3BSD, SunOS, HP-UX, Dynix, Irix. */
|
||||
{
|
||||
struct mntent *mnt;
|
||||
|
||||
36
lib/regex.c
36
lib/regex.c
@@ -173,32 +173,32 @@ init_syntax_once ()
|
||||
eliminate the && through constant folding." */
|
||||
|
||||
#if defined (STDC_HEADERS) || (!defined (isascii) && !defined (HAVE_ISASCII))
|
||||
#define ISASCII(c) 1
|
||||
#define IN_CTYPE_DOMAIN(c) 1
|
||||
#else
|
||||
#define ISASCII(c) isascii(c)
|
||||
#define IN_CTYPE_DOMAIN(c) isascii(c)
|
||||
#endif
|
||||
|
||||
#ifdef isblank
|
||||
#define ISBLANK(c) (ISASCII (c) && isblank (c))
|
||||
#define ISBLANK(c) (IN_CTYPE_DOMAIN (c) && isblank (c))
|
||||
#else
|
||||
#define ISBLANK(c) ((c) == ' ' || (c) == '\t')
|
||||
#endif
|
||||
#ifdef isgraph
|
||||
#define ISGRAPH(c) (ISASCII (c) && isgraph (c))
|
||||
#define ISGRAPH(c) (IN_CTYPE_DOMAIN (c) && isgraph (c))
|
||||
#else
|
||||
#define ISGRAPH(c) (ISASCII (c) && isprint (c) && !isspace (c))
|
||||
#define ISGRAPH(c) (IN_CTYPE_DOMAIN (c) && isprint (c) && !isspace (c))
|
||||
#endif
|
||||
|
||||
#define ISPRINT(c) (ISASCII (c) && isprint (c))
|
||||
#define ISDIGIT(c) (ISASCII (c) && isdigit (c))
|
||||
#define ISALNUM(c) (ISASCII (c) && isalnum (c))
|
||||
#define ISALPHA(c) (ISASCII (c) && isalpha (c))
|
||||
#define ISCNTRL(c) (ISASCII (c) && iscntrl (c))
|
||||
#define ISLOWER(c) (ISASCII (c) && islower (c))
|
||||
#define ISPUNCT(c) (ISASCII (c) && ispunct (c))
|
||||
#define ISSPACE(c) (ISASCII (c) && isspace (c))
|
||||
#define ISUPPER(c) (ISASCII (c) && isupper (c))
|
||||
#define ISXDIGIT(c) (ISASCII (c) && isxdigit (c))
|
||||
#define ISPRINT(c) (IN_CTYPE_DOMAIN (c) && isprint (c))
|
||||
#define ISDIGIT(c) (IN_CTYPE_DOMAIN (c) && isdigit (c))
|
||||
#define ISALNUM(c) (IN_CTYPE_DOMAIN (c) && isalnum (c))
|
||||
#define ISALPHA(c) (IN_CTYPE_DOMAIN (c) && isalpha (c))
|
||||
#define ISCNTRL(c) (IN_CTYPE_DOMAIN (c) && iscntrl (c))
|
||||
#define ISLOWER(c) (IN_CTYPE_DOMAIN (c) && islower (c))
|
||||
#define ISPUNCT(c) (IN_CTYPE_DOMAIN (c) && ispunct (c))
|
||||
#define ISSPACE(c) (IN_CTYPE_DOMAIN (c) && isspace (c))
|
||||
#define ISUPPER(c) (IN_CTYPE_DOMAIN (c) && isupper (c))
|
||||
#define ISXDIGIT(c) (IN_CTYPE_DOMAIN (c) && isxdigit (c))
|
||||
|
||||
#ifndef NULL
|
||||
#define NULL (void *)0
|
||||
@@ -4505,9 +4505,9 @@ re_match_2_internal (bufp, string1, size1, string2, size2, pos, regs, stop)
|
||||
#endif
|
||||
|
||||
if ((re_opcode_t) p1[3] == exactn
|
||||
&& ! ((int) p2[1] * BYTEWIDTH > (int) p1[4]
|
||||
&& (p2[1 + p1[4] / BYTEWIDTH]
|
||||
& (1 << (p1[4] % BYTEWIDTH)))))
|
||||
&& ! ((int) p2[1] * BYTEWIDTH > (int) p1[5]
|
||||
&& (p2[2 + p1[5] / BYTEWIDTH]
|
||||
& (1 << (p1[5] % BYTEWIDTH)))))
|
||||
{
|
||||
p[-3] = (unsigned char) pop_failure_jump;
|
||||
DEBUG_PRINT3 (" %c != %c => pop_failure_jump.\n",
|
||||
|
||||
954
lib/strftime.c
954
lib/strftime.c
@@ -1,559 +1,453 @@
|
||||
/* strftime - custom formatting of date and/or time
|
||||
Copyright (C) 1989, 1991, 1992 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1991, 92, 93, 94, 95, 96 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.
|
||||
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 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 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.
|
||||
|
||||
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., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||
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.
|
||||
|
||||
/* Note: this version of strftime lacks locale support,
|
||||
but it is standalone.
|
||||
|
||||
Performs `%' substitutions similar to those in printf. Except
|
||||
where noted, substituted fields have a fixed size; numeric fields are
|
||||
padded if necessary. Padding is with zeros by default; for fields
|
||||
that display a single number, padding can be changed or inhibited by
|
||||
following the `%' with one of the modifiers described below. Unknown
|
||||
field specifiers are copied as normal characters. All other
|
||||
characters are copied to the output without change.
|
||||
|
||||
Supports a superset of the ANSI C field specifiers.
|
||||
|
||||
Literal character fields:
|
||||
% %
|
||||
n newline
|
||||
t tab
|
||||
|
||||
Numeric modifiers (a nonstandard extension):
|
||||
- do not pad the field
|
||||
_ pad the field with spaces
|
||||
|
||||
Time fields:
|
||||
%H hour (00..23)
|
||||
%I hour (01..12)
|
||||
%k hour ( 0..23)
|
||||
%l hour ( 1..12)
|
||||
%M minute (00..59)
|
||||
%p locale's AM or PM
|
||||
%r time, 12-hour (hh:mm:ss [AP]M)
|
||||
%R time, 24-hour (hh:mm)
|
||||
%s time in seconds since 00:00:00, Jan 1, 1970 (a nonstandard extension)
|
||||
%S second (00..61)
|
||||
%T time, 24-hour (hh:mm:ss)
|
||||
%X locale's time representation (%H:%M:%S)
|
||||
%z RFC-822 style numeric timezone (-0500) (a nonstandard extension)
|
||||
%Z time zone (EDT), or nothing if no time zone is determinable
|
||||
|
||||
Date fields:
|
||||
%a locale's abbreviated weekday name (Sun..Sat)
|
||||
%A locale's full weekday name, variable length (Sunday..Saturday)
|
||||
%b locale's abbreviated month name (Jan..Dec)
|
||||
%B locale's full month name, variable length (January..December)
|
||||
%c locale's date and time (Sat Nov 04 12:02:33 EST 1989)
|
||||
%C century (00..99)
|
||||
%d day of month (01..31)
|
||||
%e day of month ( 1..31)
|
||||
%D date (mm/dd/yy)
|
||||
%h same as %b
|
||||
%j day of year (001..366)
|
||||
%m month (01..12)
|
||||
%U week number of year with Sunday as first day of week (00..53)
|
||||
%V FIXME
|
||||
%w day of week (0..6)
|
||||
%W week number of year with Monday as first day of week (00..53)
|
||||
%x locale's date representation (mm/dd/yy)
|
||||
%y last two digits of year (00..99)
|
||||
%Y year (1970...)
|
||||
|
||||
David MacKenzie <djm@gnu.ai.mit.edu> */
|
||||
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>
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#ifdef _LIBC
|
||||
# define HAVE_LIMITS_H 1
|
||||
# define HAVE_MBLEN 1
|
||||
# define HAVE_TM_ZONE 1
|
||||
# define STDC_HEADERS 1
|
||||
# include <ansidecl.h>
|
||||
# include "../locale/localeinfo.h"
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
#include <sys/types.h>
|
||||
#if defined(TM_IN_SYS_TIME) || (!defined(HAVE_TM_ZONE) && !defined(HAVE_TZNAME))
|
||||
#include <sys/time.h>
|
||||
#include <sys/types.h> /* Some systems define `time_t' here. */
|
||||
|
||||
#ifdef TIME_WITH_SYS_TIME
|
||||
# include <sys/time.h>
|
||||
# include <time.h>
|
||||
#else
|
||||
#include <time.h>
|
||||
# ifdef HAVE_SYS_TIME_H
|
||||
# include <sys/time.h>
|
||||
# else
|
||||
# include <time.h>
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifndef STDC_HEADERS
|
||||
time_t mktime ();
|
||||
#if HAVE_MBLEN
|
||||
# include <ctype.h>
|
||||
#endif
|
||||
|
||||
#if defined(HAVE_TZNAME)
|
||||
extern char *tzname[2];
|
||||
#if HAVE_LIMITS_H
|
||||
# include <limits.h>
|
||||
#endif
|
||||
|
||||
/* Types of padding for numbers in date and time. */
|
||||
enum padding
|
||||
{
|
||||
none, blank, zero
|
||||
};
|
||||
|
||||
static char const* const days[] =
|
||||
{
|
||||
"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"
|
||||
};
|
||||
|
||||
static char const * const months[] =
|
||||
{
|
||||
"January", "February", "March", "April", "May", "June",
|
||||
"July", "August", "September", "October", "November", "December"
|
||||
};
|
||||
|
||||
/* Add character C to STRING and increment LENGTH,
|
||||
unless LENGTH would exceed MAX. */
|
||||
|
||||
#define add_char(c) \
|
||||
do \
|
||||
{ \
|
||||
if (length + 1 <= max) \
|
||||
string[length++] = (c); \
|
||||
} \
|
||||
while (0)
|
||||
|
||||
/* Add a 2 digit number to STRING, padding if specified.
|
||||
Return the number of characters added, up to MAX. */
|
||||
|
||||
static int
|
||||
add_num2 (string, num, max, pad)
|
||||
char *string;
|
||||
int num;
|
||||
int max;
|
||||
enum padding pad;
|
||||
{
|
||||
int top = num / 10;
|
||||
int length = 0;
|
||||
|
||||
if (top == 0 && pad == blank)
|
||||
add_char (' ');
|
||||
else if (top != 0 || pad == zero)
|
||||
add_char (top + '0');
|
||||
add_char (num % 10 + '0');
|
||||
return length;
|
||||
}
|
||||
|
||||
/* Add a 3 digit number to STRING, padding if specified.
|
||||
Return the number of characters added, up to MAX. */
|
||||
|
||||
static int
|
||||
add_num3 (string, num, max, pad)
|
||||
char *string;
|
||||
int num;
|
||||
int max;
|
||||
enum padding pad;
|
||||
{
|
||||
int top = num / 100;
|
||||
int mid = (num - top * 100) / 10;
|
||||
int length = 0;
|
||||
|
||||
if (top == 0 && pad == blank)
|
||||
add_char (' ');
|
||||
else if (top != 0 || pad == zero)
|
||||
add_char (top + '0');
|
||||
if (mid == 0 && top == 0 && pad == blank)
|
||||
add_char (' ');
|
||||
else if (mid != 0 || top != 0 || pad == zero)
|
||||
add_char (mid + '0');
|
||||
add_char (num % 10 + '0');
|
||||
return length;
|
||||
}
|
||||
|
||||
/* Like strncpy except return the number of characters copied. */
|
||||
|
||||
static int
|
||||
add_str (to, from, max)
|
||||
char *to;
|
||||
const char *from;
|
||||
int max;
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; from[i] && i <= max; ++i)
|
||||
to[i] = from[i];
|
||||
return i;
|
||||
}
|
||||
|
||||
static int
|
||||
add_num_time_t (string, max, num)
|
||||
char *string;
|
||||
int max;
|
||||
time_t num;
|
||||
{
|
||||
/* This buffer is large enough to hold the character representation
|
||||
(including the trailing NUL) of any unsigned decimal quantity
|
||||
whose binary representation fits in 128 bits. */
|
||||
char buf[40];
|
||||
int length;
|
||||
|
||||
if (sizeof (num) > 16)
|
||||
abort ();
|
||||
sprintf (buf, "%lu", (unsigned long) num);
|
||||
length = add_str (string, buf, max);
|
||||
return length;
|
||||
}
|
||||
|
||||
/* Convert MINUTES_EAST into a string suitable for use as the RFC-822
|
||||
timezone indicator. Write no more than MAX bytes into STRING.
|
||||
Return the number of bytes written into STRING. */
|
||||
|
||||
static int
|
||||
add_num_tz (string, max, minutes_east)
|
||||
char *string;
|
||||
int max;
|
||||
int minutes_east;
|
||||
{
|
||||
int length;
|
||||
|
||||
if (max < 1)
|
||||
return 0;
|
||||
|
||||
if (minutes_east < 0)
|
||||
{
|
||||
*string = '-';
|
||||
minutes_east = -minutes_east;
|
||||
}
|
||||
else
|
||||
*string = '+';
|
||||
|
||||
length = 1 + add_num2 (&string[1], (minutes_east / 60) % 24, max - 1, zero);
|
||||
length += add_num2 (&string[length], minutes_east % 60, max - length, zero);
|
||||
|
||||
return length;
|
||||
}
|
||||
|
||||
/* Implement %U. Return the week in the year of the time in TM,
|
||||
with the weeks starting on Sundays. */
|
||||
|
||||
static int
|
||||
sun_week (tm)
|
||||
const struct tm *tm;
|
||||
{
|
||||
int dl;
|
||||
|
||||
/* %U Week of the year (Sunday as the first day of the week) as a decimal
|
||||
number [00-53]. All days in a new year preceding the first Sunday are
|
||||
considered to be in week 0. */
|
||||
|
||||
dl = tm->tm_yday - tm->tm_wday;
|
||||
return dl < 0 ? 0 : dl / 7 + 1;
|
||||
}
|
||||
|
||||
/* Implement %V. Similar to mon_week (%W), but there is no 0'th week --
|
||||
they're numbered [01-53]. And if the week containing January 1 has
|
||||
four or more days in the new year, then it is considered week 1;
|
||||
otherwise, it is week 53 of the previous year, and the next week is
|
||||
week 1. (See the ISO 8601: 1988 standard.) */
|
||||
|
||||
static int
|
||||
mon_week_ISO (tm)
|
||||
const struct tm *tm;
|
||||
{
|
||||
int dl, n_days_before_first_monday;
|
||||
int week_num;
|
||||
|
||||
n_days_before_first_monday = (tm->tm_yday + 7 - tm->tm_wday + 1) % 7;
|
||||
dl = tm->tm_yday - n_days_before_first_monday;
|
||||
week_num = dl < 0 ? 0 : dl / 7 + 1;
|
||||
if (n_days_before_first_monday >= 4)
|
||||
{
|
||||
week_num = (week_num + 1) % 54;
|
||||
if (week_num == 0)
|
||||
week_num = 1;
|
||||
}
|
||||
if (week_num == 0)
|
||||
week_num = 53;
|
||||
|
||||
return week_num;
|
||||
}
|
||||
|
||||
/* Implement %W. Return the week in the year of the time in TM,
|
||||
with the weeks starting on Mondays. */
|
||||
|
||||
static int
|
||||
mon_week (tm)
|
||||
const struct tm *tm;
|
||||
{
|
||||
int dl, n_days_before_first_monday;
|
||||
|
||||
n_days_before_first_monday = (tm->tm_yday + 7 - tm->tm_wday + 1) % 7;
|
||||
dl = tm->tm_yday - n_days_before_first_monday;
|
||||
return dl < 0 ? 0 : dl / 7 + 1;
|
||||
}
|
||||
|
||||
#if !defined(HAVE_TM_ZONE) && !defined(HAVE_TZNAME)
|
||||
char *
|
||||
zone_name (tp)
|
||||
struct tm *tp;
|
||||
{
|
||||
char *timezone ();
|
||||
struct timeval tv;
|
||||
struct timezone tz;
|
||||
|
||||
gettimeofday (&tv, &tz);
|
||||
return timezone (tz.tz_minuteswest, tp->tm_isdst);
|
||||
}
|
||||
#if STDC_HEADERS
|
||||
# include <stddef.h>
|
||||
# include <stdlib.h>
|
||||
# include <string.h>
|
||||
#else
|
||||
# define memcpy(d, s, n) bcopy (s, d, n)
|
||||
#endif
|
||||
|
||||
/* Format the time given in TM according to FORMAT, and put the
|
||||
results in STRING.
|
||||
Return the number of characters (not including terminating null)
|
||||
that were put into STRING, or 0 if the length would have
|
||||
exceeded MAX. */
|
||||
#ifndef __P
|
||||
#if defined (__GNUC__) || (defined (__STDC__) && __STDC__)
|
||||
#define __P(args) args
|
||||
#else
|
||||
#define __P(args) ()
|
||||
#endif /* GCC. */
|
||||
#endif /* Not __P. */
|
||||
|
||||
#ifndef PTR
|
||||
#ifdef __STDC__
|
||||
#define PTR void *
|
||||
#else
|
||||
#define PTR char *
|
||||
#endif
|
||||
#endif
|
||||
|
||||
static unsigned int week __P((const struct tm *const, int, int));
|
||||
|
||||
|
||||
#define add(n, f) \
|
||||
do \
|
||||
{ \
|
||||
i += (n); \
|
||||
if (i >= maxsize) \
|
||||
return 0; \
|
||||
else \
|
||||
if (p) \
|
||||
{ \
|
||||
f; \
|
||||
p += (n); \
|
||||
} \
|
||||
} while (0)
|
||||
#define cpy(n, s) add((n), memcpy((PTR) p, (PTR) (s), (n)))
|
||||
|
||||
#ifdef _LIBC
|
||||
#define fmt(n, args) add((n), if (sprintf args != (n)) return 0)
|
||||
#else
|
||||
#define fmt(n, args) add((n), sprintf args; if (strlen (p) != (n)) return 0)
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
/* Return the week in the year specified by TP,
|
||||
with weeks starting on STARTING_DAY. */
|
||||
#ifdef __GNUC__
|
||||
inline
|
||||
#endif
|
||||
static unsigned int
|
||||
week (tp, starting_day, max_preceding)
|
||||
const struct tm *const tp;
|
||||
int starting_day;
|
||||
int max_preceding;
|
||||
{
|
||||
int wday, dl, base;
|
||||
|
||||
wday = tp->tm_wday - starting_day;
|
||||
if (wday < 0)
|
||||
wday += 7;
|
||||
|
||||
/* Set DL to the day in the year of the first day of the week
|
||||
containing the day specified in TP. */
|
||||
dl = tp->tm_yday - wday;
|
||||
|
||||
/* For the computation following ISO 8601:1988 we set the number of
|
||||
the week containing January 1st to 1 if this week has more than
|
||||
MAX_PRECEDING days in the new year. For ISO 8601 this number is
|
||||
3, for the other representation it is 7 (i.e., not to be
|
||||
fulfilled). */
|
||||
base = ((dl + 7) % 7) > max_preceding ? 1 : 0;
|
||||
|
||||
/* If DL is negative we compute the result as 0 unless we have to
|
||||
compute it according ISO 8601. In this case we have to return 53
|
||||
or 1 if the week containing January 1st has less than 4 days in
|
||||
the new year or not. If DL is not negative we calculate the
|
||||
number of complete weeks for our week (DL / 7) plus 1 (because
|
||||
only for DL < 0 we are in week 0/53 and plus the number of the
|
||||
first week computed in the last step. */
|
||||
return dl < 0 ? (dl < -max_preceding ? 53 : base)
|
||||
: base + 1 + dl / 7;
|
||||
}
|
||||
|
||||
#ifndef _NL_CURRENT
|
||||
static char const weekday_name[][10] =
|
||||
{
|
||||
"Sunday", "Monday", "Tuesday", "Wednesday",
|
||||
"Thursday", "Friday", "Saturday"
|
||||
};
|
||||
static char const month_name[][10] =
|
||||
{
|
||||
"January", "February", "March", "April", "May", "June",
|
||||
"July", "August", "September", "October", "November", "December"
|
||||
};
|
||||
#endif
|
||||
|
||||
/* Write information from TP into S according to the format
|
||||
string FORMAT, writing no more that MAXSIZE characters
|
||||
(including the terminating '\0') and returning number of
|
||||
characters written. If S is NULL, nothing will be written
|
||||
anywhere, so to determine how many characters would be
|
||||
written, use NULL for S and (size_t) UINT_MAX for MAXSIZE. */
|
||||
size_t
|
||||
strftime (string, max, format, tm)
|
||||
char *string;
|
||||
size_t max;
|
||||
const char *format;
|
||||
const struct tm *tm;
|
||||
strftime (s, maxsize, format, tp)
|
||||
char *s;
|
||||
size_t maxsize;
|
||||
const char *format;
|
||||
register const struct tm *tp;
|
||||
{
|
||||
enum padding pad; /* Type of padding to apply. */
|
||||
size_t length = 0; /* Characters put in STRING so far. */
|
||||
int hour12 = tp->tm_hour;
|
||||
#ifdef _NL_CURRENT
|
||||
const char *const a_wkday = _NL_CURRENT (LC_TIME, ABDAY_1 + tp->tm_wday);
|
||||
const char *const f_wkday = _NL_CURRENT (LC_TIME, DAY_1 + tp->tm_wday);
|
||||
const char *const a_month = _NL_CURRENT (LC_TIME, ABMON_1 + tp->tm_mon);
|
||||
const char *const f_month = _NL_CURRENT (LC_TIME, MON_1 + tp->tm_mon);
|
||||
const char *const ampm = _NL_CURRENT (LC_TIME,
|
||||
hour12 > 11 ? PM_STR : AM_STR);
|
||||
size_t aw_len = strlen(a_wkday);
|
||||
size_t am_len = strlen(a_month);
|
||||
size_t ap_len = strlen (ampm);
|
||||
#else
|
||||
const char *const f_wkday = weekday_name[tp->tm_wday];
|
||||
const char *const f_month = month_name[tp->tm_mon];
|
||||
const char *const a_wkday = f_wkday;
|
||||
const char *const a_month = f_month;
|
||||
const char *const ampm = "AMPM" + 2 * (hour12 > 11);
|
||||
size_t aw_len = 3;
|
||||
size_t am_len = 3;
|
||||
size_t ap_len = 2;
|
||||
#endif
|
||||
size_t wkday_len = strlen(f_wkday);
|
||||
size_t month_len = strlen(f_month);
|
||||
const unsigned int y_week0 = week (tp, 0, 7);
|
||||
const unsigned int y_week1 = week (tp, 1, 7);
|
||||
const unsigned int y_week2 = week (tp, 1, 3);
|
||||
const char *zone;
|
||||
size_t zonelen;
|
||||
register size_t i = 0;
|
||||
register char *p = s;
|
||||
register const char *f;
|
||||
char number_fmt[5];
|
||||
|
||||
for (; *format && length < max; ++format)
|
||||
/* Initialize the buffer we will use for the sprintf format for numbers. */
|
||||
number_fmt[0] = '%';
|
||||
|
||||
zone = 0;
|
||||
#if HAVE_TM_ZONE
|
||||
zone = (const char *) tp->tm_zone;
|
||||
#endif
|
||||
#if HAVE_TZNAME
|
||||
if (!(zone && *zone) && tp->tm_isdst >= 0)
|
||||
zone = tzname[tp->tm_isdst];
|
||||
#endif
|
||||
if (!(zone && *zone))
|
||||
zone = "???";
|
||||
|
||||
zonelen = strlen (zone);
|
||||
|
||||
if (hour12 > 12)
|
||||
hour12 -= 12;
|
||||
else
|
||||
if (hour12 == 0) hour12 = 12;
|
||||
|
||||
for (f = format; *f != '\0'; ++f)
|
||||
{
|
||||
if (*format != '%')
|
||||
add_char (*format);
|
||||
else
|
||||
enum { pad_zero, pad_space, pad_none } pad; /* Padding for number. */
|
||||
unsigned int maxdigits; /* Max digits for numeric format. */
|
||||
unsigned int number_value; /* Numeric value to be printed. */
|
||||
const char *subfmt;
|
||||
|
||||
#if HAVE_MBLEN
|
||||
if (!isascii(*f))
|
||||
{
|
||||
++format;
|
||||
/* Modifiers: */
|
||||
if (*format == '-')
|
||||
/* Non-ASCII, may be a multibyte. */
|
||||
int len = mblen(f, strlen(f));
|
||||
if (len > 0)
|
||||
{
|
||||
pad = none;
|
||||
++format;
|
||||
}
|
||||
else if (*format == '_')
|
||||
{
|
||||
pad = blank;
|
||||
++format;
|
||||
}
|
||||
else
|
||||
pad = zero;
|
||||
|
||||
switch (*format)
|
||||
{
|
||||
/* Literal character fields: */
|
||||
case 0:
|
||||
case '%':
|
||||
add_char ('%');
|
||||
break;
|
||||
case 'n':
|
||||
add_char ('\n');
|
||||
break;
|
||||
case 't':
|
||||
add_char ('\t');
|
||||
break;
|
||||
default:
|
||||
add_char (*format);
|
||||
break;
|
||||
|
||||
/* Time fields: */
|
||||
case 'H':
|
||||
case 'k':
|
||||
length +=
|
||||
add_num2 (&string[length], tm->tm_hour, max - length,
|
||||
*format == 'H' ? pad : blank);
|
||||
break;
|
||||
case 'I':
|
||||
case 'l':
|
||||
{
|
||||
int hour12;
|
||||
|
||||
if (tm->tm_hour == 0)
|
||||
hour12 = 12;
|
||||
else if (tm->tm_hour > 12)
|
||||
hour12 = tm->tm_hour - 12;
|
||||
else
|
||||
hour12 = tm->tm_hour;
|
||||
length +=
|
||||
add_num2 (&string[length], hour12, max - length,
|
||||
*format == 'I' ? pad : blank);
|
||||
}
|
||||
break;
|
||||
case 'M':
|
||||
length +=
|
||||
add_num2 (&string[length], tm->tm_min, max - length, pad);
|
||||
break;
|
||||
case 'p':
|
||||
if (tm->tm_hour < 12)
|
||||
add_char ('A');
|
||||
else
|
||||
add_char ('P');
|
||||
add_char ('M');
|
||||
break;
|
||||
case 'r':
|
||||
length +=
|
||||
strftime (&string[length], max - length, "%I:%M:%S %p", tm);
|
||||
break;
|
||||
case 'R':
|
||||
length +=
|
||||
strftime (&string[length], max - length, "%H:%M", tm);
|
||||
break;
|
||||
|
||||
case 's':
|
||||
{
|
||||
struct tm writable_tm;
|
||||
writable_tm = *tm;
|
||||
length += add_num_time_t (&string[length], max - length,
|
||||
mktime (&writable_tm));
|
||||
}
|
||||
break;
|
||||
|
||||
case 'S':
|
||||
length +=
|
||||
add_num2 (&string[length], tm->tm_sec, max - length, pad);
|
||||
break;
|
||||
case 'T':
|
||||
length +=
|
||||
strftime (&string[length], max - length, "%H:%M:%S", tm);
|
||||
break;
|
||||
case 'X':
|
||||
length +=
|
||||
strftime (&string[length], max - length, "%H:%M:%S", tm);
|
||||
break;
|
||||
case 'z':
|
||||
{
|
||||
time_t t;
|
||||
struct tm tml, tmg;
|
||||
int diff;
|
||||
|
||||
tml = *tm;
|
||||
t = mktime (&tml);
|
||||
tml = *localtime (&t); /* Canonicalize the local time */
|
||||
tmg = *gmtime (&t);
|
||||
|
||||
/* Compute the difference */
|
||||
|
||||
diff = tml.tm_min - tmg.tm_min;
|
||||
diff += 60 * (tml.tm_hour - tmg.tm_hour);
|
||||
|
||||
if (tml.tm_mon != tmg.tm_mon)
|
||||
{
|
||||
/* We assume no timezone differs from UTC by more than
|
||||
+- 23 hours. This should be safe. */
|
||||
if (tmg.tm_mday == 1)
|
||||
tml.tm_mday = 0;
|
||||
else /* tml.tm_mday == 1 */
|
||||
tmg.tm_mday = 0;
|
||||
}
|
||||
|
||||
diff += 1440 * (tml.tm_mday - tmg.tm_mday);
|
||||
|
||||
length += add_num_tz (&string[length], max - length, diff);
|
||||
}
|
||||
break;
|
||||
case 'Z':
|
||||
#ifdef HAVE_TM_ZONE
|
||||
length += add_str (&string[length], tm->tm_zone, max - length);
|
||||
#else
|
||||
#ifdef HAVE_TZNAME
|
||||
if (tm->tm_isdst && tzname[1] && *tzname[1])
|
||||
length += add_str (&string[length], tzname[1], max - length);
|
||||
else
|
||||
length += add_str (&string[length], tzname[0], max - length);
|
||||
#else
|
||||
length += add_str (&string[length], zone_name (tm), max - length);
|
||||
#endif
|
||||
#endif
|
||||
break;
|
||||
|
||||
/* Date fields: */
|
||||
case 'a':
|
||||
add_char (days[tm->tm_wday][0]);
|
||||
add_char (days[tm->tm_wday][1]);
|
||||
add_char (days[tm->tm_wday][2]);
|
||||
break;
|
||||
case 'A':
|
||||
length +=
|
||||
add_str (&string[length], days[tm->tm_wday], max - length);
|
||||
break;
|
||||
case 'b':
|
||||
case 'h':
|
||||
add_char (months[tm->tm_mon][0]);
|
||||
add_char (months[tm->tm_mon][1]);
|
||||
add_char (months[tm->tm_mon][2]);
|
||||
break;
|
||||
case 'B':
|
||||
length +=
|
||||
add_str (&string[length], months[tm->tm_mon], max - length);
|
||||
break;
|
||||
case 'c':
|
||||
length +=
|
||||
strftime (&string[length], max - length,
|
||||
"%a %b %d %H:%M:%S %Z %Y", tm);
|
||||
break;
|
||||
case 'C':
|
||||
length +=
|
||||
add_num2 (&string[length], (tm->tm_year + 1900) / 100,
|
||||
max - length, pad);
|
||||
break;
|
||||
case 'd':
|
||||
length +=
|
||||
add_num2 (&string[length], tm->tm_mday, max - length, pad);
|
||||
break;
|
||||
case 'e':
|
||||
length +=
|
||||
add_num2 (&string[length], tm->tm_mday, max - length, blank);
|
||||
break;
|
||||
case 'D':
|
||||
length +=
|
||||
strftime (&string[length], max - length, "%m/%d/%y", tm);
|
||||
break;
|
||||
case 'j':
|
||||
length +=
|
||||
add_num3 (&string[length], tm->tm_yday + 1, max - length, pad);
|
||||
break;
|
||||
case 'm':
|
||||
length +=
|
||||
add_num2 (&string[length], tm->tm_mon + 1, max - length, pad);
|
||||
break;
|
||||
case 'U':
|
||||
length +=
|
||||
add_num2 (&string[length], sun_week (tm), max - length, pad);
|
||||
break;
|
||||
case 'V':
|
||||
length += add_num2 (&string[length], mon_week_ISO (tm),
|
||||
max - length, pad);
|
||||
break;
|
||||
case 'w':
|
||||
add_char (tm->tm_wday + '0');
|
||||
break;
|
||||
case 'W':
|
||||
length +=
|
||||
add_num2 (&string[length], mon_week (tm), max - length, pad);
|
||||
break;
|
||||
case 'x':
|
||||
length +=
|
||||
strftime (&string[length], max - length, "%m/%d/%y", tm);
|
||||
break;
|
||||
case 'y':
|
||||
length +=
|
||||
add_num2 (&string[length], tm->tm_year % 100,
|
||||
max - length, pad);
|
||||
break;
|
||||
case 'Y':
|
||||
add_char ((tm->tm_year + 1900) / 1000 + '0');
|
||||
length +=
|
||||
add_num3 (&string[length],
|
||||
(1900 + tm->tm_year) % 1000, max - length, zero);
|
||||
break;
|
||||
cpy(len, f);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
if (*f != '%')
|
||||
{
|
||||
add(1, *p = *f);
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Check for flags that can modify a number format. */
|
||||
++f;
|
||||
switch (*f)
|
||||
{
|
||||
case '_':
|
||||
pad = pad_space;
|
||||
++f;
|
||||
break;
|
||||
case '-':
|
||||
pad = pad_none;
|
||||
++f;
|
||||
break;
|
||||
default:
|
||||
pad = pad_zero;
|
||||
break;
|
||||
}
|
||||
|
||||
/* Now do the specified format. */
|
||||
switch (*f)
|
||||
{
|
||||
case '\0':
|
||||
case '%':
|
||||
add(1, *p = *f);
|
||||
break;
|
||||
|
||||
case 'a':
|
||||
cpy(aw_len, a_wkday);
|
||||
break;
|
||||
|
||||
case 'A':
|
||||
cpy(wkday_len, f_wkday);
|
||||
break;
|
||||
|
||||
case 'b':
|
||||
case 'h': /* GNU extension. */
|
||||
cpy(am_len, a_month);
|
||||
break;
|
||||
|
||||
case 'B':
|
||||
cpy(month_len, f_month);
|
||||
break;
|
||||
|
||||
case 'c':
|
||||
#ifdef _NL_CURRENT
|
||||
subfmt = _NL_CURRENT (LC_TIME, D_T_FMT);
|
||||
#else
|
||||
subfmt = "%a %b %d %H:%M:%S %Z %Y";
|
||||
#endif
|
||||
subformat:
|
||||
{
|
||||
size_t len = strftime (p, maxsize - i, subfmt, tp);
|
||||
if (len == 0 && *subfmt)
|
||||
return 0;
|
||||
add(len, );
|
||||
}
|
||||
break;
|
||||
|
||||
#define DO_NUMBER(digits, value) \
|
||||
maxdigits = digits; number_value = value; goto do_number
|
||||
#define DO_NUMBER_NOPAD(digits, value) \
|
||||
maxdigits = digits; number_value = value; goto do_number_nopad
|
||||
|
||||
case 'C':
|
||||
DO_NUMBER (2, (1900 + tp->tm_year) / 100);
|
||||
|
||||
case 'x':
|
||||
#ifdef _NL_CURRENT
|
||||
subfmt = _NL_CURRENT (LC_TIME, D_FMT);
|
||||
goto subformat;
|
||||
#endif
|
||||
/* Fall through. */
|
||||
case 'D': /* GNU extension. */
|
||||
subfmt = "%m/%d/%y";
|
||||
goto subformat;
|
||||
|
||||
case 'd':
|
||||
DO_NUMBER (2, tp->tm_mday);
|
||||
|
||||
case 'e': /* GNU extension: %d, but blank-padded. */
|
||||
DO_NUMBER_NOPAD (2, tp->tm_mday);
|
||||
|
||||
/* All numeric formats set MAXDIGITS and NUMBER_VALUE and then
|
||||
jump to one of these two labels. */
|
||||
|
||||
do_number_nopad:
|
||||
/* Force `-' flag. */
|
||||
pad = pad_none;
|
||||
|
||||
do_number:
|
||||
{
|
||||
/* Format the number according to the PAD flag. */
|
||||
|
||||
register char *nf = &number_fmt[1];
|
||||
int printed;
|
||||
|
||||
switch (pad)
|
||||
{
|
||||
case pad_zero:
|
||||
*nf++ = '0';
|
||||
case pad_space:
|
||||
*nf++ = '0' + maxdigits;
|
||||
case pad_none:
|
||||
*nf++ = 'u';
|
||||
*nf = '\0';
|
||||
}
|
||||
|
||||
#ifdef _LIBC
|
||||
add (maxdigits, printed = sprintf (p, number_fmt, number_value));
|
||||
#else
|
||||
add (maxdigits, sprintf (p, number_fmt, number_value);
|
||||
printed = strlen (p));
|
||||
#endif
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
case 'H':
|
||||
DO_NUMBER (2, tp->tm_hour);
|
||||
|
||||
case 'I':
|
||||
DO_NUMBER (2, hour12);
|
||||
|
||||
case 'k': /* GNU extension. */
|
||||
DO_NUMBER_NOPAD (2, tp->tm_hour);
|
||||
|
||||
case 'l': /* GNU extension. */
|
||||
DO_NUMBER_NOPAD (2, hour12);
|
||||
|
||||
case 'j':
|
||||
DO_NUMBER (3, 1 + tp->tm_yday);
|
||||
|
||||
case 'M':
|
||||
DO_NUMBER (2, tp->tm_min);
|
||||
|
||||
case 'm':
|
||||
DO_NUMBER (2, tp->tm_mon + 1);
|
||||
|
||||
case 'n': /* GNU extension. */
|
||||
add (1, *p = '\n');
|
||||
break;
|
||||
|
||||
case 'p':
|
||||
cpy(ap_len, ampm);
|
||||
break;
|
||||
|
||||
case 'R': /* GNU extension. */
|
||||
subfmt = "%H:%M";
|
||||
goto subformat;
|
||||
|
||||
case 'r': /* GNU extension. */
|
||||
subfmt = "%I:%M:%S %p";
|
||||
goto subformat;
|
||||
|
||||
case 'S':
|
||||
DO_NUMBER (2, tp->tm_sec);
|
||||
|
||||
case 'X':
|
||||
#ifdef _NL_CURRENT
|
||||
subfmt = _NL_CURRENT (LC_TIME, T_FMT);
|
||||
goto subformat;
|
||||
#endif
|
||||
/* Fall through. */
|
||||
case 'T': /* GNU extenstion. */
|
||||
subfmt = "%H:%M:%S";
|
||||
goto subformat;
|
||||
|
||||
case 't': /* GNU extenstion. */
|
||||
add (1, *p = '\t');
|
||||
break;
|
||||
|
||||
case 'U':
|
||||
DO_NUMBER (2, y_week0);
|
||||
|
||||
case 'V':
|
||||
DO_NUMBER (2, y_week2);
|
||||
|
||||
case 'W':
|
||||
DO_NUMBER (2, y_week1);
|
||||
|
||||
case 'w':
|
||||
DO_NUMBER (2, tp->tm_wday);
|
||||
|
||||
case 'Y':
|
||||
DO_NUMBER (4, 1900 + tp->tm_year);
|
||||
|
||||
case 'y':
|
||||
DO_NUMBER (2, tp->tm_year % 100);
|
||||
|
||||
case 'Z':
|
||||
cpy(zonelen, zone);
|
||||
break;
|
||||
|
||||
default:
|
||||
/* Bad format. */
|
||||
break;
|
||||
}
|
||||
}
|
||||
add_char (0);
|
||||
return length - 1;
|
||||
|
||||
if (p)
|
||||
*p = '\0';
|
||||
return i;
|
||||
}
|
||||
|
||||
49
lib/strndup.c
Normal file
49
lib/strndup.c
Normal file
@@ -0,0 +1,49 @@
|
||||
/* Copyright (C) 1996 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.
|
||||
|
||||
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, 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include "config.h"
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
#ifdef STDC_HEADERS
|
||||
# include <string.h>
|
||||
# include <stdlib.h>
|
||||
#else
|
||||
char *malloc ();
|
||||
#endif
|
||||
|
||||
/* Duplicate S, returning an identical malloc'd string. */
|
||||
char *
|
||||
strndup (s, n)
|
||||
const char *s;
|
||||
size_t n;
|
||||
{
|
||||
char *new = malloc (n + 1);
|
||||
|
||||
if (new == NULL)
|
||||
return NULL;
|
||||
|
||||
memcpy (new, s, n);
|
||||
new[n] = '\0';
|
||||
|
||||
return new;
|
||||
}
|
||||
152
lib/strtol.c
152
lib/strtol.c
@@ -1,5 +1,4 @@
|
||||
/* Copyright (C) 1991, 1992, 1994, 1995 Free Software Foundation, Inc.
|
||||
|
||||
/* Copyright (C) 1991, 92, 94, 95, 96 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.
|
||||
@@ -16,7 +15,8 @@ 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, 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||
USA. */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
@@ -57,18 +57,41 @@ extern int errno;
|
||||
# define UNSIGNED 0
|
||||
# define INT LONG int
|
||||
#else
|
||||
# define strtol strtoul
|
||||
# define INT unsigned LONG int
|
||||
#endif
|
||||
|
||||
/* Determine the name. */
|
||||
#if UNSIGNED
|
||||
# ifdef USE_WIDE_CHAR
|
||||
# ifdef QUAD
|
||||
# define strtol wcstouq
|
||||
# else
|
||||
# define strtol wcstoul
|
||||
# endif
|
||||
# else
|
||||
# ifdef QUAD
|
||||
# define strtol strtouq
|
||||
# else
|
||||
# define strtol strtoul
|
||||
# endif
|
||||
# endif
|
||||
#else
|
||||
# ifdef USE_WIDE_CHAR
|
||||
# ifdef QUAD
|
||||
# define strtol wcstoq
|
||||
# else
|
||||
# define strtol wcstol
|
||||
# endif
|
||||
# else
|
||||
# ifdef QUAD
|
||||
# define strtol strtoq
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* If QUAD is defined, we are defining `strtoq' or `strtouq',
|
||||
operating on `long long int's. */
|
||||
#ifdef QUAD
|
||||
# if UNSIGNED
|
||||
# define strtoul strtouq
|
||||
# else
|
||||
# define strtol strtoq
|
||||
# endif
|
||||
# define LONG long long
|
||||
# undef LONG_MIN
|
||||
# define LONG_MIN LONG_LONG_MIN
|
||||
@@ -84,13 +107,41 @@ extern int errno;
|
||||
# endif
|
||||
#else
|
||||
# define LONG long
|
||||
|
||||
#ifndef ULONG_MAX
|
||||
# define ULONG_MAX ((unsigned long) ~(unsigned long) 0)
|
||||
#endif
|
||||
#ifndef LONG_MAX
|
||||
# define LONG_MAX ((long int) (ULONG_MAX >> 1))
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef USE_WIDE_CHAR
|
||||
# include <wchar.h>
|
||||
# include <wctype.h>
|
||||
# define L_(ch) L##ch
|
||||
# define UCHAR_TYPE wint_t
|
||||
# define STRING_TYPE wchar_t
|
||||
# define ISSPACE(ch) iswspace (ch)
|
||||
# define ISALPHA(ch) iswalpha (ch)
|
||||
# define TOUPPER(ch) towupper (ch)
|
||||
#else
|
||||
# define L_(ch) ch
|
||||
# define UCHAR_TYPE unsigned char
|
||||
# define STRING_TYPE char
|
||||
# define ISSPACE(ch) isspace (ch)
|
||||
# define ISALPHA(ch) isalpha (ch)
|
||||
# define TOUPPER(ch) toupper (ch)
|
||||
#endif
|
||||
|
||||
#ifdef __STDC__
|
||||
# define INTERNAL(x) INTERNAL1(x)
|
||||
# define INTERNAL1(x) __##x##_internal
|
||||
# define WEAKNAME(x) WEAKNAME1(x)
|
||||
# define WEAKNAME1(x) __##x
|
||||
#else
|
||||
# define INTERNAL(x) __/**/x/**/_internal
|
||||
# define WEAKNAME(x) __/**/x
|
||||
#endif
|
||||
|
||||
#ifdef USE_NUMBER_GROUPING
|
||||
@@ -108,8 +159,8 @@ extern int errno;
|
||||
|
||||
INT
|
||||
INTERNAL (strtol) (nptr, endptr, base, group)
|
||||
const char *nptr;
|
||||
char **endptr;
|
||||
const STRING_TYPE *nptr;
|
||||
STRING_TYPE **endptr;
|
||||
int base;
|
||||
int group;
|
||||
{
|
||||
@@ -117,9 +168,9 @@ INTERNAL (strtol) (nptr, endptr, base, group)
|
||||
register unsigned LONG int cutoff;
|
||||
register unsigned int cutlim;
|
||||
register unsigned LONG int i;
|
||||
register const char *s;
|
||||
register unsigned char c;
|
||||
const char *save, *end;
|
||||
register const STRING_TYPE *s;
|
||||
register UCHAR_TYPE c;
|
||||
const STRING_TYPE *save, *end;
|
||||
int overflow;
|
||||
|
||||
#ifdef USE_NUMBER_GROUPING
|
||||
@@ -151,21 +202,21 @@ INTERNAL (strtol) (nptr, endptr, base, group)
|
||||
if (base < 0 || base == 1 || base > 36)
|
||||
base = 10;
|
||||
|
||||
s = nptr;
|
||||
save = s = nptr;
|
||||
|
||||
/* Skip white space. */
|
||||
while (isspace (*s))
|
||||
while (ISSPACE (*s))
|
||||
++s;
|
||||
if (*s == '\0')
|
||||
if (*s == L_('\0'))
|
||||
goto noconv;
|
||||
|
||||
/* Check for a sign. */
|
||||
if (*s == '-')
|
||||
if (*s == L_('-'))
|
||||
{
|
||||
negative = 1;
|
||||
++s;
|
||||
}
|
||||
else if (*s == '+')
|
||||
else if (*s == L_('+'))
|
||||
{
|
||||
negative = 0;
|
||||
++s;
|
||||
@@ -173,14 +224,14 @@ INTERNAL (strtol) (nptr, endptr, base, group)
|
||||
else
|
||||
negative = 0;
|
||||
|
||||
if (base == 16 && s[0] == '0' && toupper (s[1]) == 'X')
|
||||
if (base == 16 && s[0] == L_('0') && TOUPPER (s[1]) == L_('X'))
|
||||
s += 2;
|
||||
|
||||
/* If BASE is zero, figure it out ourselves. */
|
||||
if (base == 0)
|
||||
if (*s == '0')
|
||||
if (*s == L_('0'))
|
||||
{
|
||||
if (toupper (s[1]) == 'X')
|
||||
if (TOUPPER (s[1]) == L_('X'))
|
||||
{
|
||||
s += 2;
|
||||
base = 16;
|
||||
@@ -199,9 +250,9 @@ INTERNAL (strtol) (nptr, endptr, base, group)
|
||||
{
|
||||
/* Find the end of the digit string and check its grouping. */
|
||||
end = s;
|
||||
for (c = *end; c != '\0'; c = *++end)
|
||||
if (c != thousands && !isdigit (c) &&
|
||||
(!isalpha (c) || toupper (c) - 'A' + 10 >= base))
|
||||
for (c = *end; c != L_('\0'); c = *++end)
|
||||
if (c != thousands && (c < L_('0') || c > L_('9'))
|
||||
&& (!ISALPHA (c) || TOUPPER (c) - L_('A') + 10 >= base))
|
||||
break;
|
||||
if (*s == thousands)
|
||||
end = s;
|
||||
@@ -217,14 +268,14 @@ INTERNAL (strtol) (nptr, endptr, base, group)
|
||||
|
||||
overflow = 0;
|
||||
i = 0;
|
||||
for (c = *s; c != '\0'; c = *++s)
|
||||
for (c = *s; c != L_('\0'); c = *++s)
|
||||
{
|
||||
if (s == end)
|
||||
break;
|
||||
if (isdigit (c))
|
||||
c -= '0';
|
||||
else if (isalpha (c))
|
||||
c = toupper (c) - 'A' + 10;
|
||||
if (c >= L_('0') && c <= L_('9'))
|
||||
c -= L_('0');
|
||||
else if (ISALPHA (c))
|
||||
c = TOUPPER (c) - L_('A') + 10;
|
||||
else
|
||||
break;
|
||||
if (c >= base)
|
||||
@@ -246,13 +297,15 @@ INTERNAL (strtol) (nptr, endptr, base, group)
|
||||
/* Store in ENDPTR the address of one character
|
||||
past the last character we converted. */
|
||||
if (endptr != NULL)
|
||||
*endptr = (char *) s;
|
||||
*endptr = (STRING_TYPE *) s;
|
||||
|
||||
#if !UNSIGNED
|
||||
/* Check for a value that is within the range of
|
||||
`unsigned LONG int', but outside the range of `LONG int'. */
|
||||
if (i > (negative ?
|
||||
-(unsigned LONG int) LONG_MIN : (unsigned LONG int) LONG_MAX))
|
||||
if (overflow == 0
|
||||
&& i > (negative
|
||||
? -((unsigned LONG int) (LONG_MIN + 1)) + 1
|
||||
: (unsigned LONG int) LONG_MAX))
|
||||
overflow = 1;
|
||||
#endif
|
||||
|
||||
@@ -270,23 +323,40 @@ INTERNAL (strtol) (nptr, endptr, base, group)
|
||||
return (negative ? -i : i);
|
||||
|
||||
noconv:
|
||||
/* There was no number to convert. */
|
||||
/* We must handle a special case here: the base is 0 or 16 and the
|
||||
first two characters and '0' and 'x', but the rest are no
|
||||
hexadecimal digits. This is no error case. We return 0 and
|
||||
ENDPTR points to the `x`. */
|
||||
if (endptr != NULL)
|
||||
*endptr = (char *) nptr;
|
||||
if (save - nptr >= 2 && TOUPPER (save[-1]) == L_('X')
|
||||
&& save[-2] == L_('0'))
|
||||
*endptr = (STRING_TYPE *) &save[-1];
|
||||
else
|
||||
/* There was no number to convert. */
|
||||
*endptr = (STRING_TYPE *) nptr;
|
||||
|
||||
return 0L;
|
||||
}
|
||||
|
||||
/* External user entry point. */
|
||||
|
||||
#undef __P
|
||||
#if defined (__STDC__) && __STDC__
|
||||
#define __P(args) args
|
||||
#else
|
||||
#define __P(args) ()
|
||||
#endif
|
||||
|
||||
/* Prototype. */
|
||||
INT strtol __P ((const STRING_TYPE *nptr, STRING_TYPE **endptr,
|
||||
int base));
|
||||
|
||||
|
||||
INT
|
||||
strtol (nptr, endptr, base)
|
||||
const char *nptr;
|
||||
char **endptr;
|
||||
const STRING_TYPE *nptr;
|
||||
STRING_TYPE **endptr;
|
||||
int base;
|
||||
{
|
||||
return INTERNAL (strtol) (nptr, endptr, base, 0);
|
||||
}
|
||||
|
||||
#ifdef weak_symbol
|
||||
weak_symbol (strtol)
|
||||
#endif
|
||||
|
||||
@@ -1,3 +1,22 @@
|
||||
/* A more useful interface to strtol.
|
||||
Copyright (C) 1995, 1996 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. */
|
||||
|
||||
/* Jim Meyering (meyering@na-net.ornl.gov) */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
@@ -1,10 +1,444 @@
|
||||
Thu Jul 11 21:50:48 1996 Jim Meyering <meyering@na-net.ornl.gov>
|
||||
|
||||
* Version 3.13.
|
||||
|
||||
* dircolors.1: New file -- but just a pointer to texinfo docs.
|
||||
* man/Makefile.am (man_MANS): Add dircolors.1.
|
||||
|
||||
* configure.in (VERSION): Bump to 3.13.
|
||||
|
||||
Wed Jul 10 22:57:29 1996 Jim Meyering <meyering@na-net.ornl.gov>
|
||||
|
||||
* aclocal.m4 (fp_PROG_CC_STDC): Include sys/stat.h in test program
|
||||
so that DYNIX/ptx V4.1.3 doesn't use `-Xc -D__EXTENSIONS__' -- with
|
||||
those options on that system, sys/stat.h gets compile errors.
|
||||
With help from Marcus Daniels.
|
||||
|
||||
* getopt.c: Update from gettext-0.10.23.
|
||||
* getopt1.c: Likewise.
|
||||
* getopt.h: Likewise.
|
||||
|
||||
Tue Jul 9 20:19:44 1996 Jim Meyering <meyering@na-net.ornl.gov>
|
||||
|
||||
* src/dircolors.c (usage): Improve --help message. From Karl Berry.
|
||||
(long_options): Add print-data-base and print-database.
|
||||
|
||||
* src/dircolors.c (dc_parse_stream): Don't give `unrecognized keyword'
|
||||
message unless we've processed a matching TERM directive. Reported
|
||||
by Karl Berry and François Pinard.
|
||||
|
||||
* src/install.c (UID_T_MAX): Use `(unsigned long)1' rather than
|
||||
`(uid_t)1' to avoid problems on systems where uid_t is signed.
|
||||
(GID_T_MAX): Likewise for gid_t.
|
||||
From Kjetil Torgrim Homme <kjetilho@ifi.uio.no>.
|
||||
|
||||
Sun Jul 7 22:40:08 1996 Jim Meyering <meyering@na-net.ornl.gov>
|
||||
|
||||
* src/ls.c: Change initial colors for `color_indicator' to match
|
||||
those currently in dircolors.hin. From Joshua Cowan.
|
||||
|
||||
* src/dircolors.hin: Recognize more filename extensions.
|
||||
From Joshua Cowan.
|
||||
|
||||
* src/Makefile.am (CLEANFILES): Add dcgen. From Joshua Cowan
|
||||
<jcowan@jcowan.reslife.okstate.edu>.
|
||||
|
||||
* src/Makefile.am (MAINTAINERCLEANFILES): Add dircolors.h.
|
||||
|
||||
* configure.in (AM_HEADER_TIOCGWINSZ_NEEDS_SYS_IOCTL): Use it.
|
||||
* acconfig.h [GWINSZ_IN_SYS_IOCTL]: Add #undef.
|
||||
|
||||
* src/ls.c: Include termios.h.
|
||||
Guard inclusion of sys/ioctl.h with #ifdef GWINSZ_IN_SYS_IOCTL,
|
||||
rather than HAVE_SYS_IOCTL_H. Modelled after sh-utils' stty.c
|
||||
at suggestion from Chip Bennett <BennettC@j64.stratcom.af.mil>
|
||||
to make ls adjust its idea of screen width upon window resize
|
||||
on systems (SunOS, Solaris) where TIOCGWINSZ is defined in
|
||||
termios.h, and not sys/ioctl.h.
|
||||
|
||||
* aclocal.m4 (AM_SYS_POSIX_TERMIOS): New macro, derived from test
|
||||
in the configure.in from sh-utils.
|
||||
(AM_HEADER_TIOCGWINSZ_NEEDS_SYS_IOCTL): Likewise.
|
||||
|
||||
Sat Jul 6 12:46:27 1996 Jim Meyering <meyering@na-net.ornl.gov>
|
||||
|
||||
* src/cp-aux.c (usage): Factor out backup-related text into
|
||||
separate string/printf statement so translators deal with only
|
||||
one corresponding string in .pot file.
|
||||
* src/install.c (usage): Likewise.
|
||||
* src/ln.c (usage): Likewise.
|
||||
* src/mv.c (usage): Likewise.
|
||||
Suggestion from Santiago Vila Doncel.
|
||||
|
||||
* configure.in (AC_REPLACE_FUNCS): Add group_member.
|
||||
(AC_LINK_FILES): Create link lib/group_member.c to lib/group-member.c.
|
||||
* lib/Makefile.am (fu_SOURCES): Remove group-member.c.
|
||||
(EXTRA_DIST): Add group-member.c here.
|
||||
|
||||
Fri Jul 5 22:16:13 1996 Jim Meyering <meyering@na-net.ornl.gov>
|
||||
|
||||
* src/dircolors.c [!STDC_HEADERS]: Declare free.
|
||||
From Marcus Daniels.
|
||||
|
||||
Thu Jul 4 12:34:50 1996 Jim Meyering <meyering@na-net.ornl.gov>
|
||||
|
||||
* src/dd.c (usage): Remove space before newline in usage message.
|
||||
* src/mknod.c (usage): Likewise.
|
||||
* src/mv.c (usage): Likewise.
|
||||
|
||||
* src/Makefile.am (libexec_PROGRAMS): Regenerate using patched
|
||||
automake-1.0 to work around rm -f bug on Solaris2.4.
|
||||
Reported by Kaveh Ghazi.
|
||||
|
||||
* src/ls.c: Make `dir --version' and `vdir --version' print their
|
||||
names, not `ls'.
|
||||
Reported by Ulrich Drepper.
|
||||
|
||||
Wed Jul 3 17:41:15 1996 Jim Meyering <meyering@na-net.ornl.gov>
|
||||
|
||||
* src/dircolors.c: Include sys/types.h before system.h.
|
||||
From Jim Blandy (jimb@cyclic.com).
|
||||
|
||||
* src/chgrp.c [!MAXUID]: Define after inclusion of system.h to avoid
|
||||
warning about redefinition on SunOS4, Solaris2.4 and SGI-irix5.3.
|
||||
From Kaveh Ghazi. Also, Santiago Vila Doncel reported that defining
|
||||
MAXUID before including system.h caused a compilation failure on some
|
||||
ConvexOS system.
|
||||
|
||||
Tue Jul 2 22:56:03 1996 Jim Meyering <meyering@na-net.ornl.gov>
|
||||
|
||||
* configure.in (VERSION): Bump to 3.12q.
|
||||
|
||||
* src/system.h [!EXIT_SUCCESS]: Define it.
|
||||
[!EXIT_FAILURE]: Define it.
|
||||
|
||||
* lib/strndup.c (strndup): Include stdio.h and sys/types.h to
|
||||
get definition of NULL and size_t on SunOS4.1.3.
|
||||
|
||||
Mon Jul 1 23:47:29 1996 Jim Meyering <meyering@na-net.ornl.gov>
|
||||
|
||||
* src/ln.c (do_link): Update messages to ease translation.
|
||||
Suggestion from Santiago Vila.
|
||||
|
||||
Sun Jun 30 16:41:45 1996 Jim Meyering <meyering@na-net.ornl.gov>
|
||||
|
||||
* src/install.c (usage): Fix typo, 3nd->3rd, in usage message.
|
||||
From Santiago Vila Doncel.
|
||||
|
||||
Sat Jun 29 00:33:31 1996 Jim Meyering <meyering@na-net.ornl.gov>
|
||||
|
||||
* configure.in (PACKAGE_VERSION): Add `GNU ' prefix so we see
|
||||
it in the output of --version. Reported by RMS.
|
||||
|
||||
* src/Makefile.am (BUILT_SOURCES): Guard dependency on dircolors.h
|
||||
with @MAINT@ so it won't be removed with a casual disctlean.
|
||||
(EXTRA_DIST): Add dcgen.pl and dircolors.hin.
|
||||
|
||||
Fri Jun 28 22:56:00 1996 Jim Meyering <meyering@na-net.ornl.gov>
|
||||
|
||||
* src/dircolors.c (dc_parse_stream): Move `enum states' dcl into
|
||||
this function.
|
||||
|
||||
* src/ln.c (do_link): Allow `ln -sf --backup k k' to succeed in
|
||||
creating the self-referential symlink, since doing so doesn't
|
||||
remove the source but merely renames it.
|
||||
|
||||
Wed Jun 26 06:58:58 1996 Jim Meyering <meyering@na-net.ornl.gov>
|
||||
|
||||
* ln.c (same_name): New function.
|
||||
(do_link): Use it to test reliably whether A and B (from
|
||||
ln --force A B) are hard links to the same file.
|
||||
From Andreas Schwab.
|
||||
|
||||
Tue Jun 25 00:03:43 1996 Jim Meyering <meyering@na-net.ornl.gov>
|
||||
|
||||
* lib/getline.c: New file.
|
||||
* lib/getline.h: New file.
|
||||
* lib/Makefile.am (fu_SOURCES): Add getline.c.
|
||||
(noinst_HEADERS): Add getline.h.
|
||||
|
||||
Mon Jun 24 22:39:02 1996 Jim Meyering <meyering@na-net.ornl.gov>
|
||||
|
||||
* configure.in (AC_REPLACE_FUNCS): Add strndup.
|
||||
(AC_PATH_PROG): Check for perl.
|
||||
|
||||
* ls.c (decode_switches): Allow 0 as argument to --tabsize (-T) option.
|
||||
Interpret as a directive to use no TAB characters to separate columns.
|
||||
(indent): Handle TABSIZE == 0.
|
||||
|
||||
* dircolors.c (dc_parse_stream): Remove spurious newline in
|
||||
error message.
|
||||
(dc_parse_stream): Give `unrecognized keyword' diagnostic for
|
||||
misspelled `TERM' keyword as well as for others.
|
||||
|
||||
Sun Jun 23 12:58:32 1996 Jim Meyering <meyering@na-net.ornl.gov>
|
||||
|
||||
* dircolors.hin: New file.
|
||||
* dcgen.pl: New file.
|
||||
* src/Makefile.am (dircolors.h): Add a rule to create this file.
|
||||
(dcgen): Likewise.
|
||||
|
||||
* dircolors.c (parse_line): Rewrite to avoid modifying LINE.
|
||||
Put LINE first in parameter list.
|
||||
Adjust caller.
|
||||
(dc_parse_stream): Free KEYWD and ARG.
|
||||
(main): Give diagnostic for unreasonable combinations of
|
||||
options/arguments.
|
||||
|
||||
* lib/Makefile.am (EXTRA_DIST): Add strndup.c.
|
||||
* configure.in (AC_REPLACE_FUNCS): Add strndup.
|
||||
* strndup.c: New file. From id-utils-3.0k.
|
||||
(strndup): Deansify.
|
||||
[!STDC_HEADERS]: Include string.h and stdlib.h.
|
||||
|
||||
Sat Jun 22 16:57:53 1996 Jim Meyering <meyering@na-net.ornl.gov>
|
||||
|
||||
* dircolors.c: Major overhaul. No longer read from /etc/DIR_COLORS
|
||||
or from ~/.dircolors. Defaults are now compiled in. If you specify
|
||||
a file on the command line, it is used instead of the compiled-in
|
||||
defaults.
|
||||
(main): New option --print-database (-p).
|
||||
Detect write failure.
|
||||
Add --bourne-shell and --c-shell aliases for --sh and --csh resp.
|
||||
|
||||
Tue Jun 18 20:54:05 1996 Jim Meyering <meyering@na-net.ornl.gov>
|
||||
|
||||
* cp.c (copy_reg): Cast both sides of comparison to size_t
|
||||
to avoid a warning about `comparison between signed and unsigned'
|
||||
from gcc -Wall.
|
||||
Declare pointer parameters const as appropriate.
|
||||
|
||||
* ln.c (do_link): Refine last change so we don't disallow commands
|
||||
like `ln --force A B' when A and B are hard links to the same file.
|
||||
See comments in the source. Reported by Erik Naggum <erik@naggum.no>
|
||||
and Andreas Schwab.
|
||||
|
||||
* ls.c (decode_switches): Correct typo in error messages:
|
||||
enironment -> environment. From Santiago Vila Doncel
|
||||
<sanvila@unex.es>.
|
||||
|
||||
* aclocal.m4: Update from gettext-0.10.20.
|
||||
* ABOUT-NLS: Likewise.
|
||||
* intl/*: Likewise.
|
||||
|
||||
* cp.c (do_copy): Change message from `missing file argument' to
|
||||
more precise `missing destination file'. From Karl Berry.
|
||||
|
||||
* ln.c (STREQ): Remove macro definition
|
||||
* system.h (STREQ): Add it here instead.
|
||||
* cp.c (do_copy): Use STREQ here instead of strcmp(...) == 0.
|
||||
* ls.c (parse_ls_color): Likewise.
|
||||
* df.c (selected_fstype, excluded_fstype, show_disk, main): Likewise.
|
||||
|
||||
* cp.c (do_copy): When the force and backup options have been
|
||||
specified and the source and destination are the same name for an
|
||||
existing, regular file, convert the user's command, e.g.
|
||||
`cp --force --backup foo foo' to `cp --force foo fooSUFFIX'
|
||||
where SUFFIX is determined by any version control options used.
|
||||
(usage): Update --help message.
|
||||
At urging of (most recently) Karl Berry.
|
||||
|
||||
Sun Jun 16 13:40:22 1996 Jim Meyering <meyering@na-net.ornl.gov>
|
||||
|
||||
* doc/Makefile.am (EXTRA_DIST): Add texinfo.tex.
|
||||
|
||||
* Makefile.am (cvs-dist): Use -c option in cvs tag command.
|
||||
|
||||
Sat Jun 15 22:21:09 1996 Jim Meyering <meyering@na-net.ornl.gov>
|
||||
|
||||
* configure.in (ALL_LINGUAS): Add pt.
|
||||
(AC_REPLACE_FUNCS): Add basename.
|
||||
|
||||
* Makefile.am (EXTRA_DIST): Add basename.c.
|
||||
(fu_SOURCES): Remove basename.c.
|
||||
|
||||
Thu Jun 6 21:57:08 1996 Jim Meyering <meyering@na-net.ornl.gov>
|
||||
|
||||
* po/Makefile.in.in: Update from gettext-0.10.16.
|
||||
* intl/*: Likewise.
|
||||
* ABOUT-NLS: Likewise.
|
||||
* aclocal.m4 (AC_REPLACE_GNU_GETOPT): Move definition to precede
|
||||
gettext-related ones.
|
||||
Update from gettext-0.10.16.
|
||||
|
||||
Sat Jun 1 12:44:51 1996 Jim Meyering <meyering@na-net.ornl.gov>
|
||||
|
||||
* ls.c: Rename options and internal variables to reflect change to
|
||||
--color=WHEN where WHEN is never, always, or auto (for consistency
|
||||
with e.g. cp --sparse=WHEN. For at least a while, the original
|
||||
slackware-supported arguments `none', `force', `yes', etc will be
|
||||
supported but deprecated by lack of documentation.
|
||||
(decode_switches): Use STDOUT_FILENO instead of `1' in isatty test.
|
||||
(usage): Update/add description of the --color option.
|
||||
|
||||
* ls.c: Declare pointer parameters const as appropriate.
|
||||
|
||||
Tue May 28 18:39:49 1996 Jim Meyering <meyering@na-net.ornl.gov>
|
||||
|
||||
* dd.c (print_stats): Don't mark "%u %s" as a translatable string.
|
||||
* mv.c (main): Don't mark "%s" as a translatable string.
|
||||
From Göran Uddeborg.
|
||||
|
||||
Thu May 23 07:50:38 1996 Jim Meyering <meyering@na-net.ornl.gov>
|
||||
|
||||
* ls.c (usage): Make --literal (-N) description clearer.
|
||||
|
||||
* acconfig.h (MOUNTED_LISTMNTENT): Add it.
|
||||
* fsusage [_CRAY]: Don't include sys/filsys.h because although
|
||||
Unicos-9 has it, it's not needed and would cause other problems
|
||||
because it requires inclusion of other, non-standard headers.
|
||||
* mountlist.c (read_filesystem_list) [MOUNTED_LISTMNTENT]: New
|
||||
function.
|
||||
From Johan Danielsson (joda@pdc.kth.se).
|
||||
|
||||
* configure.in (AC_CHECK_FUNCS): Add listmntent for Unicos-9.
|
||||
Define MOUNTED_LISTMNTENT #ifdef _CRAY and HAVE_GETMNTENT.
|
||||
With an initial patch from Johan Danielsson.
|
||||
|
||||
Wed May 22 18:58:01 1996 Jim Meyering <meyering@na-net.ornl.gov>
|
||||
|
||||
* configure.in (LINGUAS): Add sv.
|
||||
|
||||
Tue May 21 07:06:30 1996 Jim Meyering <meyering@na-net.ornl.gov>
|
||||
|
||||
* lib/euidaccess.c (euidaccess) [!S_IROTH]: Define.
|
||||
[!S_IWOTH]: Define.
|
||||
[!S_IXOTH]: Define.
|
||||
Marcus Daniels <marcus@sysc.pdx.edu> reported that m68k NEXTSTEP 3.2
|
||||
doesn't define S_IROTH or S_IWOTH unless some posix compile option
|
||||
is used and associated symbols defined.
|
||||
|
||||
Sun May 19 09:32:51 1996 Jim Meyering (meyering@na-net.ornl.gov)
|
||||
|
||||
* chown.c: New option: --no-dereference (-h). Solaris 5.4's chown
|
||||
provides -h.
|
||||
(change_file_owner): Use lchown if --no-dereference (-h) was given.
|
||||
(usage): Update.
|
||||
(main): Fail if user requests --no-dereference on a system that
|
||||
doesn't have support for it.
|
||||
|
||||
* chgrp.c: New option: --no-dereference (-h).
|
||||
[!MAXUID]: Define to INT_MAX.
|
||||
(change_file_group): Use lchown if --no-dereference (-h) was given.
|
||||
(usage): Update.
|
||||
(main): Fail if user requests --no-dereference on a system that
|
||||
doesn't have support for it.
|
||||
|
||||
Wed May 15 22:54:31 1996 Jim Meyering (meyering@na-net.ornl.gov)
|
||||
|
||||
* fsusage.c (get_fs_usage): Declare parameter PATH to be const.
|
||||
* fsusage.h: Update prototype to match.
|
||||
|
||||
* chmod.c (describe_change): Declare pointer parameters to be const.
|
||||
(change_file_mode): Likewise.
|
||||
(change_dir_mode): Likewise.
|
||||
|
||||
* ln.c (do_link): Declare pointer parameters to be const.
|
||||
|
||||
* df.c (main): Fail with a diagnostic if both --human-readable and
|
||||
--portability are used.
|
||||
Likewise if --megabytes and --portability are used.
|
||||
Rearrange function definitions to precede respective uses to obviate
|
||||
all forward dcls. Remove forward dcls.
|
||||
Declare parameters const as appropriate.
|
||||
|
||||
* modechange.c (mode_compile): Declare parameter MODE_STRING const.
|
||||
Remove register attribute.
|
||||
(mode_adjust): Likewise for CHANGES.
|
||||
* modechange.h: Reflect above changes in prototypes.
|
||||
|
||||
* lib/Makefile.am (getdate.c): Disable dependencies that can
|
||||
require rerunning YACC when not in maintainer mode.
|
||||
(posixtm.c): Likewise.
|
||||
|
||||
Tue May 14 23:36:54 1996 Jim Meyering (meyering@na-net.ornl.gov)
|
||||
|
||||
* dd.c (print_stats): Restructure pluralization of error message
|
||||
so it's easier to translate. Reported by Göran Uddeborg
|
||||
<gvran@uddeborg.pp.se>.
|
||||
* mv.c (main): Likewise.
|
||||
|
||||
Tue May 7 22:10:20 1996 Jim Meyering (meyering@na-net.ornl.gov)
|
||||
|
||||
* configure.in: Require autoconf-2.10.
|
||||
|
||||
* aclocal.m4 (jm_MAINTAINER_MODE): New macro.
|
||||
* configure.in (jm_MAINTAINER_MODE): Use it.
|
||||
|
||||
Sun May 5 20:27:47 1996 Jim Meyering (meyering@na-net.ornl.gov)
|
||||
|
||||
* src/Makefile.am (bin_PROGRAMS): Add dircolors.
|
||||
(DEFS): Add -DSHAREDIR=\"$(datadir)\".
|
||||
(GNUVER): Remove definition of unused variable.
|
||||
|
||||
Sat May 4 20:54:32 1996 Jim Meyering (meyering@na-net.ornl.gov)
|
||||
|
||||
* system.h [IN_CTYPE_DOMAIN]: Rename from ISASCII.
|
||||
* backupfile.c [IN_CTYPE_DOMAIN]: Rename from ISASCII.
|
||||
|
||||
* dircolors.c: Make enumerated constants upper case.
|
||||
(main): Don't use ANSI-style string concatenation.
|
||||
Add `static' and/or `const' to some file scope variables.
|
||||
|
||||
Wed May 1 00:20:00 1996 Jim Meyering (meyering@na-net.ornl.gov)
|
||||
|
||||
* lib/Makefile.am (EXTRA_DIST): Add strcasecmp.c.
|
||||
* configure.in (AC_REPLACE_FUNCS): Add strcasecmp.
|
||||
|
||||
* ls.c (parse_ls_color, usage): Remove support for alternate spellings:
|
||||
--colours and LS_COLOURS.
|
||||
(parse_ls_color): Reverse sense of test for LS_COLORS environment
|
||||
variable and return -- save a level of indentation on a 100+-line
|
||||
block.
|
||||
|
||||
Mon Apr 29 22:07:41 1996 Jim Meyering (meyering@na-net.ornl.gov)
|
||||
|
||||
* POTFILES.in: Add chgrp.c. From François Pinard.
|
||||
Add dircolors.c.
|
||||
* dircolors.c: New file. Written by H. Peter Anvin.
|
||||
|
||||
Sun Apr 28 16:32:38 1996 Jim Meyering (meyering@na-net.ornl.gov)
|
||||
|
||||
* ls.c: Apply color ls changes by Peter Anvin <Peter.Anvin@linux.org>
|
||||
and Dennis Flaherty <dennisf@denix.elk.miles.com> based on original
|
||||
patches by Greg Lee <lee@uhunix.uhcc.hawaii.edu>. And on top of all
|
||||
that, a few changes from Ulrich Drepper.
|
||||
|
||||
* ls.c (parse_ls_color): Use strcpy to initialize 3-character array.
|
||||
Automatic aggregate initialization isn't portable.
|
||||
Remove all ^L's.
|
||||
(get_funky_string): Declare static and move to precede single
|
||||
caller: parse_ls_color.
|
||||
Make some globals `static' and/or `const'.
|
||||
(LEN_STR_PAIR): New macro.
|
||||
(color_indicator): Use it in this declaration.
|
||||
(parse_ls_color): Use error, not fprintf.
|
||||
(decode_switches): Add a comment.
|
||||
(print_name_with_quoting): Add braces around inner if-else
|
||||
statement to clarify.
|
||||
|
||||
* configure.in: Add a comment that fp_C_PROTOTYPES must precede
|
||||
AC_C_INLINE. Otherwise, some systems lose because the value
|
||||
AC_C_INLINE choses with plain `cc' is different from that chosen
|
||||
when using the ANSI-mode C compiler. From Kaveh Ghazi.
|
||||
|
||||
* fileblocks.c [HAVE_ST_BLOCKS || _POSIX_VERSION]: Add extern dcl
|
||||
of unused variable so that after preprocessing, the file will never
|
||||
be empty. Otherwise, some compilers in ANSI mode (among them, the
|
||||
Dec Alpha OSF 2.0 C compiler) reject empty files. From Kaveh Ghazi.
|
||||
Indent CPP conditionals.
|
||||
|
||||
Fri Apr 26 05:52:03 1996 Karl Eichwalder <ke@ke.Central.DE>
|
||||
|
||||
* ls.c (usage): Add newline at end of printf format string.
|
||||
|
||||
Wed Apr 24 21:33:43 1996 Jim Meyering (meyering@na-net.ornl.gov)
|
||||
|
||||
* ln.c (do_link): Remove duplicate `if (lstat(...' block.
|
||||
|
||||
* ln.c (do_link): With --force, don't remove DEST when it's
|
||||
the same as SOURCE. Before, `ln -f FILE FILE' would remove FILE.
|
||||
Reported by Bruno Haible.
|
||||
Reported by Bruno Haible (haible@ilog.fr).
|
||||
|
||||
* mkdir.c (main): Use verbose_fmt_string, not string literal in
|
||||
call to make_path for --parents. Reported by Ulrich Drepper.
|
||||
@@ -22,11 +456,11 @@ Tue Apr 23 22:05:35 1996 Jim Meyering (meyering@na-net.ornl.gov)
|
||||
* lib/Makefile.am (fu_SOURCES): Remove getopt.c and getopt1.c.
|
||||
(EXTRA_DIST): Add getopt.c and getopt1.c
|
||||
|
||||
* configure.in (AC_CHECK_FUNCS): Add lchown.
|
||||
* chgrp.c [HAVE_LCHOWN]: Define chown to lchown.
|
||||
* chown.c [HAVE_LCHOWN]: Likewise.
|
||||
* cp.c [HAVE_LCHOWN]: Likewise.
|
||||
* mv.c [HAVE_LCHOWN]: Likewise.
|
||||
* configure.in (AC_CHECK_FUNCS): Add lchown.
|
||||
* chgrp.c [HAVE_LCHOWN]: Define chown to lchown.
|
||||
* chown.c [HAVE_LCHOWN]: Likewise.
|
||||
* cp.c [HAVE_LCHOWN]: Likewise.
|
||||
* mv.c [HAVE_LCHOWN]: Likewise.
|
||||
Suggested by François Pinard.
|
||||
|
||||
* backupfile.c (find_backup_file_name, max_backup_version,
|
||||
@@ -161,13 +595,13 @@ Sun Mar 10 22:36:11 1996 Jim Meyering (meyering@na-net.ornl.gov)
|
||||
Link an nls file.
|
||||
(AC_OUTPUT): Reflect addition of two new directories, intl and po.
|
||||
Create po/Makefile.
|
||||
From François Pinard.
|
||||
From François Pinard.
|
||||
|
||||
Thu Mar 7 20:26:07 1996 Jim Meyering (meyering@na-net.ornl.gov)
|
||||
|
||||
* df.c (main): Tell read_filesystem_list that it should determine
|
||||
file system type when the user specifies --print-type or -T.
|
||||
From Michael Rendell <michael@cs.mun.ca>.
|
||||
From Michael Rendell <michael@cs.mun.ca>.
|
||||
|
||||
Tue Feb 27 23:13:46 1996 Jim Meyering (meyering@na-net.ornl.gov)
|
||||
|
||||
@@ -196,7 +630,7 @@ Thu Feb 15 23:08:41 1996 Jim Meyering (meyering@na-net.ornl.gov)
|
||||
destroy the source file. Before, running the commands
|
||||
cd /tmp; rm -f a a~; : > a; echo A > a~; cp -b -V simple a~ a
|
||||
would leave two zero-length files: a and a~.
|
||||
Reported by Martin C. Martin <mcm@cs.cmu.edu>.
|
||||
Reported by Martin C. Martin <mcm@cs.cmu.edu>.
|
||||
|
||||
Mon Feb 12 23:23:25 1996 Jim Meyering (meyering@na-net.ornl.gov)
|
||||
|
||||
@@ -397,7 +831,7 @@ Sun Oct 29 06:06:13 1995 Jim Meyering (meyering@comco.com)
|
||||
|
||||
* touch.c: Change long option name `--file' to `--reference'.
|
||||
Leave --file as an alias, for now. It will be removed later.
|
||||
(usage): Reflect option name change. From Franc,ois Pinard.
|
||||
(usage): Reflect option name change. From Franc,ois Pinard.
|
||||
|
||||
Wed Oct 18 23:09:55 1995 Jim Meyering (meyering@comco.com)
|
||||
|
||||
@@ -467,8 +901,8 @@ Sun Oct 1 13:22:36 1995 Jim Meyering (meyering@comco.com)
|
||||
Tue Sep 26 23:05:01 1995 Jim Meyering (meyering@comco.com)
|
||||
|
||||
* man/Makefile.in (install-data, uninstall): Use sed not basename.
|
||||
The GNU Coding Standard suggests that only a select set of
|
||||
relatively standard utilities be used in Makefiles. basename is
|
||||
The GNU Coding Standard suggests that only a select set of
|
||||
relatively standard utilities be used in Makefiles. basename is
|
||||
not among them. Suggested by Ulrich Drepper.
|
||||
|
||||
Mon Sep 25 23:12:37 1995 Jim Meyering <meyering@gremlin.comco.com>
|
||||
@@ -490,7 +924,7 @@ Mon Aug 7 23:27:54 1995 Jim Meyering (meyering@comco.com)
|
||||
Fri Aug 4 22:11:06 1995 Jim Meyering (meyering@comco.com)
|
||||
|
||||
* install.c (isnumber): Rename to is_number to avoid conflict with
|
||||
FreeBSD 2.0.5 macro definition. Reported by David O'Brien
|
||||
FreeBSD 2.0.5 macro definition. Reported by David O'Brien
|
||||
(obrien@sea.legent.com).
|
||||
|
||||
* lib/save-cwd.c: New file.
|
||||
@@ -649,9 +1083,9 @@ Mon Feb 20 22:54:39 1995 Jim Meyering (meyering@comco.com)
|
||||
|
||||
Sat Feb 11 07:52:01 1995 Jim Meyering (meyering@comco.com)
|
||||
|
||||
* configure.in (AC_REPLACE_FUNCS): Add memcmp, memcpy, and memset.
|
||||
(AC_CHECK_FUNCS): Add strchr and strrchr.
|
||||
* lib/Makefile.in (SOURCES): Add memcmp.c, memcpy.c, and memset.c.
|
||||
* configure.in (AC_REPLACE_FUNCS): Add memcmp, memcpy, and memset.
|
||||
(AC_CHECK_FUNCS): Add strchr and strrchr.
|
||||
* lib/Makefile.in (SOURCES): Add memcmp.c, memcpy.c, and memset.c.
|
||||
|
||||
* system.h: Remove index/rindex and bcmp/bcopy/bzero references.
|
||||
Separate errno declaration from STDC_HEADERS.
|
||||
@@ -662,7 +1096,7 @@ Sat Feb 11 07:52:01 1995 Jim Meyering (meyering@comco.com)
|
||||
* fsusage.c (get_fs_usage, statfs): Use safe_read, and safe_stat
|
||||
rather than bare read and stat. From Bruno Haible.
|
||||
|
||||
* lib/Makefile.in (DISTFILES): Add error.h.
|
||||
* lib/Makefile.in (DISTFILES): Add error.h.
|
||||
|
||||
* chgrp.c, chmod.c, chown.c, cp-hash.c, cp.c, df.c, du.c, install.c,
|
||||
ln.c, ls.c, mv.c, mvdir.c, rm.c, touch.c: Rename SAFE_STAT and
|
||||
@@ -712,16 +1146,16 @@ Sun Dec 4 14:53:12 1994 Jim Meyering (meyering@comco.com)
|
||||
|
||||
Fri Nov 11 11:15:20 1994 Jim Meyering (meyering@comco.com)
|
||||
|
||||
* mknod.c (my_strtol): New function.
|
||||
(main): Use it instead of atoi to convert argument strings to
|
||||
major and minor device numbers. Now, mknod diagnoses invalid
|
||||
device numbers and accepts octal and hexadecimal as well as
|
||||
decimal string arguments. Ralf Lammers
|
||||
<rlammers@physik.uni-osnabrueck.de> suggested that mknod accept
|
||||
hex device numbers for compatibility with HPUX's mknod program.
|
||||
* mknod.c (my_strtol): New function.
|
||||
(main): Use it instead of atoi to convert argument strings to
|
||||
major and minor device numbers. Now, mknod diagnoses invalid
|
||||
device numbers and accepts octal and hexadecimal as well as
|
||||
decimal string arguments. Ralf Lammers
|
||||
<rlammers@physik.uni-osnabrueck.de> suggested that mknod accept
|
||||
hex device numbers for compatibility with HPUX's mknod program.
|
||||
|
||||
* configure.in (AC_REPLACE_FUNCS): Add strtol.
|
||||
* lib/Makefile.in (SOURCES): Add strtol.c.
|
||||
* configure.in (AC_REPLACE_FUNCS): Add strtol.
|
||||
* lib/Makefile.in (SOURCES): Add strtol.c.
|
||||
|
||||
Sun Nov 06 00:18:56 1994 Jim Meyering (meyering@comco.com)
|
||||
|
||||
|
||||
@@ -1,15 +1,25 @@
|
||||
Changes in release 3.13:
|
||||
* ls properly determines window size on SunOS and Solaris systems
|
||||
* ls accepts new option --color[=WHEN] where WHEN is `always', `never',
|
||||
or `auto'. --color=never is the default. --color is equivalent
|
||||
to --color=always.
|
||||
* new program: dircolors
|
||||
* ls allows 0 as argument to --tabsize (-T) option. Using --tabsize=0
|
||||
inhibits the use of TAB characters for separating columns.
|
||||
* you can create a backup of FILE with cp --force --backup FILE FILE. Before,
|
||||
that command failed saying that ``FILE' and `FILE' are the same file'.
|
||||
* uses automake-generated Makefile templates
|
||||
* chown and chgrp accept new option --no-dereference (-h)
|
||||
* ln -f FILE FILE fails with a diagnostic rather than silently removing FILE
|
||||
* when building on systems that have getopt_long (like Linux), the system-
|
||||
provided function will be used -- so executables may be a little smaller
|
||||
* chgrp, chown, cp -p, and mv all modify owner and/or group on systems
|
||||
* cp -p, and mv modify owner and/or group of symlinks on systems
|
||||
(like Solaris) that provide the lchown system call.
|
||||
* df no longer invokes the sync system call by default. You can use the
|
||||
--sync option to make df invoke sync before getting file system sizes.
|
||||
* internationalized diagnostic messages
|
||||
* mkdir accepts new option: --verbose
|
||||
* cp has been fixed so that the full file name it uses for the destination
|
||||
in `cp file D/' is `D/file', not `D//file'.
|
||||
* `cp file D/' uses the full file name `D/file' instead of `D//file'.
|
||||
* cp --backup a~ a fails instead of silently destroying the source file
|
||||
* df and du have new options --human-readable (-h) and --megabytes (-m).
|
||||
* install now honors --backup (-b), --suffix=SUFFIX (-S SUFFIX), and
|
||||
@@ -35,6 +45,7 @@ Changes in release 3.13:
|
||||
* du works on SunOS 4 systems even when accounting is enabled
|
||||
* many programs that convert strings to integers now use strtol or strtoul
|
||||
and detect overflow
|
||||
|
||||
User-visible changes in release 3.12:
|
||||
* None.
|
||||
User-visible changes in release 3.11:
|
||||
|
||||
@@ -1,3 +1,126 @@
|
||||
Wed Jul 10 22:57:29 1996 Jim Meyering <meyering@na-net.ornl.gov>
|
||||
|
||||
* aclocal.m4 (fp_PROG_CC_STDC): Include sys/stat.h in test program
|
||||
so that DYNIX/ptx V4.1.3 doesn't use `-Xc -D__EXTENSIONS__' -- with
|
||||
those options on that system, sys/stat.h gets compile errors.
|
||||
With help from Marcus Daniels.
|
||||
|
||||
* getopt.c: Update from gettext-0.10.23.
|
||||
* getopt1.c: Likewise.
|
||||
* getopt.h: Likewise.
|
||||
|
||||
Sun Jul 7 22:40:08 1996 Jim Meyering <meyering@na-net.ornl.gov>
|
||||
|
||||
* aclocal.m4 (AM_SYS_POSIX_TERMIOS): New macro, derived from test
|
||||
in configure.in.
|
||||
(AM_HEADER_TIOCGWINSZ_NEEDS_SYS_IOCTL): Likewise.
|
||||
|
||||
Sat Jul 6 12:47:48 1996 Jim Meyering <meyering@na-net.ornl.gov>
|
||||
|
||||
* configure.in (AC_REPLACE_FUNCS): Add group_member.
|
||||
(AC_LINK_FILES): Create link lib/group_member.c to lib/group-member.c.
|
||||
* lib/Makefile.am (su_SOURCES): Remove group-member.c.
|
||||
(EXTRA_DIST): Add group-member.c here.
|
||||
|
||||
Thu Jul 4 22:40:06 1996 Jim Meyering <meyering@na-net.ornl.gov>
|
||||
|
||||
* src/expr.c (docolon): Remove space before newline in usage message.
|
||||
|
||||
Sat Jun 29 18:58:20 1996 Jim Meyering <meyering@na-net.ornl.gov>
|
||||
|
||||
* configure.in (PACKAGE_VERSION): Add `GNU ' prefix so we see
|
||||
it in the output of --version. Reported by RMS.
|
||||
|
||||
Tue Jun 18 22:14:42 1996 Jim Meyering <meyering@na-net.ornl.gov>
|
||||
|
||||
* aclocal.m4: Update from gettext-0.10.20.
|
||||
* ABOUT-NLS: Likewise.
|
||||
* intl/*: Likewise.
|
||||
|
||||
Sun Jun 16 13:44:36 1996 Jim Meyering <meyering@na-net.ornl.gov>
|
||||
|
||||
* doc/Makefile.am (EXTRA_DIST): Add texinfo.tex.
|
||||
|
||||
Thu Jun 6 21:57:08 1996 Jim Meyering <meyering@na-net.ornl.gov>
|
||||
|
||||
* po/Makefile.in.in: Update from gettext-0.10.16.
|
||||
* intl/*: Likewise.
|
||||
* ABOUT-NLS: Likewise.
|
||||
* aclocal.m4 (AC_REPLACE_GNU_GETOPT): Move definition to precede
|
||||
gettext-related ones.
|
||||
Update from gettext-0.10.16.
|
||||
|
||||
Wed May 29 21:28:53 1996 Jim Meyering <meyering@na-net.ornl.gov>
|
||||
|
||||
* expr.c (docolon): Give a warning when the first character
|
||||
of the basic regular expression is `^'.
|
||||
|
||||
Mon May 20 22:56:06 1996 Jim Meyering (meyering@na-net.ornl.gov)
|
||||
|
||||
* id.c (xgetgroups): New function, factored out of
|
||||
print_group_list and print_full_info.
|
||||
(print_group_list): Call it.
|
||||
(print_full_info): Call it.
|
||||
|
||||
* lib/Makefile.am (getdate.c): Disable dependencies that can
|
||||
require rerunning YACC when not in maintainer mode.
|
||||
(posixtm.c): Likewise.
|
||||
|
||||
Tue May 14 18:47:35 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
|
||||
|
||||
* id.c (print_group_list): When USERNAME is specified use
|
||||
getugroups to get the number of groups.
|
||||
(print_full_info): Likewise.
|
||||
|
||||
Sun May 19 21:45:49 1996 Jim Meyering (meyering@na-net.ornl.gov)
|
||||
|
||||
* seq.c (usage): Make it clearer.
|
||||
|
||||
Sat May 18 13:29:46 1996 Jim Meyering (meyering@na-net.ornl.gov)
|
||||
|
||||
* expr.c (main): Don't recognize --help, --h, --he, --version,
|
||||
--v, etc. if the POSIXLY_CORRECT environment variable is set.
|
||||
* echo.c (main): Likewise.
|
||||
* printf.c (main): Likewise.
|
||||
* test.c (main): Likewise.
|
||||
|
||||
* expr.c (docolon) [RE_SYNTAX_POSIX_BASIC]: Revert change of Mar 1.
|
||||
|
||||
Tue May 7 22:10:20 1996 Jim Meyering (meyering@na-net.ornl.gov)
|
||||
|
||||
* configure.in: Require autoconf-2.10.
|
||||
|
||||
* aclocal.m4 (jm_MAINTAINER_MODE): New macro.
|
||||
* configure.in (jm_MAINTAINER_MODE): Use it.
|
||||
|
||||
Mon May 6 22:40:54 1996 Jim Meyering (meyering@na-net.ornl.gov)
|
||||
|
||||
* lib/strftime.c: Update from GNU libc.
|
||||
|
||||
Sat May 4 20:54:32 1996 Jim Meyering (meyering@na-net.ornl.gov)
|
||||
|
||||
* system.h [IN_CTYPE_DOMAIN]: Rename from ISASCII.
|
||||
* seq.c: Remove useless void casts of *printf return values.
|
||||
|
||||
Mon Apr 29 22:23:40 1996 Jim Meyering (meyering@na-net.ornl.gov)
|
||||
|
||||
* basename.c (usage): Mark translatable strings.
|
||||
* chroot.c (main): Likewise.
|
||||
* basename.c (main): Separate messages about `too few' and `too many'
|
||||
arguments to ease translation.
|
||||
* dirname.c (main): Likewise.
|
||||
* date.c (usage): Change TAB in message to spaces. Doing that seems
|
||||
to have worked around a problem with something in gettext that was
|
||||
producing a truncated usage message for date's usage.
|
||||
From François Pinard.
|
||||
|
||||
Sun Apr 28 17:10:03 1996 Jim Meyering (meyering@na-net.ornl.gov)
|
||||
|
||||
* configure.in: Make fp_C_PROTOTYPES precede AC_C_INLINE.
|
||||
Otherwise, some systems lose because the value AC_C_INLINE choses
|
||||
with plain `cc' is different from that chosen when using the ANSI-mode
|
||||
C compiler. From Kaveh Ghazi.
|
||||
|
||||
Tue Apr 23 22:05:35 1996 Jim Meyering (meyering@na-net.ornl.gov)
|
||||
|
||||
* aclocal.m4 (AC_REPLACE_GNU_GETOPT): New macro.
|
||||
@@ -112,7 +235,7 @@ Sun Apr 7 11:58:13 1996 Jim Meyering (meyering@na-net.ornl.gov)
|
||||
* strftime.c (mon_week_ISO): New function to implement new %V format.
|
||||
(sun_week): Make TM parameter `const'.
|
||||
(mon_week): Likewise.
|
||||
(mon_week): Rewrite to correctly implement %W format..
|
||||
(mon_week): Rewrite to implement %W format correctly.
|
||||
(strftime): Handle %V format.
|
||||
Reported by Arne Juul.
|
||||
|
||||
@@ -256,7 +379,7 @@ Tue Mar 12 17:52:05 1996 Jim Meyering (meyering@na-net.ornl.gov)
|
||||
Link an nls file.
|
||||
(AC_OUTPUT): Reflect addition of two new directories, intl and po.
|
||||
Create po/Makefile.
|
||||
Mostly from François Pinard.
|
||||
Mostly from François Pinard.
|
||||
|
||||
Wed Mar 6 21:40:34 1996 Jim Meyering (meyering@na-net.ornl.gov)
|
||||
|
||||
@@ -267,7 +390,7 @@ Tue Mar 5 22:49:33 1996 Jim Meyering (meyering@na-net.ornl.gov)
|
||||
|
||||
* getdate.y (RelativeMonth): Add 1900 to the year so that relative
|
||||
date specs that push the year through the end of the century work.
|
||||
For example, `date -d "01/01/1998 3 years" +%Y' now prints 2001.
|
||||
For example, `date -d "01/01/1998 3 years" +%Y' now prints 2001.
|
||||
From Peter Dalgaard (pd@kubism.ku.dk).
|
||||
|
||||
Mon Mar 4 23:46:43 1996 Jim Meyering (meyering@na-net.ornl.gov)
|
||||
@@ -278,7 +401,7 @@ Mon Mar 4 23:46:43 1996 Jim Meyering (meyering@na-net.ornl.gov)
|
||||
Fri Mar 1 23:46:32 1996 Jim Meyering (meyering@na-net.ornl.gov)
|
||||
|
||||
* expr.c (docolon): Don't initialize re_syntax_options to
|
||||
deceptively-named RE_SYNTAX_POSIX_BASIC -- it recognizes non-BRE
|
||||
deceptively-named RE_SYNTAX_POSIX_BASIC -- it recognizes non-BRE
|
||||
\?, \+, and \|. Use RE_SYNTAX_POSIX_MINIMAL_BASIC instead.
|
||||
|
||||
* od.c (WINDOWS_SETFILEMODE_BINARY): New macro.
|
||||
@@ -290,9 +413,9 @@ Fri Mar 1 23:46:32 1996 Jim Meyering (meyering@na-net.ornl.gov)
|
||||
|
||||
Wed Feb 28 21:48:07 1996 Paul Eggert <eggert@twinsun.com>
|
||||
|
||||
* configure.in (LOCALTIME_CACHE):
|
||||
Also define if localtime mishandles unsetting TZ.
|
||||
This works around a localtime bug in mips-dec-ultrix.
|
||||
* configure.in (LOCALTIME_CACHE):
|
||||
Also define if localtime mishandles unsetting TZ.
|
||||
This works around a localtime bug in mips-dec-ultrix.
|
||||
|
||||
Wed Feb 28 23:08:24 1996 Jim Meyering (meyering@na-net.ornl.gov)
|
||||
|
||||
@@ -300,7 +423,7 @@ Wed Feb 28 23:08:24 1996 Jim Meyering (meyering@na-net.ornl.gov)
|
||||
(noinst_HEADERS): Add xstrtoul.h.
|
||||
|
||||
* factor.c: General cleanup. Use xstrtoul, not atoi.
|
||||
Change output format. Allow inputs as large as ULONG_MAX.
|
||||
Change output format. Allow inputs as large as ULONG_MAX.
|
||||
Allow more than one command line argument.
|
||||
|
||||
* stty.c (wrapf) [!__STDC__]: Indent by one space the first line
|
||||
@@ -316,9 +439,9 @@ Sun Feb 25 22:19:52 1996 Jim Meyering (meyering@na-net.ornl.gov)
|
||||
* src/Makefile.am (BUILT_SOURCES): Set to `who.c users.c'.
|
||||
(MOSTLYCLEANFILES): Add who.c and users.c.
|
||||
(who.c): New rule to create this file. Concatenate definition of
|
||||
WHO and contents of who-users.c.
|
||||
WHO and contents of who-users.c.
|
||||
(users.c): New rule to create this file. Concatenate definition of
|
||||
USERS and contents of who-users.c.
|
||||
USERS and contents of who-users.c.
|
||||
|
||||
Sat Feb 24 12:20:58 1996 Jim Meyering (meyering@na-net.ornl.gov)
|
||||
|
||||
@@ -336,7 +459,7 @@ Sat Feb 24 12:20:58 1996 Jim Meyering (meyering@na-net.ornl.gov)
|
||||
not int.
|
||||
|
||||
* expr.c (docolon): Set re_syntax_options to RE_SYNTAX_POSIX_BASIC
|
||||
so expr's pattern matching uses BASIC (not GNU-extended) REs.
|
||||
so expr's pattern matching uses BASIC (not GNU-extended) REs.
|
||||
Reported by Jim Kingdon.
|
||||
|
||||
* who-users.c (print_entry): Use strchr, not index.
|
||||
@@ -508,7 +631,7 @@ Sat Oct 28 00:49:13 1995 Jim Meyering (meyering@comco.com)
|
||||
|
||||
* date.c: New option --reference=FILE (-r FILE) analogous to the
|
||||
like-named touch option.
|
||||
(main): Recognize it and give diagnostic for misuse.
|
||||
(main): Recognize it and give diagnostic for misuse.
|
||||
(usage): Describe briefly.
|
||||
From Franc,ois Pinard.
|
||||
|
||||
@@ -518,8 +641,8 @@ Sat Oct 28 00:49:13 1995 Jim Meyering (meyering@comco.com)
|
||||
Tue Sep 26 23:05:01 1995 Jim Meyering (meyering@comco.com)
|
||||
|
||||
* man/Makefile.in (install-data, uninstall): Use sed not basename.
|
||||
The GNU Coding Standard suggests that only a select set of
|
||||
relatively standard utilities be used in Makefiles. basename is
|
||||
The GNU Coding Standard suggests that only a select set of
|
||||
relatively standard utilities be used in Makefiles. basename is
|
||||
not among them. Suggested by Ulrich Drepper.
|
||||
|
||||
Tue Aug 8 22:57:34 1995 Jim Meyering (meyering@comco.com)
|
||||
@@ -615,9 +738,9 @@ Sat Feb 11 08:27:12 1995 Jim Meyering (meyering@comco.com)
|
||||
(SOURCES, OBJECTS, PROGS): Add seq.
|
||||
* Makefile.in (PROGS): Add seq.
|
||||
|
||||
* configure.in (AC_REPLACE_FUNCS): Add memcmp, memcpy, and memset.
|
||||
(AC_CHECK_FUNCS): Add strchr and strrchr.
|
||||
* lib/Makefile.in (SOURCES): Add memcmp.c, memcpy.c, and memset.c.
|
||||
* configure.in (AC_REPLACE_FUNCS): Add memcmp, memcpy, and memset.
|
||||
(AC_CHECK_FUNCS): Add strchr and strrchr.
|
||||
* lib/Makefile.in (SOURCES): Add memcmp.c, memcpy.c, and memset.c.
|
||||
|
||||
* system.h: Remove index/rindex and bcmp/bcopy/bzero references.
|
||||
Separate errno declaration from STDC_HEADERS.
|
||||
|
||||
@@ -1,11 +1,14 @@
|
||||
Changes in release 1.13
|
||||
* when matching, expr warns about non-portability when the first character
|
||||
of the basic regular expression is `^'
|
||||
* `id user' no longer prints bogus group list
|
||||
* uses automake-generated Makefile templates
|
||||
* date accepts new %V format
|
||||
* date's %U and %W formats work properly
|
||||
* nice option handling works with 2-digit old-style-option adjustments.
|
||||
Now, `nice -18 -- nice' prints `18'. Before it printed `8'.
|
||||
* internationalized diagnostic messages
|
||||
* `date -d "01/01/1998 3 years" +%Y' now works properly. It prints 2001.
|
||||
* expr's match operator has been corrected to use basic regular expressions
|
||||
* New programs: chroot, factor, seq, uptime.
|
||||
* date accepts new option: --rfc-822 (-R)
|
||||
* date accepts new format, %z, for RFC-822 style numeric timezone (-0500)
|
||||
|
||||
@@ -1,3 +1,270 @@
|
||||
Thu Jul 11 22:04:36 1996 Jim Meyering <meyering@na-net.ornl.gov>
|
||||
|
||||
* Version 1.19.
|
||||
|
||||
* configure.in (VERSION): Bump to 1.19.
|
||||
|
||||
Wed Jul 10 22:57:29 1996 Jim Meyering <meyering@na-net.ornl.gov>
|
||||
|
||||
* aclocal.m4 (fp_PROG_CC_STDC): Include sys/stat.h in test program
|
||||
so that DYNIX/ptx V4.1.3 doesn't use `-Xc -D__EXTENSIONS__' -- with
|
||||
those options on that system, sys/stat.h gets compile errors.
|
||||
With help from Marcus Daniels.
|
||||
|
||||
* getopt.c: Update from gettext-0.10.23.
|
||||
* getopt1.c: Likewise.
|
||||
* getopt.h: Likewise.
|
||||
|
||||
Tue Jul 9 18:07:23 1996 Jim Meyering <meyering@na-net.ornl.gov>
|
||||
|
||||
* src/fmt.c (MAXCOST): Use `(unsigned long)1' rather than `(COST)1'
|
||||
so the left operand of the << isn't signed.
|
||||
From Kjetil Torgrim Homme.
|
||||
|
||||
* po/Makefile.in.in (install-data): Don't install NLS files when
|
||||
they're not requested. From Ulrich Drepper. Reported by
|
||||
Kjetil Torgrim Homme <kjetilho@ifi.uio.no>.
|
||||
|
||||
Fri Jul 5 21:55:58 1996 Jim Meyering <meyering@na-net.ornl.gov>
|
||||
|
||||
* po/Makefile.in.in ($(PACKAGE).pot): Merge from gettext-0.10.23.
|
||||
* ABOUT-NLS: Likewise.
|
||||
* intl/*: Likewise.
|
||||
* aclocal.m4: Likewise.
|
||||
|
||||
Thu Jul 4 07:24:54 1996 Jim Meyering <meyering@na-net.ornl.gov>
|
||||
|
||||
* src/uniq.c (usage): Remove space before newline in usage message.
|
||||
|
||||
* src/md5sum.c (MIN_DIGEST_LINE_LENGTH): New macro.
|
||||
[NEWLINE_REPLACEMENT_STRING*]: Remove macros.
|
||||
(main): Output a leading backslash for a line describing a file
|
||||
whose name contains a newline. Then translate each NEWLINE byte
|
||||
in the file name to the string, "\\n", and each backslash to "\\\\".
|
||||
File names that don't contain NEWLINE aren't translated.
|
||||
(split_3): Rewrite to handle file names with embedded newlines.
|
||||
Miles Bader and Jim Blandy suggested this new encoding scheme.
|
||||
|
||||
* src/md5sum.c (md5_file): Replace obsolete comment with a description
|
||||
of the function.
|
||||
(md5_check): Don't use "s"-adding trick to form the plural of
|
||||
`checksum.' That doesn't work well with translation.
|
||||
Suggestions from Ulrich Drepper.
|
||||
(split_3): Add missing semicolon so it compiles. From Jim Blandy.
|
||||
|
||||
Wed Jul 3 23:21:09 1996 Jim Meyering <meyering@na-net.ornl.gov>
|
||||
|
||||
* src/md5sum.c (split_3): Correct test for 35-byte line to accomodate
|
||||
fact that leading blanks may be stripped.
|
||||
|
||||
Tue Jul 2 21:51:40 1996 Jim Meyering <meyering@na-net.ornl.gov>
|
||||
|
||||
* configure.in (ALL_LINGUAS): Add dutch (nl).
|
||||
|
||||
Mon Jul 1 23:50:19 1996 Jim Meyering <meyering@na-net.ornl.gov>
|
||||
|
||||
* src/md5sum.c [NEWLINE_REPLACEMENT_STRING]: Define.
|
||||
(split_3): Translate NL bytes not to NUL, but to
|
||||
NEWLINE_REPLACEMENT_STRING.
|
||||
Suggested by Ulrich Drepper.
|
||||
(main): Translate back to NL-containing filename.
|
||||
|
||||
Sun Jun 30 22:42:17 1996 Jim Meyering <meyering@na-net.ornl.gov>
|
||||
|
||||
* src/md5sum.c (split_3): Take an additional parameter, S_LEN.
|
||||
Adapt caller.
|
||||
Map translated NEWLINE-containing filename back into the original
|
||||
NEWLINE-containing name.
|
||||
(md5_check): Translate NEWLINE bytes to NUL bytes in filename.
|
||||
|
||||
Sat Jun 29 18:59:07 1996 Jim Meyering <meyering@na-net.ornl.gov>
|
||||
|
||||
* configure.in (PACKAGE_VERSION): Add `GNU ' prefix so it
|
||||
appears in the output of --version. Reported by RMS.
|
||||
|
||||
Wed Jun 26 21:35:10 1996 Jim Meyering <meyering@na-net.ornl.gov>
|
||||
|
||||
* src/Makefile.am (LDADD): Remove sort-specific hack to link
|
||||
with -lm.
|
||||
* aclocal.m4 (AM_FUNC_STRTOD): New macro.
|
||||
* configure.in (AM_FUNC_STRTOD): Use it.
|
||||
(AC_REPLACE_FUNCS): Remove strtod.
|
||||
Suggested by Tom Tromey.
|
||||
|
||||
* po/Makefile.in.in (install-data): Add `else true;' to avoid
|
||||
letting failing if-condition cause make failure.
|
||||
From Fred Fish (fnf@ninemoons.com).
|
||||
|
||||
Tue Jun 25 21:55:18 1996 Jim Meyering <meyering@na-net.ornl.gov>
|
||||
|
||||
* Version 1.18a.
|
||||
|
||||
Tue Jun 18 20:43:20 1996 Jim Meyering <meyering@na-net.ornl.gov>
|
||||
|
||||
* aclocal.m4: Update from gettext-0.10.20.
|
||||
* ABOUT-NLS: Likewise.
|
||||
* intl/*: Likewise.
|
||||
|
||||
Thu Jun 13 22:31:39 1996 Jim Meyering <meyering@na-net.ornl.gov>
|
||||
|
||||
* configure.in (VERSION): Bump to 1.18a.
|
||||
|
||||
* po/Makefile.in.in ($(PACKAGE).pot): Reapply change of May 30.
|
||||
Depend on POTFILES only when using maintainer mode.
|
||||
|
||||
* intl/*: Update from gettext-0.10.18.
|
||||
|
||||
Tue Jun 11 23:32:10 1996 Jim Meyering <meyering@na-net.ornl.gov>
|
||||
|
||||
* Version 1.18.
|
||||
|
||||
* po/Makefile.in.in: Update from gettext-0.10.17.
|
||||
* intl/*: Likewise.
|
||||
* ABOUT-NLS: Likewise.
|
||||
|
||||
Mon Jun 10 18:22:29 1996 Jim Meyering <meyering@na-net.ornl.gov>
|
||||
|
||||
* Makefile.am (cvs-dist): Use -c option in cvs tag command.
|
||||
|
||||
Fri Jun 7 22:06:46 1996 Jim Meyering <meyering@na-net.ornl.gov>
|
||||
|
||||
* configure.in (VERSION): Set to 1.18.
|
||||
|
||||
* src/Makefile.am (sort_LDADD): Set this to -lm to get pow when using
|
||||
the strtod supplied with this package. Otherwise, linking failed on
|
||||
Solaris-2.4 systems. Reported by Wayne Stewart <wstewa@atl.com>.
|
||||
|
||||
Thu Jun 6 21:57:08 1996 Jim Meyering <meyering@na-net.ornl.gov>
|
||||
|
||||
* po/Makefile.in.in: Update from gettext-0.10.16.
|
||||
* intl/*: Likewise.
|
||||
* ABOUT-NLS: Likewise.
|
||||
* aclocal.m4 (AC_REPLACE_GNU_GETOPT): Move definition to precede
|
||||
gettext-related ones.
|
||||
Update from gettext-0.10.16.
|
||||
|
||||
Fri May 31 22:04:51 1996 Jim Meyering <meyering@na-net.ornl.gov>
|
||||
|
||||
* Version 1.17.
|
||||
|
||||
* Makefile.am (EXTRA_DIST): Set to texinfo.tex so that file is
|
||||
distributed.
|
||||
|
||||
Thu May 30 00:07:48 1996 Jim Meyering <meyering@na-net.ornl.gov>
|
||||
|
||||
* Version 1.16.
|
||||
|
||||
* tail.c (main): Interpret the old-style +VALUE and -VALUE options
|
||||
like -c VALUE and -c +VALUE (resp) when VALUE has one of the [bkm]
|
||||
suffix multipliers. This makes the code consistent with --help
|
||||
output. Reported by Karl Heuer.
|
||||
|
||||
* sort.c (limfield): #ifdef-out a block of code that makes
|
||||
GNU sort incompatible with Unix sort when a key-end spec refers
|
||||
to the N'th character in a field that has fewer than N characters.
|
||||
The POSIX spec doesn't appear to specify behavior for this case.
|
||||
From Karl Heuer.
|
||||
|
||||
* po/Makefile.in.in (stamp-cat-id): Avoid using temp filename
|
||||
longer than 14 characters.
|
||||
(mostlyclean): Likewise.
|
||||
From Karl Heuer.
|
||||
|
||||
* po/Makefile.in.in ($(PACKAGE).pot): Depend on POTFILES only
|
||||
when using maintainer mode. Reported by Karl Heuer.
|
||||
|
||||
* po/Makefile.in.in (.po.mo): Reenable dependency and rule.
|
||||
It is required when using native NLS, e.g. on Solaris.
|
||||
From Marcus Daniels.
|
||||
|
||||
* od.c (decode_one_format): Use %lu (not %d) printf format
|
||||
corresponding to unsigned long, SIZE.
|
||||
|
||||
* Version 1.15.
|
||||
|
||||
* intl/Makefile.in (installcheck): New target.
|
||||
* po/Makefile.in.in (installcheck): New target.
|
||||
|
||||
* od.c (decode_one_format): Take another parameter.
|
||||
Give a specific diagnostic for invalid format spec here rather
|
||||
than an overly general one from caller's caller.
|
||||
(decode_format_string): Update caller.
|
||||
(main): Don't give diagnostic here when decode_format_string fails.
|
||||
Remove assertions that could fail on some Crays because they don't
|
||||
have a two-byte type.
|
||||
Johan Danielsson (joda@pdc.kth.se) reported the failed assertions.
|
||||
|
||||
Mon May 27 17:43:31 1996 Jim Meyering <meyering@na-net.ornl.gov>
|
||||
|
||||
* cat.c (main): Use STDIN_FILENO and STDOUT_FILENO instead of
|
||||
less portable fileno (stdin) and fileno (stdout).
|
||||
* sort.c (main): Use STDIN_FILENO instead of less portable
|
||||
fileno (stdin).
|
||||
|
||||
Mon May 20 21:50:23 1996 Jim Meyering (meyering@na-net.ornl.gov)
|
||||
|
||||
* Makefile.am (distcheck): Remove target and rule -- automake-0.33
|
||||
adds it automatically.
|
||||
|
||||
Sun May 19 13:15:49 1996 Jim Meyering (meyering@na-net.ornl.gov)
|
||||
|
||||
* configure.in (LINGUAS): Add ko.
|
||||
* Makefile.am (distcheck): Remove @MAINT@ prefix from first command.
|
||||
|
||||
Thu May 16 22:18:41 1996 Jim Meyering (meyering@na-net.ornl.gov)
|
||||
|
||||
* Makefile.am (distcheck): New target. From Gord Matzigkeit.
|
||||
|
||||
Fri May 10 20:46:13 1996 Jim Meyering (meyering@na-net.ornl.gov)
|
||||
|
||||
* po/Makefile.in.in (all-yes): Always depend on CATALOGS. Otherwise
|
||||
they won't be built and install could fail. From Ulrich Drepper.
|
||||
(.po.mo): Disable dependency and rule when not in maintainer mode.
|
||||
|
||||
* aclocal.m4 (ud_WITH_NLS): Make DATADIRNAME and CATOBJEXT depend
|
||||
on whether we're using GNU gettext. From Ulrich Drepper.
|
||||
|
||||
Wed May 8 21:10:43 1996 Jim Meyering (meyering@na-net.ornl.gov)
|
||||
|
||||
* intl/Makefile.in (distdir): Renamed from dist. For compatibility
|
||||
with automake-0.32.
|
||||
* po/Makefile.in.in (distdir): Likewise.
|
||||
|
||||
* po/Makefile.in.in (all-yes): Depend on GMOFILES.
|
||||
Depend on CATALOGS and GMOFILES files only in maintainer mode.
|
||||
|
||||
Tue May 7 22:10:20 1996 Jim Meyering (meyering@na-net.ornl.gov)
|
||||
|
||||
* configure.in: Require autoconf-2.10.
|
||||
|
||||
* aclocal.m4 (jm_MAINTAINER_MODE): New macro.
|
||||
* configure.in (jm_MAINTAINER_MODE): Use it.
|
||||
|
||||
Sat May 4 20:40:01 1996 Jim Meyering (meyering@na-net.ornl.gov)
|
||||
|
||||
* configure.in (LINGUAS): Add de.
|
||||
* po/de.po: New file.
|
||||
|
||||
* memcasecmp.c [IN_CTYPE_DOMAIN]: Rename from ISASCII.
|
||||
* regex.c [IN_CTYPE_DOMAIN]: Likewise.
|
||||
* system.h [IN_CTYPE_DOMAIN]: Likewise.
|
||||
|
||||
Sun Apr 28 17:10:03 1996 Jim Meyering (meyering@na-net.ornl.gov)
|
||||
|
||||
* fmt.c (copy_rest): Don't copy past end of prefix. Output
|
||||
trailing spaces if the prefix had any. Before, fmt would
|
||||
improperly output NUL bytes. The command
|
||||
perl -e 'print "| S";' |fmt -p' | '|tr '\0' @
|
||||
output `|@S'. Reported by François Pinard.
|
||||
|
||||
* sort.c (main): Give a better diagnostic for `sort -0'.
|
||||
Reported by Karl Berry.
|
||||
|
||||
* configure.in: Make fp_C_PROTOTYPES precede AC_C_INLINE.
|
||||
Otherwise, some systems lose because the value AC_C_INLINE choses
|
||||
with plain `cc' is different from that chosen when using the ANSI-mode
|
||||
C compiler. From Kaveh Ghazi.
|
||||
|
||||
Tue Apr 23 22:05:35 1996 Jim Meyering (meyering@na-net.ornl.gov)
|
||||
|
||||
* aclocal.m4 (AC_REPLACE_GNU_GETOPT): New macro.
|
||||
@@ -103,8 +370,8 @@ Sun Mar 24 08:47:40 1996 Jim Meyering (meyering@na-net.ornl.gov)
|
||||
* tr.c (main): Likewise.
|
||||
|
||||
* cat.c cksum.c comm.c csplit.c cut.c expand.c fmt.c fold.c head.c
|
||||
join.c md5sum.c nl.c od.c paste.c pr.c split.c sum.c tac.c tail.c
|
||||
tr.c unexpand.c uniq.c wc.c: Exit with status EXIT_SUCCESS or
|
||||
join.c md5sum.c nl.c od.c paste.c pr.c split.c sum.c tac.c tail.c
|
||||
tr.c unexpand.c uniq.c wc.c: Exit with status EXIT_SUCCESS or
|
||||
EXIT_FAILURE, rather than 0 or 1.
|
||||
|
||||
Sat Mar 23 23:14:40 1996 Jim Meyering (meyering@na-net.ornl.gov)
|
||||
@@ -182,7 +449,7 @@ Sat Mar 9 13:30:12 1996 Jim Meyering (meyering@na-net.ornl.gov)
|
||||
Link an nls file.
|
||||
(AC_OUTPUT): Reflect addition of two new directories, intl and po.
|
||||
Create po/Makefile.
|
||||
From François Pinard.
|
||||
From François Pinard.
|
||||
|
||||
* tr.c (star_digits_closebracket): Declare formal param, IDX,
|
||||
and local I to be of type size_t (rather than int) to avoid
|
||||
@@ -289,7 +556,7 @@ Fri Dec 22 21:34:55 1995 Andreas Schwab <schwab@issan.informatik.uni-dortmund.
|
||||
* configure.in: Touch stamp-h only if config.h is remade.
|
||||
|
||||
* csplit.c (extract_regexp) [!WITH_REGEX]: Intialize
|
||||
syntax_parens field.
|
||||
syntax_parens field.
|
||||
|
||||
Mon Dec 18 21:42:44 1995 Jim Meyering (meyering@comco.com)
|
||||
|
||||
@@ -339,7 +606,7 @@ Tue Dec 5 17:49:53 1995 Jim Meyering (meyering@comco.com)
|
||||
From Karl Heuer.
|
||||
|
||||
* Makefile.in (mandir): @mandir@ is just $(prefix)/man.
|
||||
Append `/man1'. Reported by Karl Heuer.
|
||||
Append `/man1'. Reported by Karl Heuer.
|
||||
|
||||
* sum.c (bsd_sum_file): Remove misleading comment. From Karl Heuer.
|
||||
|
||||
@@ -351,7 +618,7 @@ Fri Dec 1 01:02:36 1995 Jim Meyering (meyering@comco.com)
|
||||
|
||||
* sort.c (numcompare): Properly order `-' and valid integers;
|
||||
treat `-' as if it were zero. Reported by Ross Alexander
|
||||
<r.alexander@auckland.ac.nz>.
|
||||
<r.alexander@auckland.ac.nz>.
|
||||
|
||||
* Makefile.in (DISTFILES): Remove unused mkdep-Makefile.
|
||||
(.PHONY): Depend on default.
|
||||
@@ -426,7 +693,7 @@ Wed Nov 15 23:48:31 1995 Jim Meyering (meyering@comco.com)
|
||||
* system.h [__P]: Define it here.
|
||||
|
||||
* aclocal.m4 (jm_AUTODEPS): Rename from jm_WITH_AUTODEPS.
|
||||
Revamp, with suggestions from Franc,ois Pinard.
|
||||
Revamp, with suggestions from Franc,ois Pinard.
|
||||
(jm_WITH_GNU_MAKE): New macro.
|
||||
(jm_PROG_MKDEP): New macro.
|
||||
* configure.in (jm_PROG_MKDEP): Use it.
|
||||
@@ -438,8 +705,8 @@ Wed Nov 15 23:48:31 1995 Jim Meyering (meyering@comco.com)
|
||||
Tue Nov 14 23:10:54 1995 Jim Meyering (meyering@comco.com)
|
||||
|
||||
* sort.c: Add support for sorting numbers in scientific notation.
|
||||
Include xstrtod.h.
|
||||
(struct keyfield): Add field: general_numeric.
|
||||
Include xstrtod.h.
|
||||
(struct keyfield): Add field: general_numeric.
|
||||
(usage): Describe -g option.
|
||||
(general_numcompare): New function.
|
||||
(keycompare): Use new comparison function when general_numeric
|
||||
@@ -580,7 +847,7 @@ Sun Oct 29 14:04:36 1995 Jim Meyering (meyering@comco.com)
|
||||
Sat Oct 28 16:02:39 1995 Jim Meyering (meyering@comco.com)
|
||||
|
||||
* md5sum.c (md5_check): Use the same message format when there is
|
||||
a single file and it gets a read error or checksum mismatch as when
|
||||
a single file and it gets a read error or checksum mismatch as when
|
||||
there are more. Write that warning to standard error, not standard
|
||||
output. Suggestions from Greg Troxel (gdt@b-sgi.bbn.com).
|
||||
|
||||
@@ -703,8 +970,8 @@ Thu Sep 28 23:16:05 1995 Jim Meyering (meyering@comco.com)
|
||||
Tue Sep 26 23:05:01 1995 Jim Meyering (meyering@comco.com)
|
||||
|
||||
* man/Makefile.in (install-data, uninstall): Use sed not basename.
|
||||
The GNU Coding Standard suggests that only a select set of
|
||||
relatively standard utilities be used in Makefiles. basename is
|
||||
The GNU Coding Standard suggests that only a select set of
|
||||
relatively standard utilities be used in Makefiles. basename is
|
||||
not among them. Suggested by Ulrich Drepper.
|
||||
|
||||
Sun Sep 24 08:36:47 1995 Jim Meyering (meyering@comco.com)
|
||||
@@ -903,7 +1170,6 @@ Tue Jul 11 21:56:02 1995 Jim Meyering (meyering@comco.com)
|
||||
|
||||
* md5sum.c Add #else block after #ifdef VMS.
|
||||
(main): Rename local variable.
|
||||
Add FIXME: allow newlines in filenames.
|
||||
Detect and report failed fclose calls on stdout and checkfile_stream.
|
||||
|
||||
* tr.c (unqote): Comment out unreachable break stmts.
|
||||
@@ -946,7 +1212,7 @@ Thu Jul 6 23:44:20 1995 Jim Meyering (meyering@comco.com)
|
||||
* od.c (dump): Correct loop-termination criterion.
|
||||
Before, running `printf 1234| ./od --width=4 --read-bytes=4'
|
||||
printed output for 8 bytes -- the last four were garbage.
|
||||
This happened only when the dump limit, N, was specified (with
|
||||
This happened only when the dump limit, N, was specified (with
|
||||
--read-bytes=N) and N was a multiple of bytes_per_block
|
||||
(usually 16, but 4 in this example). From Andreas Schwab.
|
||||
|
||||
|
||||
@@ -1,12 +1,34 @@
|
||||
Changes in release 1.19
|
||||
* md5sum can verify digests of files with names containing newline characters
|
||||
* update from gettext-0.10.20.
|
||||
|
||||
Changes in release 1.18
|
||||
* when building sort, link with -lm on systems that use the replacement strtod
|
||||
* update from gettext-0.10.17.
|
||||
|
||||
Changes in release 1.17
|
||||
* include texinfo.tex in the distribution
|
||||
|
||||
Changes in release 1.16
|
||||
* sort is compatible with Unix sort when a key-end spec refers to the N'th
|
||||
character in a field that has fewer than N characters
|
||||
* tail with old-style options like -20k and +31m operates on units of bytes,
|
||||
as the --help usage message says. Before, it used units of lines.
|
||||
|
||||
Changes in release 1.15
|
||||
* od gives better diagnostics for invalid format specs
|
||||
* uses automake-generated Makefile templates
|
||||
* configure takes a new option: --enable-maintainer-mode
|
||||
* fix a bug in fmt when prefix has trailing white space
|
||||
* internationalized diagnostic messages
|
||||
* fix a couple bugs in tr involving use of -c and/or -d flags -- see ChangeLog
|
||||
* diagnose some improper or questionable invocations of csplit
|
||||
* properly handle `echo |csplit - 1 1', rather than aborting
|
||||
* join without -t now ignores leading blanks
|
||||
* fix join: without -t it now ignores leading blanks
|
||||
* sort accepts new option: -z for NUL terminated records
|
||||
* join accepts new option: --ignore-case, -i
|
||||
* uniq accepts new option: --ignore-case, -i
|
||||
|
||||
User-visible changes in release 1.14
|
||||
* sort -i and sort -d properly order strings containing ignored characters
|
||||
* nl: rename misleading --first-page=N option to --starting-line-number=N.
|
||||
@@ -21,6 +43,7 @@ User-visible changes in release 1.14
|
||||
* tr 'a[b*512]' '[a*]' < /dev/null terminates
|
||||
* tr '[:*3][:digit:]' 'a-m' and tr 'a[=*2][=c=]' 'xyyz' no longer fail
|
||||
* special characters in tr's string1 and string2 may be escaped with backslash
|
||||
|
||||
User-visible changes in release 1.13
|
||||
* md5sum: with --check, distinguish between open/read failure and bad checksum
|
||||
* md5sum: remove -h, -s, -v short options
|
||||
@@ -33,6 +56,7 @@ User-visible changes in release 1.13
|
||||
* sort accepts -.1 +.2 options for compatibility
|
||||
* od works properly when dump limit is specified and is a multiple of
|
||||
bytes_per_block (set by --width, 16 by default).
|
||||
|
||||
User-visible changes in release 1.12
|
||||
* sort no longer reports spurious errors on Ultrix systems
|
||||
* new program: md5sum
|
||||
@@ -49,8 +73,10 @@ User-visible changes in release 1.12
|
||||
* wc is faster when not counting words
|
||||
* wc now works even when file pointer isn't at beginning of file
|
||||
* expand no longer seg faults with very long tab lists
|
||||
|
||||
User-visible changes in release 1.11
|
||||
* fmt is built
|
||||
|
||||
User-visible changes in release 1.10
|
||||
* skeletal texinfo documentation (mainly just the `invoking' nodes)
|
||||
* new program: fmt
|
||||
|
||||
@@ -30,11 +30,12 @@ exec_prefix = @exec_prefix@
|
||||
datadir = $(prefix)/@DATADIRNAME@
|
||||
localedir = $(datadir)/locale
|
||||
gnulocaledir = $(prefix)/share/locale
|
||||
gettextsrcdir = $(prefix)/share/gettext
|
||||
gettextsrcdir = $(prefix)/share/gettext/po
|
||||
subdir = po
|
||||
|
||||
INSTALL = @INSTALL@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
MKINSTALLDIRS = @MKINSTALLDIRS@
|
||||
|
||||
CC = @CC@
|
||||
GENCAT = @GENCAT@
|
||||
@@ -87,14 +88,15 @@ INSTOBJEXT = @INSTOBJEXT@
|
||||
|
||||
all: all-@USE_NLS@
|
||||
|
||||
all-yes all-gettext: cat-id-tbl.c $(CATALOGS)
|
||||
all-yes: cat-id-tbl.c $(CATALOGS)
|
||||
all-no:
|
||||
|
||||
$(PACKAGE).pot: $(POTFILES)
|
||||
$(PACKAGE).pot: @MAINT@$(POTFILES)
|
||||
$(XGETTEXT) --default-domain=$(PACKAGE) --directory=$(top_srcdir) \
|
||||
--add-comments --keyword=_ --keyword=N_ \
|
||||
--files-from=$(srcdir)/POTFILES.in
|
||||
if cmp -s $(PACKAGE).po $(srcdir)/$(PACKAGE).pot; then \
|
||||
if [ ! -s $(PACKAGE).po ] \
|
||||
|| cmp -s $(PACKAGE).po $(srcdir)/$(PACKAGE).pot; then \
|
||||
rm -f $(PACKAGE).po; \
|
||||
else \
|
||||
rm -f $(srcdir)/$(PACKAGE).pot \
|
||||
@@ -103,24 +105,30 @@ $(PACKAGE).pot: $(POTFILES)
|
||||
|
||||
cat-id-tbl.c: stamp-cat-id
|
||||
stamp-cat-id: $(PACKAGE).pot
|
||||
rm -f cat-id-tbl.tmp.c
|
||||
rm -f cat-id-tbl.tmp
|
||||
sed -f ../intl/po2tbl.sed $(srcdir)/$(PACKAGE).pot \
|
||||
| sed -e "s/@PACKAGE NAME@/$(PACKAGE)/" > cat-id-tbl.tmp.c
|
||||
if cmp -s cat-id-tbl.tmp.c $(srcdir)/cat-id-tbl.c; then \
|
||||
rm cat-id-tbl.tmp.c; \
|
||||
| sed -e "s/@PACKAGE NAME@/$(PACKAGE)/" > cat-id-tbl.tmp
|
||||
if cmp -s cat-id-tbl.tmp $(srcdir)/cat-id-tbl.c; then \
|
||||
rm cat-id-tbl.tmp; \
|
||||
else \
|
||||
echo cat-id-tbl.c changed; \
|
||||
rm -f $(srcdir)/cat-id-tbl.c; \
|
||||
mv cat-id-tbl.tmp.c $(srcdir)/cat-id-tbl.c; \
|
||||
mv cat-id-tbl.tmp $(srcdir)/cat-id-tbl.c; \
|
||||
fi
|
||||
cd $(srcdir) && rm -f stamp-cat-id && echo timestamp > stamp-cat-id
|
||||
|
||||
|
||||
install: install-exec install-data
|
||||
install-exec:
|
||||
install-data: all
|
||||
$(top_srcdir)/mkinstalldirs $(datadir)
|
||||
catalogs='$(CATALOGS)'; \
|
||||
install-data: install-data-@USE_NLS@
|
||||
install-data-no: all
|
||||
install-data-yes: all
|
||||
if test -r $(MKINSTALLDIRS); then \
|
||||
$(MKINSTALLDIRS) $(datadir); \
|
||||
else \
|
||||
$(top_srcdir)/mkinstalldirs $(datadir); \
|
||||
fi
|
||||
@catalogs='$(CATALOGS)'; \
|
||||
for cat in $$catalogs; do \
|
||||
case "$$cat" in \
|
||||
*.gmo) destdir=$(gnulocaledir);; \
|
||||
@@ -128,28 +136,47 @@ install-data: all
|
||||
esac; \
|
||||
lang=`echo $$cat | sed 's/$(CATOBJEXT)$$//'`; \
|
||||
dir=$$destdir/$$lang/LC_MESSAGES; \
|
||||
$(top_srcdir)/mkinstalldirs $$dir; \
|
||||
if test -r $(MKINSTALLDIRS); then \
|
||||
$(MKINSTALLDIRS) $$dir; \
|
||||
else \
|
||||
$(top_srcdir)/mkinstalldirs $$dir; \
|
||||
fi; \
|
||||
if test -r $$cat; then \
|
||||
$(INSTALL_DATA) $$cat $$dir/$(PACKAGE)$(INSTOBJEXT); \
|
||||
echo "installing $$cat as $$dir/$(PACKAGE)$(INSTOBJEXT)"; \
|
||||
else \
|
||||
$(INSTALL_DATA) $(srcdir)/$$cat $$dir/$(PACKAGE)$(INSTOBJEXT); \
|
||||
echo "installing $(srcdir)/$$cat as" \
|
||||
"$$dir/$(PACKAGE)$(INSTOBJEXT)"; \
|
||||
fi; \
|
||||
if test -r $$cat.m; then \
|
||||
$(INSTALL_DATA) $$cat.m $$dir/$(PACKAGE)$(INSTOBJEXT).m; \
|
||||
echo "installing $$cat.m as $$dir/$(PACKAGE)$(INSTOBJEXT).m"; \
|
||||
else \
|
||||
if test -r $(srcdir)/$$cat.m ; then \
|
||||
$(INSTALL_DATA) $(srcdir)/$$cat.m \
|
||||
$$dir/$(PACKAGE)$(INSTOBJEXT).m; \
|
||||
echo "installing $(srcdir)/$$cat as" \
|
||||
"$$dir/$(PACKAGE)$(INSTOBJEXT).m"; \
|
||||
else \
|
||||
true; \
|
||||
fi; \
|
||||
fi; \
|
||||
done
|
||||
if test "$(PACKAGE)" = "gettext"; then \
|
||||
if test -r $(MKINSTALLDIRS); then \
|
||||
$(MKINSTALLDIRS) $(gettextsrcdir); \
|
||||
else \
|
||||
$(top_srcdir)/mkinstalldirs $(gettextsrcdir); \
|
||||
fi; \
|
||||
cd $(srcdir) && \
|
||||
$(INSTALL_DATA) Makefile.in.in $(gettextsrcdir)/Makefile.in.in; \
|
||||
else \
|
||||
: ; \
|
||||
fi
|
||||
|
||||
# This installation goal is only used in GNU gettext. Packages which
|
||||
# only use the library should use install instead.
|
||||
install-src: install
|
||||
$(top_srcdir)/mkinstalldirs $(gettextsrcdir)
|
||||
cd $(srcdir) && \
|
||||
$(INSTALL_DATA) Makefile.in.in $(gettextsrcdir)/po-Makefile.in.in
|
||||
# Define this as empty until I found a useful application.
|
||||
installcheck:
|
||||
|
||||
uninstall:
|
||||
catalogs='$(CATALOGS)'; \
|
||||
@@ -166,10 +193,10 @@ check: all
|
||||
|
||||
cat-id-tbl.o: ../intl/libgettext.h
|
||||
|
||||
TAGS ID:
|
||||
dvi info tags TAGS ID:
|
||||
|
||||
mostlyclean:
|
||||
rm -f core core.* *.pox $(PACKAGE).po *.old.po cat-id-tbl.tmp.c
|
||||
rm -f core core.* *.pox $(PACKAGE).po *.old.po cat-id-tbl.tmp
|
||||
rm -fr *.o
|
||||
|
||||
clean: mostlyclean
|
||||
@@ -182,7 +209,7 @@ maintainer-clean: distclean
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
|
||||
distdir = ../$(PACKAGE)-$(VERSION)/$(subdir)
|
||||
dist dist-gettext: update-po $(DISTFILES)
|
||||
dist distdir: update-po $(DISTFILES)
|
||||
for file in $(DISTFILES); do \
|
||||
ln $(srcdir)/$$file $(distdir) 2> /dev/null \
|
||||
|| cp -p $(srcdir)/$$file $(distdir); \
|
||||
|
||||
264
src/asa.c
Normal file
264
src/asa.c
Normal file
@@ -0,0 +1,264 @@
|
||||
/*
|
||||
TODO
|
||||
mark translatable strings
|
||||
add usage function
|
||||
call parse_long_options
|
||||
dcl, set program_name
|
||||
do fclose/error checking
|
||||
*/
|
||||
|
||||
/* asa.c - interpret ASA carriage control characters
|
||||
Copyright (C) 94, 1996 Thomas Koenig
|
||||
|
||||
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. */
|
||||
|
||||
/* System Headers */
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
|
||||
/* Macros */
|
||||
|
||||
#define LINESIZE 135
|
||||
#define NUMLINES 5
|
||||
#define MAX(a,b) ((a) > (b) ? (a) : (b))
|
||||
|
||||
/* Structures and unions */
|
||||
|
||||
struct Str
|
||||
{
|
||||
char *chr;
|
||||
size_t len;
|
||||
};
|
||||
typedef struct Str str;
|
||||
|
||||
/* File scope variables */
|
||||
|
||||
static str *line_buffer = (str *) 0;
|
||||
static size_t line_num = 0;
|
||||
static size_t linebuf_size;
|
||||
|
||||
/* Function declarations */
|
||||
|
||||
char *xmalloc ();
|
||||
char *xrealloc ();
|
||||
|
||||
static size_t readline (FILE *fp, char **a);
|
||||
static void add_line (str *);
|
||||
static void flush (void);
|
||||
static void copy_file (FILE *fp);
|
||||
|
||||
/* Local functions */
|
||||
|
||||
static void
|
||||
form_feed ()
|
||||
{
|
||||
putchar ('\f');
|
||||
}
|
||||
|
||||
static void
|
||||
new_line ()
|
||||
{
|
||||
putchar ('\n');
|
||||
}
|
||||
|
||||
static void
|
||||
add_line (str *line)
|
||||
{
|
||||
if (line_num >= linebuf_size)
|
||||
{
|
||||
linebuf_size += NUMLINES;
|
||||
line_buffer = (str *) xrealloc (line_buffer, linebuf_size * sizeof (str *));
|
||||
}
|
||||
line_buffer[line_num] = *line;
|
||||
line_num++;
|
||||
}
|
||||
|
||||
static void
|
||||
flush ()
|
||||
{
|
||||
size_t i, j;
|
||||
size_t max_len;
|
||||
|
||||
if (line_num == 0)
|
||||
return;
|
||||
if (line_num == 1)
|
||||
{
|
||||
printf ("%s\n", line_buffer[0].chr + 1);
|
||||
line_num = 0;
|
||||
return;
|
||||
}
|
||||
max_len = 0;
|
||||
for (j = 0; j < line_num; j++)
|
||||
max_len = MAX (max_len, line_buffer[j].len);
|
||||
|
||||
for (i = 1; i <= max_len; i++)
|
||||
{
|
||||
int printed = 0;
|
||||
|
||||
for (j = 0; j < line_num; j++)
|
||||
{
|
||||
if (line_buffer[j].len > i)
|
||||
{
|
||||
int ch = line_buffer[j].chr[i];
|
||||
|
||||
if (ch != ' ')
|
||||
{
|
||||
if (printed)
|
||||
putchar ('\b');
|
||||
putchar (ch);
|
||||
printed = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!printed)
|
||||
putchar (' ');
|
||||
}
|
||||
for (j = 0; j < line_num; j++)
|
||||
free (line_buffer[j].chr);
|
||||
|
||||
line_num = 0;
|
||||
putchar ('\n');
|
||||
}
|
||||
|
||||
static size_t
|
||||
readline (FILE *fp, char **ret)
|
||||
{
|
||||
static char *buffer = (char *) 0;
|
||||
char *ret_buff;
|
||||
static int bufsize = LINESIZE;
|
||||
int ch;
|
||||
size_t len = 0;
|
||||
int inc;
|
||||
int i;
|
||||
|
||||
if (buffer == (char *) 0)
|
||||
buffer = (char *) xmalloc (LINESIZE);
|
||||
|
||||
while (1)
|
||||
{
|
||||
ch = fgetc (fp);
|
||||
if (ch == EOF)
|
||||
break;
|
||||
if (ch == '\t')
|
||||
{
|
||||
ch = ' ';
|
||||
inc = 8 - (len % 8);
|
||||
}
|
||||
else
|
||||
inc = 1;
|
||||
|
||||
if (len + inc > bufsize - 2)
|
||||
{
|
||||
bufsize += LINESIZE;
|
||||
buffer = xrealloc (buffer, bufsize);
|
||||
}
|
||||
for (i = 0; i < inc; i++)
|
||||
buffer[len + i] = ch;
|
||||
len += inc;
|
||||
if (ch == '\n')
|
||||
break;
|
||||
}
|
||||
buffer[len] = '\0';
|
||||
ret_buff = xmalloc (len + 1);
|
||||
strcpy (ret_buff, buffer);
|
||||
*ret = ret_buff;
|
||||
return len;
|
||||
}
|
||||
|
||||
static void
|
||||
copy_file (FILE *fp)
|
||||
{
|
||||
str line;
|
||||
static first_line = 1;
|
||||
|
||||
while ((line.len = readline (fp, &(line.chr))))
|
||||
{
|
||||
if (line.chr[line.len - 1] == '\n')
|
||||
{
|
||||
line.chr[line.len - 1] = '\0';
|
||||
line.len--;
|
||||
}
|
||||
|
||||
switch (line.chr[0])
|
||||
{
|
||||
case '+':
|
||||
add_line (&line);
|
||||
break;
|
||||
|
||||
case '0':
|
||||
flush ();
|
||||
new_line ();
|
||||
add_line (&line);
|
||||
break;
|
||||
|
||||
case '1':
|
||||
flush ();
|
||||
if (!first_line)
|
||||
form_feed ();
|
||||
add_line (&line);
|
||||
break;
|
||||
|
||||
case ' ':
|
||||
flush ();
|
||||
add_line (&line);
|
||||
break;
|
||||
|
||||
default:
|
||||
flush ();
|
||||
add_line (&line);
|
||||
break;
|
||||
}
|
||||
first_line = 0;
|
||||
}
|
||||
}
|
||||
|
||||
/* Global functions */
|
||||
|
||||
int
|
||||
main (int argc, char **argv)
|
||||
{
|
||||
int err;
|
||||
line_buffer = (str *) xmalloc (NUMLINES * sizeof (str *));
|
||||
linebuf_size = NUMLINES;
|
||||
|
||||
err = 0;
|
||||
if (argc == 1)
|
||||
copy_file (stdin);
|
||||
else
|
||||
{
|
||||
FILE *fp;
|
||||
char *fname;
|
||||
|
||||
while (--argc > 0)
|
||||
{
|
||||
fname = *++argv;
|
||||
if ((fp = fopen (fname, "r")) == NULL)
|
||||
{
|
||||
err = 1;
|
||||
error (0, errno, "%s", fname);
|
||||
}
|
||||
else
|
||||
{
|
||||
copy_file (fp);
|
||||
fclose (fp);
|
||||
}
|
||||
}
|
||||
}
|
||||
flush ();
|
||||
exit (err ? EXIT_FAILURE : EXIT_SUCCESS);
|
||||
}
|
||||
@@ -43,22 +43,22 @@ static void
|
||||
usage (int status)
|
||||
{
|
||||
if (status != 0)
|
||||
fprintf (stderr, "Try `%s --help' for more information.\n",
|
||||
fprintf (stderr, _("Try `%s --help' for more information.\n"),
|
||||
program_name);
|
||||
else
|
||||
{
|
||||
printf ("\
|
||||
printf (_("\
|
||||
Usage: %s NAME [SUFFIX]\n\
|
||||
or: %s OPTION\n\
|
||||
",
|
||||
"),
|
||||
program_name, program_name);
|
||||
printf ("\
|
||||
printf (_("\
|
||||
Print NAME with any leading directory components removed.\n\
|
||||
If specified, also remove a trailing SUFFIX.\n\
|
||||
\n\
|
||||
--help display this help and exit\n\
|
||||
--version output version information and exit\n\
|
||||
");
|
||||
"));
|
||||
}
|
||||
exit (status);
|
||||
}
|
||||
@@ -96,7 +96,8 @@ main (int argc, char **argv)
|
||||
|
||||
if (argc == 1 || argc > 3)
|
||||
{
|
||||
error (0, 0, "too %s arguments", argc == 1 ? "few" : "many");
|
||||
error (0, 0, (argc == 1 ? _("too few arguments")
|
||||
: _("too many arguments")));
|
||||
usage (1);
|
||||
}
|
||||
|
||||
|
||||
@@ -657,7 +657,7 @@ main (int argc, char **argv)
|
||||
|
||||
if (check_redirection
|
||||
&& stat_buf.st_dev == out_dev && stat_buf.st_ino == out_ino
|
||||
&& (input_desc != fileno (stdin) || output_desc != fileno (stdout)))
|
||||
&& (input_desc != STDIN_FILENO || output_desc != STDOUT_FILENO))
|
||||
{
|
||||
error (0, 0, _("%s: input file is output file"), infile);
|
||||
exit_status = 1;
|
||||
|
||||
46
src/chgrp.c
46
src/chgrp.c
@@ -27,10 +27,6 @@
|
||||
# include <limits.h>
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_LCHOWN
|
||||
# define chown(PATH, OWNER, GROUP) lchown(PATH, OWNER, GROUP)
|
||||
#endif
|
||||
|
||||
#ifndef UINT_MAX
|
||||
# define UINT_MAX ((unsigned int) ~(unsigned int) 0)
|
||||
#endif
|
||||
@@ -43,6 +39,11 @@
|
||||
#include "xstrtoul.h"
|
||||
#include "error.h"
|
||||
|
||||
/* MAXUID may come from limits.h *or* sys/params.h (via system.h) above. */
|
||||
#ifndef MAXUID
|
||||
# define MAXUID INT_MAX
|
||||
#endif
|
||||
|
||||
#ifndef _POSIX_VERSION
|
||||
struct group *getgrnam ();
|
||||
#endif
|
||||
@@ -51,6 +52,12 @@ struct group *getgrnam ();
|
||||
# define endgrent() ((void) 0)
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_LCHOWN
|
||||
# define LCHOWN(FILE, OWNER, GROUP) lchown (FILE, OWNER, GROUP)
|
||||
#else
|
||||
# define LCHOWN(FILE, OWNER, GROUP) 1
|
||||
#endif
|
||||
|
||||
char *group_member ();
|
||||
char *savedir ();
|
||||
char *xmalloc ();
|
||||
@@ -61,6 +68,10 @@ static int change_dir_group __P ((char *dir, int group, struct stat *statp));
|
||||
/* The name the program was run with. */
|
||||
char *program_name;
|
||||
|
||||
/* If nonzero, and the systems has support for it, change the ownership
|
||||
of symbolic links rather than any files they point to. */
|
||||
static int change_symlinks;
|
||||
|
||||
/* If nonzero, change the ownership of directories recursively. */
|
||||
static int recurse;
|
||||
|
||||
@@ -86,6 +97,7 @@ static struct option const long_options[] =
|
||||
{
|
||||
{"recursive", no_argument, 0, 'R'},
|
||||
{"changes", no_argument, 0, 'c'},
|
||||
{"no-dereference", no_argument, 0, 'h'},
|
||||
{"silent", no_argument, 0, 'f'},
|
||||
{"quiet", no_argument, 0, 'f'},
|
||||
{"verbose", no_argument, 0, 'v'},
|
||||
@@ -154,9 +166,17 @@ change_file_group (char *file, int group)
|
||||
|
||||
if (group != file_stats.st_gid)
|
||||
{
|
||||
int fail;
|
||||
|
||||
if (verbose)
|
||||
describe_change (file, 1);
|
||||
if (chown (file, file_stats.st_uid, group))
|
||||
|
||||
if (change_symlinks)
|
||||
fail = LCHOWN (file, file_stats.st_uid, group);
|
||||
else
|
||||
fail = chown (file, file_stats.st_uid, group);
|
||||
|
||||
if (fail)
|
||||
{
|
||||
errors = 1;
|
||||
if (force_silent == 0)
|
||||
@@ -169,12 +189,10 @@ change_file_group (char *file, int group)
|
||||
error (0, errno, _("you are not a member of group `%s'"),
|
||||
groupname);
|
||||
}
|
||||
#ifdef MAXUID
|
||||
else if (errno == EINVAL && group > MAXUID)
|
||||
{
|
||||
error (0, 0, _("%s: invalid group number"), groupname);
|
||||
}
|
||||
#endif
|
||||
else
|
||||
{
|
||||
error (0, errno, "%s", file);
|
||||
@@ -255,6 +273,8 @@ usage (int status)
|
||||
Change the group membership of each FILE to GROUP.\n\
|
||||
\n\
|
||||
-c, --changes like verbose but report only when a change is made\n\
|
||||
-h, --no-dereference affect symbolic links instead of any referenced file\n\
|
||||
(available only on systems with lchown system call)\n\
|
||||
-f, --silent, --quiet suppress most error messages\n\
|
||||
-v, --verbose output a diagnostic for every file processed\n\
|
||||
-R, --recursive change files and directories recursively\n\
|
||||
@@ -274,7 +294,7 @@ main (int argc, char **argv)
|
||||
program_name = argv[0];
|
||||
recurse = force_silent = verbose = changes_only = 0;
|
||||
|
||||
while ((optc = getopt_long (argc, argv, "Rcfv", long_options, (int *) 0))
|
||||
while ((optc = getopt_long (argc, argv, "Rcfnv", long_options, (int *) 0))
|
||||
!= EOF)
|
||||
{
|
||||
switch (optc)
|
||||
@@ -291,6 +311,9 @@ main (int argc, char **argv)
|
||||
case 'f':
|
||||
force_silent = 1;
|
||||
break;
|
||||
case 'h':
|
||||
change_symlinks = 1;
|
||||
break;
|
||||
case 'v':
|
||||
verbose = 1;
|
||||
break;
|
||||
@@ -314,6 +337,13 @@ main (int argc, char **argv)
|
||||
usage (1);
|
||||
}
|
||||
|
||||
#ifndef HAVE_LCHOWN
|
||||
if (change_symlinks)
|
||||
{
|
||||
error (1, 0, _("--no-dereference (-h) is not supported on this system"));
|
||||
}
|
||||
#endif
|
||||
|
||||
parse_group (argv[optind++], &group);
|
||||
|
||||
for (; optind < argc; ++optind)
|
||||
|
||||
13
src/chmod.c
13
src/chmod.c
@@ -38,8 +38,9 @@ void strip_trailing_slashes ();
|
||||
char *xmalloc ();
|
||||
char *xrealloc ();
|
||||
|
||||
static int change_dir_mode __P ((char *dir, struct mode_change *changes,
|
||||
struct stat *statp));
|
||||
static int change_dir_mode __P ((const char *dir,
|
||||
const struct mode_change *changes,
|
||||
const struct stat *statp));
|
||||
|
||||
/* The name the program was run with. */
|
||||
char *program_name;
|
||||
@@ -78,7 +79,7 @@ static struct option const long_options[] =
|
||||
if CHANGED is zero, FILE had that mode already. */
|
||||
|
||||
static void
|
||||
describe_change (char *file, short unsigned int mode, int changed)
|
||||
describe_change (const char *file, short unsigned int mode, int changed)
|
||||
{
|
||||
char perms[11]; /* "-rwxrwxrwx" ls-style modes. */
|
||||
|
||||
@@ -98,7 +99,8 @@ describe_change (char *file, short unsigned int mode, int changed)
|
||||
links. Return 0 if successful, 1 if errors occurred. */
|
||||
|
||||
static int
|
||||
change_file_mode (char *file, struct mode_change *changes, int deref_symlink)
|
||||
change_file_mode (const char *file, const struct mode_change *changes,
|
||||
const int deref_symlink)
|
||||
{
|
||||
struct stat file_stats;
|
||||
unsigned short newmode;
|
||||
@@ -152,7 +154,8 @@ change_file_mode (char *file, struct mode_change *changes, int deref_symlink)
|
||||
Return 0 if successful, 1 if errors occurred. */
|
||||
|
||||
static int
|
||||
change_dir_mode (char *dir, struct mode_change *changes, struct stat *statp)
|
||||
change_dir_mode (const char *dir, const struct mode_change *changes,
|
||||
const struct stat *statp)
|
||||
{
|
||||
char *name_space, *namep;
|
||||
char *path; /* Full path of each entry to process. */
|
||||
|
||||
53
src/chown.c
53
src/chown.c
@@ -38,10 +38,6 @@
|
||||
#include "system.h"
|
||||
#include "error.h"
|
||||
|
||||
#ifdef HAVE_LCHOWN
|
||||
# define chown(PATH, OWNER, GROUP) lchown(PATH, OWNER, GROUP)
|
||||
#endif
|
||||
|
||||
#ifndef _POSIX_VERSION
|
||||
struct passwd *getpwnam ();
|
||||
struct group *getgrnam ();
|
||||
@@ -52,6 +48,12 @@ struct group *getgrgid ();
|
||||
# define endpwent() ((void) 0)
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_LCHOWN
|
||||
# define LCHOWN(FILE, OWNER, GROUP) lchown (FILE, OWNER, GROUP)
|
||||
#else
|
||||
# define LCHOWN(FILE, OWNER, GROUP) 1
|
||||
#endif
|
||||
|
||||
char *savedir ();
|
||||
char *parse_user_spec ();
|
||||
void strip_trailing_slashes ();
|
||||
@@ -64,6 +66,10 @@ static int change_dir_owner __P ((char *dir, uid_t user, gid_t group,
|
||||
/* The name the program was run with. */
|
||||
char *program_name;
|
||||
|
||||
/* If nonzero, and the systems has support for it, change the ownership
|
||||
of symbolic links rather than any files they point to. */
|
||||
static int change_symlinks;
|
||||
|
||||
/* If nonzero, change the ownership of directories recursively. */
|
||||
static int recurse;
|
||||
|
||||
@@ -92,8 +98,9 @@ static struct option const long_options[] =
|
||||
{
|
||||
{"recursive", no_argument, 0, 'R'},
|
||||
{"changes", no_argument, 0, 'c'},
|
||||
{"silent", no_argument, 0, 'f'},
|
||||
{"no-dereference", no_argument, 0, 'h'},
|
||||
{"quiet", no_argument, 0, 'f'},
|
||||
{"silent", no_argument, 0, 'f'},
|
||||
{"verbose", no_argument, 0, 'v'},
|
||||
{"help", no_argument, &show_help, 1},
|
||||
{"version", no_argument, &show_version, 1},
|
||||
@@ -139,9 +146,17 @@ change_file_owner (char *file, uid_t user, gid_t group)
|
||||
newgroup = group == (gid_t) -1 ? file_stats.st_gid : group;
|
||||
if (newuser != file_stats.st_uid || newgroup != file_stats.st_gid)
|
||||
{
|
||||
int fail;
|
||||
|
||||
if (verbose)
|
||||
describe_change (file, 1);
|
||||
if (chown (file, newuser, newgroup))
|
||||
|
||||
if (change_symlinks)
|
||||
fail = LCHOWN (file, newuser, newgroup);
|
||||
else
|
||||
fail = chown (file, newuser, newgroup);
|
||||
|
||||
if (fail)
|
||||
{
|
||||
if (force_silent == 0)
|
||||
error (0, errno, "%s", file);
|
||||
@@ -224,12 +239,14 @@ Usage: %s [OPTION]... OWNER[.[GROUP]] FILE...\n\
|
||||
printf (_("\
|
||||
Change the owner and/or group of each FILE to OWNER and/or GROUP.\n\
|
||||
\n\
|
||||
-c, --changes be verbose whenever change occurs\n\
|
||||
-f, --silent, --quiet suppress most error messages\n\
|
||||
-v, --verbose explain what is being done\n\
|
||||
-R, --recursive change files and directories recursively\n\
|
||||
--help display this help and exit\n\
|
||||
--version output version information and exit\n\
|
||||
-c, --changes be verbose whenever change occurs\n\
|
||||
-h, --no-dereference affect symbolic links instead of any referenced file\n\
|
||||
(available only on systems with lchown system call)\n\
|
||||
-f, --silent, --quiet suppress most error messages\n\
|
||||
-v, --verbose explain what is being done\n\
|
||||
-R, --recursive change files and directories recursively\n\
|
||||
--help display this help and exit\n\
|
||||
--version output version information and exit\n\
|
||||
\n\
|
||||
Owner is unchanged if missing. Group is unchanged if missing, but changed\n\
|
||||
to login group if implied by a period. A colon may replace the period.\n"));
|
||||
@@ -253,7 +270,7 @@ main (int argc, char **argv)
|
||||
|
||||
recurse = force_silent = verbose = changes_only = 0;
|
||||
|
||||
while ((optc = getopt_long (argc, argv, "Rcfv", long_options, (int *) 0))
|
||||
while ((optc = getopt_long (argc, argv, "Rcfhv", long_options, (int *) 0))
|
||||
!= EOF)
|
||||
{
|
||||
switch (optc)
|
||||
@@ -270,6 +287,9 @@ main (int argc, char **argv)
|
||||
case 'f':
|
||||
force_silent = 1;
|
||||
break;
|
||||
case 'h':
|
||||
change_symlinks = 1;
|
||||
break;
|
||||
case 'v':
|
||||
verbose = 1;
|
||||
break;
|
||||
@@ -293,6 +313,13 @@ main (int argc, char **argv)
|
||||
usage (1);
|
||||
}
|
||||
|
||||
#ifndef HAVE_LCHOWN
|
||||
if (change_symlinks)
|
||||
{
|
||||
error (1, 0, _("--no-dereference (-h) is not supported on this system"));
|
||||
}
|
||||
#endif
|
||||
|
||||
e = parse_user_spec (argv[optind], &user, &group, &username, &groupname);
|
||||
if (e)
|
||||
error (1, 0, "%s: %s", argv[optind], e);
|
||||
|
||||
@@ -65,7 +65,7 @@ main (int argc, char **argv)
|
||||
}
|
||||
|
||||
if (chroot (argv[1]))
|
||||
error (1, errno, "cannot change root directory to %s", argv[1]);
|
||||
error (1, errno, _("cannot change root directory to %s"), argv[1]);
|
||||
|
||||
if (argc == 2)
|
||||
{
|
||||
@@ -82,7 +82,7 @@ main (int argc, char **argv)
|
||||
|
||||
/* Execute the given command. */
|
||||
execvp (argv[0], argv);
|
||||
error (1, errno, "cannot execute %s", argv[0]);
|
||||
error (1, errno, _("cannot execute %s"), argv[0]);
|
||||
|
||||
exit (1);
|
||||
return 1;
|
||||
|
||||
71
src/cp.c
71
src/cp.c
@@ -79,15 +79,16 @@ int euidaccess ();
|
||||
int full_write ();
|
||||
|
||||
static int do_copy __P ((int argc, char **argv));
|
||||
static int copy __P ((char *src_path, char *dst_path, int new_dst,
|
||||
static int copy __P ((const char *src_path, const char *dst_path, int new_dst,
|
||||
dev_t device, struct dir_list *ancestors));
|
||||
static int copy_dir __P ((char *src_path_in, char *dst_path_in, int new_dst,
|
||||
struct stat *src_sb, struct dir_list *ancestors));
|
||||
static int make_path_private __P ((char *const_dirpath, int src_offset,
|
||||
int mode, char *verbose_fmt_string,
|
||||
static int copy_dir __P ((const char *src_path_in, const char *dst_path_in,
|
||||
int new_dst, const struct stat *src_sb,
|
||||
struct dir_list *ancestors));
|
||||
static int make_path_private __P ((const char *const_dirpath, int src_offset,
|
||||
int mode, const char *verbose_fmt_string,
|
||||
struct dir_attr **attr_list, int *new_dst));
|
||||
static int copy_reg __P ((char *src_path, char *dst_path));
|
||||
static int re_protect __P ((char *const_dst_path, int src_offset,
|
||||
static int copy_reg __P ((const char *src_path, const char *dst_path));
|
||||
static int re_protect __P ((const char *const_dst_path, int src_offset,
|
||||
struct dir_attr *attr_list));
|
||||
|
||||
/* Initial number of entries in each hash table entry's table of inodes. */
|
||||
@@ -400,7 +401,7 @@ do_copy (int argc, char **argv)
|
||||
if (optind >= argc)
|
||||
usage (2, _("missing file arguments"));
|
||||
if (optind >= argc - 1)
|
||||
usage (2, _("missing file argument"));
|
||||
usage (2, _("missing destination file"));
|
||||
|
||||
dest = argv[argc - 1];
|
||||
|
||||
@@ -463,7 +464,7 @@ do_copy (int argc, char **argv)
|
||||
|
||||
ap = basename (arg);
|
||||
/* For `cp -R source/.. dest', don't copy into `dest/..'. */
|
||||
dst_path = (strcmp (ap, "..") == 0
|
||||
dst_path = (STREQ (ap, "..")
|
||||
? xstrdup (dest)
|
||||
: path_concat (dest, ap));
|
||||
}
|
||||
@@ -498,15 +499,33 @@ do_copy (int argc, char **argv)
|
||||
struct stat source_stats;
|
||||
|
||||
if (flag_path)
|
||||
usage (2, _("when preserving paths, last argument must be a directory"));
|
||||
usage (2,
|
||||
_("when preserving paths, last argument must be a directory"));
|
||||
|
||||
source = argv[optind];
|
||||
|
||||
/* When the force and backup options have been specified and
|
||||
the source and destination are the same name for an existing
|
||||
regular file, convert the user's command, e.g.,
|
||||
`cp --force --backup foo foo' to `cp --force foo fooSUFFIX'
|
||||
where SUFFIX is determined by any version control options used. */
|
||||
|
||||
if (flag_force
|
||||
&& backup_type != none
|
||||
&& STREQ (source, dest)
|
||||
&& !new_dst && S_ISREG (sb.st_mode))
|
||||
{
|
||||
backup_type = none;
|
||||
new_dest = find_backup_file_name (dest);
|
||||
if (new_dest == NULL)
|
||||
error (1, 0, _("virtual memory exhausted"));
|
||||
}
|
||||
|
||||
/* When the destination is specified with a trailing slash and the
|
||||
source exists but is not a directory, convert the user's command
|
||||
`cp source dest/' to `cp source dest/basename(source)'. */
|
||||
|
||||
if (dest[strlen (dest) - 1] == '/'
|
||||
else if (dest[strlen (dest) - 1] == '/'
|
||||
&& lstat (source, &source_stats) == 0
|
||||
&& !S_ISDIR (source_stats.st_mode))
|
||||
{
|
||||
@@ -531,7 +550,7 @@ do_copy (int argc, char **argv)
|
||||
}
|
||||
else
|
||||
usage (2,
|
||||
_("when copying multiple files, last argument must be a directory"));
|
||||
_("when copying multiple files, last argument must be a directory"));
|
||||
}
|
||||
|
||||
/* Copy the file SRC_PATH to the file DST_PATH. The files may be of
|
||||
@@ -544,7 +563,7 @@ do_copy (int argc, char **argv)
|
||||
Return 0 if successful, 1 if an error occurs. */
|
||||
|
||||
static int
|
||||
copy (char *src_path, char *dst_path, int new_dst, dev_t device,
|
||||
copy (const char *src_path, const char *dst_path, int new_dst, dev_t device,
|
||||
struct dir_list *ancestors)
|
||||
{
|
||||
struct stat src_sb;
|
||||
@@ -616,7 +635,7 @@ copy (char *src_path, char *dst_path, int new_dst, dev_t device,
|
||||
if (S_ISDIR (dst_sb.st_mode))
|
||||
{
|
||||
error (0, 0,
|
||||
_("%s: cannot overwrite directory with non-directory"),
|
||||
_("%s: cannot overwrite directory with non-directory"),
|
||||
dst_path);
|
||||
return 1;
|
||||
}
|
||||
@@ -652,7 +671,7 @@ copy (char *src_path, char *dst_path, int new_dst, dev_t device,
|
||||
destroy the source file. Before, running the commands
|
||||
cd /tmp; rm -f a a~; : > a; echo A > a~; cp -b -V simple a~ a
|
||||
would leave two zero-length files: a and a~. */
|
||||
if (strcmp (tmp_backup, src_path) == 0)
|
||||
if (STREQ (tmp_backup, src_path))
|
||||
{
|
||||
error (0, 0,
|
||||
_("backing up `%s' would destroy source; `%s' not copied"),
|
||||
@@ -790,7 +809,8 @@ copy (char *src_path, char *dst_path, int new_dst, dev_t device,
|
||||
else
|
||||
{
|
||||
error (0, 0,
|
||||
_("%s: can only make relative symbolic links in current directory"), dst_path);
|
||||
_("%s: can make relative symbolic links only in current directory"),
|
||||
dst_path);
|
||||
goto un_backup;
|
||||
}
|
||||
}
|
||||
@@ -946,8 +966,8 @@ un_backup:
|
||||
permissions when done, otherwise 1. */
|
||||
|
||||
static int
|
||||
make_path_private (char *const_dirpath, int src_offset, int mode,
|
||||
char *verbose_fmt_string, struct dir_attr **attr_list,
|
||||
make_path_private (const char *const_dirpath, int src_offset, int mode,
|
||||
const char *verbose_fmt_string, struct dir_attr **attr_list,
|
||||
int *new_dst)
|
||||
{
|
||||
struct stat stats;
|
||||
@@ -1062,7 +1082,8 @@ make_path_private (char *const_dirpath, int src_offset, int mode,
|
||||
when done, otherwise 1. */
|
||||
|
||||
static int
|
||||
re_protect (char *const_dst_path, int src_offset, struct dir_attr *attr_list)
|
||||
re_protect (const char *const_dst_path, int src_offset,
|
||||
struct dir_attr *attr_list)
|
||||
{
|
||||
struct dir_attr *p;
|
||||
char *dst_path; /* A copy of CONST_DST_PATH we can change. */
|
||||
@@ -1132,8 +1153,8 @@ re_protect (char *const_dst_path, int src_offset, struct dir_attr *attr_list)
|
||||
Return 0 if successful, -1 if an error occurs. */
|
||||
|
||||
static int
|
||||
copy_dir (char *src_path_in, char *dst_path_in, int new_dst,
|
||||
struct stat *src_sb, struct dir_list *ancestors)
|
||||
copy_dir (const char *src_path_in, const char *dst_path_in, int new_dst,
|
||||
const struct stat *src_sb, struct dir_list *ancestors)
|
||||
{
|
||||
char *name_space;
|
||||
char *namep;
|
||||
@@ -1186,7 +1207,7 @@ copy_dir (char *src_path_in, char *dst_path_in, int new_dst,
|
||||
Return 0 if successful, -1 if an error occurred. */
|
||||
|
||||
static int
|
||||
copy_reg (char *src_path, char *dst_path)
|
||||
copy_reg (const char *src_path, const char *dst_path)
|
||||
{
|
||||
char *buf;
|
||||
int buf_size;
|
||||
@@ -1233,7 +1254,8 @@ copy_reg (char *src_path, char *dst_path)
|
||||
#ifdef HAVE_ST_BLOCKS
|
||||
if (flag_sparse == SPARSE_AUTO && S_ISREG (sb.st_mode))
|
||||
{
|
||||
/* Find out whether the file contains any sparse blocks. */
|
||||
/* Use a heuristic to determine whether SRC_PATH contains any
|
||||
sparse blocks. */
|
||||
|
||||
if (fstat (source_desc, &sb))
|
||||
{
|
||||
@@ -1245,7 +1267,8 @@ copy_reg (char *src_path, char *dst_path)
|
||||
/* If the file has fewer blocks than would normally
|
||||
be needed for a file of its size, then
|
||||
at least one of the blocks in the file is a hole. */
|
||||
if (S_ISREG (sb.st_mode) && sb.st_size / 512 > ST_NBLOCKS (sb))
|
||||
if (S_ISREG (sb.st_mode)
|
||||
&& (size_t) (sb.st_size / 512) > (size_t) ST_NBLOCKS (sb))
|
||||
make_holes = 1;
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -388,7 +388,7 @@ specifies Coordinated Universal Time. Interpreted sequences are:\n\
|
||||
%%c locale's date and time (Sat Nov 04 12:02:33 EST 1989)\n\
|
||||
%%d day of month (01..31)\n\
|
||||
%%D date (mm/dd/yy)\n\
|
||||
%%e day of month, blank padded ( 1..31)\n\
|
||||
%%e day of month, blank padded ( 1..31)\n\
|
||||
%%h same as %%b\n\
|
||||
%%H hour (00..23)\n\
|
||||
%%I hour (01..12)\n\
|
||||
|
||||
8
src/dd.c
8
src/dd.c
@@ -1039,8 +1039,10 @@ print_stats (void)
|
||||
fprintf (stderr, _("%u+%u records in\n"), r_full, r_partial);
|
||||
fprintf (stderr, _("%u+%u records out\n"), w_full, w_partial);
|
||||
if (r_truncate > 0)
|
||||
fprintf (stderr, _("%u truncated record%s\n"), r_truncate,
|
||||
r_truncate == 1 ? "" : "s");
|
||||
fprintf (stderr, "%u %s\n", r_truncate,
|
||||
(r_truncate == 1
|
||||
? _("truncated record")
|
||||
: _("truncated records")));
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -1108,7 +1110,7 @@ by w for x2, by b for x512, by k for x1024. Each KEYWORD may be:\n\
|
||||
ascii from EBCDIC to ASCII\n\
|
||||
ebcdic from ASCII to EBCDIC\n\
|
||||
ibm from ASCII to alternated EBCDIC\n\
|
||||
block pad newline-terminated records with spaces to cbs-size \n\
|
||||
block pad newline-terminated records with spaces to cbs-size\n\
|
||||
unblock replace trailing spaces in cbs-size records with newline\n\
|
||||
lcase change upper case to lower case\n\
|
||||
ucase change lower case to upper case\n\
|
||||
|
||||
601
src/df.c
601
src/df.c
@@ -32,18 +32,6 @@
|
||||
char *xmalloc ();
|
||||
char *xstrdup ();
|
||||
|
||||
static int selected_fstype __P ((char *fstype));
|
||||
static int excluded_fstype __P ((char *fstype));
|
||||
static void add_excluded_fs_type __P ((char *fstype));
|
||||
static void add_fs_type __P ((char *fstype));
|
||||
static void print_header __P ((void));
|
||||
static void show_entry __P ((char *path, struct stat *statp));
|
||||
static void show_all_entries __P ((void));
|
||||
static void show_dev __P ((char *disk, char *mount_point, char *fstype));
|
||||
static void show_disk __P ((char *disk));
|
||||
static void show_point __P ((char *point, struct stat *statp));
|
||||
static void usage __P ((int status));
|
||||
|
||||
/* The maximum length of a human-readable string. Be pessimistic
|
||||
and assume `int' is 64-bits wide. Converting 2^63 - 1 gives the
|
||||
14-character string, 8796093022208G. The number being converted
|
||||
@@ -79,8 +67,7 @@ static int posix_format;
|
||||
/* If nonzero, invoke the `sync' system call before getting any usage data.
|
||||
Using this option can make df very slow, especially with many or very
|
||||
busy disks. Note that this may make a difference on some systems --
|
||||
SunOs4.1.3, for one. I have been assured that it is *not* necessary
|
||||
on Linux. */
|
||||
SunOs4.1.3, for one. It is *not* necessary on Linux. */
|
||||
static int require_sync = 0;
|
||||
|
||||
/* Nonzero if errors have occurred. */
|
||||
@@ -142,173 +129,6 @@ static struct option const long_options[] =
|
||||
{NULL, 0, NULL, 0}
|
||||
};
|
||||
|
||||
int
|
||||
main (int argc, char **argv)
|
||||
{
|
||||
int i;
|
||||
struct stat *stats;
|
||||
|
||||
program_name = argv[0];
|
||||
setlocale (LC_ALL, "");
|
||||
bindtextdomain (PACKAGE, LOCALEDIR);
|
||||
textdomain (PACKAGE);
|
||||
|
||||
fs_select_list = NULL;
|
||||
fs_exclude_list = NULL;
|
||||
inode_format = 0;
|
||||
show_all_fs = 0;
|
||||
show_listed_fs = 0;
|
||||
|
||||
if (getenv ("POSIXLY_CORRECT"))
|
||||
kilobyte_blocks = 0;
|
||||
else
|
||||
{
|
||||
char *bs;
|
||||
kilobyte_blocks = 1;
|
||||
if ((bs = getenv ("BLOCKSIZE"))
|
||||
&& strncmp (bs, "HUMAN", sizeof ("HUMAN") - 1) == 0)
|
||||
human_blocks = 1;
|
||||
}
|
||||
|
||||
print_type = 0;
|
||||
posix_format = 0;
|
||||
exit_status = 0;
|
||||
|
||||
while ((i = getopt_long (argc, argv, "aihkmPTt:vx:", long_options, NULL))
|
||||
!= EOF)
|
||||
{
|
||||
switch (i)
|
||||
{
|
||||
case 0: /* Long option. */
|
||||
break;
|
||||
case 'a':
|
||||
show_all_fs = 1;
|
||||
break;
|
||||
case 'i':
|
||||
inode_format = 1;
|
||||
break;
|
||||
case 'h':
|
||||
human_blocks = 1;
|
||||
kilobyte_blocks = 1;
|
||||
megabyte_blocks = 0;
|
||||
break;
|
||||
case 'k':
|
||||
human_blocks = 0;
|
||||
kilobyte_blocks = 1;
|
||||
megabyte_blocks = 0;
|
||||
break;
|
||||
case 'm':
|
||||
human_blocks = 0;
|
||||
kilobyte_blocks = 0;
|
||||
megabyte_blocks = 1;
|
||||
break;
|
||||
case 'T':
|
||||
print_type = 1;
|
||||
break;
|
||||
case 'P':
|
||||
posix_format = 1;
|
||||
break;
|
||||
case 129:
|
||||
require_sync = 1;
|
||||
break;
|
||||
case 130:
|
||||
require_sync = 0;
|
||||
break;
|
||||
case 't':
|
||||
add_fs_type (optarg);
|
||||
break;
|
||||
case 'v': /* For SysV compatibility. */
|
||||
break;
|
||||
case 'x':
|
||||
add_excluded_fs_type (optarg);
|
||||
break;
|
||||
default:
|
||||
usage (1);
|
||||
}
|
||||
}
|
||||
|
||||
if (show_version)
|
||||
{
|
||||
printf ("df - %s\n", PACKAGE_VERSION);
|
||||
exit (0);
|
||||
}
|
||||
|
||||
if (show_help)
|
||||
usage (0);
|
||||
|
||||
/* Fail if the same file system type was both selected and excluded. */
|
||||
{
|
||||
int match = 0;
|
||||
struct fs_type_list *i;
|
||||
for (i = fs_select_list; i; i = i->fs_next)
|
||||
{
|
||||
struct fs_type_list *j;
|
||||
for (j = fs_exclude_list; j; j = j->fs_next)
|
||||
{
|
||||
if (strcmp (i->fs_name, j->fs_name) == 0)
|
||||
{
|
||||
error (0, 0,
|
||||
_("file system type `%s' both selected and excluded"),
|
||||
i->fs_name);
|
||||
match = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (match)
|
||||
exit (1);
|
||||
}
|
||||
|
||||
if (optind == argc)
|
||||
{
|
||||
#ifdef lint
|
||||
/* Suppress `used before initialized' warning. */
|
||||
stats = NULL;
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
/* stat all the given entries to make sure they get automounted,
|
||||
if necessary, before reading the filesystem table. */
|
||||
stats = (struct stat *)
|
||||
xmalloc ((argc - optind) * sizeof (struct stat));
|
||||
for (i = optind; i < argc; ++i)
|
||||
if (stat (argv[i], &stats[i - optind]))
|
||||
{
|
||||
error (0, errno, "%s", argv[i]);
|
||||
exit_status = 1;
|
||||
argv[i] = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
mount_list =
|
||||
read_filesystem_list ((fs_select_list != NULL
|
||||
|| fs_exclude_list != NULL
|
||||
|| print_type),
|
||||
show_all_fs);
|
||||
|
||||
if (mount_list == NULL)
|
||||
error (1, errno, _("cannot read table of mounted filesystems"));
|
||||
|
||||
print_header ();
|
||||
if (require_sync)
|
||||
sync ();
|
||||
|
||||
if (optind == argc)
|
||||
show_all_entries ();
|
||||
else
|
||||
{
|
||||
/* Display explicitly requested empty filesystems. */
|
||||
show_listed_fs = 1;
|
||||
|
||||
for (i = optind; i < argc; ++i)
|
||||
if (argv[i])
|
||||
show_entry (argv[i], &stats[i - optind]);
|
||||
}
|
||||
|
||||
exit (exit_status);
|
||||
}
|
||||
|
||||
static void
|
||||
print_header (void)
|
||||
{
|
||||
@@ -332,87 +152,6 @@ print_header (void)
|
||||
printf (" Mounted on\n");
|
||||
}
|
||||
|
||||
/* Show all mounted filesystems, except perhaps those that are of
|
||||
an unselected type or are empty. */
|
||||
|
||||
static void
|
||||
show_all_entries (void)
|
||||
{
|
||||
struct mount_entry *me;
|
||||
|
||||
for (me = mount_list; me; me = me->me_next)
|
||||
show_dev (me->me_devname, me->me_mountdir, me->me_type);
|
||||
}
|
||||
|
||||
/* Determine what kind of node PATH is and show the disk usage
|
||||
for it. STATP is the results of `stat' on PATH. */
|
||||
|
||||
static void
|
||||
show_entry (char *path, struct stat *statp)
|
||||
{
|
||||
if (S_ISBLK (statp->st_mode) || S_ISCHR (statp->st_mode))
|
||||
show_disk (path);
|
||||
else
|
||||
show_point (path, statp);
|
||||
}
|
||||
|
||||
/* Identify the directory, if any, that device
|
||||
DISK is mounted on, and show its disk usage. */
|
||||
|
||||
static void
|
||||
show_disk (char *disk)
|
||||
{
|
||||
struct mount_entry *me;
|
||||
|
||||
for (me = mount_list; me; me = me->me_next)
|
||||
if (!strcmp (disk, me->me_devname))
|
||||
{
|
||||
show_dev (me->me_devname, me->me_mountdir, me->me_type);
|
||||
return;
|
||||
}
|
||||
/* No filesystem is mounted on DISK. */
|
||||
show_dev (disk, (char *) NULL, (char *) NULL);
|
||||
}
|
||||
|
||||
/* Figure out which device file or directory POINT is mounted on
|
||||
and show its disk usage.
|
||||
STATP is the results of `stat' on POINT. */
|
||||
|
||||
static void
|
||||
show_point (char *point, struct stat *statp)
|
||||
{
|
||||
struct stat disk_stats;
|
||||
struct mount_entry *me;
|
||||
|
||||
for (me = mount_list; me; me = me->me_next)
|
||||
{
|
||||
if (me->me_dev == (dev_t) -1)
|
||||
{
|
||||
if (stat (me->me_mountdir, &disk_stats) == 0)
|
||||
me->me_dev = disk_stats.st_dev;
|
||||
else
|
||||
{
|
||||
error (0, errno, "%s", me->me_mountdir);
|
||||
exit_status = 1;
|
||||
/* So we won't try and fail repeatedly. */
|
||||
me->me_dev = (dev_t) -2;
|
||||
}
|
||||
}
|
||||
|
||||
if (statp->st_dev == me->me_dev)
|
||||
{
|
||||
/* Skip bogus mtab entries. */
|
||||
if (stat (me->me_mountdir, &disk_stats) != 0 ||
|
||||
disk_stats.st_dev != me->me_dev)
|
||||
continue;
|
||||
show_dev (me->me_devname, me->me_mountdir, me->me_type);
|
||||
return;
|
||||
}
|
||||
}
|
||||
error (0, 0, _("cannot find mount point for %s"), point);
|
||||
exit_status = 1;
|
||||
}
|
||||
|
||||
/* Convert N_1K_BYTE_BLOCKS to a more readable string than %d would.
|
||||
Most people visually process strings of 3-4 digits effectively,
|
||||
but longer strings of digits are more prone to misinterpretation.
|
||||
@@ -463,20 +202,52 @@ human_readable_1k_blocks (int n_1k_byte_blocks, char *buf, int buf_len)
|
||||
return (p);
|
||||
}
|
||||
|
||||
/* If FSTYPE is a type of filesystem that should be listed,
|
||||
return nonzero, else zero. */
|
||||
|
||||
static int
|
||||
selected_fstype (const char *fstype)
|
||||
{
|
||||
const struct fs_type_list *fsp;
|
||||
|
||||
if (fs_select_list == NULL || fstype == NULL)
|
||||
return 1;
|
||||
for (fsp = fs_select_list; fsp; fsp = fsp->fs_next)
|
||||
if (STREQ (fstype, fsp->fs_name))
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* If FSTYPE is a type of filesystem that should be omitted,
|
||||
return nonzero, else zero. */
|
||||
|
||||
static int
|
||||
excluded_fstype (const char *fstype)
|
||||
{
|
||||
const struct fs_type_list *fsp;
|
||||
|
||||
if (fs_exclude_list == NULL || fstype == NULL)
|
||||
return 0;
|
||||
for (fsp = fs_exclude_list; fsp; fsp = fsp->fs_next)
|
||||
if (STREQ (fstype, fsp->fs_name))
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Display a space listing for the disk device with absolute path DISK.
|
||||
If MOUNT_POINT is non-NULL, it is the path of the root of the
|
||||
filesystem on DISK.
|
||||
If FSTYPE is non-NULL, it is the type of the filesystem on DISK. */
|
||||
|
||||
static void
|
||||
show_dev (char *disk, char *mount_point, char *fstype)
|
||||
show_dev (const char *disk, const char *mount_point, const char *fstype)
|
||||
{
|
||||
struct fs_usage fsu;
|
||||
long blocks_used;
|
||||
long blocks_percent_used;
|
||||
long inodes_used;
|
||||
long inodes_percent_used;
|
||||
char *stat_file;
|
||||
const char *stat_file;
|
||||
|
||||
if (!selected_fstype (fstype) || excluded_fstype (fstype))
|
||||
return;
|
||||
@@ -573,15 +344,96 @@ show_dev (char *disk, char *mount_point, char *fstype)
|
||||
putchar ('\n');
|
||||
}
|
||||
|
||||
/* Identify the directory, if any, that device
|
||||
DISK is mounted on, and show its disk usage. */
|
||||
|
||||
static void
|
||||
show_disk (const char *disk)
|
||||
{
|
||||
struct mount_entry *me;
|
||||
|
||||
for (me = mount_list; me; me = me->me_next)
|
||||
if (STREQ (disk, me->me_devname))
|
||||
{
|
||||
show_dev (me->me_devname, me->me_mountdir, me->me_type);
|
||||
return;
|
||||
}
|
||||
/* No filesystem is mounted on DISK. */
|
||||
show_dev (disk, (char *) NULL, (char *) NULL);
|
||||
}
|
||||
|
||||
/* Figure out which device file or directory POINT is mounted on
|
||||
and show its disk usage.
|
||||
STATP is the results of `stat' on POINT. */
|
||||
|
||||
static void
|
||||
show_point (const char *point, const struct stat *statp)
|
||||
{
|
||||
struct stat disk_stats;
|
||||
struct mount_entry *me;
|
||||
|
||||
for (me = mount_list; me; me = me->me_next)
|
||||
{
|
||||
if (me->me_dev == (dev_t) -1)
|
||||
{
|
||||
if (stat (me->me_mountdir, &disk_stats) == 0)
|
||||
me->me_dev = disk_stats.st_dev;
|
||||
else
|
||||
{
|
||||
error (0, errno, "%s", me->me_mountdir);
|
||||
exit_status = 1;
|
||||
/* So we won't try and fail repeatedly. */
|
||||
me->me_dev = (dev_t) -2;
|
||||
}
|
||||
}
|
||||
|
||||
if (statp->st_dev == me->me_dev)
|
||||
{
|
||||
/* Skip bogus mtab entries. */
|
||||
if (stat (me->me_mountdir, &disk_stats) != 0 ||
|
||||
disk_stats.st_dev != me->me_dev)
|
||||
continue;
|
||||
show_dev (me->me_devname, me->me_mountdir, me->me_type);
|
||||
return;
|
||||
}
|
||||
}
|
||||
error (0, 0, _("cannot find mount point for %s"), point);
|
||||
exit_status = 1;
|
||||
}
|
||||
|
||||
/* Determine what kind of node PATH is and show the disk usage
|
||||
for it. STATP is the results of `stat' on PATH. */
|
||||
|
||||
static void
|
||||
show_entry (const char *path, const struct stat *statp)
|
||||
{
|
||||
if (S_ISBLK (statp->st_mode) || S_ISCHR (statp->st_mode))
|
||||
show_disk (path);
|
||||
else
|
||||
show_point (path, statp);
|
||||
}
|
||||
|
||||
/* Show all mounted filesystems, except perhaps those that are of
|
||||
an unselected type or are empty. */
|
||||
|
||||
static void
|
||||
show_all_entries (void)
|
||||
{
|
||||
struct mount_entry *me;
|
||||
|
||||
for (me = mount_list; me; me = me->me_next)
|
||||
show_dev (me->me_devname, me->me_mountdir, me->me_type);
|
||||
}
|
||||
|
||||
/* Add FSTYPE to the list of filesystem types to display. */
|
||||
|
||||
static void
|
||||
add_fs_type (char *fstype)
|
||||
add_fs_type (const char *fstype)
|
||||
{
|
||||
struct fs_type_list *fsp;
|
||||
|
||||
fsp = (struct fs_type_list *) xmalloc (sizeof (struct fs_type_list));
|
||||
fsp->fs_name = fstype;
|
||||
fsp->fs_name = (char *) fstype;
|
||||
fsp->fs_next = fs_select_list;
|
||||
fs_select_list = fsp;
|
||||
}
|
||||
@@ -589,48 +441,16 @@ add_fs_type (char *fstype)
|
||||
/* Add FSTYPE to the list of filesystem types to be omitted. */
|
||||
|
||||
static void
|
||||
add_excluded_fs_type (char *fstype)
|
||||
add_excluded_fs_type (const char *fstype)
|
||||
{
|
||||
struct fs_type_list *fsp;
|
||||
|
||||
fsp = (struct fs_type_list *) xmalloc (sizeof (struct fs_type_list));
|
||||
fsp->fs_name = fstype;
|
||||
fsp->fs_name = (char *) fstype;
|
||||
fsp->fs_next = fs_exclude_list;
|
||||
fs_exclude_list = fsp;
|
||||
}
|
||||
|
||||
/* If FSTYPE is a type of filesystem that should be listed,
|
||||
return nonzero, else zero. */
|
||||
|
||||
static int
|
||||
selected_fstype (char *fstype)
|
||||
{
|
||||
struct fs_type_list *fsp;
|
||||
|
||||
if (fs_select_list == NULL || fstype == NULL)
|
||||
return 1;
|
||||
for (fsp = fs_select_list; fsp; fsp = fsp->fs_next)
|
||||
if (!strcmp (fstype, fsp->fs_name))
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* If FSTYPE is a type of filesystem that should be omitted,
|
||||
return nonzero, else zero. */
|
||||
|
||||
static int
|
||||
excluded_fstype (char *fstype)
|
||||
{
|
||||
struct fs_type_list *fsp;
|
||||
|
||||
if (fs_exclude_list == NULL || fstype == NULL)
|
||||
return 0;
|
||||
for (fsp = fs_exclude_list; fsp; fsp = fsp->fs_next)
|
||||
if (!strcmp (fstype, fsp->fs_name))
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
usage (int status)
|
||||
{
|
||||
@@ -655,12 +475,187 @@ or all filesystems by default.\n\
|
||||
-x, --exclude-type=TYPE limit listing to filesystems not of type TYPE\n\
|
||||
-v (ignored)\n\
|
||||
-P, --portability use the POSIX output format\n\
|
||||
FIXME: this should override or conflict with --human and --megabytes\n\
|
||||
FIXME-bug: currently, even with --portability, blocksize is 1024 bytes\n\
|
||||
FIXME-bug: make sure that's allowed by POSIX.\n\
|
||||
-T, --print-type print filesystem type\n\
|
||||
--help display this help and exit\n\
|
||||
--version output version information and exit\n"));
|
||||
}
|
||||
exit (status);
|
||||
}
|
||||
|
||||
int
|
||||
main (int argc, char **argv)
|
||||
{
|
||||
int i;
|
||||
struct stat *stats;
|
||||
|
||||
program_name = argv[0];
|
||||
setlocale (LC_ALL, "");
|
||||
bindtextdomain (PACKAGE, LOCALEDIR);
|
||||
textdomain (PACKAGE);
|
||||
|
||||
fs_select_list = NULL;
|
||||
fs_exclude_list = NULL;
|
||||
inode_format = 0;
|
||||
show_all_fs = 0;
|
||||
show_listed_fs = 0;
|
||||
|
||||
if (getenv ("POSIXLY_CORRECT"))
|
||||
kilobyte_blocks = 0;
|
||||
else
|
||||
{
|
||||
char *bs;
|
||||
kilobyte_blocks = 1;
|
||||
if ((bs = getenv ("BLOCKSIZE"))
|
||||
&& strncmp (bs, "HUMAN", sizeof ("HUMAN") - 1) == 0)
|
||||
human_blocks = 1;
|
||||
}
|
||||
|
||||
print_type = 0;
|
||||
posix_format = 0;
|
||||
exit_status = 0;
|
||||
|
||||
while ((i = getopt_long (argc, argv, "aihkmPTt:vx:", long_options, NULL))
|
||||
!= EOF)
|
||||
{
|
||||
switch (i)
|
||||
{
|
||||
case 0: /* Long option. */
|
||||
break;
|
||||
case 'a':
|
||||
show_all_fs = 1;
|
||||
break;
|
||||
case 'i':
|
||||
inode_format = 1;
|
||||
break;
|
||||
case 'h':
|
||||
human_blocks = 1;
|
||||
kilobyte_blocks = 1;
|
||||
megabyte_blocks = 0;
|
||||
break;
|
||||
case 'k':
|
||||
human_blocks = 0;
|
||||
kilobyte_blocks = 1;
|
||||
megabyte_blocks = 0;
|
||||
break;
|
||||
case 'm':
|
||||
human_blocks = 0;
|
||||
kilobyte_blocks = 0;
|
||||
megabyte_blocks = 1;
|
||||
break;
|
||||
case 'T':
|
||||
print_type = 1;
|
||||
break;
|
||||
case 'P':
|
||||
posix_format = 1;
|
||||
break;
|
||||
case 129:
|
||||
require_sync = 1;
|
||||
break;
|
||||
case 130:
|
||||
require_sync = 0;
|
||||
break;
|
||||
case 't':
|
||||
add_fs_type (optarg);
|
||||
break;
|
||||
case 'v': /* For SysV compatibility. */
|
||||
/* ignore */
|
||||
break;
|
||||
case 'x':
|
||||
add_excluded_fs_type (optarg);
|
||||
break;
|
||||
default:
|
||||
usage (1);
|
||||
}
|
||||
}
|
||||
|
||||
if (show_version)
|
||||
{
|
||||
printf ("df - %s\n", PACKAGE_VERSION);
|
||||
exit (0);
|
||||
}
|
||||
|
||||
if (show_help)
|
||||
usage (0);
|
||||
|
||||
if (posix_format && megabyte_blocks)
|
||||
error (1, 0, _("the option for counting 1MB blocks may not be used\n\
|
||||
with the portable output format"));
|
||||
|
||||
if (posix_format && human_blocks)
|
||||
error (1, 0,
|
||||
_("the option for printing with adaptive units may not be used\n\
|
||||
with the portable output format"));
|
||||
|
||||
/* Fail if the same file system type was both selected and excluded. */
|
||||
{
|
||||
int match = 0;
|
||||
struct fs_type_list *i;
|
||||
for (i = fs_select_list; i; i = i->fs_next)
|
||||
{
|
||||
struct fs_type_list *j;
|
||||
for (j = fs_exclude_list; j; j = j->fs_next)
|
||||
{
|
||||
if (STREQ (i->fs_name, j->fs_name))
|
||||
{
|
||||
error (0, 0,
|
||||
_("file system type `%s' both selected and excluded"),
|
||||
i->fs_name);
|
||||
match = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (match)
|
||||
exit (1);
|
||||
}
|
||||
|
||||
if (optind == argc)
|
||||
{
|
||||
#ifdef lint
|
||||
/* Suppress `used before initialized' warning. */
|
||||
stats = NULL;
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
/* stat all the given entries to make sure they get automounted,
|
||||
if necessary, before reading the filesystem table. */
|
||||
stats = (struct stat *)
|
||||
xmalloc ((argc - optind) * sizeof (struct stat));
|
||||
for (i = optind; i < argc; ++i)
|
||||
if (stat (argv[i], &stats[i - optind]))
|
||||
{
|
||||
error (0, errno, "%s", argv[i]);
|
||||
exit_status = 1;
|
||||
argv[i] = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
mount_list =
|
||||
read_filesystem_list ((fs_select_list != NULL
|
||||
|| fs_exclude_list != NULL
|
||||
|| print_type),
|
||||
show_all_fs);
|
||||
|
||||
if (mount_list == NULL)
|
||||
error (1, errno, _("cannot read table of mounted filesystems"));
|
||||
|
||||
print_header ();
|
||||
if (require_sync)
|
||||
sync ();
|
||||
|
||||
if (optind == argc)
|
||||
show_all_entries ();
|
||||
else
|
||||
{
|
||||
/* Display explicitly requested empty filesystems. */
|
||||
show_listed_fs = 1;
|
||||
|
||||
for (i = optind; i < argc; ++i)
|
||||
if (argv[i])
|
||||
show_entry (argv[i], &stats[i - optind]);
|
||||
}
|
||||
|
||||
exit (exit_status);
|
||||
}
|
||||
|
||||
|
||||
527
src/dircolors.c
Normal file
527
src/dircolors.c
Normal file
@@ -0,0 +1,527 @@
|
||||
/* dircolors - output commands to set the LS_COLOR environment variable
|
||||
Copyright (C) 1994, 1995 H. Peter Anvin
|
||||
Copyright (C) 1996 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. */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <ctype.h>
|
||||
#include <getopt.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include "system.h"
|
||||
#include "getline.h"
|
||||
#include "long-options.h"
|
||||
#include "error.h"
|
||||
#include "obstack.h"
|
||||
#include "dircolors.h"
|
||||
|
||||
#define obstack_chunk_alloc xmalloc
|
||||
#define obstack_chunk_free free
|
||||
|
||||
#ifndef STDC_HEADERS
|
||||
void free ();
|
||||
#endif
|
||||
|
||||
char *xmalloc ();
|
||||
char *basename ();
|
||||
char *strndup();
|
||||
|
||||
enum Shell_syntax
|
||||
{
|
||||
SHELL_SYNTAX_BOURNE,
|
||||
SHELL_SYNTAX_C,
|
||||
SHELL_SYNTAX_UNKNOWN
|
||||
};
|
||||
|
||||
#define APPEND_CHAR(C) obstack_1grow (&lsc_obstack, C)
|
||||
#define APPEND_TWO_CHAR_STRING(S) \
|
||||
do \
|
||||
{ \
|
||||
APPEND_CHAR (S[0]); \
|
||||
APPEND_CHAR (S[1]); \
|
||||
} \
|
||||
while (0)
|
||||
|
||||
/* Accumulate in this obstack the value for the LS_COLORS environment
|
||||
variable. */
|
||||
static struct obstack lsc_obstack;
|
||||
|
||||
/* Nonzero if the input file was the standard input. */
|
||||
static int have_read_stdin;
|
||||
|
||||
/* FIXME: associate with ls_codes? */
|
||||
static const char *const slack_codes[] =
|
||||
{
|
||||
"NORMAL", "NORM", "FILE", "DIR", "LNK", "LINK",
|
||||
"SYMLINK", "ORPHAN", "MISSING", "FIFO", "PIPE", "SOCK", "BLK", "BLOCK",
|
||||
"CHR", "CHAR", "EXEC", "LEFT", "LEFTCODE", "RIGHT", "RIGHTCODE", "END",
|
||||
"ENDCODE", NULL
|
||||
};
|
||||
|
||||
static const char *const ls_codes[] =
|
||||
{
|
||||
"no", "no", "fi", "di", "ln", "ln", "ln", "or", "mi", "pi", "pi",
|
||||
"so", "bd", "bd", "cd", "cd", "ex", "lc", "lc", "rc", "rc", "ec", "ec"
|
||||
};
|
||||
|
||||
static struct option const long_options[] =
|
||||
{
|
||||
{"bourne-shell", no_argument, NULL, 'b'},
|
||||
{"sh", no_argument, NULL, 'b'},
|
||||
{"csh", no_argument, NULL, 'c'},
|
||||
{"c-shell", no_argument, NULL, 'c'},
|
||||
{"help", no_argument, NULL, 'h'},
|
||||
{"print-data-base", no_argument, NULL, 'p'},
|
||||
{"print-database", no_argument, NULL, 'p'},
|
||||
{"version", no_argument, NULL, 'v'},
|
||||
};
|
||||
|
||||
char *program_name;
|
||||
|
||||
static void
|
||||
usage (int status)
|
||||
{
|
||||
if (status != 0)
|
||||
fprintf (stderr, _("Try `%s --help' for more information.\n"),
|
||||
program_name);
|
||||
else
|
||||
{
|
||||
printf (_("Usage: %s [OPTION]... [FILE]\n"), program_name);
|
||||
printf (_("\
|
||||
Output commands to set the LS_COLOR environment variable.\n\
|
||||
\n\
|
||||
Determine format of output:\n\
|
||||
-b, --sh, --bourne-shell output Bourne shell code to set LS_COLOR\n\
|
||||
-c, --csh, --c-shell output C shell code to set LS_COLOR\n\
|
||||
-p, --print-data-base output defaults\n\
|
||||
-h, --help display this help and exit\n\
|
||||
--version output version information and exit\n\
|
||||
"));
|
||||
}
|
||||
|
||||
exit (status == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
|
||||
}
|
||||
|
||||
static void *
|
||||
xstrndup (const char *s, size_t n)
|
||||
{
|
||||
char *new = strndup (s, n);
|
||||
if (new == NULL)
|
||||
error (EXIT_FAILURE, 0, _("Memory exhausted"));
|
||||
return new;
|
||||
}
|
||||
|
||||
/* If the SHELL environment variable is set to `csh' or `tcsh,'
|
||||
assume C shell. Else Bourne shell. */
|
||||
|
||||
static enum Shell_syntax
|
||||
guess_shell_syntax (void)
|
||||
{
|
||||
char *shell;
|
||||
|
||||
shell = getenv ("SHELL");
|
||||
if (shell == NULL || *shell == '\0')
|
||||
return SHELL_SYNTAX_UNKNOWN;
|
||||
|
||||
shell = basename (shell);
|
||||
|
||||
if (STREQ (shell, "csh") || STREQ (shell, "tcsh"))
|
||||
return SHELL_SYNTAX_C;
|
||||
|
||||
return SHELL_SYNTAX_BOURNE;
|
||||
}
|
||||
|
||||
static void
|
||||
parse_line (const char *line, char **keyword, char **arg)
|
||||
{
|
||||
const char *p;
|
||||
const char *keyword_start;
|
||||
const char *arg_start;
|
||||
|
||||
*keyword = NULL;
|
||||
*arg = NULL;
|
||||
|
||||
for (p = line; isspace (*p); ++p)
|
||||
;
|
||||
|
||||
/* Ignore blank lines and shell-style comments. */
|
||||
if (*p == '\0' || *p == '#')
|
||||
return;
|
||||
|
||||
keyword_start = p;
|
||||
|
||||
while (!isspace (*p) && *p != '\0')
|
||||
{
|
||||
++p;
|
||||
}
|
||||
|
||||
*keyword = xstrndup (keyword_start, p - keyword_start);
|
||||
if (*p == '\0')
|
||||
return;
|
||||
|
||||
do
|
||||
{
|
||||
++p;
|
||||
}
|
||||
while (isspace (*p));
|
||||
|
||||
if (*p == '\0' || *p == '#')
|
||||
return;
|
||||
|
||||
arg_start = p;
|
||||
|
||||
while (*p != '\0' && *p != '#')
|
||||
++p;
|
||||
|
||||
for (--p; isspace (*p); --p)
|
||||
{
|
||||
/* empty */
|
||||
}
|
||||
++p;
|
||||
|
||||
*arg = xstrndup (arg_start, p - arg_start);
|
||||
}
|
||||
|
||||
/* FIXME: Write a string to standard out, while watching for "dangerous"
|
||||
sequences like unescaped : and = characters. */
|
||||
|
||||
static void
|
||||
append_quoted (const char *str)
|
||||
{
|
||||
int need_backslash = 1;
|
||||
|
||||
while (*str != '\0')
|
||||
{
|
||||
switch (*str)
|
||||
{
|
||||
case '\\':
|
||||
case '^':
|
||||
need_backslash = !need_backslash;
|
||||
break;
|
||||
|
||||
case ':':
|
||||
case '=':
|
||||
if (need_backslash)
|
||||
APPEND_CHAR ('\\');
|
||||
/* Fall through */
|
||||
|
||||
default:
|
||||
need_backslash = 1;
|
||||
break;
|
||||
}
|
||||
|
||||
APPEND_CHAR (*str);
|
||||
++str;
|
||||
}
|
||||
}
|
||||
|
||||
/* Read the file open on FP (with name FILENAME). First, look for a
|
||||
`TERM name' directive where name matches the current terminal type.
|
||||
Once found, translate and accumulate the associated directives onto
|
||||
the global obstack LSC_OBSTACK. Give a diagnostic and return nonzero
|
||||
upon failure (unrecognized keyword is the only way to fail here).
|
||||
Return zero otherwise. */
|
||||
|
||||
static int
|
||||
dc_parse_stream (FILE *fp, const char *filename)
|
||||
{
|
||||
size_t line_number = 0;
|
||||
char *line = NULL;
|
||||
size_t line_chars_allocated = 0;
|
||||
int state;
|
||||
char *term;
|
||||
int err = 0;
|
||||
|
||||
/* State for the parser. */
|
||||
enum states { ST_TERMNO, ST_TERMYES, ST_TERMSURE, ST_GLOBAL };
|
||||
|
||||
state = ST_GLOBAL;
|
||||
|
||||
/* Get terminal type */
|
||||
term = getenv ("TERM");
|
||||
if (term == NULL || *term == '\0')
|
||||
term = "none";
|
||||
|
||||
while (1)
|
||||
{
|
||||
int line_length;
|
||||
char *keywd, *arg;
|
||||
int unrecognized;
|
||||
|
||||
++line_number;
|
||||
|
||||
if (fp)
|
||||
{
|
||||
line_length = getline (&line, &line_chars_allocated, fp);
|
||||
if (line_length <= 0)
|
||||
{
|
||||
if (line)
|
||||
free (line);
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
line = (char *) (G_line[line_number - 1]);
|
||||
line_length = G_line_length[line_number - 1];
|
||||
if (line_number > G_N_LINES)
|
||||
break;
|
||||
}
|
||||
|
||||
parse_line (line, &keywd, &arg);
|
||||
|
||||
if (keywd == NULL)
|
||||
continue;
|
||||
|
||||
unrecognized = 0;
|
||||
if (strcasecmp (keywd, "TERM") == 0)
|
||||
{
|
||||
if (strcmp (arg, term) == 0)
|
||||
state = ST_TERMSURE;
|
||||
else if (state != ST_TERMSURE)
|
||||
state = ST_TERMNO;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (state == ST_TERMSURE)
|
||||
state = ST_TERMYES; /* Another TERM can cancel */
|
||||
|
||||
if (state != ST_TERMNO)
|
||||
{
|
||||
if (keywd[0] == '.')
|
||||
{
|
||||
APPEND_CHAR ('*');
|
||||
append_quoted (keywd);
|
||||
APPEND_CHAR ('=');
|
||||
append_quoted (arg);
|
||||
APPEND_CHAR (':');
|
||||
}
|
||||
else if (keywd[0] == '*')
|
||||
{
|
||||
append_quoted (keywd);
|
||||
APPEND_CHAR ('=');
|
||||
append_quoted (arg);
|
||||
APPEND_CHAR (':');
|
||||
}
|
||||
else if (strcasecmp (keywd, "OPTIONS") == 0
|
||||
|| strcasecmp (keywd, "COLOR") == 0
|
||||
|| strcasecmp (keywd, "EIGHTBIT") == 0)
|
||||
{
|
||||
/* Ignore. */
|
||||
}
|
||||
else
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; slack_codes[i] != NULL; ++i)
|
||||
if (strcasecmp (keywd, slack_codes[i]) == 0)
|
||||
break;
|
||||
|
||||
if (slack_codes[i] != NULL)
|
||||
{
|
||||
APPEND_TWO_CHAR_STRING (ls_codes[i]);
|
||||
APPEND_CHAR ('=');
|
||||
append_quoted (arg);
|
||||
APPEND_CHAR (':');
|
||||
}
|
||||
else
|
||||
{
|
||||
unrecognized = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
unrecognized = 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (unrecognized && (state == ST_TERMSURE || state == ST_TERMYES))
|
||||
{
|
||||
error (0, 0, _("%s:%lu: unrecognized keyword `%s'"),
|
||||
filename, (long unsigned) line_number, keywd);
|
||||
err = 1;
|
||||
}
|
||||
|
||||
free (keywd);
|
||||
if (arg)
|
||||
free (arg);
|
||||
}
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
static int
|
||||
dc_parse_file (const char *filename)
|
||||
{
|
||||
FILE *fp;
|
||||
int err;
|
||||
|
||||
if (strcmp (filename, "-") == 0)
|
||||
{
|
||||
have_read_stdin = 1;
|
||||
fp = stdin;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* OPENOPTS is a macro. It varies with the system.
|
||||
Some systems distinguish between internal and
|
||||
external text representations. */
|
||||
|
||||
fp = fopen (filename, "r");
|
||||
if (fp == NULL)
|
||||
{
|
||||
error (0, errno, "%s", filename);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
err = dc_parse_stream (fp, filename);
|
||||
|
||||
if (fp != stdin && fclose (fp) == EOF)
|
||||
{
|
||||
error (0, errno, "%s", filename);
|
||||
return 1;
|
||||
}
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
int
|
||||
main (int argc, char **argv)
|
||||
{
|
||||
int err = 0;
|
||||
int optc;
|
||||
enum Shell_syntax syntax = SHELL_SYNTAX_UNKNOWN;
|
||||
int print_database = 0;
|
||||
|
||||
program_name = argv[0];
|
||||
setlocale (LC_ALL, "");
|
||||
bindtextdomain (PACKAGE, LOCALEDIR);
|
||||
textdomain (PACKAGE);
|
||||
|
||||
parse_long_options (argc, argv, "dircolors", PACKAGE_VERSION, usage);
|
||||
|
||||
while ((optc = getopt_long (argc, argv, "bcp", long_options, NULL))
|
||||
!= EOF)
|
||||
switch (optc)
|
||||
{
|
||||
case 'b': /* Bourne shell syntax. */
|
||||
syntax = SHELL_SYNTAX_BOURNE;
|
||||
break;
|
||||
|
||||
case 'c': /* C shell syntax. */
|
||||
syntax = SHELL_SYNTAX_C;
|
||||
break;
|
||||
|
||||
case 'p':
|
||||
print_database = 1;
|
||||
break;
|
||||
|
||||
default:
|
||||
usage (1);
|
||||
}
|
||||
|
||||
argc -= optind;
|
||||
argv += optind;
|
||||
|
||||
/* It doesn't make sense to use --print with either of
|
||||
--bourne or --c-shell. */
|
||||
if (print_database && syntax != SHELL_SYNTAX_UNKNOWN)
|
||||
{
|
||||
error (0, 0,
|
||||
_("the options to output dircolors' internal database and\n\
|
||||
to select a shell syntax are mutually exclusive"));
|
||||
usage (1);
|
||||
}
|
||||
|
||||
if (print_database && argc > 0)
|
||||
{
|
||||
error (0, 0,
|
||||
_("no FILE arguments may be used with the option to output\n\
|
||||
dircolors' internal database"));
|
||||
usage (1);
|
||||
}
|
||||
|
||||
if (!print_database && argc > 1)
|
||||
{
|
||||
error (0, 0, _("too many arguments"));
|
||||
usage (1);
|
||||
}
|
||||
|
||||
if (print_database)
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < G_N_LINES; i++)
|
||||
{
|
||||
fwrite (G_line[i], 1, G_line_length[i], stdout);
|
||||
fputc ('\n', stdout);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* If shell syntax was not explicitly specified, try to guess it. */
|
||||
if (syntax == SHELL_SYNTAX_UNKNOWN)
|
||||
{
|
||||
syntax = guess_shell_syntax ();
|
||||
if (syntax == SHELL_SYNTAX_UNKNOWN)
|
||||
{
|
||||
error (EXIT_FAILURE, 0,
|
||||
_("no SHELL environment variable, and no shell type option given"));
|
||||
}
|
||||
}
|
||||
|
||||
obstack_init (&lsc_obstack);
|
||||
if (argc == 0)
|
||||
err = dc_parse_stream (NULL, NULL);
|
||||
else
|
||||
err = dc_parse_file (argv[0]);
|
||||
|
||||
if (!err)
|
||||
{
|
||||
size_t len = obstack_object_size (&lsc_obstack);
|
||||
char *s = obstack_finish (&lsc_obstack);
|
||||
const char *prefix;
|
||||
const char *suffix;
|
||||
|
||||
if (syntax == SHELL_SYNTAX_BOURNE)
|
||||
{
|
||||
prefix = "LS_COLORS='";
|
||||
suffix = "';\nexport LS_COLORS\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
prefix = "setenv LS_COLORS '";
|
||||
suffix = "'\n";
|
||||
}
|
||||
fputs (prefix, stdout);
|
||||
fwrite (s, 1, len, stdout);
|
||||
fputs (suffix, stdout);
|
||||
}
|
||||
}
|
||||
|
||||
if (fclose (stdout) == EOF)
|
||||
error (EXIT_FAILURE, errno, _("write error"));
|
||||
|
||||
if (have_read_stdin && fclose (stdin) == EOF)
|
||||
error (EXIT_FAILURE, errno, _("standard input"));
|
||||
|
||||
exit (err == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
|
||||
}
|
||||
72
src/dircolors.hin
Normal file
72
src/dircolors.hin
Normal file
@@ -0,0 +1,72 @@
|
||||
# Configuration file for dircolors, a utility to help you set the
|
||||
# LS_COLORS environment variable used by GNU ls with the --color option.
|
||||
|
||||
# The keywords COLOR, OPTIONS, and EIGHTBIT (honored by the
|
||||
# slackware version of dircolors) are recognized but ignored.
|
||||
|
||||
# Below, there should be one TERM entry for each termtype that is colorizable
|
||||
TERM linux
|
||||
TERM console
|
||||
TERM con132x25
|
||||
TERM con132x30
|
||||
TERM con132x43
|
||||
TERM con132x60
|
||||
TERM con80x25
|
||||
TERM con80x28
|
||||
TERM con80x30
|
||||
TERM con80x43
|
||||
TERM con80x50
|
||||
TERM con80x60
|
||||
TERM xterm
|
||||
TERM vt100
|
||||
|
||||
# Below are the color init strings for the basic file types. A color init
|
||||
# string consists of one or more of the following numeric codes:
|
||||
# Attribute codes:
|
||||
# 00=none 01=bold 04=underscore 05=blink 07=reverse 08=concealed
|
||||
# Text color codes:
|
||||
# 30=black 31=red 32=green 33=yellow 34=blue 35=magenta 36=cyan 37=white
|
||||
# Background color codes:
|
||||
# 40=black 41=red 42=green 43=yellow 44=blue 45=magenta 46=cyan 47=white
|
||||
NORMAL 00 # global default, although everything should be something.
|
||||
FILE 00 # normal file
|
||||
DIR 01;34 # directory
|
||||
LINK 01;36 # symbolic link
|
||||
FIFO 40;33 # pipe
|
||||
SOCK 01;35 # socket
|
||||
BLK 40;33;01 # block device driver
|
||||
CHR 40;33;01 # character device driver
|
||||
|
||||
# This is for files with execute permission:
|
||||
EXEC 01;32
|
||||
|
||||
# List any file extensions like '.gz' or '.tar' that you would like ls
|
||||
# to colorize below. Put the extension, a space, and the color init string.
|
||||
# (and any comments you want to add after a '#')
|
||||
.cmd 01;32 # executables (bright green)
|
||||
.exe 01;32
|
||||
.com 01;32
|
||||
.btm 01;32
|
||||
.bat 01;32
|
||||
.tar 01;31 # archives or compressed (bright red)
|
||||
.tgz 01;31
|
||||
.arj 01;31
|
||||
.taz 01;31
|
||||
.lzh 01;31
|
||||
.zip 01;31
|
||||
.z 01;31
|
||||
.Z 01;31
|
||||
.gz 01;31
|
||||
.deb 01;31
|
||||
.jpg 01;35 # image formats
|
||||
.gif 01;35
|
||||
.bmp 01;35
|
||||
.ppm 01;35
|
||||
.tga 01;35
|
||||
.xbm 01;35
|
||||
.xpm 01;35
|
||||
.tif 01;35
|
||||
.mpg 01;37
|
||||
.avi 01;37
|
||||
.gl 01;37
|
||||
.dl 01;37
|
||||
@@ -69,7 +69,8 @@ main (int argc, char **argv)
|
||||
|
||||
if (argc != 2)
|
||||
{
|
||||
error (0, 0, _("too %s arguments"), argc < 2 ? _("few") : _("many"));
|
||||
error (0, 0, argc < 2 ? _("too few arguments")
|
||||
: _("too many arguments"));
|
||||
usage (1);
|
||||
}
|
||||
|
||||
|
||||
@@ -109,7 +109,9 @@ main (int argc, char **argv)
|
||||
bindtextdomain (PACKAGE, LOCALEDIR);
|
||||
textdomain (PACKAGE);
|
||||
|
||||
parse_long_options (argc, argv, "echo", PACKAGE_VERSION, usage);
|
||||
/* Don't recognize --help or --version if POSIXLY_CORRECT is set. */
|
||||
if (getenv ("POSIXLY_CORRECT") == NULL)
|
||||
parse_long_options (argc, argv, "echo", PACKAGE_VERSION, usage);
|
||||
|
||||
/* System V machines already have a /bin/sh with a v9 behaviour. We
|
||||
use the identical behaviour for these machines so that the
|
||||
|
||||
14
src/expr.c
14
src/expr.c
@@ -158,7 +158,9 @@ main (int argc, char **argv)
|
||||
bindtextdomain (PACKAGE, LOCALEDIR);
|
||||
textdomain (PACKAGE);
|
||||
|
||||
parse_long_options (argc, argv, "expr", PACKAGE_VERSION, usage);
|
||||
/* Don't recognize --help or --version if POSIXLY_CORRECT is set. */
|
||||
if (getenv ("POSIXLY_CORRECT") == NULL)
|
||||
parse_long_options (argc, argv, "expr", PACKAGE_VERSION, usage);
|
||||
|
||||
if (argc == 1)
|
||||
{
|
||||
@@ -419,13 +421,21 @@ docolon (VALUE *sv, VALUE *pv)
|
||||
tostring (sv);
|
||||
tostring (pv);
|
||||
|
||||
if (pv->u.s[0] == '^')
|
||||
{
|
||||
error (0, 0, _("\
|
||||
warning: unportable BRE: `%s': using `^' as the first character\n\
|
||||
of the basic regular expression is not portable; it is being ignored"),
|
||||
pv->u.s);
|
||||
}
|
||||
|
||||
len = strlen (pv->u.s);
|
||||
memset (&re_buffer, 0, sizeof (re_buffer));
|
||||
memset (&re_regs, 0, sizeof (re_regs));
|
||||
re_buffer.allocated = 2 * len;
|
||||
re_buffer.buffer = (unsigned char *) xmalloc (re_buffer.allocated);
|
||||
re_buffer.translate = 0;
|
||||
re_syntax_options = RE_SYNTAX_POSIX_MINIMAL_BASIC;
|
||||
re_syntax_options = RE_SYNTAX_POSIX_BASIC;
|
||||
errmsg = re_compile_pattern (pv->u.s, len, &re_buffer);
|
||||
if (errmsg)
|
||||
error (2, 0, "%s", errmsg);
|
||||
|
||||
@@ -65,7 +65,7 @@
|
||||
|
||||
typedef long COST;
|
||||
|
||||
#define MAXCOST (~(((COST) 1) << (8 * sizeof (COST) -1)))
|
||||
#define MAXCOST (~(((unsigned long) 1) << (8 * sizeof (COST) -1)))
|
||||
|
||||
#define SQR(n) ((n) * (n))
|
||||
#define EQUIV(n) SQR ((COST) (n))
|
||||
@@ -575,8 +575,9 @@ copy_rest (FILE *f, register int c)
|
||||
if (in_column > next_prefix_indent && c != '\n' && c != EOF)
|
||||
{
|
||||
put_space (next_prefix_indent);
|
||||
for (s = prefix; out_column != in_column; out_column++)
|
||||
for (s = prefix; out_column != in_column && *s; out_column++)
|
||||
putchar (*s++);
|
||||
put_space (in_column - out_column);
|
||||
}
|
||||
while (c != '\n' && c != EOF)
|
||||
{
|
||||
|
||||
65
src/id.c
65
src/id.c
@@ -218,7 +218,41 @@ print_group (int gid)
|
||||
printf ("%s", grp->gr_name);
|
||||
}
|
||||
|
||||
/* Print all of the distinct groups the user is in . */
|
||||
static int
|
||||
xgetgroups (const char *username, int *n_groups, GETGROUPS_T **groups)
|
||||
{
|
||||
int max_n_groups;
|
||||
int ng;
|
||||
GETGROUPS_T *g;
|
||||
int fail = 0;
|
||||
|
||||
if (username == 0)
|
||||
max_n_groups = getgroups (0, NULL);
|
||||
else
|
||||
max_n_groups = getugroups (0, NULL, username);
|
||||
|
||||
/* Add 1 just in case max_n_groups is zero. */
|
||||
g = (GETGROUPS_T *) xmalloc (max_n_groups * sizeof (GETGROUPS_T) + 1);
|
||||
if (username == 0)
|
||||
ng = getgroups (max_n_groups, g);
|
||||
else
|
||||
ng = getugroups (max_n_groups, g, username);
|
||||
|
||||
if (ng < 0)
|
||||
{
|
||||
error (0, errno, _("cannot get supplemental group list"));
|
||||
++fail;
|
||||
free (groups);
|
||||
}
|
||||
if (!fail)
|
||||
{
|
||||
*n_groups = ng;
|
||||
*groups = g;
|
||||
}
|
||||
return fail;
|
||||
}
|
||||
|
||||
/* Print all of the distinct groups the user is in. */
|
||||
|
||||
static void
|
||||
print_group_list (char *username)
|
||||
@@ -232,23 +266,13 @@ print_group_list (char *username)
|
||||
|
||||
#if HAVE_GETGROUPS
|
||||
{
|
||||
int ng, n_groups;
|
||||
int n_groups;
|
||||
GETGROUPS_T *groups;
|
||||
register int i;
|
||||
|
||||
n_groups = getgroups (0, NULL);
|
||||
/* Add 1 just in case n_groups is zero. */
|
||||
groups = (GETGROUPS_T *) xmalloc (n_groups * sizeof (GETGROUPS_T) + 1);
|
||||
if (username == 0)
|
||||
ng = getgroups (n_groups, groups);
|
||||
else
|
||||
ng = getugroups (n_groups, groups, username);
|
||||
|
||||
if (ng < 0)
|
||||
if (xgetgroups (username, &n_groups, &groups))
|
||||
{
|
||||
error (0, errno, _("cannot get supplemental group list"));
|
||||
++problems;
|
||||
free (groups);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -307,22 +331,13 @@ print_full_info (char *username)
|
||||
|
||||
#if HAVE_GETGROUPS
|
||||
{
|
||||
int ng, n_groups;
|
||||
int n_groups;
|
||||
GETGROUPS_T *groups;
|
||||
register int i;
|
||||
|
||||
n_groups = getgroups (0, NULL);
|
||||
/* Add 1 just in case n_groups is zero. */
|
||||
groups = (GETGROUPS_T *) xmalloc (n_groups * sizeof (GETGROUPS_T) + 1);
|
||||
if (username == 0)
|
||||
ng = getgroups (n_groups, groups);
|
||||
else
|
||||
ng = getugroups (n_groups, groups, username);
|
||||
if (ng < 0)
|
||||
if (xgetgroups (username, &n_groups, &groups))
|
||||
{
|
||||
error (0, errno, _("cannot get supplemental group list"));
|
||||
problems++;
|
||||
free (groups);
|
||||
++problems;
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -102,11 +102,13 @@ int wait ();
|
||||
#define READ_SIZE (32 * 1024)
|
||||
|
||||
#ifndef UID_T_MAX
|
||||
# define UID_T_MAX ((uid_t)(~((uid_t)1 << (sizeof (uid_t) * BITSPERBYTE - 1))))
|
||||
# define UID_T_MAX ((uid_t)(~((unsigned long)1 << ((sizeof (uid_t) \
|
||||
* BITSPERBYTE - 1)))))
|
||||
#endif
|
||||
|
||||
#ifndef GID_T_MAX
|
||||
# define GID_T_MAX ((gid_t)(~((gid_t)1 << (sizeof (gid_t) * BITSPERBYTE - 1))))
|
||||
# define GID_T_MAX ((gid_t)(~((unsigned long)1 << ((sizeof (gid_t) \
|
||||
* BITSPERBYTE - 1)))))
|
||||
#endif
|
||||
|
||||
char *basename ();
|
||||
@@ -584,7 +586,7 @@ usage (int status)
|
||||
printf (_("\
|
||||
Usage: %s [OPTION]... SOURCE DEST (1st format)\n\
|
||||
or: %s [OPTION]... SOURCE... DIRECTORY (2nd format)\n\
|
||||
or: %s -d [OPTION]... DIRECTORY... (3nd format)\n\
|
||||
or: %s -d [OPTION]... DIRECTORY... (3rd format)\n\
|
||||
"),
|
||||
program_name, program_name, program_name);
|
||||
printf (_("\
|
||||
@@ -604,6 +606,8 @@ format, make all components of the given DIRECTORY(ies).\n\
|
||||
--help display this help and exit\n\
|
||||
--version output version information and exit\n\
|
||||
\n\
|
||||
"));
|
||||
printf (_("\
|
||||
The backup suffix is ~, unless set with SIMPLE_BACKUP_SUFFIX. The\n\
|
||||
version control may be set with VERSION_CONTROL, values are:\n\
|
||||
\n\
|
||||
|
||||
67
src/ln.c
67
src/ln.c
@@ -37,9 +37,9 @@ int symlink ();
|
||||
#endif
|
||||
|
||||
#ifdef S_ISLNK
|
||||
# define SYMBOLIC_SPACE_STRING symbolic_link ? _("symbolic ") : ""
|
||||
# define LINK_TYPE symbolic_link ? _("symbolic link") : _("hard link")
|
||||
#else
|
||||
# define SYMBOLIC_SPACE_STRING ""
|
||||
# define LINK_TYPE ""
|
||||
#endif
|
||||
|
||||
/* Construct a string NEW_DEST by concatenating DEST, a slash, and
|
||||
@@ -63,6 +63,7 @@ int symlink ();
|
||||
while (0)
|
||||
|
||||
char *basename ();
|
||||
char *dirname ();
|
||||
enum backup_type get_version ();
|
||||
int isdir ();
|
||||
int yesno ();
|
||||
@@ -119,13 +120,44 @@ static struct option const long_options[] =
|
||||
{NULL, 0, NULL, 0}
|
||||
};
|
||||
|
||||
/* Return nonzero if SOURCE and DEST point to the same name in the same
|
||||
directory. */
|
||||
|
||||
static int
|
||||
same_name (const char *source, const char *dest)
|
||||
{
|
||||
struct stat source_dir_stats;
|
||||
struct stat dest_dir_stats;
|
||||
char *source_dirname, *dest_dirname;
|
||||
|
||||
source_dirname = dirname (source);
|
||||
dest_dirname = dirname (dest);
|
||||
if (source_dirname == NULL || dest_dirname == NULL)
|
||||
error (1, 0, _("virtual memory exhausted"));
|
||||
|
||||
if (stat (source_dirname, &source_dir_stats))
|
||||
/* Shouldn't happen. */
|
||||
error (1, errno, "%s", source_dirname);
|
||||
|
||||
if (stat (dest_dirname, &dest_dir_stats))
|
||||
/* Shouldn't happen. */
|
||||
error (1, errno, "%s", dest_dirname);
|
||||
|
||||
free (source_dirname);
|
||||
free (dest_dirname);
|
||||
|
||||
return (source_dir_stats.st_dev == dest_dir_stats.st_dev
|
||||
&& source_dir_stats.st_ino == dest_dir_stats.st_ino
|
||||
&& STREQ (basename (source), basename (dest)));
|
||||
}
|
||||
|
||||
/* Make a link DEST to the (usually) existing file SOURCE.
|
||||
Symbolic links to nonexistent files are allowed.
|
||||
If DEST is a directory, put the link to SOURCE in that directory.
|
||||
Return 1 if there is an error, otherwise 0. */
|
||||
|
||||
static int
|
||||
do_link (char *source, char *dest)
|
||||
do_link (const char *source, const char *dest)
|
||||
{
|
||||
struct stat source_stats;
|
||||
struct stat dest_stats;
|
||||
@@ -158,14 +190,27 @@ do_link (char *source, char *dest)
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* If --force (-f) has been specified, before making a link ln must
|
||||
remove the destination file if it exists. But if the source and
|
||||
destination are the same, don't remove anything and fail right here. */
|
||||
/* If --force (-f) has been specified without --backup, then before
|
||||
making a link ln must remove the destination file if it exists.
|
||||
(with --backup, it just renames any existing destination file)
|
||||
But if the source and destination are the same, don't remove
|
||||
anything and fail right here. */
|
||||
if (remove_existing_files
|
||||
&& lstat_status == 0
|
||||
/* Allow `ln -sf --backup k k' to succeed in creating the
|
||||
self-referential symlink, but don't allow the hard-linking
|
||||
equivalent: `ln -f k k' (with or without --backup) to get
|
||||
beyond this point, because the error message you'd get is
|
||||
misleading. */
|
||||
&& (backup_type == none || !symlink)
|
||||
&& (!symlink || stat (source, &source_stats) == 0)
|
||||
&& source_stats.st_dev == dest_stats.st_dev
|
||||
&& source_stats.st_ino == dest_stats.st_ino)
|
||||
&& source_stats.st_ino == dest_stats.st_ino
|
||||
/* The following detects whether removing DEST will also remove
|
||||
SOURCE. If the file has only one link then both are surely
|
||||
the same link. Otherwise check whether they point to the same
|
||||
name in the same directory. */
|
||||
&& (source_stats.st_nlink == 1 || same_name (source, dest)))
|
||||
{
|
||||
error (0, 0, _("`%s' and `%s' are the same file"), source, dest);
|
||||
return 1;
|
||||
@@ -244,7 +289,7 @@ do_link (char *source, char *dest)
|
||||
}
|
||||
|
||||
if (verbose)
|
||||
printf (_("create %slink %s to %s\n"), SYMBOLIC_SPACE_STRING,
|
||||
printf (_("create %s %s to %s\n"), LINK_TYPE,
|
||||
dest, source);
|
||||
|
||||
if ((*linkfunc) (source, dest) == 0)
|
||||
@@ -252,8 +297,8 @@ do_link (char *source, char *dest)
|
||||
return 0;
|
||||
}
|
||||
|
||||
error (0, errno, _("cannot %slink `%s' to `%s'"), SYMBOLIC_SPACE_STRING,
|
||||
source, dest);
|
||||
error (0, errno, _("cannot create %s `%s' to `%s'"), LINK_TYPE,
|
||||
dest, source);
|
||||
|
||||
if (dest_backup)
|
||||
{
|
||||
@@ -293,6 +338,8 @@ Makes hard links by default, symbolic links with -s.\n\
|
||||
--help display this help and exit\n\
|
||||
--version output version information and exit\n\
|
||||
\n\
|
||||
"));
|
||||
printf (_("\
|
||||
The backup suffix is ~, unless set with SIMPLE_BACKUP_SUFFIX. The\n\
|
||||
version control may be set with VERSION_CONTROL, values are:\n\
|
||||
\n\
|
||||
|
||||
166
src/md5sum.c
166
src/md5sum.c
@@ -59,6 +59,13 @@
|
||||
# define TOLOWER(c) (ISUPPER (c) ? tolower (c) : (c))
|
||||
#endif
|
||||
|
||||
/* The minimum length of a valid digest line in a file produced
|
||||
by `md5sum FILE' and read by `md5sum --check'. This length does
|
||||
not include any newline character at the end of a line. */
|
||||
#define MIN_DIGEST_LINE_LENGTH (32 /* message digest length */ \
|
||||
+ 2 /* blank and binary indicator */ \
|
||||
+ 1 /* minimum filename length */ )
|
||||
|
||||
/* Nonzero if any of the files read were the standard input. */
|
||||
static int have_read_stdin;
|
||||
|
||||
@@ -121,12 +128,11 @@ text), and name for each FILE.\n"),
|
||||
exit (status == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
|
||||
}
|
||||
|
||||
/* FIXME: this format loses with filenames containing newline. */
|
||||
|
||||
static int
|
||||
split_3 (char *s, char **u, int *binary, char **w)
|
||||
split_3 (char *s, size_t s_len, char **u, int *binary, char **w)
|
||||
{
|
||||
size_t i;
|
||||
int filename_has_newline = 0;
|
||||
|
||||
#define ISWHITE(c) ((c) == ' ' || (c) == '\t')
|
||||
|
||||
@@ -134,34 +140,82 @@ split_3 (char *s, char **u, int *binary, char **w)
|
||||
while (ISWHITE (s[i]))
|
||||
++i;
|
||||
|
||||
/* The line has to be at least 35 characters long to contain correct
|
||||
message digest information. */
|
||||
if (strlen (&s[i]) >= 35)
|
||||
/* The line must have at least 35 (36 if the first is a backslash)
|
||||
more characters to contain correct message digest information.
|
||||
Ignore this line if it is too short. */
|
||||
if (!(s_len - i >= MIN_DIGEST_LINE_LENGTH
|
||||
|| (s[i] == '\\' && s_len - i >= 1 + MIN_DIGEST_LINE_LENGTH)))
|
||||
return 1;
|
||||
|
||||
if (s[i] == '\\')
|
||||
{
|
||||
*u = &s[i];
|
||||
|
||||
/* The first field has to be the 32-character hexadecimal
|
||||
representation of the message digest. If it not immediately
|
||||
followed by a white space it's an error. */
|
||||
i += 32;
|
||||
if (!ISWHITE (s[i]))
|
||||
return 1;
|
||||
|
||||
s[i++] = '\0';
|
||||
|
||||
if (s[i] != ' ' && s[i] != '*')
|
||||
return 1;
|
||||
*binary = s[i++] == '*';
|
||||
|
||||
/* All characters between the type indicator and end of line are
|
||||
significant -- that includes leading and trailing white space. */
|
||||
*w = &s[i];
|
||||
|
||||
/* So this line is valid as long as there is at least one character
|
||||
for the filename. */
|
||||
return (**w ? 0 : 1);
|
||||
++i;
|
||||
filename_has_newline = 1;
|
||||
}
|
||||
return 1;
|
||||
*u = &s[i];
|
||||
|
||||
/* The first field has to be the 32-character hexadecimal
|
||||
representation of the message digest. If it is not followed
|
||||
immediately by a white space it's an error. */
|
||||
i += 32;
|
||||
if (!ISWHITE (s[i]))
|
||||
return 1;
|
||||
|
||||
s[i++] = '\0';
|
||||
|
||||
if (s[i] != ' ' && s[i] != '*')
|
||||
return 1;
|
||||
*binary = (s[i++] == '*');
|
||||
|
||||
/* All characters between the type indicator and end of line are
|
||||
significant -- that includes leading and trailing white space. */
|
||||
*w = &s[i];
|
||||
|
||||
if (filename_has_newline)
|
||||
{
|
||||
/* Translate each `\n' string in the file name to a NEWLINE,
|
||||
and each `\\' string to a backslash. */
|
||||
|
||||
char *dst = &s[i];
|
||||
|
||||
while (i < s_len)
|
||||
{
|
||||
switch (s[i])
|
||||
{
|
||||
case '\\':
|
||||
if (i == s_len - 1)
|
||||
{
|
||||
/* A valid line does not end with a backslash. */
|
||||
return 1;
|
||||
}
|
||||
++i;
|
||||
switch (s[i++])
|
||||
{
|
||||
case 'n':
|
||||
*dst++ = '\n';
|
||||
break;
|
||||
case '\\':
|
||||
*dst++ = '\\';
|
||||
break;
|
||||
default:
|
||||
/* Only `\' or `n' may follow a backslash. */
|
||||
return 1;
|
||||
}
|
||||
break;
|
||||
|
||||
case '\0':
|
||||
/* The file name may not contain a NUL. */
|
||||
return 1;
|
||||
break;
|
||||
|
||||
default:
|
||||
*dst++ = s[i++];
|
||||
break;
|
||||
}
|
||||
}
|
||||
*dst = '\0';
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
@@ -176,7 +230,9 @@ hex_digits (const char *s)
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* FIXME: allow newline in filename by encoding it. */
|
||||
/* An interface to md5_stream. Operate on FILENAME (it may be "-") and
|
||||
put the result in *MD5_RESULT. Return non-zero upon failure, zero
|
||||
to indicate success. */
|
||||
|
||||
static int
|
||||
md5_file (const char *filename, int binary, unsigned char *md5_result)
|
||||
@@ -274,7 +330,7 @@ md5_check (const char *checkfile_name, int binary)
|
||||
if (line[line_length - 1] == '\n')
|
||||
line[--line_length] = '\0';
|
||||
|
||||
err = split_3 (line, &md5num, &type_flag, &filename);
|
||||
err = split_3 (line, line_length, &md5num, &type_flag, &filename);
|
||||
if (err || !hex_digits (md5num))
|
||||
{
|
||||
if (warn)
|
||||
@@ -362,17 +418,19 @@ md5_check (const char *checkfile_name, int binary)
|
||||
if (n_open_or_read_failures > 0)
|
||||
{
|
||||
error (0, 0,
|
||||
_("WARNING: %d of %d listed file%s could not be read\n"),
|
||||
_("WARNING: %d of %d listed %s could not be read\n"),
|
||||
n_open_or_read_failures, n_properly_formated_lines,
|
||||
(n_properly_formated_lines == 1 ? "" : "s"));
|
||||
(n_properly_formated_lines == 1
|
||||
? _("file") : _("files")));
|
||||
}
|
||||
|
||||
if (n_mismatched_checksums > 0)
|
||||
{
|
||||
error (0, 0,
|
||||
_("WARNING: %d of %d computed checksum%s did NOT match"),
|
||||
_("WARNING: %d of %d computed %s did NOT match"),
|
||||
n_mismatched_checksums, n_computed_checkums,
|
||||
(n_computed_checkums == 1 ? "" : "s"));
|
||||
(n_computed_checkums == 1
|
||||
? _("checksum") : _("checksums")));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -504,17 +562,49 @@ main (int argc, char **argv)
|
||||
|
||||
for (; optind < argc; ++optind)
|
||||
{
|
||||
size_t i;
|
||||
int fail;
|
||||
char *file = argv[optind];
|
||||
|
||||
fail = md5_file (argv[optind], binary, md5buffer);
|
||||
fail = md5_file (file, binary, md5buffer);
|
||||
err |= fail;
|
||||
if (!fail)
|
||||
{
|
||||
size_t i;
|
||||
|
||||
/* Output a leading backslash if the file name contains
|
||||
a newline. */
|
||||
if (strchr (file, '\n'))
|
||||
putchar ('\\');
|
||||
|
||||
for (i = 0; i < 16; ++i)
|
||||
printf ("%02x", md5buffer[i]);
|
||||
|
||||
printf (" %c%s\n", binary ? '*' : ' ', argv[optind]);
|
||||
putchar (' ');
|
||||
if (binary)
|
||||
putchar ('*');
|
||||
else
|
||||
putchar (' ');
|
||||
|
||||
/* Translate each NEWLINE byte to the string, "\\n",
|
||||
and each backslash to "\\\\". */
|
||||
for (i = 0; i < strlen (file); ++i)
|
||||
{
|
||||
switch (file[i])
|
||||
{
|
||||
case '\n':
|
||||
fputs ("\\n", stdout);
|
||||
break;
|
||||
|
||||
case '\\':
|
||||
fputs ("\\\\", stdout);
|
||||
break;
|
||||
|
||||
default:
|
||||
putchar (file[i]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
putchar ('\n');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -73,7 +73,7 @@ Create the special file NAME of the given TYPE.\n\
|
||||
MAJOR MINOR are forbidden for TYPE p, mandatory otherwise. TYPE may be:\n\
|
||||
\n\
|
||||
b create a block (buffered) special file\n\
|
||||
c, u create a character (unbuffered) special file \n\
|
||||
c, u create a character (unbuffered) special file\n\
|
||||
p create a FIFO\n"));
|
||||
}
|
||||
exit (status);
|
||||
|
||||
8
src/mv.c
8
src/mv.c
@@ -393,12 +393,14 @@ Rename SOURCE to DEST, or move SOURCE(s) to DIRECTORY.\n\
|
||||
--help display this help and exit\n\
|
||||
--version output version information and exit\n\
|
||||
\n\
|
||||
"));
|
||||
printf (_("\
|
||||
The backup suffix is ~, unless set with SIMPLE_BACKUP_SUFFIX. The\n\
|
||||
version control may be set with VERSION_CONTROL, values are:\n\
|
||||
\n\
|
||||
t, numbered make numbered backups\n\
|
||||
nil, existing numbered if numbered backups exist, simple otherwise\n\
|
||||
never, simple always make simple backups \n"));
|
||||
never, simple always make simple backups\n"));
|
||||
}
|
||||
exit (status);
|
||||
}
|
||||
@@ -471,7 +473,9 @@ main (int argc, char **argv)
|
||||
|
||||
if (argc < optind + 2)
|
||||
{
|
||||
error (0, 0, _("missing file argument%s"), argc == optind ? "s" : "");
|
||||
error (0, 0, "%s", (argc == optind
|
||||
? _("missing file arguments")
|
||||
: _("missing file argument")));
|
||||
usage (1);
|
||||
}
|
||||
|
||||
|
||||
76
src/od.c
76
src/od.c
@@ -656,22 +656,25 @@ simple_strtoul (const char *s, const char **p, long unsigned int *val)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* If S points to a single valid POSIX-style od format string, put a
|
||||
description of that format in *TSPEC, make *NEXT point at the character
|
||||
following the just-decoded format (if *NEXT is non-NULL), and return
|
||||
zero. If S is not valid, don't modify *NEXT or *TSPEC and return
|
||||
nonzero. For example, if S were "d4afL" *NEXT would be set to "afL"
|
||||
and *TSPEC would be
|
||||
/* If S points to a single valid POSIX-style od format string, put
|
||||
a description of that format in *TSPEC, make *NEXT point at the
|
||||
character following the just-decoded format (if *NEXT is non-NULL),
|
||||
and return zero. If S is not valid, don't modify *NEXT or *TSPEC,
|
||||
give a diagnostic, and return nonzero. For example, if S were
|
||||
"d4afL" *NEXT would be set to "afL" and *TSPEC would be
|
||||
{
|
||||
fmt = SIGNED_DECIMAL;
|
||||
size = INT or LONG; (whichever integral_type_size[4] resolves to)
|
||||
print_function = print_int; (assuming size == INT)
|
||||
fmt_string = "%011d%c";
|
||||
}
|
||||
S_ORIG is solely for reporting errors. It should be the full format
|
||||
string argument.
|
||||
*/
|
||||
|
||||
static int
|
||||
decode_one_format (const char *s, const char **next, struct tspec *tspec)
|
||||
decode_one_format (const char *s_orig, const char *s, const char **next,
|
||||
struct tspec *tspec)
|
||||
{
|
||||
enum size_spec size_spec;
|
||||
unsigned long int size;
|
||||
@@ -716,14 +719,24 @@ decode_one_format (const char *s, const char **next, struct tspec *tspec)
|
||||
|
||||
default:
|
||||
if (simple_strtoul (s, &p, &size) != 0)
|
||||
return 1;
|
||||
{
|
||||
/* The integer at P in S would overflow an unsigned long.
|
||||
A digit string that long is sufficiently odd looking
|
||||
that the following diagnostic is sufficient. */
|
||||
error (0, 0, _("invalid type string `%s'"), s_orig);
|
||||
return 1;
|
||||
}
|
||||
if (p == s)
|
||||
size = sizeof (int);
|
||||
else
|
||||
{
|
||||
if (size > MAX_INTEGRAL_TYPE_SIZE
|
||||
|| integral_type_size[size] == NO_SIZE)
|
||||
return 1;
|
||||
{
|
||||
error (0, 0, _("invalid type string `%s';\n\
|
||||
this system doesn't provide a %lu-byte integral type"), s_orig, size);
|
||||
return 1;
|
||||
}
|
||||
s = p;
|
||||
}
|
||||
break;
|
||||
@@ -819,14 +832,24 @@ decode_one_format (const char *s, const char **next, struct tspec *tspec)
|
||||
|
||||
default:
|
||||
if (simple_strtoul (s, &p, &size) != 0)
|
||||
return 1;
|
||||
{
|
||||
/* The integer at P in S would overflow an unsigned long.
|
||||
A digit string that long is sufficiently odd looking
|
||||
that the following diagnostic is sufficient. */
|
||||
error (0, 0, _("invalid type string `%s'"), s_orig);
|
||||
return 1;
|
||||
}
|
||||
if (p == s)
|
||||
size = sizeof (double);
|
||||
else
|
||||
{
|
||||
if (size > MAX_FP_TYPE_SIZE
|
||||
|| fp_type_size[size] == NO_SIZE)
|
||||
return 1;
|
||||
{
|
||||
error (0, 0, _("invalid type string `%s';\n\
|
||||
this system doesn't provide a %lu-byte floating point type"), s_orig, size);
|
||||
return 1;
|
||||
}
|
||||
s = p;
|
||||
}
|
||||
break;
|
||||
@@ -884,6 +907,8 @@ decode_one_format (const char *s, const char **next, struct tspec *tspec)
|
||||
break;
|
||||
|
||||
default:
|
||||
error (0, 0, _("invalid character `%c' in type string `%s'"),
|
||||
*s, s_orig);
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -905,6 +930,7 @@ decode_one_format (const char *s, const char **next, struct tspec *tspec)
|
||||
static int
|
||||
decode_format_string (const char *s)
|
||||
{
|
||||
const char *s_orig = s;
|
||||
assert (s != NULL);
|
||||
|
||||
while (*s != '\0')
|
||||
@@ -912,7 +938,7 @@ decode_format_string (const char *s)
|
||||
struct tspec tspec;
|
||||
const char *next;
|
||||
|
||||
if (decode_one_format (s, &next, &tspec))
|
||||
if (decode_one_format (s_orig, s, &next, &tspec))
|
||||
return 1;
|
||||
|
||||
assert (s != next);
|
||||
@@ -925,7 +951,8 @@ decode_format_string (const char *s)
|
||||
* sizeof (struct tspec)));
|
||||
}
|
||||
|
||||
memcpy ((char *) &spec[n_specs], (char *) &tspec, sizeof (struct tspec));
|
||||
memcpy ((char *) &spec[n_specs], (char *) &tspec,
|
||||
sizeof (struct tspec));
|
||||
++n_specs;
|
||||
}
|
||||
|
||||
@@ -1581,6 +1608,7 @@ main (int argc, char **argv)
|
||||
unsigned int address_pad_len;
|
||||
unsigned long int desired_width;
|
||||
int width_specified = 0;
|
||||
int n_failed_decodes = 0;
|
||||
int err;
|
||||
|
||||
/* The old-style `pseudo starting address' to be printed in parentheses
|
||||
@@ -1706,7 +1734,7 @@ the maximum\nrepresentable value of type off_t"), optarg);
|
||||
|
||||
case 't':
|
||||
if (decode_format_string (optarg))
|
||||
error (EXIT_FAILURE, 0, _("invalid type string `%s'"), optarg);
|
||||
++n_failed_decodes;
|
||||
break;
|
||||
|
||||
case 'v':
|
||||
@@ -1725,9 +1753,8 @@ the maximum\nrepresentable value of type off_t"), optarg);
|
||||
#define CASE_OLD_ARG(old_char,new_string) \
|
||||
case old_char: \
|
||||
{ \
|
||||
int tmp; \
|
||||
tmp = decode_format_string (new_string); \
|
||||
assert (tmp == 0); \
|
||||
if (decode_format_string (new_string)) \
|
||||
++n_failed_decodes; \
|
||||
} \
|
||||
break
|
||||
|
||||
@@ -1764,6 +1791,9 @@ the maximum\nrepresentable value of type off_t"), optarg);
|
||||
}
|
||||
}
|
||||
|
||||
if (n_failed_decodes > 0)
|
||||
exit (EXIT_FAILURE);
|
||||
|
||||
if (show_version)
|
||||
{
|
||||
printf ("od - %s\n", PACKAGE_VERSION);
|
||||
@@ -1841,14 +1871,14 @@ the maximum\nrepresentable value of type off_t"), optarg);
|
||||
else
|
||||
{
|
||||
error (0, 0,
|
||||
_("in compatibility mode the last 2 arguments must be offsets"));
|
||||
_("in compatibility mode the last 2 arguments must be offsets"));
|
||||
usage (1);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
error (0, 0,
|
||||
_("in compatibility mode there may be no more than 3 arguments"));
|
||||
_("in compatibility mode there may be no more than 3 arguments"));
|
||||
usage (1);
|
||||
}
|
||||
|
||||
@@ -1879,9 +1909,13 @@ the maximum\nrepresentable value of type off_t"), optarg);
|
||||
|
||||
if (n_specs == 0)
|
||||
{
|
||||
int d_err = decode_one_format ("o2", NULL, &(spec[0]));
|
||||
if (decode_one_format ("o2", "o2", NULL, &(spec[0])))
|
||||
{
|
||||
/* This happens on Cray systems that don't have a 2-byte
|
||||
integral type. */
|
||||
exit (EXIT_FAILURE);
|
||||
}
|
||||
|
||||
assert (d_err == 0);
|
||||
n_specs = 1;
|
||||
}
|
||||
|
||||
|
||||
@@ -137,7 +137,9 @@ main (int argc, char **argv)
|
||||
|
||||
exit_status = 0;
|
||||
|
||||
parse_long_options (argc, argv, "printf", PACKAGE_VERSION, usage);
|
||||
/* Don't recognize --help or --version if POSIXLY_CORRECT is set. */
|
||||
if (getenv ("POSIXLY_CORRECT") == NULL)
|
||||
parse_long_options (argc, argv, "printf", PACKAGE_VERSION, usage);
|
||||
|
||||
if (argc == 1)
|
||||
{
|
||||
|
||||
26
src/seq.c
26
src/seq.c
@@ -77,14 +77,16 @@ static void
|
||||
usage (int status)
|
||||
{
|
||||
if (status != 0)
|
||||
(void) fprintf (stderr, _("Try `%s --help' for more information.\n"),
|
||||
fprintf (stderr, _("Try `%s --help' for more information.\n"),
|
||||
program_name);
|
||||
else
|
||||
{
|
||||
(void) printf (_("\
|
||||
Usage: %s [OPTION]... [FIRST [INCREMENT]] LAST\n\
|
||||
"), program_name);
|
||||
(void) printf (_("\
|
||||
printf (_("\
|
||||
Usage: %s [OPTION]... LAST\n\
|
||||
or: %s [OPTION]... FIRST LAST\n\
|
||||
or: %s [OPTION]... FIRST INCREMENT LAST\n\
|
||||
"), program_name, program_name, program_name);
|
||||
printf (_("\
|
||||
Print numbers from FIRST (default 1) to LAST, moving by STEP (default 1).\n\
|
||||
\n\
|
||||
-f, --format FORMAT use printf(3) style FORMAT (default: %%g)\n\
|
||||
@@ -158,7 +160,7 @@ main (int argc, char **argv)
|
||||
|
||||
if (show_version)
|
||||
{
|
||||
(void) printf ("seq - %s\n", PACKAGE_VERSION);
|
||||
printf ("seq - %s\n", PACKAGE_VERSION);
|
||||
exit (0);
|
||||
}
|
||||
|
||||
@@ -324,14 +326,14 @@ get_width_format ()
|
||||
max_val = first + step * floor ((last - first) / step);
|
||||
}
|
||||
|
||||
(void) sprintf (buffer, "%g", rint (max_val));
|
||||
sprintf (buffer, "%g", rint (max_val));
|
||||
if (buffer[strspn (buffer, "0123456789")] != '\0')
|
||||
return "%g";
|
||||
width1 = strlen (buffer);
|
||||
|
||||
if (min_val < 0.0)
|
||||
{
|
||||
(void) sprintf (buffer, "%g", rint (min_val));
|
||||
sprintf (buffer, "%g", rint (min_val));
|
||||
if (buffer[strspn (buffer, "-0123456789")] != '\0')
|
||||
return "%g";
|
||||
width2 = strlen (buffer);
|
||||
@@ -340,7 +342,7 @@ get_width_format ()
|
||||
}
|
||||
full_width = width1;
|
||||
|
||||
(void) sprintf (buffer, "%g", 1.0 + modf (min_val, &temp));
|
||||
sprintf (buffer, "%g", 1.0 + modf (min_val, &temp));
|
||||
width1 = strlen (buffer);
|
||||
if (width1 == 1)
|
||||
width1 = 0;
|
||||
@@ -352,7 +354,7 @@ get_width_format ()
|
||||
width1 -= 2;
|
||||
}
|
||||
|
||||
(void) sprintf (buffer, "%g", 1.0 + modf (step, &temp));
|
||||
sprintf (buffer, "%g", 1.0 + modf (step, &temp));
|
||||
width2 = strlen (buffer);
|
||||
if (width2 == 1)
|
||||
width2 = 0;
|
||||
@@ -366,9 +368,9 @@ get_width_format ()
|
||||
frac_width = width1 > width2 ? width1 : width2;
|
||||
|
||||
if (frac_width)
|
||||
(void) sprintf (buffer, "%%0%d.%df", full_width + 1 + frac_width, frac_width);
|
||||
sprintf (buffer, "%%0%d.%df", full_width + 1 + frac_width, frac_width);
|
||||
else
|
||||
(void) sprintf (buffer, "%%0%dg", full_width);
|
||||
sprintf (buffer, "%%0%dg", full_width);
|
||||
|
||||
return buffer;
|
||||
}
|
||||
|
||||
40
src/sort.c
40
src/sort.c
@@ -610,6 +610,36 @@ limfield (const struct line *line, const struct keyfield *key)
|
||||
++ptr;
|
||||
}
|
||||
|
||||
#ifdef POSIX_UNSPECIFIED
|
||||
/* The following block of code makes GNU sort incompatible with
|
||||
standard Unix sort, so it's ifdef'd out for now.
|
||||
The POSIX spec isn't clear on how to interpret this.
|
||||
FIXME: request clarification.
|
||||
|
||||
From: kwzh@gnu.ai.mit.edu (Karl Heuer)
|
||||
Date: Thu, 30 May 96 12:20:41 -0400
|
||||
|
||||
[...]I believe I've found another bug in `sort'.
|
||||
|
||||
$ cat /tmp/sort.in
|
||||
a b c 2 d
|
||||
pq rs 1 t
|
||||
$ textutils-1.15/src/sort +0.6 -0.7 </tmp/sort.in
|
||||
a b c 2 d
|
||||
pq rs 1 t
|
||||
$ /bin/sort +0.6 -0.7 </tmp/sort.in
|
||||
pq rs 1 t
|
||||
a b c 2 d
|
||||
|
||||
Unix sort produced the answer I expected: sort on the single character
|
||||
in column 6. GNU sort produced different results, because it disagrees
|
||||
on the interpretation of the key-end spec "-M.N". Unix sort reads this
|
||||
as "skip M fields, then N characters"; but GNU sort wants it to mean
|
||||
"skip M fields, then either N characters or the rest of the current
|
||||
field, whichever comes first". This extra clause applies only to
|
||||
key-ends, not key-starts.
|
||||
*/
|
||||
|
||||
/* Make LIM point to the end of (one byte past) the current field. */
|
||||
if (tab)
|
||||
{
|
||||
@@ -628,6 +658,7 @@ limfield (const struct line *line, const struct keyfield *key)
|
||||
++newlim;
|
||||
lim = newlim;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* If we're skipping leading blanks, don't start counting characters
|
||||
until after skipping past any leading blanks. */
|
||||
@@ -1773,7 +1804,12 @@ main (int argc, char **argv)
|
||||
if (digits[UCHAR (*s)] || (*s == '.' && digits[UCHAR (s[1])]))
|
||||
{
|
||||
if (!key)
|
||||
usage (SORT_FAILURE);
|
||||
{
|
||||
/* Provoke with `sort -9'. */
|
||||
error (0, 0, _("when using the old-style +POS and -POS \
|
||||
key specifiers,\nthe +POS specifier must come first"));
|
||||
usage (SORT_FAILURE);
|
||||
}
|
||||
for (t = 0; digits[UCHAR (*s)]; ++s)
|
||||
t = t * 10 + *s - '0';
|
||||
t2 = 0;
|
||||
@@ -2049,7 +2085,7 @@ but lacks following character offset"));
|
||||
struct stat instat;
|
||||
if ((strcmp (files[i], "-")
|
||||
? stat (files[i], &instat)
|
||||
: fstat (fileno (stdin), &instat)) != 0)
|
||||
: fstat (STDIN_FILENO, &instat)) != 0)
|
||||
{
|
||||
error (0, errno, "%s", files[i]);
|
||||
cleanup ();
|
||||
|
||||
44
src/system.h
44
src/system.h
@@ -179,6 +179,18 @@ extern int errno;
|
||||
char *getenv ();
|
||||
#endif /* STDC_HEADERS */
|
||||
|
||||
/* The following test is to work around the gross typo in
|
||||
systems like Sony NEWS-OS Release 4.0C, whereby EXIT_FAILURE
|
||||
is defined to 0, not 1. */
|
||||
#if !EXIT_FAILURE
|
||||
# undef EXIT_FAILURE
|
||||
# define EXIT_FAILURE 1
|
||||
#endif
|
||||
|
||||
#ifndef EXIT_SUCCESS
|
||||
# define EXIT_SUCCESS 0
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_FCNTL_H
|
||||
#include <fcntl.h>
|
||||
#else
|
||||
@@ -285,32 +297,32 @@ char *alloca ();
|
||||
#include <ctype.h>
|
||||
|
||||
#if defined (STDC_HEADERS) || (!defined (isascii) && !defined (HAVE_ISASCII))
|
||||
#define ISASCII(c) 1
|
||||
#define IN_CTYPE_DOMAIN(c) 1
|
||||
#else
|
||||
#define ISASCII(c) isascii(c)
|
||||
#define IN_CTYPE_DOMAIN(c) isascii(c)
|
||||
#endif
|
||||
|
||||
#ifdef isblank
|
||||
#define ISBLANK(c) (ISASCII (c) && isblank (c))
|
||||
#define ISBLANK(c) (IN_CTYPE_DOMAIN (c) && isblank (c))
|
||||
#else
|
||||
#define ISBLANK(c) ((c) == ' ' || (c) == '\t')
|
||||
#endif
|
||||
#ifdef isgraph
|
||||
#define ISGRAPH(c) (ISASCII (c) && isgraph (c))
|
||||
#define ISGRAPH(c) (IN_CTYPE_DOMAIN (c) && isgraph (c))
|
||||
#else
|
||||
#define ISGRAPH(c) (ISASCII (c) && isprint (c) && !isspace (c))
|
||||
#define ISGRAPH(c) (IN_CTYPE_DOMAIN (c) && isprint (c) && !isspace (c))
|
||||
#endif
|
||||
|
||||
#define ISPRINT(c) (ISASCII (c) && isprint (c))
|
||||
#define ISDIGIT(c) (ISASCII (c) && isdigit (c))
|
||||
#define ISALNUM(c) (ISASCII (c) && isalnum (c))
|
||||
#define ISALPHA(c) (ISASCII (c) && isalpha (c))
|
||||
#define ISCNTRL(c) (ISASCII (c) && iscntrl (c))
|
||||
#define ISLOWER(c) (ISASCII (c) && islower (c))
|
||||
#define ISPUNCT(c) (ISASCII (c) && ispunct (c))
|
||||
#define ISSPACE(c) (ISASCII (c) && isspace (c))
|
||||
#define ISUPPER(c) (ISASCII (c) && isupper (c))
|
||||
#define ISXDIGIT(c) (ISASCII (c) && isxdigit (c))
|
||||
#define ISPRINT(c) (IN_CTYPE_DOMAIN (c) && isprint (c))
|
||||
#define ISDIGIT(c) (IN_CTYPE_DOMAIN (c) && isdigit (c))
|
||||
#define ISALNUM(c) (IN_CTYPE_DOMAIN (c) && isalnum (c))
|
||||
#define ISALPHA(c) (IN_CTYPE_DOMAIN (c) && isalpha (c))
|
||||
#define ISCNTRL(c) (IN_CTYPE_DOMAIN (c) && iscntrl (c))
|
||||
#define ISLOWER(c) (IN_CTYPE_DOMAIN (c) && islower (c))
|
||||
#define ISPUNCT(c) (IN_CTYPE_DOMAIN (c) && ispunct (c))
|
||||
#define ISSPACE(c) (IN_CTYPE_DOMAIN (c) && isspace (c))
|
||||
#define ISUPPER(c) (IN_CTYPE_DOMAIN (c) && isupper (c))
|
||||
#define ISXDIGIT(c) (IN_CTYPE_DOMAIN (c) && isxdigit (c))
|
||||
|
||||
#ifndef __P
|
||||
#if defined (__GNUC__) || (defined (__STDC__) && __STDC__)
|
||||
@@ -337,3 +349,5 @@ char *alloca ();
|
||||
# define textdomain(Domain) /* empty */
|
||||
# define _(Text) Text
|
||||
#endif
|
||||
|
||||
#define STREQ(a,b) (strcmp((a), (b)) == 0)
|
||||
|
||||
@@ -861,7 +861,8 @@ main (int argc, char **argv)
|
||||
|
||||
if (argc > 1
|
||||
&& ((argv[1][0] == '-' && ISDIGIT (argv[1][1]))
|
||||
|| (argv[1][0] == '+' && (ISDIGIT (argv[1][1]) || argv[1][1] == 0))))
|
||||
|| (argv[1][0] == '+' && (ISDIGIT (argv[1][1])
|
||||
|| argv[1][1] == 0))))
|
||||
{
|
||||
/* Old option syntax: a dash or plus, one or more digits (zero digits
|
||||
are acceptable with a plus), and one or more option letters. */
|
||||
@@ -878,6 +879,11 @@ main (int argc, char **argv)
|
||||
{
|
||||
STRTOL_FATAL_ERROR (argv[1], _("argument"), s_err);
|
||||
}
|
||||
|
||||
/* If a [bkm] suffix was given then count bytes, not lines. */
|
||||
if (p[-1] == 'b' || p[-1] == 'k' || p[-1] == 'm')
|
||||
count_lines = 0;
|
||||
|
||||
/* Parse any appended option letters. */
|
||||
while (*p)
|
||||
{
|
||||
|
||||
@@ -1073,7 +1073,9 @@ main (int margc, char **margv)
|
||||
|
||||
if (margv[0] && strcmp (margv[0], "[") == 0)
|
||||
{
|
||||
parse_long_options (argc, argv, COMMAND_NAME, PACKAGE_VERSION, usage);
|
||||
/* Don't recognize --help or --version if POSIXLY_CORRECT is set. */
|
||||
if (getenv ("POSIXLY_CORRECT") == NULL)
|
||||
parse_long_options (argc, argv, COMMAND_NAME, PACKAGE_VERSION, usage);
|
||||
|
||||
--margc;
|
||||
|
||||
|
||||
@@ -132,7 +132,7 @@ standard input), writing to OUTPUT (or standard output).\n\
|
||||
--version output version information and exit\n\
|
||||
\n\
|
||||
A field is a run of whitespace, than non-whitespace characters.\n\
|
||||
Fields are skipped before chars. \n\
|
||||
Fields are skipped before chars.\n\
|
||||
"));
|
||||
}
|
||||
exit (status == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
|
||||
|
||||
Reference in New Issue
Block a user