Compare commits

...

540 Commits

Author SHA1 Message Date
Jim Meyering
afed66de3b *** empty log message *** 2000-11-27 08:32:13 +00:00
Jim Meyering
d33f54f74f Use touch with `-d tomorrow' to avoid race condition. 2000-11-27 08:01:57 +00:00
Jim Meyering
6d43eca61a *** empty log message *** 2000-11-27 08:00:53 +00:00
Jim Meyering
59a56f4172 use abs_srcdir 2000-11-27 07:01:39 +00:00
Jim Meyering
8cd774b0a3 . 2000-11-26 23:30:27 +00:00
Jim Meyering
7484a08597 *** empty log message *** 2000-11-26 23:13:28 +00:00
Jim Meyering
3083c30362 Include config.h, stdio.h, sys/types.h. and system.h here instead. 2000-11-26 23:13:11 +00:00
Jim Meyering
81ae3684cc Include config.h, stdio.h, sys/types.h. and system.h here instead. 2000-11-26 23:12:44 +00:00
Jim Meyering
f8674300d4 don't include system.h here 2000-11-26 23:10:55 +00:00
Jim Meyering
b65d5875b7 *** empty log message *** 2000-11-26 23:10:25 +00:00
Jim Meyering
7c85357876 . 2000-11-26 23:08:17 +00:00
Jim Meyering
913052e751 *** empty log message *** 2000-11-26 23:05:02 +00:00
Jim Meyering
5536541dbb *** empty log message *** 2000-11-26 23:04:55 +00:00
Jim Meyering
6fbae8149f (_compare_files): New function.
(_process_file_spec): Likewise.
(_at_replace): Likewise.
(run_tests): Support new keywords, AUX and CMP and associated
syntax and semantics.
2000-11-26 23:04:39 +00:00
Jim Meyering
be56f8286f *** empty log message *** 2000-11-26 23:01:58 +00:00
Jim Meyering
b04a174558 . 2000-11-26 23:01:02 +00:00
Jim Meyering
1040389220 *** empty log message *** 2000-11-26 21:36:24 +00:00
Jim Meyering
459b44b03d (skip): Perform the `records < blocksize' test
at the top of the loop, not at the bottom.
2000-11-26 21:35:53 +00:00
Jim Meyering
297c469d6f (skip): New arg COUNT_BYTES. Read with BLOCKSIZE
bytes, but consider RECORDS to be a byte count if COUNT_BYTES
is nonzero.
2000-11-26 21:34:05 +00:00
Jim Meyering
022f9b7d19 Include sys/types.h. From Werner Almesberger. 2000-11-26 16:52:29 +00:00
Jim Meyering
de2cfc1a5f *** empty log message *** 2000-11-26 16:52:03 +00:00
Jim Meyering
005c4244f9 *** empty log message *** 2000-11-26 16:50:17 +00:00
Jim Meyering
9b45312c35 . 2000-11-26 16:00:33 +00:00
Jim Meyering
bd3afcc718 . 2000-11-26 15:59:51 +00:00
Jim Meyering
d47e7953ba *** empty log message *** 2000-11-26 15:59:12 +00:00
Jim Meyering
9860ca9f9b *** empty log message *** 2000-11-26 15:57:21 +00:00
Jim Meyering
8f9f95b5ec (TESTS): Add skip-seek. 2000-11-26 15:57:04 +00:00
Jim Meyering
2d354c5a2e . 2000-11-26 15:52:13 +00:00
Jim Meyering
7f5ed2b586 *** empty log message *** 2000-11-26 14:33:06 +00:00
Jim Meyering
8ee842a15b (skip_bytes, seek_bytes): Now booleans, not counts.
(seek_records): Renamed from seek_record, for consistency with
skip_records and max_records.  All uses changed.

(usage, scanargs): Remove bseek=n and bskip=n; instead, use seek=nB
and skip=nB.
(enum Unit, Unit): Remove.
(skip, dd_copy, main): Undo most recent change.
(dd_copy, main): Pass blocksize of 1 as appropriate when
skip_bytes or seek_bytes is nonzero.
(main): Rework ftruncate failure diagnostic to always use byte count.
2000-11-26 08:23:23 +00:00
Jim Meyering
7a16e5e6ff *** empty log message *** 2000-11-25 17:01:00 +00:00
Jim Meyering
6cfcd41e1a *** empty log message *** 2000-11-25 15:27:47 +00:00
Jim Meyering
89499f2124 *** empty log message *** 2000-11-25 14:24:52 +00:00
Jim Meyering
e3db837339 more post-merge clean-up.
Fix a merge bug exposed by new test.
2000-11-25 14:17:43 +00:00
Jim Meyering
b499483abd *** empty log message *** 2000-11-25 13:49:38 +00:00
Jim Meyering
944f878a72 *** empty log message *** 2000-11-25 13:27:13 +00:00
Jim Meyering
a1e9a949b4 *** empty log message *** 2000-11-25 13:25:53 +00:00
Jim Meyering
d1680f86e1 *** empty log message *** 2000-11-25 13:24:30 +00:00
Jim Meyering
019bdadfc9 remove bskip
adapt skip to skip either by bytes or by blocks
2000-11-25 08:54:58 +00:00
Jim Meyering
7d57b34196 (S_TYPEISSHM): New macro.
(main): Report failed fstat.
Complain only when ftruncate fails on a regular file,
a directory, or a shared memory object.
2000-11-25 07:20:51 +00:00
Jim Meyering
c8a0eec3f6 bskip/bseek patch from Chris Sylvain <csylvain@umm.edu> merged in 2000-11-24 21:54:31 +00:00
Jim Meyering
3d6852f7fa Declare a pointer parameters to be `const' as appropriate. 2000-11-24 21:41:38 +00:00
Jim Meyering
dd82647d0c *** empty log message *** 2000-11-24 21:19:56 +00:00
Jim Meyering
b95b1e3c9a *** empty log message *** 2000-11-24 21:18:58 +00:00
Jim Meyering
1d250b6098 (main): Use ftruncate only on regular files.
Based on a patch from Michael Stone.
Reported by andras@kolumbus.fi at http://bugs.debian.org/77174.
2000-11-24 21:18:51 +00:00
Jim Meyering
b35b7e0553 *** empty log message *** 2000-11-24 17:42:01 +00:00
Jim Meyering
d1703ad194 *** empty log message *** 2000-11-24 15:54:48 +00:00
Jim Meyering
17800b0300 . 2000-11-23 21:48:47 +00:00
Jim Meyering
c9dcdd0fc5 cd back to $pwd 2000-11-23 21:48:10 +00:00
Jim Meyering
b21c6f8e1e *** empty log message *** 2000-11-23 15:58:51 +00:00
Jim Meyering
846b539b4e *** empty log message *** 2000-11-23 15:58:19 +00:00
Jim Meyering
9a4e9f426c (show_point): Before accepting an entry as a match, make sure that
the mount directory exists and has the required device number.
Before, e.g., `df /floppy' would mistakenly report on the root
partition if /floppy were not listed in /etc/mtab but / was.
Patch from Eirik Fuller (http://bugs.debian.org/76923).
2000-11-23 15:36:58 +00:00
Jim Meyering
4e07d471cc *** empty log message *** 2000-11-23 15:08:19 +00:00
Jim Meyering
5afa8c022e *** empty log message *** 2000-11-23 15:05:40 +00:00
Jim Meyering
6202e79712 (mode_changed): New function.
(change_file_mode): Use it to determine accurately when -c should
make chmod announce there's been a change.
2000-11-23 15:04:17 +00:00
Jim Meyering
bd320fe27b Source sticky-check instead of open-coding it. 2000-11-23 14:59:05 +00:00
Jim Meyering
bf319d9d88 *** empty log message *** 2000-11-23 14:57:47 +00:00
Jim Meyering
1e9f7512fe (TESTS): Add c-option 2000-11-23 14:37:16 +00:00
Jim Meyering
75e63ae6cd whoops 2000-11-23 14:32:09 +00:00
Jim Meyering
d6dabd6cbb *** empty log message *** 2000-11-23 07:24:59 +00:00
Jim Meyering
d5b2ff2b99 (my_strftime): Do not invoke mbrlen with a
size of (size_t) -1; it's not portable.
2000-11-23 07:24:51 +00:00
Jim Meyering
a3e608b76a chmod before removing 2000-11-22 13:15:10 +00:00
Jim Meyering
d97f90581b Update to use its own directory, and better trap. 2000-11-19 22:24:24 +00:00
Jim Meyering
5f90e3be67 *** empty log message *** 2000-11-19 15:15:48 +00:00
Jim Meyering
f2f5e30bc2 (main): Do not assume EOF == -1.
Handle the case correctly when digits options immediately precede a
non-option.
2000-11-19 15:15:38 +00:00
Jim Meyering
6c1ee8402c (BLOCK_SIZE_OPTION, COLOR_OPTION, FORMAT_OPTION,
INDICATOR_STYLE_OPTION, QUOTING_STYLE_OPTION,
SHOW_CONTROL_CHARS_OPTION, SORT_OPTION, TIME_OPTION): New enum
values, to ensure that option values can't collide with chars.
(long_options, decode_switches): Use them.
2000-11-19 07:44:26 +00:00
Jim Meyering
ff9d584dcc *** empty log message *** 2000-11-19 07:41:31 +00:00
Jim Meyering
aba2a0fd6d (GETOPT_HELP_CHAR, GETOPT_VERSION_CHAR): Now enum
constants rather than macros.  Use values that cannot conflict
with C characters or with -1, CHAR_MAX + 1, etc.
2000-11-19 07:41:20 +00:00
Jim Meyering
5baa94d136 *** empty log message *** 2000-11-18 20:01:14 +00:00
Jim Meyering
6447e5b997 (count_entry): Don't omit the size of a directory entry
merely because we couldn't `chdir' into it.  That would give subtly
different results in some cases.  Reported by Mattias Wadenstein
via Michael Stone.
2000-11-18 20:01:02 +00:00
Jim Meyering
49d5578b0b *** empty log message *** 2000-11-18 20:00:25 +00:00
Jim Meyering
ed757a3e9d *** empty log message *** 2000-11-18 19:43:23 +00:00
Jim Meyering
e5aacbc6ea Revert change of 2000-11-11. It inadvertently change
the output format of `ls -l --full-time'.
2000-11-18 19:43:15 +00:00
Jim Meyering
909f49e651 *** empty log message *** 2000-11-18 15:09:02 +00:00
Jim Meyering
54f2cba1b5 Update to use the Free Documentation Licence. 2000-11-18 15:08:57 +00:00
Jim Meyering
880e67d643 Change GNU to @sc{gnu} in many places. 2000-11-18 14:27:36 +00:00
Jim Meyering
166bbecf0b . 2000-11-18 14:10:40 +00:00
Jim Meyering
f94fab125e *** empty log message *** 2000-11-18 13:51:56 +00:00
Jim Meyering
8bbc00b147 (main): When failing to create a directory, give only
one diagnostic, not two.  Reported by Volker Borchert.
2000-11-18 13:49:44 +00:00
Jim Meyering
9ca70467e9 *** empty log message *** 2000-11-18 13:48:25 +00:00
Jim Meyering
16f1ca4c35 *** empty log message *** 2000-11-18 13:40:17 +00:00
Jim Meyering
c7087747a4 (TESTS): Add t-slash. 2000-11-18 13:39:49 +00:00
Jim Meyering
cdc8ee798f *** empty log message *** 2000-11-18 13:36:40 +00:00
Jim Meyering
caf54306a3 (main): With --parents, remove any trailing slashes
from the argument to the final mkdir call.  Required for NetBSD.
2000-11-18 13:36:24 +00:00
Jim Meyering
cde06a54ea Create and `cd' into temporary directory
before anything else.  Reported by Volker Borchert.
2000-11-18 13:19:23 +00:00
Jim Meyering
40af3c54b6 revert mysteriously-applied last delta! 2000-11-18 13:10:40 +00:00
Jim Meyering
bb56dec673 add -*- Makefile -*- 2000-11-18 13:02:44 +00:00
Jim Meyering
1234569e43 Sync with the one from fileutils. 2000-11-18 13:01:22 +00:00
Jim Meyering
82db55924e *** empty log message *** 2000-11-18 11:53:28 +00:00
Jim Meyering
9a99175c0e *** empty log message *** 2000-11-18 11:53:02 +00:00
Jim Meyering
88754c060d *** empty log message *** 2000-11-18 11:52:12 +00:00
Jim Meyering
d3a2ca48d4 . 2000-11-18 11:50:19 +00:00
Jim Meyering
6adb4780b5 . 2000-11-18 11:17:41 +00:00
Jim Meyering
6e3bd39c14 tweak a comment 2000-11-18 09:53:33 +00:00
Jim Meyering
cf59735d7b Formatting changes.
(obstack_grow, obstack_grow0): Don't cast WHERE at all: that would
prevent type checking.
(obstack_ptr_grow, obstack_ptr_grow_fast): When assigning, don't
cast the value to (void *): assigning a `foo *' to a `void *'
variable is valid.
(obstack_int_grow, obstack_int_grow_fast): Don't cast AINT to int.
2000-11-18 09:50:09 +00:00
Jim Meyering
ff0e0181c9 *** empty log message *** 2000-11-17 10:22:20 +00:00
Jim Meyering
138e17c26e *** empty log message *** 2000-11-17 10:21:57 +00:00
Jim Meyering
2c7002e529 *** empty log message *** 2000-11-17 10:20:42 +00:00
Jim Meyering
88b47ac69f (.NOTPARALLEL): Put it here instead, since this file
is common to these packages: fileutils, sh-utils, textutils.
2000-11-17 10:20:09 +00:00
Jim Meyering
f15c4ee154 Declare global `tab' to be of type *unsigned* char,
so join works with 8-bit delimiter characters.
2000-11-17 10:16:53 +00:00
Jim Meyering
9a25583ef1 . 2000-11-17 10:16:22 +00:00
Jim Meyering
d32d63e211 *** empty log message *** 2000-11-17 08:31:36 +00:00
Jim Meyering
7daa83a149 Explicitly include sys/types.h before including system.h. 2000-11-17 08:31:01 +00:00
Jim Meyering
b73eb2433d . 2000-11-17 08:21:22 +00:00
Jim Meyering
73ee461623 *** empty log message *** 2000-11-17 08:19:14 +00:00
Jim Meyering
00fba41266 Update from GNU libc. 2000-11-17 08:19:01 +00:00
Jim Meyering
7822d5fe7f (sha1): Define.
(announcement): Include SHA1 digest of .tar.gz file.
2000-11-17 08:13:38 +00:00
Jim Meyering
395dc1f7ff *** empty log message *** 2000-11-16 19:35:10 +00:00
Jim Meyering
1f789a22a2 Include sys/types.h before system.h. 2000-11-16 19:34:23 +00:00
Jim Meyering
0354ab509e *** empty log message *** 2000-11-16 14:19:37 +00:00
Jim Meyering
5b85894325 Declare global `tab' to be of type *unsigned* char,
so join works with 8-bit delimiter characters.
Reported by Antonio Rendas.
2000-11-16 14:19:27 +00:00
Jim Meyering
b77cb25935 (8-bit-t): New test for the above fix. 2000-11-16 14:19:00 +00:00
Jim Meyering
ea9a4e4755 *** empty log message *** 2000-11-16 12:56:51 +00:00
Jim Meyering
69c750af36 *** empty log message *** 2000-11-16 12:20:35 +00:00
Jim Meyering
f2e553b126 Incorporate weak-alias-related changes from glibc. 2000-11-16 10:15:54 +00:00
Jim Meyering
8a93bbce06 remove bruno's 11-03 entry for unicodeio.c 2000-11-14 21:45:59 +00:00
Jim Meyering
965cb80669 *** empty log message *** 2000-11-14 21:39:06 +00:00
Jim Meyering
0e397f0460 reword a paragraph in the ptx section 2000-11-14 21:38:00 +00:00
Jim Meyering
0ebd6b45a8 *** empty log message *** 2000-11-13 23:59:21 +00:00
Jim Meyering
a8fab3b2eb Add an `echo' so that the input to the sed command
is NL-terminated.  Otherwise, Solaris' /bin/sed generates no output.
Reported by Vin Shelton.
2000-11-13 23:59:15 +00:00
Jim Meyering
2e9fdf49c5 *** empty log message *** 2000-11-13 19:34:19 +00:00
Jim Meyering
0743fbb426 *** empty log message *** 2000-11-13 19:33:47 +00:00
Jim Meyering
2c6fbbea7a (ST_TIME_CMP_NS): Fix typo: ST_MTIM_NSEC should
be tested with #ifdef, not with #if.
2000-11-13 19:33:32 +00:00
Jim Meyering
3f6da994c0 *** empty log message *** 2000-11-12 15:19:26 +00:00
Jim Meyering
adcacc9417 (print_long_format): Remove obsolete comment (strftime vs. ctime).
From Paul Eggert.
2000-11-12 15:19:21 +00:00
Jim Meyering
7e2f836a49 . 2000-11-12 10:51:33 +00:00
Jim Meyering
1bac92811e Update from master repository. 2000-11-12 10:51:24 +00:00
Jim Meyering
8fc17df678 (show_date): Add a comment explaining why the
format string must not be translatable via _().  From Paul Eggert.
2000-11-12 10:02:29 +00:00
Jim Meyering
1ff67f6c5c (<langinfo.h>): Include if HAVE_LANGINFO_H.
(DATE_FMT_LANGINFO): New macro, taken from sh-utils/src/date.c.
(print_long_format): Use it to determine "date" format.
Do not wrap "%b %e %Y" and "%b %e %H:%M" in _(), as it results in
incorrect behavior when LC_ALL is unset, LC_TIME is "C", and
LC_MESSAGES or LANG is set to something disagreeing with the POSIX
locale.
2000-11-12 09:48:14 +00:00
Jim Meyering
eabc99b8a4 *** empty log message *** 2000-11-11 14:52:05 +00:00
Jim Meyering
b3f23e14d2 Add a couple #includes, merging from GNU libc version. 2000-11-11 14:32:00 +00:00
Jim Meyering
abe849cb76 . 2000-11-11 14:18:22 +00:00
Jim Meyering
4f9389cf1e More minor rewording and grammar correction.
From Brian Youmans.
2000-11-11 14:18:08 +00:00
Jim Meyering
3ac192dc18 *** empty log message *** 2000-11-11 13:42:17 +00:00
Jim Meyering
39d746aace (GZIP_ENV): Define to --no-name, so the timestamp
is not included in the .tar.gz file.
2000-11-11 13:42:07 +00:00
Jim Meyering
a4aa31ab26 *** empty log message *** 2000-11-11 13:35:39 +00:00
Jim Meyering
fc27d7356d (tests): Use `empty' (instead of just blanks) to
indicate no `-m' option.  Using just blanks wasn't portable to
Solaris2.5.1's /bin/sh.
2000-11-11 13:34:51 +00:00
Jim Meyering
427694451d *** empty log message *** 2000-11-11 10:21:51 +00:00
Jim Meyering
81655756c2 Don't put newline in IFS; that's not portable to
NetBSD's /bin/sh.  Instead, filter newlines and leading/trailing blanks
out of `tests' before the `set -'.
2000-11-11 10:21:42 +00:00
Jim Meyering
2cd2cfc95c Back out Paul's changes while we wait for him and Bruno to reach agreement. 2000-11-11 09:10:33 +00:00
Jim Meyering
dd55ac2967 Remove Paul's entries for unicodeio.c: then I don't have to justify
backing out the nov8/9 changes.
2000-11-11 09:09:55 +00:00
Jim Meyering
0a8f8a7f96 *** empty log message *** 2000-11-11 08:32:16 +00:00
Jim Meyering
8fdb4073cb (announcement): Limit depth of ChangeLog `find' to 2. 2000-11-11 08:32:10 +00:00
Jim Meyering
6a3804bceb *** empty log message *** 2000-11-11 08:29:21 +00:00
Jim Meyering
7a23da6e17 *** empty log message *** 2000-11-11 08:11:20 +00:00
Jim Meyering
403470bdfb *** empty log message *** 2000-11-11 07:52:09 +00:00
Jim Meyering
565c193a23 *** empty log message *** 2000-11-11 07:51:25 +00:00
Jim Meyering
cd7e157b45 (print_long_format): Wrap the --full-time' date format
string in _(...), so it too may be internationalized.
Suggestion from Jungshik Shin.
2000-11-11 07:51:07 +00:00
Jim Meyering
bac81b8dd0 *** empty log message *** 2000-11-11 07:50:38 +00:00
Jim Meyering
6e92f27548 . 2000-11-10 18:54:40 +00:00
Jim Meyering
b3324ca196 (main): Interpret a lone numeric argument of 8 or 10
digits as a file name, rather than as a date/time in the obsolescent
`MMDDhhmm[YY]' format.  Reported by Wenjun Zheng.
2000-11-10 18:54:19 +00:00
Jim Meyering
c90aa4af6c *** empty log message *** 2000-11-10 16:37:20 +00:00
Jim Meyering
2dcd72c77e *** empty log message *** 2000-11-10 16:30:37 +00:00
Jim Meyering
4aba36bd9a (TESTS): Add obsolescent. 2000-11-10 16:30:28 +00:00
Jim Meyering
2ee35792a0 *** empty log message *** 2000-11-10 16:29:12 +00:00
Jim Meyering
782e6319e5 *** empty log message *** 2000-11-10 16:24:24 +00:00
Jim Meyering
95bbe7a4e1 *** empty log message *** 2000-11-10 16:23:14 +00:00
Jim Meyering
5631658518 *** empty log message *** 2000-11-10 11:14:03 +00:00
Jim Meyering
64e75882f4 Update from GNU libc. 2000-11-10 11:13:32 +00:00
Jim Meyering
151c87c3df Update from GNU libc. 2000-11-10 11:10:39 +00:00
Jim Meyering
0e12cbe0e2 fix typo 2000-11-10 09:02:29 +00:00
Jim Meyering
6165d7114f *** empty log message *** 2000-11-10 08:46:34 +00:00
Jim Meyering
2edf3e95db (ENOTSUP): Define to EINVAL if not defined. 2000-11-10 08:46:19 +00:00
Jim Meyering
b2a6e3f614 don't back them out 2000-11-10 08:44:51 +00:00
Jim Meyering
be1e26b2e5 Back out the last two changes, at least for now. 2000-11-10 08:43:46 +00:00
Jim Meyering
185ee08979 . 2000-11-09 22:29:57 +00:00
Jim Meyering
020235e167 *** empty log message *** 2000-11-09 22:22:41 +00:00
Jim Meyering
445485d9b8 Do not set the permissions of the final directory
component if it was not just created.
Based on a patch from Volker Borchert.
2000-11-09 22:21:59 +00:00
Jim Meyering
0fd7aaf38c *** empty log message *** 2000-11-09 08:33:01 +00:00
Jim Meyering
48a83af35c (MB_LEN_MAX): Make sure it's at least 6, to avoid buggy C libraries. 2000-11-09 08:32:52 +00:00
Jim Meyering
bb73f9b20e (<wchar.h>): Do not include; no longer needed, since we no longer use wcrtomb.
(<limits.h>): Include if HAVE_LIMITS_H.
(MB_LEN_MAX): Define if limits.h doesn't.
(convert_unicode_char): New function, with the conversion part of the
old print_unicode_char.  Use wctomb, not wcrtomb.  Depend on
HAVE_WCTOMB, not HAVE_WCRTOMB.
(print_unicode_char): Use convert_unicode_char to do the conversion.
2000-11-09 08:30:00 +00:00
Jim Meyering
611fadd9e8 *** empty log message *** 2000-11-09 08:28:13 +00:00
Jim Meyering
f95b33a519 *** empty log message *** 2000-11-08 14:46:43 +00:00
Jim Meyering
73771cb380 (jm_MACROS): Add test for wcrtomb. 2000-11-08 14:46:35 +00:00
Jim Meyering
48da137f84 *** empty log message *** 2000-11-08 14:46:20 +00:00
Jim Meyering
4e378387d0 Include wchar.h.
(wcrtomb): Provide fallback definition for broken platforms.
(print_unicode_char): New alternative definition for platforms where
wchar_t is Unicode.
2000-11-08 14:46:13 +00:00
Jim Meyering
830edd4985 . 2000-11-07 15:36:04 +00:00
Jim Meyering
770c39a710 *** empty log message *** 2000-11-07 15:35:25 +00:00
Jim Meyering
4e2bc789ab (setusershell): Use rewind rather than
fseek/fseeko, to avoid configuration hassles with fseeko.
Don't bother opening SHELLS_FILE if shellstream is NULL;
it's not necessary.
2000-11-07 15:35:15 +00:00
Jim Meyering
da0732da37 tweak 2000-11-07 14:57:41 +00:00
Jim Meyering
b3edfeaeee *** empty log message *** 2000-11-07 14:22:54 +00:00
Jim Meyering
e1d09fbef3 (TESTS): Add parents.
(TESTS_ENVIRONMENT): Define srcdir=$(srcdir).
2000-11-07 14:22:11 +00:00
Jim Meyering
4d73de7228 *** empty log message *** 2000-11-07 14:20:43 +00:00
Jim Meyering
97a165c61f handle special bits, too 2000-11-07 14:20:06 +00:00
Jim Meyering
57ebb8d808 *** empty log message *** 2000-11-06 21:53:08 +00:00
Jim Meyering
0aa5a0d85e *** empty log message *** 2000-11-06 21:52:12 +00:00
Jim Meyering
c49c23e608 (TESTS_ENVIRONMENT): Define srcdir=$(srcdir). 2000-11-06 20:57:04 +00:00
Jim Meyering
1a6f58ae67 Move mkdir tests into ../mkdir. 2000-11-06 20:53:58 +00:00
Jim Meyering
49a11aa4d4 add Paul here, too. 2000-11-06 18:41:25 +00:00
Jim Meyering
ebecb3f230 *** empty log message *** 2000-11-06 17:42:19 +00:00
Jim Meyering
be34aaaa35 Update from master repository. 2000-11-06 17:42:11 +00:00
Jim Meyering
939977073e *** empty log message *** 2000-11-06 17:38:13 +00:00
Jim Meyering
17d7e0206d Update from latest version: 1.23. 2000-11-06 17:38:07 +00:00
Jim Meyering
c968981077 *** empty log message *** 2000-11-06 13:12:57 +00:00
Jim Meyering
23357a490e *** empty log message *** 2000-11-06 13:10:38 +00:00
Jim Meyering
c08ca675ac (print_header): Mark strings for translation. 2000-11-06 13:10:33 +00:00
Jim Meyering
25353ae5a7 *** empty log message *** 2000-11-06 10:24:36 +00:00
Jim Meyering
0e4c958fb8 (skip): st_size is not defined for directories. 2000-11-06 10:24:21 +00:00
Jim Meyering
8b6603f085 *** empty log message *** 2000-11-06 09:03:22 +00:00
Jim Meyering
a3dcaf6a83 *** empty log message *** 2000-11-06 09:02:21 +00:00
Jim Meyering
f00f8f6a9c *** empty log message *** 2000-11-06 08:55:34 +00:00
Jim Meyering
f472159d99 *** empty log message *** 2000-11-06 08:46:01 +00:00
Jim Meyering
0e1b0b2ea2 *** empty log message *** 2000-11-05 15:45:35 +00:00
Jim Meyering
a46e9f0919 *** empty log message *** 2000-11-05 15:45:31 +00:00
Jim Meyering
22438d75ce *** empty log message *** 2000-11-05 15:45:05 +00:00
Jim Meyering
9b18c35ac9 (main): Use make_dir instead of using mkdir directly.
Diagnose as failure when mkdir tries to create (without the
--parent (-p) option) a directory that already exists.
2000-11-05 15:14:09 +00:00
Jim Meyering
33f1edc571 *** empty log message *** 2000-11-05 15:12:48 +00:00
Jim Meyering
e9e376d85f fix another exit 2000-11-05 15:12:37 +00:00
Jim Meyering
81f10fbd43 Clean up this test. 2000-11-05 15:12:14 +00:00
Jim Meyering
a44e5341bb *** empty log message *** 2000-11-05 15:11:05 +00:00
Jim Meyering
08b1c573cd *** empty log message *** 2000-11-05 15:08:35 +00:00
Jim Meyering
d858c3c433 (main): Use make_dir instead of using mkdir directly.
Diagnose as failure when mkdir tries to create (without the --parent (-p)
option) a directory that already exists.
2000-11-05 15:08:22 +00:00
Jim Meyering
39b53154ca *** empty log message *** 2000-11-05 15:04:53 +00:00
Jim Meyering
214a8623eb (make_dir): Declare. 2000-11-05 15:04:39 +00:00
Jim Meyering
e1356e7fe7 (make_dir): Remove `static' attribute.
Tweak a comment.
2000-11-05 15:04:17 +00:00
Jim Meyering
0760dc7412 *** empty log message *** 2000-11-05 15:03:01 +00:00
Jim Meyering
f3a6e69b4e Add tests for the above fix. 2000-11-05 15:02:32 +00:00
Jim Meyering
6d722e99e2 *** empty log message *** 2000-11-05 10:12:25 +00:00
Jim Meyering
2cac22f76f *** empty log message *** 2000-11-05 09:54:07 +00:00
Jim Meyering
983cd11143 *** empty log message *** 2000-11-05 09:52:55 +00:00
Jim Meyering
aea44f3fa0 *** empty log message *** 2000-11-04 22:19:21 +00:00
Jim Meyering
f8038b425a Use the m4_' prefix on syscmd' and `m4_sysval'. 2000-11-04 22:19:15 +00:00
Jim Meyering
ff6e48f61e *** empty log message *** 2000-11-04 21:39:00 +00:00
Jim Meyering
a5565c08a3 (hash_get_next): Fix a thinko: when ENTRY is the
last one in a bucket, advance to the next bucket.
From Alexandre Duret-Lutz.
2000-11-04 21:38:55 +00:00
Jim Meyering
b510774dbb *** empty log message *** 2000-11-04 12:08:22 +00:00
Jim Meyering
e10f361193 list the source 2000-11-03 11:12:01 +00:00
Jim Meyering
dfe9af3d61 *** empty log message *** 2000-11-03 11:11:45 +00:00
Jim Meyering
49d7e8c71f . 2000-11-03 10:27:01 +00:00
Jim Meyering
eb53331d93 *** empty log message *** 2000-11-03 09:03:37 +00:00
Jim Meyering
4d3c9a170d (TESTS): Add sample-vec. 2000-11-03 09:03:30 +00:00
Jim Meyering
ee2d8446f4 *** empty log message *** 2000-11-03 08:47:20 +00:00
Jim Meyering
1021e06a20 *** empty log message *** 2000-11-03 08:44:12 +00:00
Jim Meyering
8dc1b2caf4 cppi 2000-11-03 08:44:06 +00:00
Jim Meyering
d19f921653 Do not comment out all the code if we are using
the GNU C library, because in some cases we are replacing buggy
code in the GNU C library itself.
2000-11-03 08:43:20 +00:00
Jim Meyering
cf83af7c10 *** empty log message *** 2000-11-02 19:37:11 +00:00
Jim Meyering
4bdc0991b0 *** empty log message *** 2000-11-02 17:05:17 +00:00
Jim Meyering
fc1e3ad166 argh!! use pack's B', not b' format 2000-11-02 17:04:23 +00:00
Jim Meyering
901ef41f7f *** empty log message *** 2000-11-02 09:51:17 +00:00
Jim Meyering
50326157d9 remove const attribute for PARENTS 2000-11-01 17:53:35 +00:00
Jim Meyering
9e9f0846f8 Fix bad typo! free the string, PARENTS, not the function, dir_name. 2000-11-01 17:52:43 +00:00
Jim Meyering
09917b2b9a *** empty log message *** 2000-11-01 17:33:19 +00:00
Jim Meyering
02080dd37e (main): Better diagnostics. 2000-11-01 17:33:09 +00:00
Jim Meyering
039653dde5 *** empty log message *** 2000-10-31 22:03:47 +00:00
Jim Meyering
144bbe26ac Clean up indentation and punctuation.
Fix a couple typos.  From Brian Youmans.
2000-10-31 22:03:42 +00:00
Jim Meyering
933e0997e2 Add all the internationalization-related
variable names autoconf uses.  Set and export them in a loop.
2000-10-31 19:33:30 +00:00
Jim Meyering
8f90ed0f42 *** empty log message *** 2000-10-31 19:29:22 +00:00
Jim Meyering
96380f703c *** empty log message *** 2000-10-31 19:29:05 +00:00
Jim Meyering
40709c446a *** empty log message *** 2000-10-31 19:26:32 +00:00
Jim Meyering
c8da0cbba6 `mkdir -p' would create parent directories with permissions
that did not account for the umask. [introduced with the
2000-09-30 change that became part of fileutils-4.0.28]

Include dirname.h.
Compute the parent directory `mode' unconditionally, effectively
as `$(umask -S),u+wx'.
Use make_path to create only the parent directories, thus using
the same code, both with and without -p, to create the final
component in each file name.  Reported by Bob Proulx.
2000-10-31 19:25:50 +00:00
Jim Meyering
575f5c2f24 *** empty log message *** 2000-10-31 10:46:30 +00:00
Jim Meyering
662a4f705c Much improved.
Run each test also with mkdir's `-p' option and check permissions
on the parent directories.
2000-10-31 10:46:24 +00:00
Jim Meyering
ae53a3e4da use backticks and sed instead of set and shift 2000-10-31 08:31:30 +00:00
Jim Meyering
a5385f0a5f *** empty log message *** 2000-10-31 08:12:38 +00:00
Jim Meyering
b8e83dda2b Add some permission tests. 2000-10-31 08:12:28 +00:00
Jim Meyering
577627b257 Fix the test so it actually does something.
Run each test also with mkdir's `-p' option.
2000-10-31 07:57:29 +00:00
Jim Meyering
7e7943c979 *** empty log message *** 2000-10-31 07:15:54 +00:00
Jim Meyering
1734d51c53 Use @sc where appropriate. Document the
ranges of supported times more precisely.  Correct menu
spacing.  Document old Latin 12m/12pm tradition.  Remove list
of alphabetic time zone names, as it wasn't correct and people
shouldn't be relying on it anyway.  Relative items also
account for non-DST adjustments.  Fix some misspellings.
2000-10-31 07:15:42 +00:00
Jim Meyering
8686e2bf77 *** empty log message *** 2000-10-31 07:10:03 +00:00
Jim Meyering
5a6effff70 Add "2000" to Copyright line, as this file was changed this year. 2000-10-31 07:09:56 +00:00
Jim Meyering
a5810cd3de Remove "2000" from Copyright line, as the file hasn't been
changed this year other than in the copyright notice.
2000-10-31 07:09:40 +00:00
Jim Meyering
3a1f0aa8d5 Remove "2000" from Copyright line, as the file hasn't been
changed this year other than in the copyright notice.
2000-10-31 07:09:02 +00:00
Jim Meyering
462d532cd5 *** empty log message *** 2000-10-31 07:07:26 +00:00
Jim Meyering
3adf8ab9c6 (FOLD): Do not assume that characters are unsigned.
(fnmatch): Fix some FNM_FILE_NAME and FNM_LEADING_DIR bugs,
e.g. fnmatch("d*/*1", "d/s/1", FNM_FILE_NAME) incorrectly yielded zero.
2000-10-31 07:07:05 +00:00
Jim Meyering
16b7a20d01 . 2000-10-30 17:52:42 +00:00
Jim Meyering
f32a1186bc . 2000-10-30 17:51:06 +00:00
Jim Meyering
2689e0a07c *** empty log message *** 2000-10-30 17:50:29 +00:00
Jim Meyering
9d7b428daa *** empty log message *** 2000-10-30 17:50:03 +00:00
Jim Meyering
f177ed1332 *** empty log message *** 2000-10-30 15:59:20 +00:00
Jim Meyering
ad3a1fbb82 Include "system.h" after wctype.h (not before) to avoid
a compilation error on Solaris 5.5.1 systems.
2000-10-30 15:58:59 +00:00
Jim Meyering
82cd6af9bc *** empty log message *** 2000-10-29 22:43:51 +00:00
Jim Meyering
971d190dc4 s/AC_SHELL_IFELSE/AS_IFELSE/ to match autoconf renaming. 2000-10-29 22:43:08 +00:00
Jim Meyering
05fc0219ad fix typo: s/fseek0/fseeko/ 2000-10-29 17:19:51 +00:00
Jim Meyering
aeb6f5e5f3 *** empty log message *** 2000-10-29 15:37:00 +00:00
Jim Meyering
f055dbe669 *** empty log message *** 2000-10-29 13:50:25 +00:00
Jim Meyering
55408e0307 (__restrict_arr): Move definition out of #ifndef block.
Required because egcs-2.91.66 (aka 1.1.2) defines __restrict, but
doesn't define __restrict_arr.
2000-10-29 13:49:56 +00:00
Jim Meyering
0dd327c851 . 2000-10-29 12:36:19 +00:00
Jim Meyering
1f60246c8b *** empty log message *** 2000-10-29 12:34:43 +00:00
Jim Meyering
76be42eef0 *** empty log message *** 2000-10-29 12:34:19 +00:00
Jim Meyering
018d1056e0 *** empty log message *** 2000-10-29 12:33:53 +00:00
Jim Meyering
17b6fd61c3 *** empty log message *** 2000-10-29 12:25:21 +00:00
Jim Meyering
03e6d30ae7 *** empty log message *** 2000-10-29 12:25:07 +00:00
Jim Meyering
78abfe5da3 (do_copy): When constructing dst_path for use with the
--parents option, first remove any trailing slashes from the command
line argument.  Otherwise, tests/cp/cp-parent would fail on NetBSD.
2000-10-29 12:25:03 +00:00
Jim Meyering
ffb5b5a2ad *** empty log message *** 2000-10-29 11:03:18 +00:00
Jim Meyering
12eea70d7d Fix grammar in comment. 2000-10-29 11:03:01 +00:00
Jim Meyering
9ffd4ae3df *** empty log message *** 2000-10-29 08:05:00 +00:00
Jim Meyering
c487c2b929 *** empty log message *** 2000-10-29 08:04:22 +00:00
Jim Meyering
fe62a85366 Add a test. 2000-10-29 08:04:17 +00:00
Jim Meyering
4b4c8534e6 *** empty log message *** 2000-10-29 07:55:27 +00:00
Jim Meyering
e716f459a5 *** empty log message *** 2000-10-29 07:50:07 +00:00
Jim Meyering
013d63bb67 (DT_INIT): Define.
[enum filetype]: Remove the #ifdef, and use DT_INIT on the
initializers instead.
2000-10-29 07:49:35 +00:00
Jim Meyering
f604c52243 (LC_COLLATE): Set it to the empty string and
export it.  Otherwise, tests/cp/cp-mv-backup would fail e.g., when
LC_COLLATE was set to en.  Reported by Vin Shelton.
2000-10-29 07:38:13 +00:00
Jim Meyering
e321b0bd06 [enum filetype] (arg_directory): Rather than `100', use
a number that should never conflict with another DT_* value.
From Ulrich Drepper.
2000-10-28 18:00:57 +00:00
Jim Meyering
007b5b4ba8 (main): In call to gobble_file with "."', use directory'
as the type, not `unknown'.  From Ulrich Drepper.
2000-10-28 17:58:25 +00:00
Jim Meyering
c58f8e0f80 *** empty log message *** 2000-10-28 13:50:23 +00:00
Jim Meyering
328bfd1fb7 Disable this test by default; it's expensive.
Mark this as an expensive test.
2000-10-28 13:50:14 +00:00
Jim Meyering
a3f0f65334 *this* is not an expensive test 2000-10-28 13:49:43 +00:00
Jim Meyering
0a2ef3619c *** empty log message *** 2000-10-28 13:39:20 +00:00
Jim Meyering
5854bc4e0c *** empty log message *** 2000-10-28 13:38:52 +00:00
Jim Meyering
429ea1bad3 *** empty log message *** 2000-10-28 13:12:02 +00:00
Jim Meyering
efde89cc27 *** empty log message *** 2000-10-28 13:11:43 +00:00
Jim Meyering
d4d8f86b15 *** empty log message *** 2000-10-28 12:53:50 +00:00
Jim Meyering
69254ed7d2 Factor out the expensive-test-checking code, ... 2000-10-28 12:53:27 +00:00
Jim Meyering
7b86692737 Mark this as an expensive test. 2000-10-28 12:51:40 +00:00
Jim Meyering
c82dbabbea *** empty log message *** 2000-10-28 12:50:13 +00:00
Jim Meyering
3bd2a88618 source lang-default before the first `cd' 2000-10-28 12:46:59 +00:00
Jim Meyering
4c5cf8b144 source lang-default before the first `cd' 2000-10-28 12:36:37 +00:00
Jim Meyering
d1033dc2b9 source lang-default before the first `cd' 2000-10-28 12:36:17 +00:00
Jim Meyering
a36e91c826 source lang-default before changing directory 2000-10-28 12:33:26 +00:00
Jim Meyering
e9bcabbf05 *** empty log message *** 2000-10-28 12:29:54 +00:00
Jim Meyering
20d893e3e2 (jm_PREREQ): Add jm_PREREQ_MEMCHR.
(jm_PREREQ_MEMCHR): New function.
2000-10-28 12:29:45 +00:00
Jim Meyering
3610481c97 *** empty log message *** 2000-10-28 12:19:05 +00:00
Jim Meyering
b4c60a84e1 *** empty log message *** 2000-10-28 12:18:31 +00:00
Jim Meyering
a67cbceb5a Make `ls' a lot more efficient on systems (e.g., linux-2.4.*)
that save file type information in directory entries.

[enum filetype] (unknown):
Add members (as yet unused):
(HAVE_STRUCT_DIRENT_D_TYPE): Define.
(format_needs_type): New global.
(main): Set it.
(print_dir): Set `type' from directory entry, if possible.
(gobble_file): Add a parameter, TYPE.
Stat the file only if its type is unknown and we need the type.
Patch from Ulrich Drepper.
2000-10-28 12:18:21 +00:00
Jim Meyering
71a47cd7bb *** empty log message *** 2000-10-28 12:00:14 +00:00
Jim Meyering
8f945ecf3a *** empty log message *** 2000-10-28 11:59:34 +00:00
Jim Meyering
d7bb6bd985 *** empty log message *** 2000-10-28 11:50:00 +00:00
Jim Meyering
37c05b6267 Include assert.h.
(fillrand): Add a parameter, size_max.
Add an assertion.
Adjust caller.
(dopass): Break out of the `for (;;)' loop if size < offset.
That can happen now that dopass is called with SIZE == -1.
(do_wipefd): Accept a length of zero only for a regular file.
If lseek fails or returns 0 for a non-regular file, let dopass
determine the length.
Inspired by a patch from Alan Iwi.
2000-10-28 11:49:52 +00:00
Jim Meyering
37bcdce62a . 2000-10-28 08:25:21 +00:00
Jim Meyering
52a97ad805 Update from libc. 2000-10-28 08:24:44 +00:00
Jim Meyering
cc785dc620 *** empty log message *** 2000-10-28 08:22:17 +00:00
Jim Meyering
0f44320b83 Update from libc.
Adjust for portability:
[HAVE_STDLIB_H]: Include stdlib.h.
[HAVE_BP_SYM_H || _LIBC]: Guard inclusion of bp-sym.h.
Undef __memchr, too.
[!weak_alias]: Define __memchr to memchr.
2000-10-28 08:22:11 +00:00
Jim Meyering
3032dfa4ef *** empty log message *** 2000-10-28 07:56:40 +00:00
Jim Meyering
f199ae5181 Update from libc. 2000-10-28 07:56:12 +00:00
Jim Meyering
c2c9db2056 *** empty log message *** 2000-10-28 07:47:07 +00:00
Jim Meyering
13a9a251d8 (setusershell) [HAVE_FSEEKO]: Use fseek0.
Patch by Ulrich Drepper.
2000-10-28 07:47:04 +00:00
Jim Meyering
f0da6c980d Update from libc. 2000-10-28 07:15:32 +00:00
Jim Meyering
6673e992d4 *** empty log message *** 2000-10-26 22:36:58 +00:00
Jim Meyering
141a1086a2 (usage): Mention the time zone, UTC, and write the date
in ISO format in the description of %s.  Suggestion from Karl Berry.
2000-10-26 22:36:39 +00:00
Jim Meyering
f74e9bb483 (Authors of getdate): Add Paul Eggert. 2000-10-26 14:18:24 +00:00
Jim Meyering
a2bbbeb38f *** empty log message *** 2000-10-26 14:18:06 +00:00
Jim Meyering
f3e058b838 typo 2000-10-26 14:16:24 +00:00
Jim Meyering
9ed4fe029a . 2000-10-26 09:39:08 +00:00
Jim Meyering
49ac3c60d0 Update from libc. 2000-10-26 08:08:06 +00:00
Jim Meyering
d9ef180ae5 *** empty log message *** 2000-10-25 08:39:48 +00:00
Jim Meyering
9d29159931 Include dirname.h.
(main): Use dir_name_r rather than open-coding it.
2000-10-25 08:39:29 +00:00
Jim Meyering
342d5997cc *** empty log message *** 2000-10-25 08:36:13 +00:00
Jim Meyering
e63e45a195 (dir_name_r): Declare it. 2000-10-25 08:36:08 +00:00
Jim Meyering
6b4ccb9ba3 *** empty log message *** 2000-10-25 08:34:36 +00:00
Jim Meyering
22e86fcb3c *** empty log message *** 2000-10-25 06:01:31 +00:00
Jim Meyering
faf5915f7d cppi, on one line 2000-10-25 06:01:24 +00:00
Jim Meyering
d538aba94d Update from libc. 2000-10-25 06:00:26 +00:00
Jim Meyering
26f187aa36 *** empty log message *** 2000-10-24 08:20:17 +00:00
Jim Meyering
7e87cd0d6e (hard_locale): Revert last change -- it was simply
wrong.  That set_locale call must not have any side effects.
From Paul Eggert.
2000-10-24 08:20:13 +00:00
Jim Meyering
a20eb902b8 *** empty log message *** 2000-10-23 06:38:10 +00:00
Jim Meyering
da66e2e769 *** empty log message *** 2000-10-23 06:31:28 +00:00
Jim Meyering
963388111d *** empty log message *** 2000-10-23 06:29:30 +00:00
Jim Meyering
7499ea8154 *** empty log message *** 2000-10-23 06:28:01 +00:00
Jim Meyering
79f359ff8a Clean up version-related variables. 2000-10-23 06:27:50 +00:00
Jim Meyering
6a19cbc61b *** empty log message *** 2000-10-22 22:40:13 +00:00
Jim Meyering
9e546891f1 remove remnants of lang-default change 2000-10-22 21:24:40 +00:00
Jim Meyering
171aba014f source lang-default *before* the `cd' 2000-10-22 21:23:18 +00:00
Jim Meyering
ed3d57b572 *** empty log message *** 2000-10-22 21:13:53 +00:00
Jim Meyering
81e231a46d . 2000-10-22 21:12:59 +00:00
Jim Meyering
0622127ac6 include stdio.h 2000-10-22 21:11:53 +00:00
Jim Meyering
a76f632427 *** empty log message *** 2000-10-22 21:09:53 +00:00
Jim Meyering
bf660d1331 (md5_process_block) [OP]: Use `rol', not CYCLIC.
[CYCLIC]: Remove now-unused definition.
2000-10-22 21:09:43 +00:00
Jim Meyering
7bb9c7382f s/shasum/sha1sum/ 2000-10-22 14:40:44 +00:00
Jim Meyering
6e955cb84a *** empty log message *** 2000-10-22 14:25:12 +00:00
Jim Meyering
f08ced6c34 *** empty log message *** 2000-10-22 14:21:47 +00:00
Jim Meyering
c66278dffc renamed from shasum.c 2000-10-22 14:19:52 +00:00
Jim Meyering
ed2d4df754 renamed from shasum.x 2000-10-22 14:18:02 +00:00
Jim Meyering
1bc1a37f86 fix typo 2000-10-22 14:03:33 +00:00
Jim Meyering
674233fb72 *** empty log message *** 2000-10-22 13:17:10 +00:00
Jim Meyering
1f2219cabf (print_long_format): Wrap date format strings in _(...)
so they may be internationalized.  Suggestion from Christian Rose.
2000-10-22 13:15:22 +00:00
Jim Meyering
f0d9306c78 (make_path_private): Add a FIXME comment. 2000-10-22 13:10:20 +00:00
Jim Meyering
28c6609c86 Source lang-default rather than open-coding
the setting/exporting of LANG, LC_ALL, and LANGUAGE.
2000-10-22 13:09:28 +00:00
Jim Meyering
43c38af6a1 *** empty log message *** 2000-10-22 13:08:50 +00:00
Jim Meyering
7cbb85937a Source lang-default rather than open-coding
the setting/exporting of LANG, LC_ALL, and LANGUAGE.
2000-10-22 13:08:43 +00:00
Jim Meyering
8c61ed9ff1 . 2000-10-22 13:03:06 +00:00
Jim Meyering
6ba06cf611 *** empty log message *** 2000-10-22 13:02:40 +00:00
Jim Meyering
957f363d1d *** empty log message *** 2000-10-22 13:02:00 +00:00
Jim Meyering
38856139ea *** empty log message *** 2000-10-22 12:57:48 +00:00
Jim Meyering
206ffe5898 *** empty log message *** 2000-10-22 12:51:38 +00:00
Jim Meyering
34b462a936 . 2000-10-22 12:00:22 +00:00
Jim Meyering
82495b5d26 . 2000-10-22 11:56:18 +00:00
Jim Meyering
cf806f5d2d . 2000-10-22 11:51:50 +00:00
Jim Meyering
148e5d1b4d Factor out the differences between MD5 and SHA1,
and parameterize so this code may be used by both md5sum and the new
program, shasum.  Loosely based on a patch from Scott Miller.
2000-10-22 11:50:16 +00:00
Jim Meyering
8a149d2242 Support 8-byte integers, assuming they're printable with e.g., %lld.
Add support for printing data as unsigned
long long integers.
2000-10-22 07:33:21 +00:00
Jim Meyering
b84871a279 add missing backslash 2000-10-22 07:20:24 +00:00
Jim Meyering
807e464dec *** empty log message *** 2000-10-22 06:57:54 +00:00
Jim Meyering
1f3a6e1eb8 (O_DIRECTORY): Define, if needed.
(save_cwd) [HAVE_FCHDIR]: Use O_DIRECTORY when opening ".".
Suggestion from Ulrich Drepper.
2000-10-22 06:57:42 +00:00
Jim Meyering
a48426382d *** empty log message *** 2000-10-22 06:50:02 +00:00
Jim Meyering
77ad7205cb *** empty log message *** 2000-10-22 06:43:52 +00:00
Jim Meyering
c599760ff1 2000-10-21 20:07:49 +00:00
Jim Meyering
e563a1a5b5 . 2000-10-21 20:07:03 +00:00
Jim Meyering
4e329a1473 *** empty log message *** 2000-10-21 20:01:28 +00:00
Jim Meyering
fd717e8d45 *** empty log message *** 2000-10-21 20:00:37 +00:00
Jim Meyering
13e80acf07 The command, `yes ''|./cat -n' would stop printing after INT_MAX lines.
(cat): Never let `newlines' exceed 3.
2000-10-21 19:57:41 +00:00
Jim Meyering
51e2ffc524 Prevent a counter buffer overrun when numbering lines and when
processing 100 billion lines (or more) of input.

(LINE_COUNTER_BUF_LEN): Define to allow numbering as
many as 10^18 - 1 lines (the old limit was 10^11 - 1, and could
be exceeded without too much trouble).	Use this symbol rather
than hard-coding the constant everywhere.  Rather than overruning
for input with more lines, mark the line number by putting a
`>' in the leftmost slot.
(next_line_num): Fixed (now academic) possible line buffer overrun.
Patch by Jan Nieuwenhuizen.
2000-10-21 19:16:37 +00:00
Jim Meyering
379688e35d *** empty log message *** 2000-10-21 13:22:39 +00:00
Jim Meyering
4d2231d02c *** empty log message *** 2000-10-21 13:09:31 +00:00
Jim Meyering
c344de8d9b *** empty log message *** 2000-10-21 13:05:55 +00:00
Jim Meyering
fb5e934c73 (SORT_OUT_OF_ORDER): Define.
(main): Use it instead of hard-coding the `1'.
2000-10-21 13:05:40 +00:00
Jim Meyering
09ad98374b (main): Use EXIT_SUCCESS rather than 0.
Fail when checking (-c) with more than one file argument,
rather than simply ignoring the extra arguments.
2000-10-21 13:03:40 +00:00
Jim Meyering
6864ceca11 tweak comment 2000-10-21 12:46:58 +00:00
Jim Meyering
ef43db1c4b (dir_name_r): New function, factored out of dir_name.
(dir_name): Use dir_name_r.
2000-10-21 11:44:43 +00:00
Jim Meyering
b9dbd94712 *** empty log message *** 2000-10-21 11:29:01 +00:00
Jim Meyering
9ff69c8035 (memrchr): Declare if necessary.
(dir_name): Remove the restriction that there be no
trailing slashes.  Now, this code skips past them, effectively
ignoring them.
[TEST_DIRNAME] (main): New unit tests.
2000-10-21 11:28:42 +00:00
Jim Meyering
c03498f2e7 *** empty log message *** 2000-10-21 10:37:14 +00:00
Jim Meyering
e45c3dba07 (jm_PREREQ_DIRNAME): New macro. 2000-10-21 10:37:10 +00:00
Jim Meyering
bc6477ff72 (AC_REPLACE_FUNCS): Add memrchr. 2000-10-21 10:36:49 +00:00
Jim Meyering
e46f105350 (jm_CHECK_DECLS): Also check for memrchr. 2000-10-21 10:36:32 +00:00
Jim Meyering
6ab7032952 *** empty log message *** 2000-10-21 10:33:25 +00:00
Jim Meyering
a5301cb3e2 New file, derived from the one in GNU libc. 2000-10-21 10:27:59 +00:00
Jim Meyering
9bab244d20 . 2000-10-19 11:43:34 +00:00
Jim Meyering
3b5b337246 Update from master repository. 2000-10-19 11:43:28 +00:00
Jim Meyering
3b60294bd9 *** empty log message *** 2000-10-18 20:48:04 +00:00
Jim Meyering
7243403b27 (universal_time): Remove; it's just a temptation to do the wrong thing.
(main): The -u option now just sets TZ; it doesn't do anything else.
(show_date): Do not do anything special if -u is set.
This affects the behavior of the -I and -R options.
2000-10-18 20:47:25 +00:00
Jim Meyering
d478d6efec * src/date.c (universal_time): Remove; it's just a temptation to
do the wrong thing.
(main): The -u option now just sets TZ; it doesn't do anything else.
(show_date): Do not do anything special if -u is set.
This affects the behavior of the -I and -R options.

* doc/sh-utils.texi: Document the above.
2000-10-18 20:45:20 +00:00
Jim Meyering
dbfbb93424 Undo the effect of the 1997-07-12 change to date.c; it
broke "date -u MMDDhhmm" and it wasn't documented.
This reverts to the behavior of the 1996-01-03 patch.

(utc-0, utc-1, relative-2): Adjust to above change.
2000-10-18 19:03:30 +00:00
Jim Meyering
29a4bf90d3 Undo the effect of the 1997-07-12 change to date.c; it
broke "date -u MMDDhhmm" and it wasn't documented.
This reverts to the behavior of the 1996-01-03 patch.

(TZ_UTC0, MAYBE_SET_TZ_UTC0, set_tz): Remove.
(batch_convert): Don't futz with TZ.
(main): -u now parses all dates as UTC, not just some.
2000-10-18 19:02:56 +00:00
Jim Meyering
fe5cad6b29 space to tab 2000-10-18 19:02:34 +00:00
Jim Meyering
39520407ef *** empty log message *** 2000-10-18 09:51:00 +00:00
Jim Meyering
2e4b629e21 (Examples of date): Fix a typo. 2000-10-18 09:50:56 +00:00
Jim Meyering
eaca68c289 *** empty log message *** 2000-10-18 07:42:08 +00:00
Jim Meyering
7e02b6c989 Make sure the programs use C-locale formats
and translations.  Bruno Haible reported that this test would fail
when using other locales, because ls printed a translation of `total'.
2000-10-18 07:41:59 +00:00
Jim Meyering
32dfed954f *** empty log message *** 2000-10-17 08:45:42 +00:00
Jim Meyering
55f43f7915 *** empty log message *** 2000-10-17 08:45:32 +00:00
Jim Meyering
6cca23cec4 *** empty log message *** 2000-10-17 08:45:11 +00:00
Jim Meyering
0be2660d96 [PARAMS]: Define and use. 2000-10-17 08:45:07 +00:00
Jim Meyering
a8bf544803 *** empty log message *** 2000-10-17 06:45:57 +00:00
Jim Meyering
c841079462 Update from libc. 2000-10-17 06:45:49 +00:00
Jim Meyering
ad06715030 *** empty log message *** 2000-10-16 22:05:20 +00:00
Jim Meyering
66a4baa8a6 *** empty log message *** 2000-10-16 22:01:11 +00:00
Jim Meyering
ae2b7961cf *** empty log message *** 2000-10-16 14:31:38 +00:00
Jim Meyering
6f84766d19 *** empty log message *** 2000-10-16 14:30:39 +00:00
Jim Meyering
fd00df9c4d fix spell-o in comment 2000-10-16 08:10:58 +00:00
Jim Meyering
d15557db96 (rm_option_init): Remove FIXME-maybe comment. 2000-10-16 08:09:57 +00:00
Jim Meyering
b31c11e46b . 2000-10-16 08:09:42 +00:00
Jim Meyering
bdb5516fdd *** empty log message *** 2000-10-16 06:25:55 +00:00
Jim Meyering
c8c93cfefa *** empty log message *** 2000-10-16 06:25:29 +00:00
Jim Meyering
640221896f (hard_locale): Use "", not 0 as 2nd arg to setlocale.
From Jan Fedak.
2000-10-16 06:24:33 +00:00
Jim Meyering
d73ea5f65a . 2000-10-15 11:53:35 +00:00
Jim Meyering
d72623052b . 2000-10-12 02:36:18 +00:00
Jim Meyering
a5b38192d0 (Time directives) [%S]: Range is 0..60, not 0..61. 2000-10-12 02:28:27 +00:00
Jim Meyering
5681a0705f *** empty log message *** 2000-09-30 11:58:17 +00:00
Jim Meyering
04f6bb2648 *** empty log message *** 2000-09-30 09:50:23 +00:00
Jim Meyering
ad09410b04 (main): Rename local symbolic_mode' to specified_mode'. 2000-09-30 09:40:56 +00:00
Jim Meyering
cc4722e802 *** empty log message *** 2000-09-30 09:39:52 +00:00
Jim Meyering
f8e66794d9 (change_file_mode): Perform the chmod even if the
file mode permission bits are the same as those that should be set.
Omitting the chmod call would be alright with minimal 1003.1e DS17
ACLs, but eventually there will be other permissions in addition to
rwx.  E.g., add and delete for directories, and something analogous
to NT's take ownership permission.
2000-09-30 09:39:41 +00:00
Jim Meyering
e2b45cb9fe (main): Don't set the umask to 0 and hand-apply
the previously-set umask unconditionally.  Do that only when a
MODE has been specified.  Otherwise, call mkfifo with the full
creation mask (0777 or 0666) and let the kernel apply the umask.
The difference shows up only on file systems with ACL support
when the containing directory has a default ACL.
Patch by Andreas Gruenbacher.
(main): Rename local `symbolic_mode' to `specified_mode'.
Also, when MODE is specified, call chmod to ensure that the
permission bits are set as specified even when the containing
directory has a default ACL.
2000-09-30 08:56:06 +00:00
Jim Meyering
2170a48956 (main): Rename local symbolic_mode' to specified_mode'. 2000-09-30 08:53:27 +00:00
Jim Meyering
beebc69168 (main): Don't set the umask to 0 and hand-apply
the previously-set umask unconditionally.  Do that only when a
MODE has been specified.  Otherwise, call mknod with the full
creation mask (0777 or 0666) and let the kernel apply the umask.
The difference shows up only on file systems with ACL support
when the containing directory has a default ACL.
Patch by Andreas Gruenbacher.
(main): Rename local `symbolic_mode' to `specified_mode'.
Also, when MODE is specified, call chmod to ensure that the
permission bits are set as specified even when the containing
directory has a default ACL.
2000-09-30 08:53:10 +00:00
Jim Meyering
daf9d41918 (main): Rename local symbolic_mode' to specified_mode'. 2000-09-30 08:49:51 +00:00
Jim Meyering
105cbe3ea3 (main): Don't set the umask to 0 and hand-apply
the previously-set umask unconditionally.  Do that only when a
MODE has been specified.  Otherwise, call mkdir with the full
creation mask (0777 or 0666) and let the kernel apply the umask.
The difference shows up only on file systems with ACL support
when the containing directory has a default ACL.
Patch by Andreas Gruenbacher.
2000-09-30 08:49:17 +00:00
Jim Meyering
f14dbb1710 *** empty log message *** 2000-09-30 08:42:11 +00:00
Jim Meyering
ec8df1d330 *** empty log message *** 2000-09-30 08:35:05 +00:00
Jim Meyering
d7232f8ca7 Update to use newer template. 2000-09-30 08:32:55 +00:00
Jim Meyering
c217428f39 (main): Rename local symbolic_mode' to specified_mode'. 2000-09-30 08:20:23 +00:00
Jim Meyering
41939d7bfe Remove option-describing comment block. 2000-09-30 08:19:34 +00:00
Jim Meyering
e7f9f83fa1 *** empty log message *** 2000-09-30 08:10:36 +00:00
Jim Meyering
77eb8604f1 (TESTS): Add perm. 2000-09-30 08:10:31 +00:00
Jim Meyering
f8d8ad4e94 *** empty log message *** 2000-09-30 08:09:14 +00:00
Jim Meyering
52e7fcc46c *** empty log message *** 2000-09-30 08:08:21 +00:00
Jim Meyering
96cde75480 *** empty log message *** 2000-09-30 08:05:32 +00:00
Jim Meyering
55b181511c (usage): Add a separate usage line, just for `OPTION'. 2000-09-29 21:40:38 +00:00
Jim Meyering
6ce74d5d36 *** empty log message *** 2000-09-29 21:40:33 +00:00
Jim Meyering
588d70c624 *** empty log message *** 2000-09-29 21:39:51 +00:00
Jim Meyering
6a8e993550 Run `diff -c' only if cmp finds a difference.
Clean up.
2000-09-29 10:17:51 +00:00
Jim Meyering
087520e781 . 2000-09-25 22:38:16 +00:00
Jim Meyering
8879e63dee (long_opts): --exact doesn't take an argument. 2000-09-25 22:37:54 +00:00
Jim Meyering
1a37445686 *** empty log message *** 2000-09-25 22:37:17 +00:00
Jim Meyering
d6ce71fb68 *** empty log message *** 2000-09-25 22:36:45 +00:00
Jim Meyering
65e65dbf30 *** empty log message *** 2000-09-25 20:25:04 +00:00
Jim Meyering
ec00767a8e Don't use `diff -u'. It's not portable.
Run `diff -c' only if cmp finds a difference.
2000-09-25 20:23:43 +00:00
Jim Meyering
f443264116 *** empty log message *** 2000-09-25 20:23:11 +00:00
Jim Meyering
6292a2bb96 *** empty log message *** 2000-09-25 19:43:57 +00:00
Jim Meyering
2371d8faaf Use `(exit 1); exit' paradigm also for framework_failure. 2000-09-25 19:41:56 +00:00
Jim Meyering
2dc45ff0c8 *** empty log message *** 2000-09-25 10:52:09 +00:00
Jim Meyering
d2a170a785 (prev_version_file): Define and use. 2000-09-25 10:51:53 +00:00
Jim Meyering
2da0b15537 (PREV_VERSION): Get the value from a file, rather
than trying to derive it from the current version number.
This is much more robust.
(alpha): Record just-released version number in `.version',
and commit (post-tag).
2000-09-25 10:49:35 +00:00
Jim Meyering
9191f089b9 *** empty log message *** 2000-09-25 07:41:45 +00:00
Jim Meyering
5f201a38b6 *** empty log message *** 2000-09-25 07:33:07 +00:00
Jim Meyering
53feb25dd7 *** empty log message *** 2000-09-25 07:17:29 +00:00
Jim Meyering
9726d96742 *** empty log message *** 2000-09-25 00:23:17 +00:00
Jim Meyering
3283bb8b93 (usage): Match revised documentation better. 2000-09-25 00:09:10 +00:00
Jim Meyering
2b9d8efc91 *** empty log message *** 2000-09-25 00:01:22 +00:00
Jim Meyering
c3da9e25ed (rol): Define (from GnuPG). 2000-09-25 00:00:58 +00:00
Jim Meyering
ab367e6b13 Give credit (GnuPG) where due.
(M): Use rol rather than open-coding it.
Add a FIXME comment.
2000-09-24 23:59:39 +00:00
Jim Meyering
8d0687974f *** empty log message *** 2000-09-24 23:05:57 +00:00
Jim Meyering
230bf31c87 . 2000-09-24 18:42:23 +00:00
Jim Meyering
5f7aed5f78 *** empty log message *** 2000-09-24 11:57:41 +00:00
Jim Meyering
65b0c96d46 (main): Tweak a relatively new diagnostic. 2000-09-24 11:57:36 +00:00
Jim Meyering
cb05584160 *** empty log message *** 2000-09-23 19:27:41 +00:00
Jim Meyering
79043436ce Output more information when a test fails. 2000-09-23 19:27:33 +00:00
Jim Meyering
3584f04f59 adjust for change in behavior 2000-09-23 19:24:12 +00:00
Jim Meyering
1f5e4907c2 . 2000-09-23 09:29:54 +00:00
Jim Meyering
a04e5b9dbc (main): When used with --force, each of the --link and
--symbolic-link options now implies --remove-destination.
2000-09-22 20:41:40 +00:00
Jim Meyering
ce8d840e83 *** empty log message *** 2000-09-22 19:30:36 +00:00
Jim Meyering
39da0cbc3b (cp_option_init): Once again make it so install always
unlinks an existing destination before trying to open it for writing.
Otherwise, installing onto a running shared library would make the
running program malfunction.
2000-09-22 19:30:29 +00:00
Jim Meyering
dffa52e11a *** empty log message *** 2000-09-22 19:28:24 +00:00
Jim Meyering
60c672e7ec (TESTS): Add dir-rm-dest. 2000-09-22 19:27:31 +00:00
Jim Meyering
ace3c90796 *** empty log message *** 2000-09-22 18:31:02 +00:00
Jim Meyering
c2c680ad95 (do_move): Moving a directory specified with a trailing
slash from one partition to another, and giving it a different
name at the destination would cause mv to get a failed assertion.
Reported by Michael Stone.
(strip_trailing_slashes_2): Move function definition to precede new first use.
2000-09-22 15:40:43 +00:00
Jim Meyering
e34407ac09 *** empty log message *** 2000-09-22 15:39:03 +00:00
Jim Meyering
bca49a8c12 (TESTS): Add part-rename. 2000-09-22 15:38:37 +00:00
Jim Meyering
483f907eb8 (copy_internal): Don't try to unlink directories when
using --remove-dest with -R.
2000-09-22 14:14:55 +00:00
Jim Meyering
f680954f1f *** empty log message *** 2000-09-22 13:31:14 +00:00
Jim Meyering
e7a17082b4 *** empty log message *** 2000-09-21 14:40:09 +00:00
Jim Meyering
33675b72ce *** empty log message *** 2000-09-21 05:40:34 +00:00
Jim Meyering
7708d86636 (parse_user_spec): Remove debugging printf I'd added.
Argh!
2000-09-21 05:40:28 +00:00
Jim Meyering
ff8d7f3d98 *** empty log message *** 2000-09-20 09:43:37 +00:00
Jim Meyering
39e3db9605 *** empty log message *** 2000-09-20 09:43:07 +00:00
Jim Meyering
8619939503 *** empty log message *** 2000-09-20 08:06:06 +00:00
Jim Meyering
aba49610d9 *** empty log message *** 2000-09-20 08:05:39 +00:00
Jim Meyering
4b5edfea53 (libfetish_a_SOURCES): Add sha.c.
(noinst_HEADERS): Add sha.h.
Based on code from Scott G. Miller and from GnuPG.
2000-09-20 08:05:24 +00:00
Jim Meyering
98daab19b9 . 2000-09-20 07:38:56 +00:00
Jim Meyering
6924fde974 *** empty log message *** 2000-09-18 06:37:15 +00:00
Jim Meyering
cf19019bf9 (AC_FUNC_GETLOADAVG): Restore the initial value of LIBS.
Otherwise, everyone ends up linking with -lelf for some configurations.
Reported by Mike Stone.
2000-09-18 06:37:01 +00:00
Jim Meyering
eccfa6b591 shrink tmp array length from 80 to 16. 2000-09-17 13:02:43 +00:00
Jim Meyering
1778e41773 use gnupg R/M macros 2000-09-17 13:01:02 +00:00
Jim Meyering
2d3aded1bb checkpoint 2000-09-17 12:54:25 +00:00
Jim Meyering
9d524deb2b *** empty log message *** 2000-09-17 11:12:31 +00:00
Jim Meyering
12079963ab remove debug junk 2000-09-17 11:11:26 +00:00
Jim Meyering
30ee9b3006 moving to gnupg's version of sha1.c 2000-09-17 11:11:01 +00:00
Jim Meyering
e87dcda480 snapshot of massaged original 2000-09-17 11:08:06 +00:00
Jim Meyering
3d929fbda2 . 2000-09-16 16:49:23 +00:00
Jim Meyering
c0e5ce613e *** empty log message *** 2000-09-16 16:47:06 +00:00
Jim Meyering
59a8abac57 Update from libc. 2000-09-16 16:46:50 +00:00
Jim Meyering
89aa821b03 *** empty log message *** 2000-09-16 16:26:09 +00:00
Jim Meyering
eaa53735c2 (Changing Special Permissions): Remove this statement:
`a' in the USERS part of a symbolic mode does not cause the special
permissions to be affected...  It doesn't reflect what the code does
and isn't required by POSIX.  Reported by aldomel@ix.netcom.com via
Mike Stone.
2000-09-16 16:26:02 +00:00
Jim Meyering
2dfa2338b8 *** empty log message *** 2000-09-15 06:33:32 +00:00
Jim Meyering
a7f53c72b3 *** empty log message *** 2000-09-12 14:04:20 +00:00
Jim Meyering
f6234990b2 *** empty log message *** 2000-09-10 19:48:05 +00:00
Jim Meyering
9eb2ccc113 (LC_ALL): Set to `C' and export to ensure
that `ls' sorts the same way for everyone.  Reported by Vin Shelton.
2000-09-10 19:47:56 +00:00
Jim Meyering
92ae1c7d2a *** empty log message *** 2000-09-10 19:04:14 +00:00
Jim Meyering
31d9a98e82 (b_host): Use freefriends.org, not tug.org. 2000-09-10 19:04:09 +00:00
Jim Meyering
4df3e0f3b9 *** empty log message *** 2000-09-10 07:31:54 +00:00
Jim Meyering
834c4dbfe1 (_getopt_internal): Update from glibc. 2000-09-10 07:31:44 +00:00
Jim Meyering
3d7a795592 *** empty log message *** 2000-09-09 16:34:17 +00:00
Jim Meyering
1352d5e6ce (usage): Make second `Usage' line more precise
(also making it match the texinfo documentation).
2000-09-09 16:33:59 +00:00
Jim Meyering
327b8f63c0 *** empty log message *** 2000-09-09 16:02:37 +00:00
Jim Meyering
af49390ea7 Rename ISASCII to IN_CTYPE_DOMAIN. 2000-09-09 15:58:57 +00:00
Jim Meyering
ac42c1a725 Rename ISASCII to IN_CTYPE_DOMAIN. 2000-09-09 15:58:03 +00:00
Jim Meyering
5f9e998bca Rename ISASCII to IN_CTYPE_DOMAIN. 2000-09-09 15:56:26 +00:00
Jim Meyering
16bcaae35b (Setting the time): Correct the capitalization of
`HHMM' in the info-rendering of the texinfo documentation.
2000-09-09 14:35:39 +00:00
Jim Meyering
315d948fe2 *** empty log message *** 2000-09-09 14:35:18 +00:00
Jim Meyering
3016c52459 *** empty log message *** 2000-09-09 12:12:28 +00:00
Jim Meyering
a6e3bc0ace (announcement): Use a stricter regexp for the previous version. 2000-09-09 12:12:16 +00:00
Jim Meyering
940dc652a5 *** empty log message *** 2000-09-09 09:58:16 +00:00
199 changed files with 5975 additions and 1381 deletions

View File

@@ -25,3 +25,8 @@ all:
@exit 1
endif
# Tell version 3.79 and up of GNU make to not build goals in this
# directory in parallel. This is necessary in case someone tries to
# build multiple targets on one command line.
.NOTPARALLEL:

View File

@@ -11,10 +11,15 @@ maintainer-check:
$(MAKE) distcheck
$(MAKE) my-distcheck
prev-version := $(shell echo $(VERSION)|tr a-z Xa-y)
prev_version_file = .prev-version
THIS_VERSION_REGEXP = $(subst .,\.,$(VERSION))
PREV_VERSION := $(shell cat $(prev_version_file))
PREV_VERSION_REGEXP := $(shell echo $(PREV_VERSION)|sed 's/\./\\./g')
tag-package = $(shell echo "$(PACKAGE)" | tr a-z A-Z)
tag-this-version = $(subst .,_,$(VERSION))
tag-prev-version = $(subst .,_,$(prev-version))
tag-prev-version = $(subst .,_,$(PREV_VERSION))
this-cvs-tag = $(tag-package)-$(tag-this-version)
prev-cvs-tag = $(tag-package)-$(tag-prev-version)
@@ -25,6 +30,9 @@ po-check:
diff -u $@-1 $@-2
rm -f $@-1 $@-2
# Do not save the original name or timestamp in the .tar.gz file.
GZIP_ENV = --no-name
# Tag before making distribution. Also, don't make a distribution if
# checks fail. Also, make sure the NEWS file is up-to-date.
# FIXME: use dist-hook/my-dist like distcheck-hook/my-distcheck.
@@ -70,25 +78,20 @@ my-distcheck: writable-files po-check
echo "$(distdir).tar.gz is ready for distribution"; \
echo "========================"
THIS_VERSION_REGEXP = $(subst .,\.,$(VERSION))
# FIXME: this works only for Gnits-style test releases.
PREV_VERSION := $(shell echo $(VERSION)|tr b-z a-y|sed 's/a$$//')
PREV_VERSION_REGEXP := $(shell echo $(PREV_VERSION)|sed 's/\./\\./g')
v = Version
a_host = alpha.gnu.org
b_host = tug.org
b_host = freefriends.org
alpha_subdir = gnu/fetish
a_url_dir = $(alpha_subdir)
b_url_dir = $(alpha_subdir)
a_real_dir = /fs/share/ftp/$(alpha_subdir)
b_real_dir = /home/ftp/pub/$(alpha_subdir)
b_real_dir = fetish-ftp
url_dir_list = $(foreach x,a b,ftp://$($(x)_host)/$($(x)_url_dir))
md5 = $(shell md5sum < $(distdir).tar.gz|sed 's/ -//')
sha1 = $(shell sha1sum < $(distdir).tar.gz|sed 's/ -//')
rel-check:
tarz=/tmp/rel-check-tarz-$$$$; \
@@ -118,18 +121,20 @@ announcement: NEWS ChangeLog $(distdir).tar.gz
for url in $(url_dir_list); do \
echo " $$url/$(xd-delta)"; \
done; \
echo "Here are the MD5 and SHA1 signatures for the .tar.gz file"; \
echo; \
echo "$(md5) $(distdir).tar.gz"; \
echo "$(sha1) $(distdir).tar.gz"; \
echo; \
echo NEWS:; \
sed -n "/$(THIS_VERSION_REGEXP)/,/$(PREV_VERSION_REGEXP)/p" NEWS \
sed -n "/$(THIS_VERSION_REGEXP)/,/^\[$(PREV_VERSION_REGEXP)/p" NEWS \
| grep -v '^\['; \
echo; \
echo ChangeLog entries:; \
find . -name ChangeLog \
find . -name ChangeLog -maxdepth 2 \
| xargs cvs diff -up -r$(prev-cvs-tag) -rHEAD \
| sed -n 's/^+//p' \
| perl -ne 'm!^\+\+ (\./)?! or print,next;' \
| perl -ne 'm!^\+\+ (\./)?! or print,next;' \
-e 'print "\n"."*"x70 ."\n"; s///; print; print "*"x70 ."\n"'; \
)
@@ -162,6 +167,8 @@ alpha: writable-files po-check
&& xdelta delta -9 $(prev-tgz) $(distdir).tar.gz $(xd-delta) || :
ln $(release-archive-dir)/$(xd-delta) .
chmod a-w $(release-archive-dir)/$(xd-delta)
echo $(VERSION) > $(prev_version_file)
cvs ci -m. $(prev_version_file)
@echo =====================================
@echo =====================================
@echo 'scp $(xd-delta) $(distdir).tar.gz \'

24
THANKS
View File

@@ -14,8 +14,10 @@ Alan Iwi iwi@atm.ox.ac.uk
Alberto Accomazzi alberto@cfa0.harvard.edu
aldomel aldomel@ix.netcom.com
Alen Muzinic zveki@fly.cc.fer.hr
Alexandre Duret-Lutz duret_g@epita.fr
Alexey Solovyov alekso@math.uu.se
Andre Novaes Cunha Andre.Cunha@br.global-one.net
Andreas Gruenbacher ag@bestbits.at
Andreas Jaeger jaeger@gnu.org
Andreas Luik luik@isa.de
Andreas Schwab schwab@suse.de
@@ -26,6 +28,7 @@ Andrew Dalke dalke@bioreason.com
Andrew Tridgell tridge@samba.org
Andries Brouwer Andries.Brouwer@cwi.nl
Andy Longton alongton@metamark.com
Antonio Rendas ajrendas@yahoo.com
Ariel Faigon ariel@cthulhu.engr.sgi.com
Arne H. Juul arnej@solan.unit.no
Arne Henrik Juul arnej@imf.unit.no
@@ -50,15 +53,18 @@ Carlos Canau Carlos.Canau@relay.puug.pt
Charles Karney karney@pppl.gov
Charles Randall crandall@matchlogic.com
Chip Salzenberg chip@valinux.com
Chris Sylvain csylvain@umm.edu
Chris Yeo cyeo@biking.org
Christi Alice Scarborough christi@chiark.greenend.org.uk
Christian Krackowizer kra1@technodat.co.at
Christian Krackowizer ckrackowiz@std.schuler-ag.com
Christian Rose menthos@menthos.com
Christian von Roques roques@pond.sub.org
Chuck Hedrick hedrick@klinzhai.rutgers.edu
Clark Morgan cmorgan@aracnet.com
Colin Plumb colin@nyx.net
Collin Rogowski collin@rogowski.de
Dan Hagerty hag@gnu.ai.it.edu
Dan Pascu dan@services.iiruc.ro
Daniel Bergstrom noa@melody.se
David Dyck dcd@tc.fluke.COM
David Godfrey dave@delta.demon.co.uk
@@ -73,7 +79,7 @@ Doug McLaren dougmc@comco.com
Dragos Harabor dharabor@us.oracle.com
Ed Avis epa98@doc.ic.ac.uk
Edzer Pebesma Edzer.Pebesma@rivm.nl
Eirik Fuller eirik@netcom.com
Eirik Fuller eirik@hackrat.com
Eivind eivindt@multinet.no
Eli Zaretskii eliz@is.elta.co.il
Emile LeBlanc leblanc@math.toronto.edu
@@ -118,6 +124,8 @@ James Sneeringer jvs@ocslink.com
James Tanis jtt@soscorp.com
James Youngman james+usenet@free-lunch.demon.co.uk
Jamie Lokier jamie@imbolc.ucc.ie
Jan Fedak J.Fedak@sh.cvut.cz
Jan Nieuwenhuizen janneke@gnu.org
Janos Farkas chexum@shadow.banki.hu
Jarkko Hietaniemi jhi@epsilon.hut.fi
Jeff Moore jbm@mordor.com
@@ -144,12 +152,16 @@ John Salmon johns@mullet.anu.edu.au
John Summerfield summer@OS2.ami.com.au
Joost van Baal joostvb@xs4all.nl
Joseph S. Myers jsm28@cam.ac.uk
jvogel jvogel@linkny.com
Jungshik Shin jshin@pantheon.yale.edu
Jürgen Fluk louis@dachau.marco.de
jvogel jvogel@linkny.com
Kai-Uwe Rommel rommel@informatik.tu-muenchen.de
Kai Henningsen kai@debian.org
Kalle Olavi Niemitalo tosi@stekt.oulu.fi
Kamal Paul Nigam Kamal_Paul_Nigam@gs35.sp.cs.cmu.edu
Karl Eichwalder keichwa@gmx.net
Karl Heuer kwzh@gnu.org
Karl-Michael Schneider schneide@phil.uni-passau.de
Karsten Thygesen karthy@kom.auc.dk
Kaveh R. Ghazi ghazi@caip.rutgers.edu
Keith Owens kaos@audio.apana.org.au
@@ -161,6 +173,7 @@ Lars Hecking lhecking@nmrc.ucc.ie
Lehti Rami rammer@cs.tut.fi
Leonard N. Zubkoff lnz@dandelion.com
Lorne Baker lbaker@nitro.avint.net
M. P. Suzuki mpsuzuki@hiroshima-u.ac.jp
Maciej Kwapulinski pikpok@univ.gda.pl
Manas Garg manas@cygsoft.com
Manfred Hollstein manfred@s-direktnet.de
@@ -188,6 +201,7 @@ Matthew Braun matthew@ans.net
Matthew Clarke Matthew_Clarke@mindlink.bc.ca
Matthew S. Levine mslevine@theory.lcs.mit.edu
Matthew Swift swift@alum.mit.edu
Mattias Wadenstein maswan@acc.umu.se
Matthias Urlichs smurf@noris.de
Meelis Roos mroos@tartu.cyber.ee
Michael ??? michael@roka.net
@@ -266,13 +280,17 @@ Torbjorn Lindgren tl@funcom.no
Torsten Landschoff torsten@pclab.ifg.uni-kiel.de
Ulrich Drepper drepper@gnu.org
Urs Thuermann urs@isnogud.escape.de
Vesselin Atanasov vesselin@bgnet.bg
Vin Shelton acs@alumni.princeton.edu
Volker Borchert bt@teknon.de
Wayne Stewart wstewa@atl.com
Wenjun Zheng zwj@yahoo.com
Werner Almesberger Werner.Almesberger@epfl.ch
Wichert Akkerman wichert@cistron.nl
Will Edgington wedgingt@acm.org
William Bader william@nscs.fast.net
William Dowling will@franklin.com
William Lewis wiml@omnigroup.com
Wolfram Kleff kleff@cs.uni-bonn.de
Won-kyu Park wkpark@chem.skku.ac.kr
Zvi Har'El rl@math.technion.ac.il

View File

@@ -1,6 +1,7 @@
# Makefile.in generated automatically by automake 1.4a from Makefile.am
# Copyright (C) 1994, 1995-9, 2000 Free Software Foundation, Inc.
# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000
# Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.

View File

@@ -30,27 +30,32 @@ or a week from Sunday, with feelings of helpless confusion. @dots{}
--- Robert Grudin, @cite{Time and the Art of Living}.
@end quotation
This section describes the textual date representations that GNU
This section describes the textual date representations that @sc{gnu}
programs accept. These are the strings you, as a user, can supply as
arguments to the various programs. The C interface (via the
@code{getdate} function) is not described here.
@cindex beginning of time, for Unix
@cindex epoch, for Unix
Although the date syntax here can represent any possible time since zero
A.D., computer integers are not big enough for such a (comparatively)
long time. The earliest date semantically allowed on Unix systems is
midnight, 1 January 1970 UCT.
@cindex beginning of time, for @sc{posix}
@cindex epoch, for @sc{posix}
Although the date syntax here can represent any possible time since the
year zero, computer integers often cannot represent such a wide range of
time. On @sc{posix} systems, the clock starts at 1970-01-01 00:00:00
@sc{utc}: @sc{posix} does not require support for times before the
@sc{posix} Epoch and times far in the future. Traditional Unix systems
have 32-bit signed @code{time_t} and can represent times from 1901-12-13
20:45:52 through 2038-01-19 03:14:07 @sc{utc}. Systems with 64-bit
signed @code{time_t} can represent all the times in the known
lifetime of the universe.
@menu
* General date syntax:: Common rules.
* Calendar date items:: 19 Dec 1994.
* Time of day items:: 9:20pm.
* Time zone items:: EST, DST, BST, UTC, ...
* Day of week items:: Monday and others.
* Relative items in date strings:: next tuesday, 2 years ago.
* Calendar date items:: 19 Dec 1994.
* Time of day items:: 9:20pm.
* Time zone items:: @sc{est}, @sc{pdt}, @sc{gmt}, ...
* Day of week items:: Monday and others.
* Relative items in date strings:: next tuesday, 2 years ago.
* Pure numbers in date strings:: 19931219, 1440.
* Authors of getdate:: Bellovin, Salz, Berets, et al.
* Authors of getdate:: Bellovin, Eggert, Salz, Berets, et al.
@end menu
@@ -113,7 +118,7 @@ specified differently, depending on whether the month is specified
numerically or literally. All these strings specify the same calendar date:
@example
1972-09-24 # ISO 8601.
1972-09-24 # @sc{iso} 8601.
72-9-24 # Assume 19xx for 69 through 99,
# 20xx for 00 through 68.
72-09-24 # Leading zeros are ignored.
@@ -136,9 +141,9 @@ sep 24
Here are the rules.
@cindex ISO 8601 date format
@cindex date format, ISO 8601
For numeric months, the ISO 8601 format
@cindex @sc{iso} 8601 date format
@cindex date format, @sc{iso} 8601
For numeric months, the @sc{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 01 and 12, and
@var{day} is a number between 01 and 31. A leading zero must be present
@@ -186,7 +191,7 @@ day. Here are some examples, all of which represent the same time:
20:02:0
20:02
8:02pm
20:02-0500 # In EST (Eastern U.S. Standard Time).
20:02-0500 # In @sc{est} (U.S. Eastern Standard Time).
@end example
More generally, the time of the day may be given as
@@ -206,6 +211,9 @@ or @samp{p.m.}), @var{hour} is restricted to run from 1 to 12, and
indicates the first half of the day, @samp{pm} indicates the second
half of the day. In this notation, 12 is the predecessor of 1:
midnight is @samp{12am} while noon is @samp{12pm}.
(This is the zero-oriented interpretation of @samp{12am} and @samp{12pm},
as opposed to the old tradition derived from Latin
which uses @samp{12m} for noon and @samp{12pm} for midnight.)
@cindex time zone correction
@cindex minutes, time zone correction by
@@ -214,10 +222,10 @@ expressed as @samp{@var{s}@var{hh}@var{mm}}, where @var{s} is @samp{+}
or @samp{-}, @var{hh} is a number of zone hours and @var{mm} is a number
of zone minutes. When a time zone correction is given this way, it
forces interpretation of the time relative to
Coordinated Universal Time (UTC), overriding any previous
Coordinated Universal Time (@sc{utc}), overriding any previous
specification for the time zone or the local time zone. The @var{minute}
part of the time of the day may not be elided when a time zone correction
is used. This is the only way to specify a time zone correction by
is used. This is the best way to specify a time zone correction by
fractional parts of an hour.
Either @samp{am}/@samp{pm} or a time zone correction may be specified,
@@ -229,119 +237,18 @@ but not both.
@cindex time zone item
A @dfn{time zone item} specifies an international time zone, indicated by
a small set of letters. They are supported for backward compatibility reasons,
but they are not recommended because they are ambiguous in practice:
for example, the abbreviation @samp{EST} has different meanings in
Australia and the United States. Any included period is ignored. Military
time zone designations use a single letter. Currently, only integral
zone hours may be represented in a time zone item. See the previous
section for a finer control over the time zone correction.
A @dfn{time zone item} specifies an international time zone, indicated
by a small set of letters, e.g., @samp{UTC} for Coordinated Universal
Time. Any included periods are ignored. By following a
non-daylight-saving time zone by the string @samp{DST} in a separate
word (that is, separated by some white space), the corresponding
daylight saving time zone may be specified.
Here are many non-daylight-saving-time time zones, indexed by the zone
hour value.
@table @asis
@item -1200
@samp{Y} for militaries.
@item -1100
@samp{X} for militaries.
@item -1000
@samp{W} for militaries.
@item -0900
@samp{V} for militaries.
@item -0800
@samp{PST} for Pacific Standard, and
@samp{U} for militaries.
@item -0700
@samp{MST} for Mountain Standard, and
@samp{T} for militaries.
@item -0600
@samp{CST} for Central Standard, and
@samp{S} for militaries.
@item -0500
@samp{EST} for Eastern Standard, and
@samp{R} for militaries.
@item -0400
@samp{AST} for Atlantic Standard, and
@samp{Q} for militaries.
@item -0300
@samp{P} for militaries.
@item -0200
@samp{O} for militaries.
@item -0100
@samp{N} for militaries.
@item +0000
@cindex Greenwich Mean Time
@cindex Coordinated Universal Time
@cindex Universal Coordinated Time
@cindex Universal Time (Coordinated)
@samp{GMT} for Greenwich Mean,
@samp{UT} for Universal,
@samp{UTC} for Coordinated Universal,
@samp{WET} for Western European, and
@samp{Z} for ISO 8601 and militaries.
@item +0100
@samp{A} for militaries,
@samp{CET} for Central European,
@samp{MET} for Midden Europesche Tijd (Dutch), and
@samp{MEZ} for Mittel-Europ@"aische Zeit (German).
@item +0200
@samp{B} for militaries, and
@samp{EET} for Eastern European.
@item +0300
@samp{C} for militaries.
@item +0400
@samp{D} for militaries.
@item +0500
@samp{E} for militaries.
@item +0600
@samp{F} for militaries.
@item +0700
@samp{G} for militaries.
@item +0800
@samp{H} for militaries.
@item +0900
@samp{I} for militaries, and
@samp{JST} for Japan Standard.
@item +1000
@samp{GST} for Guam Standard, and
@samp{K} for militaries.
@item +1100
@samp{L} for militaries.
@item +1200
@samp{M} for militaries, and
@samp{NZST} for New Zealand Standard.
@end table
@cindex daylight-saving time
Here are many daylight-saving time (DST) time zones,
indexed by the zone hour value. Also, by
following a non-DST time zone by the string @samp{DST} in a separate word
(that is, separated by some whitespace), the corresponding DST time zone
may be specified.
@table @asis
@item -0700
@samp{PDT} for Pacific Daylight.
@item -0600
@samp{MDT} for Mountain Daylight.
@item -0500
@samp{CDT} for Central Daylight.
@item -0400
@samp{EDT} for Eastern Daylight.
@item -0300
@samp{ADT} for Atlantic Daylight.
@item +0100
@samp{BST} for British Summer, and
@samp{WEST} for Western European Summer.
@item +0200
@samp{CEST} for Central European Summer,
@samp{MEST} for Midden Europesche S. Tijd (Dutch), and
@samp{MESZ} for Mittel-Europ@"aische Sommerzeit (German).
@item +1300
@samp{NZDT} for New Zealand Daylight.
@end table
Time zone items are obsolescent and are not recommended, because they
are ambiguous; for example, @samp{EST} has a different meaning in
Australia than in the United States. Instead, it's better to use
unambiguous numeric time zone corrections like @samp{-0500}, as
described in the previous section.
@node Day of week items
@@ -409,7 +316,7 @@ The unit of time may be preceded by a multiplier, given as an optionally
signed number. Unsigned numbers are taken as positively signed. No
number at all implies 1 for a multiplier. Following a relative item by
the string @samp{ago} is equivalent to preceding the unit by a
multiplicator with value @math{-1}.
multiplier with value @math{-1}.
@findex day @r{in date strings}
@findex tomorrow @r{in date strings}
@@ -429,9 +336,9 @@ items, like in @samp{12:00 today}. The string @samp{this} also has
the meaning of a zero-valued time displacement, but is preferred in
date strings like @samp{this thursday}.
When a relative item causes the resulting date to cross the boundary
between DST and non-DST (or vice-versa), the hour is adjusted according
to the local time.
When a relative item causes the resulting date to cross a boundary
where the clocks were adjusted, typically for daylight-saving time,
the resulting date and time are adjusted accordingly.
@node Pure numbers in date strings
@@ -439,8 +346,8 @@ to the local time.
@cindex pure numbers in date strings
The precise intepretation of a pure decimal number depends
the context in the date string.
The precise interpretation of a pure decimal number depends
on the context in the date string.
If the decimal number is of the form @var{yyyy}@var{mm}@var{dd} and no
other calendar date item (@pxref{Calendar date items}) appears before it
@@ -468,13 +375,14 @@ year.
@cindex Berets, Jim
@cindex MacKenzie, David
@cindex Meyering, Jim
@cindex Eggert, Paul
@code{getdate} was originally implemented by Steven M. Bellovin
(@email{smb@@research.att.com}) while at the University of North Carolina
at Chapel Hill. The code was later tweaked by a couple of people on
Usenet, then completely overhauled by Rich $alz (@email{rsalz@@bbn.com})
and Jim Berets (@email{jberets@@bbn.com}) in August, 1990. Various
revisions for the GNU system were made by David MacKenzie, Jim Meyering,
and others.
revisions for the @sc{gnu} system were made by David MacKenzie, Jim Meyering,
Paul Eggert and others.
@cindex Pinard, F.
@cindex Berry, K.

View File

@@ -276,18 +276,8 @@ o+t
Remember that the special permissions only affect files that are
executable, plus, on some systems, directories (on which they have
different meanings; @pxref{Mode Structure}). Using @samp{a}
in the @var{users} part of a symbolic mode does not cause the special
permissions to be affected; thus,
@example
a+s
@end example
@noindent
has @emph{no effect}. You must use @samp{u}, @samp{g}, and @samp{o}
explicitly to affect the special permissions. Also, the
combinations @samp{u+t}, @samp{g+t}, and @samp{o+s} have no effect.
different meanings; @pxref{Mode Structure}).
Also, the combinations @samp{u+t}, @samp{g+t}, and @samp{o+s} have no effect.
The @samp{=} operator is not very useful with special permissions; for
example, the mode:

View File

@@ -64,7 +64,7 @@ END-INFO-DIR-ENTRY
@ifinfo
This file documents the GNU shell utilities.
Copyright (C) 1994, 95, 96 Free Software Foundation, Inc.
Copyright (C) 1994, 1995, 1996, 2000 Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of
this manual provided the copyright notice and this permission notice
@@ -96,7 +96,7 @@ by the Foundation.
@page
@vskip 0pt plus 1filll
Copyright @copyright{} 1994, 95, 96 Free Software Foundation, Inc.
Copyright @copyright{} 1994, 1995, 1996, 2000 Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of
this manual provided the copyright notice and this permission notice
@@ -350,6 +350,7 @@ independent way. For example, a string containing the Euro currency symbol
$ /usr/local/bin/printf '\u20AC 14.95'
@end example
@noindent
will be output correctly in all locales supporting the Euro symbol
(ISO-8859-15, UTF-8, and others). Similarly, a Chinese string
@@ -357,18 +358,19 @@ will be output correctly in all locales supporting the Euro symbol
$ /usr/local/bin/printf '\u4e2d\u6587'
@end example
will be output correctly in all chinese locales (GB2312, BIG5, UTF-8, etc).
@noindent
will be output correctly in all Chinese locales (GB2312, BIG5, UTF-8, etc).
Note that in these examples, the full pathname of @code{printf} has been
given, to distinguish it from the GNU @code{bash} builtin function
@code{printf}.
For larger strings, you don't need to look up the hexadecimal code values of
each character one by one. ASCII characters mixed with \u escape sequences
is also known as the JAVA source file encoding. You can use GNU recode 3.5c
(or newer) to convert strings to this encoding. Here is how to convert a
piece of text into a shell script which will output this text in a locale-
independent way:
For larger strings, you don't need to look up the hexadecimal code
values of each character one by one. ASCII characters mixed with \u
escape sequences is also known as the JAVA source file encoding. You can
use GNU recode 3.5c (or newer) to convert strings to this encoding. Here
is how to convert a piece of text into a shell script which will output
this text in a locale-independent way:
@smallexample
$ LC_CTYPE=zh_CN.big5 /usr/local/bin/printf \
@@ -2202,7 +2204,7 @@ format of the @samp{%c} directive (described below). Synopses:
@example
date [@var{option}]@dots{} [+@var{format}]
date [-u|--utc|--universal] @c this avoids a newline in the output
[ @var{MMDDhhmm}[[@var{CC}]@var{YY}][.@var{ss}] ]
[ MMDDhhmm[[CC]YY][.ss] ]
@end example
@findex strftime @r{and @code{date}}
@@ -2258,7 +2260,7 @@ Note that this value is the number of seconds between the epoch
and the current date as defined by the localtime system call.
It isn't changed by the @samp{--date} option.
@item %S
second (00@dots{}61)
second (00@dots{}60)
@item %T
time, 24-hour (hh:mm:ss)
@item %X
@@ -2400,7 +2402,7 @@ zone.
The argument must consist entirely of digits, which have the following
meaning:
@table @var
@table @samp
@item MM
month
@item DD
@@ -2479,16 +2481,14 @@ Append the hours, minutes, and seconds.
@end table
If showing any time terms, then include the time zone using the format
@samp{%z}. If @samp{--utc} is also specified, use @samp{%Z} in place of
@samp{%z}.
@item -R
@itemx --rfc-822
@opindex -R
@opindex --rfc-822
Display the time and date using the RFC-822-specified
Display the time and date using the RFC-822-conforming
format, @samp{%a, %_d %b %Y %H:%M:%S %z}.
If @samp{--utc} is also specified, use @samp{GMT} in place of @samp{%z}.
@item -r @var{file}
@itemx --reference=@var{file}
@@ -2501,7 +2501,7 @@ time of @var{file}, instead of the current time and date.
@itemx --set=@var{datestr}
@opindex -s
@opindex --set
Set the time and date to @var{datestr}, See @samp{-d} above.
Set the time and date to @var{datestr}. See @samp{-d} above.
@item -u
@itemx --utc
@@ -2509,11 +2509,16 @@ Set the time and date to @var{datestr}, See @samp{-d} above.
@opindex -u
@opindex --utc
@opindex --universal
@cindex coordinated universal time
@cindex Coordinated Universal Time
@cindex UTC
@cindex Greenwich Mean Time
Print or set the time and date in Universal Coordinated Time instead of
in local (wall clock) time.
@cindex GMT
Use Coordinated Universal Time (@sc{utc}) by operating as if the
@env{TZ} environment variable was set to the string @samp{UTC0}.
Normally, @command{date} operates in the time zone indicated by
@env{TZ}, or the system default if @env{TZ} is not set. Coordinated
Universal Time is often called ``Greenwich Mean Time'' (@sc{gmt}) for
historical reasons.
@end table
@@ -2591,7 +2596,7 @@ To convert a date string to the number of seconds since the epoch
the @samp{%s} format. That can be useful in sorting and/or graphing
and/or comparing data by date. The following command outputs the
number of the seconds since the epoch for the time one second later
than the epoch, but in time zone five hours later (Cambridge, Massachusetts),
than the epoch, but in a time zone five hours later (Cambridge, Massachusetts),
thus a total of five hours and one second after the epoch:
@example
@@ -2956,7 +2961,7 @@ nohup @var{command} [@var{arg}]@dots{}
@flindex nohup.out
@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 terminal,
it has a slightly smaller chance to run. If standard output is a terminal,
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
@@ -3335,11 +3340,11 @@ $ seq -s' ' 0 .1 .3
0 0.1 0.2
@end example
But doesn't happen on most systems because @code{seq} is implemented using
binary floating point arithmetic (via the C @code{double} type) -- which
means some decimal numbers like @code{.1} cannot be represented exactly.
That in turn means some nonintuitive conditions like @code{.1 * 3 > .3}
will end up being true.
But that doesn't happen on most systems because @code{seq} is
implemented using binary floating point arithmetic (via the C
@code{double} type) -- which means some decimal numbers like @code{.1}
cannot be represented exactly. That in turn means some nonintuitive
conditions like @code{.1 * 3 > .3} will end up being true.
To work around that in the above example, use a slightly larger number as
the @var{last} value:

View File

@@ -3,7 +3,7 @@
% Load plain if necessary, i.e., if running under initex.
\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
%
\def\texinfoversion{2000-09-06.09}
\def\texinfoversion{2000-11-09.08}
%
% Copyright (C) 1985, 86, 88, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 2000
% Free Software Foundation, Inc.
@@ -688,16 +688,39 @@ 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}}}
% @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current
% paragraph. For more general purposes, use the \margin insertion
% class. WHICH is `l' or `r'.
%
\newskip\inmarginspacing \inmarginspacing=1cm
\def\strutdepth{\dp\strutbox}
%\hbox{{\rm#1}}\hfil\break}}
%
\def\doinmargin#1#2{\strut\vadjust{%
\nobreak
\kern-\strutdepth
\vtop to \strutdepth{%
\baselineskip=\strutdepth
\vss
% if you have multiple lines of stuff to put here, you'll need to
% make the vbox yourself of the appropriate size.
\ifx#1l%
\llap{#2\hskip\inmarginspacing}%
\else
\rlap{\hskip\hsize\hskip\inmarginspacing#2}%
\fi
\null
}%
}}
\def\inleftmargin{\doinmargin l}
\def\inrightmargin{\doinmargin r}
\def\inmargin{% not perfect, but better than nothing.
\ifodd\pageno
\let\temp=\inleftmargin
\else
\let\temp=\inrightmargin
\fi
\temp
}
% @include file insert text of that file as input.
% Allow normal characters that we make active in the argument (a file name).
@@ -2593,42 +2616,48 @@ width0pt\relax} \fi
}
% @defindex foo == \newindex{foo}
%
\def\defindex{\parsearg\newindex}
% Define @defcodeindex, like @defindex except put all entries in @code.
%
\def\defcodeindex{\parsearg\newcodeindex}
%
\def\newcodeindex#1{%
\iflinks
\expandafter\newwrite \csname#1indfile\endcsname
\openout \csname#1indfile\endcsname \jobname.#1
\fi
\expandafter\xdef\csname#1index\endcsname{%
\noexpand\docodeindex{#1}}
\noexpand\docodeindex{#1}}%
}
\def\defcodeindex{\parsearg\newcodeindex}
% @synindex foo bar makes index foo feed into index bar.
% Do this instead of @defindex foo if you don't want it as a separate index.
% The \closeout helps reduce unnecessary open files; the limit on the
% Acorn RISC OS is a mere 16 files.
\def\synindex#1 #2 {%
\expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname
\expandafter\closeout\csname#1indfile\endcsname
\expandafter\let\csname#1indfile\endcsname=\synindexfoo
\expandafter\xdef\csname#1index\endcsname{% define \xxxindex
\noexpand\doindex{#2}}%
}
%
% @syncodeindex foo bar similar, but put all entries made for index foo
% inside @code.
\def\syncodeindex#1 #2 {%
\expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname
\expandafter\closeout\csname#1indfile\endcsname
\expandafter\let\csname#1indfile\endcsname=\synindexfoo
\expandafter\xdef\csname#1index\endcsname{% define \xxxindex
\noexpand\docodeindex{#2}}%
%
\def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}}
\def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}}
% #1 is \doindex or \docodeindex, #2 the index getting redefined (foo),
% #3 the target index (bar).
\def\dosynindex#1#2#3{%
% Only do \closeout if we haven't already done it, else we'll end up
% closing the target index.
\expandafter \ifx\csname donesynindex#2\endcsname \undefined
% The \closeout helps reduce unnecessary open files; the limit on the
% Acorn RISC OS is a mere 16 files.
\expandafter\closeout\csname#2indfile\endcsname
\expandafter\let\csname\donesynindex#2\endcsname = 1
\fi
% redefine \fooindfile:
\expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname
\expandafter\let\csname#2indfile\endcsname=\temp
% redefine \fooindex:
\expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}%
}
% Define \doindex, the driver for all \fooindex macros.

View File

@@ -1,7 +1,7 @@
\input texinfo
@c %**start of header
@setfilename textutils.info
@settitle GNU text utilities
@settitle @sc{gnu} text utilities
@c %**end of header
@include version.texi
@@ -20,7 +20,7 @@
@ifinfo
@format
START-INFO-DIR-ENTRY
* Text utilities: (textutils). GNU text utilities.
* 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.
@@ -56,30 +56,18 @@ This file documents the GNU text utilities.
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
are preserved on all copies.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.1
or any later version published by the Free Software Foundation;
with no Invariant Sections, with no
Front-Cover Texts, and with no Back-Cover Texts.
A copy of the license is included in the section entitled ``GNU
Free Documentation License''.
@ignore
Permission is granted to process this file through TeX and print the
results, provided the printed document carries copying permission
notice identical to this one except for the removal of this paragraph
(this paragraph not being relevant to the printed manual).
@end ignore
Permission is granted to copy and distribute modified versions of this
manual under the conditions for verbatim copying, provided that the entire
resulting derived work is distributed under the terms of a permission
notice identical to this one.
Permission is granted to copy and distribute translations of this manual
into another language, under the above conditions for modified versions,
except that this permission notice may be stated in a translation approved
by the Foundation.
@end ifinfo
@titlepage
@title GNU @code{textutils}
@title @sc{gnu} @code{textutils}
@subtitle A set of text utilities
@subtitle for version @value{VERSION}, @value{UPDATED}
@author David MacKenzie et al.
@@ -88,19 +76,13 @@ by the Foundation.
@vskip 0pt plus 1filll
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
are preserved on all copies.
Permission is granted to copy and distribute modified versions of this
manual under the conditions for verbatim copying, provided that the entire
resulting derived work is distributed under the terms of a permission
notice identical to this one.
Permission is granted to copy and distribute translations of this manual
into another language, under the above conditions for modified versions,
except that this permission notice may be stated in a translation approved
by the Foundation.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.1
or any later version published by the Free Software Foundation;
with no Invariant Sections, with no
Front-Cover Texts, and with no Back-Cover Texts.
A copy of the license is included in the section entitled ``GNU
Free Documentation License''.
@end titlepage
@@ -114,7 +96,7 @@ by the Foundation.
@cindex text utilities
@cindex utilities for text handling
This manual documents version @value{VERSION} of the GNU text utilities.
This manual documents version @value{VERSION} of the @sc{gnu} text utilities.
@menu
* Introduction:: Caveats, overview, and authors.
@@ -217,11 +199,12 @@ Opening the software toolbox
This manual is incomplete: No attempt is made to explain basic concepts
in a way suitable for novices. Thus, if you are interested, please get
involved in improving this manual. The entire GNU community will
involved in improving this manual. The entire @sc{gnu} community will
benefit.
@cindex POSIX.2
The GNU text utilities are mostly compatible with the @sc{posix.2} standard.
The @sc{gnu} text utilities are mostly compatible with the @sc{posix.2}
standard.
@c This paragraph appears in all of fileutils.texi, textutils.texi, and
@c sh-utils.texi too -- so be sure to keep them consistent.
@@ -251,7 +234,7 @@ overall process.
Certain options are available in all of these programs. Rather than
writing identical descriptions for each of the programs, they are
described here. (In fact, every GNU program accepts (or should accept)
described here. (In fact, every @sc{gnu} program accepts (or should accept)
these options.)
Some of these programs recognize the @samp{--help} and @samp{--version}
@@ -692,19 +675,19 @@ to the output line generated by the type specification.
@table @samp
@item a
named character,
named character
@item c
@sc{ascii} character or backslash escape,
@item d
signed decimal,
signed decimal
@item f
floating point,
floating point
@item o
octal,
octal
@item u
unsigned decimal,
unsigned decimal
@item x
hexadecimal.
hexadecimal
@end table
The type @code{a} outputs things like @samp{sp} for space, @samp{nl} for
@@ -722,24 +705,24 @@ one of the following characters. For integers (@samp{d}, @samp{o},
@table @samp
@item C
char,
char
@item S
short,
short
@item I
int,
int
@item L
long.
long
@end table
For floating point (@code{f}):
@table @asis
@item F
float,
float
@item D
double,
double
@item L
long double.
long double
@end table
@item -v
@@ -763,7 +746,8 @@ is not given at all, the default is 16.
@end table
The next several options map the old, pre-@sc{posix} format specification
options to the corresponding @sc{posix} format specs. GNU @code{od} accepts
options to the corresponding @sc{posix} format specs.
@sc{gnu} @code{od} accepts
any combination of old- and new-style options. Format specification
options accumulate.
@@ -983,27 +967,35 @@ is @samp{space}). For multicolumn output, lines will always be truncated to
column output no line truncation occurs by default. Use @samp{-W} option to
truncate lines in that case.
@c FIXME:??? Should this be something like "Starting with version 1.22i,..."
Including version 1.22i:
The following changes were made in version 1.22i and apply to later
versions of @command{pr}:
@c FIXME: this whole section here sounds very awkward to me. I
@c made a few small changes, but really it all needs to be redone. - Brian
Some small @var{letter options} (@samp{-s}, @samp{-w}) have been redefined
with the object of a better @sc{posix} compliance. The output of some
further cases has been adapted to other Unix systems. These changes are
not compatible with earlier versions of the program.
@c OK, I fixed another sentence or two, but some of it I just don't understand.
@ - Brian
@itemize @bullet
@item
Some small @var{letter options} (@samp{-s}, @samp{-w}) have been
redefined for better @sc{posix} compliance. The output of some further
cases has been adapted to other Unix systems. These changes are not
compatible with earlier versions of the program.
@item
Some @var{new capital letter} options (@samp{-J}, @samp{-S}, @samp{-W})
have been introduced to turn off unexpected interferences of small letter
options. The @samp{-N} option and the second argument @var{last_page}
of @samp{+FIRST_PAGE} offer more flexibility. The detailed handling of
form feeds set in the input files requires the @samp{-T} option.
@item
Capital letter options override small letter ones.
@item
Some of the option-arguments (compare @samp{-s}, @samp{-S}, @samp{-e},
@samp{-i}, @samp{-n}) cannot be specified as separate arguments from the
preceding option letter (already stated in the @sc{posix} specification).
@end itemize
The program accepts the following options. Also see @ref{Common options}.
@@ -1194,12 +1186,12 @@ opened. (The exit status will still be nonzero, however.)
@itemx --separator[=@var{char}]
@opindex -s
@opindex --separator
Separate columns by a single character @var{char}. Default for @var{char}
is the TAB character without @samp{-w} and @samp{no character} with
@samp{-w}. Without @samp{-s} default separator @samp{space} is set.
@samp{-s[char]} turns off line truncation of all three column options
(@samp{-COLUMN}|@samp{-a -COLUMN}|@samp{-m}) except @samp{-w} is set.
That is a @sc{posix}-compliant formulation.
Separate columns by a single character @var{char}. The default for
@var{char} is the TAB character without @samp{-w} and @samp{no
character} with @samp{-w}. Without @samp{-s} the default separator
@samp{space} is set. @samp{-s[char]} turns off line truncation of all
three column options (@samp{-COLUMN}|@samp{-a -COLUMN}|@samp{-m}) unless
@samp{-w} is set. This is a @sc{posix}-compliant formulation.
@item -S[@var{string}]
@@ -1437,13 +1429,13 @@ one-line header consisting of
before the output for each @var{file}.
@cindex BSD @code{tail}
GNU @code{tail} can output any amount of data (some other versions of
@sc{gnu} @code{tail} can output any amount of data (some other versions of
@code{tail} cannot). It also has no @samp{-r} option (print in
reverse), since reversing a file is really a different job from printing
the end of a file; BSD @code{tail} (which is the one with @code{-r}) can
only reverse files that are at most as large as its buffer, which is
typically 32k. A more reliable and versatile way to reverse files is
the GNU @code{tac} command.
the @sc{gnu} @code{tac} command.
@code{tail} accepts two option formats: the new one, in which numbers
are arguments to the options (@samp{-n 1}), and the old one, in which
@@ -1702,9 +1694,9 @@ exhausted.
The output files' names consist of a prefix (@samp{xx} by default)
followed by a suffix. By default, the suffix is an ascending sequence
of two-digit decimal numbers from @samp{00} and up to @samp{99}. In any
case, concatenating the output files in sorted order by filename
produces the original input file.
of two-digit decimal numbers from @samp{00} to @samp{99}. In any case,
concatenating the output files in sorted order by filename produces the
original input file.
By default, if @code{csplit} encounters an error or receives a hangup,
interrupt, quit, or terminate signal, it removes any output files
@@ -1821,9 +1813,9 @@ in columns. However, @sc{posix} requires that there be exactly one space
separating columns. You can make @code{wc} use the @sc{posix}-mandated
output format by setting the @env{POSIXLY_CORRECT} environment variable.
By default, @code{wc} prints three counts: the newline, words, byte counts.
Options can specify that only certain counts be printed. Options do not
undo others previously given, so
By default, @code{wc} prints three counts: the newline, words, and byte
counts. Options can specify that only certain counts be printed.
Options do not undo others previously given, so
@example
wc --bytes --words
@@ -1890,10 +1882,10 @@ sum [@var{option}]@dots{} [@var{file}]@dots{}
@code{sum} prints the checksum for each @var{file} followed by the
number of blocks in the file (rounded up). If more than one @var{file}
is given, file names are also printed (by default). (With the
@samp{--sysv} option, corresponding file name are printed when there is
@samp{--sysv} option, corresponding file names are printed when there is
at least one file argument.)
By default, GNU @code{sum} computes checksums using an algorithm
By default, @sc{gnu} @code{sum} computes checksums using an algorithm
compatible with BSD @code{sum} and prints file sizes in units of
1024-byte blocks.
@@ -2125,9 +2117,9 @@ disables this last-resort comparison so that lines in which all fields
compare equal are left in their original relative order. If no fields
or global options are specified, @samp{-s} has no effect.
GNU @code{sort} (as specified for all GNU utilities) has no limits on
@sc{gnu} @code{sort} (as specified for all @sc{gnu} utilities) has no limits on
input line length or restrictions on bytes allowed within lines. In
addition, if the final byte of an input file is not a newline, GNU
addition, if the final byte of an input file is not a newline, @sc{gnu}
@code{sort} silently supplies one. A line's trailing newline is not
part of the line for comparison purposes.@footnote{@sc{posix}.2-1992
requires that the trailing newline be part of the comparison, and some
@@ -2325,13 +2317,13 @@ and character positions are numbered starting with 0. See below.
@end table
In addition, when GNU @code{sort} is invoked with exactly one argument,
In addition, when @sc{gnu} @code{sort} is invoked with exactly one argument,
options @samp{--help} and @samp{--version} are recognized. @xref{Common
options}.
Historical (BSD and System V) implementations of @code{sort} have
differed in their interpretation of some options, particularly
@samp{-b}, @samp{-f}, and @samp{-n}. GNU sort follows the @sc{posix}
@samp{-b}, @samp{-f}, and @samp{-n}. @sc{gnu} sort follows the @sc{posix}
behavior, which is usually (but not always!) like the System V behavior.
According to @sc{posix}, @samp{-n} no longer implies @samp{-b}. For
consistency, @samp{-M} has been changed in the same way. This may
@@ -2389,7 +2381,7 @@ sort -t : -k 2,2n -k 5.3,5.4
@end example
Note that if you had written @samp{-k 2} instead of @samp{-k 2,2}
@samp{sort} would have used all characters beginning in the second field
@command{sort} would have used all characters beginning in the second field
and extending to the end of the line as the primary @emph{numeric}
key. For the large majority of applications, treating keys spanning
more than one field as numeric will not do what you expect.
@@ -2530,7 +2522,7 @@ Print only duplicate lines.
Print all duplicate lines and only duplicate lines.
This option is useful mainly in conjunction with other options e.g.,
to ignore case or to compare only selected fields.
This is a GNU extension.
This is a @sc{gnu} extension.
@c FIXME: give an example showing *how* it's useful
@item -u
@@ -2659,15 +2651,15 @@ ptx -G [@var{option} @dots{}] [@var{input} [@var{output}]]
@end example
The @samp{-G} (or its equivalent: @samp{--traditional}) option disables
all GNU extensions and reverts to traditional mode, thus introducing some
all @sc{gnu} extensions and reverts to traditional mode, thus introducing some
limitations and changing several of the program's default option values.
When @samp{-G} is not specified, GNU extensions are always enabled. GNU
extensions to @code{ptx} are documented wherever appropriate in this
When @samp{-G} is not specified, @sc{gnu} extensions are always enabled.
@sc{gnu} extensions to @code{ptx} are documented wherever appropriate in this
document. For the full list, see @xref{Compatibility in ptx}.
Individual options are explained in the following sections.
When GNU extensions are enabled, there may be zero, one or several
When @sc{gnu} extensions are enabled, there may be zero, one or several
@var{file}s after the options. If there is no @var{file}, the program
reads the standard input. If there is one or several @var{file}s, they
give the name of input files which are all read in turn, as if all the
@@ -2677,7 +2669,7 @@ file names and line numbers refer to individual text input files. In
all cases, the program outputs the permuted index to the standard
output.
When GNU extensions are @emph{not} enabled, that is, when the program
When @sc{gnu} extensions are @emph{not} enabled, that is, when the program
operates in traditional mode, there may be zero, one or two parameters
besides the options. If there are no parameters, the program reads the
standard input and outputs the permuted index to the standard output.
@@ -2687,7 +2679,7 @@ respectively the name of the @var{input} file to read and the name of
the @var{output} file to produce. @emph{Be very careful} to note that,
in this case, the contents of file given by the second parameter is
destroyed. This behavior is dictated by System V @code{ptx}
compatibility; GNU Standards normally discourage output parameters not
compatibility; @sc{gnu} Standards normally discourage output parameters not
introduced by an option.
Note that for @emph{any} file named as the value of an option or as an
@@ -2716,7 +2708,7 @@ exit without further processing.
@item -G
@itemx --traditional
As already explained, this option disables all GNU extensions to
As already explained, this option disables all @sc{gnu} extensions to
@code{ptx} and switches to traditional mode.
@item --help
@@ -2737,7 +2729,7 @@ processing.
As it is set up now, the program assumes that the input file is coded
using 8-bit ISO 8859-1 code, also known as Latin-1 character set,
@emph{unless} it is compiled for MS-DOS, in which case it uses the
character set of the IBM-PC. (GNU @code{ptx} is not known to work on
character set of the IBM-PC. (@sc{gnu} @code{ptx} is not known to work on
smaller MS-DOS machines anymore.) Compared to 7-bit @sc{ascii}, the set
of characters which are letters is different; this alters the behavior
of regular expression matching. Thus, the default regular expression
@@ -2770,9 +2762,9 @@ is not part of the Break file is a word constituent. If both options
@samp{-b} and @samp{-W} are specified, then @samp{-W} has precedence and
@samp{-b} is ignored.
When GNU extensions are enabled, the only way to avoid newline as a
When @sc{gnu} extensions are enabled, the only way to avoid newline as a
break character is to write all the break characters in the file with no
newline at all, not even at the end of the file. When GNU extensions
newline at all, not even at the end of the file. When @sc{gnu} extensions
are disabled, spaces, tabs and newlines are always considered as break
characters even if not included in the Break file.
@@ -2799,9 +2791,9 @@ is ignored. The file is called the @dfn{Only file}. The file contains
exactly one word in each line; the end of line separation of words is
not subject to the value of the @samp{-S} option.
There is no default for the Only file. In the case there are both an
Only file and an Ignore file, a word can be a keyword only if it is
given in the Only file and not given in the Ignore file.
There is no default for the Only file. When both an Only file and an
Ignore file are specified, a word is considered a keyword only
if it is listed in the Only file and not in the Ignore file.
@item -r
@itemx --references
@@ -2815,7 +2807,7 @@ Using this option changes the default value for option @samp{-S}.
Using this option, the program does not try very hard to remove
references from contexts in output, but it succeeds in doing so
@emph{when} the context ends exactly at the newline. If option
@samp{-r} is used with @samp{-S} default value, or when GNU extensions
@samp{-r} is used with @samp{-S} default value, or when @sc{gnu} extensions
are disabled, this condition is always met and references are completely
excluded from the output contexts.
@@ -2826,15 +2818,15 @@ This option selects which regular expression will describe the end of a
line or the end of a sentence. In fact, this regular expression is not
the only distinction between end of lines or end of sentences, and input
line boundaries have no special significance outside this option. By
default, when GNU extensions are enabled and if @samp{-r} option is not
default, when @sc{gnu} extensions are enabled and if @samp{-r} option is not
used, end of sentences are used. In this case, this @var{regex} is
imported from GNU Emacs:
imported from @sc{gnu} Emacs:
@example
[.?!][]\"')@}]*\\($\\|\t\\| \\)[ \t\n]*
@end example
Whenever GNU extensions are disabled or if @samp{-r} option is used, end
Whenever @sc{gnu} extensions are disabled or if @samp{-r} option is used, end
of lines are used; in this case, the default @var{regexp} is just:
@example
@@ -2866,8 +2858,8 @@ corresponding characters by @code{ptx} itself.
@itemx --word-regexp=@var{regexp}
This option selects which regular expression will describe each keyword.
By default, if GNU extensions are enabled, a word is a sequence of
letters; the @var{regexp} used is @samp{\w+}. When GNU extensions are
By default, if @sc{gnu} extensions are enabled, a word is a sequence of
letters; the @var{regexp} used is @samp{\w+}. When @sc{gnu} extensions are
disabled, a word is by default anything which ends with a space, a tab
or a newline; the @var{regexp} used is @samp{[^ \t\n]+}.
@@ -2887,14 +2879,14 @@ the corresponding characters by @code{ptx} itself.
Output format is mainly controlled by the @samp{-O} and @samp{-T} options
described in the table below. When neither @samp{-O} nor @samp{-T} are
selected, and if GNU extensions are enabled, the program chooses an
selected, and if @sc{gnu} extensions are enabled, the program chooses an
output format suitable for a dumb terminal. Each keyword occurrence is
output to the center of one line, surrounded by its left and right
contexts. Each field is properly justified, so the concordance output
can be readily observed. As a special feature, if automatic
references are selected by option @samp{-A} and are output before the
left context, that is, if option @samp{-R} is @emph{not} selected, then
a colon is added after the reference; this nicely interfaces with GNU
a colon is added after the reference; this nicely interfaces with @sc{gnu}
Emacs @code{next-error} processing. In this default output format, each
white space character, like newline and tab, is merely changed to
exactly one space, with no special attempt to compress consecutive
@@ -2915,13 +2907,13 @@ output line.
@item -w @var{number}
@itemx --width=@var{number}
Select the output maximum width of each final line. If references are
used, they are included or excluded from the output maximum width
Select the maximum output width of each final line. If references are
used, they are included or excluded from the maximum output width
depending on the value of option @samp{-R}. If this option is not
selected, that is, when references are output before the left context,
the output maximum width takes into account the maximum length of all
the maximum output width takes into account the maximum length of all
references. If this option is selected, that is, when references are
output after the right context, the output maximum width does not take
output after the right context, the maximum output width does not take
into account the space taken by references, nor the gap that precedes
them.
@@ -2938,17 +2930,16 @@ reference is used at output time, overriding the input reference.
@item -R
@itemx --right-side-refs
In default output format, when option @samp{-R} is not used, any
reference produced by the effect of options @samp{-r} or @samp{-A} are
given to the far right of output lines, after the right context. In
default output format, when option @samp{-R} is specified, references
are rather given to the beginning of each output line, before the left
context. For any other output format, option @samp{-R} is almost
ignored, except for the fact that the width of references is @emph{not}
taken into account in total output width given by @samp{-w} whenever
@samp{-R} is selected.
In the default output format, when option @samp{-R} is not used, any
references produced by the effect of options @samp{-r} or @samp{-A} are
placed to the far right of output lines, after the right context. With
default output format, when the @samp{-R} option is specified, references
are rather placed at the beginning of each output line, before the left
context. For any other output format, option @samp{-R} is
ignored, with one exception: with @samp{-R} the width of references
is @emph{not} taken into account in total output width given by @samp{-w}.
This option is automatically selected whenever GNU extensions are
This option is automatically selected whenever @sc{gnu} extensions are
disabled.
@item -F @var{string}
@@ -2990,8 +2981,8 @@ processing. Each output line will look like:
@end smallexample
so it will be possible to write a @samp{.xx} roff macro to take care of
the output typesetting. This is the default output format when GNU
extensions are disabled. Option @samp{-M} might be used to change
the output typesetting. This is the default output format when @sc{gnu}
extensions are disabled. Option @samp{-M} can be used to change
@samp{xx} to another macro name.
In this output format, each non-graphical character, like newline and
@@ -3014,48 +3005,48 @@ so it will be possible to write a @code{\xx} definition to take care of
the output typesetting. Note that when references are not being
produced, that is, neither option @samp{-A} nor option @samp{-r} is
selected, the last parameter of each @code{\xx} call is inhibited.
Option @samp{-M} might be used to change @samp{xx} to another macro
Option @samp{-M} can be used to change @samp{xx} to another macro
name.
In this output format, some special characters, like @kbd{$}, @kbd{%},
@kbd{&}, @kbd{#} and @kbd{_} are automatically protected with a
backslash. Curly brackets @kbd{@{}, @kbd{@}} are also protected with a
backslash, but also enclosed in a pair of dollar signs to force
mathematical mode. The backslash itself produces the sequence
@code{\backslash@{@}}. Circumflex and tilde diacritics produce the
sequence @code{^\@{ @}} and @code{~\@{ @}} respectively. Other
diacriticized characters of the underlying character set produce an
appropriate @TeX{} sequence as far as possible. The other non-graphical
characters, like newline and tab, and all others characters which are
not part of @sc{ascii}, are merely changed to exactly one space, with no
special attempt to compress consecutive spaces. Let me know how to
improve this special character processing for @TeX{}.
backslash. Curly brackets @kbd{@{}, @kbd{@}} are protected with a
backslash and a pair of dollar signs (to force mathematical mode). The
backslash itself produces the sequence @code{\backslash@{@}}.
Circumflex and tilde diacritics produce the sequence @code{^\@{ @}} and
@code{~\@{ @}} respectively. Other diacriticized characters of the
underlying character set produce an appropriate @TeX{} sequence as far
as possible. The other non-graphical characters, like newline and tab,
and all other characters which are not part of @sc{ascii}, are merely
changed to exactly one space, with no special attempt to compress
consecutive spaces. Let me know how to improve this special character
processing for @TeX{}.
@end table
@node Compatibility in ptx
@subsection The GNU extensions to @code{ptx}
@subsection The @sc{gnu} extensions to @code{ptx}
This version of @code{ptx} contains a few features which do not exist in
System V @code{ptx}. These extra features are suppressed by using the
@samp{-G} command line option, unless overridden by other command line
options. Some GNU extensions cannot be recovered by overriding, so the
simple rule is to avoid @samp{-G} if you care about GNU extensions.
options. Some @sc{gnu} extensions cannot be recovered by overriding, so the
simple rule is to avoid @samp{-G} if you care about @sc{gnu} extensions.
Here are the differences between this program and System V @code{ptx}.
@itemize @bullet
@item
This program can read many input files at once, it always writes the
resulting concordance on standard output. On the other end, System V
@code{ptx} reads only one file and produce the result on standard output
resulting concordance on standard output. On the other hand, System V
@code{ptx} reads only one file and sends the result to standard output
or, if a second @var{file} parameter is given on the command, to that
@var{file}.
Having output parameters not introduced by options is a quite dangerous
practice which GNU avoids as far as possible. So, for using @code{ptx}
portably between GNU and System V, you should always use it with a
Having output parameters not introduced by options is a dangerous
practice which @sc{gnu} avoids as far as possible. So, for using @code{ptx}
portably between @sc{gnu} and System V, you should always use it with a
single input file, and always expect the result on standard output. You
might also want to automatically configure in a @samp{-G} option to
@code{ptx} calls in products using @code{ptx}, if the configurator finds
@@ -3064,9 +3055,9 @@ that the installed @code{ptx} accepts @samp{-G}.
@item
The only options available in System V @code{ptx} are options @samp{-b},
@samp{-f}, @samp{-g}, @samp{-i}, @samp{-o}, @samp{-r}, @samp{-t} and
@samp{-w}. All other options are GNU extensions and are not repeated in
@samp{-w}. All other options are @sc{gnu} extensions and are not repeated in
this enumeration. Moreover, some options have a slightly different
meaning when GNU extensions are enabled, as explained below.
meaning when @sc{gnu} extensions are enabled, as explained below.
@item
By default, concordance output is not formatted for @code{troff} or
@@ -3075,29 +3066,29 @@ or @code{nroff} output may still be selected through option @samp{-O}.
@item
Unless @samp{-R} option is used, the maximum reference width is
subtracted from the total output line width. With GNU extensions
subtracted from the total output line width. With @sc{gnu} extensions
disabled, width of references is not taken into account in the output
line width computations.
@item
All 256 characters, even @kbd{NUL}s, are always read and processed from
input file with no adverse effect, even if GNU extensions are disabled.
input file with no adverse effect, even if @sc{gnu} extensions are disabled.
However, System V @code{ptx} does not accept 8-bit characters, a few
control characters are rejected, and the tilde @kbd{~} is also rejected.
@item
Input line length is only limited by available memory, even if GNU
Input line length is only limited by available memory, even if @sc{gnu}
extensions are disabled. However, System V @code{ptx} processes only
the first 200 characters in each line.
@item
The break (non-word) characters default to be every character except all
letters of the underlying character set, diacriticized or not. When GNU
letters of the underlying character set, diacriticized or not. When @sc{gnu}
extensions are disabled, the break characters default to space, tab and
newline only.
@item
The program makes better use of output line width. If GNU extensions
The program makes better use of output line width. If @sc{gnu} extensions
are disabled, the program rather tries to imitate System V @code{ptx},
but still, there are some slight disposition glitches this program does
not completely reproduce.
@@ -3134,7 +3125,7 @@ cut [@var{option}]@dots{} [@var{file}]@dots{}
In the table which follows, the @var{byte-list}, @var{character-list},
and @var{field-list} are one or more numbers or ranges (two numbers
separated by a dash) separated by commas. Bytes, characters, and
fields are numbered from starting at 1. Incomplete ranges may be
fields are numbered starting at 1. Incomplete ranges may be
given: @samp{-@var{m}} means @samp{1-@var{m}}; @samp{@var{n}-} means
@samp{@var{n}} through end of line or last field.
@@ -3332,7 +3323,7 @@ Print a line for each unpairable line in file @var{file-number}
@end table
In addition, when GNU @code{join} is invoked with exactly one argument,
In addition, when @sc{gnu} @code{join} is invoked with exactly one argument,
options @samp{--help} and @samp{--version} are recognized. @xref{Common
options}.
@@ -3440,7 +3431,7 @@ from @var{m} through @var{n}, in ascending order. @var{m} should
collate before @var{n}; if it doesn't, an error results. As an example,
@samp{0-9} is the same as @samp{0123456789}.
GNU @code{tr} does not support the System V syntax that uses square
@sc{gnu} @code{tr} does not support the System V syntax that uses square
brackets to enclose ranges. Translations specified in that format
sometimes work as expected, since the brackets are often transliterated
to themselves. However, they should be avoided because they sometimes
@@ -3528,7 +3519,7 @@ The syntax @samp{[=@var{c}=]} expands to all of the characters that are
equivalent to @var{c}, in no particular order. Equivalence classes are
a relatively recent invention intended to support non-English alphabets.
But there seems to be no standard way to define them or determine their
contents. Therefore, they are not fully implemented in GNU @code{tr};
contents. Therefore, they are not fully implemented in @sc{gnu} @code{tr};
each character's equivalence class consists only of that character,
which is of no particular use.
@@ -3576,8 +3567,8 @@ BSD @code{tr} pads @var{set2} to the length of @var{set1} by repeating
the last character of @var{set2} as many times as necessary. System V
@code{tr} truncates @var{set1} to the length of @var{set2}.
By default, GNU @code{tr} handles this case like BSD @code{tr}. When
the @samp{--truncate-set1} (@samp{-t}) option is given, GNU @code{tr}
By default, @sc{gnu} @code{tr} handles this case like BSD @code{tr}. When
the @samp{--truncate-set1} (@samp{-t}) option is given, @sc{gnu} @code{tr}
handles this case like the System V @code{tr} instead. This option is
ignored for operations other than translation.
@@ -3716,7 +3707,7 @@ following warning and error messages, for strict compliance with
@item
When the @samp{--delete} option is given but @samp{--squeeze-repeats}
is not, and @var{set2} is given, GNU @code{tr} by default prints
is not, and @var{set2} is given, @sc{gnu} @code{tr} by default prints
a usage message and exits, because @var{set2} would not be used.
The @sc{posix} specification says that @var{set2} must be ignored in
this case. Silently ignoring arguments is a bad idea.
@@ -3728,9 +3719,9 @@ value 400 octal does not fit into a single byte.
@end enumerate
GNU @code{tr} does not provide complete BSD or System V compatibility.
@sc{gnu} @code{tr} does not provide complete BSD or System V compatibility.
For example, it is impossible to disable interpretation of the @sc{posix}
constructs @samp{[:alpha:]}, @samp{[=c=]}, and @samp{[c*10]}. Also, GNU
constructs @samp{[:alpha:]}, @samp{[=c=]}, and @samp{[c*10]}. Also, @sc{gnu}
@code{tr} does not delete zero bytes automatically, unlike traditional
Unix versions, which provide no way to preserve zero bytes.
@@ -3855,13 +3846,13 @@ Robbins.
@node Toolbox introduction
@unnumberedsec Toolbox introduction
This month's column is only peripherally related to the GNU Project, in
that it describes a number of the GNU tools on your Linux system and how they
might be used. What it's really about is the ``Software Tools'' philosophy
This month's column is only peripherally related to the @sc{gnu} Project, in
that it describes a number of the @sc{gnu} tools on your Linux system and how
they might be used. What it's really about is the ``Software Tools'' philosophy
of program development and usage.
The software tools philosophy was an important and integral concept
in the initial design and development of Unix (of which Linux and GNU are
in the initial design and development of Unix (of which Linux and @sc{gnu} are
essentially clones). Unfortunately, in the modern day press of
Internetworking and flashy GUIs, it seems to have fallen by the
wayside. This is a shame, since it provides a powerful mental model
@@ -4354,8 +4345,8 @@ appropriate tool, build one.
As of this writing, all the programs we've discussed are available via
anonymous @code{ftp} from @code{prep.ai.mit.edu} as
@file{/pub/gnu/textutils-1.9.tar.gz}.@footnote{Version 1.9 was current
when this column was written. Check the nearest GNU archive for the
current version. The main GNU FTP site is now @code{ftp.gnu.org}.}
when this column was written. Check the nearest @sc{gnu} archive for the
current version. The main @sc{gnu} FTP site is now @code{ftp.gnu.org}.}
None of what I have presented in this column is new. The Software Tools
philosophy was first introduced in the book @cite{Software Tools},
@@ -4381,8 +4372,8 @@ whose members had ported the original @code{ratfor} programs to essentially
every computer system with a FORTRAN compiler. The popularity of the
group waned in the middle '80s as Unix began to spread beyond universities.
With the current proliferation of GNU code and other clones of Unix programs,
these programs now receive little attention; modern C versions are
With the current proliferation of @sc{gnu} code and other clones of Unix
programs, these programs now receive little attention; modern C versions are
much more efficient and do more than these programs do. Nevertheless, as
exposition of good programming style, and evangelism for a still-valuable
philosophy, these books are unparalleled, and I recommend them highly.

View File

@@ -217,3 +217,13 @@ p delta
n
p Start
q
b dir_name
r
n
p slash
n
n
n
p slash
p slash - path + 1
q

View File

@@ -1,5 +1,195 @@
2000-11-26 Jim Meyering <meyering@lucent.com>
* memcoll.c: Include sys/types.h. From Werner Almesberger.
2000-11-22 Paul Eggert <eggert@twinsun.com>
* lib/strftime.c (my_strftime): Do not invoke mbrlen with a
size of (size_t) -1; it's not portable.
2000-11-17 Akim Demaille <akim@epita.fr>
* lib/obstack.h: Formatting changes.
(obstack_grow, obstack_grow0): Don't cast WHERE at all: that would
prevent type checking.
(obstack_ptr_grow, obstack_ptr_grow_fast): When assigning, don't
cast the value to (void *): assigning a `foo *' to a `void *'
variable is valid.
(obstack_int_grow, obstack_int_grow_fast): Don't cast AINT to int.
2000-11-17 Jim Meyering <meyering@lucent.com>
* strstr.c: Update from GNU libc.
2000-11-16 Jim Meyering <meyering@lucent.com>
* strverscmp.c: Incorporate weak-alias-related changes from glibc.
2000-11-11 Jim Meyering <meyering@lucent.com>
* error.c: Add a couple #includes, merging from GNU libc version.
2000-11-10 Jim Meyering <meyering@lucent.com>
* obstack.h: Update from GNU libc.
* obstack.c: Likewise.
2000-11-06 Paul Eggert <eggert@twinsun.com>
* getusershell.c (setusershell): Use rewind rather than
fseek/fseeko, to avoid configuration hassles with fseeko.
Don't bother opening SHELLS_FILE if shellstream is NULL;
it's not necessary.
2000-11-05 Jim Meyering <meyering@lucent.com>
* makepath.h (make_dir): Declare.
* makepath.c (make_dir): Remove `static' attribute.
Tweak a comment.
2000-11-04 Alexandre Duret-Lutz <duret_g@epita.fr>
* hash.c (hash_get_next): Fix a thinko: when ENTRY is the
last one in a bucket, advance to the next bucket.
2000-11-02 Vesselin Atanasov <vesselin@bgnet.bg>
* fnmatch.c: Do not comment out all the code if we are using
the GNU C library, because in some cases we are replacing buggy
code in the GNU C library itself.
2000-10-30 Paul Eggert <eggert@twinsun.com>
* error.h, getline.h, modechange.h:
Remove "2000" from Copyright line, as the file hasn't been
changed this year other than in the copyright notice.
* xalloc.h: Add "2000" to Copyright line, as this file
was changed this year.
2000-10-30 Paul Eggert <eggert@twinsun.com>
* fnmatch.c (FOLD): Do not assume that characters are unsigned.
(fnmatch): Fix some FNM_FILE_NAME and FNM_LEADING_DIR bugs,
e.g. fnmatch("d*/*1", "d/s/1", FNM_FILE_NAME) incorrectly yielded zero.
2000-10-29 Greg Louis <glouis@dynamicro.on.ca>
* regex.h (__restrict_arr): Move definition out of #ifndef block.
Required because egcs-2.91.66 (aka 1.1.2) defines __restrict, but
doesn't define __restrict_arr.
2000-10-29 Jim Meyering <meyering@lucent.com>
* xstat.in: Fix grammar in comment.
2000-10-28 Jim Meyering <meyering@lucent.com>
* memchr.c: Update from libc.
Adjust for portability:
[HAVE_STDLIB_H]: Include stdlib.h.
[HAVE_BP_SYM_H || _LIBC]: Guard inclusion of bp-sym.h.
Undef __memchr, too.
[!weak_alias]: Define __memchr to memchr.
* regex.c: Update from libc.
* regex.h: Likewise.
* getopt1.c: Likewise.
* memcmp.c: Likewise.
* getusershell.c (setusershell) [HAVE_FSEEKO]: Use fseeko.
Avoid using fseek, when possible -- it's broken by design.
Patch by Ulrich Drepper.
2000-10-26 Jim Meyering <meyering@lucent.com>
* strftime.c: Update from libc.
2000-10-25 Jim Meyering <meyering@lucent.com>
* obstack.c: Update from libc.
2000-10-23 Jim Meyering <meyering@lucent.com>
* hard-locale.c (hard_locale): Revert last change -- it was simply
wrong. That set_locale call must not have any side effects.
From Paul Eggert.
2000-10-22 Jim Meyering <meyering@lucent.com>
* md5.c (md5_process_block) [OP]: Use `rol', not CYCLIC.
[CYCLIC]: Remove now-unused definition.
* save-cwd.c (O_DIRECTORY): Define, if needed.
(save_cwd) [HAVE_FCHDIR]: Use O_DIRECTORY when opening ".".
Suggestion from Ulrich Drepper.
2000-10-21 Jim Meyering <meyering@lucent.com>
* dirname.c (dir_name_r): New function, factored out of dir_name.
(dir_name): Use dir_name_r.
* dirname.h (dir_name_r): Declare it.
2000-10-21 Jim Meyering <meyering@lucent.com>
* dirname.c (memrchr): Declare if necessary.
(dir_name): Remove the restriction that there be no
trailing slashes. Now, this code skips past them, effectively
ignoring them.
[TEST_DIRNAME] (main): New unit tests.
* memrchr.c: New file from GNU libc.
Undef __memrchr, too.
[!weak_alias]: Define __memrchr to memrchr.
Guard weak_alias use with `#ifdef weak_alias'.
2000-10-17 Jim Meyering <meyering@lucent.com>
* quote.h (PARAMS): Define and use.
Reported by Akim Demaille.
* getopt.c: Update from libc.
2000-10-16 Jim Meyering <meyering@lucent.com>
* hard-locale.c (hard_locale): Use "", not 0 as 2nd arg to setlocale.
From Jan Fedak.
2000-09-25 Jim Meyering <meyering@lucent.com>
* md5.h (rol): Define (from GnuPG).
* sha.c: Give credit (GnuPG) where due.
(M): Use rol rather than open-coding it.
Add a FIXME comment.
2000-09-21 Jim Meyering <meyering@lucent.com>
* userspec.c (parse_user_spec): Remove debugging printf I'd added.
Reported by Michael Stone.
2000-09-20 Jim Meyering <meyering@lucent.com>
* Makefile.am (libfetish_a_SOURCES): Add sha.c.
(noinst_HEADERS): Add sha.h.
Based on code from Scott G. Miller and from GnuPG.
2000-09-15 Jim Meyering <meyering@lucent.com>
* regex.c: Update from libc.
2000-09-10 Jim Meyering <meyering@lucent.com>
* getopt.c (_getopt_internal): Update from glibc.
2000-09-09 Jim Meyering <meyering@lucent.com>
* quotearg.c: Rename ISASCII to IN_CTYPE_DOMAIN, so people don't
think it should be used as a general replacement for isascii.
* fnmatch.c: Likewise.
* mbswidth.c: Likewise
* regex.c: Likewise.
Don't use atoi.
* userspec.c: Include sys/param.h and limits.h.
Include xstrtol.h.

View File

@@ -15,7 +15,7 @@ libfetish_a_SOURCES = \
makepath.c mbswidth.c md5.c memcasecmp.c memcoll.c modechange.c \
path-concat.c \
quote.c quotearg.c readtokens.c safe-read.c same.c save-cwd.c \
savedir.c stripslash.c unicodeio.c userspec.c version-etc.c xgetcwd.c \
savedir.c sha.c stripslash.c unicodeio.c userspec.c version-etc.c xgetcwd.c \
xgethostname.c xmalloc.c xstrdup.c xstrtod.c xstrtol.c xstrtoul.c \
xstrtoumax.c yesno.c
@@ -30,7 +30,7 @@ noinst_HEADERS = \
linebuffer.h long-options.h mbswidth.h md5.h memcasecmp.h memcoll.h \
makepath.h mbswidth.h modechange.h mountlist.h nanosleep.h obstack.h \
path-concat.h pathmax.h posixtm.h quote.h quotearg.h readtokens.h \
readutmp.h regex.h safe-read.h same.h save-cwd.h savedir.h \
readutmp.h regex.h safe-read.h same.h save-cwd.h savedir.h sha.h \
strverscmp.h unicodeio.h version-etc.h xalloc.h xstrtod.h xstrtol.h
BUILT_SOURCES = getdate.c lstat.c stat.c

View File

@@ -1,6 +1,7 @@
# Makefile.in generated automatically by automake 1.4a from Makefile.am
# Copyright (C) 1994, 1995-9, 2000 Free Software Foundation, Inc.
# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000
# Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -130,7 +131,7 @@ libfetish_a_SOURCES = \
makepath.c mbswidth.c md5.c memcasecmp.c memcoll.c modechange.c \
path-concat.c \
quote.c quotearg.c readtokens.c safe-read.c same.c save-cwd.c \
savedir.c stripslash.c unicodeio.c userspec.c version-etc.c xgetcwd.c \
savedir.c sha.c stripslash.c unicodeio.c userspec.c version-etc.c xgetcwd.c \
xgethostname.c xmalloc.c xstrdup.c xstrtod.c xstrtol.c xstrtoul.c \
xstrtoumax.c yesno.c
@@ -146,7 +147,7 @@ noinst_HEADERS = \
linebuffer.h long-options.h mbswidth.h md5.h memcasecmp.h memcoll.h \
makepath.h mbswidth.h modechange.h mountlist.h nanosleep.h obstack.h \
path-concat.h pathmax.h posixtm.h quote.h quotearg.h readtokens.h \
readutmp.h regex.h safe-read.h same.h save-cwd.h savedir.h \
readutmp.h regex.h safe-read.h same.h save-cwd.h savedir.h sha.h \
strverscmp.h unicodeio.h version-etc.h xalloc.h xstrtod.h xstrtol.h
@@ -181,9 +182,9 @@ hash$U.o human$U.o idcache$U.o isdir$U.o linebuffer$U.o \
localcharset$U.o long-options$U.o makepath$U.o mbswidth$U.o md5$U.o \
memcasecmp$U.o memcoll$U.o modechange$U.o path-concat$U.o quote$U.o \
quotearg$U.o readtokens$U.o safe-read$U.o same$U.o save-cwd$U.o \
savedir$U.o stripslash$U.o unicodeio$U.o userspec$U.o version-etc$U.o \
xgetcwd$U.o xgethostname$U.o xmalloc$U.o xstrdup$U.o xstrtod$U.o \
xstrtol$U.o xstrtoul$U.o xstrtoumax$U.o yesno$U.o
savedir$U.o sha$U.o stripslash$U.o unicodeio$U.o userspec$U.o \
version-etc$U.o xgetcwd$U.o xgethostname$U.o xmalloc$U.o xstrdup$U.o \
xstrtod$U.o xstrtol$U.o xstrtoul$U.o xstrtoumax$U.o yesno$U.o
libfetish_a_OBJECTS = $(am_libfetish_a_OBJECTS)
AR = ar
COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
@@ -213,33 +214,34 @@ $(DEPDIR)/localcharset$U.Po $(DEPDIR)/long-options$U.Po \
$(DEPDIR)/lstat.Po $(DEPDIR)/makepath$U.Po $(DEPDIR)/malloc.Po \
$(DEPDIR)/mbswidth$U.Po $(DEPDIR)/md5$U.Po $(DEPDIR)/memcasecmp$U.Po \
$(DEPDIR)/memchr.Po $(DEPDIR)/memcmp.Po $(DEPDIR)/memcoll$U.Po \
$(DEPDIR)/memcpy.Po $(DEPDIR)/memmove.Po $(DEPDIR)/memset.Po \
$(DEPDIR)/mktime.Po $(DEPDIR)/modechange$U.Po $(DEPDIR)/mountlist.Po \
$(DEPDIR)/nanosleep.Po $(DEPDIR)/obstack.Po $(DEPDIR)/path-concat$U.Po \
$(DEPDIR)/posixtm$U.Po $(DEPDIR)/putenv.Po $(DEPDIR)/quote$U.Po \
$(DEPDIR)/quotearg$U.Po $(DEPDIR)/readtokens$U.Po $(DEPDIR)/readutmp.Po \
$(DEPDIR)/realloc.Po $(DEPDIR)/regex.Po $(DEPDIR)/rmdir.Po \
$(DEPDIR)/rpmatch.Po $(DEPDIR)/safe-read$U.Po $(DEPDIR)/same$U.Po \
$(DEPDIR)/save-cwd$U.Po $(DEPDIR)/savedir$U.Po $(DEPDIR)/stat.Po \
$(DEPDIR)/stime.Po $(DEPDIR)/stpcpy.Po $(DEPDIR)/strcasecmp.Po \
$(DEPDIR)/strcspn.Po $(DEPDIR)/strdup.Po $(DEPDIR)/strftime.Po \
$(DEPDIR)/stripslash$U.Po $(DEPDIR)/strncasecmp.Po $(DEPDIR)/strndup.Po \
$(DEPDIR)/strnlen.Po $(DEPDIR)/strpbrk.Po $(DEPDIR)/strstr.Po \
$(DEPDIR)/strtod.Po $(DEPDIR)/strtol.Po $(DEPDIR)/strtoul.Po \
$(DEPDIR)/strtoull.Po $(DEPDIR)/strtoumax.Po $(DEPDIR)/strverscmp.Po \
$(DEPDIR)/unicodeio$U.Po $(DEPDIR)/userspec$U.Po $(DEPDIR)/utime.Po \
$(DEPDIR)/version-etc$U.Po $(DEPDIR)/xgetcwd$U.Po \
$(DEPDIR)/xgethostname$U.Po $(DEPDIR)/xmalloc$U.Po \
$(DEPDIR)/xstrdup$U.Po $(DEPDIR)/xstrtod$U.Po $(DEPDIR)/xstrtol$U.Po \
$(DEPDIR)/xstrtoul$U.Po $(DEPDIR)/xstrtoumax$U.Po $(DEPDIR)/yesno$U.Po
$(DEPDIR)/memcpy.Po $(DEPDIR)/memmove.Po $(DEPDIR)/memrchr.Po \
$(DEPDIR)/memset.Po $(DEPDIR)/mktime.Po $(DEPDIR)/modechange$U.Po \
$(DEPDIR)/mountlist.Po $(DEPDIR)/nanosleep.Po $(DEPDIR)/obstack.Po \
$(DEPDIR)/path-concat$U.Po $(DEPDIR)/posixtm$U.Po $(DEPDIR)/putenv.Po \
$(DEPDIR)/quote$U.Po $(DEPDIR)/quotearg$U.Po $(DEPDIR)/readtokens$U.Po \
$(DEPDIR)/readutmp.Po $(DEPDIR)/realloc.Po $(DEPDIR)/regex.Po \
$(DEPDIR)/rmdir.Po $(DEPDIR)/rpmatch.Po $(DEPDIR)/safe-read$U.Po \
$(DEPDIR)/same$U.Po $(DEPDIR)/save-cwd$U.Po $(DEPDIR)/savedir$U.Po \
$(DEPDIR)/sha$U.Po $(DEPDIR)/stat.Po $(DEPDIR)/stime.Po \
$(DEPDIR)/stpcpy.Po $(DEPDIR)/strcasecmp.Po $(DEPDIR)/strcspn.Po \
$(DEPDIR)/strdup.Po $(DEPDIR)/strftime.Po $(DEPDIR)/stripslash$U.Po \
$(DEPDIR)/strncasecmp.Po $(DEPDIR)/strndup.Po $(DEPDIR)/strnlen.Po \
$(DEPDIR)/strpbrk.Po $(DEPDIR)/strstr.Po $(DEPDIR)/strtod.Po \
$(DEPDIR)/strtol.Po $(DEPDIR)/strtoul.Po $(DEPDIR)/strtoull.Po \
$(DEPDIR)/strtoumax.Po $(DEPDIR)/strverscmp.Po $(DEPDIR)/unicodeio$U.Po \
$(DEPDIR)/userspec$U.Po $(DEPDIR)/utime.Po $(DEPDIR)/version-etc$U.Po \
$(DEPDIR)/xgetcwd$U.Po $(DEPDIR)/xgethostname$U.Po \
$(DEPDIR)/xmalloc$U.Po $(DEPDIR)/xstrdup$U.Po $(DEPDIR)/xstrtod$U.Po \
$(DEPDIR)/xstrtol$U.Po $(DEPDIR)/xstrtoul$U.Po \
$(DEPDIR)/xstrtoumax$U.Po $(DEPDIR)/yesno$U.Po
DIST_COMMON = README $(noinst_HEADERS) ChangeLog Makefile.am \
Makefile.in TODO __fpending.c alloca.c atexit.c chown.c dup2.c error.c \
error.h euidaccess.c fileblocks.c fnmatch.c fsusage.c ftruncate.c \
getdate.c getgroups.c gethostname.c getline.c getloadavg.c getpass.c \
getusershell.c group-member.c lchown.c malloc.c memchr.c memcmp.c \
memcpy.c memmove.c memset.c mktime.c mountlist.c nanosleep.c obstack.c \
obstack.h putenv.c readutmp.c realloc.c regex.c rmdir.c rpmatch.c \
stime.c stpcpy.c strcasecmp.c strcspn.c strdup.c strftime.c \
memcpy.c memmove.c memrchr.c memset.c mktime.c mountlist.c nanosleep.c \
obstack.c obstack.h putenv.c readutmp.c realloc.c regex.c rmdir.c \
rpmatch.c stime.c stpcpy.c strcasecmp.c strcspn.c strdup.c strftime.c \
strncasecmp.c strndup.c strnlen.c strpbrk.c strstr.c strtod.c strtol.c \
strtoul.c strtoull.c strtoumax.c strverscmp.c utime.c
@@ -385,8 +387,6 @@ localcharset_.c: localcharset.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/localcharset.c; then echo $(srcdir)/localcharset.c; else echo localcharset.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > localcharset_.c
long-options_.c: long-options.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/long-options.c; then echo $(srcdir)/long-options.c; else echo long-options.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > long-options_.c
lstat_.c: lstat.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/lstat.c; then echo $(srcdir)/lstat.c; else echo lstat.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > lstat_.c
makepath_.c: makepath.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/makepath.c; then echo $(srcdir)/makepath.c; else echo makepath.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > makepath_.c
malloc_.c: malloc.c $(ANSI2KNR)
@@ -407,6 +407,8 @@ memcpy_.c: memcpy.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/memcpy.c; then echo $(srcdir)/memcpy.c; else echo memcpy.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > memcpy_.c
memmove_.c: memmove.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/memmove.c; then echo $(srcdir)/memmove.c; else echo memmove.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > memmove_.c
memrchr_.c: memrchr.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/memrchr.c; then echo $(srcdir)/memrchr.c; else echo memrchr.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > memrchr_.c
memset_.c: memset.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/memset.c; then echo $(srcdir)/memset.c; else echo memset.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > memset_.c
mktime_.c: mktime.c $(ANSI2KNR)
@@ -449,8 +451,8 @@ save-cwd_.c: save-cwd.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/save-cwd.c; then echo $(srcdir)/save-cwd.c; else echo save-cwd.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > save-cwd_.c
savedir_.c: savedir.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/savedir.c; then echo $(srcdir)/savedir.c; else echo savedir.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > savedir_.c
stat_.c: stat.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/stat.c; then echo $(srcdir)/stat.c; else echo stat.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > stat_.c
sha_.c: sha.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/sha.c; then echo $(srcdir)/sha.c; else echo sha.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > sha_.c
stime_.c: stime.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/stime.c; then echo $(srcdir)/stime.c; else echo stime.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > stime_.c
stpcpy_.c: stpcpy.c $(ANSI2KNR)
@@ -520,13 +522,13 @@ fnmatch_.o fsusage_.o ftruncate_.o full-write_.o getdate_.o \
getgroups_.o gethostname_.o getline_.o getloadavg_.o getopt_.o \
getopt1_.o getpass_.o getstr_.o getugroups_.o getusershell_.o \
group-member_.o hard-locale_.o hash_.o human_.o idcache_.o isdir_.o \
lchown_.o linebuffer_.o localcharset_.o long-options_.o lstat_.o \
makepath_.o malloc_.o mbswidth_.o md5_.o memcasecmp_.o memchr_.o \
memcmp_.o memcoll_.o memcpy_.o memmove_.o memset_.o mktime_.o \
lchown_.o linebuffer_.o localcharset_.o long-options_.o makepath_.o \
malloc_.o mbswidth_.o md5_.o memcasecmp_.o memchr_.o memcmp_.o \
memcoll_.o memcpy_.o memmove_.o memrchr_.o memset_.o mktime_.o \
modechange_.o mountlist_.o nanosleep_.o obstack_.o path-concat_.o \
posixtm_.o putenv_.o quote_.o quotearg_.o readtokens_.o readutmp_.o \
realloc_.o regex_.o rmdir_.o rpmatch_.o safe-read_.o same_.o \
save-cwd_.o savedir_.o stat_.o stime_.o stpcpy_.o strcasecmp_.o \
save-cwd_.o savedir_.o sha_.o stime_.o stpcpy_.o strcasecmp_.o \
strcspn_.o strdup_.o strftime_.o stripslash_.o strncasecmp_.o \
strndup_.o strnlen_.o strpbrk_.o strstr_.o strtod_.o strtol_.o \
strtoul_.o strtoull_.o strtoumax_.o strverscmp_.o unicodeio_.o \
@@ -627,6 +629,7 @@ maintainer-clean-tags:
@AMDEP@include $(DEPDIR)/memcoll$U.Po
@AMDEP@include $(DEPDIR)/memcpy.Po
@AMDEP@include $(DEPDIR)/memmove.Po
@AMDEP@include $(DEPDIR)/memrchr.Po
@AMDEP@include $(DEPDIR)/memset.Po
@AMDEP@include $(DEPDIR)/mktime.Po
@AMDEP@include $(DEPDIR)/modechange$U.Po
@@ -648,6 +651,7 @@ maintainer-clean-tags:
@AMDEP@include $(DEPDIR)/same$U.Po
@AMDEP@include $(DEPDIR)/save-cwd$U.Po
@AMDEP@include $(DEPDIR)/savedir$U.Po
@AMDEP@include $(DEPDIR)/sha$U.Po
@AMDEP@include $(DEPDIR)/stat.Po
@AMDEP@include $(DEPDIR)/stime.Po
@AMDEP@include $(DEPDIR)/stpcpy.Po

View File

@@ -34,6 +34,13 @@ char *malloc ();
#endif
#include <assert.h>
#ifndef HAVE_DECL_MEMRCHR
"this configure-time declaration test was not run"
#endif
#if !HAVE_DECL_MEMRCHR
void *memrchr ();
#endif
#include "dirname.h"
#ifndef ISSLASH
@@ -42,15 +49,13 @@ char *malloc ();
#define BACKSLASH_IS_PATH_SEPARATOR ISSLASH ('\\')
/* Return the leading directories part of PATH,
allocated with malloc. If out of memory, return 0.
Assumes that trailing slashes have already been
removed. */
char *
dir_name (const char *path)
/* Return the length of `dirname (PATH)' and set *RESULT
to point to PATH or to `"."', as appropriate.
Works properly even if there are trailing slashes
(by effectively ignoring them). */
size_t
dir_name_r (const char *path, const char **result)
{
char *newpath;
char *slash;
int length; /* Length of result, not including NUL. */
@@ -62,11 +67,26 @@ dir_name (const char *path)
slash = b;
}
/* Make sure there are no trailing slashes. */
assert (slash == NULL /* There are no slashes in PATH. */
|| slash[1] != 0 /* There is a non-NUL byte after the last slash. */
|| path == slash /* PATH is just `/'. */
);
/* If the last byte of PATH is a slash, decrement SLASH until it's
pointing at the leftmost in a sequence of trailing slashes. */
if (slash && slash[1] == 0)
{
while (path < slash && ISSLASH (slash[-1]))
{
--slash;
}
if (path < slash)
{
slash = memrchr (path, '/', slash - path);
if (BACKSLASH_IS_PATH_SEPARATOR)
{
char *b = memrchr (path, '\\', slash - path);
if (b && slash < b)
slash = b;
}
}
}
if (slash == 0)
{
@@ -96,10 +116,67 @@ dir_name (const char *path)
length = slash - path + 1;
}
newpath = (char *) malloc (length + 1);
*result = path;
return length;
}
/* Return the leading directories part of PATH,
allocated with malloc. If out of memory, return 0.
Works properly even if there are trailing slashes
(by effectively ignoring them). */
char *
dir_name (const char *path)
{
const char *result;
size_t length = dir_name_r (path, &result);
char *newpath = (char *) malloc (length + 1);
if (newpath == 0)
return 0;
strncpy (newpath, path, length);
strncpy (newpath, result, length);
newpath[length] = 0;
return newpath;
}
#ifdef TEST_DIRNAME
/*
Run the test like this (expect no output):
gcc -DHAVE_CONFIG_H -DTEST_DIRNAME -I.. -O -Wall memrchr.c dirname.c
sed -n '/^BEGIN-DATA$/,/^END-DATA$/p' dirname.c|grep -v DATA|./a.out
BEGIN-DATA
foo//// .
bar/foo//// bar
foo/ .
/ /
. .
a .
END-DATA
*/
# define MAX_BUFF_LEN 1024
# include <stdio.h>
# include <stdlib.h>
int
main ()
{
char buff[MAX_BUFF_LEN + 1];
buff[MAX_BUFF_LEN] = 0;
while (fgets (buff, MAX_BUFF_LEN, stdin) && buff[0])
{
char path[MAX_BUFF_LEN];
char expected_result[MAX_BUFF_LEN];
char *result;
sscanf (buff, "%s %s", path, expected_result);
result = dir_name (path);
if (strcmp (result, expected_result))
printf ("%s: got %s, expected %s\n", path, result, expected_result);
}
exit (0);
}
#endif

View File

@@ -28,4 +28,7 @@
char *
dir_name PARAMS ((const char *path));
size_t
dir_name_r PARAMS ((const char *path, const char **result));
#endif /* not DIRNAME_H_ */

View File

@@ -1,5 +1,5 @@
/* Error handler for noninteractive utilities
Copyright (C) 1990-2000 Free Software Foundation, Inc.
Copyright (C) 1990-1998, 2000 Free Software Foundation, Inc.
This file is part of the GNU C Library. Its master source is NOT part of
the C library, however. The master source lives in /gd/gnu/lib.
@@ -26,6 +26,9 @@
#endif
#include <stdio.h>
#if HAVE_LIBINTL_H
# include <libintl.h>
#endif
#if HAVE_VPRINTF || HAVE_DOPRNT || _LIBC
# if __STDC__
@@ -83,6 +86,11 @@ unsigned int error_message_count;
# define error __error
# define error_at_line __error_at_line
# ifdef USE_IN_LIBIO
# include <libio/iolibio.h>
# define fflush(s) _IO_fflush (s)
# endif
#else /* not _LIBC */
/* The calling program should define program_name and set it to the

View File

@@ -1,5 +1,5 @@
/* Declaration for error-reporting function
Copyright (C) 1995, 1996, 1997, 2000 Free Software Foundation, Inc.
Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
NOTE: The canonical source of this file is maintained with the GNU C Library.

View File

@@ -1,4 +1,4 @@
/* Copyright (C) 1991, 1992, 1993, 1996, 1997 Free Software Foundation, Inc.
/* Copyright 1991, 1992, 1993, 1996, 1997, 2000 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -27,30 +27,18 @@
#include <fnmatch.h>
#include <ctype.h>
#if defined STDC_HEADERS || !defined isascii
# define IN_CTYPE_DOMAIN(c) 1
#else
# define IN_CTYPE_DOMAIN(c) isascii (c)
#endif
/* Comment out all this code if we are using the GNU C Library, and are not
actually compiling the library itself. This code is part of the GNU C
Library, but also included in many other GNU distributions. Compiling
and linking in this code is a waste when using the GNU C library
(especially if it is a shared library). Rather than having every GNU
program understand `configure --with-gnu-libc' and omit the object files,
it is simpler to just do this in the source for each such file. */
#if defined _LIBC || !defined __GNU_LIBRARY__
#define ISUPPER(c) (IN_CTYPE_DOMAIN (c) && isupper (c))
# if defined STDC_HEADERS || !defined isascii
# define ISASCII(c) 1
# else
# define ISASCII(c) isascii(c)
# endif
# define ISUPPER(c) (ISASCII (c) && isupper (c))
# ifndef errno
#ifndef errno
extern int errno;
# endif
#endif
/* Match STRING against the filename pattern PATTERN, returning zero if
it matches, nonzero if not. */
@@ -61,7 +49,9 @@ fnmatch (const char *pattern, const char *string, int flags)
register char c;
/* Note that this evaluates C many times. */
# define FOLD(c) ((flags & FNM_CASEFOLD) && ISUPPER (c) ? tolower (c) : (c))
#define FOLD(c) ((flags & FNM_CASEFOLD) && ISUPPER ((unsigned char) (c)) \
? tolower ((unsigned char) (c)) \
: (c))
while ((c = *p++) != '\0')
{
@@ -99,13 +89,10 @@ fnmatch (const char *pattern, const char *string, int flags)
for (c = *p++; c == '?' || c == '*'; c = *p++)
{
if ((flags & FNM_FILE_NAME) && *n == '/')
/* A slash does not match a wildcard under FNM_FILE_NAME. */
return FNM_NOMATCH;
else if (c == '?')
if (c == '?')
{
/* A ? needs to match one character. */
if (*n == '\0')
if (*n == '\0' || (*n == '/' && (flags & FNM_FILE_NAME)))
/* There isn't another character; no match. */
return FNM_NOMATCH;
else
@@ -117,7 +104,13 @@ fnmatch (const char *pattern, const char *string, int flags)
}
if (c == '\0')
return 0;
{
if ((flags & (FNM_FILE_NAME | FNM_LEADING_DIR)) == FNM_FILE_NAME)
for (; *n != '\0'; n++)
if (*n == '/')
return FNM_NOMATCH;
return 0;
}
{
char c1 = (!(flags & FNM_NOESCAPE) && c == '\\') ? *p : c;
@@ -126,6 +119,8 @@ fnmatch (const char *pattern, const char *string, int flags)
if ((c == '[' || FOLD (*n) == c1) &&
fnmatch (p, n, flags & ~FNM_PERIOD) == 0)
return 0;
else if (*n == '/' && (flags & FNM_FILE_NAME))
break;
return FNM_NOMATCH;
}
@@ -231,7 +226,5 @@ fnmatch (const char *pattern, const char *string, int flags)
return FNM_NOMATCH;
# undef FOLD
#undef FOLD
}
#endif /* _LIBC or not __GNU_LIBRARY__. */

View File

@@ -1,4 +1,4 @@
/* Copyright (C) 1995, 1997, 1999, 2000 Free Software Foundation, Inc.
/* Copyright (C) 1995, 1997, 1999 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by

View File

@@ -75,11 +75,12 @@
#endif
#ifndef _
/* This is for other GNU distributions with internationalized messages.
When compiling libc, the _ macro is predefined. */
# ifdef HAVE_LIBINTL_H
/* This is for other GNU distributions with internationalized messages. */
# if defined HAVE_LIBINTL_H || defined _LIBC
# include <libintl.h>
# define _(msgid) gettext (msgid)
# ifndef _
# define _(msgid) gettext (msgid)
# endif
# else
# define _(msgid) (msgid)
# endif
@@ -671,7 +672,8 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
pfound = p;
indfound = option_index;
}
else if (pfound->has_arg != p->has_arg
else if (long_only
|| pfound->has_arg != p->has_arg
|| pfound->flag != p->flag
|| pfound->val != p->val)
/* Second or later nonexact match found. */

View File

@@ -20,7 +20,10 @@
#ifdef HAVE_CONFIG_H
#include <config.h>
#else
#endif
#include "getopt.h"
#if !defined __STDC__ || !__STDC__
/* This is a separate conditional since some stdc systems
reject `defined (const)'. */
@@ -28,9 +31,6 @@
#define const
#endif
#endif
#endif
#include "getopt.h"
#include <stdio.h>

View File

@@ -100,10 +100,8 @@ void
setusershell ()
{
default_index = 0;
if (shellstream == NULL)
shellstream = fopen (SHELLS_FILE, "r");
else
fseek (shellstream, 0L, 0);
if (shellstream)
rewind (shellstream);
}
/* Close the shells file. */

View File

@@ -267,7 +267,7 @@ hash_get_first (const Hash_table *table)
/* Return the user data for the entry following ENTRY, where ENTRY has been
returned by a previous call to either `hash_get_first' or `hash_get_next'.
Return NULL if there is no more entries. */
Return NULL if there are no more entries. */
void *
hash_get_next (const Hash_table *table, const void *entry)
@@ -284,7 +284,7 @@ hash_get_next (const Hash_table *table, const void *entry)
return cursor->next->data;
/* Find first entry in any subsequent bucket. */
for (; bucket < table->bucket_limit; bucket++)
while (++bucket < table->bucket_limit)
if (bucket->data)
return bucket->data;

View File

@@ -148,10 +148,10 @@ void strip_trailing_slashes ();
function creates DIR and to zero otherwise. Give a diagnostic and
return non-zero if DIR cannot be created or cannot be determined to
exist already. Use DIRPATH in any diagnostic, not DIR.
Note that if DIR already exists, this function will return zero
(indicating success) and will set *CREATED_DIR_P to zero. */
Note that if DIR already exists, this function returns zero
(indicating success) and sets *CREATED_DIR_P to zero. */
static int
int
make_dir (const char *dir, const char *dirpath, mode_t mode, int *created_dir_p)
{
int fail = 0;

View File

@@ -14,3 +14,9 @@ make_path PARAMS ((const char *_argpath,
gid_t _group,
int _preserve_existing,
const char *_verbose_fmt_string));
int
make_dir PARAMS ((const char *dir,
const char *dirpath,
mode_t mode,
int *created_dir_p));

View File

@@ -74,15 +74,13 @@ int wcwidth ();
/* Get ISPRINT. */
#if defined (STDC_HEADERS) || (!defined (isascii) && !defined (HAVE_ISASCII))
/* Undefine to protect against the definition in wctype.h of solaris2.6. */
# undef ISASCII
# define ISASCII(c) 1
# define IN_CTYPE_DOMAIN(c) 1
#else
# define ISASCII(c) isascii (c)
# define IN_CTYPE_DOMAIN(c) isascii(c)
#endif
/* Undefine to protect against the definition in wctype.h of solaris2.6. */
#undef ISPRINT
#define ISPRINT(c) (ISASCII (c) && isprint (c))
#define ISPRINT(c) (IN_CTYPE_DOMAIN (c) && isprint (c))
#include "mbswidth.h"

View File

@@ -304,19 +304,16 @@ md5_process_block (buffer, len, ctx)
{ \
a += FF (b, c, d) + (*cwp++ = SWAP (*words)) + T; \
++words; \
CYCLIC (a, s); \
a = rol (a, s); \
a += b; \
} \
while (0)
/* It is unfortunate that C does not provide an operator for
cyclic rotation. Hope the C compiler is smart enough. */
#define CYCLIC(w, s) (w = (w << s) | (w >> (32 - s)))
/* Before we start, one word to the strange constants.
They are defined in RFC 1321 as
T[i] = (int) (4294967296.0 * fabs (sin (i))), i=1..64
T[i] = (int) (4294967296.0 * fabs (sin (i))), i=1..64, or
perl -e 'foreach(1..64){printf "0x%08x\n", int (4294967296 * abs (sin $_))}'
*/
/* Round 1. */
@@ -345,7 +342,7 @@ md5_process_block (buffer, len, ctx)
do \
{ \
a += f (b, c, d) + correct_words[k] + T; \
CYCLIC (a, s); \
a = rol (a, s); \
a += b; \
} \
while (0)

View File

@@ -143,4 +143,19 @@ extern int md5_stream __P ((FILE *stream, void *resblock));
digest. */
extern void *md5_buffer __P ((const char *buffer, size_t len, void *resblock));
/* The following is from gnupg-1.0.2's cipher/bithelp.h. */
/* Rotate a 32 bit integer by n bytes */
#if defined(__GNUC__) && defined(__i386__)
static inline md5_uint32
rol(md5_uint32 x, int n)
{
__asm__("roll %%cl,%0"
:"=r" (x)
:"0" (x),"c" (n));
return x;
}
#else
# define rol(x,n) ( ((x) << (n)) | ((x) >> (32-(n))) )
#endif
#endif

View File

@@ -1,4 +1,4 @@
/* Copyright (C) 1991, 1993, 1997, 1999 Free Software Foundation, Inc.
/* Copyright (C) 1991,93,96,97,99,2000 Free Software Foundation, Inc.
Based on strlen implementation by Torbjorn Granlund (tege@sics.se),
with help from Dan Sahlin (dan@sics.se) and
commentary by Jim Blandy (jimb@ai.mit.edu);
@@ -34,11 +34,18 @@ USA. */
# define __ptr_t char *
#endif /* C++ or ANSI C. */
#if defined (_LIBC)
#if defined _LIBC
# include <string.h>
# include <memcopy.h>
#else
# define reg_char char
#endif
#if defined (HAVE_LIMITS_H) || defined (_LIBC)
#if HAVE_STDLIB_H || defined _LIBC
# include <stdlib.h>
#endif
#if HAVE_LIMITS_H || defined _LIBC
# include <limits.h>
#endif
@@ -49,21 +56,28 @@ USA. */
#endif
#include <sys/types.h>
#if HAVE_BP_SYM_H || defined _LIBC
# include <bp-sym.h>
#else
# define BP_SYM(sym) sym
#endif
#undef memchr
#undef __memchr
/* Search no more than N bytes of S for C. */
__ptr_t
memchr (s, c, n)
__memchr (s, c_in, n)
const __ptr_t s;
int c;
int c_in;
size_t n;
{
const unsigned char *char_ptr;
const unsigned long int *longword_ptr;
unsigned long int longword, magic_bits, charmask;
unsigned reg_char c;
c = (unsigned char) c;
c = (unsigned char) c_in;
/* Handle the first few characters by reading one character at a time.
Do this until CHAR_PTR is aligned on a longword boundary. */
@@ -197,3 +211,6 @@ memchr (s, c, n)
return 0;
}
#ifdef weak_alias
weak_alias (__memchr, BP_SYM (memchr))
#endif

View File

@@ -49,6 +49,11 @@
#ifdef _LIBC
# include <memcopy.h>
# include <endian.h>
# if __BYTE_ORDER == __BIG_ENDIAN
# define WORDS_BIGENDIAN
# endif
#else /* Not in the GNU C library. */

View File

@@ -21,6 +21,8 @@
# include <config.h>
#endif
#include <sys/types.h>
#if HAVE_STRING_H
# include <string.h>
#endif

209
lib/memrchr.c Normal file
View File

@@ -0,0 +1,209 @@
/* memrchr -- find the last occurrence of a byte in a memory block
Copyright (C) 1991, 93, 96, 97, 99, 2000 Free Software Foundation, Inc.
Based on strlen implementation by Torbjorn Granlund (tege@sics.se),
with help from Dan Sahlin (dan@sics.se) and
commentary by Jim Blandy (jimb@ai.mit.edu);
adaptation to memchr suggested by Dick Karpinski (dick@cca.ucsf.edu),
and implemented by Roland McGrath (roland@ai.mit.edu).
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If not,
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include <stdlib.h>
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
#undef __ptr_t
#if defined (__cplusplus) || (defined (__STDC__) && __STDC__)
# define __ptr_t void *
#else /* Not C++ or ANSI C. */
# define __ptr_t char *
#endif /* C++ or ANSI C. */
#if defined (_LIBC)
# include <string.h>
# include <memcopy.h>
#else
# define reg_char char
#endif
#if defined (HAVE_LIMITS_H) || defined (_LIBC)
# include <limits.h>
#endif
#define LONG_MAX_32_BITS 2147483647
#ifndef LONG_MAX
# define LONG_MAX LONG_MAX_32_BITS
#endif
#include <sys/types.h>
#undef __memrchr
#undef memrchr
#ifndef weak_alias
# define __memrchr memrchr
#endif
/* Search no more than N bytes of S for C. */
__ptr_t
__memrchr (s, c_in, n)
const __ptr_t s;
int c_in;
size_t n;
{
const unsigned char *char_ptr;
const unsigned long int *longword_ptr;
unsigned long int longword, magic_bits, charmask;
unsigned reg_char c;
c = (unsigned char) c_in;
/* Handle the last few characters by reading one character at a time.
Do this until CHAR_PTR is aligned on a longword boundary. */
for (char_ptr = (const unsigned char *) s + n;
n > 0 && ((unsigned long int) char_ptr
& (sizeof (longword) - 1)) != 0;
--n)
if (*--char_ptr == c)
return (__ptr_t) char_ptr;
/* All these elucidatory comments refer to 4-byte longwords,
but the theory applies equally well to 8-byte longwords. */
longword_ptr = (unsigned long int *) char_ptr;
/* Bits 31, 24, 16, and 8 of this number are zero. Call these bits
the "holes." Note that there is a hole just to the left of
each byte, with an extra at the end:
bits: 01111110 11111110 11111110 11111111
bytes: AAAAAAAA BBBBBBBB CCCCCCCC DDDDDDDD
The 1-bits make sure that carries propagate to the next 0-bit.
The 0-bits provide holes for carries to fall into. */
if (sizeof (longword) != 4 && sizeof (longword) != 8)
abort ();
#if LONG_MAX <= LONG_MAX_32_BITS
magic_bits = 0x7efefeff;
#else
magic_bits = ((unsigned long int) 0x7efefefe << 32) | 0xfefefeff;
#endif
/* Set up a longword, each of whose bytes is C. */
charmask = c | (c << 8);
charmask |= charmask << 16;
#if LONG_MAX > LONG_MAX_32_BITS
charmask |= charmask << 32;
#endif
/* Instead of the traditional loop which tests each character,
we will test a longword at a time. The tricky part is testing
if *any of the four* bytes in the longword in question are zero. */
while (n >= sizeof (longword))
{
/* We tentatively exit the loop if adding MAGIC_BITS to
LONGWORD fails to change any of the hole bits of LONGWORD.
1) Is this safe? Will it catch all the zero bytes?
Suppose there is a byte with all zeros. Any carry bits
propagating from its left will fall into the hole at its
least significant bit and stop. Since there will be no
carry from its most significant bit, the LSB of the
byte to the left will be unchanged, and the zero will be
detected.
2) Is this worthwhile? Will it ignore everything except
zero bytes? Suppose every byte of LONGWORD has a bit set
somewhere. There will be a carry into bit 8. If bit 8
is set, this will carry into bit 16. If bit 8 is clear,
one of bits 9-15 must be set, so there will be a carry
into bit 16. Similarly, there will be a carry into bit
24. If one of bits 24-30 is set, there will be a carry
into bit 31, so all of the hole bits will be changed.
The one misfire occurs when bits 24-30 are clear and bit
31 is set; in this case, the hole at bit 31 is not
changed. If we had access to the processor carry flag,
we could close this loophole by putting the fourth hole
at bit 32!
So it ignores everything except 128's, when they're aligned
properly.
3) But wait! Aren't we looking for C, not zero?
Good point. So what we do is XOR LONGWORD with a longword,
each of whose bytes is C. This turns each byte that is C
into a zero. */
longword = *--longword_ptr ^ charmask;
/* Add MAGIC_BITS to LONGWORD. */
if ((((longword + magic_bits)
/* Set those bits that were unchanged by the addition. */
^ ~longword)
/* Look at only the hole bits. If any of the hole bits
are unchanged, most likely one of the bytes was a
zero. */
& ~magic_bits) != 0)
{
/* Which of the bytes was C? If none of them were, it was
a misfire; continue the search. */
const unsigned char *cp = (const unsigned char *) longword_ptr;
#if LONG_MAX > 2147483647
if (cp[7] == c)
return (__ptr_t) &cp[7];
if (cp[6] == c)
return (__ptr_t) &cp[6];
if (cp[5] == c)
return (__ptr_t) &cp[5];
if (cp[4] == c)
return (__ptr_t) &cp[4];
#endif
if (cp[3] == c)
return (__ptr_t) &cp[3];
if (cp[2] == c)
return (__ptr_t) &cp[2];
if (cp[1] == c)
return (__ptr_t) &cp[1];
if (cp[0] == c)
return (__ptr_t) cp;
}
n -= sizeof (longword);
}
char_ptr = (const unsigned char *) longword_ptr;
while (n-- > 0)
{
if (*--char_ptr == c)
return (__ptr_t) char_ptr;
}
return 0;
}
#ifdef weak_alias
weak_alias (__memrchr, memrchr)
#endif

View File

@@ -1,5 +1,5 @@
/* modechange.c -- file mode manipulation
Copyright (C) 1989, 1990, 1997-2000 Free Software Foundation, Inc.
Copyright (C) 1989, 1990, 1997, 1998, 1999 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by

View File

@@ -1,5 +1,5 @@
/* obstack.c - subroutines used implicitly by object stack macros
Copyright (C) 1988-1994,96,97,98,1999, 2000 Free Software Foundation, Inc.
Copyright (C) 1988-1994,96,97,98,99,2000 Free Software Foundation, Inc.
This file is part of the GNU C Library. Its master source is NOT part of
the C library, however. The master source lives in /gd/gnu/lib.
@@ -282,9 +282,10 @@ _obstack_newchunk (h, length)
register long obj_size = h->next_free - h->object_base;
register long i;
long already;
char *object_base;
/* Compute size for new chunk. */
new_size = (obj_size + length) + (obj_size >> 3) + 100;
new_size = (obj_size + length) + (obj_size >> 3) + h->alignment_mask + 100;
if (new_size < h->chunk_size)
new_size = h->chunk_size;
@@ -296,6 +297,11 @@ _obstack_newchunk (h, length)
new_chunk->prev = old_chunk;
new_chunk->limit = h->chunk_limit = (char *) new_chunk + new_size;
/* Compute an aligned object_base in the new chunk */
object_base =
__INT_TO_PTR ((__PTR_TO_INT (new_chunk->contents) + h->alignment_mask)
& ~ (h->alignment_mask));
/* Move the existing object to the new chunk.
Word at a time is fast and is safe if the object
is sufficiently aligned. */
@@ -303,7 +309,7 @@ _obstack_newchunk (h, length)
{
for (i = obj_size / sizeof (COPYING_UNIT) - 1;
i >= 0; i--)
((COPYING_UNIT *)new_chunk->contents)[i]
((COPYING_UNIT *)object_base)[i]
= ((COPYING_UNIT *)h->object_base)[i];
/* We used to copy the odd few remaining bytes as one extra COPYING_UNIT,
but that can cross a page boundary on a machine
@@ -314,7 +320,7 @@ _obstack_newchunk (h, length)
already = 0;
/* Copy remaining bytes one by one. */
for (i = already; i < obj_size; i++)
new_chunk->contents[i] = h->object_base[i];
object_base[i] = h->object_base[i];
/* If the object just copied was the only data in OLD_CHUNK,
free that chunk and remove it from the chain.
@@ -325,7 +331,7 @@ _obstack_newchunk (h, length)
CALL_FREEFUN (h, old_chunk);
}
h->object_base = new_chunk->contents;
h->object_base = object_base;
h->next_free = h->object_base + obj_size;
/* The new chunk certainly contains no empty object yet. */
h->maybe_empty_object = 0;
@@ -451,7 +457,7 @@ _obstack_memory_used (h)
/* Define the error handler. */
# ifndef _
# ifdef HAVE_LIBINTL_H
# if defined HAVE_LIBINTL_H || defined _LIBC
# include <libintl.h>
# ifndef _
# define _(Str) gettext (Str)
@@ -518,20 +524,20 @@ int (obstack_make_room) (obstack, length)
return obstack_make_room (obstack, length);
}
void (obstack_grow) (obstack, pointer, length)
void (obstack_grow) (obstack, data, length)
struct obstack *obstack;
POINTER pointer;
const POINTER data;
int length;
{
obstack_grow (obstack, pointer, length);
obstack_grow (obstack, data, length);
}
void (obstack_grow0) (obstack, pointer, length)
void (obstack_grow0) (obstack, data, length)
struct obstack *obstack;
POINTER pointer;
const POINTER data;
int length;
{
obstack_grow0 (obstack, pointer, length);
obstack_grow0 (obstack, data, length);
}
void (obstack_1grow) (obstack, character)
@@ -575,20 +581,20 @@ POINTER (obstack_alloc) (obstack, length)
return obstack_alloc (obstack, length);
}
POINTER (obstack_copy) (obstack, pointer, length)
POINTER (obstack_copy) (obstack, address, length)
struct obstack *obstack;
POINTER pointer;
const POINTER address;
int length;
{
return obstack_copy (obstack, pointer, length);
return obstack_copy (obstack, address, length);
}
POINTER (obstack_copy0) (obstack, pointer, length)
POINTER (obstack_copy0) (obstack, address, length)
struct obstack *obstack;
POINTER pointer;
const POINTER address;
int length;
{
return obstack_copy0 (obstack, pointer, length);
return obstack_copy0 (obstack, address, length);
}
# endif /* __STDC__ */

View File

@@ -1,10 +1,11 @@
/* obstack.h - object stack macros
Copyright (C) 1988,89,90,91,92,93,94,96,97,98,99 Free Software Foundation, Inc.
This file is part of the GNU C Library. Its master source is NOT part of
the C library, however. The master source lives in /gd/gnu/lib.
NOTE: The canonical source of this file is maintained with the GNU C Library.
Bugs can be reported to bug-glibc@prep.ai.mit.edu.
Bugs can be reported to bug-glibc@gnu.org.
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
@@ -13,11 +14,11 @@
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
You should have received a copy of the GNU Library General Public
License along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
USA. */
@@ -219,18 +220,18 @@ void obstack_init (struct obstack *obstack);
void * obstack_alloc (struct obstack *obstack, int size);
void * obstack_copy (struct obstack *obstack, void *address, int size);
void * obstack_copy0 (struct obstack *obstack, void *address, int size);
void * obstack_copy (struct obstack *obstack, const void *address, int size);
void * obstack_copy0 (struct obstack *obstack, const void *address, int size);
void obstack_free (struct obstack *obstack, void *block);
void obstack_blank (struct obstack *obstack, int size);
void obstack_grow (struct obstack *obstack, void *data, int size);
void obstack_grow0 (struct obstack *obstack, void *data, int size);
void obstack_grow (struct obstack *obstack, const void *data, int size);
void obstack_grow0 (struct obstack *obstack, const void *data, int size);
void obstack_1grow (struct obstack *obstack, int data_char);
void obstack_ptr_grow (struct obstack *obstack, void *data);
void obstack_ptr_grow (struct obstack *obstack, const void *data);
void obstack_int_grow (struct obstack *obstack, int data);
void * obstack_finish (struct obstack *obstack);
@@ -240,7 +241,7 @@ int obstack_object_size (struct obstack *obstack);
int obstack_room (struct obstack *obstack);
void obstack_make_room (struct obstack *obstack, int size);
void obstack_1grow_fast (struct obstack *obstack, int data_char);
void obstack_ptr_grow_fast (struct obstack *obstack, void *data);
void obstack_ptr_grow_fast (struct obstack *obstack, const void *data);
void obstack_int_grow_fast (struct obstack *obstack, int data);
void obstack_blank_fast (struct obstack *obstack, int size);
@@ -290,21 +291,24 @@ extern int obstack_exit_failure;
standard C version. */
#if defined __STDC__ && __STDC__
# define obstack_init(h) \
_obstack_begin ((h), 0, 0, \
(void *(*) (long)) obstack_chunk_alloc, (void (*) (void *)) obstack_chunk_free)
# define obstack_init(h) \
_obstack_begin ((h), 0, 0, \
(void *(*) (long)) obstack_chunk_alloc, \
(void (*) (void *)) obstack_chunk_free)
# define obstack_begin(h, size) \
_obstack_begin ((h), (size), 0, \
(void *(*) (long)) obstack_chunk_alloc, (void (*) (void *)) obstack_chunk_free)
# define obstack_begin(h, size) \
_obstack_begin ((h), (size), 0, \
(void *(*) (long)) obstack_chunk_alloc, \
(void (*) (void *)) obstack_chunk_free)
# define obstack_specify_allocation(h, size, alignment, chunkfun, freefun) \
_obstack_begin ((h), (size), (alignment), \
(void *(*) (long)) (chunkfun), (void (*) (void *)) (freefun))
_obstack_begin ((h), (size), (alignment), \
(void *(*) (long)) (chunkfun), \
(void (*) (void *)) (freefun))
# define obstack_specify_allocation_with_arg(h, size, alignment, chunkfun, freefun, arg) \
_obstack_begin_1 ((h), (size), (alignment), \
(void *(*) (void *, long)) (chunkfun), \
_obstack_begin_1 ((h), (size), (alignment), \
(void *(*) (void *, long)) (chunkfun), \
(void (*) (void *, void *)) (freefun), (arg))
# define obstack_chunkfun(h, newchunkfun) \
@@ -315,21 +319,25 @@ extern int obstack_exit_failure;
#else
# define obstack_init(h) \
_obstack_begin ((h), 0, 0, \
(void *(*) ()) obstack_chunk_alloc, (void (*) ()) obstack_chunk_free)
# define obstack_init(h) \
_obstack_begin ((h), 0, 0, \
(void *(*) ()) obstack_chunk_alloc, \
(void (*) ()) obstack_chunk_free)
# define obstack_begin(h, size) \
_obstack_begin ((h), (size), 0, \
(void *(*) ()) obstack_chunk_alloc, (void (*) ()) obstack_chunk_free)
# define obstack_begin(h, size) \
_obstack_begin ((h), (size), 0, \
(void *(*) ()) obstack_chunk_alloc, \
(void (*) ()) obstack_chunk_free)
# define obstack_specify_allocation(h, size, alignment, chunkfun, freefun) \
_obstack_begin ((h), (size), (alignment), \
(void *(*) ()) (chunkfun), (void (*) ()) (freefun))
_obstack_begin ((h), (size), (alignment), \
(void *(*) ()) (chunkfun), \
(void (*) ()) (freefun))
# define obstack_specify_allocation_with_arg(h, size, alignment, chunkfun, freefun, arg) \
_obstack_begin_1 ((h), (size), (alignment), \
(void *(*) ()) (chunkfun), (void (*) ()) (freefun), (arg))
_obstack_begin_1 ((h), (size), (alignment), \
(void *(*) ()) (chunkfun), \
(void (*) ()) (freefun), (arg))
# define obstack_chunkfun(h, newchunkfun) \
((h) -> chunkfun = (struct _obstack_chunk *(*)()) (newchunkfun))
@@ -387,7 +395,7 @@ __extension__ \
int __len = (length); \
if (__o->next_free + __len > __o->chunk_limit) \
_obstack_newchunk (__o, __len); \
_obstack_memcpy (__o->next_free, (char *) (where), __len); \
_obstack_memcpy (__o->next_free, (where), __len); \
__o->next_free += __len; \
(void) 0; })
@@ -397,7 +405,7 @@ __extension__ \
int __len = (length); \
if (__o->next_free + __len + 1 > __o->chunk_limit) \
_obstack_newchunk (__o, __len + 1); \
_obstack_memcpy (__o->next_free, (char *) (where), __len); \
_obstack_memcpy (__o->next_free, (where), __len); \
__o->next_free += __len; \
*(__o->next_free)++ = 0; \
(void) 0; })
@@ -410,8 +418,8 @@ __extension__ \
*(__o->next_free)++ = (datum); \
(void) 0; })
/* These assume that the obstack alignment is good enough for pointers or ints,
and that the data added so far to the current object
/* These assume that the obstack alignment is good enough for pointers
or ints, and that the data added so far to the current object
shares that much alignment. */
# define obstack_ptr_grow(OBSTACK,datum) \
@@ -419,7 +427,7 @@ __extension__ \
({ struct obstack *__o = (OBSTACK); \
if (__o->next_free + sizeof (void *) > __o->chunk_limit) \
_obstack_newchunk (__o, sizeof (void *)); \
*((void **)__o->next_free)++ = ((void *)datum); \
*((void **)__o->next_free)++ = (datum); \
(void) 0; })
# define obstack_int_grow(OBSTACK,datum) \
@@ -427,11 +435,14 @@ __extension__ \
({ struct obstack *__o = (OBSTACK); \
if (__o->next_free + sizeof (int) > __o->chunk_limit) \
_obstack_newchunk (__o, sizeof (int)); \
*((int *)__o->next_free)++ = ((int)datum); \
*((int *)__o->next_free)++ = (datum); \
(void) 0; })
# define obstack_ptr_grow_fast(h,aptr) (*((void **) (h)->next_free)++ = (void *)aptr)
# define obstack_int_grow_fast(h,aint) (*((int *) (h)->next_free)++ = (int) aint)
# define obstack_ptr_grow_fast(h,aptr) \
(*((void **) (h)->next_free)++ = (aptr))
# define obstack_int_grow_fast(h,aint) \
(*((int *) (h)->next_free)++ = (aint))
# define obstack_blank(OBSTACK,length) \
__extension__ \
@@ -512,14 +523,14 @@ __extension__ \
( (h)->temp = (length), \
(((h)->next_free + (h)->temp > (h)->chunk_limit) \
? (_obstack_newchunk ((h), (h)->temp), 0) : 0), \
_obstack_memcpy ((h)->next_free, (char *) (where), (h)->temp), \
_obstack_memcpy ((h)->next_free, (where), (h)->temp), \
(h)->next_free += (h)->temp)
# define obstack_grow0(h,where,length) \
( (h)->temp = (length), \
(((h)->next_free + (h)->temp + 1 > (h)->chunk_limit) \
? (_obstack_newchunk ((h), (h)->temp + 1), 0) : 0), \
_obstack_memcpy ((h)->next_free, (char *) (where), (h)->temp), \
_obstack_memcpy ((h)->next_free, (where), (h)->temp), \
(h)->next_free += (h)->temp, \
*((h)->next_free)++ = 0)
@@ -531,15 +542,18 @@ __extension__ \
# define obstack_ptr_grow(h,datum) \
( (((h)->next_free + sizeof (char *) > (h)->chunk_limit) \
? (_obstack_newchunk ((h), sizeof (char *)), 0) : 0), \
(*((char **) (((h)->next_free+=sizeof(char *))-sizeof(char *))) = ((char *) datum)))
(*((const char **) (((h)->next_free+=sizeof(char *))-sizeof(char *))) = (datum)))
# define obstack_int_grow(h,datum) \
( (((h)->next_free + sizeof (int) > (h)->chunk_limit) \
? (_obstack_newchunk ((h), sizeof (int)), 0) : 0), \
(*((int *) (((h)->next_free+=sizeof(int))-sizeof(int))) = ((int) datum)))
(*((int *) (((h)->next_free+=sizeof(int))-sizeof(int))) = (datum)))
# define obstack_ptr_grow_fast(h,aptr) (*((char **) (h)->next_free)++ = (char *) aptr)
# define obstack_int_grow_fast(h,aint) (*((int *) (h)->next_free)++ = (int) aint)
# define obstack_ptr_grow_fast(h,aptr) \
(*((const char **) (h)->next_free)++ = (aptr))
# define obstack_int_grow_fast(h,aint) \
(*((int *) (h)->next_free)++ = (aint))
# define obstack_blank(h,length) \
( (h)->temp = (length), \

View File

@@ -1,4 +1,12 @@
/* prototypes for quote.c */
char const *quote_n (int n, char const *name);
char const *quote (char const *name);
#ifndef PARAMS
# if defined PROTOTYPES || (defined __STDC__ && __STDC__)
# define PARAMS(Args) Args
# else
# define PARAMS(Args) ()
# endif
#endif
char const *quote_n PARAMS ((int n, char const *name));
char const *quote PARAMS ((char const *name));

View File

@@ -92,15 +92,14 @@ size_t mbrtowc ();
#define INT_BITS (sizeof (int) * CHAR_BIT)
#if defined (STDC_HEADERS) || (!defined (isascii) && !defined (HAVE_ISASCII))
/* Undefine to protect against the definition in wctype.h of solaris2.6. */
# undef ISASCII
# define ISASCII(c) 1
# define IN_CTYPE_DOMAIN(c) 1
#else
# define ISASCII(c) isascii (c)
# define IN_CTYPE_DOMAIN(c) isascii(c)
#endif
/* Undefine to protect against the definition in wctype.h of solaris2.6. */
#undef ISPRINT
#define ISPRINT(c) (ISASCII (c) && isprint (c))
#define ISPRINT(c) (IN_CTYPE_DOMAIN (c) && isprint (c))
struct quoting_options
{

View File

@@ -89,6 +89,10 @@
/* This is for other GNU distributions with internationalized messages. */
#if HAVE_LIBINTL_H || defined _LIBC
# include <libintl.h>
# ifdef _LIBC
# undef gettext
# define gettext(msgid) __dcgettext ("libc", msgid, LC_MESSAGES)
# endif
#else
# define gettext(msgid) (msgid)
#endif
@@ -197,35 +201,34 @@ char *realloc ();
eliminate the && through constant folding."
Solaris defines some of these symbols so we must undefine them first. */
#undef ISASCII
#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
#undef ISPRINT
#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))
#ifdef _tolower
# define TOLOWER(c) _tolower(c)
@@ -1234,7 +1237,7 @@ typedef struct
# if defined MATCH_MAY_ALLOCATE
/* 4400 was enough to cause a crash on Alpha OSF/1,
whose default stack limit is 2mb. */
int re_max_failures = 20000;
int re_max_failures = 4000;
# else
int re_max_failures = 2000;
# endif
@@ -2712,7 +2715,7 @@ regex_compile (pattern, size, syntax, bufp)
PATFETCH (c);
/* Now add the multibyte character(s) we found
to the acceptabed list.
to the accept list.
XXX Note that this is not entirely correct.
we would have to match multibyte sequences
@@ -2725,7 +2728,10 @@ regex_compile (pattern, size, syntax, bufp)
if (c1 == 1)
range_start = extra[idx];
while (c1-- > 0)
SET_LIST_BIT (extra[idx++]);
{
SET_LIST_BIT (extra[idx]);
++idx;
}
}
#endif
had_char_class = false;
@@ -3507,23 +3513,19 @@ compile_range (range_start_char, p_ptr, pend, translate, syntax, b)
unsigned char *b;
{
unsigned this_char;
const char *p = *p_ptr;
reg_errcode_t ret;
char range_start[2];
char range_end[2];
char ch[2];
#if _LIBC
const unsigned char *collseq;
unsigned int start_colseq;
unsigned int end_colseq;
#else
unsigned end_char;
#endif
if (p == pend)
return REG_ERANGE;
/* Fetch the endpoints without translating them; the
appropriate translation is done in the bit-setting loop below. */
range_start[0] = range_start_char;
range_start[1] = '\0';
range_end[0] = p[0];
range_end[1] = '\0';
/* Have to increment the pointer into the pattern string, so the
caller isn't still at the ending character. */
(*p_ptr)++;
@@ -3531,19 +3533,34 @@ compile_range (range_start_char, p_ptr, pend, translate, syntax, b)
/* Report an error if the range is empty and the syntax prohibits this. */
ret = syntax & RE_NO_EMPTY_RANGES ? REG_ERANGE : REG_NOERROR;
/* Here we see why `this_char' has to be larger than an `unsigned
char' -- we would otherwise go into an infinite loop, since all
characters <= 0xff. */
ch[1] = '\0';
#if _LIBC
collseq = (const unsigned char *) _NL_CURRENT (LC_COLLATE,
_NL_COLLATE_COLLSEQMB);
start_colseq = collseq[(unsigned char) TRANSLATE (range_start_char)];
end_colseq = collseq[(unsigned char) TRANSLATE (p[0])];
for (this_char = 0; this_char <= (unsigned char) -1; ++this_char)
{
ch[0] = this_char;
if (strcoll (range_start, ch) <= 0 && strcoll (ch, range_end) <= 0)
unsigned int this_colseq = collseq[(unsigned char) TRANSLATE (this_char)];
if (start_colseq <= this_colseq && this_colseq <= end_colseq)
{
SET_LIST_BIT (TRANSLATE (this_char));
ret = REG_NOERROR;
}
}
#else
/* Here we see why `this_char' has to be larger than an `unsigned
char' -- we would otherwise go into an infinite loop, since all
characters <= 0xff. */
range_start_char = TRANSLATE (range_start_char);
end_char = TRANSLATE (p[0]);
for (this_char = range_start_char; this_char <= end_char; ++this_char)
{
SET_LIST_BIT (TRANSLATE (this_char));
ret = REG_NOERROR;
}
#endif
return ret;
}

View File

@@ -513,13 +513,31 @@ extern int re_exec _RE_ARGS ((const char *));
# endif
#endif
/* GCC 2.95 and later have "__restrict"; C99 compilers have
"restrict", and "configure" may have defined "restrict". */
#ifndef __restrict
# if ! (2 < __GNUC__ || (2 == __GNUC__ && 95 <= __GNUC_MINOR__))
# if defined restrict || 199901L <= __STDC_VERSION__
# define __restrict restrict
# else
# define __restrict
# endif
# endif
#endif
/* For now unconditionally define __restrict_arr to expand to nothing.
Ideally we would have a test for the compiler which allows defining
it to restrict. */
#define __restrict_arr
/* POSIX compatibility. */
extern int regcomp _RE_ARGS ((regex_t *__preg, const char *__pattern,
extern int regcomp _RE_ARGS ((regex_t *__restrict __preg,
const char *__restrict __pattern,
int __cflags));
extern int regexec _RE_ARGS ((const regex_t *__preg,
const char *__string, size_t __nmatch,
regmatch_t __pmatch[], int __eflags));
extern int regexec _RE_ARGS ((const regex_t *__restrict __preg,
const char *__restrict __string, size_t __nmatch,
regmatch_t __pmatch[__restrict_arr],
int __eflags));
extern size_t regerror _RE_ARGS ((int __errcode, const regex_t *__preg,
char *__errbuf, size_t __errbuf_size));

View File

@@ -42,6 +42,10 @@
extern int errno;
#endif
#ifndef O_DIRECTORY
# define O_DIRECTORY 0
#endif
#include "save-cwd.h"
#include "error.h"
@@ -67,7 +71,7 @@ save_cwd (struct saved_cwd *cwd)
if (have_working_fchdir)
{
#if HAVE_FCHDIR
cwd->desc = open (".", O_RDONLY);
cwd->desc = open (".", O_RDONLY | O_DIRECTORY);
if (cwd->desc < 0)
{
error (0, errno, "cannot open current directory");

376
lib/sha.c Normal file
View File

@@ -0,0 +1,376 @@
/* sha.c - Functions to compute the SHA1 hash (message-digest) of files
or blocks of memory. Complies to the NIST specification FIPS-180-1.
Copyright (C) 2000 Scott G. Miller
Credits:
Robert Klep <robert@ilse.nl> -- Expansion function fix
*/
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
#include <sys/types.h>
#if STDC_HEADERS || defined _LIBC
# include <stdlib.h>
# include <string.h>
#else
# ifndef HAVE_MEMCPY
# define memcpy(d, s, n) bcopy ((s), (d), (n))
# endif
#endif
#include "md5.h"
#include "sha.h"
/*
Not-swap is a macro that does an endian swap on architectures that are
big-endian, as SHA needs some data in a little-endian format
*/
#ifdef WORDS_BIGENDIAN
# define NOTSWAP(n) (n)
# define SWAP(n) \
(((n) << 24) | (((n) & 0xff00) << 8) | (((n) >> 8) & 0xff00) | ((n) >> 24))
#else
# define NOTSWAP(n) \
(((n) << 24) | (((n) & 0xff00) << 8) | (((n) >> 8) & 0xff00) | ((n) >> 24))
# define SWAP(n) (n)
#endif
/* This array contains the bytes used to pad the buffer to the next
64-byte boundary. (RFC 1321, 3.1: Step 1) */
static const unsigned char fillbuf[64] = { 0x80, 0 /* , 0, 0, ... */ };
/*
Takes a pointer to a 160 bit block of data (five 32 bit ints) and
intializes it to the start constants of the SHA1 algorithm. This
must be called before using hash in the call to sha_hash
*/
void
sha_init_ctx (struct sha_ctx *ctx)
{
ctx->A = 0x67452301;
ctx->B = 0xefcdab89;
ctx->C = 0x98badcfe;
ctx->D = 0x10325476;
ctx->E = 0xc3d2e1f0;
ctx->total[0] = ctx->total[1] = 0;
ctx->buflen = 0;
}
/* Put result from CTX in first 20 bytes following RESBUF. The result
must be in little endian byte order.
IMPORTANT: On some systems it is required that RESBUF is correctly
aligned for a 32 bits value. */
void *
sha_read_ctx (const struct sha_ctx *ctx, void *resbuf)
{
((md5_uint32 *) resbuf)[0] = NOTSWAP (ctx->A);
((md5_uint32 *) resbuf)[1] = NOTSWAP (ctx->B);
((md5_uint32 *) resbuf)[2] = NOTSWAP (ctx->C);
((md5_uint32 *) resbuf)[3] = NOTSWAP (ctx->D);
((md5_uint32 *) resbuf)[4] = NOTSWAP (ctx->E);
return resbuf;
}
/* Process the remaining bytes in the internal buffer and the usual
prolog according to the standard and write the result to RESBUF.
IMPORTANT: On some systems it is required that RESBUF is correctly
aligned for a 32 bits value. */
void *
sha_finish_ctx (struct sha_ctx *ctx, void *resbuf)
{
/* Take yet unprocessed bytes into account. */
md5_uint32 bytes = ctx->buflen;
size_t pad;
/* Now count remaining bytes. */
ctx->total[0] += bytes;
if (ctx->total[0] < bytes)
++ctx->total[1];
pad = bytes >= 56 ? 64 + 56 - bytes : 56 - bytes;
memcpy (&ctx->buffer[bytes], fillbuf, pad);
/* Put the 64-bit file length in *bits* at the end of the buffer. */
*(md5_uint32 *) &ctx->buffer[bytes + pad + 4] = NOTSWAP (ctx->total[0] << 3);
*(md5_uint32 *) &ctx->buffer[bytes + pad] = NOTSWAP ((ctx->total[1] << 3) |
(ctx->total[0] >> 29));
/* Process last bytes. */
sha_process_block (ctx->buffer, bytes + pad + 8, ctx);
return sha_read_ctx (ctx, resbuf);
}
/* Compute SHA1 message digest for bytes read from STREAM. The
resulting message digest number will be written into the 16 bytes
beginning at RESBLOCK. */
int
sha_stream (FILE *stream, void *resblock)
{
/* Important: BLOCKSIZE must be a multiple of 64. */
#define BLOCKSIZE 4096
struct sha_ctx ctx;
char buffer[BLOCKSIZE + 72];
size_t sum;
/* Initialize the computation context. */
sha_init_ctx (&ctx);
/* Iterate over full file contents. */
while (1)
{
/* We read the file in blocks of BLOCKSIZE bytes. One call of the
computation function processes the whole buffer so that with the
next round of the loop another block can be read. */
size_t n;
sum = 0;
/* Read block. Take care for partial reads. */
do
{
n = fread (buffer + sum, 1, BLOCKSIZE - sum, stream);
sum += n;
}
while (sum < BLOCKSIZE && n != 0);
if (n == 0 && ferror (stream))
return 1;
/* If end of file is reached, end the loop. */
if (n == 0)
break;
/* Process buffer with BLOCKSIZE bytes. Note that
BLOCKSIZE % 64 == 0
*/
sha_process_block (buffer, BLOCKSIZE, &ctx);
}
/* Add the last bytes if necessary. */
if (sum > 0)
sha_process_bytes (buffer, sum, &ctx);
/* Construct result in desired memory. */
sha_finish_ctx (&ctx, resblock);
return 0;
}
/* Compute MD5 message digest for LEN bytes beginning at BUFFER. The
result is always in little endian byte order, so that a byte-wise
output yields to the wanted ASCII representation of the message
digest. */
void *
sha_buffer (const char *buffer, size_t len, void *resblock)
{
struct sha_ctx ctx;
/* Initialize the computation context. */
sha_init_ctx (&ctx);
/* Process whole buffer but last len % 64 bytes. */
sha_process_bytes (buffer, len, &ctx);
/* Put result in desired memory area. */
return sha_finish_ctx (&ctx, resblock);
}
void
sha_process_bytes (const void *buffer, size_t len, struct sha_ctx *ctx)
{
/* When we already have some bits in our internal buffer concatenate
both inputs first. */
if (ctx->buflen != 0)
{
size_t left_over = ctx->buflen;
size_t add = 128 - left_over > len ? len : 128 - left_over;
memcpy (&ctx->buffer[left_over], buffer, add);
ctx->buflen += add;
if (left_over + add > 64)
{
sha_process_block (ctx->buffer, (left_over + add) & ~63, ctx);
/* The regions in the following copy operation cannot overlap. */
memcpy (ctx->buffer, &ctx->buffer[(left_over + add) & ~63],
(left_over + add) & 63);
ctx->buflen = (left_over + add) & 63;
}
buffer = (const char *) buffer + add;
len -= add;
}
/* Process available complete blocks. */
if (len > 64)
{
sha_process_block (buffer, len & ~63, ctx);
buffer = (const char *) buffer + (len & ~63);
len &= 63;
}
/* Move remaining bytes in internal buffer. */
if (len > 0)
{
memcpy (ctx->buffer, buffer, len);
ctx->buflen = len;
}
}
/* --- Code below is the primary difference between md5.c and sha.c --- */
/* SHA1 round constants */
#define K1 0x5a827999L
#define K2 0x6ed9eba1L
#define K3 0x8f1bbcdcL
#define K4 0xca62c1d6L
/* Round functions. Note that F2 is the same as F4. */
#define F1(B,C,D) ( D ^ ( B & ( C ^ D ) ) )
#define F2(B,C,D) (B ^ C ^ D)
#define F3(B,C,D) ( ( B & C ) | ( D & ( B | C ) ) )
#define F4(B,C,D) (B ^ C ^ D)
/* Process LEN bytes of BUFFER, accumulating context into CTX.
It is assumed that LEN % 64 == 0.
Most of this code comes from GnuPG's cipher/sha1.c. */
void
sha_process_block (const void *buffer, size_t len, struct sha_ctx *ctx)
{
const md5_uint32 *words = buffer;
size_t nwords = len / sizeof (md5_uint32);
const md5_uint32 *endp = words + nwords;
md5_uint32 x[16];
md5_uint32 a = ctx->A;
md5_uint32 b = ctx->B;
md5_uint32 c = ctx->C;
md5_uint32 d = ctx->D;
md5_uint32 e = ctx->E;
/* First increment the byte count. RFC 1321 specifies the possible
length of the file up to 2^64 bits. Here we only compute the
number of bytes. Do a double word increment. */
ctx->total[0] += len;
if (ctx->total[0] < len)
++ctx->total[1];
#define M(I) ( tm = x[I&0x0f] ^ x[(I-14)&0x0f] \
^ x[(I-8)&0x0f] ^ x[(I-3)&0x0f] \
, (x[I&0x0f] = rol(tm, 1)) )
#define R(A,B,C,D,E,F,K,M) do { E += rol( A, 5 ) \
+ F( B, C, D ) \
+ K \
+ M; \
B = rol( B, 30 ); \
} while(0)
while (words < endp)
{
md5_uint32 tm;
int t;
/* FIXME: see sha1.c for a better implementation. */
for (t = 0; t < 16; t++)
{
x[t] = NOTSWAP (*words);
words++;
}
R( a, b, c, d, e, F1, K1, x[ 0] );
R( e, a, b, c, d, F1, K1, x[ 1] );
R( d, e, a, b, c, F1, K1, x[ 2] );
R( c, d, e, a, b, F1, K1, x[ 3] );
R( b, c, d, e, a, F1, K1, x[ 4] );
R( a, b, c, d, e, F1, K1, x[ 5] );
R( e, a, b, c, d, F1, K1, x[ 6] );
R( d, e, a, b, c, F1, K1, x[ 7] );
R( c, d, e, a, b, F1, K1, x[ 8] );
R( b, c, d, e, a, F1, K1, x[ 9] );
R( a, b, c, d, e, F1, K1, x[10] );
R( e, a, b, c, d, F1, K1, x[11] );
R( d, e, a, b, c, F1, K1, x[12] );
R( c, d, e, a, b, F1, K1, x[13] );
R( b, c, d, e, a, F1, K1, x[14] );
R( a, b, c, d, e, F1, K1, x[15] );
R( e, a, b, c, d, F1, K1, M(16) );
R( d, e, a, b, c, F1, K1, M(17) );
R( c, d, e, a, b, F1, K1, M(18) );
R( b, c, d, e, a, F1, K1, M(19) );
R( a, b, c, d, e, F2, K2, M(20) );
R( e, a, b, c, d, F2, K2, M(21) );
R( d, e, a, b, c, F2, K2, M(22) );
R( c, d, e, a, b, F2, K2, M(23) );
R( b, c, d, e, a, F2, K2, M(24) );
R( a, b, c, d, e, F2, K2, M(25) );
R( e, a, b, c, d, F2, K2, M(26) );
R( d, e, a, b, c, F2, K2, M(27) );
R( c, d, e, a, b, F2, K2, M(28) );
R( b, c, d, e, a, F2, K2, M(29) );
R( a, b, c, d, e, F2, K2, M(30) );
R( e, a, b, c, d, F2, K2, M(31) );
R( d, e, a, b, c, F2, K2, M(32) );
R( c, d, e, a, b, F2, K2, M(33) );
R( b, c, d, e, a, F2, K2, M(34) );
R( a, b, c, d, e, F2, K2, M(35) );
R( e, a, b, c, d, F2, K2, M(36) );
R( d, e, a, b, c, F2, K2, M(37) );
R( c, d, e, a, b, F2, K2, M(38) );
R( b, c, d, e, a, F2, K2, M(39) );
R( a, b, c, d, e, F3, K3, M(40) );
R( e, a, b, c, d, F3, K3, M(41) );
R( d, e, a, b, c, F3, K3, M(42) );
R( c, d, e, a, b, F3, K3, M(43) );
R( b, c, d, e, a, F3, K3, M(44) );
R( a, b, c, d, e, F3, K3, M(45) );
R( e, a, b, c, d, F3, K3, M(46) );
R( d, e, a, b, c, F3, K3, M(47) );
R( c, d, e, a, b, F3, K3, M(48) );
R( b, c, d, e, a, F3, K3, M(49) );
R( a, b, c, d, e, F3, K3, M(50) );
R( e, a, b, c, d, F3, K3, M(51) );
R( d, e, a, b, c, F3, K3, M(52) );
R( c, d, e, a, b, F3, K3, M(53) );
R( b, c, d, e, a, F3, K3, M(54) );
R( a, b, c, d, e, F3, K3, M(55) );
R( e, a, b, c, d, F3, K3, M(56) );
R( d, e, a, b, c, F3, K3, M(57) );
R( c, d, e, a, b, F3, K3, M(58) );
R( b, c, d, e, a, F3, K3, M(59) );
R( a, b, c, d, e, F4, K4, M(60) );
R( e, a, b, c, d, F4, K4, M(61) );
R( d, e, a, b, c, F4, K4, M(62) );
R( c, d, e, a, b, F4, K4, M(63) );
R( b, c, d, e, a, F4, K4, M(64) );
R( a, b, c, d, e, F4, K4, M(65) );
R( e, a, b, c, d, F4, K4, M(66) );
R( d, e, a, b, c, F4, K4, M(67) );
R( c, d, e, a, b, F4, K4, M(68) );
R( b, c, d, e, a, F4, K4, M(69) );
R( a, b, c, d, e, F4, K4, M(70) );
R( e, a, b, c, d, F4, K4, M(71) );
R( d, e, a, b, c, F4, K4, M(72) );
R( c, d, e, a, b, F4, K4, M(73) );
R( b, c, d, e, a, F4, K4, M(74) );
R( a, b, c, d, e, F4, K4, M(75) );
R( e, a, b, c, d, F4, K4, M(76) );
R( d, e, a, b, c, F4, K4, M(77) );
R( c, d, e, a, b, F4, K4, M(78) );
R( b, c, d, e, a, F4, K4, M(79) );
a = ctx->A += a;
b = ctx->B += b;
c = ctx->C += c;
d = ctx->D += d;
e = ctx->E += e;
}
}

75
lib/sha.h Normal file
View File

@@ -0,0 +1,75 @@
/* sha.h - Declaration of functions and datatypes for SHA1 sum computing
library functions.
Copyright (C) 1999, Scott G. Miller
*/
#ifndef _SHA_H
# define _SHA_H 1
# include <stdio.h>
# include "md5.h"
/* Structure to save state of computation between the single steps. */
struct sha_ctx
{
md5_uint32 A;
md5_uint32 B;
md5_uint32 C;
md5_uint32 D;
md5_uint32 E;
md5_uint32 total[2];
md5_uint32 buflen;
char buffer[128];
};
/* Starting with the result of former calls of this function (or the
initialization function update the context for the next LEN bytes
starting at BUFFER.
It is necessary that LEN is a multiple of 64!!! */
extern void sha_process_block __P ((const void *buffer, size_t len,
struct sha_ctx *ctx));
/* Starting with the result of former calls of this function (or the
initialization function update the context for the next LEN bytes
starting at BUFFER.
It is NOT required that LEN is a multiple of 64. */
extern void sha_process_bytes __P((const void *buffer, size_t len,
struct sha_ctx *ctx));
/* Initialize structure containing state of computation. */
extern void sha_init_ctx __P ((struct sha_ctx *ctx));
/* Process the remaining bytes in the buffer and put result from CTX
in first 16 bytes following RESBUF. The result is always in little
endian byte order, so that a byte-wise output yields to the wanted
ASCII representation of the message digest.
IMPORTANT: On some systems it is required that RESBUF is correctly
aligned for a 32 bits value. */
extern void *sha_finish_ctx __P ((struct sha_ctx *ctx, void *resbuf));
/* Put result from CTX in first 16 bytes following RESBUF. The result is
always in little endian byte order, so that a byte-wise output yields
to the wanted ASCII representation of the message digest.
IMPORTANT: On some systems it is required that RESBUF is correctly
aligned for a 32 bits value. */
extern void *sha_read_ctx __P ((const struct sha_ctx *ctx, void *resbuf));
/* Compute MD5 message digest for bytes read from STREAM. The
resulting message digest number will be written into the 16 bytes
beginning at RESBLOCK. */
extern int sha_stream __P ((FILE *stream, void *resblock));
/* Compute MD5 message digest for LEN bytes beginning at BUFFER. The
result is always in little endian byte order, so that a byte-wise
output yields to the wanted ASCII representation of the message
digest. */
extern void *sha_buffer __P ((const char *buffer, size_t len, void *resblock));
#endif

View File

@@ -457,8 +457,7 @@ static CHAR_T const month_name[][10] =
return _strftime_copytm (s, maxsize, format, &tmcopy ut_argument);
}
# undef my_strftime
# define my_strftime(S, Maxsize, Format, Tp) \
_strftime_copytm (S, Maxsize, Format, Tp)
# define my_strftime _strftime_copytm
#endif
@@ -516,6 +515,9 @@ my_strftime (s, maxsize, format, tp ut_argument)
size_t i = 0;
CHAR_T *p = s;
const CHAR_T *f;
#if DO_MULTIBYTE && !defined COMPILE_WIDE
const char *format_end = NULL;
#endif
zone = NULL;
#if HAVE_TM_ZONE
@@ -608,10 +610,15 @@ my_strftime (s, maxsize, format, tp ut_argument)
{
mbstate_t mbstate = mbstate_zero;
size_t len = 0;
size_t fsize;
if (! format_end)
format_end = f + strlen (f) + 1;
fsize = format_end - f;
do
{
size_t bytes = mbrlen (f + len, (size_t) -1, &mbstate);
size_t bytes = mbrlen (f + len, fsize - len, &mbstate);
if (bytes == 0)
break;
@@ -801,8 +808,10 @@ my_strftime (s, maxsize, format, tp ut_argument)
subformat:
{
CHAR_T *old_start = p;
size_t len = my_strftime (NULL, (size_t) -1, subfmt, tp);
add (len, my_strftime (p, maxsize - i, subfmt, tp));
size_t len = my_strftime (NULL, (size_t) -1, subfmt,
tp ut_argument);
add (len, my_strftime (p, maxsize - i, subfmt,
tp ut_argument));
if (to_uppcase)
while (old_start < p)

View File

@@ -28,11 +28,15 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
# include <config.h>
#endif
#include <string.h>
#if defined _LIBC || defined HAVE_STRING_H
# include <string.h>
#endif
#include <sys/types.h>
typedef unsigned chartype;
#undef strstr
char *
strstr (const char *phaystack, const char *pneedle)
{
@@ -105,7 +109,7 @@ jin: a = *++haystack;
}
while (*rhaystack == a);
needle = rneedle; /* took the register-poor aproach */
needle = rneedle; /* took the register-poor approach */
if (a == '\0')
break;

View File

@@ -26,7 +26,7 @@
#include <ctype.h>
/* states: S_N: normal, S_I: comparing integral part, S_F: comparing
Fractional parts, S_Z: idem but with leading Zeroes only */
fractional parts, S_Z: idem but with leading Zeroes only */
#define S_N 0x0
#define S_I 0x4
#define S_F 0x8
@@ -36,6 +36,7 @@
#define CMP 2
#define LEN 3
/* ISDIGIT differs from isdigit, as follows:
- Its arg may be any int or unsigned int; it need not be an unsigned char.
- It's guaranteed to evaluate its argument exactly once.
@@ -46,13 +47,20 @@
host does not conform to Posix. */
#define ISDIGIT(c) ((unsigned) (c) - '0' <= 9)
#undef __strverscmp
#undef strverscmp
#ifndef weak_alias
# define __strverscmp strverscmp
#endif
/* Compare S1 and S2 as strings holding indices/version numbers,
returning less than, equal to or greater than zero if S1 is less than,
equal to or greater than S2 (for more info, see the texinfo doc).
*/
int
strverscmp (const char *s1, const char *s2)
__strverscmp (const char *s1, const char *s2)
{
const unsigned char *p1 = (const unsigned char *) s1;
const unsigned char *p2 = (const unsigned char *) s2;
@@ -120,3 +128,6 @@ strverscmp (const char *s1, const char *s2)
return state;
}
}
#ifdef weak_alias
weak_alias (__strverscmp, strverscmp)
#endif

View File

@@ -261,7 +261,6 @@ parse_user_spec (const char *spec_arg, uid_t *uid, gid_t *gid,
if (xstrtoul (u, NULL, 0, &tmp_long, NULL) != LONGINT_OK
|| tmp_long > MAXUID)
return _(E_invalid_user);
printf ("MAXUID: %u\n", (uid_t) MAXUID);
*uid = tmp_long;
}
}

View File

@@ -1,5 +1,5 @@
/* xalloc.h -- malloc with out-of-memory checking
Copyright (C) 1990-1998, 1999 Free Software Foundation, Inc.
Copyright (C) 1990-1998, 1999, 2000 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by

View File

@@ -52,7 +52,7 @@ void free ();
char *xmalloc ();
/* lstat works different on Linux and Solaris systems. POSIX (see
/* lstat works differently on Linux and Solaris systems. POSIX (see
`pathname resolution' in the glossary) requires that programs like `ls'
take into consideration the fact that FILE has a trailing slash when
FILE is a symbolic link. On Linux systems, the lstat function already

View File

@@ -1,3 +1,33 @@
2000-11-03 Bruno Haible <haible@clisp.cons.org>
* jm-macros.m4 (jm_MACROS): Add test for wcrtomb.
2000-11-04 Jim Meyering <meyering@lucent.com>
* regex.m4: Use the `m4_' prefix on `syscmd' and `m4_sysval'.
2000-10-29 Jim Meyering <meyering@lucent.com>
* fsusage.m4: s/AC_SHELL_IFELSE/AS_IFELSE/ to match autoconf renaming.
* ls-mntd-fs.m4: Likewise
2000-10-28 Jim Meyering <meyering@lucent.com>
* prereq.m4 (jm_PREREQ): Add jm_PREREQ_MEMCHR.
(jm_PREREQ_MEMCHR): New function.
2000-10-21 Jim Meyering <meyering@lucent.com>
* check-decl.m4 (jm_CHECK_DECLS): Also check for memrchr.
* prereq.m4 (jm_PREREQ_DIRNAME): New macro.
* jm-macros.m4 (AC_REPLACE_FUNCS): Add memrchr.
2000-09-18 Jim Meyering <meyering@lucent.com>
* getloadavg.m4 (AC_FUNC_GETLOADAVG): Restore the initial value of LIBS.
Otherwise, everyone ends up linking with -lelf for some configurations.
Reported by Mike Stone.
2000-08-26 Jim Meyering <meyering@lucent.com>
* jm-macros.m4: Use jm_FUNC_FPENDING.
@@ -32,8 +62,8 @@
2000-07-16 Bruno Haible <haible@clisp.cons.org>
* mbswidth.m4: New file.
* prereq.m4 (jm_PREREQ): Call jm_PREREQ_MBSWIDTH.
* mbswidth.m4: New file.
* prereq.m4 (jm_PREREQ): Call jm_PREREQ_MBSWIDTH.
2000-07-14 Jim Meyering <meyering@lucent.com>

View File

@@ -1,6 +1,7 @@
# Makefile.in generated automatically by automake 1.4a from Makefile.am
# Copyright (C) 1994, 1995-9, 2000 Free Software Foundation, Inc.
# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000
# Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.

View File

@@ -1,4 +1,4 @@
#serial 15
#serial 16
dnl This is just a wrapper function to encapsulate this kludge.
dnl Putting it in a separate file like this helps share it between
@@ -55,6 +55,7 @@ AC_DEFUN(jm_CHECK_DECLS,
lseek,
malloc,
memchr,
memrchr,
nanosleep,
realloc,
stpcpy,

View File

@@ -1,4 +1,4 @@
#serial 3
#serial 4
# From fileutils/configure.in
@@ -187,6 +187,6 @@ AC_TRY_CPP([#include <sys/filsys.h>],
ac_fsusage_space=yes)
fi
AC_SHELL_IFELSE([test $ac_fsusage_space = yes], [$1], [$2])dnl
AS_IFELSE([test $ac_fsusage_space = yes], [$1], [$2])dnl
])

View File

@@ -99,5 +99,7 @@ if test "x$ac_save_LIBS" = x; then
else
GETLOADAVG_LIBS=`echo "$LIBS" | sed "s!$ac_save_LIBS!!"`
fi
LIBS=$ac_save_LIBS
AC_SUBST(GETLOADAVG_LIBS)dnl
])# AC_FUNC_GETLOADAVG

View File

@@ -1,4 +1,4 @@
#serial 25
#serial 27
dnl Misc type-related macros for fileutils, sh-utils, textutils.
@@ -116,7 +116,7 @@ AC_DEFUN(jm_MACROS,
dnl used by e.g. intl/*domain.c and lib/canon-host.c
AC_REPLACE_FUNCS(strdup)
AC_REPLACE_FUNCS(memchr memmove memcpy memset)
AC_REPLACE_FUNCS(memchr memcpy memmove memrchr memset)
AC_CHECK_FUNCS(getpagesize)
# By default, argmatch should fail calling usage (1).
@@ -176,6 +176,7 @@ AC_DEFUN(jm_MACROS,
strerror \
strrchr \
sysinfo \
wcrtomb \
tzset \
)

View File

@@ -1,4 +1,4 @@
#serial 5
#serial 6
dnl From Jim Meyering.
dnl
@@ -239,6 +239,6 @@ if test -z "$ac_list_mounted_fs"; then
# Can't build mountlist.c or anything that needs its functions
fi
AC_SHELL_IFELSE([test $ac_list_mounted_fs = found], [$1], [$2])dnl
AS_IFELSE([test $ac_list_mounted_fs = found], [$1], [$2])dnl
])

View File

@@ -1,4 +1,4 @@
#serial 11
#serial 13
dnl These are the prerequisite macros for files in the lib/
dnl directories of the fileutils, sh-utils, and textutils packages.
@@ -7,10 +7,12 @@ AC_DEFUN(jm_PREREQ,
[
jm_PREREQ_ADDEXT
jm_PREREQ_CANON_HOST
jm_PREREQ_DIRNAME
jm_PREREQ_ERROR
jm_PREREQ_GETPAGESIZE
jm_PREREQ_HUMAN
jm_PREREQ_MBSWIDTH
jm_PREREQ_MEMCHR
jm_PREREQ_QUOTEARG
jm_PREREQ_READUTMP
jm_PREREQ_REGEX
@@ -39,6 +41,18 @@ AC_DEFUN(jm_PREREQ_CANON_HOST,
netinet/in.h arpa/inet.h)
])
AC_DEFUN(jm_PREREQ_DIRNAME,
[
AC_HEADER_STDC
AC_CHECK_HEADERS(string.h)
])
AC_DEFUN(jm_PREREQ_GETPAGESIZE,
[
AC_CHECK_FUNCS(getpagesize)
AC_CHECK_HEADERS(OS.h unistd.h)
])
# If you use human.c, you need the following files:
# uintmax_t.m4 inttypes_h.m4 ulonglong.m4
AC_DEFUN(jm_PREREQ_HUMAN,
@@ -49,10 +63,9 @@ AC_DEFUN(jm_PREREQ_HUMAN,
AC_REQUIRE([jm_AC_TYPE_UINTMAX_T])
])
AC_DEFUN(jm_PREREQ_GETPAGESIZE,
AC_DEFUN(jm_PREREQ_MEMCHR,
[
AC_CHECK_FUNCS(getpagesize)
AC_CHECK_HEADERS(OS.h unistd.h)
AC_CHECK_HEADERS(limits.h stdlib.h bp-sym.h)
])
AC_DEFUN(jm_PREREQ_QUOTEARG,

View File

@@ -51,10 +51,9 @@ AC_DEFUN(jm_INCLUDED_REGEX,
fi
test -n "$1" || AC_MSG_ERROR([missing argument])
syscmd([test -f $1])
ifelse(sysval, 0,
m4_syscmd([test -f $1])
ifelse(m4_sysval, 0,
[
AC_ARG_WITH(included-regex,
[ --without-included-regex don't compile regex; this is the default on
systems with version 2 of the GNU C library

View File

@@ -27,7 +27,7 @@ use Text::Tabs qw(expand);
use POSIX qw(strftime setlocale LC_TIME);
my $this_program = 'help2man';
my $this_version = '1.022';
my $this_version = '1.23';
my $version_info = <<EOT;
GNU $this_program $this_version
@@ -269,9 +269,11 @@ s/^\n+//;
s/\n*$/\n/;
s/\n\n+/\n\n/g;
# Temporarily exchange leading dots and backslashes for tokens.
# Temporarily exchange leading dots, apostrophes and backslashes for
# tokens.
s/^\./\x80/mg;
s/\\/\x81/g;
s/^'/\x81/mg;
s/\\/\x82/g;
# Start a new paragraph (if required) for these.
s/([^\n])\n(Report +bugs|Email +bug +reports +to|Written +by)/$1\n\n$2/g;
@@ -366,7 +368,7 @@ while (length)
{
$matched .= $& if %append;
$indent = length ($4 || "$1$3");
$content = ".TP\n\x82$2\n\x82$5\n";
$content = ".TP\n\x83$2\n\x83$5\n";
unless ($4)
{
# Indent may be different on second line.
@@ -378,7 +380,7 @@ while (length)
elsif (s/^ {1,10}([+-]\S.*)\n//)
{
$matched .= $& if %append;
$content = ".HP\n\x82$1\n";
$content = ".HP\n\x83$1\n";
$indent = 80; # not continued
}
@@ -387,7 +389,7 @@ while (length)
{
$matched .= $& if %append;
$indent = length $1;
$content = ".TP\n\x82$2\n\x82$3\n";
$content = ".TP\n\x83$2\n\x83$3\n";
}
# Indented paragraph.
@@ -395,7 +397,7 @@ while (length)
{
$matched .= $& if %append;
$indent = length $1;
$content = ".IP\n\x82$2\n";
$content = ".IP\n\x83$2\n";
}
# Left justified paragraph.
@@ -411,7 +413,7 @@ while (length)
while (s/^ {$indent}(\S.*)\n//)
{
$matched .= $& if %append;
$content .= "\x82$1\n"
$content .= "\x83$1\n"
}
# Move to next paragraph.
@@ -419,9 +421,10 @@ while (length)
for ($content)
{
# Leading dot protection.
s/\x82\./\x80/g;
s/\x82//g;
# Leading dot and apostrophe protection.
s/\x83\./\x80/g;
s/\x83'/\x81/g;
s/\x83//g;
# Convert options.
s/(^| )(-[][\w=-]+)/$1 . convert_option $2/mge;
@@ -485,9 +488,10 @@ for (@pre, (grep ! /^($filter)$/o, @include), @post)
for ($include{$_})
{
# Replace leading dot an backslash tokens.
# Replace leading dot, apostrophe and backslash tokens.
s/\x80/\\&./g;
s/\x81/\\e/g;
s/\x81/\\&'/g;
s/\x82/\\e/g;
print;
}
}

4
man/sha1sum.x Normal file
View File

@@ -0,0 +1,4 @@
[NAME]
shasum \- compute and check SHA1 message digest
[DESCRIPTION]
.\" Add any additional description here

View File

@@ -1,5 +1,548 @@
2000-11-27 Jim Meyering <meyering@lucent.com>
* Version 4.0.33.
* tests/touch/no-rights: Use touch with `-d tomorrow' to avoid
race condition.
* tests/Fetish.pm (_compare_files): New function.
(_process_file_spec): Likewise.
(_at_replace): Likewise.
(run_tests): Support new keywords, AUX and CMP and associated
syntax and semantics.
* config.sub: Likewise.
* config.guess: Likewise.
2000-11-26 Jim Meyering <meyering@lucent.com>
* src/dd.c (skip): Perform the `records < blocksize' test
at the top of the loop, not at the bottom.
2000-11-26 Paul Eggert <eggert@twinsun.com>
* src/dd.c (skip): New arg COUNT_BYTES. Read with BLOCKSIZE
bytes, but consider RECORDS to be a byte count if COUNT_BYTES
is nonzero.
2000-11-25 Paul Eggert <eggert@twinsun.com>
* doc/fileutils.texi: Document seek=nB and skip=nB.
* src/dd.c (skip_bytes, seek_bytes): Now booleans, not counts.
(seek_records): Renamed from seek_record, for consistency with
skip_records and max_records. All uses changed.
(usage, scanargs): Remove bseek=n and bskip=n; instead, use seek=nB
and skip=nB.
(enum Unit, Unit): Remove.
(skip, dd_copy, main): Undo most recent change.
(dd_copy, main): Pass blocksize of 1 as appropriate when
skip_bytes or seek_bytes is nonzero.
(main): Rework ftruncate failure diagnostic to always use byte count.
2000-11-25 Jim Meyering <meyering@lucent.com>
* src/dd.c: Add new options, bskip and bseek.
Based on a patch from Chris Sylvain.
* tests/dd/skip-seek: New tests.
* tests/dd/Makefile.am (TESTS): Add skip-seek.
2000-11-24 Paul Eggert <eggert@green.twinsun.com>
* src/dd.c (S_TYPEISSHM): New macro.
(main): Report failed fstat.
Complain only when ftruncate fails on a regular file,
a directory, or a shared memory object.
2000-11-24 Jim Meyering <meyering@lucent.com>
* src/dd.c: Declare a pointer parameters to be `const' as appropriate.
* src/dd.c (main): Use ftruncate only on regular files.
Based on a patch from Michael Stone.
Reported by andras@kolumbus.fi at http://bugs.debian.org/77174.
2000-11-23 Jim Meyering <meyering@lucent.com>
* src/df.c (show_point): Before accepting an entry as a match, make
sure that the mount directory exists and has the required device number.
Before, e.g., `df /floppy' would mistakenly report on the root
partition if /floppy were not listed in /etc/mtab but / was.
Patch from Eirik Fuller (http://bugs.debian.org/76923).
* src/chmod.c (mode_changed): New function.
(change_file_mode): Use it to determine accurately when -c should
make chmod announce there's been a change.
Based on a patch from Michael Stone.
Reported by Kai Henningsen as Debian bug #77349.
* tests/chmod/c-option: New test for the above fix.
* tests/chmod/Makefile.am (TESTS): Add c-option
* tests/sticky-check: New file. Factored out of tests/mkdir/parents.
* tests/Makefile.am (EXTRA_DIST): Add sticky-check.
* tests/mkdir/parents: Source sticky-check instead of open-coding it.
2000-11-19 Jim Meyering <meyering@lucent.com>
* tests/chmod/equal-x: Update to use its own directory, and better trap.
2000-11-18 Paul Eggert <eggert@twinsun.com>
* src/ls.c (BLOCK_SIZE_OPTION, COLOR_OPTION, FORMAT_OPTION,
INDICATOR_STYLE_OPTION, QUOTING_STYLE_OPTION,
SHOW_CONTROL_CHARS_OPTION, SORT_OPTION, TIME_OPTION): New enum
values, to ensure that option values can't collide with chars.
(long_options, decode_switches): Use them.
2000-11-18 Paul Eggert <eggert@twinsun.com>
* src/sys2.h (GETOPT_HELP_CHAR, GETOPT_VERSION_CHAR): Now enum
constants rather than macros. Use values that cannot conflict
with C characters or with -1, CHAR_MAX + 1, etc.
2000-11-18 Jim Meyering <meyering@lucent.com>
* src/du.c (count_entry): Don't omit the size of a directory entry
merely because we couldn't `chdir' into it. That would give subtly
different results in some cases. Reported by Mattias Wadenstein
via Michael Stone.
* src/ls.c: Revert change of 2000-11-11. It inadvertently change
the output format of `ls -l --full-time'.
* src/mkdir.c (main): When failing to create a directory, give only
one diagnostic, not two. Reported by Volker Borchert.
* src/mkdir.c (main): With --parents, remove any trailing slashes
from the argument to the final mkdir call. Required for NetBSD.
Reported by Volker Borchert.
* tests/mkdir/t-slash: New test for this.
* tests/mkdir/Makefile.am (TESTS): Add t-slash.
* tests/mv/mv-special-1: Create and `cd' into temporary directory
before anything else. Reported by Volker Borchert.
* configure, config.h.in, Makefile.in, etc.: Regenerate using the
very latest version (in CVS) of autoconf.
2000-11-17 Jim Meyering <meyering@lucent.com>
* Makefile.am (.NOTPARALLEL): Remove target.
* GNUmakefile (.NOTPARALLEL): ... put it here instead, since this
file is common to these packages: fileutils, sh-utils, textutils.
* Makefile.am (.NOTPARALLEL): New target. Prevent unwanted parallelism.
Suggestion from Ulrich Drepper.
* po/Makefile.in.in (Makefile): Likewise.
* Makefile.maint (sha1): Define.
(announcement): Include SHA1 digest of .tar.gz file.
2000-11-14 Jim Meyering <meyering@lucent.com>
* tests/mkdir/perm: Add an `echo' so that the input to the sed command
is NL-terminated. Otherwise, Solaris' /bin/sed generates no output.
Reported by Vin Shelton.
2000-11-13 Paul Eggert <eggert@twinsun.com>
* src/sys2.h (ST_TIME_CMP_NS): Fix typo: ST_MTIM_NSEC should
be tested with #ifdef, not with #if.
2000-11-12 Jim Meyering <meyering@lucent.com>
* src/ls.c (print_long_format): Remove obsolete comment.
From Paul Eggert.
* doc/texinfo.tex: Update from master repository.
2000-11-11 Paul Eggert <eggert@sic.twinsun.com>
* src/ls.c (<langinfo.h>): Include if HAVE_LANGINFO_H.
(DATE_FMT_LANGINFO): New macro, taken from sh-utils/src/date.c.
(print_long_format): Use it to determine "date" format.
Do not wrap "%b %e %Y" and "%b %e %H:%M" in _(), as it results in
incorrect behavior when LC_ALL is unset, LC_TIME is "C", and
LC_MESSAGES or LANG is set to something disagreeing with the POSIX
locale.
2000-11-11 Jim Meyering <meyering@lucent.com>
* Version 4.0.32.
* Makefile.maint (GZIP_ENV): Define to --no-name, so the timestamp
is not included in the .tar.gz file.
* tests/mkdir/perm (tests): Use `empty' (instead of just blanks) to
indicate no `-m' option. Using just blanks wasn't portable to
Solaris2.5.1's /bin/sh.
* tests/mkdir/perm: Don't put a newline in IFS; that's not portable to
NetBSD's /bin/sh. Instead, filter newlines and leading/trailing blanks
out of `tests' before the `set -'.
* Makefile.maint (announcement): Limit depth of ChangeLog `find' to 2.
* src/ls.c (print_long_format): Wrap the `--full-time' date format
string in _(...), so it too may be internationalized.
Suggestion from Jungshik Shin.
2000-11-10 Jim Meyering <meyering@lucent.com>
* src/touch.c (main): Interpret a lone numeric argument of 8 or 10
digits as a file name, rather than as a date/time in the obsolescent
`MMDDhhmm[YY]' format. Reported by Wenjun Zheng.
* tests/touch/obsolescent: New test for this.
* tests/touch/Makefile.am (TESTS): Add obsolescent.
2000-11-06 Jim Meyering <meyering@lucent.com>
* tests/cp/cp-parents: Move mkdir tests into ../mkdir.
* doc/fileutils.texi: Use Free Documentation Licence.
Change GNU to @sc{gnu} in many places.
* doc/texinfo.tex: Update from master repository.
* config.sub: Likewise.
* config.guess: Likewise.
* man/help2man: Update from latest version: 1.23.
* src/mkdir.c: Do not set the permissions of the final directory
component if it was not just created.
Based on a patch from Volker Borchert.
* tests/rwx-to-mode: New file.
* tests/Makefile.am (EXTRA_DIST): Add rwx-to-mode.
* tests/mkdir/parents: New test for the above mkdir.c fix.
* tests/mkdir/Makefile.am (TESTS): Add parents.
(TESTS_ENVIRONMENT): Define srcdir=$(srcdir).
2000-11-02 Won-kyu Park <wkpark@chem.skku.ac.kr>
* src/df.c (print_header): Mark strings for translation.
2000-11-05 Jim Meyering <meyering@lucent.com>
* Version 4.0.31.
* configure, config.h.in, Makefile.in, etc.: Regenerate using the
very latest version (in CVS) of autoconf.
* src/mkdir.c (main): Use make_dir instead of using mkdir directly.
Diagnose as failure when mkdir tries to create (without the
--parent (-p) option) a directory that already exists.
* tests/cp/cp-parents: Add a test for the above fix.
* tests/mv/mv-special-1: Clean up this test.
2000-11-01 Jim Meyering <meyering@lucent.com>
* Version 4.0.30.
* src/chmod.c (main): Better diagnostics.
2000-10-31 Jim Meyering <meyering@lucent.com>
* tests/lang-default: Add all the internationalization-related
variable names autoconf uses. Set and export them in a loop.
`mkdir -p' would create parent directories with permissions
that did not account for the umask. [introduced with the
2000-09-30 change that became part of fileutils-4.0.28]
* src/mkdir.c: Include dirname.h.
Compute the parent directory `mode' unconditionally, effectively
as `$(umask -S),u+wx'.
Use make_path to create only the parent directories, thus using
the same code, both with and without -p, to create the final
component in each file name. Reported by Bob Proulx.
Add tests for the above fix.
* tests/cp/cp-parents: Add some permission tests.
* tests/mkdir/perm: Fix the test so it actually does something.
Run each test also with mkdir's `-p' option and check permissions
on the parent directories.
2000-10-23 Paul Eggert <eggert@twinsun.com>
* doc/getdate.texi: Use @sc where appropriate. Document the
ranges of supported times more precisely. Correct menu
spacing. Document old Latin 12m/12pm tradition. Remove list
of alphabetic time zone names, as it wasn't correct and people
shouldn't be relying on it anyway. Relative items also
account for non-DST adjustments. Fix some misspellings.
2000-10-30 Jim Meyering <meyering@lucent.com>
* configure, config.h.in, Makefile.in, etc.: Regenerate using the
very latest version (in CVS) of autoconf.
2000-10-29 Jim Meyering <meyering@lucent.com>
* Version 4.0.29.
* src/cp.c (do_copy): When constructing dst_path for use with the
--parents option, first remove any trailing slashes from the command
line argument. Otherwise, tests/cp/cp-parent would fail on NetBSD.
* tests/cp/cp-parents: Add a test.
* src/ls.c (DT_INIT): Define.
[enum filetype]: Remove the #ifdef, and use DT_INIT on the
initializers instead. `unknown' was undefined for some systems.
Reported by John David Anglin.
* tests/lang-default (LC_COLLATE): Set it to the empty string and
export it. Otherwise, tests/cp/cp-mv-backup would fail e.g., when
LC_COLLATE was set to en. Reported by Vin Shelton.
2000-10-28 Jim Meyering <meyering@lucent.com>
* src/ls.c (main): In call to gobble_file with `"."', use `directory'
as the type, not `unknown'.
[enum filetype] (arg_directory): Rather than `100', use
a number that should never conflict with another DT_* value.
From Ulrich Drepper.
* Version 4.0.28.
Make `ls' a lot more efficient on systems (e.g., linux-2.4.*)
that store file type information in directory entries.
* src/ls.c [enum filetype] (unknown):
Add members (as yet unused):
(HAVE_STRUCT_DIRENT_D_TYPE): Define.
(format_needs_type): New global.
(main): Set it.
(print_dir): Set `type' from directory entry, if possible.
(gobble_file): Add a parameter, TYPE.
Stat the file only if its type is unknown and we need the type.
Patch from Ulrich Drepper.
Shred can now determine the size of a block devices (e.g. /dev/fd0)
by writing until a write operation fails.
* src/shred.c: Include assert.h.
(fillrand): Add a parameter, size_max.
Adjust caller.
Add an assertion.
(dopass): Break out of the `for (;;)' loop if size < offset.
That can happen now that dopass is called with SIZE == -1.
(do_wipefd): Accept a length of zero only for a regular file.
If lseek fails or returns 0 for a non-regular file, let dopass
determine the length.
Inspired by a patch from Alan Iwi.
* tests/Makefile.am (EXTRA_DIST): Add lang-default.
* tests/rm/hash: Factor out the expensive-test-checking code, ...
* tests/expensive: ... into this new file.
* tests/cp/perm: Disable this test by default; it's expensive.
Mark this as an expensive test.
* tests/Makefile.am (EXTRA_DIST): Add expensive.
* doc/fileutils.texi (shred invocation): Give two examples.
2000-10-26 Jim Meyering <meyering@lucent.com>
* doc/getdate.texi (Authors of getdate): Add Paul Eggert.
2000-10-23 Jim Meyering <meyering@lucent.com>
* Makefile.am (EXTRA_DIST): Add .prev-version.
2000-10-22 Jim Meyering <meyering@lucent.com>
* src/cp.c (make_path_private): Add a FIXME comment.
* tests/lang-default: New file. Set LANG, LC_ALL, and LANGUAGE to ''
(rather than to `C') and export them into the environment.
Suggestion from Bruno Haible.
* tests/cp/backup-is-src: Source lang-default rather than open-coding
the setting/exporting of LANG, LC_ALL, and LANGUAGE.
* tests/cp/cp-mv-backup: Likewise.
* tests/cp/same-file: Likewise.
* tests/cp/slink-2-slink: Likewise.
* tests/cp/symlink-slash: Likewise.
* tests/ln/sf-1: Likewise.
* tests/ls/symlink-slash: Likewise.
* tests/ls/time-1: Likewise.
* tests/mv/backup-is-src: Likewise.
* tests/mv/diag: Likewise.
* tests/mv/force: Likewise.
* tests/mv/hard-link-1: Likewise.
* tests/mv/i-2: Likewise.
* tests/mv/into-self: Likewise.
* tests/mv/into-self-2: Likewise.
* tests/mv/into-self-3: Likewise.
* tests/mv/mv-special-1: Likewise.
* tests/mv/part-symlink: Likewise.
* tests/mv/partition-perm: Likewise.
* tests/rm/r-1: Likewise.
* tests/rm/r-2: Likewise.
2000-10-21 Jim Meyering <meyering@lucent.com>
* tests/cp/cp-parents: New test.
* tests/cp/Makefile.am (TESTS): Add cp-parents;
2000-10-19 Jim Meyering <meyering@lucent.com>
* doc/texinfo.tex: Update from master repository.
* config.sub: Likewise.
* config.guess: Likewise.
* depcomp: Likewise.
2000-10-18 Jim Meyering <meyering@lucent.com>
* tests/mv/part-symlink: Make sure the programs use C-locale formats
and translations. Bruno Haible reported that this test would fail
when using other locales, because ls printed a translation of `total'.
2000-10-16 Jim Meyering <meyering@lucent.com>
* src/ls.c (print_long_format): Wrap date format strings in _(...)
so they may be internationalized. Suggestion from Christian Rose.
2000-10-13 Jim Meyering <meyering@lucent.com>
* src/mv.c (rm_option_init): Remove FIXME-maybe comment.
2000-09-30 Jim Meyering <meyering@lucent.com>
* tests/du/two-args: Update to use newer template.
* src/install.c: Remove big, option-describing comment block.
(main): Rename local `symbolic_mode' to `specified_mode'.
* src/mkdir.c (main): Don't set the umask to 0 and hand-apply
the previously-set umask unconditionally. Do that only when a
MODE has been specified. Otherwise, call mkdir with the full
creation mask (0777 or 0666) and let the kernel apply the umask.
The difference shows up only on file systems with ACL support
when the containing directory has a default ACL.
Patch by Andreas Gruenbacher.
(main): Rename local `symbolic_mode' to `specified_mode'.
* src/mknod.c (main): Likewise (but `call mknod', not mkdir).
Also, when MODE is specified, call chmod to ensure that the
permission bits are set as specified even when the containing
directory has a default ACL.
Patch by Andreas Gruenbacher.
* src/mkfifo.c (main): Likewise (but `call mkfifo', not mkdir).
Patch by Andreas Gruenbacher.
* tests/mkdir/perm: New test.
* tests/mkdir/Makefile.am (TESTS): Add perm.
2000-08-17 Andreas Gruenbacher <ag@bestbits.at>
* src/chmod.c (change_file_mode): Perform the chmod even if the
file mode permission bits are the same as those that should be set.
Omitting the chmod call would be alright with minimal 1003.1e DS17
ACLs, but eventually there may be other permissions in addition to
rwx. E.g., add and delete for directories, and something analogous
to NT's take ownership permission.
2000-09-25 Jim Meyering <meyering@lucent.com>
* tests/cp/same-file: Don't use `diff -u'. It's not portable.
Reported by Christian Krackowizer.
* tests/cp/same-file: Run `diff -c' only if cmp finds a difference.
* tests/mv/part-symlink: Likewise. And clean up.
`shred --exact file1 file2' wouldn't touch `file1'
* src/shred.c (long_opts): --exact doesn't take an argument.
Reported by Alan Iwi.
* tests/shred/exact: New test for this.
* tests/shred/Makefile.am (TESTS): Add exact.
* Makefile.maint (PREV_VERSION): Get the value from a file, rather
than trying to derive it from the current version number.
This is much more robust.
(alpha): Record just-released version number in `.prev-version',
and commit (post-tag).
* Version 4.0.27.
2000-09-24 Paul Eggert <eggert@twinsun.com>
* doc/fileutils.texi: Update to more closely match changes in 4.0z.
* src/cp.c (usage): Match revised documentation better.
2000-09-24 Jim Meyering <meyering@lucent.com>
* src/cp.c (main): Tweak a relatively new diagnostic.
2000-09-23 Jim Meyering <meyering@lucent.com>
* tests/ls/time-1: Output more information when a test fails.
2000-09-22 Jim Meyering <meyering@lucent.com>
* src/install.c (cp_option_init): Once again make it so install always
unlinks an existing destination before trying to open it for writing.
Otherwise, installing onto a running shared library would make the
running program malfunction.
Reported by Dan Pascu via Michael Stone.
* src/mv.c (do_move): Moving a directory specified with a trailing
slash from one partition to another, and giving it a different
name at the destination would cause mv to get a failed assertion.
Reported by Michael Stone.
(strip_trailing_slashes_2): Move function definition to precede
new first use.
* tests/mv/part-rename: New test for the above fix.
* tests/mv/Makefile.am (TESTS): Add part-rename.
* src/copy.c (copy_internal): Don't try to unlink directories when
using --remove-dest with -R.
* tests/cp/dir-rm-dest: New test for the above fix.
* tests/cp/Makefile.am (TESTS): Add dir-rm-dest.
2000-09-19 Jim Meyering <meyering@lucent.com>
* doc/fileutils.texi (cp invocation): Describe how --force works.
Update description of -P (soon to change meaning to conform w/POSIX).
Describe --remove-destination.
* src/cp.c (main): When used with --force, each of the --link and
--symbolic-link options now implies --remove-destination.
Reported by Miles Bader via Mike Stone.
* tests/cp/link: New file. Test for the above fix.
* tests/cp/same-file: Adjust for this change in behavior.
2000-09-15 Volker Borchert <bt@teknon.de>
* tests/Makefile.am (check-root, root-hint): New targets.
(check-recursive): Depend on root-hint.
* Makefile.am (check-root): New target.
2000-09-16 Jim Meyering <meyering@lucent.com>
* doc/perm.texi (Changing Special Permissions): Remove this statement:
``a' in the USERS part of a symbolic mode does not cause the special
permissions to be affected'... It doesn't reflect what the code does
and isn't required by POSIX. Reported by aldomel@ix.netcom.com via
Mike Stone.
2000-09-15 Jim Meyering <meyering@lucent.com>
* config.sub: Update from master repository.
2000-09-10 Jim Meyering <meyering@lucent.com>
* tests/cp/cp-mv-backup (LC_ALL): Set to `C' and export to ensure
that `ls' sorts the same way for everyone. Reported by Vin Shelton.
* Makefile.maint (b_host): Use freefriends.org, not tug.org.
2000-09-09 Jim Meyering <meyering@lucent.com>
* Makefile.maint (announcement): Use a stricter regexp for the
previous version.
* Version 4.0z.
* tests/cp/special-bits: New file.
@@ -83,6 +626,8 @@
do this. Now, you must use `cp --remove-destination' to get this
behavior. Now, `cp -f' and `mv -f' work as required by POSIX.
[unlink_dest_after_failed_open]: Add member.
Paul Eggert reported that `cp -f' removes an existing destination
file unconditionally, and that is contrary to POSIX.
* src/copy.c (same_file_ok): New function, extracted from copy_internal,
and rewritten.
@@ -979,7 +1524,7 @@
2000-02-02 Jim Meyering <meyering@lucent.com>
* tests/touch/Makefile.am (TESTS): Add fifo.
* tests/touch/fifo (fail): New file.
* tests/touch/fifo: New file.
2000-02-01 Jim Meyering <meyering@lucent.com>

View File

@@ -1,4 +1,43 @@
Changes in release 4.01:
[4.0.33]
* dd now accepts skip=nB and seek=nB, to advance past some number of bytes, n,
that is smaller than the block size.
* dd (without conv=notrunc) now uses ftruncate only on regular files
* chmod --changes (-c) once again issues diagnostics only for the files
with changed permissions
* mkdir now gives one diagnostic (rather than two) for certain failures
* mkdir portability fix for NetBSD
[4.0.32]
* touch now interprets a lone numeric argument of 8 or 10 digits as a file name,
rather than as a date/time in the obsolescent `MMDDhhmm[YY]' format.
* mkdir no longer sets the permissions of the final directory component
if it already exists (this bug, too, was introduced recently)
* ls's --full-time format string is now locale dependent
[4.0.31]
* mkdir: fix a bug introduced in 4.0.30 whereby `mkdir existing-dir' would
succeed. Now it fails, as it should (and used to).
[4.0.30]
* mkdir: fix a bug introduced in 4.0.28 whereby parent directories created
via `mkdir -p' would have permissions that did not account for the umask
[4.0.29]
* ls.c wouldn't compile on some systems: fix it
* `cp -R --parents dir1/ dir2' failed on NetBSD, due to a portability problem
[4.0.28]
* ls is much more efficient on systems (e.g., linux-2.4.*) that store file
type information in directory entries.
* shred now automatically determines the size of each block device argument
* ls's date/time format strings are now local dependent
* mkdir, mknod, mkfifo, and chmod work better in conjunction with ACLs
* `cp --parents dir1/ dir2' no longer gets a failed assertion
* shred now determines the size of block devices like /dev/fd0
* `shred --exact file1 file2' now erases `file1', too
[4.0.27]
* install once again unlinks an existing destination before trying to open it
* mv no longer gets a failed assertion when moving a directory (specified with
a trailing slash) from one partition to another, and giving it a different
name at the destination.
* `cp --link -f src existing-dest' no longer fails (bug introduced in 4.0z)
* cp's new --remove-destination option now works with -R
[4.0z]
* `cp -p' once again preserves `special' permission bits (this bug was
introduced in 4.0y)

View File

@@ -1,3 +1,103 @@
2000-11-18 Jim Meyering <meyering@lucent.com>
* Version 2.0.12.
* configure, config.h.in, Makefile.in, etc.: Regenerate using the
very latest version (in CVS) of autoconf.
2000-11-17 Jim Meyering <meyering@lucent.com>
* GNUmakefile (.NOTPARALLEL): New target. Prevent unwanted parallelism.
Suggestion from Ulrich Drepper.
* src/pinky.c: Explicitly include sys/types.h before including system.h.
* src/uptime.c: Likewise.
* src/users.c: Likewise.
* src/who.c: Likewise.
2000-11-13 Paul Eggert <eggert@twinsun.com>
* src/sys2.h (ST_TIME_CMP_NS): Fix typo: ST_MTIM_NSEC should
be tested with #ifdef, not with #if.
2000-11-12 Jim Meyering <meyering@lucent.com>
* src/date.c (show_date): Add a comment explaining why the
format string must not be translatable via _(). From Paul Eggert.
2000-10-31 Jim Meyering <meyering@lucent.com>
* doc/sh-utils.texi: Clean up indentation and punctuation.
Fix a couple typos. From Brian Youmans.
2000-10-30 Jim Meyering <meyering@lucent.com>
* configure, config.h.in, Makefile.in, etc.: Regenerate using the
very latest version (in CVS) of autoconf.
2000-10-29 Jim Meyering <meyering@lucent.com>
* Version 2.0.11.
2000-10-27 Jim Meyering <meyering@lucent.com>
* src/date.c (usage): Mention the time zone, UTC, and write the date
in ISO format in the description of %s. Suggestion from Karl Berry.
2000-10-25 Jim Meyering <meyering@lucent.com>
* src/dirname.c: Include dirname.h.
(main): Use dir_name_r rather than open-coding it.
2000-10-23 Jim Meyering <meyering@lucent.com>
* Makefile.am (EXTRA_DIST): Add .prev-version.
2000-10-18 Paul Eggert <eggert@twinsun.com>
* src/date.c (universal_time): Remove; it's just a temptation to
do the wrong thing.
(main): The -u option now just sets TZ; it doesn't do anything else.
(show_date): Do not do anything special if -u is set.
This affects the behavior of the -I and -R options.
* doc/sh-utils.texi: Document the above.
2000-10-18 Jim Meyering <meyering@lucent.com>
* doc/sh-utils.texi (Examples of date): Fix a typo.
2000-10-11 Jim Meyering <meyering@lucent.com>
* doc/sh-utils.texi (Time directives) [%S]: Range is 0..60, not 0..61.
2000-10-06 Paul Eggert <eggert@twinsun.com>
Undo the effect of the 1997-07-12 change to date.c; it
broke "date -u MMDDhhmm" and it wasn't documented.
This reverts to the behavior of the 1996-01-03 patch.
* src/date.c (TZ_UTC0, MAYBE_SET_TZ_UTC0, set_tz): Remove.
(batch_convert): Don't futz with TZ.
(main): -u now parses all dates as UTC, not just some.
Reported by Karl-Michael Schneider.
* tests/date/Test.pm (utc-0, utc-1, relative-2): Adjust to
above change.
2000-09-29 Jim Meyering <meyering@lucent.com>
* src/yes.c (usage): Add a separate usage line, just for `OPTION'.
Suggestion from M. P. Suzuki.
2000-09-09 Jim Meyering <meyering@lucent.com>
* src/date.c (usage): Make the second `Usage' line more precise
(also making it match the texinfo documentation).
From Karl Eichwalder.
* doc/sh-utils.texi (Setting the time): Correct the capitalization of
`HHMM' in the info-rendering of the texinfo documentation.
Reported by Karl Eichwalder.
2000-08-14 Jim Meyering <meyering@lucent.com>
* src/tee.c (main): Remove incorrect `FIXME' comment.
@@ -431,8 +531,8 @@
2000-01-21 Bruno Haible <haible@linuix.math.u-bordeaux.fr>
Add support for octal and hexadecimal output.
* seq.c (intconv): New variable.
Add support for octal and hexadecimal output.
* seq.c (intconv): New variable.
(usage): Update.
(main): Call scan_arg instead of scan_double_arg. Call check_format
before scan_arg.
@@ -1793,8 +1893,8 @@
1997-08-31 Jim Meyering <meyering@na-net.ornl.gov>
* src/who.c (main): New option --lookup (-l).
(print_entry): Only call canon_host if user explicitly asks for it.
(usage): Describe --lookup.
(print_entry): Only call canon_host if user explicitly asks for it.
(usage): Describe --lookup.
From Galen Hazelwood.
* configure.in (ALL_LINGUAS): Add Spanish (es).

View File

@@ -1,6 +1,8 @@
Changes in release 2.1
[2.0k]
[2.0.11]
* setting the date now works properly, even when using -u
* `date -f - < /dev/null' no longer dumps core
* some DOS/Windows portability changes
[2.0j]
* `date -d DATE' now parses certain relative DATEs correctly
[2.0i]

View File

@@ -1,3 +1,130 @@
2000-11-27 Jim Meyering <meyering@lucent.com>
* Version 2.0.9.
* src/checksum.h: Don't include system.h here.
* src/md5.c: Include config.h, stdio.h, sys/types.h. and system.h here
instead.
* src/sha1sum.c: Likewise.
2000-11-18 Paul Eggert <eggert@twinsun.com>
* src/pr.c (main): Do not assume EOF == -1.
Handle the case correctly when digits options immediately precede a
non-option.
2000-11-18 Jim Meyering <meyering@lucent.com>
* doc/textutils.texi: Change GNU to @sc{gnu} in many places.
Update to use the Free Documentation Licence.
* configure, config.h.in, Makefile.in, etc.: Regenerate using the
very latest version (in CVS) of autoconf.
2000-11-17 Jim Meyering <meyering@lucent.com>
* GNUmakefile (.NOTPARALLEL): New target. Prevent unwanted parallelism.
Suggestion from Ulrich Drepper.
2000-11-16 John David Anglin <dave@hiauly1.hia.nrc.ca>
* tsort.c: Include sys/types.h before system.h.
2000-11-16 Jim Meyering <meyering@lucent.com>
* src/join.c: Declare global `tab' to be of type *unsigned* char,
so join works with 8-bit delimiter characters.
Reported by Antonio Rendas.
* tests/join/Test.pm (8-bit-t): New test for the above fix.
2000-11-13 Paul Eggert <eggert@twinsun.com>
* src/sys2.h (ST_TIME_CMP_NS): Fix typo: ST_MTIM_NSEC should
be tested with #ifdef, not with #if.
2000-11-11 Jim Meyering <meyering@lucent.com>
* doc/textutils.texi: More minor rewording and grammar correction.
From Brian Youmans.
2000-11-06 Paul Eggert <eggert@twinsun.com>
* src/od.c (skip): st_size is not defined for directories.
2000-11-03 Jim Meyering <meyering@lucent.com>
* tests/sha1sum/sample-vec: New file, with tests derived from
http://csrc.nist.gov/cryptval/shs/sha1-vectors.zip
* tests/sha1sum/Makefile.am (TESTS): Add sample-vec.
2000-10-30 Jim Meyering <meyering@lucent.com>
* configure, config.h.in, Makefile.in, etc.: Regenerate using the
very latest version (in CVS) of autoconf.
* src/wc.c: Include "system.h" after wctype.h (not before)
to avoid a compilation error on Solaris 5.5.1 systems.
Reported by Vin Shelton.
2000-10-23 Jim Meyering <meyering@lucent.com>
* Makefile.maint: Clean up version-related variables.
* Version 2.0.8.
* Makefile.am (EXTRA_DIST): Add .prev-version.
2000-10-22 Jim Meyering <meyering@lucent.com>
* tests/Makefile.am (SUBDIRS): Add sha1sum.
* tests/sha1sum/basic-1: New file.
* configure.in (AC_OUTPUT): Add tests/sha1sum/Makefile.
* src/Makefile.am (bin_PROGRAMS): Add sha1sum.
(md5sum_SOURCES): Define.
(sha1sum_SOURCES): Define.
(noinst_HEADERS): Add checksum.h.
* src/md5sum.c: Factor out the differences between MD5 and SHA1,
and parameterize so this code may be used by both md5sum and the new
program, sha1sum. Loosely based on a patch from Scott Miller.
* src/checksum.h: New file.
* src/md5.c: New file that simply defines `algorithm'.
* src/sha1sum.c: Likewise.
* man/Makefile.am (man_MANS): Add sha1sum.1.
* man/sha1sum.x: New file.
Support 8-byte integers, assuming they're printable with e.g., %lld.
* src/od.c: Add support for printing data as unsigned
long long integers.
2000-10-21 Jim Meyering <meyering@lucent.com>
The command, `yes ''|./cat -n' would stop printing after INT_MAX lines.
* src/cat.c (cat): Never let `newlines' exceed 3.
2000-10-21 Jim Meyering <meyering@lucent.com>
Prevent a counter buffer overrun when numbering lines and when
processing 100 billion lines (or more) of input.
* src/cat.c (LINE_COUNTER_BUF_LEN): Define to allow numbering as
many as 10^18 - 1 lines (the old limit was 10^11 - 1, and could
be exceeded without too much trouble). Use this symbol rather
than hard-coding the constant everywhere.
(next_line_num): Rather than overrunning for input with more lines,
mark the line number by putting a `>' in the leftmost slot.
Patch by Jan Nieuwenhuizen.
* src/sort.c (SORT_OUT_OF_ORDER): Define.
(main): Use it instead of hard-coding the `1'.
2000-10-10 Jim Meyering <meyering@lucent.com>
* src/sort.c (main): Use EXIT_SUCCESS rather than 0.
Fail when checking (-c) with more than one file argument,
rather than simply ignoring the extra arguments.
2000-09-07 Jim Meyering <meyering@lucent.com>
* src/cut.c: Remove obsolete comment block.
@@ -84,7 +211,7 @@
2000-08-06 Paul Eggert <eggert@twinsun.com>
* src/sort.c (usage): Warn more succintly about the effects of
* src/sort.c (usage): Warn more succinctly about the effects of
the locale on sort order.
2000-08-06 Jim Meyering <meyering@lucent.com>
@@ -2160,8 +2287,8 @@
1998-02-16 Jim Meyering <meyering@eng.ascend.com>
* configure.in (jm_FUNC_LSTAT): Use it.
(jm_FUNC_STAT): Use it.
* configure.in (jm_FUNC_LSTAT): Use it.
(jm_FUNC_STAT): Use it.
* lib/Makefile.am (EXTRA_DIST): Add lstat.c and stat.c.
1998-02-06 Jim Meyering <meyering@eng.ascend.com>
@@ -2190,8 +2317,8 @@
1998-01-30 Paul Eggert <eggert@twinsun.com>
* configure.in (AC_LFS): Put before anything that can affect or use
CPPFLAGS, LDFLAGS, or LIBS.
* configure.in (AC_LFS): Put before anything that can affect or use
CPPFLAGS, LDFLAGS, or LIBS.
1998-01-25 Jim Meyering <meyering@na-net.ornl.gov>

View File

@@ -1,5 +1,13 @@
Changes in release 2.1
[2.0h]
[2.0.9]
* join now works with an 8-bit delimiter
* fix a compilation failure on some Solaris systems with wc.c
[2.0.8]
* od now supports 8-byte integers, assuming they're printable with e.g., %lld
* new program: sha1sum
* wc accepts new -m option: count (potentially multi-byte) characters
* wc's `--chars' option is now equivalent to -m, not --bytes as it used to be
* `cat -n' works properly when processing 2^31 or more lines
[2.0g]
* sort's --help output now warns that it is locale-aware
* tail: fix a buffer underrun error that occurred on an empty pipe,

View File

@@ -1,5 +1,5 @@
# Makefile for program source directory in GNU NLS utilities package.
# Copyright (C) 1995, 1996, 1997 by Ulrich Drepper <drepper@gnu.ai.mit.edu>
# -*- Makefile -*- for program source directory in GNU NLS utilities package.
# Copyright (C) 1995, 1996, 1997, 2000 by Ulrich Drepper <drepper@gnu.ai.mit.edu>
#
# This file file be copied and used freely without restrictions. It can
# be used in projects which are not available under the GNU Public License
@@ -176,7 +176,6 @@ uninstall:
rm -f $(DESTDIR)$(gnulocaledir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT); \
rm -f $(DESTDIR)$(gnulocaledir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT).m; \
done
rm -f $(DESTDIR)$(gettextsrcdir)/po-Makefile.in.in
check: all
@@ -202,8 +201,7 @@ distdir = ../$(PACKAGE)-$(VERSION)/$(subdir)
dist distdir: update-po $(DISTFILES)
dists="$(DISTFILES)"; \
for file in $$dists; do \
ln $(srcdir)/$$file $(distdir) 2> /dev/null \
|| cp -p $(srcdir)/$$file $(distdir); \
cp -p $(srcdir)/$$file $(distdir); \
done
update-po: Makefile
@@ -246,3 +244,7 @@ Makefile: Makefile.in.in ../config.status POTFILES
# Tell versions [3.59,3.63) of GNU make not to export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
# Tell version 3.79 and up of GNU make to not build goals in this
# directory in parallel.
.NOTPARALLEL:

View File

@@ -55,19 +55,26 @@ static char *infile;
/* Descriptor on which input file is open. */
static int input_desc;
/* Buffer for line numbers. */
static char line_buf[13] =
{' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '0', '\t', '\0'};
/* Buffer for line numbers.
An 11 digit counter may overflow within an hour on a P2/466,
an 18 digit counter needs about 1000y */
#define LINE_COUNTER_BUF_LEN 20
static char line_buf[LINE_COUNTER_BUF_LEN] =
{
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '0',
'\t', '\0'
};
/* Position in `line_buf' where printing starts. This will not change
unless the number of lines is larger than 999999. */
static char *line_num_print = line_buf + 5;
static char *line_num_print = line_buf + LINE_COUNTER_BUF_LEN - 8;
/* Position of the first digit in `line_buf'. */
static char *line_num_start = line_buf + 10;
static char *line_num_start = line_buf + LINE_COUNTER_BUF_LEN - 3;
/* Position of the last digit in `line_buf'. */
static char *line_num_end = line_buf + 10;
static char *line_num_end = line_buf + LINE_COUNTER_BUF_LEN - 3;
/* Preserves the `cat' function's local `newlines' between invocations. */
static int newlines2 = 0;
@@ -129,7 +136,10 @@ next_line_num (void)
*endp-- = '0';
}
while (endp >= line_num_start);
*--line_num_start = '1';
if (line_num_start > line_buf)
*--line_num_start = '1';
else
*line_buf = '>';
if (line_num_start < line_num_print)
line_num_print--;
}
@@ -340,13 +350,21 @@ cat (
if (++newlines > 0)
{
/* Are multiple adjacent empty lines to be substituted by
single ditto (-s), and this was the second empty line? */
if (squeeze_empty_lines && newlines >= 2)
if (newlines >= 2)
{
ch = *bpin++;
continue;
/* Limit this to 2 here. Otherwise, with lots of
consecutive newlines, the counter could wrap
around at INT_MAX. */
newlines = 2;
/* Are multiple adjacent empty lines to be substituted
by single ditto (-s), and this was the second empty
line? */
if (squeeze_empty_lines)
{
ch = *bpin++;
continue;
}
}
/* Are line numbers to be written at empty lines (-n)? */
@@ -775,8 +793,8 @@ main (int argc, char **argv)
{
inbuf = (unsigned char *) xmalloc (insize + 1);
/* Why are (OUTSIZE - 1 + INSIZE * 4 + 13) bytes allocated for
the output buffer?
/* Why are (OUTSIZE - 1 + INSIZE * 4 + LINE_COUNTER_BUF_LEN)
bytes allocated for the output buffer?
A test whether output needs to be written is done when the input
buffer empties or when a newline appears in the input. After
@@ -788,10 +806,12 @@ main (int argc, char **argv)
If the last character in the preceding block of input was a
newline, a line number may be written (according to the given
options) as the first thing in the output buffer. (Done after the
new input is read, but before processing of the input begins.) A
line number requires seldom more than 13 positions. */
new input is read, but before processing of the input begins.)
A line number requires seldom more than LINE_COUNTER_BUF_LEN
positions. */
outbuf = (unsigned char *) xmalloc (outsize - 1 + insize * 4 + 13);
outbuf = (unsigned char *) xmalloc (outsize - 1 + insize * 4
+ LINE_COUNTER_BUF_LEN);
cat (inbuf, insize, outbuf, outsize, quote,
output_tabs, numbers, numbers_at_empty_lines, mark_line_ends,

15
src/checksum.h Normal file
View File

@@ -0,0 +1,15 @@
#include <config.h>
#include <sys/types.h>
#include <stdio.h>
/* For long options that have no equivalent short option, use a
non-character as a pseudo short option, starting with CHAR_MAX + 1. */
enum
{
ALG_UNSPECIFIED = 0,
ALG_MD5 = CHAR_MAX + 1,
ALG_SHA1
};
extern int algorithm;

View File

@@ -95,6 +95,31 @@ static struct option const long_options[] =
{0, 0, 0, 0}
};
static int
mode_changed (const char *file, mode_t old_mode)
{
struct stat new_stats;
if (lstat (file, &new_stats))
{
if (force_silent == 0)
error (0, errno, _("getting new attributes of %s"), quote (file));
return 0;
}
#ifdef S_ISLNK
if (S_ISLNK (new_stats.st_mode)
&& stat (file, &new_stats))
{
if (force_silent == 0)
error (0, errno, _("getting new attributes of %s"), quote (file));
return 0;
}
#endif
return old_mode != new_stats.st_mode;
}
/* Tell the user how/if the MODE of FILE has been changed.
CHANGED describes what (if anything) has happened. */
@@ -137,6 +162,8 @@ change_file_mode (const char *file, const struct mode_change *changes,
struct stat file_stats;
mode_t newmode;
int errors = 0;
int fail;
int saved_errno;
if (lstat (file, &file_stats))
{
@@ -161,24 +188,21 @@ change_file_mode (const char *file, const struct mode_change *changes,
newmode = mode_adjust (file_stats.st_mode, changes);
if (newmode != (file_stats.st_mode & CHMOD_MODE_BITS))
fail = chmod (file, newmode);
saved_errno = errno;
if (verbosity == V_high
|| (verbosity == V_changes_only
&& !fail && mode_changed (file, file_stats.st_mode)))
describe_change (file, newmode, (fail ? CH_FAILED : CH_SUCCEEDED));
if (fail)
{
int fail = chmod (file, newmode);
int saved_errno = errno;
if (verbosity == V_high || (verbosity == V_changes_only && !fail))
describe_change (file, newmode, (fail ? CH_FAILED : CH_SUCCEEDED));
if (fail)
{
if (force_silent == 0)
error (0, saved_errno, _("changing permissions of %s"),
quote (file));
errors = 1;
}
if (force_silent == 0)
error (0, saved_errno, _("changing permissions of %s"),
quote (file));
errors = 1;
}
else if (verbosity == V_high)
describe_change (file, newmode, CH_NO_CHANGE_REQUESTED);
if (recurse && S_ISDIR (file_stats.st_mode))
errors |= change_dir_mode (file, changes, &file_stats);
@@ -313,7 +337,12 @@ main (int argc, char **argv)
case '-':
case '=':
if (modeind != 0 && modeind != thisind)
error (1, 0, _("invalid mode"));
{
static char char_string[2] = {0, 0};
char_string[0] = c;
error (1, 0, _("invalid character %s in mode string %s"),
quote_n (0, char_string), quote_n (1, argv[thisind]));
}
modeind = thisind;
break;
case REFERENCE_FILE_OPTION:
@@ -351,7 +380,7 @@ main (int argc, char **argv)
: mode_compile (argv[modeind], MODE_MASK_ALL));
if (changes == MODE_INVALID)
error (1, 0, _("invalid mode"));
error (1, 0, _("invalid mode string: %s"), quote (argv[modeind]));
else if (changes == MODE_MEMORY_EXHAUSTED)
xalloc_die ();
else if (changes == MODE_BAD_REFERENCE)

View File

@@ -723,10 +723,10 @@ copy_internal (const char *src_path, const char *dst_path,
}
new_dst = 1;
}
else if (x->unlink_dest_before_opening
|| (x->xstat == lstat
&& ! S_ISREG (src_sb.st_mode)
&& ! S_ISDIR (src_sb.st_mode)))
else if (! S_ISDIR (dst_sb.st_mode)
&& (x->unlink_dest_before_opening
|| (x->xstat == lstat
&& ! S_ISREG (src_sb.st_mode))))
{
if (unlink (dst_path) && errno != ENOENT)
{

View File

@@ -156,14 +156,11 @@ Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY.\n\
-a, --archive same as -dpR\n\
--backup[=CONTROL] make a backup of each existing destination file\n\
-b like --backup but does not accept an argument\n\
-d, --no-dereference preserve links\n\
-f, --force if a preexisting destination file cannot be\n\
opened, then unlink it and try again\n\
-d, --no-dereference never follow symbolic links\n\
-f, --force if an existing destination file cannot be\n\
opened, remove it and try again\n\
-i, --interactive prompt before overwrite\n\
-H follow symbolic links that are explicitly\n\
specified in the command line, but do not\n\
follow symlinks that are found via recursive\n\
traversal\n\
-H follow command-line symbolic links\n\
-l, --link link files instead of copying\n\
-L, --dereference always follow symbolic links\n\
-p, --preserve preserve file attributes if possible\n\
@@ -173,7 +170,7 @@ Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY.\n\
-r copy recursively, non-directories as files\n\
WARNING: use -R instead when you might copy\n\
special files like FIFOs or /dev/zero\n\
--remove-destination unlink each preexisting destination file before\n\
--remove-destination remove each existing destination file before\n\
attempting to open it (contrast with --force)\n\
--sparse=WHEN control creation of sparse files\n\
-R, --recursive copy directories recursively\n\
@@ -333,6 +330,8 @@ re_protect (const char *const_dst_path, int src_offset,
Return 0 if parent of CONST_DIRPATH exists as a directory with the proper
permissions when done, otherwise 1. */
/* FIXME: find a way to synch this function with the one in lib/makepath.c. */
static int
make_path_private (const char *const_dirpath, int src_offset, int mode,
const char *verbose_fmt_string, struct dir_attr **attr_list,
@@ -519,13 +518,26 @@ do_copy (int n_files, char **file, const char *target_directory,
char *arg_in_concat = NULL;
char *arg = file[i];
/* Trailing slashes are meaningful (i.e., maybe worth preserving)
only in the source file names. */
if (remove_trailing_slashes)
strip_trailing_slashes (arg);
if (flag_path)
{
/* Append all of `arg' to `dest'. */
dst_path = path_concat (dest, arg, &arg_in_concat);
char *arg_no_trailing_slash;
/* Use `arg' without trailing slashes in constructing destination
file names. Otherwise, we can end up trying to create a
directory via `mkdir ("dst/foo/"...', which is not portable.
It fails, due to the trailing slash, on at least
NetBSD 1.[34] systems. */
ASSIGN_STRDUPA (arg_no_trailing_slash, arg);
strip_trailing_slashes (arg_no_trailing_slash);
/* Append all of `arg' (minus any trailing slash) to `dest'. */
dst_path = path_concat (dest, arg_no_trailing_slash,
&arg_in_concat);
if (dst_path == NULL)
xalloc_die ();
@@ -846,7 +858,7 @@ main (int argc, char **argv)
error (0, 0,
_("\
Warning: the meaning of `-P' will change in the future to conform to POSIX.\n\
Use `--parents' for the old meaning, and `--no-dereference' for the new."));
Use `--parents' for the old meaning, and `--no-dereference' for the new one."));
}
if (backup_suffix_string)
@@ -882,6 +894,11 @@ Use `--parents' for the old meaning, and `--no-dereference' for the new."));
x.xstat = stat;
}
/* If --force (-f) was specified and we're in link-creation mode,
first remove any existing destination file. */
if (x.unlink_dest_after_failed_open && (x.hard_link || x.symbolic_link))
x.unlink_dest_before_opening = 1;
/* Allocate space for remembering copied and created files. */
hash_init (INITIAL_HASH_MODULE, INITIAL_ENTRY_TAB_SIZE);

View File

@@ -79,9 +79,6 @@ static int iso_8601_format = 0;
/* If non-zero, display time in RFC-822 format for mail or news. */
static int rfc_format = 0;
/* If nonzero, print or set Coordinated Universal Time. */
static int universal_time = 0;
static struct option const long_options[] =
{
{"date", required_argument, NULL, 'd'},
@@ -98,17 +95,12 @@ static struct option const long_options[] =
{NULL, 0, NULL, 0}
};
#define TZ_UTC0 "TZ=UTC0"
#if LOCALTIME_CACHE
# define TZSET tzset ()
#else
# define TZSET /* empty */
#endif
#define MAYBE_SET_TZ_UTC0 \
do { if (universal_time) set_tz (TZ_UTC0); } while (0)
#ifdef _DATE_FMT
# define DATE_FMT_LANGINFO() nl_langinfo (_DATE_FMT)
#else
@@ -125,7 +117,7 @@ usage (int status)
{
printf (_("\
Usage: %s [OPTION]... [+FORMAT]\n\
or: %s [OPTION] [MMDDhhmm[[CC]YY][.ss]]\n\
or: %s [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]\n\
"),
program_name, program_name);
printf (_("\
@@ -169,7 +161,7 @@ specifies Coordinated Universal Time. Interpreted sequences are:\n\
%%n a newline\n\
%%p locale's AM or PM\n\
%%r time, 12-hour (hh:mm:ss [AP]M)\n\
%%s seconds since 00:00:00, Jan 1, 1970 (a GNU extension)\n\
%%s seconds since `00:00:00 1970-01-01 UTC' (a GNU extension)\n\
%%S second (00..60)\n\
%%t a horizontal tab\n\
%%T time, 24-hour (hh:mm:ss)\n\
@@ -195,16 +187,6 @@ the following modifiers between `%%' and a numeric directive.\n\
exit (status);
}
/* Set the TZ environment variable. */
static void
set_tz (const char *tz_eq_zone)
{
if (putenv (tz_eq_zone) != 0)
error (1, 0, "memory exhausted");
TZSET;
}
/* Parse each line in INPUT_FILENAME as with --date and display each
resulting time and date. If the file cannot be opened, tell why
then exit. Issue a diagnostic for any lines that cannot be parsed.
@@ -219,7 +201,6 @@ batch_convert (const char *input_filename, const char *format)
int line_length;
size_t buflen;
time_t when;
char *initial_TZ IF_LINT (= NULL);
if (strcmp (input_filename, "-") == 0)
{
@@ -237,23 +218,6 @@ batch_convert (const char *input_filename, const char *format)
line = NULL;
buflen = 0;
if (universal_time)
{
initial_TZ = getenv ("TZ");
if (initial_TZ == NULL)
{
initial_TZ = xstrdup ("TZ=");
}
else
{
size_t tz_len = strlen (initial_TZ);
char *buf = xmalloc (3 + tz_len + 1);
memcpy (mempcpy (buf, "TZ=", 3), initial_TZ, tz_len + 1);
initial_TZ = buf;
}
}
status = 0;
while (1)
{
@@ -264,13 +228,6 @@ batch_convert (const char *input_filename, const char *format)
break;
}
if (universal_time)
{
/* When given a universal time option, restore the initial
value of TZ before parsing each string. */
set_tz (initial_TZ);
}
when = get_date (line, NULL);
if (when == -1)
@@ -282,14 +239,10 @@ batch_convert (const char *input_filename, const char *format)
}
else
{
MAYBE_SET_TZ_UTC0;
show_date (format, when);
}
}
if (universal_time)
free (initial_TZ);
if (fclose (in_stream) == EOF)
error (2, errno, "`%s'", input_filename);
@@ -352,7 +305,12 @@ main (int argc, char **argv)
set_date = 1;
break;
case 'u':
universal_time = 1;
/* POSIX.2 says that `date -u' is equivalent to setting the TZ
environment variable, so this option should do nothing other
than setting TZ. */
if (putenv ("TZ=UTC0") != 0)
xalloc_die ();
TZSET;
break;
case_GETOPT_HELP_CHAR;
case_GETOPT_VERSION_CHAR (PROGRAM_NAME, AUTHORS);
@@ -460,10 +418,6 @@ argument must be a format string beginning with `+'."),
}
}
/* When given a universal time option, set TZ to UTC0 after
parsing the specified date, but before printing it. */
MAYBE_SET_TZ_UTC0;
show_date (format, when);
}
@@ -480,14 +434,13 @@ show_date (const char *format, time_t when)
struct tm *tm;
char *out = NULL;
size_t out_length = 0;
/* ISO 8601 formats, in local and UTC. See below regarding %z */
static char *iso_format_string[5][2] =
/* ISO 8601 formats. See below regarding %z */
static char const * const iso_format_string[] =
{
{"", ""},
{"%Y-%m-%d", "%Y-%m-%d"},
{"%Y-%m-%dT%H%z", "%Y-%m-%dT%HZ"},
{"%Y-%m-%dT%H:%M%z", "%Y-%m-%dT%H:%MZ"},
{"%Y-%m-%dT%H:%M:%S%z", "%Y-%m-%dT%H:%M:%SZ"}
"%Y-%m-%d",
"%Y-%m-%dT%H%z",
"%Y-%m-%dT%H:%M%z",
"%Y-%m-%dT%H:%M:%S%z"
};
tm = localtime (&when);
@@ -502,14 +455,19 @@ show_date (const char *format, time_t when)
RFC time format outside the continental United States and GMT. */
if (rfc_format)
format = (universal_time
? "%a, %_d %b %Y %H:%M:%S GMT"
: "%a, %_d %b %Y %H:%M:%S %z");
format = "%a, %_d %b %Y %H:%M:%S %z";
else if (iso_8601_format)
format = iso_format_string[iso_8601_format][universal_time];
format = iso_format_string[iso_8601_format - 1];
else
{
char *date_fmt = DATE_FMT_LANGINFO ();
/* Do not wrap the following literal format string with _(...).
For example, suppose LC_ALL is unset, LC_TIME="POSIX",
and LANG="ko_KR". In that case, POSIX.2 says that LC_TIME
determines the format and contents of date and time strings
written by date, which means "date" must generate output
using the POSIX locale; but adding _() would cause "date"
to use a Korean translation of the format. */
format = *date_fmt ? date_fmt : "%a %b %e %H:%M:%S %Z %Y";
}
}

113
src/dd.c
View File

@@ -48,6 +48,10 @@
# define SIGINFO SIGUSR1
#endif
#ifndef S_TYPEISSHM
# define S_TYPEISSHM(Mode) 0
#endif
#define ROUND_UP_OFFSET(X, M) ((M) - 1 - (((X) + (M) - 1) % (M)))
#define PTR_ALIGN(Ptr, M) ((Ptr) \
+ ROUND_UP_OFFSET ((char *)(Ptr) - (char *)0, (M)))
@@ -99,8 +103,14 @@ static size_t conversion_blocksize = 0;
/* Skip this many records of `input_blocksize' bytes before input. */
static uintmax_t skip_records = 0;
/* Nonzero if SKIP_RECORDS is actually a byte count, not a record count. */
static int skip_bytes = 0;
/* Skip this many records of `output_blocksize' bytes before output. */
static uintmax_t seek_record = 0;
static uintmax_t seek_records = 0;
/* Nonzero if SEEK_RECORDS is actually a byte count, not a record count. */
static int seek_bytes = 0;
/* Copy only this many records. The default is effectively infinity. */
static uintmax_t max_records = (uintmax_t) -1;
@@ -298,9 +308,10 @@ Copy a file, converting and formatting according to the options.\n\
--help display this help and exit\n\
--version output version information and exit\n\
\n\
BYTES may be followed by the following multiplicative suffixes:\n\
BLOCKS and BYTES may be followed by the following multiplicative suffixes:\n\
xM M, c 1, w 2, b 512, kD 1000, k 1024, MD 1,000,000, M 1,048,576,\n\
GD 1,000,000,000, G 1,073,741,824, and so on for T, P, E, Z, Y.\n\
For seek= and skip=, a B suffix for BLOCKS means it counts bytes not blocks.\n\
Each KEYWORD may be:\n\
\n\
ascii from EBCDIC to ASCII\n\
@@ -555,7 +566,18 @@ scanargs (int argc, char **argv)
else
{
int invalid = 0;
uintmax_t n = parse_integer (val, &invalid);
uintmax_t n;
int count_bytes = 0;
if (STREQ (name, "seek") || STREQ (name, "skip"))
{
size_t vallen = strlen (val);
count_bytes = vallen && val[vallen - 1] == 'B';
if (count_bytes)
val[vallen - 1] = '\0';
}
n = parse_integer (val, &invalid);
if (STREQ (name, "ibs"))
{
@@ -581,9 +603,15 @@ scanargs (int argc, char **argv)
|| conversion_blocksize == 0);
}
else if (STREQ (name, "skip"))
skip_records = n;
{
skip_records = n;
skip_bytes = count_bytes;
}
else if (STREQ (name, "seek"))
seek_record = n;
{
seek_records = n;
seek_bytes = count_bytes;
}
else if (STREQ (name, "count"))
max_records = n;
else
@@ -734,7 +762,7 @@ buggy_lseek_support (int fdesc)
on some special files but doesn't return an error, either.
In particular, the Linux tape drivers are a problem.
For example, when I did the following using dd-4.0y or earlier on a
Linux-2.2.17 system with a Exabyte SCSI tape drive:
Linux-2.2.17 system with an Exabyte SCSI tape drive:
dev=/dev/nst0
reset='mt -f $dev rewind; mt -f $dev fsf 1'
@@ -755,24 +783,31 @@ buggy_lseek_support (int fdesc)
nonzero. */
static void
skip (int fdesc, char *file, uintmax_t records, size_t blocksize,
unsigned char *buf)
skip (int fdesc, char *file, int count_bytes, uintmax_t records,
size_t blocksize, unsigned char *buf)
{
off_t o;
size_t seek_blocksize = count_bytes ? 1 : blocksize;
off_t offset = records * seek_blocksize;
/* Try lseek and if an error indicates it was an inappropriate
operation, fall back on using read. Some broken versions of
lseek may return zero, so count that as an error too as a valid
zero return is not possible here. */
o = records * blocksize;
if (o / blocksize != records
if (offset / seek_blocksize != records
|| buggy_lseek_support (fdesc)
|| lseek (fdesc, o, SEEK_CUR) <= 0)
|| lseek (fdesc, offset, SEEK_CUR) <= 0)
{
while (records-- > 0)
if (count_bytes)
records = offset;
while (records)
{
int nread;
if (count_bytes && records < blocksize)
blocksize = records;
nread = safe_read (fdesc, buf, blocksize);
if (nread < 0)
{
@@ -784,6 +819,8 @@ skip (int fdesc, char *file, uintmax_t records, size_t blocksize,
FIXME: maybe give a warning. */
if (nread == 0)
break;
records -= (count_bytes ? nread : 1);
}
}
}
@@ -791,10 +828,10 @@ skip (int fdesc, char *file, uintmax_t records, size_t blocksize,
/* Copy NREAD bytes of BUF, with no conversions. */
static void
copy_simple (unsigned char *buf, int nread)
copy_simple (unsigned char const *buf, int nread)
{
int nfree; /* Number of unused bytes in `obuf'. */
unsigned char *start = buf; /* First uncopied char in BUF. */
const unsigned char *start = buf; /* First uncopied char in BUF. */
do
{
@@ -818,7 +855,7 @@ copy_simple (unsigned char *buf, int nread)
replacing the newline with trailing spaces). */
static void
copy_with_block (unsigned char *buf, size_t nread)
copy_with_block (unsigned char const *buf, size_t nread)
{
size_t i;
@@ -850,7 +887,7 @@ copy_with_block (unsigned char *buf, size_t nread)
with a newline). */
static void
copy_with_unblock (unsigned char *buf, size_t nread)
copy_with_unblock (unsigned char const *buf, size_t nread)
{
size_t i;
unsigned char c;
@@ -933,9 +970,10 @@ dd_copy (void)
}
if (skip_records != 0)
skip (STDIN_FILENO, input_file, skip_records, input_blocksize, ibuf);
skip (STDIN_FILENO, input_file, skip_bytes, skip_records,
input_blocksize, ibuf);
if (seek_record != 0)
if (seek_records != 0)
{
/* FIXME: this loses for
% ./dd if=dd seek=1 |:
@@ -944,8 +982,8 @@ dd_copy (void)
0+0 records out
*/
skip (STDOUT_FILENO, output_file, seek_record, output_blocksize,
obuf);
skip (STDOUT_FILENO, output_file, seek_bytes, seek_records,
output_blocksize, obuf);
}
if (max_records == 0)
@@ -1138,27 +1176,42 @@ main (int argc, char **argv)
mode_t perms = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH;
int opts
= (O_CREAT
| (seek_record || (conversions_mask & C_NOTRUNC) ? 0 : O_TRUNC));
| (seek_records || (conversions_mask & C_NOTRUNC) ? 0 : O_TRUNC));
/* Open the output file with *read* access only if we might
need to read to satisfy a `seek=' request. If we can't read
the file, go ahead with write-only access; it might work. */
if ((! seek_record
if ((! seek_records
|| open_fd (STDOUT_FILENO, output_file, O_RDWR | opts, perms) < 0)
&& open_fd (STDOUT_FILENO, output_file, O_WRONLY | opts, perms) < 0)
error (1, errno, _("opening %s"), quote (output_file));
#if HAVE_FTRUNCATE
if (seek_record != 0 && !(conversions_mask & C_NOTRUNC))
if (seek_records != 0 && !(conversions_mask & C_NOTRUNC))
{
off_t o = seek_record * output_blocksize;
if (o / output_blocksize != seek_record)
struct stat stdout_stat;
size_t blocksize = seek_bytes ? 1 : output_blocksize;
off_t o = seek_records * blocksize;
if (o / blocksize != seek_records)
error (1, 0, _("file offset out of range"));
if (ftruncate (STDOUT_FILENO, o) < 0)
if (fstat (STDOUT_FILENO, &stdout_stat) != 0)
error (1, errno, _("cannot fstat %s"), quote (output_file));
/* Complain only when ftruncate fails on a regular file, a
directory, or a shared memory object, as the 2000-08
POSIX draft specifies ftruncate's behavior only for these
file types. For example, do not complain when Linux 2.4
ftruncate fails on /dev/fd0. */
if (ftruncate (STDOUT_FILENO, o) != 0
&& (S_ISREG (stdout_stat.st_mode)
|| S_ISDIR (stdout_stat.st_mode)
|| S_TYPEISSHM (stdout_stat.st_mode)))
{
char buf[LONGEST_HUMAN_READABLE + 1];
error (1, errno, _("advancing past %s blocks in output file %s"),
human_readable (seek_record, buf, 1, 1),
quote (output_file));
error (1, errno, _("advancing past %s bytes in output file %s"),
human_readable (o, buf, 1, 1),
quote (output_file));
}
}
#endif

View File

@@ -149,19 +149,19 @@ static struct option const long_options[] =
static void
print_header (void)
{
printf ("Filesystem ");
printf (_("Filesystem "));
if (print_type)
printf (" Type");
printf (_(" Type"));
else
printf (" ");
if (inode_format)
printf (" Inodes IUsed IFree IUse%%");
printf (_(" Inodes IUsed IFree IUse%%"));
else if (output_block_size < 0)
printf (" Size Used Avail Use%%");
printf (_(" Size Used Avail Use%%"));
else if (posix_format)
printf (" %4d-blocks Used Available Capacity", output_block_size);
printf (_(" %4d-blocks Used Available Capacity"), output_block_size);
else
{
char buf[LONGEST_HUMAN_READABLE + 1];
@@ -172,10 +172,10 @@ print_header (void)
if (3 <= plen && strncmp (p + plen - 3, ".0", 2) == 0)
strcpy (p + plen - 3, p + plen - 1);
printf (" %4s-blocks Used Available Use%%", p);
printf (_(" %4s-blocks Used Available Use%%"), p);
}
printf (" Mounted on\n");
printf (_(" Mounted on\n"));
}
/* If FSTYPE is a type of filesystem that should be listed,
@@ -612,7 +612,9 @@ show_point (const char *point, const struct stat *statp)
}
}
if (best_match && !STREQ (best_match->me_type, "lofs"))
if (best_match && !STREQ (best_match->me_type, "lofs")
&& stat (best_match->me_mountdir, &disk_stats) == 0
&& disk_stats.st_dev == statp->st_dev)
{
me = best_match;
goto show_me;

View File

@@ -24,6 +24,7 @@
#include "system.h"
#include "long-options.h"
#include "error.h"
#include "dirname.h"
#include "closeout.h"
/* The official name of this program (e.g., no `g' prefix). */
@@ -64,8 +65,8 @@ output `.' (meaning the current directory).\n\
int
main (int argc, char **argv)
{
register char *path;
register char *slash;
const char *result;
size_t len;
program_name = argv[0];
setlocale (LC_ALL, "");
@@ -91,20 +92,9 @@ main (int argc, char **argv)
usage (1);
}
path = argv[1];
strip_trailing_slashes (path);
slash = strrchr (path, '/');
if (slash == NULL)
path = (char *) ".";
else
{
/* Remove any trailing slashes and final element. */
while (slash > path && *slash == '/')
--slash;
slash[1] = 0;
}
puts (path);
len = dir_name_r (argv[1], &result);
fwrite (result, 1, len, stdout);
putchar ('\n');
exit (0);
}

View File

@@ -520,6 +520,8 @@ count_entry (const char *ent, int top, dev_t last_dev, int depth)
dir_dev = stat_buf.st_dev;
/* Return `0' here, not SIZE, since the SIZE bytes
would reside in the new filesystem. */
if (opt_one_file_system && !top && last_dev != dir_dev)
return 0; /* Don't enter a new file system. */
@@ -553,7 +555,9 @@ count_entry (const char *ent, int top, dev_t last_dev, int depth)
if (cwd)
free_cwd (cwd);
exit_status = 1;
return 0;
/* Do return SIZE, here, since even though we can't chdir into ENT,
we *can* count the blocks used by its directory entry. */
return opt_separate_dirs ? 0 : size;
}
name_space = savedir (".", stat_buf.st_size);
@@ -562,7 +566,8 @@ count_entry (const char *ent, int top, dev_t last_dev, int depth)
error (0, errno, "%s", quote (path->text));
pop_dir (cwd, path->text);
exit_status = 1;
return 0;
/* Do count the SIZE bytes. */
return opt_separate_dirs ? 0 : size;
}
/* Remember the current path. */

View File

@@ -15,50 +15,7 @@
along with this program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
/* Copy files and set their permission modes and, if possible,
their owner and group. Used similarly to `cp'; typically
used in Makefiles to copy programs into their destination
directories. It can also be used to create the destination
directories and any leading directories, and to set the final
directory's modes. It refuses to copy files onto themselves.
Options:
-g, --group=GROUP
Set the group ownership of the installed file or directory
to the group ID of GROUP (default is process's current
group). GROUP may also be a numeric group ID.
-m, --mode=MODE
Set the permission mode for the installed file or directory
to MODE, which is an octal number (default is u=rwx,g=rx,o=rx).
-o, --owner=OWNER
If run as root, set the ownership of the installed file to
the user ID of OWNER (default is root). OWNER may also be
a numeric user ID.
-c No effect. For compatibility with old Unix versions of install.
-s, --strip
Strip the symbol tables from installed files.
-p, --preserve-timestamps
Retain creation and modification timestamps when installing files.
-d, --directory
Create a directory and its leading directories, if they
do not already exist. Set the owner, group and mode
as given on the command line. Any leading directories
that are created are also given those attributes.
This is different from the SunOS 4.0 install, which gives
directories that it creates the default attributes.
-D
Like the -d option, but a file is installed, along with the directory.
Useful when installing into a new directory, and the install
process doesn't properly comprehend making directories.
David MacKenzie <djm@gnu.ai.mit.edu> */
/* Written by David MacKenzie <djm@gnu.ai.mit.edu> */
#ifdef _AIX
#pragma alloca
@@ -189,8 +146,8 @@ cp_option_init (struct cp_options *x)
{
x->copy_as_regular = 1;
x->dereference = DEREF_ALWAYS;
x->unlink_dest_before_opening = 0;
x->unlink_dest_after_failed_open = 1;
x->unlink_dest_before_opening = 1;
x->unlink_dest_after_failed_open = 0;
/* If unlink fails, try to proceed anyway. */
x->failed_unlink_is_fatal = 0;
@@ -226,7 +183,7 @@ main (int argc, char **argv)
{
int optc;
int errors = 0;
const char *symbolic_mode = NULL;
const char *specified_mode = NULL;
int make_backups = 0;
char *backup_suffix_string;
char *version_control_string = NULL;
@@ -292,7 +249,7 @@ main (int argc, char **argv)
group_name = optarg;
break;
case 'm':
symbolic_mode = optarg;
specified_mode = optarg;
break;
case 'o':
owner_name = optarg;
@@ -328,11 +285,11 @@ main (int argc, char **argv)
usage (1);
}
if (symbolic_mode)
if (specified_mode)
{
struct mode_change *change = mode_compile (symbolic_mode, 0);
struct mode_change *change = mode_compile (specified_mode, 0);
if (change == MODE_INVALID)
error (1, 0, _("invalid mode %s"), quote (symbolic_mode));
error (1, 0, _("invalid mode %s"), quote (specified_mode));
else if (change == MODE_MEMORY_EXHAUSTED)
xalloc_die ();
mode = mode_adjust (0, change);

View File

@@ -114,7 +114,7 @@ static struct outlist *outlist_end = &outlist_head;
/* Tab character separating fields; if this is NUL fields are separated
by any nonempty string of white space, otherwise by exactly one
tab character. */
static char tab;
static unsigned char tab;
/* When using getopt_long_only, no long option can start with
a character that is a short option. */

121
src/ls.c
View File

@@ -197,12 +197,26 @@ int rpl_lstat PARAMS((const char *, struct stat *));
# define lstat(Name, Stat_buf) rpl_lstat(Name, Stat_buf)
#endif
#if defined _DIRENT_HAVE_D_TYPE || defined DTTOIF
# define HAVE_STRUCT_DIRENT_D_TYPE 1
# define DT_INIT(Val) = Val
#else
# define HAVE_STRUCT_DIRENT_D_TYPE 0
# define DT_INIT(Val) /* empty */
#endif
enum filetype
{
symbolic_link,
directory,
arg_directory, /* Directory given as command line arg. */
normal /* All others. */
unknown DT_INIT (DT_UNKNOWN),
fifo DT_INIT (DT_FIFO),
chardev DT_INIT (DT_CHR),
directory DT_INIT (DT_DIR),
blockdev DT_INIT (DT_BLK),
normal DT_INIT (DT_REG),
symbolic_link DT_INIT (DT_LNK),
sock DT_INIT (DT_SOCK),
arg_directory DT_INIT (2 * (DT_UNKNOWN | DT_FIFO | DT_CHR | DT_DIR | DT_BLK
| DT_REG | DT_LNK | DT_SOCK))
};
struct fileinfo
@@ -290,8 +304,8 @@ static int rev_cmp_version PARAMS ((const struct fileinfo *file2,
const struct fileinfo *file1));
static int decode_switches PARAMS ((int argc, char **argv));
static int file_interesting PARAMS ((const struct dirent *next));
static uintmax_t gobble_file PARAMS ((const char *name, int explicit_arg,
const char *dirname));
static uintmax_t gobble_file PARAMS ((const char *name, enum filetype type,
int explicit_arg, const char *dirname));
static void print_color_indicator PARAMS ((const char *name, unsigned int mode,
int linkok));
static void put_indicator PARAMS ((const struct bin_str *ind));
@@ -629,10 +643,29 @@ static int line_length;
static int format_needs_stat;
/* Similar to `format_needs_stat', but set if only the file type is
needed. */
static int format_needs_type;
/* The exit status to use if we don't get any fatal errors. */
static int exit_status;
/* For long options that have no equivalent short option, use a
non-character as a pseudo short option, starting with CHAR_MAX + 1. */
enum
{
BLOCK_SIZE_OPTION = CHAR_MAX + 1,
COLOR_OPTION,
FORMAT_OPTION,
INDICATOR_STYLE_OPTION,
QUOTING_STYLE_OPTION,
SHOW_CONTROL_CHARS_OPTION,
SORT_OPTION,
TIME_OPTION
};
static struct option const long_options[] =
{
{"all", no_argument, 0, 'a'},
@@ -655,19 +688,19 @@ static struct option const long_options[] =
{"file-type", no_argument, 0, 'p'},
{"si", no_argument, 0, 'H'},
{"ignore", required_argument, 0, 'I'},
{"indicator-style", required_argument, 0, 14},
{"indicator-style", required_argument, 0, INDICATOR_STYLE_OPTION},
{"dereference", no_argument, 0, 'L'},
{"literal", no_argument, 0, 'N'},
{"quote-name", no_argument, 0, 'Q'},
{"quoting-style", required_argument, 0, 15},
{"quoting-style", required_argument, 0, QUOTING_STYLE_OPTION},
{"recursive", no_argument, 0, 'R'},
{"format", required_argument, 0, 12},
{"show-control-chars", no_argument, 0, 16},
{"sort", required_argument, 0, 10},
{"format", required_argument, 0, FORMAT_OPTION},
{"show-control-chars", no_argument, 0, SHOW_CONTROL_CHARS_OPTION},
{"sort", required_argument, 0, SORT_OPTION},
{"tabsize", required_argument, 0, 'T'},
{"time", required_argument, 0, 11},
{"color", optional_argument, 0, 13},
{"block-size", required_argument, 0, 17},
{"time", required_argument, 0, TIME_OPTION},
{"color", optional_argument, 0, COLOR_OPTION},
{"block-size", required_argument, 0, BLOCK_SIZE_OPTION},
{GETOPT_HELP_OPTION_DECL},
{GETOPT_VERSION_OPTION_DECL},
{NULL, 0, NULL, 0}
@@ -845,8 +878,9 @@ main (int argc, char **argv)
format_needs_stat = sort_type == sort_time || sort_type == sort_size
|| format == long_format
|| trace_links || trace_dirs || indicator_style != none
|| print_block_size || print_inode || print_with_color;
|| trace_links || trace_dirs || print_block_size || print_inode;
format_needs_type = (format_needs_stat == 0
&& (print_with_color || indicator_style != none));
if (dired && format == long_format)
{
@@ -864,13 +898,13 @@ main (int argc, char **argv)
dir_defaulted = 0;
for (; i < argc; i++)
{
gobble_file (argv[i], 1, "");
gobble_file (argv[i], unknown, 1, "");
}
if (dir_defaulted)
{
if (immediate_dirs)
gobble_file (".", 1, "");
gobble_file (".", directory, 1, "");
else
queue_directory (".", 0);
}
@@ -1230,20 +1264,20 @@ decode_switches (int argc, char **argv)
format = one_per_line;
break;
case 10: /* --sort */
case SORT_OPTION:
sort_type = XARGMATCH ("--sort", optarg, sort_args, sort_types);
sort_type_specified = 1;
break;
case 11: /* --time */
case TIME_OPTION:
time_type = XARGMATCH ("--time", optarg, time_args, time_types);
break;
case 12: /* --format */
case FORMAT_OPTION:
format = XARGMATCH ("--format", optarg, format_args, format_types);
break;
case 13: /* --color */
case COLOR_OPTION:
if (optarg)
i = XARGMATCH ("--color", optarg, color_args, color_types);
else
@@ -1264,24 +1298,24 @@ decode_switches (int argc, char **argv)
}
break;
case 14: /* --indicator-style */
case INDICATOR_STYLE_OPTION:
indicator_style = XARGMATCH ("--indicator-style", optarg,
indicator_style_args,
indicator_style_types);
break;
case 15: /* --quoting-style */
case QUOTING_STYLE_OPTION:
set_quoting_style (NULL,
XARGMATCH ("--quoting-style", optarg,
quoting_style_args,
quoting_style_vals));
break;
case 16:
case SHOW_CONTROL_CHARS_OPTION:
qmark_funny_chars = 0;
break;
case 17:
case BLOCK_SIZE_OPTION:
human_block_size (optarg, 1, &output_block_size);
break;
@@ -1701,7 +1735,17 @@ print_dir (const char *name, const char *realname)
while ((next = readdir (reading)) != NULL)
if (file_interesting (next))
total_blocks += gobble_file (next->d_name, 0, name);
{
enum filetype type = unknown;
#if HAVE_STRUCT_DIRENT_D_TYPE
if (next->d_type == DT_DIR || next->d_type == DT_CHR
|| next->d_type == DT_BLK || next->d_type == DT_SOCK
|| next->d_type == DT_FIFO)
type = next->d_type;
#endif
total_blocks += gobble_file (next->d_name, type, 0, name);
}
if (CLOSEDIR (reading))
{
@@ -1812,7 +1856,8 @@ clear_files (void)
Return the number of blocks that the file occupies. */
static uintmax_t
gobble_file (const char *name, int explicit_arg, const char *dirname)
gobble_file (const char *name, enum filetype type, int explicit_arg,
const char *dirname)
{
register uintmax_t blocks;
register int val;
@@ -1829,7 +1874,8 @@ gobble_file (const char *name, int explicit_arg, const char *dirname)
files[files_index].linkmode = 0;
files[files_index].linkok = 0;
if (explicit_arg || format_needs_stat)
if (explicit_arg || format_needs_stat
|| (format_needs_type && type == unknown))
{
/* `path' is the absolute pathname of this file. */
@@ -1937,7 +1983,13 @@ gobble_file (const char *name, int explicit_arg, const char *dirname)
}
}
else
blocks = 0;
{
files[files_index].filetype = type;
#if HAVE_STRUCT_DIRENT_D_TYPE
files[files_index].stat.st_mode = DTTOIF (type);
#endif
blocks = 0;
}
files[files_index].name = xstrdup (name);
files_index++;
@@ -2332,7 +2384,7 @@ print_long_format (const struct fileinfo *f)
if (full_time)
{
fmt = "%a %b %d %H:%M:%S %Y";
fmt = _("%a %b %d %H:%M:%S %Y");
}
else
{
@@ -2345,11 +2397,11 @@ print_long_format (const struct fileinfo *f)
Allow a 1 hour slop factor for what is considered "the future",
to allow for NFS server/client clock disagreement.
Show the year instead of the time of day. */
fmt = "%b %e %Y";
fmt = _("%b %e %Y");
}
else
{
fmt = "%b %e %H:%M";
fmt = _("%b %e %H:%M");
}
}
@@ -2408,9 +2460,6 @@ print_long_format (const struct fileinfo *f)
p += strlen (p);
/* Use strftime rather than ctime, because the former can produce
locale-dependent names for the weekday (%a) and month (%b). */
if ((when_local = localtime (&when)))
{
while (! (s = strftime (p, buf + bufsize - p - 1, fmt, when_local)))

7
src/md5.c Normal file
View File

@@ -0,0 +1,7 @@
#include <config.h>
#include <stdio.h>
#include <sys/types.h>
#include "system.h"
#include "checksum.h"
int algorithm = ALG_MD5;

View File

@@ -1,5 +1,4 @@
/* Compute MD5 checksum of files or strings according to the definition
of MD5 in RFC 1321 from April 1992.
/* Compute MD5 or SHA1 checksum of files or strings
Copyright (C) 1995-2000 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
@@ -24,16 +23,19 @@
#include <stdio.h>
#include <sys/types.h>
#include "md5.h"
#include "getline.h"
#include "system.h"
#include "md5.h"
#include "sha.h"
#include "checksum.h"
#include "getline.h"
#include "closeout.h"
#include "error.h"
/* The official name of this program (e.g., no `g' prefix). */
#define PROGRAM_NAME "md5sum"
#define PROGRAM_NAME (algorithm == ALG_MD5 ? "md5sum" : "shasum")
#define AUTHORS "Ulrich Drepper"
#define AUTHORS "Ulrich Drepper and Scott Miller"
/* Most systems do not distinguish between external and internal
text representations. */
@@ -58,24 +60,44 @@
# endif
#endif
/* The minimum length of a valid digest line in a file produced
by `md5sum FILE' and read by `md5sum --check'. This length does
#define DIGEST_TYPE_STRING(Alg) ((Alg) == ALG_MD5 ? "MD5" : "SHA1")
#define DIGEST_STREAM(Alg) ((Alg) == ALG_MD5 ? md5_stream : sha_stream)
#define DIGEST_BITS(Alg) ((Alg) == ALG_MD5 ? 128 : 160)
#define DIGEST_HEX_BYTES(Alg) (DIGEST_BITS (Alg) / 4)
#define DIGEST_BIN_BYTES(Alg) (DIGEST_BITS (Alg) / 8)
#define MAX_DIGEST_BIN_BYTES MAX (DIGEST_BIN_BYTES (ALG_MD5), \
DIGEST_BIN_BYTES (ALG_SHA1))
/* The minimum length of a valid digest line. 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 */ )
#define MIN_DIGEST_LINE_LENGTH(Alg) \
(DIGEST_HEX_BYTES (Alg) /* length of hexadecimal message digest */ \
+ 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;
/* The minimum length of a valid checksum line for the selected algorithm. */
static int min_digest_line_length;
/* Set to the length of a digest hex string for the selected algorithm. */
static size_t digest_hex_bytes;
/* With --check, don't generate any output.
The exit code indicates success or failure. */
static int status_only = 0;
/* With --check, print a message to standard error warning about each
improperly formatted MD5 checksum line. */
improperly formatted checksum line. */
static int warn = 0;
/* Declared and set via one of the wrapper .c files. */
/* int algorithm = ALG_UNSPECIFIED; */
/* The name this program was run with. */
char *program_name;
@@ -103,25 +125,30 @@ usage (int status)
printf (_("\
Usage: %s [OPTION] [FILE]...\n\
or: %s [OPTION] --check [FILE]\n\
Print or check MD5 checksums.\n\
Print or check %s (%d-bit) checksums.\n\
With no FILE, or when FILE is -, read standard input.\n\
\n\
-b, --binary read files in binary mode (default on DOS/Windows)\n\
-c, --check check MD5 sums against given list\n\
-c, --check check %s sums against given list\n\
-t, --text read files in text mode (default)\n\
\n\
The following two options are useful only when verifying checksums:\n\
--status don't output anything, status code shows success\n\
-w, --warn warn about improperly formated MD5 checksum lines\n\
-w, --warn warn about improperly formated checksum lines\n\
\n\
--help display this help and exit\n\
--version output version information and exit\n\
\n\
The sums are computed as described in RFC 1321. When checking, the input\n\
The sums are computed as described in %s. When checking, the input\n\
should be a former output of this program. The default mode is to print\n\
a line with checksum, a character indicating type (`*' for binary, ` ' for\n\
text), and name for each FILE.\n"),
program_name, program_name);
program_name, program_name,
DIGEST_TYPE_STRING (algorithm),
DIGEST_BITS (algorithm),
DIGEST_TYPE_STRING (algorithm),
(algorithm == ALG_MD5 ? "RFC 1321" : "FIPS-180-1")
);
puts (_("\nReport bugs to <bug-textutils@gnu.org>."));
}
@@ -140,11 +167,11 @@ split_3 (char *s, size_t s_len, unsigned char **u, int *binary, char **w)
while (ISWHITE (s[i]))
++i;
/* 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)))
/* The line must have at least `min_digest_line_length - 1' (or one more, 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] == '\\')
@@ -154,10 +181,10 @@ split_3 (char *s, size_t s_len, unsigned char **u, int *binary, char **w)
}
*u = (unsigned char *) &s[i];
/* The first field has to be the 32-character hexadecimal
/* The first field has to be the n-character hexadecimal
representation of the message digest. If it is not followed
immediately by a white space it's an error. */
i += 32;
i += digest_hex_bytes;
if (!ISWHITE (s[i]))
return 1;
@@ -230,12 +257,13 @@ hex_digits (unsigned char const *s)
return 1;
}
/* 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. */
/* An interface to the function, DIGEST_STREAM, (either md5_stream or sha_stream).
Operate on FILENAME (it may be "-") and put the result in *BIN_RESULT.
Return non-zero upon failure, zero to indicate success. */
static int
md5_file (const char *filename, int binary, unsigned char *md5_result)
digest_file (const char *filename, int binary, unsigned char *bin_result,
int (*digest_stream)(FILE *, void *))
{
FILE *fp;
int err;
@@ -265,7 +293,7 @@ md5_file (const char *filename, int binary, unsigned char *md5_result)
}
}
err = md5_stream (fp, md5_result);
err = (*digest_stream) (fp, bin_result);
if (err)
{
error (0, errno, "%s", filename);
@@ -284,13 +312,13 @@ md5_file (const char *filename, int binary, unsigned char *md5_result)
}
static int
md5_check (const char *checkfile_name)
digest_check (const char *checkfile_name, int (*digest_stream)(FILE *, void *))
{
FILE *checkfile_stream;
int n_properly_formated_lines = 0;
int n_mismatched_checksums = 0;
int n_open_or_read_failures = 0;
unsigned char md5buffer[16];
unsigned char bin_buffer[MAX_DIGEST_BIN_BYTES];
size_t line_number;
char *line;
size_t line_chars_allocated;
@@ -318,7 +346,7 @@ md5_check (const char *checkfile_name)
{
char *filename;
int binary;
unsigned char *md5num;
unsigned char *hex_digest;
int err;
int line_length;
@@ -336,14 +364,15 @@ md5_check (const char *checkfile_name)
if (line[line_length - 1] == '\n')
line[--line_length] = '\0';
err = split_3 (line, line_length, &md5num, &binary, &filename);
if (err || !hex_digits (md5num))
err = split_3 (line, line_length, &hex_digest, &binary, &filename);
if (err || !hex_digits (hex_digest))
{
if (warn)
{
error (0, 0,
_("%s: %lu: improperly formatted MD5 checksum line"),
checkfile_name, (unsigned long) line_number);
_("%s: %lu: improperly formatted %s checksum line"),
checkfile_name, (unsigned long) line_number,
DIGEST_TYPE_STRING (algorithm));
}
}
else
@@ -356,7 +385,7 @@ md5_check (const char *checkfile_name)
++n_properly_formated_lines;
fail = md5_file (filename, binary, md5buffer);
fail = digest_file (filename, binary, bin_buffer, digest_stream);
if (fail)
{
@@ -369,23 +398,24 @@ md5_check (const char *checkfile_name)
}
else
{
size_t digest_bin_bytes = digest_hex_bytes / 2;
size_t cnt;
/* Compare generated binary number with text representation
in check file. Ignore case of hex digits. */
for (cnt = 0; cnt < 16; ++cnt)
for (cnt = 0; cnt < digest_bin_bytes; ++cnt)
{
if (TOLOWER (md5num[2 * cnt]) != bin2hex[md5buffer[cnt] >> 4]
|| (TOLOWER (md5num[2 * cnt + 1])
!= (bin2hex[md5buffer[cnt] & 0xf])))
if (TOLOWER (hex_digest[2 * cnt]) != bin2hex[bin_buffer[cnt] >> 4]
|| (TOLOWER (hex_digest[2 * cnt + 1])
!= (bin2hex[bin_buffer[cnt] & 0xf])))
break;
}
if (cnt != 16)
if (cnt != digest_bin_bytes)
++n_mismatched_checksums;
if (!status_only)
{
printf ("%s: %s\n", filename,
(cnt != 16 ? _("FAILED") : _("OK")));
(cnt != digest_bin_bytes ? _("FAILED") : _("OK")));
fflush (stdout);
}
}
@@ -411,8 +441,8 @@ md5_check (const char *checkfile_name)
if (n_properly_formated_lines == 0)
{
/* Warn if no tests are found. */
error (0, 0, _("%s: no properly formatted MD5 checksum lines found"),
checkfile_name);
error (0, 0, _("%s: no properly formatted %s checksum lines found"),
checkfile_name, DIGEST_TYPE_STRING (algorithm));
}
else
{
@@ -448,7 +478,7 @@ md5_check (const char *checkfile_name)
int
main (int argc, char **argv)
{
unsigned char md5buffer[16];
unsigned char bin_buffer[MAX_DIGEST_BIN_BYTES];
int do_check = 0;
int opt;
char **string = NULL;
@@ -513,6 +543,9 @@ main (int argc, char **argv)
usage (EXIT_FAILURE);
}
min_digest_line_length = MIN_DIGEST_LINE_LENGTH (algorithm);
digest_hex_bytes = DIGEST_HEX_BYTES (algorithm);
if (file_type_specified && do_check)
{
error (0, 0, _("the --binary and --text options are meaningless when \
@@ -553,10 +586,13 @@ verifying checksums"));
for (i = 0; i < n_strings; ++i)
{
size_t cnt;
md5_buffer (string[i], strlen (string[i]), md5buffer);
if (algorithm == ALG_MD5)
md5_buffer (string[i], strlen (string[i]), bin_buffer);
else
sha_buffer (string[i], strlen (string[i]), bin_buffer);
for (cnt = 0; cnt < 16; ++cnt)
printf ("%02x", md5buffer[cnt]);
for (cnt = 0; cnt < (digest_hex_bytes / 2); ++cnt)
printf ("%02x", bin_buffer[cnt]);
printf (" \"%s\"\n", string[i]);
}
@@ -570,7 +606,8 @@ verifying checksums"));
usage (EXIT_FAILURE);
}
err = md5_check ((optind == argc) ? "-" : argv[optind]);
err = digest_check ((optind == argc) ? "-" : argv[optind],
DIGEST_STREAM (algorithm));
}
else
{
@@ -582,7 +619,8 @@ verifying checksums"));
int fail;
char *file = argv[optind];
fail = md5_file (file, binary, md5buffer);
fail = digest_file (file, binary, bin_buffer,
DIGEST_STREAM (algorithm));
err |= fail;
if (!fail)
{
@@ -593,8 +631,8 @@ verifying checksums"));
if (strchr (file, '\n') || strchr (file, '\\'))
putchar ('\\');
for (i = 0; i < 16; ++i)
printf ("%02x", md5buffer[i]);
for (i = 0; i < (digest_hex_bytes / 2); ++i)
printf ("%02x", bin_buffer[i]);
putchar (' ');
if (binary)

View File

@@ -23,6 +23,7 @@
#include <sys/types.h>
#include "system.h"
#include "dirname.h"
#include "error.h"
#include "makepath.h"
#include "modechange.h"
@@ -33,6 +34,8 @@
#define AUTHORS "David MacKenzie"
void strip_trailing_slashes ();
/* The name this program was run with. */
char *program_name;
@@ -77,7 +80,7 @@ main (int argc, char **argv)
{
mode_t newmode;
mode_t parent_mode;
const char *symbolic_mode = NULL;
const char *specified_mode = NULL;
const char *verbose_fmt_string = NULL;
int errors = 0;
int optc;
@@ -101,7 +104,7 @@ main (int argc, char **argv)
create_parents = 1;
break;
case 'm':
symbolic_mode = optarg;
specified_mode = optarg;
break;
case 'v': /* --verbose */
verbose_fmt_string = _("created directory %s");
@@ -119,13 +122,19 @@ main (int argc, char **argv)
usage (1);
}
newmode = S_IRWXUGO & ~ umask (0);
parent_mode = S_IWUSR | S_IXUSR | newmode;
if (symbolic_mode)
newmode = S_IRWXUGO;
{
mode_t umask_value = umask (0);
umask (umask_value); /* Restore the old value. */
parent_mode = (newmode & (~ umask_value)) | S_IWUSR | S_IXUSR;
}
if (specified_mode)
{
struct mode_change *change = mode_compile (symbolic_mode, 0);
struct mode_change *change = mode_compile (specified_mode, 0);
newmode &= ~ umask (0);
if (change == MODE_INVALID)
error (1, 0, _("invalid mode %s"), quote (symbolic_mode));
error (1, 0, _("invalid mode %s"), quote (specified_mode));
else if (change == MODE_MEMORY_EXHAUSTED)
xalloc_die ();
newmode = mode_adjust (newmode, change);
@@ -136,31 +145,66 @@ main (int argc, char **argv)
int fail = 0;
if (create_parents)
{
fail = make_path (argv[optind], newmode, parent_mode,
char *parents = dir_name (argv[optind]);
fail = make_path (parents, parent_mode, parent_mode,
-1, -1, 1, verbose_fmt_string);
free (parents);
/* If we're creating parent directories, then it's ok to remove
trailing slashes. In fact, *not* removing them would lead
to calling `mkdir ("dir/", mode)' for the command `mkdir -p dir/',
and such a call fails on NetBSD systems if `dir' doesn't already
exist. */
/* An alternate approach would be to change make_path to interpret
an argument with a trailing slash as if it also had a trailing
`.'. In fact, that would be more consistent with POSIX, so
FIXME: some day. */
strip_trailing_slashes (argv[optind]);
}
else
if (fail == 0)
{
fail = mkdir (argv[optind], newmode);
const char *dir = argv[optind];
int dir_created;
int t_errno;
fail = make_dir (dir, dir, newmode, &dir_created);
t_errno = errno;
if (fail)
error (0, errno, _("cannot create directory %s"),
quote (argv[optind]));
{
/* make_dir already gave a diagnostic. */
}
else if (!create_parents && !dir_created && (t_errno = EEXIST))
{
/* make_dir `succeeds' when DIR already exists.
In that case, mkdir must fail, unless --parents (-p)
was specified. */
error (0, t_errno, _("cannot create directory %s"),
quote (dir));
fail = 1;
}
else if (verbose_fmt_string)
error (0, 0, verbose_fmt_string, quote (argv[optind]));
error (0, 0, verbose_fmt_string, quote (dir));
/* mkdir(2) is required to honor only the file permission bits.
In particular, it needn't do anything about `special' bits,
so if any were set in newmode, apply them with chmod. */
if (fail == 0 && (newmode & ~S_IRWXUGO))
so if any were set in newmode, apply them with chmod.
This extra step is necessary in some cases when the containing
directory has a default ACL. */
/* Set the permissions only if this directory has just
been created. */
if (fail == 0 && specified_mode && dir_created)
{
fail = chmod (argv[optind], newmode);
fail = chmod (dir, newmode);
if (fail)
error (0, errno, _("cannot set permissions of directory %s"),
quote (argv[optind]));
quote (dir));
}
}
errors |= fail;
if (fail)
errors = 1;
}
exit (errors);

View File

@@ -15,12 +15,7 @@
along with this program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
/* Options:
-m, --mode=mode Set the mode of created fifo's to MODE, which is
symbolic as in chmod and uses the umask as a point of
departure.
David MacKenzie <djm@ai.mit.edu> */
/* David MacKenzie <djm@ai.mit.edu> */
#include <config.h>
#include <stdio.h>
@@ -76,7 +71,7 @@ main (int argc, char **argv)
{
mode_t newmode;
struct mode_change *change;
const char *symbolic_mode;
const char *specified_mode;
int errors = 0;
int optc;
@@ -87,7 +82,7 @@ main (int argc, char **argv)
atexit (close_stdout);
symbolic_mode = NULL;
specified_mode = NULL;
#ifndef S_ISFIFO
error (4, 0, _("fifo files not supported"));
@@ -99,7 +94,7 @@ main (int argc, char **argv)
case 0:
break;
case 'm':
symbolic_mode = optarg;
specified_mode = optarg;
break;
case_GETOPT_HELP_CHAR;
case_GETOPT_VERSION_CHAR (PROGRAM_NAME, AUTHORS);
@@ -114,11 +109,11 @@ main (int argc, char **argv)
usage (1);
}
newmode = ((S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH)
& ~ umask (0));
if (symbolic_mode)
newmode = (S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);
if (specified_mode)
{
change = mode_compile (symbolic_mode, 0);
newmode &= ~ umask (0);
change = mode_compile (specified_mode, 0);
if (change == MODE_INVALID)
error (1, 0, _("invalid mode"));
else if (change == MODE_MEMORY_EXHAUSTED)
@@ -128,11 +123,23 @@ main (int argc, char **argv)
for (; optind < argc; ++optind)
{
if (mkfifo (argv[optind], newmode))
{
error (0, errno, _("cannot make fifo %s"), quote (argv[optind]));
errors = 1;
}
int fail = mkfifo (argv[optind], newmode);
if (fail)
error (0, errno, _("cannot create fifo `%s'"), quote (argv[optind]));
/* If the containing directory happens to have a default ACL, chmod
ensures the file mode permission bits are still set as desired. */
if (fail == 0 && specified_mode)
{
fail = chmod (argv[optind], newmode);
if (fail)
error (0, errno, _("cannot set permissions of fifo `%s'"),
quote (argv[optind]));
}
if (fail)
errors = 1;
}
exit (errors);

View File

@@ -86,7 +86,7 @@ main (int argc, char **argv)
{
mode_t newmode;
struct mode_change *change;
const char *symbolic_mode;
const char *specified_mode;
int optc;
int i_major, i_minor;
long int tmp_major, tmp_minor;
@@ -99,7 +99,7 @@ main (int argc, char **argv)
atexit (close_stdout);
symbolic_mode = NULL;
specified_mode = NULL;
while ((optc = getopt_long (argc, argv, "m:", longopts, NULL)) != -1)
{
@@ -108,7 +108,7 @@ main (int argc, char **argv)
case 0:
break;
case 'm':
symbolic_mode = optarg;
specified_mode = optarg;
break;
case_GETOPT_HELP_CHAR;
case_GETOPT_VERSION_CHAR (PROGRAM_NAME, AUTHORS);
@@ -117,11 +117,11 @@ main (int argc, char **argv)
}
}
newmode = ((S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH)
& ~ umask (0));
if (symbolic_mode)
newmode = (S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);
if (specified_mode)
{
change = mode_compile (symbolic_mode, 0);
newmode &= ~ umask (0);
change = mode_compile (specified_mode, 0);
if (change == MODE_INVALID)
error (1, 0, _("invalid mode"));
else if (change == MODE_MEMORY_EXHAUSTED)
@@ -223,5 +223,16 @@ major and minor device numbers may not be specified for fifo files"));
usage (1);
}
/* Perform an explicit chmod to ensure the file mode permission bits
are set as specified. This extra step is necessary in some cases
when the containing directory has a default ACL. */
if (specified_mode)
{
if (chmod (argv[optind], newmode))
error (0, errno, _("cannot set permissions of `%s'"),
quote (argv[optind]));
}
exit (0);
}

View File

@@ -88,7 +88,6 @@ rm_option_init (struct rm_options *x)
{
x->unlink_dirs = 0;
/* FIXME: maybe this should be 1. The POSIX spec doesn't specify. */
x->ignore_missing_files = 0;
x->recursive = 1;
@@ -145,6 +144,18 @@ is_real_dir (const char *path)
return lstat (path, &stats) == 0 && S_ISDIR (stats.st_mode);
}
static int
strip_trailing_slashes_2 (char *path)
{
char *end_p = path + strlen (path) - 1;
char *slash = end_p;
while (slash > path && *slash == '/')
*slash-- = '\0';
return slash < end_p;
}
/* Move SOURCE onto DEST. Handles cross-filesystem moves.
If SOURCE is a directory, DEST must not exist.
Return 0 if successful, non-zero if an error occurred. */
@@ -233,6 +244,11 @@ do_move (const char *source, const char *dest, const struct cp_options *x)
remove_init ();
fspec_init_file (&fs, dir_to_remove);
/* Remove any trailing slashes. This is necessary if we
took the else branch of movefile. */
strip_trailing_slashes_2 (fs.filename);
status = rm (&fs, 1, &rm_options);
assert (VALID_STATUS (status));
if (status == RM_ERROR)
@@ -251,18 +267,6 @@ do_move (const char *source, const char *dest, const struct cp_options *x)
return fail;
}
static int
strip_trailing_slashes_2 (char *path)
{
char *end_p = path + strlen (path) - 1;
char *slash = end_p;
while (slash > path && *slash == '/')
*slash-- = '\0';
return slash < end_p;
}
/* Move file SOURCE onto DEST. Handles the case when DEST is a directory.
DEST_IS_DIR must be nonzero when DEST is a directory or a symlink to a
directory and zero otherwise.

View File

@@ -77,6 +77,8 @@ enum size_spec
SHORT,
INT,
LONG,
LONG_LONG,
/* FIXME: add INTMAX support, too */
FLOAT_SINGLE,
FLOAT_DOUBLE,
FLOAT_LONG_DOUBLE
@@ -229,7 +231,11 @@ static FILE *in_stream;
/* If nonzero, at least one of the files we read was standard input. */
static int have_read_stdin;
#define LONGEST_INTEGRAL_TYPE long int
#ifdef HAVE_UNSIGNED_LONG_LONG
# define LONGEST_INTEGRAL_TYPE unsigned long long
#else
# define LONGEST_INTEGRAL_TYPE long int
#endif
#define MAX_INTEGRAL_TYPE_SIZE sizeof(LONGEST_INTEGRAL_TYPE)
static enum size_spec integral_type_size[MAX_INTEGRAL_TYPE_SIZE + 1];
@@ -441,6 +447,21 @@ print_long (long unsigned int n_bytes, const char *block,
}
}
#ifdef HAVE_UNSIGNED_LONG_LONG
static void
print_long_long (long unsigned int n_bytes, const char *block,
const char *fmt_string)
{
int i;
for (i = n_bytes / sizeof (unsigned long long); i > 0; i--)
{
unsigned long long tmp = *(const unsigned long long *) block;
printf (fmt_string, tmp);
block += sizeof (unsigned long long);
}
}
#endif
static void
print_float (long unsigned int n_bytes, const char *block,
const char *fmt_string)
@@ -704,7 +725,9 @@ this system doesn't provide a %lu-byte integral type"), s_orig, size);
fmt = SIGNED_DECIMAL;
sprintf (fmt_string, " %%%u%sd",
(field_width = bytes_to_signed_dec_digits[size]),
(size_spec == LONG ? "l" : ""));
(size_spec == LONG ? "l"
: (size_spec == LONG_LONG ? "ll"
: "")));
break;
case 'o':
@@ -756,6 +779,10 @@ this system doesn't provide a %lu-byte integral type"), s_orig, size);
print_function = print_long;
break;
case LONG_LONG:
print_function = print_long_long;
break;
default:
abort ();
}
@@ -976,12 +1003,12 @@ skip (off_t n_skip)
continue;
}
/* The st_size field is valid only for regular files and
directories. FIXME: is the preceding true?
/* The st_size field is valid only for regular files
(and for symbolic links, which cannot occur here).
If the number of bytes left to skip is at least as large as
the size of the current file, we can decrement
n_skip and go on to the next file. */
if (S_ISREG (file_stats.st_mode) || S_ISDIR (file_stats.st_mode))
if (S_ISREG (file_stats.st_mode))
{
if (n_skip >= file_stats.st_size)
{
@@ -1596,6 +1623,9 @@ main (int argc, char **argv)
integral_type_size[sizeof (short int)] = SHORT;
integral_type_size[sizeof (int)] = INT;
integral_type_size[sizeof (long int)] = LONG;
#ifdef HAVE_UNSIGNED_LONG_LONG
integral_type_size[sizeof (long long)] = LONG_LONG;
#endif
for (i = 0; i <= MAX_FP_TYPE_SIZE; i++)
fp_type_size[i] = NO_SIZE;

View File

@@ -22,7 +22,9 @@
#include <pwd.h>
#include <stdio.h>
#include <sys/types.h>
#include "system.h"
#include "error.h"
#include "readutmp.h"
#include "closeout.h"

View File

@@ -861,57 +861,40 @@ main (int argc, char **argv)
? (char **) xmalloc ((argc - 1) * sizeof (char *))
: NULL);
while (1)
while ((c = getopt_long (argc, argv,
"-0123456789abcde::fFh:i::Jl:mn::N:o:rs::S::tTvw:W:",
long_options, NULL))
!= -1)
{
c = getopt_long (argc, argv,
"-0123456789abcde::fFh:i::Jl:mn::N:o:rs::S::tTvw:W:",
long_options, NULL);
if (c == 1) /* Non-option argument. */
if (ISDIGIT (c))
{
char *s;
s = optarg;
if (*s == '+')
{
/* long option --page dominates old `+FIRST_PAGE ...' */
if (first_page_number > 0 || last_page_number > 0)
continue;
++s;
first_last_page (s);
}
else
{
file_names[n_files++] = optarg;
}
}
else
{
if (ISDIGIT (c))
{
accum = accum * 10 + c - '0';
continue;
}
else
{
if (accum > 0)
{
columns = accum;
explicit_columns = TRUE;
accum = 0;
}
}
accum = accum * 10 + c - '0';
continue;
}
if (c == 1)
continue;
if (c == EOF)
break;
if (accum > 0)
{
columns = accum;
explicit_columns = TRUE;
accum = 0;
}
switch (c)
{
case 0: /* getopt long option */
break;
case 1: /* Non-option argument. */
if (*optarg == '+')
{
/* long option --page dominates old `+FIRST_PAGE ...' */
if (first_page_number <= 0 && last_page_number <= 0)
first_last_page (optarg);
}
else
file_names[n_files++] = optarg;
break;
case PAGES_OPTION: /* --pages=FIRST_PAGE[:LAST_PAGE] */
{ /* dominates old opt +... */
if (optarg)

View File

@@ -1,7 +1,7 @@
struct rm_options
{
/* If nonzero, ignore nonexistant files. */
/* If nonzero, ignore nonexistent files. */
int ignore_missing_files;
/* If nonzero, query the user about whether to remove each file. */

7
src/sha1sum.c Normal file
View File

@@ -0,0 +1,7 @@
#include <config.h>
#include <stdio.h>
#include <sys/types.h>
#include "system.h"
#include "checksum.h"
int algorithm = ALG_SHA1;

View File

@@ -83,6 +83,7 @@
#include <getopt.h>
#include <stdio.h>
#include <assert.h>
#include <setjmp.h>
#include <signal.h>
#include <sys/types.h>
@@ -438,7 +439,7 @@ struct Options
static struct option const long_opts[] =
{
{"exact", required_argument, NULL, 'x'},
{"exact", no_argument, NULL, 'x'},
{"force", no_argument, NULL, 'f'},
{"iterations", required_argument, NULL, 'n'},
{"size", required_argument, NULL, 's'},
@@ -990,13 +991,14 @@ fillpattern (int type, unsigned char *r, size_t size)
}
/*
* Fill a buffer with random data.
* size is rounded UP to a multiple of ISAAC_BYTES.
* Fill a buffer, R (of size SIZE_MAX), with random data.
* SIZE is rounded UP to a multiple of ISAAC_BYTES.
*/
static void
fillrand (struct isaac_state *s, word32 *r, size_t size)
fillrand (struct isaac_state *s, word32 *r, size_t size_max, size_t size)
{
size = (size + ISAAC_BYTES - 1) / ISAAC_BYTES;
assert (size <= size_max);
while (size--)
{
@@ -1083,12 +1085,14 @@ dopass (int fd, char const *qname, off_t *sizep, int type,
lim = sizeof r;
if ((off_t) lim > size - offset && size != -1)
{
if (size < offset)
break;
lim = (size_t) (size - offset);
if (!lim)
break;
}
if (type < 0)
fillrand (s, r, lim);
fillrand (s, r, sizeof r, lim);
/* Loop to retry partial writes. */
for (soff = 0; soff < lim; soff += ssize)
{
@@ -1422,17 +1426,33 @@ do_wipefd (int fd, char const *qname, struct isaac_state *s,
size = flags->size;
if (size == -1)
{
size = (S_ISREG (st.st_mode)
? st.st_size
: lseek (fd, (off_t) 0, SEEK_END));
if (size < (S_ISREG (st.st_mode) ? 0 : -1))
/* Accept a length of zero only if it's a regular file.
For any other type of file, try to get the size another way. */
if (S_ISREG (st.st_mode))
{
error (0, 0, _("%s: file has negative size"), qname);
return -1;
size = st.st_size;
if (size < 0)
{
error (0, 0, _("%s: file has negative size"), qname);
return -1;
}
}
else
{
size = lseek (fd, (off_t) 0, SEEK_END);
if (size <= 0)
{
/* We are unable to determine the length, up front.
Let dopass do that as part of its first iteration. */
size = -1;
}
}
if (0 <= size && !(flags->exact))
{
size += ST_BLKSIZE (st) - 1 - (size - 1) % ST_BLKSIZE (st);
/* If in rounding up, we've just overflowed, use the maximum. */
if (size < 0)
size = TYPE_MAXIMUM (off_t);
}

View File

@@ -73,6 +73,7 @@ double strtod ();
not properly sorted. Any other irregular exit must exit with a
status code greater than 1. */
#define SORT_FAILURE 2
#define SORT_OUT_OF_ORDER 1
#define C_DECIMAL_POINT '.'
#define NEGATION_SIGN '-'
@@ -2242,9 +2243,14 @@ but lacks following character offset"));
if (checkonly)
{
if (nfiles > 1)
error (SORT_FAILURE, 0,
_("too many arguments; with -c, there may be at most\
one file argument"));
/* POSIX requires that sort return 1 IFF invoked with -c and the
input is not properly sorted. */
exit (check (files, nfiles) == 0 ? 0 : 1);
exit (check (files, nfiles) == 0 ? EXIT_SUCCESS : SORT_OUT_OF_ORDER);
}
if (!STREQ (outfile, "-"))

View File

@@ -126,7 +126,7 @@
#define CHMOD_MODE_BITS \
(S_ISUID | S_ISGID | S_ISVTX | S_IRWXU | S_IRWXG | S_IRWXO)
#if ST_MTIM_NSEC
#ifdef ST_MTIM_NSEC
# define ST_TIME_CMP_NS(a, b, ns) ((a).ns < (b).ns ? -1 : (a).ns > (b).ns)
#else
# define ST_TIME_CMP_NS(a, b, ns) 0
@@ -427,8 +427,14 @@ char *base_name PARAMS ((char const *));
/* Factor out some of the common --help and --version processing code. */
#define GETOPT_HELP_CHAR 250
#define GETOPT_VERSION_CHAR 251
/* These enum values cannot possibly conflict with the option values
ordinarily used by commands, including CHAR_MAX + 1, etc. Avoid
CHAR_MIN - 1, as it may equal -1, the getopt end-of-options value. */
enum
{
GETOPT_HELP_CHAR = (CHAR_MIN - 2),
GETOPT_VERSION_CHAR = (CHAR_MIN - 3)
};
#define GETOPT_HELP_OPTION_DECL \
"help", no_argument, 0, GETOPT_HELP_CHAR

View File

@@ -334,7 +334,9 @@ main (int argc, char **argv)
date_set++;
}
if (!date_set && optind < argc && !STREQ (argv[optind - 1], "--"))
/* The obsolescent `MMDDhhmm[YY]' form is valid IFF there are
two or more non-option arguments. */
if (!date_set && 2 <= argc - optind && !STREQ (argv[optind - 1], "--"))
{
newtime = posixtime (argv[optind], PDS_TRAILING_YEAR);
if (newtime != (time_t) -1)

View File

@@ -26,6 +26,7 @@
#include <stdio.h>
#include <assert.h>
#include <getopt.h>
#include <sys/types.h>
#include "system.h"
#include "closeout.h"

View File

@@ -21,10 +21,12 @@
#include <getopt.h>
#include <stdio.h>
#include <sys/types.h>
#include "system.h"
#include "error.h"
#include "long-options.h"
#include "readutmp.h"
#include "system.h"
#include "closeout.h"
/* The official name of this program (e.g., no `g' prefix). */

View File

@@ -21,10 +21,12 @@
#include <getopt.h>
#include <stdio.h>
#include <sys/types.h>
#include "system.h"
#include "error.h"
#include "long-options.h"
#include "readutmp.h"
#include "system.h"
#include "closeout.h"
/* The official name of this program (e.g., no `g' prefix). */

View File

@@ -26,11 +26,6 @@
#include <stdio.h>
#include <getopt.h>
#include <sys/types.h>
#include "system.h"
#include "closeout.h"
#include "error.h"
#include "human.h"
#include "safe-read.h"
/* Get mbstate_t, mbrtowc(), wcwidth(). */
#if HAVE_WCHAR_H
@@ -45,6 +40,16 @@
# define iswprint(wc) 1
#endif
/* Include this after wctype.h so that we `#undef' ISPRINT
(from Solaris's euc.h, from widec.h, from wctype.h) before
redefining and using it. */
#include "system.h"
#include "closeout.h"
#include "error.h"
#include "human.h"
#include "safe-read.h"
/* Some systems, like BeOS, have multibyte encodings but lack mbstate_t. */
#if HAVE_MBRTOWC && defined mbstate_t
# define mbrtowc(pwc, s, n, ps) (mbrtowc) (pwc, s, n, 0)

View File

@@ -28,9 +28,11 @@
#include <getopt.h>
#include <stdio.h>
#include <sys/types.h>
#include "system.h"
#include "error.h"
#include "readutmp.h"
#include "system.h"
#include "closeout.h"
/* The official name of this program (e.g., no `g' prefix). */

View File

@@ -46,7 +46,12 @@ usage (int status)
program_name);
else
{
printf (_("Usage: %s [OPTION]... [STRING]...\n"), program_name);
printf (_("\
Usage: %s [STRING]...\n\
or: %s OPTION\n\
"),
program_name, program_name);
printf (_("\
Repeatedly output a line with all specified STRING(s), or `y'.\n\
\n\

Some files were not shown because too many files have changed in this diff Show More