Compare commits

..

843 Commits

Author SHA1 Message Date
Jim Meyering
22cdfc8955 . 1999-08-14 15:37:41 +00:00
Jim Meyering
cb47f7bef7 *** empty log message *** 1999-08-14 12:42:56 +00:00
Jim Meyering
7fda0e1065 Fail-77 if stdin is not a tty. 1999-08-14 12:42:03 +00:00
Jim Meyering
b91360e484 *** empty log message *** 1999-08-14 12:41:34 +00:00
Jim Meyering
4b797e9d5c *** empty log message *** 1999-08-13 08:51:42 +00:00
Jim Meyering
9b5e17f134 *** empty log message *** 1999-08-13 08:02:03 +00:00
Jim Meyering
bee39b77d9 . 1999-08-13 07:57:15 +00:00
Jim Meyering
18eb7260a1 *** empty log message *** 1999-08-12 15:16:12 +00:00
Jim Meyering
531ced1819 Document how to ignore newline during sort 1999-08-12 15:16:04 +00:00
Jim Meyering
b6ee833da0 *** empty log message *** 1999-08-12 15:15:49 +00:00
Jim Meyering
cfd67ae18c *** empty log message *** 1999-08-10 11:02:10 +00:00
Jim Meyering
a26a44baba (usage): Add ls --quoting-style=locale. 1999-08-10 11:00:58 +00:00
Jim Meyering
843d60096e (ARGMATCH_QUOTING_STYLE):
Change from escape_quoting_style to locale_quoting_style.
(argmatch_invalid): Use new quotearg_style primitive for simplicity.
Also, use ARGMATCH_QUOTING_STYLE to quote, instead of quoting ourselves.
1999-08-10 11:00:12 +00:00
Jim Meyering
bcfbd6fab1 (locale_quoting_style): New enum value.
(quotearg_n_style, quotearg_style): New decls.
1999-08-10 10:58:01 +00:00
Jim Meyering
84dc18f1db Include <libintl.h> if ENABLE_NLS.
(_): New macro.
(quoting_style_args, quoting_style_v, quotearg_buffer): Add support
for locale_quoting_style, using _("`") and _("'") for open and close
quote symbols.
Do not quote spaces in escape_quoting_style.
(quotearg_n_style, quotearg_style): New functions.
1999-08-10 10:50:18 +00:00
Jim Meyering
10c7ee785a *** empty log message *** 1999-08-08 20:01:58 +00:00
Jim Meyering
6591e754b2 (usage): Clarify description of --time=WORD. 1999-08-08 20:01:50 +00:00
Jim Meyering
05c804e18f . 1999-08-08 10:18:36 +00:00
Jim Meyering
89e470b8e2 fix typo 1999-08-08 10:16:53 +00:00
Jim Meyering
e26558d720 *** empty log message *** 1999-08-08 10:15:15 +00:00
Jim Meyering
8fd9cfdd3c (count_entry): Remove cast of savedir arg. 1999-08-08 10:15:06 +00:00
Jim Meyering
ca2cd27d3c (copy_dir): Remove cast of savedir arg. 1999-08-08 10:14:45 +00:00
Jim Meyering
8b2c09a944 (change_dir_owner): Remove cast of savedir arg. 1999-08-08 10:14:26 +00:00
Jim Meyering
41a7bbf8e0 (change_dir_mode): Remove cast of savedir arg. 1999-08-08 10:14:01 +00:00
Jim Meyering
08ae72e3a4 (change_dir_group): Remove cast of savedir arg. 1999-08-08 10:13:44 +00:00
Jim Meyering
c127e62803 update prototype 1999-08-08 10:12:55 +00:00
Jim Meyering
0bb442899e (savedir): Change type of name_size parameter to off_t. 1999-08-08 10:12:43 +00:00
Jim Meyering
412590b094 *** empty log message *** 1999-08-08 10:10:20 +00:00
Jim Meyering
6fcaba3a1e *** empty log message *** 1999-08-07 12:16:35 +00:00
Jim Meyering
f5f7082712 *** empty log message *** 1999-08-07 10:46:11 +00:00
Jim Meyering
20c6afc39f *** empty log message *** 1999-08-07 10:45:36 +00:00
Jim Meyering
16fa90f7d0 (po-check): New rule.
(alpha): Make it.
1999-08-07 10:41:00 +00:00
Jim Meyering
aeb6ea6c01 . 1999-08-07 09:59:51 +00:00
Jim Meyering
e1eebd3966 *** empty log message *** 1999-08-07 09:54:55 +00:00
Jim Meyering
e03ffca770 *** empty log message *** 1999-08-07 09:53:59 +00:00
Jim Meyering
2f19e00c90 *** empty log message *** 1999-08-07 09:50:41 +00:00
Jim Meyering
12fbee444c (OtherTable[]): Use tDAY_UNIT for `tomorrow,'
`yesterday,' `today,' and `now' rather than tMINUTE_UNIT.  Of course
with correspondingly smaller numbers for tomorrow and yesterday.
This change does not change the way the code works, since the
grammar rules for the two symbols are analogous.
1999-08-07 09:50:34 +00:00
Jim Meyering
0abcbb7b3d *** empty log message *** 1999-08-07 09:49:50 +00:00
Jim Meyering
b5f2d23a1c *** empty log message *** 1999-08-07 08:25:34 +00:00
Jim Meyering
2d4a921699 *** empty log message *** 1999-08-06 19:24:05 +00:00
Jim Meyering
66f0de09e8 . 1999-08-06 19:23:33 +00:00
Jim Meyering
fed1e6eceb *** empty log message *** 1999-08-06 19:22:43 +00:00
Jim Meyering
505ee4c31c (Follow_mode): Remove comma at end of enumerator list.
Reported by Kaveh Ghazi.
1999-08-06 19:21:05 +00:00
Jim Meyering
dda679e516 *** empty log message *** 1999-08-06 10:22:22 +00:00
Jim Meyering
7cdcf3b47a Honor --help and --version once again, though now
only if POSIXLY_CORRECT is set.
1999-08-06 10:14:52 +00:00
Jim Meyering
e4024a94f8 Include file name in `write error' diagnostics.
(write_bytes): Add output_file parameter and use it.  Update callers.
(mergefps): Likewise.
(merge): Likewise.
(sort): Likewise.
Reported by John Summerfield.
1999-08-06 00:07:59 +00:00
Jim Meyering
a07027bbda *** empty log message *** 1999-08-05 14:45:13 +00:00
Jim Meyering
cf8234804d *** empty log message *** 1999-08-05 14:40:59 +00:00
Jim Meyering
fad7082c96 *** empty log message *** 1999-08-05 12:58:13 +00:00
Jim Meyering
59b21e3f05 *** empty log message *** 1999-08-05 11:19:54 +00:00
Jim Meyering
c0c398ba95 Rename test file from conftestdata to conftest.data
to avoid conflicts with `conftest' on 8+3 filesystems.
Suggestion from Eli Zaretskii.
1999-08-05 11:18:39 +00:00
Jim Meyering
f8b8ef6242 . 1999-08-04 11:37:54 +00:00
Jim Meyering
707f9870ba *** empty log message *** 1999-08-04 11:14:55 +00:00
Jim Meyering
26fe14166f *** empty log message *** 1999-08-04 08:16:05 +00:00
Jim Meyering
1259760b63 *** empty log message *** 1999-08-04 08:14:37 +00:00
Jim Meyering
9f315fd6f8 *** empty log message *** 1999-08-04 08:14:25 +00:00
Jim Meyering
c6c4932d6c *** empty log message *** 1999-08-04 08:13:33 +00:00
Jim Meyering
7a3247e23b (AM_FUNC_GETLINE): Run this test.
(AC_CHECK_FUNCS): Check for getdelim.
1999-08-04 08:10:17 +00:00
Jim Meyering
a6fcc4893f *** empty log message *** 1999-08-04 08:05:17 +00:00
Jim Meyering
4ff62130e9 *** empty log message *** 1999-08-04 08:04:34 +00:00
Jim Meyering
c8d4c53bff *** empty log message *** 1999-08-04 08:03:56 +00:00
Jim Meyering
4606c57a5c *** empty log message *** 1999-08-03 07:47:06 +00:00
Jim Meyering
231c74cf2b *** empty log message *** 1999-08-03 07:46:46 +00:00
Jim Meyering
3cc8a10875 (tail_forever): When following by name and calling recheck
because of exceeding max_n_consecutive_size_changes_between_opens,
`continue' so we don't fall through and (assuming the file finally grew)
get the erroneous `file truncated' message.
1999-08-03 07:43:42 +00:00
Jim Meyering
dd7bb02a99 *** empty log message *** 1999-08-02 08:34:49 +00:00
Jim Meyering
0856c30182 Add a comment. 1999-08-02 08:34:39 +00:00
Jim Meyering
ef315fa054 *** empty log message *** 1999-08-01 11:02:38 +00:00
Jim Meyering
1a1a070926 (usage): Correct description of %S; (00..60, not 00..61).
From Ken Pizzini.
1999-08-01 11:02:28 +00:00
Jim Meyering
113874c5f5 *** empty log message *** 1999-08-01 10:17:31 +00:00
Jim Meyering
58954a525e . 1999-08-01 10:13:13 +00:00
Jim Meyering
f0f1719546 . 1999-08-01 10:09:46 +00:00
Jim Meyering
47aa3de9f4 *** empty log message *** 1999-08-01 10:09:24 +00:00
Jim Meyering
be9c42975f . 1999-08-01 10:01:27 +00:00
Jim Meyering
20b936fbd2 *** empty log message *** 1999-08-01 09:59:51 +00:00
Jim Meyering
75e8fc40f8 (AC_FUNC_MKTIME): Undefine to avoid syntax errors from m4. 1999-08-01 09:59:45 +00:00
Jim Meyering
9624b35110 *** empty log message *** 1999-08-01 09:54:45 +00:00
Jim Meyering
10a0ecfe61 *** empty log message *** 1999-08-01 09:44:42 +00:00
Jim Meyering
b1d0c95b4b *** empty log message *** 1999-08-01 09:33:53 +00:00
Jim Meyering
961afa7d2f *** empty log message *** 1999-08-01 09:33:49 +00:00
Jim Meyering
2ce235df9c *** empty log message *** 1999-08-01 09:32:29 +00:00
Jim Meyering
07432a0f9d New file, which is a preview of what should appear
in the next public autoconf release.
1999-08-01 09:22:38 +00:00
Jim Meyering
8dc0dbec88 *** empty log message *** 1999-08-01 09:05:29 +00:00
Jim Meyering
270f765604 (jm_AC_PREREQ_XSTRTOUMAX): Check whether
<inttypes.h> defines strtoumax as a macro (and not as a
function).
1999-08-01 09:05:17 +00:00
Jim Meyering
d1ea838331 New file. It contains the old contents of
lfs.m4, except that all names with prefix AC_LFS have been
changed to use the prefix AC_SYS_LARGEFILE instead, to be
compatible with future autoconf versions.  Also, some minor m4
quoting problems have been fixed.
1999-08-01 08:59:46 +00:00
Jim Meyering
d3172d80ef (jm_AC_TYPE_UNSIGNED_LONG_LONG): Make sure
that we can shift, multiply and divide unsigned long long
values; Ultrix cc can't do it.
1999-08-01 08:47:11 +00:00
Jim Meyering
c36cde4138 *** empty log message *** 1999-08-01 07:59:08 +00:00
Jim Meyering
71f2c2f9ec (AM_WITH_NLS): Remove unnecessary lines.
Fix typo: $nls_cv_header_intl was misspelled as $nsl_cv_header_intl.
(AM_GNU_GETTEXT): Fix problem with brackets and m4 quoting,
and simplify the shell code.
1999-08-01 07:58:44 +00:00
Jim Meyering
ed0c88b7f7 (quotearg_buffer):
Don't quote spaces if C quoting style.
1999-08-01 07:44:39 +00:00
Jim Meyering
fabd45e6c6 *** empty log message *** 1999-07-31 17:47:36 +00:00
Jim Meyering
08aa2e4bde fix up true/false docs to include a couple sentences from Christy's truefalse package 1999-07-31 17:45:35 +00:00
Jim Meyering
5d4eefe8d8 . 1999-07-31 17:44:02 +00:00
Jim Meyering
fc6aa385f9 *** empty log message *** 1999-07-31 16:11:31 +00:00
Jim Meyering
13cfe05e30 *** empty log message *** 1999-07-31 16:10:52 +00:00
Jim Meyering
e7a73d59e6 *** empty log message *** 1999-07-31 16:09:35 +00:00
Jim Meyering
20e7435ae7 *** empty log message *** 1999-07-31 16:04:23 +00:00
Jim Meyering
555250c779 *** empty log message *** 1999-07-31 09:21:38 +00:00
Jim Meyering
ca47081c5b (tail_forever): Don't call kill if pid is 0.
Detect when `writer_is_dead' also when the writer is some other user.
From Karl Heuer.

(parse_options): Warn if --pid=PID is used without -f.
1999-07-31 09:21:32 +00:00
Jim Meyering
5e8ad5a577 *** empty log message *** 1999-07-31 09:03:43 +00:00
Jim Meyering
b19705597b . 1999-07-30 21:18:37 +00:00
Jim Meyering
e46de77883 . 1999-07-30 21:15:01 +00:00
Jim Meyering
a65fa10c4b *** empty log message *** 1999-07-30 21:13:19 +00:00
Jim Meyering
6e38ee2da0 Include signal.h for kill prototype. 1999-07-30 21:13:05 +00:00
Jim Meyering
b1476fec95 *** empty log message *** 1999-07-30 21:10:59 +00:00
Jim Meyering
48cb109a87 *** empty log message *** 1999-07-30 21:04:18 +00:00
Jim Meyering
f18a0a4331 *** empty log message *** 1999-07-30 21:03:35 +00:00
Jim Meyering
9200ad37c9 document tail's new option: --pid=PID 1999-07-30 21:02:54 +00:00
Jim Meyering
6b51b6027d *** empty log message *** 1999-07-30 20:43:10 +00:00
Jim Meyering
4d70e59a85 New option: --pid=PID.
(pid): New global.
(long_options): Add `pid'.
(usage): Describe it.
(tail_forever): Implement it.
(parse_options): Handle the new option and required arg.
Suggestion and pseudo-code from Karl Heuer.
1999-07-30 20:42:39 +00:00
Jim Meyering
d883ecee8a *** empty log message *** 1999-07-30 19:33:57 +00:00
Jim Meyering
3be49c9564 *** empty log message *** 1999-07-30 19:31:03 +00:00
Jim Meyering
898a08f344 (PID_T_MAX): Define. 1999-07-30 19:29:53 +00:00
Jim Meyering
a765a451e6 Include <sys/types.h> now that linebuffer.h uses
size_t.  This is required on at least SunOS4.  From Kaveh Ghazi.
1999-07-30 19:29:27 +00:00
Jim Meyering
e246ae8765 (usage): Explain about default wrt --hide-control-chars and
--show-control-chars.  Reported by Germano Leichsenring.
1999-07-30 16:01:44 +00:00
Jim Meyering
57f1b329c9 *** empty log message *** 1999-07-30 16:01:26 +00:00
Jim Meyering
998eae92d1 *** empty log message *** 1999-07-28 05:48:55 +00:00
Jim Meyering
eb8c7c7924 (dd_copy): Free the right obuf. 1999-07-27 14:36:36 +00:00
Jim Meyering
bf94a704bc more comments 1999-07-26 09:17:56 +00:00
Jim Meyering
e3a15bed3c add comment 1999-07-26 09:03:15 +00:00
Jim Meyering
4dd5a9b806 (struct File_spec) [n_stat_calls]: Remove unused member. 1999-07-26 09:01:27 +00:00
Jim Meyering
8ddf290477 (tee): Convert from open/fds to using fopen/streams for
output, in preparation for addition of new compression option.
1999-07-26 07:11:27 +00:00
Jim Meyering
a197ef9f3c *** empty log message *** 1999-07-26 06:52:28 +00:00
Jim Meyering
a2d3645e9c (usage): Remove `NEWS'-style paragraph (sorry to have let that in, translators). 1999-07-25 09:30:35 +00:00
Jim Meyering
edc46711dd *** empty log message *** 1999-07-25 08:47:36 +00:00
Jim Meyering
06db9a8db3 *** empty log message *** 1999-07-25 08:27:24 +00:00
Jim Meyering
096564b06c . 1999-07-25 08:10:14 +00:00
Jim Meyering
0476aba87e . 1999-07-24 21:16:37 +00:00
Jim Meyering
8082ce8f53 add to comment 1999-07-24 09:40:23 +00:00
Jim Meyering
7b5a5af07f (PTR_ALIGN, ROUND_UP_OFFSET): New macros.
(dd_copy): Use those to page-align both the input and output buffers.
1999-07-24 09:36:29 +00:00
Jim Meyering
c4731cc3f0 (options): Avoid Solaris' broken /usr/ucb/tr by
removing offending use of tr altogether and removing hyphens with sed.
Reported by Kaveh Ghazi.
1999-07-21 15:56:15 +00:00
Jim Meyering
a19cffba7e *** empty log message *** 1999-07-21 15:08:41 +00:00
Jim Meyering
f9fce0782d *** empty log message *** 1999-07-21 15:07:58 +00:00
Jim Meyering
1aa01e7b7b *** empty log message *** 1999-07-21 14:55:19 +00:00
Jim Meyering
8478414c5d update comments 1999-07-20 18:52:05 +00:00
Jim Meyering
bca7546dcd (translate_040_to_space) [MOUNTED_GETMNTENT1]: New function.
(read_filesystem_list) [MOUNTED_GETMNTENT1]: Use it.
1999-07-20 18:41:58 +00:00
Jim Meyering
c7582bc4ab *** empty log message *** 1999-07-20 17:08:37 +00:00
Jim Meyering
0cae6713e7 *** empty log message *** 1999-07-20 17:06:53 +00:00
Jim Meyering
9c2d071799 (AC_REPLACE_FUNCS): Add memmove. 1999-07-20 17:06:50 +00:00
Jim Meyering
35c14d81cf wc vs. POSIXLY_CORRECT 1999-07-20 08:03:49 +00:00
Jim Meyering
7387f60b85 (posixly_correct): Declare global.
(write_counts): Use it to select printf formats.
(main): Set posixly_correct from the POSIXLY_CORRECT envvar.
From Peter Moulder.
1999-07-20 07:56:59 +00:00
Jim Meyering
8e369dfcaa remove @key uses, rewrite --sep-string, small cleanups 1999-07-18 13:58:57 +00:00
Jim Meyering
196c0a27f0 . 1999-07-18 13:33:04 +00:00
Jim Meyering
bc1d502816 . 1999-07-18 11:21:58 +00:00
Jim Meyering
9ea7513f11 (noinst_HEADERS): Add getpagesize.h. 1999-07-15 16:16:24 +00:00
Jim Meyering
e7328f4f56 . 1999-07-15 16:15:17 +00:00
Jim Meyering
2a0577baa1 *** empty log message *** 1999-07-15 16:14:56 +00:00
Jim Meyering
6dc48e999d Revert the 1999-02-15 change. 1999-07-15 16:14:13 +00:00
Jim Meyering
f382570992 Revert the 1999-02-15 change and
add --text for individual tests.  Reported by Eli Zaretskii.
1999-07-15 16:13:47 +00:00
Jim Meyering
1e99421584 *** empty log message *** 1999-07-15 16:07:34 +00:00
Jim Meyering
a06c23be9b Document new tail options. 1999-07-15 16:07:15 +00:00
Jim Meyering
d3defdfba8 *** empty log message *** 1999-07-15 12:10:44 +00:00
Jim Meyering
5db7818497 Include getpagesize.h.
(ROUND_UP_TO_MODULUS): Define.
(dd_copy): Page-align the input buffer.
Based on a patch from Scott Lurndal.
1999-07-15 12:06:18 +00:00
Jim Meyering
1950561a91 . 1999-07-15 09:31:44 +00:00
Jim Meyering
13b5f7bc46 *** empty log message *** 1999-07-15 09:31:34 +00:00
Jim Meyering
5c5d74ef09 *** empty log message *** 1999-07-15 09:28:43 +00:00
Jim Meyering
dd408ec740 *** empty log message *** 1999-07-15 09:11:24 +00:00
Jim Meyering
474e7801ff (AC_CHECK_FUNCS): Check for getpagesize. 1999-07-15 09:11:13 +00:00
Jim Meyering
6970bbc17b (get_fs_usage) [STATFS_TRUNCATES_BLOCK_COUNTS]:
Work around SunOS botch also when block size is different from 1k.
1999-07-15 07:50:06 +00:00
Jim Meyering
db26cba77c *** empty log message *** 1999-07-15 07:49:28 +00:00
Jim Meyering
f1052fb45f *** empty log message *** 1999-07-12 20:07:37 +00:00
Jim Meyering
fae10f70e0 (mempcpy): Define only if not already defined.
Reported by Collin Rogowski.
1999-07-12 08:37:31 +00:00
Jim Meyering
f484303d9e *** empty log message *** 1999-07-12 08:37:21 +00:00
Jim Meyering
3f622f08e5 (recheck): Use assert instead of unnecessary close_fd.
Remove a couple unnecessary FIXME comments.
1999-07-11 09:05:31 +00:00
Jim Meyering
8287d3c4c4 *** empty log message *** 1999-07-10 16:40:33 +00:00
Jim Meyering
8b86e4459b cpp indent and split a long line 1999-07-10 16:40:16 +00:00
Jim Meyering
c44e7a8352 use a space, not TAB after #define 1999-07-10 16:36:56 +00:00
Jim Meyering
d11ec4a80f cpp indent 1999-07-10 16:36:11 +00:00
Jim Meyering
54651dc73c (struct File_spec) [tailable]: Rename from `missing' and
document.  Change all uses and locals like was_missing to was_tailable.
Invert expressions as appropriate.
(reopen_inaccessible_files): Rename from allow_missing.
(sleep_interval): Describe.
(--allow-missing): Deprecate.
(--retry): New option, equivalent to --allow-missing.
(usage): Document name vs. descriptor differences.
Refer to manual for descriptions of --max-unchanged-stats=N
and --max-consecutive-size-changes=N.
(valid_file_spec): New function.
(recheck): Assert valid_file_spec.
Remove dead else-if block (suggestion from Eli Zaretskii).
Adjust stmts that set f->tailable -- unlike for `missing', tailable
doesn't depend on errno == ENOENT.
(parse_options): Give a warning if --retry is used when not following
by name.
1999-07-10 12:24:10 +00:00
Jim Meyering
ae1e1e5e19 (struct File_spec): New member, errnum.
(recheck): Record the new value of errno in f->errnum.  Don't
output an error message unless the new value of errno differs from
the old one.  Output a message if previously-inaccessible file
becomes accessible.
(tail_forever): Always recheck files whose fd is negative.  If the
file cannot be fstat'ed, record the errno value in f[i].errnum.
(tail_file): If the file cannot be open, record the errno value in
f->errnum.  If it can be opened, initialize f->errnum to zero.  If
it's a non-regular non-fifo file, initialize f->errnum to -1.
1999-07-10 09:56:37 +00:00
Jim Meyering
647e6ab644 *** empty log message *** 1999-07-10 08:44:58 +00:00
Jim Meyering
41e1351fca Import version 1.012. 1999-07-10 08:44:49 +00:00
Jim Meyering
1b5283ca7a *** empty log message *** 1999-07-10 07:37:39 +00:00
Jim Meyering
dd7e9b194e *** empty log message *** 1999-07-10 07:34:52 +00:00
Jim Meyering
40c0f14648 Import version 1.011. 1999-07-10 07:28:05 +00:00
Jim Meyering
7f44579325 . 1999-07-10 07:17:02 +00:00
Jim Meyering
171778bed3 *** empty log message *** 1999-07-09 12:51:18 +00:00
Jim Meyering
e7f7f3da11 reinclude memcoll.h (mistakenly removed by me) 1999-07-04 10:41:26 +00:00
Jim Meyering
1ccaa26ea4 *** empty log message *** 1999-07-04 10:40:15 +00:00
Jim Meyering
376c3fe740 [!defined strtoumax]: Declare strtoumax. 1999-07-04 10:40:04 +00:00
Jim Meyering
08da7047d0 . 1999-07-04 10:38:37 +00:00
Jim Meyering
0aa86039dd *** empty log message *** 1999-07-04 10:33:50 +00:00
Jim Meyering
bfd09e35cc (readline): Leave room for an extra byte
after the newline; comm needs this for memcoll.
1999-07-04 10:31:01 +00:00
Jim Meyering
115372366e Add support for LC_COLLATE locale.
Include hard-locale.h, linebuffer.h, memcoll.h.
(struct line): New member `buf', replacing `beg' and `lim'.
All uses changed.
(hard_LC_COLLATE): New var.
(main): Initialize it.
(get_line): Use readline to read the line,
instead of doing it by hand.
That way, we get a buffer that we can pass to memcoll.
(keycmp): Use memcoll to compare lines if hard_LC_COLLATE is nonzero.
1999-07-04 10:28:08 +00:00
Jim Meyering
d67adf2b8c Include hard-locale.h, memcoll.h.
(hard_LC_COLLATE, hard_LC_CTYPE, hard_LC_TIME): New variables,
replacing `need_locale'.
(memcoll): Move to lib/memcoll.c.
(keycompare): No need to alloc (0), since our caller now does it.
(compare): alloca (0) before returning.
(my_setlocale): Remove; hard_locale now dows this.
(main): Invoke setlocale, bindtextdomain, and textdomain before
invoking anything that might print an error.
Use hard_locale to determine which locales are hard.
1999-07-04 10:23:19 +00:00
Jim Meyering
3ad83e6ad0 Include hard-locale.h, memcoll.h.
(hard_LC_COLLATE): New variable.
(compare_files): Use memcoll to compare if hard_LC_COLLATE.
(main): Initialize hard_LC_COLLATE from locale.
1999-07-04 10:22:25 +00:00
Jim Meyering
ad72fa61c8 Document locale-specific mode for comm. 1999-07-04 10:21:39 +00:00
Jim Meyering
c3ee42e3b0 *** empty log message *** 1999-07-04 10:16:28 +00:00
Jim Meyering
ca3b34f491 (proc_text, check_section, main):
Use size_t, not int, for lengths.
Lines now contain trailing newline.
Adapt for readline changes.
1999-07-04 10:15:45 +00:00
Jim Meyering
cdcf38b40f (find_field, different): Use size_t, not int, for lengths.
(writeline): Lines now contain trailing newline.
(check_file): Use size_t, not int, for lengths.
1999-07-04 10:14:03 +00:00
Jim Meyering
3423927cfa (writeline): Lines now contain trailing newline. 1999-07-04 10:09:44 +00:00
Jim Meyering
fac400a428 [struct linebuffer] (size): Declare to be of type size_t, not long.
[struct linebuffer] (length): Likewise.
1999-07-04 10:08:56 +00:00
Jim Meyering
894e9948f4 (readline): Append trailing newline to line. 1999-07-04 10:06:42 +00:00
Jim Meyering
ed1684742a (memrchr): Ifdef out this unused function. 1999-07-04 10:03:05 +00:00
Jim Meyering
468dd2822c *** empty log message *** 1999-07-04 09:51:09 +00:00
Jim Meyering
90f1e86e58 *** empty log message *** 1999-07-04 09:46:14 +00:00
Jim Meyering
bfbd79ca59 New test case for Paul's 1999-06-03 fix. 1999-07-04 09:46:07 +00:00
Jim Meyering
fb71ae4c86 (xfields): Only <blank>s separate fields, not <space>s. 1999-07-04 09:40:46 +00:00
Jim Meyering
5b09432a60 . 1999-07-04 09:37:57 +00:00
Jim Meyering
3ba3797506 Use lower case characters in sc{} context.
Reported by Eli Zaretskii.
1999-07-04 09:05:08 +00:00
Jim Meyering
a64b525ff4 *** empty log message *** 1999-07-04 08:48:02 +00:00
Jim Meyering
56533a5671 (enum human_inexact_style): New enum.
(human_readable_inexact): New decl.
1999-07-04 08:47:49 +00:00
Jim Meyering
8999870c56 (human_readable): New function.
(human_readable_inexact): Renamed from human_readable, with new arg
INEXACT_STYLE.  Add support for ceiling and floor.
1999-07-04 08:47:28 +00:00
Jim Meyering
40540367af (print_header): Conform to POSIX if posix_format).
(df_readable): Take ceiling if posix_format.
(ceil_percent): New function.
(show_dev): Take ceiling of percent if posix_format.
Align with POSIX-conforming header if posix_format.
1999-07-04 08:47:08 +00:00
Jim Meyering
0806bbf608 *** empty log message *** 1999-07-04 08:35:05 +00:00
Jim Meyering
589cf443b9 (__strtol): Remove decl; it doesn't work if __strtol
expands to a macro, which occurs in HP-UX 10.20 with strtoumax.
(strtol, strtoul): New decls (for pre-ANSI hosts), to replace
the above decl.
1999-07-04 08:34:31 +00:00
Jim Meyering
0430c3c938 . 1999-05-27 13:08:29 +00:00
Jim Meyering
db358e3feb *** empty log message *** 1999-05-27 13:08:19 +00:00
Jim Meyering
032571f565 Fix non-portable use of `tr' that caused this test
to fail when run with a SysV-style tr.  Based on a patch from Kaveh Ghazi.
1999-05-25 16:43:57 +00:00
Jim Meyering
b38198f365 (Squeezing): Remove misleading square brackets
from SET1 in the one-word-per-line example.
1999-05-25 16:38:19 +00:00
Jim Meyering
0e39b529b6 (copy_internal): Don't apply the umask in move_mode.
Otherwise, `mv' would not preserve the permissions when copying
between partitions.  Reported by David Godfrey
1999-05-23 23:23:55 +00:00
Jim Meyering
3957028d28 *** empty log message *** 1999-05-23 23:07:26 +00:00
Jim Meyering
97c9216e92 . 1999-05-23 21:06:36 +00:00
Jim Meyering
f914ebb255 *** empty log message *** 1999-05-23 20:46:23 +00:00
Jim Meyering
3fed986eee *** empty log message *** 1999-05-23 20:45:34 +00:00
Jim Meyering
5cd334b32e . 1999-05-23 20:44:48 +00:00
Jim Meyering
a54b71f493 *** empty log message *** 1999-05-23 20:43:11 +00:00
Jim Meyering
08f55c4b7c Correct erroneous expected output from the `cp -f foo foo' tests. 1999-05-23 20:42:25 +00:00
Jim Meyering
994746ffe9 (libfu_a_SOURCES): Add same.c.
(noinst_HEADERS): Add same.h.
1999-05-23 20:40:59 +00:00
Jim Meyering
645015312e Remove today's earlier misguided attempts.
Add a single condition to the existing sameness test.
1999-05-23 20:37:16 +00:00
Jim Meyering
642d250781 Include same.h.
(copy_internal): Qualify SAME_INODE test with (link-count == 1
|| same_name(...)).
1999-05-23 19:45:33 +00:00
Jim Meyering
00fbb65ec1 *** empty log message *** 1999-05-23 19:43:10 +00:00
Jim Meyering
0e96b5d2e7 New file (function extracted from ln.c). 1999-05-23 19:42:59 +00:00
Jim Meyering
2a8c9424f0 (same_name): Remove function.
<same.h>: Include this instead.
<dirname.h>: No longer include this.
1999-05-23 19:41:19 +00:00
Jim Meyering
96074cef79 *** empty log message *** 1999-05-23 19:38:53 +00:00
Jim Meyering
27893412b2 white-space tweak 1999-05-23 19:27:36 +00:00
Jim Meyering
ff08632036 white-space tweak 1999-05-23 19:27:07 +00:00
Jim Meyering
0868b5794a (copy_internal): Make it so `mv -f FILE FILE' does not remove FILE.
Based on a patch from Chris Yeo.
1999-05-23 14:52:32 +00:00
Jim Meyering
46945ad760 *** empty log message *** 1999-05-23 14:49:14 +00:00
Jim Meyering
78d7d7b746 *** empty log message *** 1999-05-23 13:36:37 +00:00
Jim Meyering
77cf4d48dd (TESTS): Add force.
(TESTS_ENVIRONMENT): Change PATH to be absolute.
1999-05-23 13:36:14 +00:00
Jim Meyering
e7eeacebbc *** empty log message *** 1999-05-23 04:19:10 +00:00
Jim Meyering
dee24e9fac *** empty log message *** 1999-05-23 04:01:55 +00:00
Jim Meyering
65ffd691ee *** empty log message *** 1999-05-23 03:59:08 +00:00
Jim Meyering
80ef68e006 *** empty log message *** 1999-05-22 22:10:34 +00:00
Jim Meyering
b5b54d2fed *** empty log message *** 1999-05-22 22:02:54 +00:00
Jim Meyering
1f2dc06993 *** empty log message *** 1999-05-22 22:02:00 +00:00
Jim Meyering
2b477f5dc4 (AC_REPLACE_FUNCS): Add memchr. 1999-05-22 22:00:42 +00:00
Jim Meyering
39d0a166c5 *** empty log message *** 1999-05-22 16:56:40 +00:00
Jim Meyering
dae50ead45 *** empty log message *** 1999-05-22 12:53:07 +00:00
Jim Meyering
be6aea6fb9 Document locale-specific changes to `sort',
as well as the new, POSIX-compliant definition of line comparison,
and -g's more careful treatment of NaNs, infinities and zeros.
1999-05-22 12:52:41 +00:00
Jim Meyering
9e48e223db (general_numcompare): Put exceptional cases
first, not last, to be consistent with -M.
1999-05-22 12:52:14 +00:00
Jim Meyering
59b22bd058 *** empty log message *** 1999-05-22 04:30:36 +00:00
Jim Meyering
77d5a18a9b *** empty log message *** 1999-05-22 04:29:30 +00:00
Jim Meyering
4539e57b3c . 1999-05-22 04:24:10 +00:00
Jim Meyering
668807df85 . 1999-05-22 02:53:08 +00:00
Jim Meyering
b66bd5f56c *** empty log message *** 1999-05-22 02:48:22 +00:00
Jim Meyering
7bac5533d7 (strtod): Declare if STDC_HEADERS is not defined.
(general_numcompare): Use strtod, not xstrtod.
Do not consider partial conversions to be errors.
Put -infinity at the start, and +infinity at the end;
follow +infinity with NaNs (sorted by bit pattern),
and finally by conversion errors.
1999-05-22 02:47:45 +00:00
Jim Meyering
28c635adb2 (use-nl): New test from Paul Eggert. 1999-05-22 02:41:39 +00:00
Jim Meyering
125ce0f85c tweak comment 1999-05-22 02:37:47 +00:00
Jim Meyering
157c31573e (11d): Reverse lines in expected output to reflect latest change. 1999-05-22 02:37:10 +00:00
Jim Meyering
67fbe7e2a0 remove trailing newline 1999-05-21 20:47:18 +00:00
Jim Meyering
c734236a6f *** empty log message *** 1999-05-21 20:24:39 +00:00
Jim Meyering
d6261d35c9 Treat the trailing newline as part of the line, as required by POSIX.2.
(struct line, findlines, compare, checkfp, mergefps, sort):
A line now includes its trailing newline.
(findlines): Do not replace newline with NUL.
(memcoll, keycompare): Work even if the data to be compared are
adjacent strings; this is possible now that lines contain the
trailing newline.
(fillbuf): Always have an unused byte at the end of the	buffer,
since memcoll and keycompare want to modify a byte after the last line.
(sortalloc, mergealloc): Increase by 1, for trailing byte.
1999-05-21 20:24:19 +00:00
Jim Meyering
db0d476b12 *** empty log message *** 1999-05-21 19:53:05 +00:00
Jim Meyering
07add9a796 . 1999-05-20 20:12:17 +00:00
Jim Meyering
46e594f9bc [AC_SEARCH_LIBS]: Quote name in undefine.
Add a colon after each `then' in case $4 is empty.
1999-05-20 20:12:12 +00:00
Jim Meyering
6501594508 . 1999-05-20 20:10:17 +00:00
Jim Meyering
d60127857c . 1999-05-20 16:51:40 +00:00
Jim Meyering
0a4ebdb1d3 *** empty log message *** 1999-05-20 16:51:29 +00:00
Jim Meyering
559f32b40d Add test case from Paul Eggert. 1999-05-20 16:48:56 +00:00
Jim Meyering
bffbff4ff2 *** empty log message *** 1999-05-20 16:29:51 +00:00
Jim Meyering
d30365509d (keycompare): Ignore any length difference if the
localized comparison says the strings are equal.
1999-05-20 16:29:38 +00:00
Jim Meyering
9a27ea2eb2 (memcoll, keycompare, compare): Handle NUL
characters properly when comparing with LC_COLLATE semantics.
(NLS_MEMCMP): Remove.
(memcoll): Renamed from strncoll.
Take separate lengths for each string.
This function is now invoked only when need_locale.
(keycompare): Don't copy strings when ignore and translate
are both NULL.
1999-05-20 16:09:12 +00:00
Jim Meyering
61b2bceab7 (MONTHTAB_CONST): Renamed from NLS_CONST; the use
is also changed.  Define to const also if !HAVE_NL_LANGINFO.

(usage): `,' -> `;' (English typo).
1999-05-20 03:52:15 +00:00
Jim Meyering
0f5bb7dd4e add the comment to go with last change 1999-05-20 03:49:25 +00:00
Jim Meyering
a0766fb80f (get_date): Let mktime deduce tm_isdst if we
have an absolute timestamp, or if the relative timestamp
mentions days, months, or years.
1999-05-20 03:47:24 +00:00
Jim Meyering
867c8b0e85 . 1999-05-19 14:31:53 +00:00
Jim Meyering
98270d63fb (main): When stdout is in binary mode, make sure all
input files are also read in binary mode.
1999-05-18 14:13:33 +00:00
Jim Meyering
d9076a130e *** empty log message *** 1999-05-17 13:10:53 +00:00
Jim Meyering
8d5798a538 *** empty log message *** 1999-05-17 13:10:31 +00:00
Jim Meyering
1ee4fffc88 (human_readable): Allow from_block_size to be zero. 1999-05-17 13:03:46 +00:00
Jim Meyering
4fd5e02337 . 1999-05-16 19:13:59 +00:00
Jim Meyering
92462cca2a . 1999-05-16 19:11:16 +00:00
Jim Meyering
a162f70539 *** empty log message *** 1999-05-16 19:09:25 +00:00
Jim Meyering
cbdd9172f9 . 1999-05-16 16:54:01 +00:00
Jim Meyering
bc48b59612 *** empty log message *** 1999-05-16 16:53:02 +00:00
Jim Meyering
901dc5cba9 *** empty log message *** 1999-05-16 16:43:22 +00:00
Jim Meyering
108ff5810f Don't autodetect the locale of numbers and
months, as this conflicts with POSIX.2 and is tricky to boot.

(FLOATING_COMMA, NLS_STRNCMP, NLS_MAX_GROUPS,
NLS_ONE_CHARACTER_STRING): Remove macros no longer used.

(nls_grouping, nls_fraction_found, nls_month_found, nos_monthtab,
nls_months_collide, nls_keyhead, us_monthtab): Remove variables no
longer used.

(struct nls_keyfield): Remove types no longer used.

(strncoll_s2_readonly, nls_set_fraction, look_for_fraction,
nls_month_is_either_locale, nls_numeric_format): Remove functions no
longer used.

(monthtab): Now has the role that us_monthtab had, but it's const only
if ENABLE_NLS is not defined.

(C_DECIMAL_POINT): Renamed from FLOATING_POINT.  All uses changed.
(MONTHS_PER_YEAR): Renamed from NLS_NUM_MONTHS.  All uses changed.
(struct_month_cmp): Renamed from nls_sort_month_comp.  All uses changed.
Use strcmp, not strcoll, since the user doesn't care about collating
here.

(inittables): Read locale data into monthtab, rather than modifying a
separate month table and futzing with indirection.  Do not worry about
colliding months, since we no longer autodetect month locale.

(fraccompare): Don't set no-longer-used variable nls_fraction_found.

(getmonth): Use strncmp to compare months, since user doesn't care
about collating here.  Fix bug where code incorrectly assumed that
strlen (monthtab[lo].name) == strlen (monthtab[ix].name).

(keycompare, main): Don't autodetect month locale.

(compare): Don't use NLS_MEMCP in code that can't be executed if
need_locale is false, as NLS_MEMCP is equivalent to memcmp in that
case.

(sort, insertkey, main): Don't autodetect numeric locale.
1999-05-16 16:18:46 +00:00
Jim Meyering
4b11c1f734 *** empty log message *** 1999-05-16 15:50:56 +00:00
Jim Meyering
3cf365bf7e *** empty log message *** 1999-05-16 15:50:04 +00:00
Jim Meyering
f2a1097c92 . 1999-05-16 15:48:43 +00:00
Jim Meyering
3d2009b52d New file to override autoconf's AC_SEARCH_LIBS. 1999-05-16 15:48:11 +00:00
Jim Meyering
73a206d970 . 1999-05-15 06:13:00 +00:00
Jim Meyering
dad89f8b93 . 1999-05-15 05:46:45 +00:00
Jim Meyering
23d3bb9416 (usage): Whoops. 1999-05-15 05:46:12 +00:00
Jim Meyering
cd0c914437 *** empty log message *** 1999-05-15 05:42:55 +00:00
Jim Meyering
dace9c7477 . 1999-05-15 05:30:51 +00:00
Jim Meyering
1acf1ddd65 (trailing-sp): New test for this fix. 1999-05-15 05:28:51 +00:00
Jim Meyering
771bc6ea9d (xfields): Don't interpret a trailing blank as a
delimiter when e.g. -t: was specified.  From Tim Smithers.
1999-05-15 05:28:16 +00:00
Jim Meyering
634a39aad5 (getugroups): Don't dereference a null pointer when
running `id USER' for some USER that is listed on the RHS in /etc/group.
From Sander van Malssen.
Add some curly braces, use STREQ, reverse the sense of a test
and use `continue' to save a level of nesting.
1999-05-15 04:50:26 +00:00
Jim Meyering
7af9c3c085 *** empty log message *** 1999-05-15 04:11:13 +00:00
Jim Meyering
d8c0345769 *** empty log message *** 1999-05-15 04:08:29 +00:00
Jim Meyering
0a25564c1c (open_maybe_create): Handle Solaris' failure mode when
FILE is a directory.  Reported by Vin Shelton.
1999-05-15 04:06:51 +00:00
Jim Meyering
7565800a11 (main): When asking for info on an explicit file name,
just warn rather than failing if the table of mounted filesystems
cannot be read.
1999-05-15 01:53:21 +00:00
Jim Meyering
2d97b1c61b (version_etc): Put version info and author names
on the first two lines respectively rather than putting the three
lines of copyright info between them.
1999-05-14 17:11:03 +00:00
Jim Meyering
1fdc84d5a2 *** empty log message *** 1999-05-14 16:59:46 +00:00
Jim Meyering
c93ac403ed Include <string.h> or <strings.h> for strlen prototype. 1999-05-13 20:48:44 +00:00
Jim Meyering
4c9f46a4a1 [__GLIBC__ >= 2]: #if-out prototypes. 1999-05-13 20:44:45 +00:00
Jim Meyering
59d16049d8 (pop_dir): Cast length to `int' to avoid a warning on
64-bit systems.  From Ulrich Drepper.
1999-05-13 20:42:45 +00:00
Jim Meyering
5a83986f79 (main): Put `u' for -u in getopt_long's string argument.
Remove the `R'.
1999-05-12 16:50:54 +00:00
Jim Meyering
150ca569b5 *** empty log message *** 1999-05-12 16:01:29 +00:00
Jim Meyering
048a38dc54 Use `%%' place-holder that Makefile.am rule expects. 1999-05-12 15:54:52 +00:00
Jim Meyering
ece1dc4e51 (usage): Split the --help message into two pieces so that
neither is longer than 2048.  For Irix4's cc.  Reported by Kaveh Ghazi.
1999-05-12 14:58:30 +00:00
Jim Meyering
c1a461273d (usage): Split --help message into two pieces so that
Split the --help message into two pieces so that neither is longer
than 2048.  For Irix4's cc.  Reported by Kaveh Ghazi.
1999-05-12 02:13:45 +00:00
Jim Meyering
da36bbf417 *** empty log message *** 1999-05-12 02:10:38 +00:00
Jim Meyering
74e5374045 *** empty log message *** 1999-05-11 16:30:03 +00:00
Jim Meyering
f039432d03 Fix typos in config.h comments. 1999-05-11 16:29:56 +00:00
Jim Meyering
5af7e261fa Fix typos in config.h comments. 1999-05-11 16:29:33 +00:00
Jim Meyering
ce1d9075d7 *** empty log message *** 1999-05-10 17:25:27 +00:00
Jim Meyering
c23f5758dc (AUTHORS): Reflect reality: add Kaveh. 1999-05-10 15:12:24 +00:00
Jim Meyering
af735060cb Expand each `&' character in the gecos field.
(count_ampersands): New function.
(create_fullname): New function.
(print_entry): Use create_fullname here.
(print_long_entry): Use it here, too.
From Kaveh Ghazi.
1999-05-10 14:17:09 +00:00
Jim Meyering
0ff57399ed *** empty log message *** 1999-05-10 05:24:38 +00:00
Jim Meyering
447527eeb5 Reflect renaming: AM_FUNC_MKTIME -> AC_FUNC_MKTIME. 1999-05-10 05:18:30 +00:00
Jim Meyering
d845b9a5a3 Require 2.14.1, since we use newly-renamed AC_FUNC_MKTIME. 1999-05-10 05:17:38 +00:00
Jim Meyering
f1b3fb4f3b Update from libc. 1999-05-10 04:24:49 +00:00
Jim Meyering
94323ee2a7 uncomment final rm 1999-05-09 15:59:27 +00:00
Jim Meyering
c250ac3ddc *** empty log message *** 1999-05-09 15:56:27 +00:00
Jim Meyering
badacafb98 *** empty log message *** 1999-05-09 15:13:41 +00:00
Jim Meyering
d0672fcf74 *** empty log message *** 1999-05-09 15:13:09 +00:00
Jim Meyering
91e23a4607 *** empty log message *** 1999-05-09 15:11:52 +00:00
Jim Meyering
60d62033fb *** empty log message *** 1999-05-09 15:10:33 +00:00
Jim Meyering
d02a83cba4 *** empty log message *** 1999-05-09 15:10:10 +00:00
Jim Meyering
359c6f7e38 (alpha): Put the announcement in /tmp/announce-$(distdir) 1999-05-09 15:10:02 +00:00
Jim Meyering
1554d14ce1 . 1999-05-09 15:04:17 +00:00
Jim Meyering
11f093839f *** empty log message *** 1999-05-09 15:03:58 +00:00
Jim Meyering
d1520cea68 whoops -- revert last change 1999-05-09 15:03:52 +00:00
Jim Meyering
9cc8d1f6a9 (Makefile.in): Depend on Makefile.maint. 1999-05-09 15:02:44 +00:00
Jim Meyering
48d1df6825 . 1999-05-09 15:02:16 +00:00
Jim Meyering
3a7457ae6c . 1999-05-09 15:01:52 +00:00
Jim Meyering
fe76db396c (neg-nls): New test. 1999-05-09 15:01:40 +00:00
Jim Meyering
dd992130c6 (fraccompare, numcompare): Merge the NLS and
non-NLS versions into a single function.

(decimal_point): Now char, since we no longer convert to unsigned char.
(th_sep): Now int, since we use a value out of char range to denote
the absence of a thousands separator.
(IS_THOUSANDS_SEP): New macro.
(USE_NEW_FRAC_COMPARE): Remove.
(nls_set_fraction): Arg is now char, not unsigned char.
Set th_sep to CHAR_MAX + 1 if there is no thousands separator.
(numcompare): Don't convert to unsigned char unless necessary.
(main): Turn off decimal points and thousand separators if they
are multibyte characters, as we don't support that yet.
1999-05-09 03:27:24 +00:00
Jim Meyering
02d760e232 * src/system.h (CHAR_BIT, TYPE_SIGNED, TYPE_MINIMUM, TYPE_MAXIMUM,
and all the *_MIN and *_MAX symbols): Remove definitions.
* src/sys2.h: Put the definitions here instead (this file is shared
between all three *utils packages, while system.h is not).
1999-05-08 23:29:47 +00:00
Jim Meyering
4905751e2f * src/system.h (CHAR_BIT, TYPE_SIGNED, TYPE_MINIMUM, TYPE_MAXIMUM,
and all the *_MIN and *_MAX symbols): Remove definitions.
* src/sys2.h: Put the definitions here instead (this file is shared
between all three *utils packages, while system.h is not).
1999-05-08 23:28:42 +00:00
Jim Meyering
d103085de3 (handle_line_error): Use %s, not %d, now that human_readable
converts it to a string.
1999-05-07 19:15:37 +00:00
Jim Meyering
9bc1a80b4e *** empty log message *** 1999-05-07 19:00:44 +00:00
Jim Meyering
99ed77dea6 import latest 1999-05-07 18:54:34 +00:00
Jim Meyering
bda57be904 *** empty log message *** 1999-05-07 18:53:01 +00:00
Jim Meyering
07053344dc . 1999-05-07 18:52:35 +00:00
Jim Meyering
f31052628d *** empty log message *** 1999-05-07 18:49:09 +00:00
Jim Meyering
8e03e30c05 clean up 1999-05-07 18:48:45 +00:00
Jim Meyering
0ef3c5d7fc (TESTS_ENVIRONMENT): Remove individual
upper-case program names.  Add a definition of PATH.
(TESTS): Add dir-1.
1999-05-07 18:47:50 +00:00
Jim Meyering
a06a563ea4 (touch): Only do the fstat if we need to.
Resort to calling stat for directories, but only when necessary.
(usage): Mention --no-create.
1999-05-07 18:44:20 +00:00
Jim Meyering
9250d1a34f (main): Use better wording in diagnostic: `cannot
create directory' rather than `cannot make directory'.  The former
also matches the one in makepath.c.
1999-05-07 18:40:11 +00:00
Jim Meyering
a8d7df994f (apply_translations): Use TOUPPER, not toupper. 1999-05-07 18:36:54 +00:00
Jim Meyering
b10e58db1b (numcompare): Handle comparison of two negative
numbers correctly in the ENABLE_NLS case.
1999-05-06 21:51:06 +00:00
Jim Meyering
a440742330 (make_dir): When reporting a mkdir failure and the
target cannot be `stat'ed, use the errno from the failed mkdir call,
not the one from the stat call.  Before this change, running
`mkdir -p /no-dir/no-dir' as an unprivileged user would wrongly
elicit `No such file or directory' instead of `Permission denied'.
1999-05-06 02:10:34 +00:00
Jim Meyering
f466b6448a *** empty log message *** 1999-05-05 13:34:29 +00:00
Jim Meyering
9f8bc128f0 (read_utmp): Use the new definitions. 1999-05-05 13:34:18 +00:00
Jim Meyering
b0cc976ab9 Add definitions to help read utmpx on systems with utmpname.
(UTMP_NAME_FUNCTION): Define.
(SET_UTMP_ENT): Likewise.
(GET_UTMP_ENT): Likewise.
(END_UTMP_ENT): Likewise.
1999-05-05 13:34:02 +00:00
Jim Meyering
632b63d59c *** empty log message *** 1999-05-05 13:26:22 +00:00
Jim Meyering
1db78f41bf (show_date): Change an automatic aggregate initializer
to be a static one.  For SunOS4's cc.
1999-05-05 13:26:06 +00:00
Jim Meyering
7c48860ed8 *** empty log message *** 1999-05-05 13:21:55 +00:00
Jim Meyering
1b0901bb9e (TYPE_SIGNED, TYPE_MAXIMUM, TYPE_MINIMUM): Define.
(ULONG_LONG_MAX, LONG_LONG_MAX, LONG_LONG_MIN): Define if not defined.
Based on a patch from Kaveh Ghazi.
1999-05-05 13:21:29 +00:00
Jim Meyering
76a9b4dc10 *** empty log message *** 1999-05-05 13:16:42 +00:00
Jim Meyering
19d33cea2b (USE_ACL): Define this only #if
(HAVE_SYS_ACL_H && HAVE_ACL && defined GETACLCNT).
Use `USE_ACL' in place of `HAVE_ACL' everywhere else.  From Kaveh Ghazi.
1999-05-05 13:12:28 +00:00
Jim Meyering
c4ddb7f83a Include makepath.h libintl.h, not after it.
Otherwise, we'd get the wrong definition of PARAMS from libintl.h.
(The method of defining PARAMS in libintl.h doesn't check PROTOTYPES,
which is necessary on Irix4 since cc doesn't define __STDC__.)
From Kaveh Ghazi.
1999-05-05 03:05:11 +00:00
Jim Meyering
431db6c847 add missing backslash-before-newline in usage message 1999-05-05 01:56:45 +00:00
Jim Meyering
207d6b3cda add missing backslash-before-newline in usage message 1999-05-05 01:55:39 +00:00
Jim Meyering
bbefeb160b *** empty log message *** 1999-05-04 21:13:54 +00:00
Jim Meyering
89d0895332 (AC_LFS): -n32, -o32, and -n64 should be in CFLAGS,
not CPPFLAGS, so that linking works correctly in IRIX.
1999-05-04 21:13:47 +00:00
Jim Meyering
cb5153fefa (usage): Break the usage message into 3 pieces instead of
only 2.  The strings had grown to be longer than 2048, which evokes
errors when compiling with Irix4's cc.
1999-05-04 18:46:06 +00:00
Jim Meyering
b08eca15fd (search_item): Use 1' instead of +1'. The latter
elicits a syntax error from SunOS4's cc.  From Kaveh Ghazi.
1999-05-04 14:31:27 +00:00
Jim Meyering
6f922edf2d <ctype.h>: Don't include.
[!STDC_HEADERS]: Remove definitions of ctype macros.
Convert e.g., isspace to ISSPACE to use definitions from sys2.h.
Reported by Kaveh Ghazi.
1999-05-03 18:01:49 +00:00
Jim Meyering
85514c7e0b (TOLOWER): Define.
(TOUPPER): Define.
1999-05-03 17:59:43 +00:00
Jim Meyering
e060631c35 (TOLOWER): Remove definition. 1999-05-03 17:55:53 +00:00
Jim Meyering
cac31ff114 *** empty log message *** 1999-05-03 03:58:40 +00:00
Jim Meyering
f0e23dcff9 *** empty log message *** 1999-05-03 03:56:46 +00:00
Jim Meyering
b3faad27ed . 1999-05-03 02:46:54 +00:00
Jim Meyering
38121144b2 . 1999-05-03 02:45:51 +00:00
Jim Meyering
73bc7f0777 (main): Give a better diagnostic when we fail to set the hostname. 1999-05-03 02:45:37 +00:00
Jim Meyering
99571c629e (main): Manually handle `--', since we no longer call getopt. 1999-05-03 02:42:49 +00:00
Jim Meyering
4f40ac7422 (read_utmp): Ignore the return value from utmpname. 1999-05-03 02:38:50 +00:00
Jim Meyering
1610efe2fd Define several tag-related make variables.
(cvs-dist): Use the make variables instead of shell ones.
(announcement): Automatically generate diffs for all ChangeLog files,
not just the top level one.
1999-05-01 04:33:45 +00:00
Jim Meyering
1c70e83474 *** empty log message *** 1999-05-01 04:15:43 +00:00
Jim Meyering
9a06759937 *** empty log message *** 1999-05-01 04:15:09 +00:00
Jim Meyering
6161d60dde *** empty log message *** 1999-05-01 04:13:56 +00:00
Jim Meyering
e3cd439763 (AC_REPLACE_FUNCS): Add dup2. 1999-05-01 04:13:45 +00:00
Jim Meyering
5e1ffee4d6 (main): Manually handle `--', since we no longer
call getopt.  Reported by Joseph S. Myers.
1999-05-01 02:29:17 +00:00
Jim Meyering
910287474f (main): Manually handle `--', since we no longer
call getopt.  Reported by Joseph S. Myers.
1999-05-01 02:28:54 +00:00
Jim Meyering
6faa50c135 (decode_switches): Use STDIN_FILENO, STDOUT_FILENO instead of 0, 1. 1999-05-01 02:08:30 +00:00
Jim Meyering
9fca49f67c Always use STDIN_FILENO for input and STDOUT_FILENO
for output, to avoid confusion with closed input and output fds.
(input_fd, output_fd): Remove; all uses changed to STDIN_FILENO
and STDOUT_FILENO.
(open_fd): New function.
(main): Use it, instead of open, to ensure that file descriptors
don't get confused.

(skip): Don't fstat the input file; the result is no longer used.
1999-05-01 02:05:56 +00:00
Jim Meyering
8a3c0671e0 *** empty log message *** 1999-05-01 00:13:13 +00:00
Jim Meyering
2f7eb5cdf5 (usage): Document the differences between the
obsolescent, +POS1[-POS2] form, and the POSIX -k option.
1999-05-01 00:12:26 +00:00
Jim Meyering
8fb3745a09 add emphasis that sort's -k M,N is inclusive 1999-04-30 22:35:54 +00:00
Jim Meyering
aaba44e639 *** empty log message *** 1999-04-30 20:59:49 +00:00
Jim Meyering
1cd88b2b5e *** empty log message *** 1999-04-30 16:48:09 +00:00
Jim Meyering
60695039c0 *** empty log message *** 1999-04-30 16:03:53 +00:00
Jim Meyering
806520fdc0 Update to reflect this change by reversing
the order of arguments so the symlink is the source, not the
destination (otherwise, the mv command would now succeed).
1999-04-30 16:03:46 +00:00
Jim Meyering
25a8d1f1e9 (copy_internal): Move the one-file-system test so that
it follows the `if (new_dst || !S_ISDIR (dst_sb.st_mode))' block.
Prior to this change, `cp --one-file-system' would traverse a file-
system boundary if the destination directory existed.
From thospel@mail.dma.be.
1999-04-30 15:40:34 +00:00
Jim Meyering
f0e50d53d5 *** empty log message *** 1999-04-30 15:24:47 +00:00
Jim Meyering
40d99818ef (copy_internal): Don't make `mv foo symlink-to-foo' fail.
That is, even though source and destination are `the same,' don't fail
if the destination is a symlink.  From Peter Samuelson.
1999-04-30 15:15:02 +00:00
Jim Meyering
0d6a1583c6 *** empty log message *** 1999-04-26 15:07:44 +00:00
Jim Meyering
6f48de44ae *** empty log message *** 1999-04-26 13:31:57 +00:00
Jim Meyering
9622d45140 (main): If you can't open an output file (with seek=...) read-write,
then open it for write and report an error if we can't seek.
1999-04-26 13:31:49 +00:00
Jim Meyering
890a087101 . 1999-04-26 13:25:28 +00:00
Jim Meyering
bc2e8cb6ce (utime_null): Don't pass 0666 to open; it's not needed and isn't
guaranteed to be portable.
1999-04-26 13:25:08 +00:00
Jim Meyering
22cce6dadc (S_IRWXU, S_IRWXG, S_IRWXO): Define if not defined.
Use proper mode_t types and macros.
Don't assume the traditional Unix values for mode bits.
1999-04-26 13:22:23 +00:00
Jim Meyering
82893aff55 (make_node_op_equals, mode_compile, mode_create_from_ref, mode_adjust):
Use proper mode_t types and macros.
Don't assume the traditional Unix values for mode bits.
modechange.h now includes sys/types.h.
Include xstrtol.h.
(isodigit, oatoi): Remove.
(S_ISUID, S_ISGID, S_ISVTX, S_IRUSR, S_IWUSR, S_IXUSR, S_IRGRP,
S_IWGRP, S_IXGRP, S_IROTH, S_IWOTH, S_IXOTH, S_IRWXU, S_IRWXG,
S_IRWXO): Define if not defined.
(CHMOD_MODE_BITS): New macro.
(mode_compile): Convert from octal with xstrtoul, not our own routine.
1999-04-26 13:19:37 +00:00
Jim Meyering
c262673191 Don't assume traditional Unix mode numbering. 1999-04-26 13:14:36 +00:00
Jim Meyering
d8071546b1 Include <config.h>, <sys/types.h> for mode_t.
(struct mode_change): Members affected and value are now mode_t instead
of unsigned short.
1999-04-26 13:13:59 +00:00
Jim Meyering
d1e59e17e7 <config.h>, <sys/types.h>: Include for mode_t.
(mode_string): Now takes mode_t.
1999-04-26 13:13:36 +00:00
Jim Meyering
9afd1dd692 (make_path): Use proper mode_t types and macros.
Don't assume the traditional Unix values for mode bits.
(S_ISUID, S_ISGID, S_ISVTX, S_IRUSR, S_IRWXU): Define if not defined.
1999-04-26 13:13:00 +00:00
Jim Meyering
c1e3742914 (setst, ftypelet, mode_string): Use proper mode_t types and macros.
Don't assume the traditional Unix values for mode bits.
(S_IRGRP, S_IWGRP, S_IXGRP, S_IROTH, S_IWOTH, S_IXOTH): Define if not defined.
<config.h>, <sys/types.h>: Include for mode_t.
(mode_string): Now takes mode_t.
1999-04-26 13:10:11 +00:00
Jim Meyering
157b3ef61f (main): Use proper mode_t types and macros.
Don't assume the traditional Unix values for mode bits.
1999-04-26 13:03:49 +00:00
Jim Meyering
73e540ea1b (do_copy, cp_option_init, main): Use proper mode_t types and macros.
Don't assume the traditional Unix values for mode bits.
1999-04-26 13:03:11 +00:00
Jim Meyering
12dd796d8a (struct cp_options.umask_kill): Use mode_t, not unsigned int. 1999-04-26 12:55:36 +00:00
Jim Meyering
d1c7f62ba8 (copy_reg, copy_internal): Use proper mode_t types and macros.
Don't assume the traditional Unix values for mode bits.
1999-04-26 12:54:51 +00:00
Jim Meyering
5d76644c3e (describe_change, change_file_mode): Use proper mode_t types and macros.
Don't assume the traditional Unix values for mode bits.
1999-04-26 12:51:43 +00:00
Jim Meyering
750e5969ff (main): Use proper mode_t types and macros.
Don't assume the traditional Unix values for mode bits.
1999-04-26 12:49:59 +00:00
Jim Meyering
6fc1cc1b6a (isodigit): Remove unused macro.
(mode, cp_option_init, DIR_MODE): Use proper mode_t types and macros.
Don't assume the traditional Unix values for mode bits.
1999-04-26 12:49:16 +00:00
Jim Meyering
9e37b40aa1 (S_ISUID, S_ISGID, S_ISVTX, S_IRWXU, S_IRWXG, S_IRWXO):
Define if not defined.
(CHMOD_MODE_BITS): New macro.
1999-04-26 12:48:12 +00:00
Jim Meyering
ebb207dc5a (open_maybe_create): Don't pass 0666 to open; it's not needed and isn't
guaranteed to be portable.
1999-04-26 12:47:33 +00:00
Jim Meyering
d0eeabbc32 Use proper mode_t types and macros.
Don't assume the traditional Unix values for mode bits.
1999-04-26 12:20:54 +00:00
Jim Meyering
259838277b Use proper mode_t types and macros.
Don't assume the traditional Unix values for mode bits.
1999-04-26 12:20:26 +00:00
Jim Meyering
0b6ee7158e Use proper mode_t types and macros.
Don't assume the traditional Unix values for mode bits.
1999-04-26 12:19:37 +00:00
Jim Meyering
3baa7fa854 (main): Revert last change.
Instead, loop on `optind < argc' to protect use of argv[optind].
1999-04-26 02:19:51 +00:00
Jim Meyering
0d13ededce revert last change 1999-04-26 02:18:09 +00:00
Jim Meyering
a3a4a31c22 . 1999-04-26 00:40:42 +00:00
Jim Meyering
bf73dd5297 (main): Handle the case in which seq is given no args. 1999-04-26 00:39:47 +00:00
Jim Meyering
6002b5a2ed *** empty log message *** 1999-04-25 19:20:40 +00:00
Jim Meyering
1c9a7ba541 <inttypes.h>: Include it here instead.
<config.h>: Include it here too.
1999-04-25 19:20:18 +00:00
Jim Meyering
e3a368948e Don't include inttypes.h here. 1999-04-25 19:18:55 +00:00
Jim Meyering
12bf2f8f8b [NDEBUG]: Remove definition. 1999-04-25 19:18:20 +00:00
Jim Meyering
d12ba36443 *** empty log message *** 1999-04-25 12:11:52 +00:00
Jim Meyering
007f495c2f *** empty log message *** 1999-04-25 04:38:15 +00:00
Jim Meyering
0de4165e66 *** empty log message *** 1999-04-24 21:38:27 +00:00
Jim Meyering
f90a5e94b8 (print_entry): Use #if', not #ifdef HAVE_UT_HOST'. 1999-04-24 21:29:22 +00:00
Jim Meyering
88fc9ef946 *** empty log message *** 1999-04-24 13:14:25 +00:00
Jim Meyering
fc6db4f55a *** empty log message *** 1999-04-24 13:14:11 +00:00
Jim Meyering
a279b3a84b . 1999-04-24 13:00:16 +00:00
Jim Meyering
a56886d93d *** empty log message *** 1999-04-24 12:59:26 +00:00
Jim Meyering
82105f5876 *** empty log message *** 1999-04-24 12:58:07 +00:00
Jim Meyering
ea07044f83 . 1999-04-24 12:57:43 +00:00
Jim Meyering
b67ee7857a *** empty log message *** 1999-04-24 12:53:50 +00:00
Jim Meyering
6796615496 *** empty log message *** 1999-04-24 12:53:19 +00:00
Jim Meyering
88c9f81346 Include new "xstrtol.h", not "xstrtoul.h". 1999-04-24 12:43:39 +00:00
Jim Meyering
55865fda6c Include new "xstrtol.h", not "xstrtoul.h".
(struct control) [repeat]: Declare as uintmax_t, not int.
(struct control) [lines_required]: Likewise.
(handle_line_error): Use human_readable to print lines_required.
(parse_repeat_count): Parse a uintmax_t.
(parse_patterns): Parse a uintmax_t.
1999-04-24 12:42:53 +00:00
Jim Meyering
bdb9cd3f2c Include new "xstrtol.h", not "xstrtoul.h". 1999-04-24 12:33:56 +00:00
Jim Meyering
cef6937705 Include new "xstrtol.h", not "xstrtoul.h".
Change all U_LONG_LONG to uintmax_t.
(head_lines): Move a couple dcls into an inner scope.
(string_to_integer): Rename from string_to_ull.
1999-04-24 12:33:25 +00:00
Jim Meyering
34942b9da8 import latest 1999-04-23 04:20:42 +00:00
Jim Meyering
4cbb965035 *** empty log message *** 1999-04-22 15:19:11 +00:00
Jim Meyering
62edaf0b55 (word32): Don't use `#error'; it runs afoul of SunOS 4.1.4 cc. 1999-04-22 14:38:50 +00:00
Jim Meyering
c274f255c3 *** empty log message *** 1999-04-22 14:37:17 +00:00
Jim Meyering
e7fa925898 Guard strong_alias and weak_alias with #ifdef _LIBC. 1999-04-22 14:35:59 +00:00
Jim Meyering
b003c8fdfa Don't bother with pot-mail anymore -- Francois needs merely the URL. 1999-04-22 01:24:34 +00:00
Jim Meyering
2279aec4a3 . 1999-04-21 23:17:13 +00:00
Jim Meyering
1f74a371e0 . 1999-04-21 23:16:48 +00:00
Jim Meyering
ae295f9bab . 1999-04-21 04:34:29 +00:00
Jim Meyering
28a81b47c1 . 1999-04-21 04:30:22 +00:00
Jim Meyering
9b56140087 *** empty log message *** 1999-04-21 04:29:00 +00:00
Jim Meyering
8907976270 Remove the temporary strtoumax replacement;
we now have a true replacement in strtoumax.c.
(__strtol): Always define to strtoumax.
(<stdlib.h>): No need to include.
(PARAMS): Remove.
(my_strtoumax): Move this to strtoumax.c,
rename it to strtoumax, and simplify.
1999-04-21 04:28:36 +00:00
Jim Meyering
3354e7502c Update to glibc 2.1.1 version. 1999-04-21 04:27:24 +00:00
Jim Meyering
64bae48df6 . 1999-04-21 04:24:39 +00:00
Jim Meyering
9d3c3cb2c7 *** empty log message *** 1999-04-21 04:22:15 +00:00
Jim Meyering
9a16aa9fde *** empty log message *** 1999-04-21 04:21:50 +00:00
Jim Meyering
a6f5dd6269 (jm_CHECK_ALL_TYPES): Require jm_AC_TYPE_UNSIGNED_LONG_LONG. 1999-04-21 04:21:44 +00:00
Jim Meyering
9174cee25d (AC_CHECK_FUNCS): Remove strtoull, strtoumax, strtouq. 1999-04-21 04:14:59 +00:00
Jim Meyering
7d98d28569 *** empty log message *** 1999-04-21 04:04:20 +00:00
Jim Meyering
e441de9acc (jm_AC_TYPE_UINTMAX_T): Move unsigned long
long check into new jm_AC_TYPE_UNSIGNED_LONG_LONG macro.
1999-04-21 04:04:04 +00:00
Jim Meyering
36ca174d81 *** empty log message *** 1999-04-21 04:00:48 +00:00
Jim Meyering
76659f726f Require jm_AC_TYPE_UNSIGNED_LONG_LONG.
Replace xstroull if necessary.
1999-04-21 04:00:38 +00:00
Jim Meyering
42a64ac80e *** empty log message *** 1999-04-21 03:58:57 +00:00
Jim Meyering
6783ad7832 *** empty log message *** 1999-04-21 03:24:54 +00:00
Jim Meyering
e8b570e45a update comment 1999-04-21 03:19:26 +00:00
Jim Meyering
cf6eaeb03b <xstrtol.h>: Include this, not xstrtoul.h.
<human.h>: Include.
Use uintmax_t in place of unsigned long.
Use human_readable to convert to strings for printing.
1999-04-21 03:18:23 +00:00
Jim Meyering
42ccae28c6 . 1999-04-21 02:30:43 +00:00
Jim Meyering
c850864a19 . 1999-04-21 02:29:50 +00:00
Jim Meyering
c93a59ac4f . 1999-04-21 02:28:20 +00:00
Jim Meyering
abc54153b1 *** empty log message *** 1999-04-21 02:21:57 +00:00
Jim Meyering
c4a52014f7 Port to AIX and HP-UX. Support cross-compilation. 1999-04-21 02:21:47 +00:00
Jim Meyering
c7a0b8f429 <config.h>: Include first, since it can do
things like #define const, and this must be done before
including any system headers.
1999-04-20 13:26:06 +00:00
Jim Meyering
154588d722 (my_strtoumax): Fix typo in computing
whether overflow occurred.  Improve overflow-detection to use
only one conditional branch total, rather than 2N+1
conditional branches for an N-digit number.
1999-04-20 13:24:14 +00:00
Jim Meyering
f9270b650f *** empty log message *** 1999-04-19 14:09:07 +00:00
Jim Meyering
5f724e01b9 *** empty log message *** 1999-04-19 14:06:07 +00:00
Jim Meyering
c37f2f6355 (main): Restore `+' in getopt_long string. Otherwise,
commands like `seq 10 -2 0' wouldn't work.  From Andreas Schwab.
1999-04-19 14:05:34 +00:00
Jim Meyering
dcf32e94d2 *** empty log message *** 1999-04-19 14:03:17 +00:00
Jim Meyering
3e47e246f8 *** empty log message *** 1999-04-19 05:25:52 +00:00
Jim Meyering
d5c056d478 (b_host): Remove /pub suffix. 1999-04-19 05:22:54 +00:00
Jim Meyering
da96ede53c *** empty log message *** 1999-04-19 04:50:25 +00:00
Jim Meyering
6a9f42807f (my-distcheck): Use AMTAR, not TAR. 1999-04-19 04:50:03 +00:00
Jim Meyering
36564cbefd . 1999-04-19 04:45:09 +00:00
Jim Meyering
95836befb3 *** empty log message *** 1999-04-19 04:24:35 +00:00
Jim Meyering
0b8e81aab9 . 1999-04-19 04:20:57 +00:00
Jim Meyering
a0119464b8 *** empty log message *** 1999-04-19 02:56:54 +00:00
Jim Meyering
00811477e8 *** empty log message *** 1999-04-19 02:54:53 +00:00
Jim Meyering
e144c80776 Require jm_AC_PREREQ_XSTRTOUMAX. 1999-04-19 02:54:48 +00:00
Jim Meyering
ac4f985ac9 *** empty log message *** 1999-04-19 02:53:36 +00:00
Jim Meyering
560d7d9dac . 1999-04-19 02:42:58 +00:00
Jim Meyering
e7a7a48ee6 . 1999-04-19 02:39:52 +00:00
Jim Meyering
95e8d410ff (tempname): Wrap after 99999 only for length-impaired file systems. 1999-04-19 02:39:09 +00:00
Jim Meyering
d3b1ca9174 (main, longopts):
Use -u instead of -R for --remove, so that we can preserve
future compatibility with rm.
1999-04-19 02:15:09 +00:00
Jim Meyering
d70fb569fb [!HAVE_CONFIG_H] (ST_BLKSIZE): Define to 65536.
(do_wipefd): Use ST_BLKSIZE instead of referring to the st_blksize
member directly.
1999-04-19 02:13:01 +00:00
Jim Meyering
e5e1c6d4fd *** empty log message *** 1999-04-19 00:20:36 +00:00
Jim Meyering
d17b6bc300 *** empty log message *** 1999-04-18 23:20:24 +00:00
Jim Meyering
114946fdb0 Include xstrtol.h.
(parse_integer): Migrate most of the work into the new xstrtoumax fn.
1999-04-18 23:18:48 +00:00
Jim Meyering
30edff7a36 Include xstrtol.h, not xstrtoul.h, since xstrtol.h now defines all the
xstrto... functions.
1999-04-18 23:18:32 +00:00
Jim Meyering
d3ffbea816 Include xstrtol.h, not obsolete file xstrtoul.h. 1999-04-18 23:18:09 +00:00
Jim Meyering
cc7d631369 <stdlib.h>: Include if HAVE_STDLIB_H, since bison 1.27 invokes "free".
(LookupWord, yylex): Don't pass negative char to ctype macros.
1999-04-18 23:17:30 +00:00
Jim Meyering
4e8d80cad7 (xalloc_fail): Pass xalloc_msg_memory_exhausted through gettext. 1999-04-18 23:17:05 +00:00
Jim Meyering
a1d8c38553 (libfu_a_SOURCES): Add xstrtoumax.c.
(noinst_HEADERS): Remove xstrtoul.h.
1999-04-18 23:16:49 +00:00
Jim Meyering
0501984933 (__xstrtol, __strtol, __unsigned): Remove macro decls.
<inttypes.h>: Include if HAVE_INTTYPES_H.
(_DECLARE_XSTRTOL): New macro.
(xstrtol, xstrtoul, xstrtoumax): Declare all three functions, so that
we need only one include file, not three.
(_STRTOL_ERROR): Do not undef, as this is no longer needed.
Reword overflow message so that it's independent of type.
1999-04-18 23:16:23 +00:00
Jim Meyering
f8474e2421 (__strtol, __strtol_t, __xstrtol):
New macros to specify the
underlying function, its returned type, and our function.  Default to
values suitable for xstrtol.

Include <ctype.h>, since we use its macros.

(ULONG_MAX, LONG_MAX, ISBLANK): Remove: no longer needed.
(ISSPACE): New macro.

(bkm_scale, bkm_scale_by_power, __xstrtol, main): __unsigned long int
-> __strtol_t.

(__xstrtol): Depend on whether __strtol_t is an unsigned type, not on
whether STRING_TO_UNSIGNED is defined.  Skip isspace chars, not
isblank chars, to match strtol.  When returning
LONGINT_INVALID_SUFFIX_CHAR, store the value that we computed into
*val.
1999-04-18 23:15:34 +00:00
Jim Meyering
ddd5fa0ce5 (STRING_TO_UNSIGNED): Remove.
(__strtol, __strtol_t, __xstrtol): New macros.
1999-04-18 23:15:02 +00:00
Jim Meyering
a7a7424b8b Include xstrtol.h, not obsolete file xstrtoul.h.
"human.h", "xalloc.h": Include.
(attribute): Remove; no longer needed.
(xstrdup): New decl.
(STDOUT_FILENO): New macro.
(O_NOCTTY): Make sure it's always defined, even if HAVE_CONFIG_H.

The following changes have effect only if !HAVE_CONFIG_H.
<ctype.h>: New include.
(RETSIGTYPE): Remove bogus semicolon at end.
(STDOUT_FILENO, uintmax_t, human_readable, LONGEST_HUMAN_READABLE):
New macros.
(xstrtoumax): Renamed from xstrtoul, with corresponding type changes.
Handle suffixes like the real routine does.
(error): Remove bogus assignment of errno to errnum.
(xmalloc, xstrdup): New functions.

(O_NOCTTY): Define even if !HAVE_CONFIG_H.
(S_ISFIFO, S_ISSOCK): New macros, if not already defined.
(OUTPUT_BLOCK_SIZE): New macro.
(struct Options.verbose): Now a boolean, since we no longer have two
levels of verbosity.
(long_opts, usage, main): Remove -D or --device option.  Invert -p or
--preserve option, and rename it to -R or --remove.
(usage): Describe G suffix.
(usage): "-" no longer conflicts with -v.
(UCHAR_MAX): Indent `#error' so that SunOS 4.1.4 cc doesn't reject it.
(ind): Portability fixes: return word32, not unsigned; multiply by
sizeof (word32) instead of shifting left by 2.
(isaac_refill, isaac_mix): Comment out size of array parameter, as
ansi2knr mishandles this.
(status_visible, status_pos, pfstatus, flushstatus): Remove, since
pfstatus isn't portable to users with varying width fonts, or
internationalized messages, and vfprintf is problematic.  All callers
of pfstatus changed to use error instead; this removes incompatibility
of -v with -.  All calls to flushstatus removed.
(dopass, do_wipefd): Do not translate non-English msgs with gettext.

(dopass): Cast lseek constant arguments to (off_t) for benefit
of pre-ANSI compilers; fix one lseek call whose args were interchanged.
Remove unnecessary casts to (off_t).  Do not check for EIO
when determining file size; this was just my earlier wild guess.
Use human_readable to print off_t, instead of casting to unsigned long
(which doesn't work in Solaris 2.6, where off_t is longer than long).
Output human-readable sizes, instead of always using "K".
Check for offset overflow (it happened to me in SunOS 4.1.4).
(do_wipefd): Do not insist on regular files, but do check for special
files that cannot possibly be shredded.
Use xmalloc instead of malloc + check.
Do not inspect st_size for non-regular files.
Try to find the size of a non-regular file by seeking to its end.
Do not assume that a regular file of size-0 has unknown size.
Check for regular files with negative sizes,
and for overflow after rounding to next block.
Always try to truncate, even for special files, but do not report an
error if truncation fails on a special file.

(dopass, wipefile): Do not return 1 for special files; the caller
doesn't care any more.

(wipefd): Remove unnecessary (and nonportable) check for
whether the file descriptor is read-only.  Remove
no-longer-needed check for `-v -'.

(incname): Return 1 for carry bit, like the documentation says.

(wipename, wipefile): Accept new argument, specifying the
quoted file name.  All callers changed.

(wipename): Use xstrdup instead of strdup+error check.

(wipefile): Check for ENOTDIR when opening /dev/fd/NNN. Check for
errors in NNN more carefully. Restore errno after the check.
Check for errors when closing the file descriptor.
Use more consistent wording when unable to remove a file.

(main): Do not remove files by default.
Use xstrtoumax instead of xstrtoul uniformly, since xstrtoul won't
exist if !HAVE_CONFIG_H.
In diagnostics, quote invalid operands to -n and -s options.
Allow T, P, E, Z, and Y suffixes in -s operand.
flags.verbose is now a boolean, not a counter.
Use STDOUT_FILENO instead of 1, for clarity.
1999-04-18 23:13:57 +00:00
Jim Meyering
69b1c4026c (tempname): Add a FIXME comment. 1999-04-18 15:57:19 +00:00
Jim Meyering
0fe4e6b443 (NAME_MAX_IN_DIR): Rename from PATH_MAX_IN_DIR. Use _POSIX_NAME_MAX,
not _POSIX_PATH_MAX.  Guard with #if HAVE_PATHCONF rather than
#if HAVE_UNISTD_H.
1999-04-18 15:44:03 +00:00
Jim Meyering
8cee2c6772 Rename global: s/temp_file_prefix/temp_dir/. 1999-04-18 14:40:20 +00:00
Jim Meyering
eb4109b66e (usage): s/DIRECT/DIRECTORY/g 1999-04-18 14:38:24 +00:00
Jim Meyering
e0cbae44cd *** empty log message *** 1999-04-18 13:32:44 +00:00
Jim Meyering
8f913cc64f (main): Open the output file with *read* access
only if we might need to read to satisfy a `seek=' request.
From Matthias Urlichs.
1999-04-18 13:32:35 +00:00
Jim Meyering
64dec9fafb *** empty log message *** 1999-04-18 13:31:34 +00:00
Jim Meyering
a625377e8c *** empty log message *** 1999-04-18 03:25:23 +00:00
Jim Meyering
c5027d831c . 1999-04-18 02:16:56 +00:00
Jim Meyering
f4143898b2 *** empty log message *** 1999-04-17 14:41:38 +00:00
Jim Meyering
5101382ec6 *** empty log message *** 1999-04-17 11:56:21 +00:00
Jim Meyering
dd886e9690 (file_lines): Fix serious bug introduced with last changes.
From Andreas Schwab.
1999-04-17 11:50:03 +00:00
Jim Meyering
6a821331eb . 1999-04-15 14:09:04 +00:00
Jim Meyering
d679966505 *** empty log message *** 1999-04-15 14:03:06 +00:00
Jim Meyering
f01319465c rename .posix-warn to .env-warn 1999-04-15 13:59:14 +00:00
Jim Meyering
1dbd1aff6f . 1999-04-15 13:49:45 +00:00
Jim Meyering
69e1d626bd Add comments.
(init_header): Tweak white space in Date/Time header.
1999-04-15 13:49:13 +00:00
Jim Meyering
609582a161 new tests from Roland 1999-04-15 13:26:50 +00:00
Jim Meyering
bc95e393d8 Updated tests.
From Roland Huebner.
1999-04-15 13:26:44 +00:00
Jim Meyering
379dcf4c48 . 1999-04-15 12:45:57 +00:00
Jim Meyering
ffd4e9684a *** empty log message *** 1999-04-14 03:12:27 +00:00
Jim Meyering
809b33b2ff new version via automake 1999-04-13 14:44:33 +00:00
Jim Meyering
2a8c4e283e *** empty log message *** 1999-04-13 02:57:40 +00:00
Jim Meyering
e6bc0dccbc (main): Declare out_dev to be of type dev_t, not `int'.
Declare out_ino to be of type ino_t, not `int'.
1999-04-13 01:11:46 +00:00
Jim Meyering
b6d265e347 * src/od.c (MIN, MAX): Remove definitions.
* src/sys2.h (MIN, MAX): Define here instead.
1999-04-13 01:09:15 +00:00
Jim Meyering
4de61e5f98 . 1999-04-12 04:28:05 +00:00
Jim Meyering
1f6f06f7de (test_vector): Disable all tests while I wait for an updated suite. 1999-04-12 04:27:46 +00:00
Jim Meyering
69d1c5772e *** empty log message *** 1999-04-12 04:00:10 +00:00
Jim Meyering
d577eef9e4 *** empty log message *** 1999-04-12 03:54:57 +00:00
Jim Meyering
a36f86a13e . 1999-04-12 03:47:40 +00:00
Jim Meyering
924b7e2291 . 1999-04-12 03:47:17 +00:00
Jim Meyering
2e2161c97a (COPY_TO_EOF): Define.
(dump_remainder): Add parameter, n_bytes, and rewrite to use it.
Update callers.
(file_lines): Rename parameter.
(tail_bytes): Remove obsolete comment.
1999-04-12 03:22:24 +00:00
Jim Meyering
f3df8336ae Fix the problem whereby `yes > k & tail -1 k' would infloop.
(dump_remainder): Move this function to precede the new use in file_lines.
(tail_lines): Don't call dump_remainder here.
(file_lines): Call dump_remainder here instead.
1999-04-11 17:59:28 +00:00
Jim Meyering
a66cc3009b *** empty log message *** 1999-04-11 13:26:42 +00:00
Jim Meyering
cf3d3f1e6e (readtoken, readtokens): Protoize. 1999-04-11 13:25:52 +00:00
Jim Meyering
832dfa7e1f (xwrite): Use STDOUT_FILENO instead of literal `1'. 1999-04-11 03:42:21 +00:00
Jim Meyering
35af2e8613 *** empty log message *** 1999-04-11 03:24:12 +00:00
Jim Meyering
de9d4e9f91 (alpha): Add trailing slash for ncftp. 1999-04-11 03:24:04 +00:00
Jim Meyering
fb059dc67c *** empty log message *** 1999-04-11 02:19:51 +00:00
Jim Meyering
12562e897d . 1999-04-11 02:17:48 +00:00
Jim Meyering
cc40ff77a8 . 1999-04-11 02:17:20 +00:00
Jim Meyering
294b139566 *** empty log message *** 1999-04-11 02:15:26 +00:00
Jim Meyering
54047adacd *** empty log message *** 1999-04-11 01:45:44 +00:00
Jim Meyering
4d062fbe6d *** empty log message *** 1999-04-11 01:44:26 +00:00
Jim Meyering
23dfcdb368 `ls --color' would segfault
Include assert.h.
(color_indicator[]): Add an entry for the type, `door.'
(main): Assert that the lengths of the color_indicator and
indicator_name arrays are appropriately related.
1999-04-11 01:43:34 +00:00
Jim Meyering
e6a9ce41b6 *** empty log message *** 1999-04-11 01:35:01 +00:00
Jim Meyering
03e24361ee (scanargs): Fix bug introduced with last change: now that
the loop is gone, manually decrement argc and increment argv.
1999-04-11 01:32:28 +00:00
Jim Meyering
24c8bc7107 *** empty log message *** 1999-04-08 13:44:31 +00:00
Jim Meyering
4ab8ea3cb7 (Options for date): Document --iso-8601 1999-04-08 13:44:19 +00:00
Jim Meyering
75e403b3b3 Accept new option: --iso-8601. 1999-04-08 13:44:00 +00:00
Jim Meyering
367c2367a6 *** empty log message *** 1999-04-07 17:43:47 +00:00
Jim Meyering
1ff7d4be9b (difftm): Protoize. 1999-04-07 17:43:36 +00:00
Jim Meyering
43dcc7ef21 . 1999-04-07 17:43:12 +00:00
Jim Meyering
b655fc9cf7 . 1999-04-07 17:41:57 +00:00
Jim Meyering
b6dfae5d0e *** empty log message *** 1999-04-07 12:53:22 +00:00
Jim Meyering
1f8c95df83 split long line 1999-04-06 17:26:07 +00:00
Jim Meyering
2af4373a90 Update from master source in libc, removing %f. 1999-04-06 14:22:06 +00:00
Jim Meyering
20203a77e1 *** empty log message *** 1999-04-06 14:15:04 +00:00
Jim Meyering
d712631a71 Remove test for %f. 1999-04-06 14:14:58 +00:00
Jim Meyering
2d9a947471 *** empty log message *** 1999-04-05 03:51:33 +00:00
Jim Meyering
47a4b79f74 Comment out the test added on 1999-01-31. 1999-04-05 03:51:17 +00:00
Jim Meyering
b967ecb86b (url_dir_list): Define properly.
(real_dir_list): Likewise.
1999-04-05 02:00:03 +00:00
Jim Meyering
4fa4d097bd *** empty log message *** 1999-04-04 23:15:20 +00:00
Jim Meyering
5050912be0 Don't include string.h.
[!HAVE_CONFIG_H]: Include string.h here.
[!HAVE_CONFIG_H]: Hard-code RETSIGTYPE to `int'.
(sigill_handler): Change return type and type of local `oldhandler' to
RETSIGTYPE.
(isaac_seed_machdep): Change and type of local `oldhandler' to
RETSIGTYPE.
1999-04-04 23:15:07 +00:00
Jim Meyering
a147c61141 use dquotes, not squotes 1999-04-04 21:07:25 +00:00
Jim Meyering
4afd87dd11 *** empty log message *** 1999-04-04 20:54:30 +00:00
Jim Meyering
339497e1f4 *** empty log message *** 1999-04-04 16:02:28 +00:00
Jim Meyering
62528b9cf8 Change the sed command used to extract the
filename from ls -l output, to accommodate the change in format.
1999-04-04 16:00:50 +00:00
Jim Meyering
50c573d457 Add case_GETOPT_* cases. 1999-04-04 15:46:31 +00:00
Jim Meyering
96309d1da7 *** empty log message *** 1999-04-04 15:44:58 +00:00
Jim Meyering
d815c152df Standardize --help and --version processing. 1999-04-04 15:44:26 +00:00
Jim Meyering
25abb410d4 define/use AUTHORS 1999-04-04 14:44:45 +00:00
Jim Meyering
baa8cd4493 *** empty log message *** 1999-04-04 14:43:27 +00:00
Jim Meyering
d008b48e3b (print_long_format): Add a space between %s and %3u. This
assures that even when modebuf has the trailing `+' and there are more
than 99 hard links to a file, the permissions string and the link count
will be separated.
1999-04-04 14:41:43 +00:00
Jim Meyering
5b86bf7cde import latest 1999-04-04 14:33:18 +00:00
Jim Meyering
54ec5153c5 (S_IWUSR): Define if not already defined. 1999-04-04 14:32:58 +00:00
Jim Meyering
6369a887ba . 1999-04-04 14:30:44 +00:00
Jim Meyering
42edc330ed fix comments
add FIXME
1999-04-04 14:30:30 +00:00
Jim Meyering
e0e1dc0bf8 (dopass): add curly braces to avoid warning about ambiguous `else'.
(wipefd): Add parentheses suggested by gcc.
(do_wipefd): Remove declaration of unused local.
1999-04-04 04:54:34 +00:00
Jim Meyering
f381610dd5 [!HAVE_CONFIG_H] (xstrtoul, error, close_stdout): Added stubs
to allow standalone compilation.

(wipefile): Added support for emulating /dev/fd/# files even if
the OS doesn't support them.  From Paul Eggert.

(main, usage): Changed --device short option to -D.

(wipefd, do_wipefd): Renamed function to do_wipefd and added
separate wipefd that performs sanity checks on externally-opened file
descriptors, such as not append-only.  From Paul Eggert.

(do_wipefd, isaac_seedfd): Do not read file for any reason.
if the file is low-entropy, it's a security hole.
(wipefile) Changed to open O_WRONLY and chmod to write-only when
forcing.
(isaac_seedfd) Function deleted as unnecessary.
From Paul Eggert.

(dopass): Dynamically fall back to fsync() if fdatasync() fails,
since POSIX, in their infinitesimal wisdom, encourage implementations
that return constant -1, making compile-time testing useless.
From Paul Eggert.

(dopass): Changed to support a size of -1 to mean "unknown".
This entailed changing to a counting-up offset rather than couting-down
cursize for the central state variable.  Also changed size argument to
be call-by-reference so that it can be passed back once known.
(sizer) Function deleted as unnecessary.
(wipefd): Changed to match.  From Paul Eggert

(dopass): Try to skip over bad blocks in destination files.
Also added ftruncate() for more complete destruction of metadata.

(main, usage): Changed "-" to stand for standard output.
(wipefd): Added error message to detect conflict with -v.

(dopass): Added periodic fsync() calls to keep the pass progress
display in sync with reality.  Hopefully they're sufficiently far spaced
that throughput isn't affected.  It might be a good thing to do even in
non-verbose mode, to avoid filling up the kernel caches with dirty data.
Also added ftruncate() for more complete destruction of metadata.

(quotearg_colon): New function to print
pathological filenames properly.
[!HAVE_CONFIG_H] (quotearg_colon_buf) New internal helper function
that does most of the work.
(wipefd, do_wipefd, dopass) Now take a qname (pre-quoted name) argument.
(wipename, wipefile, main) Changed diagnostics to use quotearg_colon.
Error messages are also in a more uniform format.
From Paul Eggert.

(struct Options, main, do_wipefd): Added -s/--size=N flag.
(xstrtoul): Added support for valid_suffixes to help this.
(usage) Documented it.

(error): Changed some arguments from N_() to _(), since error()
does not translate its argument.  I think this is a bug.

(struct Options do_wipefd, wipefd, wipefile, main): moved passes
argument into the Options structure as n_iterations, which is now a
size_t.  From Paul Eggert.

(isaac_seed_start, isaac_seed_data, isaac_seed_finish): New functions
to manage seeding of RNG with arbitrary-sized data.
(isaac_init): commented out as dead code.
(isaac_seed): changed to use new functions to prevent any possibility of
a buffer overflow.

(isaac_seed): Added support for Solaris' gethrtime()
configure.in: Corresponding feature test.  From Paul Eggert.

(wipename): Change remove() to unlink() for speed & portability.
Use lstat() instead of access() to see if a filename is taken.  This
works even on dangling symlinks and avoids the suid problems of
access(2).  From Paul Eggert.

(isaac_seed_machdep): New function for reading cycle counters
1999-04-04 04:37:39 +00:00
Jim Meyering
034df8db20 *** empty log message *** 1999-04-04 04:34:16 +00:00
Jim Meyering
8fe009ed7c back out Paul's changes 1999-04-04 02:34:49 +00:00
Jim Meyering
c21cecaea8 Use AUTHORS in place of string in parse_long_options call. 1999-04-03 05:26:48 +00:00
Jim Meyering
1d47220ab2 Insert AUTHORS definition. 1999-04-03 05:22:05 +00:00
Jim Meyering
cf691ec714 Use PROGRAM_NAME in place of string in parse_long_options call. 1999-04-03 05:20:06 +00:00
Jim Meyering
7c2d5de6c7 define PROGRAM_NAME 1999-04-03 05:01:48 +00:00
Jim Meyering
db6ce0481b *** empty log message *** 1999-04-03 03:29:41 +00:00
Jim Meyering
98327bba60 (S_IWUSR): Define if not already defined. 1999-04-03 03:29:17 +00:00
Jim Meyering
a29afcb470 (isaac_seed): Don't overrun the s->mm buffer.
Use gethrtime if available.  Don't assume that clock_gettime succeeds.
Put most random sources first.
1999-04-03 03:27:57 +00:00
Jim Meyering
bf504d2a46 Add new options -bcCklL and fix some porting problems.
Remove options -dp.  Do not read output files.

(long_opts, usage, main, wipefile): Adjust to new options.
("human.h", "quotearg.h"): New includes.
(struct Options): New members contents, links, n_iterations.
Remove allow_devices, remove_file.  Change n_iterations to size_t.
All uses changed.
(output_block_size): New var.
(usage): Declare __noreturn__ attribute.
(fdatasync): Define to -1 if not present, since we need to invoke both
fdatasync and fsync if both are present.  All invokers of fdatasync
now try fdatasync, then fsync.
(MIXIN): New macro.
(isaac_seed): Use it to mix in values.  Add uid, gid to mix.
Don't use gettimeofday, as it has too many porting problems.
(isaac_seedfd): Remove, since we no longer read the output files.
(sizefd): Remove; we now determine size by writing sequentially.
(dopass, wipename, wipefile, main): Clean up error messages.
(dopass): Keep track of offset relative to start of file, not
end, since we may not know how large the file is.  If size is
negative, write until we fall off the end of the file.
(wipefd): Do not read output file.
Return 0 if successful, -1 if not; do not make a special case for
non-regular files, since our callers have that info now.
(wipename): Now static.  Return errno if error.
(main): "-" now stands for standard output.
Do not shred append-only standard output.
(wipefile): Do not grant read permission to file when wiping it.
Use symbolic permission (S_IWUSR), not octal.
From Paul Eggert.
1999-04-03 03:27:27 +00:00
Jim Meyering
ce9c687d5a [HAVE_SYS_ACL_H]: Include sys/acl.h.
(struct fileinfo): New member `have_acl'.
(gobble_file): Initialize it.
(print_long_format): Use it.
Mostly from Alen Muzinic.
1999-04-02 05:38:15 +00:00
Jim Meyering
eaaff3246a *** empty log message *** 1999-04-02 04:24:48 +00:00
Jim Meyering
7ba3c38741 *** empty log message *** 1999-04-02 04:20:17 +00:00
Jim Meyering
c69d22ae26 *** empty log message *** 1999-04-02 04:15:14 +00:00
Jim Meyering
35aee6bf13 (open_maybe_create): New function.
(touch): Rewrite not to use `creat' and to eliminate a race
condition that could make touch truncate a nonempty file.
Report and suggestions from Andrew Tridgell.
1999-04-02 02:55:10 +00:00
Jim Meyering
ac03113efe *** empty log message *** 1999-04-02 02:47:58 +00:00
Jim Meyering
bbea0501a9 *** empty log message *** 1999-04-01 05:16:46 +00:00
Jim Meyering
a7b641acd5 (main): Qualify a char* with the `const' keyword. 1999-04-01 05:15:37 +00:00
Jim Meyering
c4cf0531ff (main): Qualify a char* with the `const' keyword. 1999-04-01 05:10:41 +00:00
Jim Meyering
a7d0351c20 (install_file_in_dir): Qualify a char* with the `const' keyword. 1999-04-01 05:09:59 +00:00
Jim Meyering
beb464c0ea (main): Qualify a char* with the `const' keyword. 1999-04-01 05:08:22 +00:00
Jim Meyering
d8a18c33e8 (main): Qualify a char* with the `const' keyword. 1999-04-01 05:07:51 +00:00
Jim Meyering
abdc079cd5 Remove prototypes and tsort function definitions. 1999-04-01 05:05:17 +00:00
Jim Meyering
d0b9ad729c (main): Qualify a char* with the `const' keyword. 1999-04-01 04:58:29 +00:00
Jim Meyering
24df6275fb (main): Move the declaration of `e' into the scope
where it's used and make it `const'.
1999-04-01 04:56:28 +00:00
Jim Meyering
2500fe4079 (main): Qualify a char* with the `const' keyword. 1999-04-01 04:53:13 +00:00
Jim Meyering
3a3189e6c3 (touch): Qualify a char* with the `const' keyword. 1999-04-01 04:47:55 +00:00
Jim Meyering
db3c0ffb44 . 1999-03-31 15:21:00 +00:00
Jim Meyering
8935f38d4e *** empty log message *** 1999-03-31 06:02:07 +00:00
Jim Meyering
667799f7e2 Don't include closeout.h or version-etc.h explicitly. Now, they're included via sys2.h. 1999-03-31 05:59:13 +00:00
Jim Meyering
d30f9691c1 *** empty log message *** 1999-03-31 05:54:11 +00:00
Jim Meyering
fdd07e3d2b No longer include long-options.h.
[long_options]: Add entries for --help and --version.
Remove parse_long_options call.
(main) [getopt switch]: Add a case for each of --help and --version.
1999-03-31 05:52:46 +00:00
Jim Meyering
419aa42181 Include "closeout.h" and "version-etc.h" 1999-03-31 05:52:46 +00:00
Jim Meyering
516b48e7a2 (AUTHORS): Actually define and use. 1999-03-31 05:06:42 +00:00
Jim Meyering
03c1b8518c (PROGRAM_NAME, AUTHORS): Define and use. 1999-03-31 04:16:08 +00:00
Jim Meyering
39090114f0 (PROGRAM_NAME, AUTHORS): Define and use. 1999-03-31 04:11:35 +00:00
Jim Meyering
b2513fc340 import latest 1999-03-30 15:11:20 +00:00
Jim Meyering
b989ccb248 . 1999-03-30 05:40:40 +00:00
Jim Meyering
2067a9fe97 . 1999-03-30 04:52:57 +00:00
Jim Meyering
a717cdf2d6 (make_node_op_equals): New function.
(mode_append_entry): Likewise.
(mode_compile): When none of [ugoa] is specified in an `=OP' change
mode request, insert a `=0' entry into the linked list so that all
bits are cleared first.  Use the new functions.
1999-03-30 04:51:08 +00:00
Jim Meyering
bb0631e825 *** empty log message *** 1999-03-30 04:48:57 +00:00
Jim Meyering
9dab31b501 (rmdir): Use pid_t instead of int; check status
against zero.  This is to improve portability.
1999-03-30 04:48:41 +00:00
Jim Meyering
2080baecff (rename): Use pid_t instead of int; check status
against zero.  This is to improve portability.
1999-03-30 04:48:17 +00:00
Jim Meyering
69952761e1 (mkdir): Use pid_t instead of int; check status
against zero.  This is to improve portability.
1999-03-30 04:47:52 +00:00
Jim Meyering
319976a665 (strip): Use standard "cannot fork" message.
Check for strip nonzero exit status.
1999-03-30 04:43:53 +00:00
Jim Meyering
8137487dd7 *** empty log message *** 1999-03-30 04:36:00 +00:00
Jim Meyering
0b1a5f6fe9 *** empty log message *** 1999-03-30 04:34:46 +00:00
Jim Meyering
236d3671e2 *** empty log message *** 1999-03-30 04:33:22 +00:00
Jim Meyering
ab33da4b55 (jm_CHECK_ALL_TYPES): New macro. 1999-03-30 04:29:19 +00:00
Jim Meyering
34f0f5c2c9 *** empty log message *** 1999-03-29 04:39:56 +00:00
Jim Meyering
bad53b08e6 Define GNU_PACKAGE here.
Be sure to AC_SUBST it, once again, so that @GNU_PACKAGE@ is
replaced e.g., in the *.sh files of the sh-utils.
1999-03-29 04:39:50 +00:00
Jim Meyering
1682163674 PROGRAM_NAME: rename from COMMAND_NAME 1999-03-29 02:56:52 +00:00
Jim Meyering
8ca2ea6a0e *** empty log message *** 1999-03-28 21:01:09 +00:00
Jim Meyering
7549c10f35 (get_date): Reuse tm_isdst of first localtime
call; this is an improvement on a bug fix suggested by
martin@dresden.nacamar.de.  Do not assume that localtime and
gmtime return non-null.
From Paul Eggert.
1999-03-28 20:58:51 +00:00
Jim Meyering
45eb651902 *** empty log message *** 1999-03-28 19:06:17 +00:00
Jim Meyering
6c9f8b17d0 *** empty log message *** 1999-03-28 14:59:09 +00:00
Jim Meyering
771cd1f617 *** empty log message *** 1999-03-28 14:40:37 +00:00
Jim Meyering
75cedb69be . 1999-03-28 14:40:21 +00:00
Jim Meyering
dc475b06bd *** empty log message *** 1999-03-28 14:39:34 +00:00
Jim Meyering
581baf7d99 (mode_compile): Upon allocation failure, free
everything starting with the head, not the tail.
1999-03-28 05:44:33 +00:00
Jim Meyering
7ca462d865 . 1999-03-27 23:07:53 +00:00
Jim Meyering
81e166e0ce *** empty log message *** 1999-03-27 14:33:30 +00:00
Jim Meyering
190ab69c07 *** empty log message *** 1999-03-27 14:32:36 +00:00
Jim Meyering
9d044f6b96 (strip): Use pid_t, not int. 1999-03-27 14:32:06 +00:00
Jim Meyering
713d9932c3 (print_user): Use uid_t instead of int.
(print_group): Use gid_t instead of int.
1999-03-27 14:29:51 +00:00
Jim Meyering
83bd8b5ff1 . 1999-03-26 14:27:18 +00:00
Jim Meyering
f92141140b *** empty log message *** 1999-03-26 14:26:38 +00:00
Jim Meyering
695cdd6f6a No longer include long-options.h.
Include version-etc.h instead.
(PROGRAM_NAME, AUTHORS): Define.
[long_options]: Add entries for --help and --version.
Remove parse_long_options call.
(main) [getopt switch]: Add a case for each of --help and --version.
1999-03-26 14:26:18 +00:00
Jim Meyering
e7f2703c47 No longer include long-options.h.
Include version-etc.h instead.
(PROGRAM_NAME, AUTHORS): Define.
[long_options]: Add entries for --help and --version.
Remove parse_long_options call.
(main) [getopt switch]: Add a case for each of --help and --version.
1999-03-26 14:25:30 +00:00
Jim Meyering
3d308f9549 No longer include long-options.h.
Include version-etc.h instead.
(PROGRAM_NAME, AUTHORS): Define.
[long_options]: Add entries for --help and --version.
Remove parse_long_options call.
(main) [getopt switch]: Add a case for each of --help and --version.
1999-03-26 14:23:59 +00:00
Jim Meyering
f42367c3e7 No longer include long-options.h.
Include version-etc.h instead.
(PROGRAM_NAME, AUTHORS): Define.
[long_options]: Add entries for --help and --version.
Remove parse_long_options call.
(main) [getopt switch]: Add a case for each of --help and --version.
1999-03-26 14:22:51 +00:00
Jim Meyering
0aa9923d96 No longer include long-options.h.
Include version-etc.h instead.
(PROGRAM_NAME, AUTHORS): Define.
[long_options]: Add entries for --help and --version.
Remove parse_long_options call.
(main) [getopt switch]: Add a case for each of --help and --version.
1999-03-26 14:19:02 +00:00
Jim Meyering
85b4cd220b No longer include long-options.h.
Include version-etc.h instead.
(PROGRAM_NAME, AUTHORS): Define.
[long_options]: Add entries for --help and --version.
Remove parse_long_options call.
(main) [getopt switch]: Add a case for each of --help and --version.
1999-03-26 14:18:29 +00:00
Jim Meyering
f0a21a933a reorder includes 1999-03-26 14:12:32 +00:00
Jim Meyering
42884ec0c7 (PROGRAM_NAME, AUTHORS): Define and use. 1999-03-26 14:07:12 +00:00
Jim Meyering
c227e4a167 (PROGRAM_NAME, AUTHORS): Define
(long_options): Remove unused struct.
(scanargs): Remove useless loop.
(main): Use PROGRAM_NAME and AUTHORS in call to parse_long_options.
1999-03-26 14:05:40 +00:00
Jim Meyering
c92de17d2f define and use AUTHORS 1999-03-26 05:17:17 +00:00
Jim Meyering
c060f16ed7 No longer include long-options.h.
Include version-etc.h instead.
(PROGRAM_NAME): Define.
[long_options]: Add entries for --help and --version.
Remove parse_long_options call.
(main) [getopt switch]: Add a case for each of --help and --version.
1999-03-26 04:23:55 +00:00
Jim Meyering
f19d194943 . 1999-03-26 04:23:01 +00:00
Jim Meyering
a721b1ac67 (libfu_a_SOURCES): Add version-etc.c.
(noinst_HEADERS): Add version-etc.h.
1999-03-26 04:20:23 +00:00
Jim Meyering
2a147b2b43 (parse_long_options): Remove version-, copyright-,
and author-printing code.  Do it via version_etc.
1999-03-26 04:19:07 +00:00
Jim Meyering
c004c87b6c *** empty log message *** 1999-03-26 04:17:33 +00:00
Jim Meyering
eff1cee6e1 (GETOPT_HELP_CHAR): Define.
(GETOPT_VERSION_CHAR): Define.
(GETOPT_HELP_OPTION_DECL): Define.
(GETOPT_VERSION_OPTION_DECL): Define.
(case_GETOPT_HELP_CHAR): Define.
(case_GETOPT_VERSION_CHAR): Define.
1999-03-26 04:12:41 +00:00
Jim Meyering
06303195c0 No longer include long-options.h.
Include version-etc.h instead.
(PROGRAM_NAME): Define.
[long_options]: Add entries for --help and --version.
Remove parse_long_options call.
(main) [getopt switch]: Add a case for each of --help and --version.
1999-03-26 04:11:15 +00:00
Jim Meyering
dd007634ac No longer include long-options.h.
Include version-etc.h instead.
(PROGRAM_NAME): Define.
[long_options]: Add entries for --help and --version.
Remove parse_long_options call.
(main) [getopt switch]: Add a case for each of --help and --version.
1999-03-26 04:10:55 +00:00
Jim Meyering
562f29a2a2 (recheck): Factor out a block of duplicated code.
Set f->size to 0 upon encountering a new file so we read it from
the beginning rather than from then end of the first line or
block.  Otherwise, after a log rotation, tail would omit the first
line or block of the new file.  Reported by Ed Avis.
1999-03-25 14:29:13 +00:00
Jim Meyering
11212212b0 *** empty log message *** 1999-03-25 14:23:40 +00:00
Jim Meyering
1271e5321c *** empty log message *** 1999-03-24 13:48:48 +00:00
Jim Meyering
0b80d92d60 import 1.010 1999-03-24 13:48:22 +00:00
Jim Meyering
542d10fd71 *** empty log message *** 1999-03-22 22:36:39 +00:00
Jim Meyering
cec649b346 tweak usage message -- from Karl 1999-03-22 22:36:12 +00:00
Jim Meyering
04d1d85350 *** empty log message *** 1999-03-22 22:35:53 +00:00
Jim Meyering
cdbee41fbf *** empty log message *** 1999-03-21 13:38:51 +00:00
Jim Meyering
153de419bc import latest 1999-03-21 01:56:57 +00:00
Jim Meyering
bc3d22ae9b . 1999-03-20 23:25:35 +00:00
Jim Meyering
dafd051712 . 1999-03-20 23:24:55 +00:00
Jim Meyering
fde28088f4 *** empty log message *** 1999-03-20 23:24:23 +00:00
Jim Meyering
c2db2a08d9 s/jm_WITH_REGEX/jm_INCLUDED_REGEX/ 1999-03-20 23:24:15 +00:00
Jim Meyering
1424b8fd50 *** empty log message *** 1999-03-20 23:23:20 +00:00
Jim Meyering
df3d9f6812 (jm_INCLUDED_REGEX): Rename from jm_WITH_REGEX.
Don't depend on AM_GLIBC.  Suggestions from Alain Magloire.
1999-03-20 23:23:14 +00:00
Jim Meyering
df570c09ee *** empty log message *** 1999-03-20 23:16:34 +00:00
Jim Meyering
e2ff4b6e90 Don't modify PATH just to get GNU nice. Instead, try
to find an absolute path for GNU nice.  From Bruno Haible.
1999-03-20 23:10:02 +00:00
Jim Meyering
e16c2033b4 *** empty log message *** 1999-03-20 15:01:34 +00:00
Jim Meyering
4159e9e2f6 *** empty log message *** 1999-03-20 04:36:50 +00:00
Jim Meyering
a6ea4bd455 [WINSIZE_IN_PTEM]: Include sys/stream.h and sys/ptem.h.
Required by SCO ODT 2.0 systems.  Reported by William Bader.
1999-03-20 04:07:01 +00:00
Jim Meyering
f9ce2cffec *** empty log message *** 1999-03-20 04:06:02 +00:00
Jim Meyering
2bf19e8467 *** empty log message *** 1999-03-20 04:02:37 +00:00
Jim Meyering
5a16e75a56 (jm_WINSIZE_IN_PTEM): New macro. 1999-03-20 04:02:23 +00:00
Jim Meyering
fd6c9bbcef . 1999-03-18 15:34:12 +00:00
Jim Meyering
ab589a9ada (remove_cwd_entries): Reflect changes in hash_insert.
(remove_init): Call hash_initialize with one more argument.
1999-03-18 15:33:56 +00:00
Jim Meyering
3a7f42f1a8 . 1999-03-17 21:15:46 +00:00
Jim Meyering
278e9999a9 *** empty log message *** 1999-03-17 14:18:09 +00:00
Jim Meyering
8ee5e50927 (is_prime): Return bool rather than int. 1999-03-17 14:07:34 +00:00
Jim Meyering
3ae2c2ecf0 import latest 1999-03-16 15:34:33 +00:00
Jim Meyering
5cfbca30a9 tweak comments
add curlies
use assert(0) in place of abort
1999-03-15 16:52:22 +00:00
Jim Meyering
6d97ed71b7 *** empty log message *** 1999-03-15 15:50:55 +00:00
Jim Meyering
0a1a14a095 Revamp to allow fine-tuning to control when and by how
much the table grows and shrinks.
(next_prime): Don't assert.
(hash_reset_tuning): New function.
(check_tuning): New function.
(hash_initialize): Accept and use new tuning parameter.
(hash_rehash): Rewrite, updating for tuning.
(hash_insert): Honor tuning semantics.
(hash_delete): Likewise.
From Franois Pinard.
1999-03-15 15:50:31 +00:00
Jim Meyering
674d2ec393 (struct hash_tuning): Define.
(struct hash_table) [tuning]: Add member.
(hash_initialize): Add `tuning' parameter.
1999-03-15 15:41:59 +00:00
Jim Meyering
96359cf648 (hash_insert): Update prototype. 1999-03-15 15:33:21 +00:00
Jim Meyering
855b12df1d (hash_insert): Remove last parameter and change semantics.
(hash_insert): Don't increment n_entries unconditionally --
otherwise, we'd do so even when the insertion failed.
From Franois Pinard.
1999-03-15 15:33:01 +00:00
Jim Meyering
6e8f572094 . 1999-03-14 21:39:42 +00:00
Jim Meyering
e4fd405431 (tac_mem): `#if-0'-out this unused function.
(tac_stdin_to_mem): Likewise.
1999-03-13 20:30:33 +00:00
Jim Meyering
e9e5d9bf3f . 1999-03-13 20:29:14 +00:00
Jim Meyering
9e1ddcbf89 . 1999-03-13 20:28:51 +00:00
Jim Meyering
2003f808c7 (cut invocation): Describe --output-delimiter. 1999-03-13 17:26:44 +00:00
Jim Meyering
5c591b0e36 *** empty log message *** 1999-03-13 16:24:16 +00:00
Jim Meyering
dac5c72090 *** empty log message *** 1999-03-13 16:22:59 +00:00
Jim Meyering
5c8eb257ea *** empty log message *** 1999-03-13 16:21:19 +00:00
Jim Meyering
703336d148 *** empty log message *** 1999-03-13 16:19:18 +00:00
Jim Meyering
2bc2cc2f54 (base_name): If NAME is all slashes, return `/' (in
conformance with the single unix spec).  Reported by Peter Moulder.
1999-03-13 16:09:00 +00:00
Jim Meyering
1905d5266b *** empty log message *** 1999-03-12 15:24:25 +00:00
Jim Meyering
58bb02e74d *** empty log message *** 1999-03-12 15:19:29 +00:00
Jim Meyering
dc82d52a02 *** empty log message *** 1999-03-12 15:15:23 +00:00
Jim Meyering
158b19d487 *** empty log message *** 1999-03-12 15:14:05 +00:00
Jim Meyering
e0aa18bb33 (dump_remainder): Don't fflush stdout here.
(main) [if forever]: Make stdout unbuffered, instead.
1999-03-12 15:12:55 +00:00
Jim Meyering
ac6d2b033e (SETVBUF): Define new macro. 1999-03-12 15:11:57 +00:00
Jim Meyering
a3631a8114 *** empty log message *** 1999-03-12 15:11:29 +00:00
Jim Meyering
5478a521d6 Use AC_FUNC_SETVBUF_REVERSED. 1999-03-12 15:11:06 +00:00
Jim Meyering
ff12f6ff27 Declare getloadavg so I can build with -Werror. 1999-03-11 04:05:25 +00:00
Jim Meyering
ae79d1fceb *** empty log message *** 1999-03-11 03:57:23 +00:00
Jim Meyering
45eb5dac3c Skip failing tests: parenb, -parenb, -cread. 1999-03-11 03:49:07 +00:00
Jim Meyering
95d1aad02d *** empty log message *** 1999-03-10 15:39:29 +00:00
Jim Meyering
b910e6ea14 (canon_host): Don't use he->h_addr directly.
Based on a patch from Savochkin Andrey Vladimirovich.
1999-03-10 15:39:02 +00:00
Jim Meyering
4ba4999328 (getugroups): Take new parameter, gid.
Add gid to the list of groups.
From Ulrich Drepper.
1999-03-10 15:35:47 +00:00
Jim Meyering
d7176770d4 *** empty log message *** 1999-03-10 15:34:45 +00:00
Jim Meyering
fe27c7d14e fix typo in comment. 1999-03-09 18:53:54 +00:00
Jim Meyering
0c23f18574 *** empty log message *** 1999-03-09 16:11:03 +00:00
Jim Meyering
fbaac7ba29 fix small thinko 1999-03-09 16:10:30 +00:00
Jim Meyering
959eb64fb4 (xgetgroups): Take new parameter, gid, and pass it to getugroups.
(print_group_list): Call getpwuid and adjust calls to xgetgroups
to include new parameter.
1999-03-09 16:08:19 +00:00
Jim Meyering
290a9e03f2 (getugroups): Take new parameter, gid.
Add gid to the list of groups.
From Ulrich Drepper.
1999-03-09 16:07:49 +00:00
Jim Meyering
c057543e47 protoize 1999-03-09 16:07:16 +00:00
Jim Meyering
7456d2a652 . 1999-03-08 14:42:45 +00:00
Jim Meyering
965a1e5a94 *** empty log message *** 1999-03-08 14:41:57 +00:00
Jim Meyering
bee00278e6 *** empty log message *** 1999-03-08 14:40:54 +00:00
Jim Meyering
59aae8f311 *** empty log message *** 1999-03-08 14:37:40 +00:00
Jim Meyering
097ca8427d *** empty log message *** 1999-03-08 02:44:05 +00:00
Jim Meyering
546f3f81da (xalloc_fail): Use "%s" format so the message doesn't
have to be scanned for % signs.  Suggestion from Franois Pinard.
1999-03-08 02:43:14 +00:00
Jim Meyering
e879a5a73e *** empty log message *** 1999-03-07 21:00:44 +00:00
Jim Meyering
8eaa894f84 Add two more URLs and the loops to use them. 1999-03-07 20:19:08 +00:00
Jim Meyering
be65d0ad03 restore blank lines in --version output 1999-03-07 17:48:10 +00:00
Jim Meyering
3a69319e76 *** empty log message *** 1999-03-07 17:03:18 +00:00
Jim Meyering
0d24fd9224 *** empty log message *** 1999-03-07 16:59:29 +00:00
Jim Meyering
9bf8b6b4c7 Use only those *_unlocked macros that are declared. 1999-03-07 16:59:21 +00:00
Jim Meyering
4677710c39 *** empty log message *** 1999-03-07 16:44:06 +00:00
Jim Meyering
7fbb24fe4e (parse_long_options): Include `Copyright...' line in --version output. 1999-03-07 16:43:15 +00:00
Jim Meyering
c537a72db4 *** empty log message *** 1999-03-07 16:06:45 +00:00
Jim Meyering
23b14f50e3 Test for the actual feature.
With help from Eli Zaretskii.
1999-03-07 16:06:33 +00:00
Jim Meyering
b9842e7300 *** empty log message *** 1999-03-07 15:53:48 +00:00
Jim Meyering
2cd167fba1 (parse_long_options): Add the `...NO warranty...' message. 1999-03-07 15:53:20 +00:00
Jim Meyering
133e0a63c5 *** empty log message *** 1999-03-07 15:52:29 +00:00
Jim Meyering
95fe06e1ba (usage): Add missing \n\. 1999-03-07 15:52:14 +00:00
Jim Meyering
0c3c9353ab *** empty log message *** 1999-03-07 14:41:04 +00:00
Jim Meyering
cffac32634 *** empty log message *** 1999-03-07 14:38:08 +00:00
Jim Meyering
b035c9078c *** empty log message *** 1999-03-07 14:37:27 +00:00
Jim Meyering
b79cd299cb (TESTS): Add newline-1. 1999-03-07 14:35:18 +00:00
Jim Meyering
1e8f1e0863 Remove newline test. 1999-03-07 14:34:03 +00:00
Jim Meyering
0f8e5e93c1 remove trailing blanks 1999-03-07 13:57:27 +00:00
Jim Meyering
4433aaa043 Big pr update from Roland Huebner. 1999-03-07 13:56:47 +00:00
Jim Meyering
68bb940729 1999-02-13 Roland Huebner <rh@pelikan.cologne.de>
* src/pr.c
(main): Redefine options -s, -w to be POSIX compliant; introduce
new options -J, -S, -W to disentangle -s and -w when used together
with the three column options;
(add_line_number): Make POSIX compliant; use default number
separator TAB with single column output.
(add_line_number): Make POSIX compliant; with multicolumn output
now prefer `text columns of equal width' rather than a consequent
use of `default n-separator TAB'.
(add_line_number): Change line number cut-off from lower-oder to
higher-oder digit to avoid loss of information; no consequent
handling exists in different utilities and other UNIXes.
(char_to_clump): Expand input text tabs to 8 spaces, if
input_tab_char doesn't equal TAB (adapted to other UNIXes).
(usage): Update POSIX compliant options -s, -w; add new options -J,
-S, -W.
(main): Update the source internal documentation.
Some smaller BUGFIXES (print_sep_string, init_header, skip_to_page,
reset_status, print_header).
1999-03-07 13:46:22 +00:00
Jim Meyering
96e08503da (backslash): Use .\foo instead of \.foo so we
don't tramp on root directory in MSDOS/Windows.
Suggestion from Eli Zaretskii.
1999-03-07 13:34:30 +00:00
Jim Meyering
21e69c4002 (TESTS_ENVIRONMENT): Run md5sum with the --text option (for MSDOS). 1999-03-07 13:14:21 +00:00
Jim Meyering
bcaa45d181 *** empty log message *** 1999-03-07 05:14:30 +00:00
Jim Meyering
96e8d93844 *** empty log message *** 1999-03-07 05:11:05 +00:00
Jim Meyering
104866a990 New test: 8bit-delim. 1999-03-07 05:10:32 +00:00
Jim Meyering
3a01605b6b (getstr): Change type of `delim' parameter from char to int.
(cut_fields): Cast to `unsigned char' before comparing.
(main): Cast to `unsigned char' before assigning.
1999-03-07 05:09:23 +00:00
Jim Meyering
13106e125b *** empty log message *** 1999-03-07 04:54:43 +00:00
Jim Meyering
8a8a4eeab0 (batch_convert): Use a `%s' format in error call,
in case the argument string contains a `%'.
1999-03-07 04:54:36 +00:00
Jim Meyering
075ce6b479 *** empty log message *** 1999-03-07 04:53:14 +00:00
Jim Meyering
c771f143db (main): Use a `%s' format in error call,
in case the argument string contains a `%'.
1999-03-07 04:52:49 +00:00
Jim Meyering
76b9399091 (FATAL_ERROR): s/s/Message 1999-03-07 04:50:48 +00:00
Jim Meyering
81706baebd (swallow_file_in_memory): Use a `%s' format in error call,
in case the argument string contains a `%'.
1999-03-07 04:35:33 +00:00
Jim Meyering
59277d9406 (swallow_file_in_memory): Slurp up the whole file at
once on MSDOS as well, but we have to relax the test for whether
reading it succeeded.
1999-03-07 04:32:25 +00:00
Jim Meyering
73444fc778 [__DJGPP__]: Include <io.h> and <sys/exceptn.h>. 1999-03-07 04:10:17 +00:00
Jim Meyering
f62a91b03e . 1999-03-06 22:01:29 +00:00
Jim Meyering
a820bf8457 *** empty log message *** 1999-03-06 22:00:52 +00:00
Jim Meyering
1120f4c00c . 1999-03-06 22:00:09 +00:00
Jim Meyering
e2fcc9923d . 1999-03-06 21:59:25 +00:00
Jim Meyering
a7c6ba5e86 *** empty log message *** 1999-03-06 15:31:38 +00:00
Jim Meyering
5b2aa1846b Include long-options.h.
[long_options]: Remove the "help" and "version" entries.
Remove declarations of show_help and show_version.
(main): Use parse_long_options, including author name(s).
Remove the show_version and show_help blocks.
1999-03-06 15:28:54 +00:00
Jim Meyering
782b270314 *** empty log message *** 1999-03-04 14:02:25 +00:00
Jim Meyering
ff743d5451 (main): Include author name argument in call to parse_long_options. 1999-03-04 14:02:14 +00:00
Jim Meyering
0f67dfcaa3 *** empty log message *** 1999-03-04 05:36:19 +00:00
Jim Meyering
88cbad9817 Include long-options.h
[long_options]: Remove the "help" and "version" entries.
Remove declarations of show_help and show_version.
(main): Use parse_long_options, including author name(s).
Remove the show_version and show_help blocks.
1999-03-04 05:36:10 +00:00
Jim Meyering
0ae96f2361 (main): Include author name argument in call to parse_long_options. 1999-03-04 05:33:22 +00:00
Jim Meyering
32deb2026b (main): Include author name argument in call to parse_long_options. 1999-03-04 05:32:11 +00:00
Jim Meyering
8a61d8e336 Include long-options.h
[long_options]: Remove the "help" and "version" entries.
Remove declarations of show_help and show_version.
(main): Remove `const' attribute from dcl of argv parameter.
Call bindtextdomain and textdomain.
Use parse_long_options, including author name(s).
Remove the show_version and show_help blocks.
1999-03-04 05:31:17 +00:00
Jim Meyering
6e7be7b1c6 (main): Include author name argument. 1999-03-04 05:26:47 +00:00
Jim Meyering
51f63eeac9 *** empty log message *** 1999-03-04 05:09:13 +00:00
Jim Meyering
61fa70ac19 Include long-options.h
[long_options]: Remove the "help" and "version" entries.
(main): Use parse_long_options, including author name(s).
Remove the show_version and show_help blocks.
1999-03-04 05:09:05 +00:00
Jim Meyering
d0bdbe00ba Update prototype. 1999-03-04 05:08:21 +00:00
Jim Meyering
e35e21e280 (_): Define it.
(parse_long_options): Accept new parameter, authors, and print it.
1999-03-04 05:08:01 +00:00
Jim Meyering
8f443fb9c1 *** empty log message *** 1999-03-03 03:46:58 +00:00
Jim Meyering
d48f86fb02 *** empty log message *** 1999-03-02 13:53:48 +00:00
Jim Meyering
a877f41093 (read_utmp) [HAVE_UTMPNAME]: Rewrite. 1999-03-02 13:53:33 +00:00
Jim Meyering
88ab6854e5 import latest 1999-03-02 02:44:56 +00:00
Jim Meyering
09483e6dc6 *** empty log message *** 1999-02-19 07:33:55 +00:00
Jim Meyering
fce748fe1f <alloca.h>: Include if HAVE_ALLOCA_H, not FORCE_ALLOCA_H.
The FORCE_ALLOCA_H was a relic of the bad old pre-autoconf Emacs days.
1999-02-19 07:31:48 +00:00
Jim Meyering
878b334351 *** empty log message *** 1999-02-17 20:12:20 +00:00
Jim Meyering
0800a11f65 (AM_GNU_GETTEXT): Do `changequote' around use of brackets
in macro definition.  From Eli Zaretskii and Alain Magloire.
1999-02-17 20:12:10 +00:00
Jim Meyering
37f353eb26 tweak comment 1999-02-17 14:58:41 +00:00
Jim Meyering
68cab6ea0d (wipename): Fix string thinko. Now, shredding files
in subdirectories works (dir/file).  From Janos Farkas.
1999-02-17 14:41:39 +00:00
Jim Meyering
2e250112ee *** empty log message *** 1999-02-17 14:41:22 +00:00
Jim Meyering
a4758241e7 new version from Uli 1999-02-16 21:35:48 +00:00
Jim Meyering
4762e42042 . 1999-02-16 14:52:40 +00:00
Jim Meyering
8e42ae2cc4 . 1999-02-16 04:23:49 +00:00
Jim Meyering
824529d0aa (usage): add \n\ 1999-02-16 04:22:00 +00:00
Jim Meyering
7568de8654 update copyright dates 1999-02-16 04:20:43 +00:00
Jim Meyering
16f3644da7 *** empty log message *** 1999-02-16 04:19:44 +00:00
Jim Meyering
e2bf10d90e (main): #ifdef-out unreachable code. 1999-02-16 04:18:43 +00:00
Jim Meyering
df7b9c808b update copyright dates 1999-02-16 04:17:15 +00:00
Jim Meyering
4eb7ae21e8 (usage): Add a one-line description. 1999-02-16 04:15:46 +00:00
Jim Meyering
07c6f5e387 update copyright dates 1999-02-16 04:14:17 +00:00
Jim Meyering
e02df462ba *** empty log message *** 1999-02-15 15:42:39 +00:00
Jim Meyering
b874c17169 *** empty log message *** 1999-02-15 15:25:29 +00:00
Jim Meyering
e63a340c46 *** empty log message *** 1999-02-15 13:43:27 +00:00
Jim Meyering
aa1c4f58f1 . 1999-02-14 16:49:44 +00:00
Jim Meyering
089aa98fb8 *** empty log message *** 1999-02-14 03:29:33 +00:00
Jim Meyering
69272c2e85 (dc_parse_stream): Don't try to dereference NULL
if there's an error is in our built-in list.
1999-02-14 03:28:41 +00:00
Jim Meyering
421265ba29 *** empty log message *** 1999-02-14 02:36:41 +00:00
Jim Meyering
0fbe67a146 (main): Set x.backup_type only if backups are requested.
(cp_option_init): Initialize backup_type.
(backup_type): Remove unused variable.
1999-02-14 02:36:16 +00:00
Jim Meyering
a0a658c1f6 import latest 1999-02-09 20:49:55 +00:00
Jim Meyering
232eb53f42 *** empty log message *** 1999-02-09 05:04:50 +00:00
Jim Meyering
147d933a4f (slack_codes): Add "DOOR".
(ls_codes): Add corresponding "do".
1999-02-09 05:04:18 +00:00
Jim Meyering
6dde919c8a *** empty log message *** 1999-02-08 04:02:16 +00:00
Jim Meyering
0bf08d23cd Run all tests even if some fails.
Don't use trap.
1999-02-08 04:01:34 +00:00
Jim Meyering
ed2d3ddb6b Use `stty', not $STTY.
Fix typo in VERBOSE code: s/\$RM/stty/.
1999-02-08 03:42:02 +00:00
Jim Meyering
3dea3dfe03 (TESTS_ENVIRONMENT): Set PATH, not STTY. 1999-02-08 03:40:51 +00:00
Jim Meyering
70a87bf7ca *** empty log message *** 1999-02-08 03:35:15 +00:00
Jim Meyering
1a4f074c9e Don't include stdio.h. 1999-02-08 03:32:38 +00:00
Jim Meyering
9b1973fbd7 Include stdio.h. 1999-02-08 03:32:06 +00:00
Jim Meyering
03b1afaa8d *** empty log message *** 1999-02-08 03:31:41 +00:00
Jim Meyering
60979fecbb copyright date 1999-02-08 03:31:26 +00:00
Jim Meyering
e9144d8d30 copyright date 1999-02-08 03:30:52 +00:00
Jim Meyering
0c87b3168c Include stdio.h. 1999-02-08 03:30:33 +00:00
Jim Meyering
3946ca7fc1 Include stdio.h. 1999-02-08 03:30:06 +00:00
Jim Meyering
2dc3a543b1 Include stdio.h. 1999-02-08 03:29:36 +00:00
Jim Meyering
f7bb13ecd8 Include stdio.h. 1999-02-08 03:29:02 +00:00
Jim Meyering
68737ed84b s/@code etc./@env/ for envvars 1999-02-08 03:26:59 +00:00
Jim Meyering
e91bb3d2e9 typos, s/@code/@env/ for envvars 1999-02-08 00:03:16 +00:00
Jim Meyering
5fd73cbdf3 *** empty log message *** 1999-02-08 00:00:44 +00:00
398 changed files with 17088 additions and 8119 deletions

View File

@@ -11,27 +11,38 @@ maintainer-check:
$(MAKE) distcheck
$(MAKE) my-distcheck
prev-version := $(shell echo $(VERSION)|tr a-z Xa-y)
tag-package = $(shell echo "$(PACKAGE)" | tr a-z A-Z)
tag-this-version = $(subst .,_,$(VERSION))
tag-prev-version = $(subst .,_,$(prev-version))
this-cvs-tag = $(tag-package)-$(tag-this-version)
prev-cvs-tag = $(tag-package)-$(tag-prev-version)
# Verify that all source files using _() are listed in po/POTFILES.in.
po-check:
grep -E -v '^(#|$$)' po/POTFILES.in | sort > $@-1
grep -E -l '\b_\(' lib/*.c src/*.c | sort > $@-2
diff -u $@-1 $@-2
rm -f $@-1 $@-2
# Tag before making distribution. Also, don't make a distribution if
# checks fail. Also, make sure the NEWS file is up-to-date.
# FIXME: use dist-hook/my-dist like distcheck-hook/my-distcheck.
cvs-dist: maintainer-check
pkg=`echo "$(PACKAGE)" | tr a-z A-Z`; \
ver=`echo "$(VERSION)" | sed 's/\./_/g'`; \
tag="$$pkg-$$ver"; \
echo tag=$$tag; \
if cvs -n log -h README| grep -e $$tag: > /dev/null; then \
echo $(this-cvs-tag); \
if cvs -n log -h README| grep -e $(this-cvs-tag): > /dev/null; then \
echo "VERSION not new; not tagging" 1>&2; \
exit 1; \
fi; \
cvs update po; \
cvs tag -c $$tag
cvs tag -c $(this-cvs-tag)
$(MAKE) dist
t=./=test
my-distcheck:
-rm -rf $(t)
mkdir $(t)
GZIP=$(GZIP) $(TAR) -C $(t) -zxf $(distdir).tar.gz
GZIP=$(GZIP) $(AMTAR) -C $(t) -zxf $(distdir).tar.gz
cd $(t)/$(distdir) \
&& ./configure --disable-nls \
&& $(MAKE) CFLAGS='-Wformat -Werror' \
@@ -39,7 +50,7 @@ my-distcheck:
&& $(MAKE) check \
&& $(MAKE) distclean
cd $(t) && mv $(distdir) $(distdir).old \
&& $(TAR) -zxf ../$(distdir).tar.gz
&& $(AMTAR) -zxf ../$(distdir).tar.gz
diff -ur $(t)/$(distdir).old $(t)/$(distdir)
-rm -rf $(t)
@echo "========================"; \
@@ -51,8 +62,22 @@ THIS_VERSION_REGEXP = $(subst .,\.,$(VERSION))
PREV_VERSION := $(shell echo $(VERSION)|tr a-z Xa-y)
PREV_VERSION_REGEXP := $(shell echo $(PREV_VERSION)|sed 's/\./\\./g')
v = Version
url-host-prefix = ftp://alpha.gnu.org
url = $(url-host-prefix)/gnu/fetish/$(distdir).tar.gz
a_host=alpha.gnu.org
b_host=tug.org
c_host=ftp.enst.fr
a_url_dir=gnu/fetish
b_url_dir=gnu/fetish
c_url_dir=pub/gnu/gnits/fetish
a_real_dir=/fs/share/ftp/gnu/fetish
b_real_dir=/home/ftp/pub/gnu/fetish
c_real_dir=/pub/gnu/gnits/fetish
url_dir_list = $(foreach x,a b c,ftp://$($(x)_host)/$($(x)_url_dir))
real_dir_list = $(foreach x,a b c,ftp://$($(x)_host)$($(x)_real_dir))
md5 = $(shell md5sum < $(distdir).tar.gz|sed 's/ -//')
rel-check:
@@ -70,7 +95,9 @@ announcement: NEWS ChangeLog $(distdir).tar.gz
echo; \
echo FIXME: put comments here; \
echo; \
echo " $(url)"; \
for url in $(url_dir_list); do \
echo " $$url/$(distdir).tar.gz"; \
done; \
echo; \
echo "$(md5) $(distdir).tar.gz"; \
echo; \
@@ -79,18 +106,23 @@ announcement: NEWS ChangeLog $(distdir).tar.gz
| grep -v '^\['; \
echo; \
echo ChangeLog entries:; \
sed -n "1,/$v $(PREV_VERSION_REGEXP)/p" \
ChangeLog; \
find . -name ChangeLog \
| xargs cvs diff -up -r$(prev-cvs-tag) -rHEAD \
| sed -n 's/^+//p' \
| perl -ne 'm!^\+\+ (\./)?! or print,next;' \
-e 'print "\n"."*"x70 ."\n"; s///; print; print "*"x70 ."\n"'; \
)
alpha:
$(MAKE) po-check
$(MAKE) cvs-dist
$(MAKE) -s announcement > /tmp/announcement
$(MAKE) -s announcement > /tmp/announce-$(distdir)
ln $(distdir).tar.gz ../release
chmod a-w $(distdir).tar.gz
@echo =====================================
@echo 'ncftp -u $(url-host-prefix)/fs/share/ftp/gnu/fetish/'
@for url in $(real_dir_list); do \
echo "ncftp -u $$url/"; \
done
@echo '# put $(distdir).tar.gz'
@echo '# send the /tmp/announcement e-mail'
@echo 'pot-mail $(distdir).tar.gz | bash'
@echo =====================================

21
THANKS
View File

@@ -3,11 +3,14 @@ The rest of the addresses are still in the ChangeLog.
Achim Blumensath: blume@corona.oche.de
aldomel: aldomel@ix.netcom.com
Alen Muzinic: zveki@fly.cc.fer.hr
Akim Demaille: demaille@inf.enst.fr
Alain Magloire: alain@qnx.com
Alexey Solovyov: alekso@math.uu.se
Andreas Jaeger: jaeger@gnu.org
Andreas Schwab: schwab@issan.informatik.uni-dortmund.de
Andrew Dalke: dalke@bioreason.com
Andrew Tridgell: tridge@samba.org
Andries Brouwer: Andries.Brouwer@cwi.nl
Arne Henrik Juul: arnej@imf.unit.no
Bauke Jan Douma: bjdouma@xs4all.nl
@@ -15,10 +18,13 @@ Bengt Martensson: bengt@mathematik.uni-Bremen.de
Bernd Leibing: bernd.leibing@rz.uni-ulm.de
Bjorn Helgaas: helgaas@rsn.hp.com
Bob McCracken: kerouac@ravenet.com
Bob Proulx: rwp@fc.hp.com
Brendan O'Dea: bod@compusol.com.au
Charles Karney: karney@pppl.gov
Chris Yeo: cyeo@biking.org
Christian von Roques: roques@pond.sub.org
Colin Plumb: colin@nyx.net
David Godfrey: dave@delta.demon.co.uk
Dirk Lattermann: dlatt@t-online.de
Don Parsons: dparsons@synapse.kent.edu
Eirik Fuller: eirik@netcom.com
@@ -26,6 +32,7 @@ Eli Zaretskii: eliz@is.elta.co.il
Emile LeBlanc: leblanc@math.toronto.edu
François Pinard: pinard@iro.umontreal.ca
Galen Hazelwood: galenh@micron.net
Germano Leichsenring: germano@jedi.cs.kobe-u.ac.jp
Göran Uddeborg: goeran@uddeborg.pp.se
Greg McGary: gkm@eng.ascend.com
Hugh Daniel: hugh@xanadu.com
@@ -33,12 +40,18 @@ James: james@albion.glarp.com
James Antill: jmanti%essex.ac.uk@seralph21.essex.ac.uk
James Tanis: jtt@soscorp.com
Jamie Lokier: jamie@imbolc.ucc.ie
Janos Farkas: chexum@shadow.banki.hu
Jesse Thilo: jgt2@eecs.lehigh.edu
Joakim Rosqvist: dvljrt@cs.umu.se
Johan Danielsson: joda@pdc.kth.se
John Bley: jbb6@acpub.duke.edu
John Gatewood Ham: zappaman@alphabox.compsci.buu.ac.th
John Gotts: jgotts@umich.edu
Jürgen Fluk: louis@dachau.marco.de
jvogel: jvogel@linkny.com
Karl Heuer: kwzh@gnu.org
Kjetil Torgrim Homme: kjetilho@ifi.uio.no
Larry McVoy: lm@sgi.com
Lars Hecking: lhecking@nmrc.ucc.ie
Lorne Baker: lbaker@nitro.avint.net
Marcus Daniels: marcus@sysc.pdx.edu
@@ -49,22 +62,28 @@ Marty Leisner: leisner@sdsp.mc.xerox.com
Masami Takikawa: takikawm@CS.ORST.EDU
Matthew S. Levine: mslevine@theory.lcs.mit.edu
Matthew Swift: swift@alum.mit.edu
Matthias Urlichs: smurf@noris.de
Michiel Bacchiani: bacchian@raven.bu.edu
Michael Veksler: mveksler@techunix.technion.ac.il
Miles Bader: miles@gnu.ai.mit.edu
Noel Cragg: noel@red-bean.com
Olav Morkrid: olav@funcom.com
Per Kristian Hove: perhov@math.ntnu.no
Peter Eriksson: peter@ifm.liu.se
Peter Samuelson: psamuels@sampo.creighton.edu
Paul Eggert: eggert@twinsun.com
Philippe De Muyter: phdm@macqel.be
Rainer Orth: ro@TechFak.Uni-Bielefeld.DE
Ross Ridge: rridge@calum.csclub.uwaterloo.ca
Santiago Vila Doncel: sanvila@unex.es
Scott Lurndal: slurn@griffin.engr.sgi.com
Stuart Kemp: skemp@peter.bmc.com
Thomas Bushnell, n/BSG: thomas@gnu.ai.mit.edu
Ton Hospel: thospel@mail.dma.be
Torbjorn Lindgren: tl@funcom.no
Tony Leneis: tony@plaza.ds.adp.com
Ulrich Drepper: drepper@cygnus.com
Vin Shelton: acs@alumni.princeton.edu
Volker Borchert: bt@teknon.de
Michael Veksler: mveksler@techunix.technion.ac.il
Wayne Stewart: wstewa@atl.com
William Bader: william@nscs.fast.net

View File

@@ -10,7 +10,6 @@
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
SHELL = @SHELL@
srcdir = @srcdir@
@@ -46,9 +45,10 @@ AUTOMAKE = @AUTOMAKE@
AUTOHEADER = @AUTOHEADER@
INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_FLAG =
transform = @program_transform_name@
NORMAL_INSTALL = :
@@ -57,6 +57,10 @@ POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
host_alias = @host_alias@
host_triplet = @host@
AMTAR = @AMTAR@
AMTARFLAGS = @AMTARFLAGS@
CATALOGS = @CATALOGS@
CATOBJEXT = @CATOBJEXT@
CC = @CC@
@@ -64,8 +68,10 @@ CPP = @CPP@
DATADIRNAME = @DATADIRNAME@
DF_PROG = @DF_PROG@
GENCAT = @GENCAT@
GETCONF = @GETCONF@
GMOFILES = @GMOFILES@
GMSGFMT = @GMSGFMT@
GNU_PACKAGE = @GNU_PACKAGE@
GT_NO = @GT_NO@
GT_YES = @GT_YES@
INCLUDE_LOCALE_H = @INCLUDE_LOCALE_H@
@@ -89,6 +95,7 @@ VERSION = @VERSION@
YACC = @YACC@
l = @l@
info_TEXINFOS = fileutils.texi
EXTRA_DIST = perm.texi getdate.texi
@@ -102,9 +109,11 @@ EXTRA_DIST = perm.texi getdate.texi
# and those names all map to one 14-byte name (<package>.info-) on some crufty
# old systems.
MAKEINFO = makeinfo --no-split
subdir = doc
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = ../config.h
CONFIG_CLEAN_FILES =
DIST_SOURCES =
TEXI2DVI = texi2dvi
INFO_DEPS = fileutils.info
DVIS = fileutils.dvi
@@ -113,9 +122,8 @@ DIST_COMMON = Makefile.am Makefile.in mdate-sh stamp-vti texinfo.tex \
version.texi
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
TAR = gtar
GZIP_ENV = --best
all: all-redirect
.SUFFIXES:
@@ -163,7 +171,7 @@ DVIPS = dvips
&& $(MAKEINFO) `echo $< | sed 's,.*/,,'`
.texi.dvi:
TEXINPUTS=.:$$TEXINPUTS \
TEXINPUTS=$(srcdir):$$TEXINPUTS \
MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) $<
.texi:
@@ -182,7 +190,7 @@ DVIPS = dvips
&& $(MAKEINFO) `echo $< | sed 's,.*/,,'`
.texinfo.dvi:
TEXINPUTS=.:$$TEXINPUTS \
TEXINPUTS=$(srcdir):$$TEXINPUTS \
MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) $<
.txi.info:
@@ -191,7 +199,7 @@ DVIPS = dvips
&& $(MAKEINFO) `echo $< | sed 's,.*/,,'`
.txi.dvi:
TEXINPUTS=.:$$TEXINPUTS \
TEXINPUTS=$(srcdir):$$TEXINPUTS \
MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) $<
.txi:
@@ -226,17 +234,20 @@ install-info-am: $(INFO_DEPS)
uninstall-info:
$(PRE_UNINSTALL)
@if $(SHELL) -c 'install-info --version | sed 1q | fgrep -s -v -i debian' >/dev/null 2>&1; then \
ii=yes; \
else ii=; fi; \
list='$(INFO_DEPS)'; \
for file in $$list; do \
test -z "$ii" \
|| install-info --info-dir=$(DESTDIR)$(infodir) --remove $$file; \
done
list='$(INFO_DEPS)'; \
for file in $$list; do \
d=$(srcdir); \
echo " install-info --info-dir=$(DESTDIR)$(infodir) --remove $$d/$$file"; \
install-info --info-dir=$(DESTDIR)$(infodir) --remove $$d/$$file; \
done; \
else :; fi
@$(NORMAL_UNINSTALL)
list='$(INFO_DEPS)'; \
@list='$(INFO_DEPS)'; \
for file in $$list; do \
(cd $(DESTDIR)$(infodir) && rm -f $$file $$file-[0-9] $$file-[0-9][0-9]); \
(if cd $(DESTDIR)$(infodir); then \
echo " rm -f $$file $$file-[0-9] $$file-[0-9][0-9])"; \
rm -f $$file $$file-[0-9] $$file-[0-9][0-9]; \
else :; fi); \
done
dist-info: $(INFO_DEPS)
@@ -252,10 +263,11 @@ dist-info: $(INFO_DEPS)
mostlyclean-aminfo:
-rm -f fileutils.aux fileutils.cp fileutils.cps fileutils.dvi \
fileutils.fn fileutils.fns fileutils.ky fileutils.kys \
fileutils.ps fileutils.log fileutils.pg fileutils.toc \
fileutils.tp fileutils.tps fileutils.vr fileutils.vrs \
fileutils.op fileutils.tr fileutils.cv fileutils.cn
fileutils.fn fileutils.fns fileutils.pgs fileutils.ky \
fileutils.kys fileutils.ps fileutils.log fileutils.pg \
fileutils.toc fileutils.tp fileutils.tps fileutils.vr \
fileutils.vrs fileutils.op fileutils.tr fileutils.cv \
fileutils.cn
clean-aminfo:
@@ -274,8 +286,6 @@ TAGS:
distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
subdir = doc
distdir: $(DISTFILES)
here=`cd $(top_builddir) && pwd`; \
top_distdir=`cd $(top_distdir) && pwd`; \
@@ -285,13 +295,14 @@ distdir: $(DISTFILES)
@for file in $(DISTFILES); do \
d=$(srcdir); \
if test -d $$d/$$file; then \
cp -pr $$/$$file $(distdir)/$$file; \
cp -pr $$d/$$file $(distdir)/$$file; \
else \
test -f $(distdir)/$$file \
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \
|| cp -p $$d/$$file $(distdir)/$$file || :; \
fi; \
done
$(MAKE) $(AM_MAKEFLAGS) top_distdir="$(top_distdir)" distdir="$(distdir)" dist-info
info-am: $(INFO_DEPS)
info: info-am
@@ -315,7 +326,7 @@ uninstall: uninstall-am
all-am: Makefile $(INFO_DEPS)
all-redirect: all-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
$(MAKE) $(AM_MAKEFLAGS) INSTALL_STRIP_FLAG=-s install
installdirs:
$(mkinstalldirs) $(DESTDIR)$(infodir)
@@ -353,8 +364,8 @@ install-info-am uninstall-info mostlyclean-aminfo distclean-aminfo \
clean-aminfo maintainer-clean-aminfo tags distdir info-am info dvi-am \
dvi check check-am installcheck-am installcheck install-exec-am \
install-exec install-data-am install-data install-am install \
uninstall-am uninstall all-redirect all-am all installdirs \
mostlyclean-generic distclean-generic clean-generic \
uninstall-am uninstall all-redirect all-am all install-strip \
installdirs mostlyclean-generic distclean-generic clean-generic \
maintainer-clean-generic clean mostlyclean distclean maintainer-clean

View File

@@ -430,7 +430,7 @@ the file to all users.
@cindex numeric modes
@cindex file permissions, numeric
@cindex octal numbers for file modes
File permissions are stored internally as 16 bit integers. As an
File permissions are stored internally as integers. As an
alternative to giving a symbolic mode, you can give an octal (base 8)
number that corresponds to the internal representation of the new mode.
This number is always interpreted in octal; you do not have to add a
@@ -440,12 +440,13 @@ A numeric mode is usually shorter than the corresponding symbolic
mode, but it is limited in that it can not take into account a file's
previous permissions; it can only set them absolutely.
The permissions granted to the user, to other users in the file's group,
On most systems, the permissions granted to the user,
to other users in the file's group,
and to other users not in the file's group are each stored as three
bits, which are represented as one octal digit. The three special
permissions are also each stored as one bit, and they are as a group
represented as another octal digit. Here is how the bits are arranged
in the 16 bit integer, starting with the lowest valued bit:
represented as another octal digit. Here is how the bits are arranged,
starting with the lowest valued bit:
@example
Value in Corresponding

View File

@@ -366,15 +366,21 @@ pipeline.
@section @code{false}: Do nothing, unsuccessfully
@pindex false
@cindex exit status of @code{true}
@cindex do nothing, unsuccessfully
@cindex failure exit status
@cindex exit status of @code{false}
@code{false} does nothing except return an exit status of 1, meaning
@dfn{failure}. It can be used as a place holder in shell scripts
where an unsuccessful command is needed.
Any arguments are ignored, except for a lone @samp{--help} or
@samp{--version} (@pxref{Common options}).
@code{false} ignores @emph{all} command line arguments, even @samp{--help}
and @samp{--version}, since to do otherwise would change expected
behavior that some programmers may be relying on.
This version of @code{false} is implemented as a C program, and is thus
more secure and faster than a shell script implementation, and may safely
be used as a dummy shell for the purpose of disabling accounts.
@node true invocation
@@ -384,15 +390,20 @@ Any arguments are ignored, except for a lone @samp{--help} or
@cindex do nothing, successfully
@cindex no-op
@cindex successful exit
@cindex exit status of @code{true}
@code{true} does nothing except return an exit status of 0, meaning
@dfn{success}. It can be used as a place holder in shell scripts
where a successful command is needed, although the shell built-in
command @code{:} (colon) may be faster.
command @code{:} (colon) does the same thing faster.
Any arguments are ignored, except for a lone @samp{--help} or
@samp{--version} (@pxref{Common options}).
@code{true} ignores @emph{all} command line arguments, even @samp{--help}
and @samp{--version}, since to do otherwise would change expected
behavior that some programmers may be relying on.
This version of @code{true} is implemented as a C program, and is thus
more secure and faster than a shell script implementation, and may safely
be used as a dummy shell for the purpose of disabling accounts.
@node test invocation
@@ -797,7 +808,7 @@ This makes it possible to test @code{expr length quote "$x"} or
@code{expr quote "$x" : '.*/\(.\)'} and have it do the right thing even if
the value of @var{$x} happens to be (for example) @code{/} or @code{index}.
This operator is a GNU extension. It is disabled when
the environment variable @var{POSIXLY_CORRECT} is set.
the environment variable @env{POSIXLY_CORRECT} is set.
@end table
@@ -1749,7 +1760,7 @@ Tell the kernel that the terminal has @var{n} columns. Non-POSIX.
@vindex COLUMNS
Print the number of rows and columns that the kernel thinks the
terminal has. (Systems that don't support rows and cols in the kernel
typically use the environment variables @code{LINES} and @code{COLUMNS}
typically use the environment variables @env{LINES} and @env{COLUMNS}
instead; however, GNU @code{stty} does not know anything about them.)
Non-POSIX.
@@ -2390,6 +2401,33 @@ input. This is useful when you have many dates to process, because the
system overhead of starting up the @code{date} executable many times can
be considerable.
@item -I[@var{timespec}]
@itemx --iso-8601[=@var{timespec}]
@opindex -I[@var{timespec}]
@opindex --iso-8601[=@var{timespec}]
Display the date using the ISO 8601 format, @samp{%Y-%m-%d}.
The optional argument @var{timespec} specifies the number of additional
terms of the time to include. It can be one of the following:
@table @samp
@item auto
The default behavior: print just the date.
@item hours
Append the hour of the day to the date.
@item minutes
Append the hours and minutes.
@item seconds
Append the hours, minutes, and seconds.
@end table
If showing any time terms, then include the time zone using the format
@samp{%z}. If @samp{--utc} is also specified, use @samp{%Z} in place of
@samp{%z}.
@item -R
@itemx --rfc-822
@opindex -R
@opindex --rfc-822
@@ -2690,7 +2728,7 @@ Ordinarily, filenames are looked up starting at the root of the
directory structure, i.e., @file{/}. @code{chroot} changes the root to
the directory @var{newroot} (which must exist) and then runs
@var{command} with optional @var{args}. If @var{command} is not
specified, the default is the value of the @code{SHELL} environment
specified, the default is the value of the @env{SHELL} environment
variable or @code{/bin/sh} if not set, invoked with the @samp{-i} option.
The only options are @samp{--help} and @samp{--version}. @xref{Common
@@ -2720,7 +2758,7 @@ to an empty value is different from unsetting it.
@vindex PATH
The first remaining argument specifies the program name to invoke; it is
searched for according to the @code{PATH} environment variable. Any
searched for according to the @env{PATH} environment variable. Any
remaining arguments are passed as arguments to that program.
@cindex environment, printing
@@ -2864,9 +2902,9 @@ effective user id of zero (the super-user).
@vindex LOGNAME
@cindex login shell
By default, @code{su} does not change the current directory.
It sets the environment variables @code{HOME} and @code{SHELL}
It sets the environment variables @env{HOME} and @env{SHELL}
from the password entry for @var{user}, and if @var{user} is not
the super-user, sets @code{USER} and @code{LOGNAME} to @var{user}.
the super-user, sets @env{USER} and @env{LOGNAME} to @var{user}.
By default, the shell is not a login shell.
Any additional @var{arg}s are passed as additional arguments to the
@@ -2917,10 +2955,10 @@ expansion (globbing), which is not likely to be useful.
@vindex PATH
@cindex login shell, creating
Make the shell a login shell. This means the following. Unset all
environment variables except @code{TERM}, @code{HOME}, and @code{SHELL}
(which are set as described above), and @code{USER} and @code{LOGNAME}
environment variables except @env{TERM}, @env{HOME}, and @env{SHELL}
(which are set as described above), and @env{USER} and @env{LOGNAME}
(which are set, even for the super-user, as described above), and set
@code{PATH} to a compiled-in default value. Change to @var{user}'s home
@env{PATH} to a compiled-in default value. Change to @var{user}'s home
directory. Prepend @samp{-} to the shell's name, intended to make it
read its login startup file(s).
@@ -2933,9 +2971,9 @@ read its login startup file(s).
@cindex environment, preserving
@flindex /etc/shells
@cindex restricted shell
Do not change the environment variables @code{HOME}, @code{USER},
@code{LOGNAME}, or @code{SHELL}. Run the shell given in the environment
variable @code{SHELL} instead of the shell from @var{user}'s passwd
Do not change the environment variables @env{HOME}, @env{USER},
@env{LOGNAME}, or @env{SHELL}. Run the shell given in the environment
variable @env{SHELL} instead of the shell from @var{user}'s passwd
entry, unless the user running @code{su} is not the superuser and
@var{user}'s shell is restricted. A @dfn{restricted shell} is one that
is not listed in the file @file{/etc/shells}, or in a compiled-in list

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

6
lib/.cppi-disable Normal file
View File

@@ -0,0 +1,6 @@
error.h
fnmatch.h
getopt.h
obstack.h
regex.h
getpagesize.h

View File

@@ -11,18 +11,21 @@ addext.c argmatch.c backupfile.c basename.c \
closeout.c dirname.c exclude.c filemode.c \
full-write.c human.c idcache.c \
isdir.c long-options.c makepath.c modechange.c hash.c path-concat.c \
quotearg.c safe-read.c save-cwd.c savedir.c stripslash.c userspec.c xgetcwd.c \
xmalloc.c xstrdup.c xstrtol.c xstrtoul.c yesno.c
quotearg.c safe-read.c same.c save-cwd.c savedir.c stripslash.c userspec.c \
version-etc.c xgetcwd.c xmalloc.c xstrdup.c \
xstrtol.c xstrtoul.c xstrtoumax.c yesno.c
libfu_a_LIBADD = @LIBOBJS@ @ALLOCA@
libfu_a_DEPENDENCIES = $(libfu_a_LIBADD)
noinst_HEADERS = argmatch.h backupfile.h closeout.h \
dirname.h error.h exclude.h filemode.h fnmatch.h fsusage.h \
getdate.h getline.h getopt.h group-member.h human.h lchown.h long-options.h \
getdate.h getline.h getopt.h getpagesize.h \
group-member.h human.h lchown.h long-options.h \
makepath.h modechange.h mountlist.h hash.h path-concat.h pathmax.h \
posixtm.h quotearg.h regex.h safe-read.h save-cwd.h savedir.h strverscmp.h \
xalloc.h xstrtol.h xstrtoul.h
posixtm.h quotearg.h regex.h safe-read.h same.h save-cwd.h \
savedir.h strverscmp.h \
version-etc.h xalloc.h xstrtol.h
BUILT_SOURCES = getdate.c lstat.c stat.c

View File

@@ -10,7 +10,6 @@
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
SHELL = @SHELL@
srcdir = @srcdir@
@@ -46,9 +45,10 @@ AUTOMAKE = @AUTOMAKE@
AUTOHEADER = @AUTOHEADER@
INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_FLAG =
transform = @program_transform_name@
NORMAL_INSTALL = :
@@ -57,6 +57,10 @@ POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
host_alias = @host_alias@
host_triplet = @host@
AMTAR = @AMTAR@
AMTARFLAGS = @AMTARFLAGS@
CATALOGS = @CATALOGS@
CATOBJEXT = @CATOBJEXT@
CC = @CC@
@@ -64,8 +68,10 @@ CPP = @CPP@
DATADIRNAME = @DATADIRNAME@
DF_PROG = @DF_PROG@
GENCAT = @GENCAT@
GETCONF = @GETCONF@
GMOFILES = @GMOFILES@
GMSGFMT = @GMSGFMT@
GNU_PACKAGE = @GNU_PACKAGE@
GT_NO = @GT_NO@
GT_YES = @GT_YES@
INCLUDE_LOCALE_H = @INCLUDE_LOCALE_H@
@@ -90,24 +96,40 @@ VERSION = @VERSION@
YACC = @YACC@
l = @l@
AUTOMAKE_OPTIONS = ../src/ansi2knr
noinst_LIBRARIES = libfu.a
INCLUDES = -I.. -I$(srcdir) -I../intl
libfu_a_SOURCES = getdate.y posixtm.c getopt.c getopt1.c addext.c argmatch.c backupfile.c basename.c closeout.c dirname.c exclude.c filemode.c full-write.c human.c idcache.c isdir.c long-options.c makepath.c modechange.c hash.c path-concat.c quotearg.c safe-read.c save-cwd.c savedir.c stripslash.c userspec.c xgetcwd.c xmalloc.c xstrdup.c xstrtol.c xstrtoul.c yesno.c
libfu_a_SOURCES = getdate.y posixtm.c getopt.c getopt1.c \
addext.c argmatch.c backupfile.c basename.c \
closeout.c dirname.c exclude.c filemode.c \
full-write.c human.c idcache.c \
isdir.c long-options.c makepath.c modechange.c hash.c path-concat.c \
quotearg.c safe-read.c same.c save-cwd.c savedir.c stripslash.c userspec.c \
version-etc.c xgetcwd.c xmalloc.c xstrdup.c \
xstrtol.c xstrtoul.c xstrtoumax.c yesno.c
libfu_a_LIBADD = @LIBOBJS@ @ALLOCA@
libfu_a_DEPENDENCIES = $(libfu_a_LIBADD)
noinst_HEADERS = argmatch.h backupfile.h closeout.h dirname.h error.h exclude.h filemode.h fnmatch.h fsusage.h getdate.h getline.h getopt.h group-member.h human.h lchown.h long-options.h makepath.h modechange.h mountlist.h hash.h path-concat.h pathmax.h posixtm.h quotearg.h regex.h safe-read.h save-cwd.h savedir.h strverscmp.h xalloc.h xstrtol.h xstrtoul.h
noinst_HEADERS = argmatch.h backupfile.h closeout.h \
dirname.h error.h exclude.h filemode.h fnmatch.h fsusage.h \
getdate.h getline.h getopt.h getpagesize.h \
group-member.h human.h lchown.h long-options.h \
makepath.h modechange.h mountlist.h hash.h path-concat.h pathmax.h \
posixtm.h quotearg.h regex.h safe-read.h same.h save-cwd.h \
savedir.h strverscmp.h \
version-etc.h xalloc.h xstrtol.h
BUILT_SOURCES = getdate.c lstat.c stat.c
EXTRA_DIST = xstat.in
subdir = lib
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = ../config.h
CONFIG_CLEAN_FILES =
@@ -119,57 +141,63 @@ CPPFLAGS = @CPPFLAGS@
LDFLAGS = @LDFLAGS@
LIBS = @LIBS@
ANSI2KNR = ../src/ansi2knr
libfu_a_OBJECTS = getdate$U.o posixtm$U.o getopt$U.o getopt1$U.o \
libfu_a_AR = $(AR) cru
am_libfu_a_OBJECTS = getdate$U.o posixtm$U.o getopt$U.o getopt1$U.o \
addext$U.o argmatch$U.o backupfile$U.o basename$U.o closeout$U.o \
dirname$U.o exclude$U.o filemode$U.o full-write$U.o human$U.o \
idcache$U.o isdir$U.o long-options$U.o makepath$U.o modechange$U.o \
hash$U.o path-concat$U.o quotearg$U.o safe-read$U.o save-cwd$U.o \
savedir$U.o stripslash$U.o userspec$U.o xgetcwd$U.o xmalloc$U.o \
xstrdup$U.o xstrtol$U.o xstrtoul$U.o yesno$U.o
hash$U.o path-concat$U.o quotearg$U.o safe-read$U.o same$U.o \
save-cwd$U.o savedir$U.o stripslash$U.o userspec$U.o version-etc$U.o \
xgetcwd$U.o xmalloc$U.o xstrdup$U.o xstrtol$U.o xstrtoul$U.o \
xstrtoumax$U.o yesno$U.o
libfu_a_OBJECTS = $(am_libfu_a_OBJECTS)
AR = ar
CFLAGS = @CFLAGS@
COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
CFLAGS = @CFLAGS@
CCLD = $(CC)
LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@
LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
DIST_SOURCES = $(libfu_a_SOURCES)
HEADERS = $(noinst_HEADERS)
DIST_COMMON = Makefile.am Makefile.in TODO alloca.c chown.c error.c \
error.h euidaccess.c fileblocks.c fnmatch.c fsusage.c ftruncate.c \
getdate.c getgroups.c getline.c group-member.c lchown.c lstat.c \
malloc.c memcmp.c memcpy.c memset.c mkdir.c mktime.c mountlist.c \
obstack.c obstack.h realloc.c regex.c rename.c rmdir.c rpmatch.c stat.c \
stpcpy.c strcasecmp.c strdup.c strftime.c strncasecmp.c strndup.c \
strstr.c strtol.c strtoul.c strverscmp.c utime.c
DIST_COMMON = $(noinst_HEADERS) Makefile.am Makefile.in TODO alloca.c \
chown.c dup2.c error.c error.h euidaccess.c fileblocks.c fnmatch.c \
fsusage.c ftruncate.c getdate.c getgroups.c getline.c group-member.c \
lchown.c malloc.c memchr.c memcmp.c memcpy.c memmove.c memset.c mkdir.c \
mktime.c mountlist.c obstack.c obstack.h realloc.c regex.c rename.c \
rmdir.c rpmatch.c stpcpy.c strcasecmp.c strdup.c strftime.c \
strncasecmp.c strndup.c strstr.c strtol.c strtoul.c strtoull.c \
strtoumax.c strverscmp.c utime.c
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
TAR = gtar
GZIP_ENV = --best
DEP_FILES = .deps/addext.P .deps/alloca.P .deps/argmatch.P \
.deps/backupfile.P .deps/basename.P .deps/chown.P .deps/closeout.P \
.deps/dirname.P .deps/error.P .deps/euidaccess.P .deps/exclude.P \
.deps/fileblocks.P .deps/filemode.P .deps/fnmatch.P .deps/fsusage.P \
.deps/ftruncate.P .deps/full-write.P .deps/getdate.P .deps/getgroups.P \
.deps/getline.P .deps/getopt.P .deps/getopt1.P .deps/group-member.P \
.deps/hash.P .deps/human.P .deps/idcache.P .deps/isdir.P .deps/lchown.P \
.deps/long-options.P .deps/lstat.P .deps/makepath.P .deps/malloc.P \
.deps/memcmp.P .deps/memcpy.P .deps/memset.P .deps/mkdir.P \
.deps/dirname.P .deps/dup2.P .deps/error.P .deps/euidaccess.P \
.deps/exclude.P .deps/fileblocks.P .deps/filemode.P .deps/fnmatch.P \
.deps/fsusage.P .deps/ftruncate.P .deps/full-write.P .deps/getdate.P \
.deps/getgroups.P .deps/getline.P .deps/getopt.P .deps/getopt1.P \
.deps/group-member.P .deps/hash.P .deps/human.P .deps/idcache.P \
.deps/isdir.P .deps/lchown.P .deps/long-options.P .deps/lstat.P \
.deps/makepath.P .deps/malloc.P .deps/memchr.P .deps/memcmp.P \
.deps/memcpy.P .deps/memmove.P .deps/memset.P .deps/mkdir.P \
.deps/mktime.P .deps/modechange.P .deps/mountlist.P .deps/obstack.P \
.deps/path-concat.P .deps/posixtm.P .deps/quotearg.P .deps/realloc.P \
.deps/regex.P .deps/rename.P .deps/rmdir.P .deps/rpmatch.P \
.deps/safe-read.P .deps/save-cwd.P .deps/savedir.P .deps/stat.P \
.deps/stpcpy.P .deps/strcasecmp.P .deps/strdup.P .deps/strftime.P \
.deps/stripslash.P .deps/strncasecmp.P .deps/strndup.P .deps/strstr.P \
.deps/strtol.P .deps/strtoul.P .deps/strverscmp.P .deps/userspec.P \
.deps/utime.P .deps/xgetcwd.P .deps/xmalloc.P .deps/xstrdup.P \
.deps/xstrtol.P .deps/xstrtoul.P .deps/yesno.P
.deps/safe-read.P .deps/same.P .deps/save-cwd.P .deps/savedir.P \
.deps/stat.P .deps/stpcpy.P .deps/strcasecmp.P .deps/strdup.P \
.deps/strftime.P .deps/stripslash.P .deps/strncasecmp.P .deps/strndup.P \
.deps/strstr.P .deps/strtol.P .deps/strtoul.P .deps/strtoull.P \
.deps/strtoumax.P .deps/strverscmp.P .deps/userspec.P .deps/utime.P \
.deps/version-etc.P .deps/xgetcwd.P .deps/xmalloc.P .deps/xstrdup.P \
.deps/xstrtol.P .deps/xstrtoul.P .deps/xstrtoumax.P .deps/yesno.P
SOURCES = $(libfu_a_SOURCES)
OBJECTS = $(libfu_a_OBJECTS)
OBJECTS = $(am_libfu_a_OBJECTS)
all: all-redirect
.SUFFIXES:
.SUFFIXES: .S .c .o .s .y
.SUFFIXES: .c .o .y
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && $(AUTOMAKE) --gnits lib/Makefile
@@ -187,12 +215,6 @@ distclean-noinstLIBRARIES:
maintainer-clean-noinstLIBRARIES:
.s.o:
$(COMPILE) -c $<
.S.o:
$(COMPILE) -c $<
mostlyclean-compile:
-rm -f *.o core *.core
@@ -220,8 +242,10 @@ maintainer-clean-kr:
libfu.a: $(libfu_a_OBJECTS) $(libfu_a_DEPENDENCIES)
-rm -f libfu.a
$(AR) cru libfu.a $(libfu_a_OBJECTS) $(libfu_a_LIBADD)
$(libfu_a_AR) libfu.a $(libfu_a_OBJECTS) $(libfu_a_LIBADD)
$(RANLIB) libfu.a
.c.o:
$(COMPILE) -c $<
addext_.c: addext.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/addext.c; then echo $(srcdir)/addext.c; else echo addext.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > addext_.c
alloca_.c: alloca.c $(ANSI2KNR)
@@ -238,6 +262,8 @@ closeout_.c: closeout.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/closeout.c; then echo $(srcdir)/closeout.c; else echo closeout.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > closeout_.c
dirname_.c: dirname.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/dirname.c; then echo $(srcdir)/dirname.c; else echo dirname.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > dirname_.c
dup2_.c: dup2.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/dup2.c; then echo $(srcdir)/dup2.c; else echo dup2.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > dup2_.c
error_.c: error.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/error.c; then echo $(srcdir)/error.c; else echo error.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > error_.c
euidaccess_.c: euidaccess.c $(ANSI2KNR)
@@ -286,10 +312,14 @@ makepath_.c: makepath.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/makepath.c; then echo $(srcdir)/makepath.c; else echo makepath.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > makepath_.c
malloc_.c: malloc.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/malloc.c; then echo $(srcdir)/malloc.c; else echo malloc.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > malloc_.c
memchr_.c: memchr.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/memchr.c; then echo $(srcdir)/memchr.c; else echo memchr.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > memchr_.c
memcmp_.c: memcmp.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/memcmp.c; then echo $(srcdir)/memcmp.c; else echo memcmp.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > memcmp_.c
memcpy_.c: memcpy.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/memcpy.c; then echo $(srcdir)/memcpy.c; else echo memcpy.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > memcpy_.c
memmove_.c: memmove.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/memmove.c; then echo $(srcdir)/memmove.c; else echo memmove.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > memmove_.c
memset_.c: memset.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/memset.c; then echo $(srcdir)/memset.c; else echo memset.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > memset_.c
mkdir_.c: mkdir.c $(ANSI2KNR)
@@ -320,6 +350,8 @@ rpmatch_.c: rpmatch.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/rpmatch.c; then echo $(srcdir)/rpmatch.c; else echo rpmatch.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > rpmatch_.c
safe-read_.c: safe-read.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/safe-read.c; then echo $(srcdir)/safe-read.c; else echo safe-read.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > safe-read_.c
same_.c: same.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/same.c; then echo $(srcdir)/same.c; else echo same.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > same_.c
save-cwd_.c: save-cwd.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/save-cwd.c; then echo $(srcdir)/save-cwd.c; else echo save-cwd.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > save-cwd_.c
savedir_.c: savedir.c $(ANSI2KNR)
@@ -346,12 +378,18 @@ strtol_.c: strtol.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/strtol.c; then echo $(srcdir)/strtol.c; else echo strtol.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > strtol_.c
strtoul_.c: strtoul.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/strtoul.c; then echo $(srcdir)/strtoul.c; else echo strtoul.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > strtoul_.c
strtoull_.c: strtoull.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/strtoull.c; then echo $(srcdir)/strtoull.c; else echo strtoull.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > strtoull_.c
strtoumax_.c: strtoumax.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/strtoumax.c; then echo $(srcdir)/strtoumax.c; else echo strtoumax.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > strtoumax_.c
strverscmp_.c: strverscmp.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/strverscmp.c; then echo $(srcdir)/strverscmp.c; else echo strverscmp.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > strverscmp_.c
userspec_.c: userspec.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/userspec.c; then echo $(srcdir)/userspec.c; else echo userspec.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > userspec_.c
utime_.c: utime.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/utime.c; then echo $(srcdir)/utime.c; else echo utime.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > utime_.c
version-etc_.c: version-etc.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/version-etc.c; then echo $(srcdir)/version-etc.c; else echo version-etc.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > version-etc_.c
xgetcwd_.c: xgetcwd.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/xgetcwd.c; then echo $(srcdir)/xgetcwd.c; else echo xgetcwd.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > xgetcwd_.c
xmalloc_.c: xmalloc.c $(ANSI2KNR)
@@ -362,26 +400,29 @@ xstrtol_.c: xstrtol.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/xstrtol.c; then echo $(srcdir)/xstrtol.c; else echo xstrtol.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > xstrtol_.c
xstrtoul_.c: xstrtoul.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/xstrtoul.c; then echo $(srcdir)/xstrtoul.c; else echo xstrtoul.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > xstrtoul_.c
xstrtoumax_.c: xstrtoumax.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/xstrtoumax.c; then echo $(srcdir)/xstrtoumax.c; else echo xstrtoumax.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > xstrtoumax_.c
yesno_.c: yesno.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/yesno.c; then echo $(srcdir)/yesno.c; else echo yesno.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > yesno_.c
addext_.o alloca_.o argmatch_.o backupfile_.o basename_.o chown_.o \
closeout_.o dirname_.o error_.o euidaccess_.o exclude_.o fileblocks_.o \
filemode_.o fnmatch_.o fsusage_.o ftruncate_.o full-write_.o getdate_.o \
getgroups_.o getline_.o getopt_.o getopt1_.o group-member_.o hash_.o \
human_.o idcache_.o isdir_.o lchown_.o long-options_.o lstat_.o \
makepath_.o malloc_.o memcmp_.o memcpy_.o memset_.o mkdir_.o mktime_.o \
modechange_.o mountlist_.o obstack_.o path-concat_.o posixtm_.o \
quotearg_.o realloc_.o regex_.o rename_.o rmdir_.o rpmatch_.o \
safe-read_.o save-cwd_.o savedir_.o stat_.o stpcpy_.o strcasecmp_.o \
strdup_.o strftime_.o stripslash_.o strncasecmp_.o strndup_.o strstr_.o \
strtol_.o strtoul_.o strverscmp_.o userspec_.o utime_.o xgetcwd_.o \
xmalloc_.o xstrdup_.o xstrtol_.o xstrtoul_.o yesno_.o : $(ANSI2KNR)
closeout_.o dirname_.o dup2_.o error_.o euidaccess_.o exclude_.o \
fileblocks_.o filemode_.o fnmatch_.o fsusage_.o ftruncate_.o \
full-write_.o getdate_.o getgroups_.o getline_.o getopt_.o getopt1_.o \
group-member_.o hash_.o human_.o idcache_.o isdir_.o lchown_.o \
long-options_.o lstat_.o makepath_.o malloc_.o memchr_.o memcmp_.o \
memcpy_.o memmove_.o memset_.o mkdir_.o mktime_.o modechange_.o \
mountlist_.o obstack_.o path-concat_.o posixtm_.o quotearg_.o \
realloc_.o regex_.o rename_.o rmdir_.o rpmatch_.o safe-read_.o same_.o \
save-cwd_.o savedir_.o stat_.o stpcpy_.o strcasecmp_.o strdup_.o \
strftime_.o stripslash_.o strncasecmp_.o strndup_.o strstr_.o strtol_.o \
strtoul_.o strtoull_.o strtoumax_.o strverscmp_.o userspec_.o utime_.o \
version-etc_.o xgetcwd_.o xmalloc_.o xstrdup_.o xstrtol_.o xstrtoul_.o \
xstrtoumax_.o yesno_.o : $(ANSI2KNR)
.y.c:
$(YACC) $(AM_YFLAGS) $(YFLAGS) $< && mv y.tab.c $*.c
if test -f y.tab.h; then \
if cmp -s y.tab.h $*.h; then rm -f y.tab.h; else mv y.tab.h $*.h; fi; \
else :; fi
getdate.h: getdate.c
tags: TAGS
@@ -415,8 +456,6 @@ maintainer-clean-tags:
distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
subdir = lib
distdir: $(DISTFILES)
here=`cd $(top_builddir) && pwd`; \
top_distdir=`cd $(top_distdir) && pwd`; \
@@ -426,7 +465,7 @@ distdir: $(DISTFILES)
@for file in $(DISTFILES); do \
d=$(srcdir); \
if test -d $$d/$$file; then \
cp -pr $$/$$file $(distdir)/$$file; \
cp -pr $$d/$$file $(distdir)/$$file; \
else \
test -f $(distdir)/$$file \
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \
@@ -434,6 +473,7 @@ distdir: $(DISTFILES)
fi; \
done
DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :)
-include $(DEP_FILES)
@@ -448,23 +488,23 @@ distclean-depend:
maintainer-clean-depend:
%.o: %.c
@echo '$(COMPILE) -c $<'; \
$(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $<
@-cp .deps/$(*F).pp .deps/$(*F).P; \
tr ' ' '\012' < .deps/$(*F).pp \
@echo '$(COMPILE) -c -o $@ $<'; \
$(COMPILE) -Wp,-MD,.deps/$(*D)/$(*F).pp -c -o $@ $<
@-cp .deps/$(*D)/$(*F).pp .deps/$(*D)/$(*F).P; \
tr ' ' '\012' < .deps/$(*D)/$(*F).pp \
| sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
>> .deps/$(*F).P; \
rm .deps/$(*F).pp
>> .deps/$(*D)/$(*F).P; \
rm .deps/$(*D)/$(*F).pp
%.lo: %.c
@echo '$(LTCOMPILE) -c $<'; \
$(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $<
@echo '$(LTCOMPILE) -c -o $@ $<'; \
$(LTCOMPILE) -Wp,-MD,.deps/$(*D)/$(*F).pp -c -o $@ $<
@-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \
< .deps/$(*F).pp > .deps/$(*F).P; \
tr ' ' '\012' < .deps/$(*F).pp \
< .deps/$(*D)/$(*F).pp > .deps/$(*D)/$(*F).P; \
tr ' ' '\012' < .deps/$(*D)/$(*F).pp \
| sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
>> .deps/$(*F).P; \
rm -f .deps/$(*F).pp
>> .deps/$(*D)/$(*F).P; \
rm -f .deps/$(*D)/$(*F).pp
info-am:
info: info-am
dvi-am:
@@ -487,7 +527,7 @@ uninstall: uninstall-am
all-am: Makefile $(LIBRARIES) $(HEADERS)
all-redirect: all-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
$(MAKE) $(AM_MAKEFLAGS) INSTALL_STRIP_FLAG=-s install
installdirs:
@@ -500,7 +540,7 @@ distclean-generic:
-rm -f config.cache config.log stamp-h stamp-h[0-9]*
maintainer-clean-generic:
-test -z "getdatehgetdatec$(BUILT_SOURCES)" || rm -f getdateh getdatec $(BUILT_SOURCES)
-test -z "getdate.c$(BUILT_SOURCES)" || rm -f getdate.c $(BUILT_SOURCES)
mostlyclean-am: mostlyclean-noinstLIBRARIES mostlyclean-compile \
mostlyclean-kr mostlyclean-tags mostlyclean-depend \
mostlyclean-generic
@@ -536,7 +576,7 @@ maintainer-clean-tags distdir mostlyclean-depend distclean-depend \
clean-depend maintainer-clean-depend info-am info dvi-am dvi check \
check-am installcheck-am installcheck install-exec-am install-exec \
install-data-am install-data install-am install uninstall-am uninstall \
all-redirect all-am all installdirs mostlyclean-generic \
all-redirect all-am all install-strip installdirs mostlyclean-generic \
distclean-generic clean-generic maintainer-clean-generic clean \
mostlyclean distclean maintainer-clean

View File

@@ -43,7 +43,7 @@
by using the quoting style ARGMATCH_QUOTING_STYLE. Do not use
literal_quoting_style. */
#ifndef ARGMATCH_QUOTING_STYLE
# define ARGMATCH_QUOTING_STYLE escape_quoting_style
# define ARGMATCH_QUOTING_STYLE locale_quoting_style
#endif
/* The following test is to work around the gross typo in
@@ -155,21 +155,11 @@ argcasematch (const char *arg, const char *const *arglist,
void
argmatch_invalid (const char *context, const char *value, int problem)
{
enum quoting_style saved_quoting_style;
char const *format;
char const *format = (problem == -1
? _("invalid argument %s for `%s'")
: _("ambiguous argument %s for `%s'"));
/* Make sure to have a good quoting style to report errors.
literal is insane here. */
saved_quoting_style = get_quoting_style (NULL);
set_quoting_style (NULL, ARGMATCH_QUOTING_STYLE);
format = (problem == -1
? _("invalid argument `%s' for `%s'")
: _("ambiguous argument `%s' for `%s'"));
error (0, 0, format, quotearg (value), context);
set_quoting_style (NULL, saved_quoting_style);
error (0, 0, format, quotearg_style (ARGMATCH_QUOTING_STYLE, value), context);
}
/* List the valid arguments for argmatch.

View File

@@ -1,5 +1,5 @@
/* basename.c -- return the last element in a path
Copyright (C) 1990, 1998 Free Software Foundation, Inc.
Copyright (C) 1990, 1998, 1999 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -29,16 +29,27 @@
/* In general, we can't use the builtin `basename' function if available,
since it has different meanings in different environments.
In some environments the builtin `basename' modifies its argument. */
In some environments the builtin `basename' modifies its argument.
If NAME is all slashes, be sure to return `/'. */
char *
base_name (char const *name)
{
char const *base = name += FILESYSTEM_PREFIX_LEN (name);
int all_slashes = 1;
char const *p;
for (; *name; name++)
if (ISSLASH (*name))
base = name + 1;
for (p = name; *p; p++)
{
if (ISSLASH (*p))
base = p + 1;
else
all_slashes = 0;
}
/* If NAME is all slashes, arrange to return `/'. */
if (*base == '\0' && ISSLASH (*name) && all_slashes)
--base;
return (char *) base;
}

View File

@@ -43,6 +43,8 @@
# include <arpa/inet.h>
#endif
void free ();
/* Returns the canonical hostname associated with HOST (allocated in a static
buffer), or 0 if it can't be determined. */
char *
@@ -67,9 +69,23 @@ canon_host (const char *host)
}
if (addr && strcmp (he->h_name, addr) == 0)
/* gethostbyname() cheated! Lookup the host name via the address
this time to get the actual host name. */
he = gethostbyaddr (he->h_addr, he->h_length, he->h_addrtype);
{
/* gethostbyname has returned a string representation of the IP
address, for example, "127.0.0.1". So now, look up the host
name via the address. Although it may seem reasonable to look
up the host name via the address, we must not pass `he->h_addr'
directly to gethostbyaddr because on some systems he->h_addr
is located in a static library buffer that is reused in the
gethostbyaddr call. Make a copy and use that instead. */
char *h_addr_copy = strdup (he->h_addr);
if (h_addr_copy == NULL)
he = NULL;
else
{
he = gethostbyaddr (h_addr_copy, he->h_length, he->h_addrtype);
free (h_addr_copy);
}
}
# endif /* HAVE_GETHOSTBYADDR */
if (he)

View File

@@ -43,14 +43,19 @@ extern int errno;
#include "error.h"
/* Close standard output, exiting with status STATUS on failure.
If a program writes *anything* to stdout, that program should close
stdout and make sure that the close succeeds. Otherwise, suppose that
you go to the extreme of checking the return status of every function
that does an explicit write to stdout. The last printf can succeed in
writing to the internal stream buffer, and yet the fclose(stdout) could
still fail (due e.g., to a disk full error) when it tries to write
out that buffered data. Thus, you would be left with an incomplete
output file and the offending program would exit successfully.
If a program writes *anything* to stdout, that program should `fflush'
stdout and make sure that it succeeds before exiting. Otherwise,
suppose that you go to the extreme of checking the return status
of every function that does an explicit write to stdout. The last
printf can succeed in writing to the internal stream buffer, and yet
the fclose(stdout) could still fail (due e.g., to a disk full error)
when it tries to write out that buffered data. Thus, you would be
left with an incomplete output file and the offending program would
exit successfully.
FIXME: note the fflush suggested above is implicit in the fclose
we actually do below. Consider doing only the fflush and/or using
setvbuf to inhibit buffering.
Besides, it's wasteful to check the return value from every call
that writes to stdout -- just let the internal stream state record

66
lib/dup2.c Normal file
View File

@@ -0,0 +1,66 @@
/* Duplicate an open file descriptor to a specified file descriptor.
Copyright 1999 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
/* written by Paul Eggert */
#if HAVE_CONFIG_H
# include <config.h>
#endif
#include <errno.h>
#ifndef errno
extern int errno;
#endif
#if HAVE_FCNTL_H
# include <fcntl.h>
#endif
#if HAVE_UNISTD_H
# include <unistd.h>
#endif
#ifndef F_DUPFD
static int
dupfd (int fd, int desired_fd)
{
int duplicated_fd = dup (fd);
if (duplicated_fd < 0 || duplicated_fd == desired_fd)
return duplicated_fd;
else
{
int r = dupfd (fd, desired_fd);
int e = errno;
close (duplicated_fd);
errno = e;
return r;
}
}
#endif
int
dup2 (int fd, int desired_fd)
{
if (fd == desired_fd)
return fd;
close (desired_fd);
#ifdef F_DUPFD
return fcntl (fd, F_DUPFD, desired_fd);
#else
return dupfd (fd, desired_fd);
#endif
}

View File

@@ -48,6 +48,25 @@
# endif
#endif
#if !S_IRGRP
# define S_IRGRP (S_IRUSR >> 3)
#endif
#if !S_IWGRP
# define S_IWGRP (S_IWUSR >> 3)
#endif
#if !S_IXGRP
# define S_IXGRP (S_IXUSR >> 3)
#endif
#if !S_IROTH
# define S_IROTH (S_IRUSR >> 6)
#endif
#if !S_IWOTH
# define S_IWOTH (S_IWUSR >> 6)
#endif
#if !S_IXOTH
# define S_IXOTH (S_IXUSR >> 6)
#endif
#ifdef STAT_MACROS_BROKEN
# undef S_ISBLK
# undef S_ISCHR
@@ -93,22 +112,11 @@
# define S_ISDOOR(m) (((m) & S_IFMT) == S_IFDOOR)
#endif
/* Look at read, write, and execute bits in BITS and set
flags in CHARS accordingly. */
static void
rwx (short unsigned int bits, char *chars)
{
chars[0] = (bits & S_IRUSR) ? 'r' : '-';
chars[1] = (bits & S_IWUSR) ? 'w' : '-';
chars[2] = (bits & S_IXUSR) ? 'x' : '-';
}
/* Set the 's' and 't' flags in file attributes string CHARS,
according to the file mode BITS. */
static void
setst (short unsigned int bits, char *chars)
setst (mode_t bits, char *chars)
{
#ifdef S_ISUID
if (bits & S_ISUID)
@@ -157,7 +165,7 @@ setst (short unsigned int bits, char *chars)
'?' for any other file type. */
static char
ftypelet (long int bits)
ftypelet (mode_t bits)
{
#ifdef S_ISBLK
if (S_ISBLK (bits))
@@ -216,12 +224,18 @@ ftypelet (long int bits)
is given as an argument. */
void
mode_string (short unsigned int mode, char *str)
mode_string (mode_t mode, char *str)
{
str[0] = ftypelet ((long) mode);
rwx ((mode & 0700) << 0, &str[1]);
rwx ((mode & 0070) << 3, &str[4]);
rwx ((mode & 0007) << 6, &str[7]);
str[0] = ftypelet (mode);
str[1] = mode & S_IRUSR ? 'r' : '-';
str[2] = mode & S_IWUSR ? 'w' : '-';
str[3] = mode & S_IXUSR ? 'x' : '-';
str[4] = mode & S_IRGRP ? 'r' : '-';
str[5] = mode & S_IWGRP ? 'w' : '-';
str[6] = mode & S_IXGRP ? 'x' : '-';
str[7] = mode & S_IROTH ? 'r' : '-';
str[8] = mode & S_IWOTH ? 'w' : '-';
str[9] = mode & S_IXOTH ? 'x' : '-';
setst (mode, str);
}

View File

@@ -1,9 +1,19 @@
#ifndef PARAMS
# if defined PROTOTYPES || (defined __STDC__ && __STDC__)
# define PARAMS(Args) Args
# else
# define PARAMS(Args) ()
# endif
#endif
#ifndef FILEMODE_H_
void mode_string PARAMS ((short unsigned int mode, char *str));
# if HAVE_CONFIG_H
# include <config.h>
# endif
# include <sys/types.h>
# ifndef PARAMS
# if defined PROTOTYPES || (defined __STDC__ && __STDC__)
# define PARAMS(Args) Args
# else
# define PARAMS(Args) ()
# endif
# endif
void mode_string PARAMS ((mode_t mode, char *str));
#endif

View File

@@ -1,5 +1,5 @@
/* fsusage.c -- return space usage of mounted filesystems
Copyright (C) 1991, 1992, 1996, 1998 Free Software Foundation, Inc.
Copyright (C) 1991, 1992, 1996, 1998, 1999 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -184,7 +184,7 @@ get_fs_usage (const char *path, const char *disk, struct fs_usage *fsp)
truncation, presumably without botching the 4.1.1 case, in which
the values are not truncated. The correct counts are stored in
undocumented spare fields. */
if (fsd.f_blocks == 0x1fffff && fsd.f_spare[0] > 0)
if (fsd.f_blocks == 0x7fffffff / fsd.f_bsize && fsd.f_spare[0] > 0)
{
fsd.f_blocks = fsd.f_spare[0];
fsd.f_bfree = fsd.f_spare[1];

View File

@@ -10,7 +10,7 @@
#ifdef HAVE_CONFIG_H
# include <config.h>
# ifdef FORCE_ALLOCA_H
# ifdef HAVE_ALLOCA_H
# include <alloca.h>
# endif
#endif
@@ -28,6 +28,10 @@
#include <stdio.h>
#include <ctype.h>
#if HAVE_STDLIB_H
# include <stdlib.h> /* for `free'; used by Bison 1.27 */
#endif
#if defined (STDC_HEADERS) || (!defined (isascii) && !defined (HAVE_ISASCII))
# define IN_CTYPE_DOMAIN(c) 1
#else
@@ -499,10 +503,10 @@ static TABLE const UnitsTable[] = {
/* Assorted relative-time words. */
static TABLE const OtherTable[] = {
{ "tomorrow", tMINUTE_UNIT, 1 * 24 * 60 },
{ "yesterday", tMINUTE_UNIT, -1 * 24 * 60 },
{ "today", tMINUTE_UNIT, 0 },
{ "now", tMINUTE_UNIT, 0 },
{ "tomorrow", tDAY_UNIT, 1 },
{ "yesterday", tDAY_UNIT, -1 },
{ "today", tDAY_UNIT, 0 },
{ "now", tDAY_UNIT, 0 },
{ "last", tUNUMBER, -1 },
{ "this", tMINUTE_UNIT, 0 },
{ "next", tUNUMBER, 1 },
@@ -706,7 +710,7 @@ LookupWord (buff)
/* Make it lowercase. */
for (p = buff; *p; p++)
if (ISUPPER (*p))
if (ISUPPER ((unsigned char) *p))
*p = tolower (*p);
if (strcmp (buff, "am") == 0 || strcmp (buff, "a.m.") == 0)
@@ -787,7 +791,7 @@ LookupWord (buff)
}
/* Military timezones. */
if (buff[1] == '\0' && ISALPHA (*buff))
if (buff[1] == '\0' && ISALPHA ((unsigned char) *buff))
{
for (tp = MilitaryTable; tp->name; tp++)
if (strcmp (buff, tp->name) == 0)
@@ -818,7 +822,7 @@ LookupWord (buff)
static int
yylex ()
{
register char c;
register unsigned char c;
register char *p;
char buff[20];
int Count;
@@ -826,7 +830,7 @@ yylex ()
for (;;)
{
while (ISSPACE (*yyInput))
while (ISSPACE ((unsigned char) *yyInput))
yyInput++;
if (ISDIGIT (c = *yyInput) || c == '-' || c == '+')
@@ -877,8 +881,7 @@ yylex ()
/* Yield A - B, measured in seconds. */
static long
difftm (a, b)
struct tm *a, *b;
difftm (struct tm *a, struct tm *b)
{
int ay = a->tm_year + (TM_YEAR_ORIGIN - 1);
int by = b->tm_year + (TM_YEAR_ORIGIN - 1);
@@ -906,12 +909,15 @@ get_date (const char *p, const time_t *now)
yyInput = p;
Start = now ? *now : time ((time_t *) NULL);
tmp = localtime (&Start);
if (!tmp)
return -1;
yyYear = tmp->tm_year + TM_YEAR_ORIGIN;
yyMonth = tmp->tm_mon + 1;
yyDay = tmp->tm_mday;
yyHour = tmp->tm_hour;
yyMinutes = tmp->tm_min;
yySeconds = tmp->tm_sec;
tm.tm_isdst = tmp->tm_isdst;
yyMeridian = MER24;
yyRelSeconds = 0;
yyRelMinutes = 0;
@@ -947,7 +953,12 @@ get_date (const char *p, const time_t *now)
tm.tm_hour += yyRelHour;
tm.tm_min += yyRelMinutes;
tm.tm_sec += yyRelSeconds;
tm.tm_isdst = -1;
/* Let mktime deduce tm_isdst if we have an absolute timestamp,
or if the relative timestamp mentions days, months, or years. */
if (yyHaveDate | yyHaveDay | yyHaveTime | yyRelDay | yyRelMonth | yyRelYear)
tm.tm_isdst = -1;
tm0 = tm;
Start = mktime (&tm);
@@ -994,7 +1005,11 @@ get_date (const char *p, const time_t *now)
if (yyHaveZone)
{
long delta = yyTimezone * 60L + difftm (&tm, gmtime (&Start));
long delta;
struct tm *gmt = gmtime (&Start);
if (!gmt)
return -1;
delta = yyTimezone * 60L + difftm (&tm, gmt);
if ((Start + delta < Start) != (delta < 0))
return -1; /* time_t overflow */
Start += delta;

View File

@@ -1,5 +1,5 @@
/* provide consistent interface to getgroups for systems that don't allow N==0
Copyright (C) 1996 Free Software Foundation, Inc.
Copyright (C) 1996, 1999 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -25,14 +25,11 @@ char *xmalloc ();
/* On at least Ultrix 4.3 and NextStep 3.2, getgroups (0, 0) always fails.
On other systems, it returns the number of supplemental groups for the
process is returned.
This function handles that special case and lets the system-
provided function handle all others. */
process. This function handles that special case and lets the system-
provided function handle all others. */
int
getgroups (n, group)
size_t n;
GETGROUPS_T *group;
getgroups (size_t n, GETGROUPS_T *group)
{
int n_groups;
GETGROUPS_T *gbuf;

View File

@@ -1,4 +1,4 @@
/* Copyright (C) 1995, 1997 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
@@ -27,10 +27,12 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
# endif
# endif
# if __GLIBC__ < 2
int
getline PARAMS ((char **_lineptr, size_t *_n, FILE *_stream));
int
getdelim PARAMS ((char **_lineptr, size_t *_n, int _delimiter, FILE *_stream));
# endif
#endif /* not GETLINE_H_ */

35
lib/getpagesize.h Normal file
View File

@@ -0,0 +1,35 @@
/* Emulate getpagesize on systems that lack it. */
#ifndef HAVE_GETPAGESIZE
#ifdef VMS
#define getpagesize() 512
#endif
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
#ifdef _SC_PAGESIZE
#define getpagesize() sysconf(_SC_PAGESIZE)
#else
#include <sys/param.h>
#ifdef EXEC_PAGESIZE
#define getpagesize() EXEC_PAGESIZE
#else
#ifdef NBPG
#define getpagesize() NBPG * CLSIZE
#ifndef CLSIZE
#define CLSIZE 1
#endif /* no CLSIZE */
#else /* no NBPG */
#ifdef NBPC
#define getpagesize() NBPC
#endif /* NBPC */
#endif /* no NBPG */
#endif /* no EXEC_PAGESIZE */
#endif /* no _SC_PAGESIZE */
#endif /* not HAVE_GETPAGESIZE */

View File

@@ -1,5 +1,5 @@
/* getugroups.c -- return a list of the groups a user is in
Copyright (C) 1990, 1991, 1998 Free Software Foundation.
Copyright (C) 1990, 1991, 1998, 1999 Free Software Foundation.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -41,26 +41,42 @@ struct group *getgrent ();
# include <strings.h>
#endif
/* Like `getgroups', but for user USERNAME instead of for
the current process. */
#define STREQ(s1, s2) ((strcmp (s1, s2) == 0))
/* Like `getgroups', but for user USERNAME instead of for the current
process. Store at most MAXCOUNT group IDs in the GROUPLIST array.
If GID is not -1, store it first (if possible). GID should be the
group ID (pw_gid) obtained from getpwuid, in case USERNAME is not
listed in /etc/groups.
Always return the number of groups of which USERNAME is a member. */
int
getugroups (int maxcount, GETGROUPS_T *grouplist, char *username)
getugroups (int maxcount, GETGROUPS_T *grouplist, char *username, gid_t gid)
{
struct group *grp;
register char **cp;
register int count = 0;
if (gid != -1)
{
if (maxcount != 0)
grouplist[count] = gid;
++count;
}
setgrent ();
while ((grp = getgrent ()) != 0)
for (cp = grp->gr_mem; *cp; ++cp)
if (!strcmp (username, *cp))
{
for (cp = grp->gr_mem; *cp; ++cp)
{
int n;
if ( ! STREQ (username, *cp))
continue;
/* See if this group number is already on the list. */
for (n = 0; n < count; ++n)
if (grouplist[n] == grp->gr_gid)
if (grouplist && grouplist[n] == grp->gr_gid)
break;
/* If it's a new group number, then try to add it to the list. */
@@ -78,6 +94,8 @@ getugroups (int maxcount, GETGROUPS_T *grouplist, char *username)
count++;
}
}
}
endgrent ();
return count;
}

85
lib/hard-locale.c Normal file
View File

@@ -0,0 +1,85 @@
/* hard-locale.c -- Determine whether a locale is hard.
Copyright 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
the Free Software Foundation; either version 2, or (at your option)
any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#if HAVE_CONFIG_H
# include <config.h>
#endif
#ifndef __GNUC__
# ifdef HAVE_ALLOCA_H
# include <alloca.h>
# else
# ifdef _AIX
# pragma alloca
# else
# ifdef _WIN32
# include <malloc.h>
# include <io.h>
# else
# ifndef alloca
char *alloca ();
# endif
# endif
# endif
# endif
#endif
#if HAVE_LOCALE_H
# include <locale.h>
#endif
#if HAVE_STRING_H
# include <string.h>
#endif
/* Return nonzero if the current CATEGORY locale is hard, i.e. if you
can't get away with assuming traditional C or POSIX behavior. */
int
hard_locale (int category)
{
#if ! (defined ENABLE_NLS && HAVE_SETLOCALE)
return 0;
#else
int hard = 1;
char const *p = setlocale (category, 0);
if (p)
{
# if defined __GLIBC__ && __GLIBC__ >= 2
if (strcmp (p, "C") == 0 || strcmp (p, "POSIX") == 0)
hard = 0;
# else
char *locale = alloca (strlen (p) + 1);
strcpy (locale, p);
/* Temporarily set the locale to the "C" and "POSIX" locales to
find their names, so that we can determine whether one or the
other is the caller's locale. */
if (((p = setlocale (category, "C")) && strcmp (p, locale) == 0)
|| ((p = setlocale (category, "POSIX")) && strcmp (p, locale) == 0))
hard = 0;
/* Restore the caller's locale. */
setlocale (category, locale);
# endif
}
return hard;
#endif
}

18
lib/hard-locale.h Normal file
View File

@@ -0,0 +1,18 @@
#ifndef HARD_LOCALE_H_
# define HARD_LOCALE_H_ 1
# if HAVE_CONFIG_H
# include <config.h>
# endif
# ifndef PARAMS
# if defined PROTOTYPES || (defined __STDC__ && __STDC__)
# define PARAMS(Args) Args
# else
# define PARAMS(Args) ()
# endif
# endif
int hard_locale PARAMS ((int));
#endif /* HARD_LOCALE_H_ */

View File

@@ -1,5 +1,5 @@
/* hash - hashing table processing.
Copyright (C) 1998 Free Software Foundation, Inc.
Copyright (C) 1998, 1999 Free Software Foundation, Inc.
Written by Jim Meyering, 1992.
This program is free software; you can redistribute it and/or modify
@@ -54,10 +54,10 @@ char *malloc ();
#include "hash.h"
/* An hash table contains many internal entries, each holding a pointer to
/* A hash table contains many internal entries, each holding a pointer to
some user provided data (also called a user entry). An entry indistinctly
refers to both the internal entry and its associated user entry. A user
entry contents may be hashed by a randomisation function (the hashing
entry contents may be hashed by a randomization function (the hashing
function, or just `hasher' for short) into a number (or `slot') between 0
and the current table size. At each slot position in the hash table,
starts a linked chain of entries for which the user data all hash to this
@@ -66,32 +66,58 @@ char *malloc ();
A good `hasher' function will distribute entries rather evenly in buckets.
In the ideal case, the length of each bucket is roughly the number of
entries divided by the table size. Finding the slot for a data is usually
done at constant speed by the `hasher', and the later finding of a precise
done in constant time by the `hasher', and the later finding of a precise
entry is linear in time with the size of the bucket. Consequently, a
bigger hash table size (that is, a bigger number of buckets) is prone to
yielding shorter buckets, *given* the `hasher' function behaves properly.
larger hash table size (that is, a larger number of buckets) is prone to
yielding shorter chains, *given* the `hasher' function behaves properly.
Long buckets slow down the lookup algorithm. One might use big hash table
sizes in hope to reduce the average length of buckets, but this might
become inordinate, as unused slots in the hash table take some space. The
best bet is to make sure you are using a good `hasher' function (beware
that those are not that easy to write! :-), and to use a table size at
least bigger than the actual number of entries.
that those are not that easy to write! :-), and to use a table size
larger than the actual number of entries. */
Currently, whenever the addition of an entry gets 80% of buckets to be
non-empty, this package automatically doubles the number of buckets. */
/* If an insertion makes the ratio of nonempty buckets to table size larger
than the growth threshold (a number between 0.0 and 1.0), then increase
the table size by multiplying by the growth factor (a number greater than
1.0). The growth threshold defaults to 0.8, and the growth factor
defaults to 1.414, meaning that the table will have doubled its size
every second time 80% of the buckets get used. */
#define DEFAULT_GROWTH_THRESHOLD 0.8
#define DEFAULT_GROWTH_FACTOR 1.414
/* If a deletion empties a bucket and causes the ratio of used buckets to
table size to become smaller than the shrink threshold (a number between
0.0 and 1.0), then shrink the table by multiplying by the shrink factor (a
number greater than the shrink threshold but smaller than 1.0). The shrink
threshold and factor default to 0.0 and 1.0, meaning that the table never
shrinks. */
#define DEFAULT_SHRINK_THRESHOLD 0.0
#define DEFAULT_SHRINK_FACTOR 1.0
/* Use this to initialize or reset a TUNING structure to
some sensible values. */
static const Hash_tuning default_tuning =
{
DEFAULT_SHRINK_THRESHOLD,
DEFAULT_SHRINK_FACTOR,
DEFAULT_GROWTH_THRESHOLD,
DEFAULT_GROWTH_FACTOR,
false
};
/* Information and lookup. */
/* The following few functions provide information about the overall hash
table organisation: the number of entries, number of buckets and maximum
table organization: the number of entries, number of buckets and maximum
length of buckets. */
/* Return the number of buckets in the hash table. The table size, the total
number of buckets (used plus unused), or the maximum number of slots, are
the same quantity. */
unsigned int
unsigned
hash_get_n_buckets (const Hash_table *table)
{
return table->n_buckets;
@@ -99,7 +125,7 @@ hash_get_n_buckets (const Hash_table *table)
/* Return the number of slots in use (non-empty buckets). */
unsigned int
unsigned
hash_get_n_buckets_used (const Hash_table *table)
{
return table->n_buckets_used;
@@ -107,26 +133,26 @@ hash_get_n_buckets_used (const Hash_table *table)
/* Return the number of active entries. */
unsigned int
unsigned
hash_get_n_entries (const Hash_table *table)
{
return table->n_entries;
}
/* Return the length of the most lenghty chain (bucket). */
/* Return the length of the longest chain (bucket). */
unsigned int
unsigned
hash_get_max_bucket_length (const Hash_table *table)
{
struct hash_entry *bucket;
unsigned int max_bucket_length = 0;
unsigned max_bucket_length = 0;
for (bucket = table->bucket; bucket < table->bucket_limit; bucket++)
{
if (bucket->data)
{
struct hash_entry *cursor = bucket;
unsigned int bucket_length = 1;
unsigned bucket_length = 1;
while (cursor = cursor->next, cursor)
bucket_length++;
@@ -139,15 +165,15 @@ hash_get_max_bucket_length (const Hash_table *table)
return max_bucket_length;
}
/* Do a mild validation of an hash table, by traversing it and checking two
/* Do a mild validation of a hash table, by traversing it and checking two
statistics. */
bool
hash_table_ok (const Hash_table *table)
{
struct hash_entry *bucket;
unsigned int n_buckets_used = 0;
unsigned int n_entries = 0;
unsigned n_buckets_used = 0;
unsigned n_entries = 0;
for (bucket = table->bucket; bucket < table->bucket_limit; bucket++)
{
@@ -174,10 +200,10 @@ hash_table_ok (const Hash_table *table)
void
hash_print_statistics (const Hash_table *table, FILE *stream)
{
unsigned int n_entries = hash_get_n_entries (table);
unsigned int n_buckets = hash_get_n_buckets (table);
unsigned int n_buckets_used = hash_get_n_buckets_used (table);
unsigned int max_bucket_length = hash_get_max_bucket_length (table);
unsigned n_entries = hash_get_n_entries (table);
unsigned n_buckets = hash_get_n_buckets (table);
unsigned n_buckets_used = hash_get_n_buckets_used (table);
unsigned max_bucket_length = hash_get_max_bucket_length (table);
fprintf (stream, "# entries: %u\n", n_entries);
fprintf (stream, "# buckets: %u\n", n_buckets);
@@ -186,8 +212,8 @@ hash_print_statistics (const Hash_table *table, FILE *stream)
fprintf (stream, "max bucket length: %u\n", max_bucket_length);
}
/* Return the user entry from the hash table, if some entry in the hash table
compares equally with ENTRY, or NULL otherwise. */
/* If ENTRY matches an entry already in the hash table, return the
entry from the table. Otherwise, return NULL. */
void *
hash_lookup (const Hash_table *table, const void *entry)
@@ -229,7 +255,7 @@ hash_get_first (const Hash_table *table)
if (bucket->data)
return bucket->data;
abort ();
assert (0);
}
/* Return the user data for the entry following ENTRY, where ENTRY has been
@@ -263,11 +289,11 @@ hash_get_next (const Hash_table *table, const void *entry)
return the number of pointers copied. Do not copy more than BUFFER_SIZE
pointers. */
unsigned int
unsigned
hash_get_entries (const Hash_table *table, void **buffer,
unsigned int buffer_size)
unsigned buffer_size)
{
unsigned int counter = 0;
unsigned counter = 0;
struct hash_entry *bucket;
struct hash_entry *cursor;
@@ -287,7 +313,7 @@ hash_get_entries (const Hash_table *table, void **buffer,
return counter;
}
/* Call a PROCESSOR function for each entry of an hash table, and return the
/* Call a PROCESSOR function for each entry of a hash table, and return the
number of entries for which the processor function returned success. A
pointer to some PROCESSOR_DATA which will be made available to each call to
the processor function. The PROCESSOR accepts two arguments: the first is
@@ -295,11 +321,11 @@ hash_get_entries (const Hash_table *table, void **buffer,
as received. The walking continue for as long as the PROCESSOR function
returns nonzero. When it returns zero, the walking is interrupted. */
unsigned int
unsigned
hash_do_for_each (const Hash_table *table, Hash_processor processor,
void *processor_data)
{
unsigned int counter = 0;
unsigned counter = 0;
struct hash_entry *bucket;
struct hash_entry *cursor;
@@ -332,8 +358,8 @@ hash_do_for_each (const Hash_table *table, Hash_processor processor,
algorithms tend to be domain-specific, so what's good for [diffutils'] io.c
may not be good for your application." */
unsigned int
hash_string (const char *string, unsigned int n_buckets)
unsigned
hash_string (const char *string, unsigned n_buckets)
{
# ifndef CHAR_BIT
# define CHAR_BIT 8
@@ -360,8 +386,8 @@ hash_string (const char *string, unsigned int n_buckets)
very old Cyber `snoop', itself written in typical Greg Mansfield style.
(By the way, what happened to this excellent man? Is he still alive?) */
unsigned int
hash_string (const char *string, unsigned int n_buckets)
unsigned
hash_string (const char *string, unsigned n_buckets)
{
unsigned value = 0;
@@ -376,7 +402,7 @@ hash_string (const char *string, unsigned int n_buckets)
/* Return true if CANDIDATE is a prime number. CANDIDATE should be an odd
number at least equal to 11. */
static int
static bool
is_prime (unsigned long candidate)
{
unsigned long divisor = 3;
@@ -393,12 +419,14 @@ is_prime (unsigned long candidate)
}
/* Round a given CANDIDATE number up to the nearest prime, and return that
prime. CANDIDATE should be at least equal to 10. */
prime. Primes lower than 10 are merely skipped. */
static unsigned long
next_prime (unsigned long candidate)
{
assert (candidate >= 10);
/* Skip small primes. */
if (candidate < 10)
candidate = 10;
/* Make it definitely odd. */
candidate |= 1;
@@ -409,33 +437,73 @@ next_prime (unsigned long candidate)
return candidate;
}
/* Allocate and return a new hash table, or NULL if an error is met. The
initial number of buckets would be at least CANDIDATE (which need not be
prime).
void
hash_reset_tuning (Hash_tuning *tuning)
{
*tuning = default_tuning;
}
If DATA_FREER is not NULL, this function may be later called with the data
as an argument, just before they entry containing the data gets freed. The
HASHER function should be supplied, and FIXME. The COMPARATOR function
should also be supplied, and FIXME. */
/* For the given hash TABLE, check the user supplied tuning structure for
reasonable values, and return true if there is no gross error with it.
Otherwise, definitvely reset the TUNING field to some acceptable default in
the hash table (that is, the user loses the right of further modifying
tuning arguments), and return false. */
/* User-supplied function for freeing datas. It is specified in
hash_initialize. If non-null, it is used by hash_free and hash_clear.
You should specify `free' here only if you want these functions to free
all of your `data' data. This is typically the case when your data is
simply an auxilliary struct that you have malloc'd to aggregate several
values. */
static bool
check_tuning (Hash_table *table)
{
const Hash_tuning *tuning = table->tuning;
/* User-supplied hash function that hashes entry ENTRY to an integer in
the range 0..TABLE_SIZE-1. */
if (tuning->growth_threshold > 0.0
&& tuning->growth_threshold < 1.0
&& tuning->growth_factor > 1.0
&& tuning->shrink_threshold >= 0.0
&& tuning->shrink_threshold < 1.0
&& tuning->shrink_factor > tuning->shrink_threshold
&& tuning->shrink_factor <= 1.0
&& tuning->shrink_threshold < tuning->growth_threshold)
return true;
/* User-supplied function that determines whether a new entry is unique by
comparing the new entry to entries that hashed to the same bucket
index. It should return zero for a pair of entries that compare equal,
non-zero otherwise. */
table->tuning = &default_tuning;
return false;
}
/* Allocate and return a new hash table, or NULL upon failure. The
initial number of buckets is automatically selected so as to _guarantee_ that
you may insert at least CANDIDATE different user entries before any growth
of the hash table size occurs. So, if have a reasonably tight a-priori
upper bound on the
number of entries you intend to insert in the hash table, you may save some
table memory and insertion time, by specifying it here. If the
IS_N_BUCKETS field of the TUNING structure is true, the CANDIDATE argument
has its meaning changed to the wanted number of buckets.
TUNING points to a structure of user-supplied values, in case some fine
tuning is wanted over the default behavior of the hasher. If TUNING is
NULL, the default tuning parameters are used instead.
The user-supplied HASHER function should be provided. It accepts two
arguments ENTRY and TABLE_SIZE. It computes, by hashing ENTRY contents, a
slot number for that entry which should be in the range 0..TABLE_SIZE-1.
This slot number is then returned.
The user-supplied COMPARATOR function should be provided. It accepts two
arguments pointing to user data, it then returns true for a pair of entries
that compare equal, or false otherwise. This function is internally called
on entries which are already known to hash to the same bucket index.
The user-supplied DATA_FREER function, when not NULL, may be later called
with the user data as an argument, just before the entry containing the
data gets freed. This happens from within `hash_free' or `hash_clear'.
You should specify this function only if you want these functions to free
all of your `data' data. This is typically the case when your data is
simply an auxiliary struct that you have malloc'd to aggregate several
values. */
Hash_table *
hash_initialize (unsigned int candidate, Hash_hasher hasher,
Hash_comparator comparator, Hash_data_freer data_freer)
hash_initialize (unsigned candidate, const Hash_tuning *tuning,
Hash_hasher hasher, Hash_comparator comparator,
Hash_data_freer data_freer)
{
Hash_table *table;
struct hash_entry *bucket;
@@ -447,7 +515,24 @@ hash_initialize (unsigned int candidate, Hash_hasher hasher,
if (table == NULL)
return NULL;
table->n_buckets = next_prime (candidate < 10 ? 10 : candidate);
if (!tuning)
tuning = &default_tuning;
table->tuning = tuning;
if (!check_tuning (table))
{
/* Fail if the tuning options are invalid. This is the only occasion
when the user gets some feedback about it. Once the table is created,
if the user provides invalid tuning options, we silently revert to
using the defaults, and ignore further request to change the tuning
options. */
free (table);
return NULL;
}
table->n_buckets
= next_prime (tuning->is_n_buckets ? candidate
: (unsigned) (candidate / tuning->growth_threshold));
table->bucket = (struct hash_entry *)
malloc (table->n_buckets * sizeof (struct hash_entry));
if (table->bucket == NULL)
@@ -515,7 +600,7 @@ hash_clear (Hash_table *table)
table->n_entries = 0;
}
/* Reclaim all storage associated with an hash table. If a data_freer
/* Reclaim all storage associated with a hash table. If a data_freer
function has been supplied by the user when the hash table was created,
this function applies it to the data of each entry before freeing that
entry. */
@@ -682,21 +767,23 @@ hash_find_entry (Hash_table *table, const void *entry,
return NULL;
}
/* For an already existing hash table, change the number of buckets and make
it NEW_TABLE_SIZE. The contents of the hash table are preserved. */
/* For an already existing hash table, change the number of buckets through
specifying CANDIDATE. The contents of the hash table are preserved. The
new number of buckets is automatically selected so as to _guarantee_ that the
table may receive at least CANDIDATE different user entries, including
those already in the table, before any other growth of the hash table size
occurs. If TUNING->IS_N_BUCKETS is true, then CANDIDATE specifies the
exact number of buckets desired. */
bool
hash_rehash (Hash_table *table, unsigned int new_n_buckets)
hash_rehash (Hash_table *table, unsigned candidate)
{
Hash_table *new_table;
struct hash_entry *bucket;
struct hash_entry *cursor;
struct hash_entry *next;
if (table->n_buckets <= 0 || new_n_buckets == 0)
return false;
new_table = hash_initialize (new_n_buckets, table->hasher,
new_table = hash_initialize (candidate, table->tuning, table->hasher,
table->comparator, table->data_freer);
if (new_table == NULL)
return false;
@@ -709,26 +796,23 @@ hash_rehash (Hash_table *table, unsigned int new_n_buckets)
new_table->free_entry_list = table->free_entry_list;
for (bucket = table->bucket; bucket < table->bucket_limit; bucket++)
{
if (bucket->data)
if (bucket->data)
for (cursor = bucket; cursor; cursor = next)
{
for (cursor = bucket; cursor; cursor = next)
void *data = cursor->data;
struct hash_entry *new_bucket
= (new_table->bucket
+ new_table->hasher (data, new_table->n_buckets));
assert (new_bucket < new_table->bucket_limit);
next = cursor->next;
if (new_bucket->data)
{
void *data = cursor->data;
struct hash_entry *new_bucket
= new_table->bucket + new_table->hasher (data, new_n_buckets);
assert (new_bucket < new_table->bucket_limit);
/* Free overflow entries as soon as possible, moving them from the
old hash table into the new one, as they may be needed now. */
next = cursor->next;
if (cursor != bucket)
free_entry (new_table, cursor);
/* Insert the entry into the new hash table. */
if (new_bucket->data)
if (cursor == bucket)
{
/* Allocate or recycle an entry, when moving from a bucket
header into a bucket overflow. */
struct hash_entry *new_entry = allocate_entry (new_table);
if (new_entry == NULL)
@@ -740,12 +824,24 @@ hash_rehash (Hash_table *table, unsigned int new_n_buckets)
}
else
{
new_bucket->data = data;
new_table->n_buckets_used++;
/* Merely relink an existing entry, when moving from a
bucket overflow into a bucket overflow. */
cursor->next = new_bucket->next;
new_bucket->next = cursor;
}
}
else
{
/* Free an existing entry, when moving from a bucket
overflow into a bucket header. Also take care of the
simple case of moving from a bucket header into a bucket
header. */
new_bucket->data = data;
new_table->n_buckets_used++;
if (cursor != bucket)
free_entry (new_table, cursor);
}
}
}
free (table->bucket);
table->bucket = new_table->bucket;
@@ -761,68 +857,74 @@ hash_rehash (Hash_table *table, unsigned int new_n_buckets)
return true;
}
/* If ENTRY matches an entry already in the hash table, don't modify the table
and return the matched entry. Otherwise, insert ENTRY and return NULL.
*DONE is set to true in all cases, unless the storage required for
insertion cannot be allocated. */
/* If ENTRY matches an entry already in the hash table, return the pointer
to the entry from the table. Otherwise, insert ENTRY and return ENTRY.
Return NULL if the storage required for insertion cannot be allocated. */
void *
hash_insert (Hash_table *table, const void *entry, bool *done)
hash_insert (Hash_table *table, const void *entry)
{
void *data;
struct hash_entry *bucket;
assert (entry); /* cannot insert a NULL data */
assert (entry); /* cannot insert a NULL entry */
if (data = hash_find_entry (table, entry, &bucket, false), data)
{
*done = true;
return data;
}
/* If there's a matching entry already in the table, return that. */
if ((data = hash_find_entry (table, entry, &bucket, false)) != NULL)
return data;
/* ENTRY is not matched, it should be inserted. */
table->n_entries++;
if (bucket->data)
{
struct hash_entry *new_entry = allocate_entry (table);
if (new_entry == NULL)
{
*done = false;
return NULL;
}
return NULL;
/* Add ENTRY in the overflow of the bucket. */
new_entry->data = (void *) entry;
new_entry->next = bucket->next;
bucket->next = new_entry;
*done = true;
return NULL;
table->n_entries++;
return (void *) entry;
}
/* Add ENTRY right in the bucket head. */
bucket->data = (void *) entry;
table->n_entries++;
table->n_buckets_used++;
/* If more than 80% of the buckets are in use, rehash the table two
times bigger. It's no real use checking the number of entries, as if
the hashing function is ill-conditioned, rehashing is not likely to
improve it. */
/* If the growth threshold of the buckets in use has been reached, increase
the table size and rehash. There's no point in checking the number of
entries: if the hashing function is ill-conditioned, rehashing is not
likely to improve it. */
if (5 * table->n_buckets_used > 4 * table->n_buckets)
if (table->n_buckets_used
> table->tuning->growth_threshold * table->n_buckets)
{
unsigned int new_n_buckets = next_prime (2 * table->n_buckets + 1);
/* Check more fully, before starting real work. If tuning arguments
became invalid, the second check will rely on proper defaults. */
check_tuning (table);
if (table->n_buckets_used
> table->tuning->growth_threshold * table->n_buckets)
{
const Hash_tuning *tuning = table->tuning;
unsigned candidate
= (unsigned) (tuning->is_n_buckets
? (table->n_buckets * tuning->growth_factor)
: (table->n_buckets * tuning->growth_factor
* tuning->growth_threshold));
*done = hash_rehash (table, new_n_buckets);
return NULL;
/* If the rehash fails, arrange to return NULL. */
if (!hash_rehash (table, candidate))
entry = NULL;
}
}
*done = true;
return NULL;
return (void *) entry;
}
/* If ENTRY is already in the table, remove it and return the just-deleted
@@ -838,9 +940,34 @@ hash_delete (Hash_table *table, const void *entry)
if (data = hash_find_entry (table, entry, &bucket, true), !data)
return NULL;
if (!bucket->data)
table->n_buckets_used--;
table->n_entries--;
if (!bucket->data)
{
table->n_buckets_used--;
/* If the shrink threshold of the buckets in use has been reached,
rehash into a smaller table. */
if (table->n_buckets_used
< table->tuning->shrink_threshold * table->n_buckets)
{
/* Check more fully, before starting real work. If tuning arguments
became invalid, the second check will rely on proper defaults. */
check_tuning (table);
if (table->n_buckets_used
< table->tuning->shrink_threshold * table->n_buckets)
{
const Hash_tuning *tuning = table->tuning;
unsigned candidate
= (unsigned) (tuning->is_n_buckets
? table->n_buckets * tuning->shrink_factor
: (table->n_buckets * tuning->shrink_factor
* tuning->growth_threshold));
hash_rehash (table, candidate);
}
}
}
return data;
}

View File

@@ -1,5 +1,5 @@
/* hash - hashing table processing.
Copyright (C) 1998 Free Software Foundation, Inc.
Copyright (C) 1998, 1999 Free Software Foundation, Inc.
Written by Jim Meyering <meyering@ascend.com>, 1998.
This program is free software; you can redistribute it and/or modify
@@ -29,7 +29,7 @@
# endif
#endif
typedef unsigned int (*Hash_hasher) PARAMS ((const void *, unsigned int));
typedef unsigned (*Hash_hasher) PARAMS ((const void *, unsigned));
typedef bool (*Hash_comparator) PARAMS ((const void *, const void *));
typedef void (*Hash_data_freer) PARAMS ((void *));
typedef bool (*Hash_processor) PARAMS ((void *, void *));
@@ -40,6 +40,20 @@ struct hash_entry
struct hash_entry *next;
};
struct hash_tuning
{
/* This structure is mainly used for `hash_initialize', see the block
documentation of `hash_reset_tuning' for more complete comments. */
float shrink_threshold; /* ratio of used buckets to trigger a shrink */
float shrink_factor; /* ratio of new smaller size to original size */
float growth_threshold; /* ratio of used buckets to trigger a growth */
float growth_factor; /* ratio of new bigger size to original size */
bool is_n_buckets; /* if CANDIDATE really means table size */
};
typedef struct hash_tuning Hash_tuning;
struct hash_table
{
/* The array of buckets starts at BUCKET and extends to BUCKET_LIMIT-1,
@@ -47,9 +61,12 @@ struct hash_table
are not empty, there are N_ENTRIES active entries in the table. */
struct hash_entry *bucket;
struct hash_entry *bucket_limit;
unsigned int n_buckets;
unsigned int n_buckets_used;
unsigned int n_entries;
unsigned n_buckets;
unsigned n_buckets_used;
unsigned n_entries;
/* Tuning arguments, kept in a physicaly separate structure. */
const Hash_tuning *tuning;
/* Three functions are given to `hash_initialize', see the documentation
block for this function. In a word, HASHER randomizes a user entry
@@ -74,10 +91,10 @@ struct hash_table
typedef struct hash_table Hash_table;
/* Information and lookup. */
unsigned int hash_get_n_buckets PARAMS ((const Hash_table *));
unsigned int hash_get_n_buckets_used PARAMS ((const Hash_table *));
unsigned int hash_get_n_entries PARAMS ((const Hash_table *));
unsigned int hash_get_max_bucket_length PARAMS ((const Hash_table *));
unsigned hash_get_n_buckets PARAMS ((const Hash_table *));
unsigned hash_get_n_buckets_used PARAMS ((const Hash_table *));
unsigned hash_get_n_entries PARAMS ((const Hash_table *));
unsigned hash_get_max_bucket_length PARAMS ((const Hash_table *));
bool hash_table_ok PARAMS ((const Hash_table *));
void hash_print_statistics PARAMS ((const Hash_table *, FILE *));
void *hash_lookup PARAMS ((const Hash_table *, const void *));
@@ -85,19 +102,19 @@ void *hash_lookup PARAMS ((const Hash_table *, const void *));
/* Walking. */
void *hash_get_first PARAMS ((const Hash_table *));
void *hash_get_next PARAMS ((const Hash_table *, const void *));
unsigned int hash_get_entries PARAMS ((const Hash_table *, void **,
unsigned int));
unsigned int hash_do_for_each PARAMS ((const Hash_table *, Hash_processor,
void *));
unsigned hash_get_entries PARAMS ((const Hash_table *, void **, unsigned));
unsigned hash_do_for_each PARAMS ((const Hash_table *, Hash_processor, void *));
/* Allocation and clean-up. */
unsigned int hash_string PARAMS ((const char *, unsigned int));
Hash_table *hash_initialize PARAMS ((unsigned int, Hash_hasher,
Hash_comparator, Hash_data_freer));
unsigned hash_string PARAMS ((const char *, unsigned));
void hash_reset_tuning PARAMS ((Hash_tuning *));
Hash_table *hash_initialize PARAMS ((unsigned, const Hash_tuning *,
Hash_hasher, Hash_comparator,
Hash_data_freer));
void hash_clear PARAMS ((Hash_table *));
void hash_free PARAMS ((Hash_table *));
/* Insertion and deletion. */
bool hash_rehash PARAMS ((Hash_table *, unsigned int));
void *hash_insert PARAMS ((Hash_table *, const void *, bool *));
bool hash_rehash PARAMS ((Hash_table *, unsigned));
void *hash_insert PARAMS ((Hash_table *, const void *));
void *hash_delete PARAMS ((Hash_table *, const void *));

View File

@@ -23,10 +23,6 @@
# include <config.h>
#endif
#if HAVE_INTTYPES_H
# include <inttypes.h>
#endif
#include <sys/types.h>
#include <stdio.h>
@@ -34,6 +30,12 @@
# include <limits.h>
#endif
#if HAVE_STRING_H
# include <string.h>
#else
# include <strings.h>
#endif
#ifndef CHAR_BIT
# define CHAR_BIT 8
#endif
@@ -54,7 +56,7 @@ char *getenv ();
#include <argmatch.h>
#include <error.h>
#include <xstrtoul.h>
#include <xstrtol.h>
#include "human.h"
@@ -71,15 +73,27 @@ static const char suffixes[] =
'Y' /* Yotta */
};
/* Like human_readable_inexact, except always round to even. */
char *
human_readable (uintmax_t n, char *buf,
int from_block_size, int output_block_size)
{
return human_readable_inexact (n, buf, from_block_size, output_block_size,
human_round_to_even);
}
/* Convert N to a human readable format in BUF.
N is expressed in units of FROM_BLOCK_SIZE. FROM_BLOCK_SIZE must
be positive.
be nonnegative.
If OUTPUT_BLOCK_SIZE is positive, use units of OUTPUT_BLOCK_SIZE in
the output number. OUTPUT_BLOCK_SIZE must be a multiple of
FROM_BLOCK_SIZE or vice versa.
Use INEXACT_STYLE to determine whether to take the ceiling or floor
of any result that cannot be expressed exactly.
If OUTPUT_BLOCK_SIZE is negative, use a format like "127k" if
possible, using powers of -OUTPUT_BLOCK_SIZE; otherwise, use
ordinary decimal format. Normally -OUTPUT_BLOCK_SIZE is either
@@ -93,13 +107,14 @@ static const char suffixes[] =
than -OUTPUT_BLOCK_SIZE aren't modified. */
char *
human_readable (uintmax_t n, char *buf,
int from_block_size, int output_block_size)
human_readable_inexact (uintmax_t n, char *buf,
int from_block_size, int output_block_size,
enum human_inexact_style inexact_style)
{
uintmax_t amt;
int base;
int to_block_size;
int tenths;
int tenths = 0;
int power;
char *p;
@@ -107,7 +122,7 @@ human_readable (uintmax_t n, char *buf,
1 means AMT.TENTHS < adjusted N < AMT.TENTHS + 0.05;
2 means adjusted N == AMT.TENTHS + 0.05;
3 means AMT.TENTHS + 0.05 < adjusted N < AMT.TENTHS + 0.1. */
int rounding;
int rounding = 0;
if (output_block_size < 0)
{
@@ -134,7 +149,6 @@ human_readable (uintmax_t n, char *buf,
{
int multiplier = from_block_size / to_block_size;
amt = n * multiplier;
tenths = rounding = 0;
if (amt / multiplier != n)
{
@@ -170,6 +184,8 @@ human_readable (uintmax_t n, char *buf,
return buf;
}
}
else if (from_block_size == 0)
amt = 0;
else
{
int divisor = to_block_size / from_block_size;
@@ -204,24 +220,33 @@ human_readable (uintmax_t n, char *buf,
if (amt < 10)
{
tenths += 2 < rounding + (tenths & 1);
if (tenths == 10)
if (2 * (1 - (int) inexact_style)
< rounding + (tenths & (inexact_style == human_round_to_even)))
{
amt++;
tenths = 0;
tenths++;
rounding = 0;
if (tenths == 10)
{
amt++;
tenths = 0;
}
}
if (amt < 10)
{
*--p = '0' + tenths;
*--p = '.';
tenths = 0;
tenths = rounding = 0;
}
}
}
if (5 < tenths + (2 < rounding + (amt & 1)))
if (inexact_style == human_ceiling
? 0 < tenths + rounding
: inexact_style == human_round_to_even
? 5 < tenths + (2 < rounding + (amt & 1))
: /* inexact_style == human_floor */ 0)
{
amt++;

View File

@@ -1,6 +1,14 @@
#ifndef HUMAN_H_
# define HUMAN_H_ 1
# if HAVE_CONFIG_H
# include <config.h>
# endif
# if HAVE_INTTYPES_H
# include <inttypes.h>
# endif
/* A conservative bound on the maximum length of a human-readable string.
The output can be the product of the largest uintmax_t and the largest int,
so add their sizes before converting to a bound on digits. */
@@ -15,7 +23,16 @@
# endif
# endif
enum human_inexact_style
{
human_floor = -1,
human_round_to_even = 0,
human_ceiling = 1
};
char *human_readable PARAMS ((uintmax_t, char *, int, int));
char *human_readable_inexact PARAMS ((uintmax_t, char *, int, int,
enum human_inexact_style));
void human_block_size PARAMS ((char const *, int, int *));

View File

@@ -1,5 +1,5 @@
/* linebuffer.c -- read arbitrarily long lines
Copyright (C) 1986, 1991, 1998 Free Software Foundation, Inc.
Copyright (C) 1986, 1991, 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
@@ -22,6 +22,7 @@
#endif
#include <stdio.h>
#include <sys/types.h>
#include "linebuffer.h"
char *xmalloc ();
@@ -39,9 +40,10 @@ initbuffer (struct linebuffer *linebuffer)
}
/* Read an arbitrarily long line of text from STREAM into LINEBUFFER.
Remove any newline. Does not null terminate.
Return zero upon error or upon end of file.
Otherwise, return LINEBUFFER. */
Keep the newline; append a newline if it's the last line of a file
that ends in a non-newline character. Do not null terminate,
but leave room for an extra byte after the newline.
Return LINEBUFFER, except at end of file return 0. */
struct linebuffer *
readline (struct linebuffer *linebuffer, FILE *stream)
@@ -49,36 +51,35 @@ readline (struct linebuffer *linebuffer, FILE *stream)
int c;
char *buffer = linebuffer->buffer;
char *p = linebuffer->buffer;
char *end = buffer + linebuffer->size; /* Sentinel. */
char *end = buffer + linebuffer->size - 1; /* Sentinel. */
if (feof (stream) || ferror (stream))
{
linebuffer->length = 0;
return 0;
}
return 0;
while (1)
do
{
c = getc (stream);
if (c == EOF)
{
if (p == buffer)
return 0;
if (p[-1] == '\n')
break;
c = '\n';
}
if (p == end)
{
linebuffer->size *= 2;
buffer = (char *) xrealloc (buffer, linebuffer->size);
p += buffer - linebuffer->buffer;
p = p - linebuffer->buffer + buffer;
linebuffer->buffer = buffer;
end = buffer + linebuffer->size;
end = buffer + linebuffer->size - 1;
}
if (c == EOF || c == '\n')
break;
*p++ = c;
}
while (c != '\n');
if (feof (stream) && p == buffer)
{
linebuffer->length = 0;
return 0;
}
linebuffer->length = p - linebuffer->buffer;
linebuffer->length = p - buffer;
return linebuffer;
}

View File

@@ -1,5 +1,5 @@
/* linebuffer.h -- declarations for reading arbitrarily long lines
Copyright (C) 1986, 1991, 1998 Free Software Foundation, Inc.
Copyright (C) 1986, 1991, 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
@@ -22,8 +22,8 @@
struct linebuffer
{
long size; /* Allocated. */
long length; /* Used. */
size_t size; /* Allocated. */
size_t length; /* Used. */
char *buffer;
};
@@ -39,7 +39,8 @@ struct linebuffer
void initbuffer PARAMS ((struct linebuffer *linebuffer));
/* Read an arbitrarily long line of text from STREAM into LINEBUFFER.
Remove any newline. Does not null terminate.
Keep the newline; append a newline if it's the last line of a file
that ends in a non-newline character. Do not null terminate.
Return LINEBUFFER, except at end of file return 0. */
struct linebuffer *readline PARAMS ((struct linebuffer *linebuffer,
FILE *stream));

View File

@@ -25,6 +25,14 @@
#include <getopt.h>
#include "closeout.h"
#include "long-options.h"
#include "version-etc.h"
#if ENABLE_NLS
# include <libintl.h>
# define _(Text) gettext (Text)
#else
# define _(Text) Text
#endif
static struct option const long_options[] =
{
@@ -37,8 +45,12 @@ static struct option const long_options[] =
Be careful not to gobble up `--'. */
void
parse_long_options (int argc, char **argv, const char *command_name,
const char *package, const char *version,
parse_long_options (int argc,
char **argv,
const char *command_name,
const char *package,
const char *version,
const char *authors,
void (*usage_func)())
{
int c;
@@ -58,7 +70,7 @@ parse_long_options (int argc, char **argv, const char *command_name,
(*usage_func) (0);
case 'v':
printf ("%s (%s) %s\n", command_name, package, version);
version_etc (stdout, command_name, package, version, authors);
close_stdout (); /* FIXME: output failure exit status
should be settable via an arg. */
exit (0);

View File

@@ -1,5 +1,5 @@
/* long-options.h -- declaration for --help- and --version-handling function.
Copyright (C) 1993, 1994, 1997 Free Software Foundation, Inc.
Copyright (C) 1993, 1994, 1998, 1999 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -26,7 +26,10 @@
#endif
void
parse_long_options PARAMS ((int _argc, char **_argv,
parse_long_options PARAMS ((int _argc,
char **_argv,
const char *_command_name,
const char *_package,
const char *_version, void (*_usage) (int)));
const char *_version,
const char *_authors,
void (*_usage) (int)));

View File

@@ -71,16 +71,34 @@ extern int errno;
# endif
#endif
#ifndef S_ISUID
# define S_ISUID 04000
#endif
#ifndef S_ISGID
# define S_ISGID 02000
#endif
#ifndef S_ISVTX
# define S_ISVTX 01000
#endif
#ifndef S_IRUSR
# define S_IRUSR 0200
#endif
#ifndef S_IWUSR
# define S_IWUSR 0200
#endif
#ifndef S_IXUSR
# define S_IXUSR 0100
#endif
#ifndef S_IRWXU
# define S_IRWXU (S_IRUSR | S_IWUSR | S_IXUSR)
#endif
#define WX_USR (S_IWUSR | S_IXUSR)
/* Include this before libintl.h so we get our definition of PARAMS. */
#include "makepath.h"
#if HAVE_LOCALE_H
# include <locale.h>
#endif
@@ -98,7 +116,6 @@ typedef int gid_t;
#endif
#include "save-cwd.h"
#include "makepath.h"
#include "error.h"
void strip_trailing_slashes ();
@@ -145,6 +162,7 @@ make_dir (const char *dir, const char *dirpath, mode_t mode, int *created_dir_p)
if (!created_dir)
{
struct stat stats;
int saved_errno = errno;
/* The mkdir and stat calls below may appear to be reversed.
They are not. It is important to call mkdir first and then to
@@ -156,7 +174,7 @@ make_dir (const char *dir, const char *dirpath, mode_t mode, int *created_dir_p)
if (stat (dir, &stats))
{
error (0, errno, _("cannot create directory `%s'"), dirpath);
error (0, saved_errno, _("cannot create directory `%s'"), dirpath);
fail = 1;
}
else if (!S_ISDIR (stats.st_mode))
@@ -223,7 +241,7 @@ make_path (const char *argpath,
char *dirpath;
/* Temporarily relax umask in case it's overly restrictive. */
int oldmask = umask (0);
mode_t oldmask = umask (0);
/* Make a copy of ARGPATH that we can scribble NULs on. */
dirpath = (char *) alloca (strlen (argpath) + 1);
@@ -235,9 +253,9 @@ make_path (const char *argpath,
their owners, we need to fix their permissions after making them. */
if (((parent_mode & WX_USR) != WX_USR)
|| ((owner != (uid_t) -1 || group != (gid_t) -1)
&& (parent_mode & 07000) != 0))
&& (parent_mode & (S_ISUID | S_ISGID | S_ISVTX)) != 0))
{
tmp_mode = 0700;
tmp_mode = S_IRWXU;
re_protect = 1;
}
else
@@ -363,7 +381,8 @@ make_path (const char *argpath,
retval = 1;
}
/* chown may have turned off some permission bits we wanted. */
if ((mode & 07000) != 0 && chmod (basename_dir, mode))
if ((mode & (S_ISUID | S_ISGID | S_ISVTX))
&& chmod (basename_dir, mode))
{
error (0, errno, _("cannot chmod %s"), dirpath);
retval = 1;

View File

@@ -1,4 +1,4 @@
/* Copyright (C) 1991, 1993, 1997 Free Software Foundation, Inc.
/* Copyright (C) 1991, 1993, 1997, 1999 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);
@@ -24,7 +24,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
USA. */
#ifdef HAVE_CONFIG_H
#include <config.h>
# include <config.h>
#endif
#undef __ptr_t
@@ -45,7 +45,7 @@ USA. */
#define LONG_MAX_32_BITS 2147483647
#ifndef LONG_MAX
#define LONG_MAX LONG_MAX_32_BITS
# define LONG_MAX LONG_MAX_32_BITS
#endif
#include <sys/types.h>

108
lib/memcoll.c Normal file
View File

@@ -0,0 +1,108 @@
/* Locale-specific memory comparison.
Copyright 1999 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
/* Contributed by Paul Eggert <eggert@twinsun.com>. */
#if HAVE_CONFIG_H
# include <config.h>
#endif
#ifndef __GNUC__
# ifdef HAVE_ALLOCA_H
# include <alloca.h>
# else
# ifdef _AIX
# pragma alloca
# else
# ifdef _WIN32
# include <malloc.h>
# include <io.h>
# else
# ifndef alloca
char *alloca ();
# endif
# endif
# endif
# endif
#endif
#if HAVE_STRING_H
# include <string.h>
#endif
/* Compare S1 (with length S1LEN) and S2 (with length S2LEN) according
to the LC_COLLATE locale. S1 and S2 do not overlap, but may be
adjacent. Temporarily modify the bytes after S1 and S2, but
restore their original contents before returning. */
int
memcoll (char *s1, size_t s1len, char *s2, size_t s2len)
{
int diff;
char n1;
char n2;
/* We will temporarily set the bytes after S1 and S2 to zero, so if
S1 and S2 are adjacent, compare to a temporary copy of the
earlier, to avoid temporarily stomping on the later. */
if (s1 + s1len == s2)
{
char *s2copy = alloca (s2len + 1);
memcpy (s2copy, s2, s2len);
s2 = s2copy;
}
if (s2 + s2len == s1)
{
char *s1copy = alloca (s1len + 1);
memcpy (s1copy, s1, s1len);
s1 = s1copy;
}
n1 = s1[s1len]; s1[s1len++] = '\0';
n2 = s2[s2len]; s2[s2len++] = '\0';
while (! (diff = strcoll (s1, s2)))
{
/* strcoll found no difference, but perhaps it was fooled by NUL
characters in the data. Work around this problem by advancing
past the NUL chars. */
size_t size1 = strlen (s1) + 1;
size_t size2 = strlen (s2) + 1;
s1 += size1;
s2 += size2;
s1len -= size1;
s2len -= size2;
if (s1len == 0)
{
if (s2len != 0)
diff = -1;
break;
}
else if (s2len == 0)
{
diff = 1;
break;
}
}
s1[s1len - 1] = n1;
s2[s2len - 1] = n2;
return diff;
}

18
lib/memcoll.h Normal file
View File

@@ -0,0 +1,18 @@
#ifndef MEMCOLL_H_
# define MEMCOLL_H_ 1
# if HAVE_CONFIG_H
# include <config.h>
# endif
# ifndef PARAMS
# if defined PROTOTYPES || (defined __STDC__ && __STDC__)
# define PARAMS(Args) Args
# else
# define PARAMS(Args) ()
# endif
# endif
int memcoll PARAMS ((char *, size_t, char *, size_t));
#endif /* MEMCOLL_H_ */

View File

@@ -34,6 +34,16 @@ extern int errno;
# define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
#endif
#ifndef S_IRWXU
# define S_IRWXU 0700
#endif
#ifndef S_IRWXG
# define S_IRWXG 0070
#endif
#ifndef S_IRWXO
# define S_IRWXO 0007
#endif
/* mkdir adapted from GNU tar. */
/* Make directory DPATH, with permission mode DMODE.
@@ -48,9 +58,11 @@ extern int errno;
subroutine didn't return EEXIST. It does now. */
int
mkdir (const char *dpath, int dmode)
mkdir (const char *dpath, mode_t dmode)
{
int cpid, status;
pid_t cpid;
mode_t mode;
int status;
struct stat statbuf;
if (stat (dpath, &statbuf) == 0)
@@ -74,8 +86,9 @@ mkdir (const char *dpath, int dmode)
process is going away anyway, we zap its umask.
This won't suffice to set SUID, SGID, etc. on this
directory, so the parent process calls chmod afterward. */
status = umask (0); /* Get current umask. */
umask (status | (0777 & ~dmode)); /* Set for mkdir. */
mode = umask (0); /* Get current umask. */
/* Set for mkdir. */
umask (mode | ((S_IRWXU | S_IRWXG | S_IRWXO) & ~dmode));
execl ("/bin/mkdir", "mkdir", dpath, (char *) 0);
_exit (1);
@@ -84,7 +97,7 @@ mkdir (const char *dpath, int dmode)
while (wait (&status) != cpid)
/* Do nothing. */ ;
if (status & 0xFFFF)
if (status)
{
/* /bin/mkdir failed. */
errno = EIO;

View File

@@ -1,24 +1,22 @@
/* mktime: convert a `struct tm' to a time_t value
Copyright (C) 1993-1998, 1999 Free Software Foundation, Inc.
/* Convert a `struct tm' to a time_t value.
Copyright (C) 1993, 94, 95, 96, 97, 98, 99 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Paul Eggert (eggert@twinsun.com).
NOTE: The canonical source of this file is maintained with the GNU C Library.
Bugs can be reported to bug-glibc@prep.ai.mit.edu.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation; either version 2, or (at your option) any
later version.
This program is distributed in the hope that it will be useful,
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
USA. */
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If not,
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
/* Define this to have a standalone program to test this implementation of
mktime. */
@@ -109,14 +107,6 @@ const unsigned short int __mon_yday[2][13] =
{ 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366 }
};
static struct tm *ranged_convert __P ((struct tm *(*) __P ((const time_t *,
struct tm *)),
time_t *, struct tm *));
static time_t ydhms_tm_diff __P ((int, int, int, int, int, const struct tm *));
time_t __mktime_internal __P ((struct tm *,
struct tm *(*) (const time_t *, struct tm *),
time_t *));
#ifdef _LIBC
# define my_mktime_localtime_r __localtime_r
@@ -124,7 +114,6 @@ time_t __mktime_internal __P ((struct tm *,
/* If we're a mktime substitute in a GNU program, then prefer
localtime to localtime_r, since many localtime_r implementations
are buggy. */
static struct tm *my_mktime_localtime_r __P ((const time_t *, struct tm *));
static struct tm *
my_mktime_localtime_r (const time_t *t, struct tm *tp)
{
@@ -172,23 +161,6 @@ ydhms_tm_diff (int year, int yday, int hour, int min, int sec,
}
}
static time_t localtime_offset;
/* Convert *TP to a time_t value. */
time_t
mktime (struct tm *tp)
{
#ifdef _LIBC
/* POSIX.1 8.1.1 requires that whenever mktime() is called, the
time zone names contained in the external variable `tzname' shall
be set as if the tzset() function had been called. */
__tzset ();
#endif
return __mktime_internal (tp, my_mktime_localtime_r, &localtime_offset);
}
/* Use CONVERT to convert *T to a broken down time in *TP.
If *T is out of range for conversion, adjust it so that
it is the nearest in-range value and then convert that. */
@@ -389,6 +361,24 @@ __mktime_internal (struct tm *tp,
return t;
}
static time_t localtime_offset;
/* Convert *TP to a time_t value. */
time_t
mktime (tp)
struct tm *tp;
{
#ifdef _LIBC
/* POSIX.1 8.1.1 requires that whenever mktime() is called, the
time zone names contained in the external variable `tzname' shall
be set as if the tzset() function had been called. */
__tzset ();
#endif
return __mktime_internal (tp, my_mktime_localtime_r, &localtime_offset);
}
#ifdef weak_alias
weak_alias (mktime, timelocal)
#endif

View File

@@ -1,5 +1,5 @@
/* modechange.c -- file mode manipulation
Copyright (C) 1989, 1990, 1997, 1998 Free Software Foundation, Inc.
Copyright (C) 1989, 1990, 1997, 1998, 1999 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -28,9 +28,9 @@
# include <config.h>
#endif
#include <sys/types.h>
#include <sys/stat.h>
#include "modechange.h"
#include <sys/stat.h>
#include "xstrtol.h"
#if STDC_HEADERS
# include <stdlib.h>
@@ -50,26 +50,93 @@ char *malloc ();
# define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
#endif
#ifndef S_ISUID
# define S_ISUID 04000
#endif
#ifndef S_ISGID
# define S_ISGID 04000
#endif
#ifndef S_ISVTX
# define S_ISVTX 01000
#endif
#ifndef S_IRUSR
# define S_IRUSR 0400
#endif
#ifndef S_IWUSR
# define S_IWUSR 0200
#endif
#ifndef S_IXUSR
# define S_IXUSR 0100
#endif
#ifndef S_IRGRP
# define S_IRGRP 0040
#endif
#ifndef S_IWGRP
# define S_IWGRP 0020
#endif
#ifndef S_IXGRP
# define S_IXGRP 0010
#endif
#ifndef S_IROTH
# define S_IROTH 0004
#endif
#ifndef S_IWOTH
# define S_IWOTH 0002
#endif
#ifndef S_IXOTH
# define S_IXOTH 0001
#endif
#ifndef S_IRWXU
# define S_IRWXU 0700
#endif
#ifndef S_IRWXG
# define S_IRWXG 0070
#endif
#ifndef S_IRWXO
# define S_IRWXO 0007
#endif
/* All the mode bits that can be affected by chmod. */
#define CHMOD_MODE_BITS \
(S_ISUID | S_ISGID | S_ISVTX | S_IRWXU | S_IRWXG | S_IRWXO)
/* Return newly allocated memory to hold one element of type TYPE. */
#define talloc(type) ((type *) malloc (sizeof (type)))
#define isodigit(c) ((c) >= '0' && (c) <= '7')
/* Create a mode_change entry with the specified `=ddd'-style
mode change operation, where NEW_MODE is `ddd'. Return the
new entry, or NULL upon failure. */
/* Return a positive integer containing the value of the ASCII
octal number S. If S is not an octal number, return -1. */
static int
oatoi (const char *s)
static struct mode_change *
make_node_op_equals (mode_t new_mode)
{
register int i;
struct mode_change *p;
p = talloc (struct mode_change);
if (p == NULL)
return p;
p->next = NULL;
p->op = '=';
p->flags = 0;
p->value = new_mode;
p->affected = CHMOD_MODE_BITS; /* Affect all permissions. */
return p;
}
if (*s == 0)
return -1;
for (i = 0; isodigit (*s); ++s)
i = i * 8 + *s - '0';
if (*s)
return -1;
return i;
/* Append entry E to the end of the link list with the specified
HEAD and TAIL. */
static void
mode_append_entry (struct mode_change **head,
struct mode_change **tail,
struct mode_change *e)
{
if (*head == NULL)
*head = *tail = e;
else
{
(*tail)->next = e;
*tail = e;
}
}
/* Return a linked list of file mode change operations created from
@@ -89,41 +156,44 @@ struct mode_change *
mode_compile (const char *mode_string, unsigned int masked_ops)
{
struct mode_change *head; /* First element of the linked list. */
struct mode_change *change; /* An element of the linked list. */
int i; /* General purpose temporary. */
int umask_value; /* The umask value (surprise). */
unsigned short affected_bits; /* Which bits in the mode are operated on. */
unsigned short affected_masked; /* `affected_bits' modified by umask. */
unsigned ops_to_mask; /* Operators to actually use umask on. */
struct mode_change *tail; /* An element of the linked list. */
unsigned long mode_value; /* The mode value, if octal. */
char *string_end; /* Pointer to end of parsed value. */
mode_t umask_value; /* The umask value (surprise). */
i = oatoi (mode_string);
if (i >= 0)
head = NULL;
#ifdef lint
tail = NULL;
#endif
if (xstrtoul (mode_string, &string_end, 8, &mode_value, "") == LONGINT_OK)
{
if (i > 07777)
struct mode_change *p;
if (mode_value > CHMOD_MODE_BITS)
return MODE_INVALID;
head = talloc (struct mode_change);
if (head == NULL)
p = make_node_op_equals ((mode_t) mode_value);
if (p == NULL)
return MODE_MEMORY_EXHAUSTED;
head->next = NULL;
head->op = '=';
head->flags = 0;
head->value = i;
head->affected = 07777; /* Affect all permissions. */
mode_append_entry (&head, &tail, p);
return head;
}
umask_value = umask (0);
umask (umask_value); /* Restore the old value. */
head = NULL;
#ifdef lint
change = NULL;
#endif
--mode_string;
/* One loop iteration for each "ugoa...=+-rwxXstugo...[=+-rwxXstugo...]". */
do
{
/* Which bits in the mode are operated on. */
mode_t affected_bits = 0;
/* `affected_bits' modified by umask. */
mode_t affected_masked;
/* Operators to actually use umask on. */
unsigned ops_to_mask = 0;
int who_specified_p;
affected_bits = 0;
ops_to_mask = 0;
/* Turn on all the bits in `affected_bits' for each group given. */
@@ -131,16 +201,16 @@ mode_compile (const char *mode_string, unsigned int masked_ops)
switch (*mode_string)
{
case 'u':
affected_bits |= 04700;
affected_bits |= S_ISUID | S_IRWXU;
break;
case 'g':
affected_bits |= 02070;
affected_bits |= S_ISGID | S_IRWXG;
break;
case 'o':
affected_bits |= 01007;
affected_bits |= S_ISVTX | S_IRWXO;
break;
case 'a':
affected_bits |= 07777;
affected_bits |= CHMOD_MODE_BITS;
break;
default:
goto no_more_affected;
@@ -149,37 +219,39 @@ mode_compile (const char *mode_string, unsigned int masked_ops)
no_more_affected:
/* If none specified, affect all bits, except perhaps those
set in the umask. */
if (affected_bits == 0)
if (affected_bits)
who_specified_p = 1;
else
{
affected_bits = 07777;
who_specified_p = 0;
affected_bits = CHMOD_MODE_BITS;
ops_to_mask = masked_ops;
}
while (*mode_string == '=' || *mode_string == '+' || *mode_string == '-')
{
/* Add the element to the tail of the list, so the operations
are performed in the correct order. */
if (head == NULL)
struct mode_change *change = talloc (struct mode_change);
if (change == NULL)
{
head = talloc (struct mode_change);
if (head == NULL)
return MODE_MEMORY_EXHAUSTED;
change = head;
}
else
{
change->next = talloc (struct mode_change);
if (change->next == NULL)
{
mode_free (change);
return MODE_MEMORY_EXHAUSTED;
}
change = change->next;
mode_free (head);
return MODE_MEMORY_EXHAUSTED;
}
change->next = NULL;
change->op = *mode_string; /* One of "=+-". */
affected_masked = affected_bits;
/* Per the Single Unix Spec, if `who' is not specified and the
`=' operator is used, then clear all the bits first. */
if (!who_specified_p &&
ops_to_mask & (*mode_string == '=' ? MODE_MASK_EQUALS : 0))
{
struct mode_change *p = make_node_op_equals (0);
if (p == NULL)
return MODE_MEMORY_EXHAUSTED;
mode_append_entry (&head, &tail, p);
}
if (ops_to_mask & (*mode_string == '=' ? MODE_MASK_EQUALS
: *mode_string == '+' ? MODE_MASK_PLUS
: MODE_MASK_MINUS))
@@ -188,36 +260,43 @@ mode_compile (const char *mode_string, unsigned int masked_ops)
change->value = 0;
change->flags = 0;
/* Add the element to the tail of the list, so the operations
are performed in the correct order. */
mode_append_entry (&head, &tail, change);
/* Set `value' according to the bits set in `affected_masked'. */
for (++mode_string;; ++mode_string)
switch (*mode_string)
{
case 'r':
change->value |= 00444 & affected_masked;
change->value |= ((S_IRUSR | S_IRGRP | S_IROTH)
& affected_masked);
break;
case 'w':
change->value |= 00222 & affected_masked;
change->value |= ((S_IWUSR | S_IWGRP | S_IWOTH)
& affected_masked);
break;
case 'X':
change->flags |= MODE_X_IF_ANY_X;
/* Fall through. */
case 'x':
change->value |= 00111 & affected_masked;
change->value |= ((S_IXUSR | S_IXGRP | S_IXOTH)
& affected_masked);
break;
case 's':
/* Set the setuid/gid bits if `u' or `g' is selected. */
change->value |= 06000 & affected_masked;
change->value |= (S_ISUID | S_ISGID) & affected_masked;
break;
case 't':
/* Set the "save text image" bit if `o' is selected. */
change->value |= 01000 & affected_masked;
change->value |= S_ISVTX & affected_masked;
break;
case 'u':
/* Set the affected bits to the value of the `u' bits
on the same file. */
if (change->value)
goto invalid;
change->value = 00700;
change->value = S_IRWXU;
change->flags |= MODE_COPY_EXISTING;
break;
case 'g':
@@ -225,7 +304,7 @@ mode_compile (const char *mode_string, unsigned int masked_ops)
on the same file. */
if (change->value)
goto invalid;
change->value = 00070;
change->value = S_IRWXG;
change->flags |= MODE_COPY_EXISTING;
break;
case 'o':
@@ -233,7 +312,7 @@ mode_compile (const char *mode_string, unsigned int masked_ops)
on the same file. */
if (change->value)
goto invalid;
change->value = 00007;
change->value = S_IRWXO;
change->flags |= MODE_COPY_EXISTING;
break;
default:
@@ -268,7 +347,7 @@ mode_create_from_ref (const char *ref_file)
change->op = '=';
change->flags = 0;
change->affected = 07777;
change->affected = CHMOD_MODE_BITS;
change->value = ref_stats.st_mode;
change->next = NULL;
@@ -280,13 +359,13 @@ mode_create_from_ref (const char *ref_file)
change affects it even if no execute bits were set in OLDMODE.
The returned value has the S_IFMT bits cleared. */
unsigned short
mode_adjust (unsigned int oldmode, const struct mode_change *changes)
mode_t
mode_adjust (mode_t oldmode, const struct mode_change *changes)
{
unsigned short newmode; /* The adjusted mode and one operand. */
unsigned short value; /* The other operand. */
mode_t newmode; /* The adjusted mode and one operand. */
mode_t value; /* The other operand. */
newmode = oldmode & 07777;
newmode = oldmode & CHMOD_MODE_BITS;
for (; changes; changes = changes->next)
{
@@ -296,15 +375,21 @@ mode_adjust (unsigned int oldmode, const struct mode_change *changes)
the mask `changes->value'. */
value = newmode & changes->value;
if (changes->value & 00700)
if (changes->value & S_IRWXU)
/* Copy `u' permissions onto `g' and `o'. */
value |= (value >> 3) | (value >> 6);
else if (changes->value & 00070)
value |= ((value & S_IRUSR ? S_IRGRP | S_IROTH : 0)
| (value & S_IWUSR ? S_IWGRP | S_IROTH : 0)
| (value & S_IXUSR ? S_IXGRP | S_IXOTH : 0));
else if (changes->value & S_IRWXG)
/* Copy `g' permissions onto `u' and `o'. */
value |= (value << 3) | (value >> 3);
value |= ((value & S_IRGRP ? S_IRUSR | S_IROTH : 0)
| (value & S_IWGRP ? S_IWUSR | S_IROTH : 0)
| (value & S_IXGRP ? S_IXUSR | S_IXOTH : 0));
else
/* Copy `o' permissions onto `u' and `g'. */
value |= (value << 3) | (value << 6);
value |= ((value & S_IROTH ? S_IRUSR | S_IRGRP : 0)
| (value & S_IWOTH ? S_IWUSR | S_IRGRP : 0)
| (value & S_IXOTH ? S_IXUSR | S_IXGRP : 0));
/* In order to change only `u', `g', or `o' permissions,
or some combination thereof, clear unselected bits.
@@ -320,8 +405,9 @@ mode_adjust (unsigned int oldmode, const struct mode_change *changes)
directory and no execute bits are already set. */
if ((changes->flags & MODE_X_IF_ANY_X)
&& !S_ISDIR (oldmode)
&& (newmode & 00111) == 0)
value &= ~00111; /* Clear the execute bits. */
&& (newmode & (S_IXUSR | S_IXGRP | S_IXOTH)) == 0)
/* Clear the execute bits. */
value &= ~ (S_IXUSR | S_IXGRP | S_IXOTH);
}
switch (changes->op)

View File

@@ -20,6 +20,12 @@
#if ! defined MODECHANGE_H_
# define MODECHANGE_H_
# if HAVE_CONFIG_H
# include <config.h>
# endif
# include <sys/types.h>
/* Affect the execute bits only if at least one execute bit is set already,
or if the file is a directory. */
# define MODE_X_IF_ANY_X 01
@@ -33,8 +39,8 @@ struct mode_change
{
char op; /* One of "=+-". */
char flags; /* Special operations. */
unsigned short affected; /* Set for u/g/o/s/s/t, if to be affected. */
unsigned short value; /* Bits to add/remove. */
mode_t affected; /* Set for u/g/o/s/s/t, if to be affected. */
mode_t value; /* Bits to add/remove. */
struct mode_change *next; /* Link to next change in list. */
};
@@ -59,7 +65,7 @@ struct mode_change
struct mode_change *mode_compile PARAMS ((const char *, unsigned));
struct mode_change *mode_create_from_ref PARAMS ((const char *));
unsigned short mode_adjust PARAMS ((unsigned, const struct mode_change *));
mode_t mode_adjust PARAMS ((mode_t, const struct mode_change *));
void mode_free PARAMS ((struct mode_change *));
#endif

View File

@@ -1,5 +1,5 @@
/* mountlist.c -- return a list of mounted filesystems
Copyright (C) 1991, 1992, 1997, 1998 Free Software Foundation, Inc.
Copyright (C) 1991, 1992, 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 @@
/* Define PATH_MAX somehow. Requires sys/types.h.
Copyright (C) 1992 Free Software Foundation, Inc.
Copyright (C) 1992, 1999 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -16,38 +16,39 @@
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#ifndef _PATHMAX_H
#define _PATHMAX_H
# define _PATHMAX_H
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
# ifdef HAVE_UNISTD_H
# include <unistd.h>
# endif
/* Non-POSIX BSD systems might have gcc's limits.h, which doesn't define
PATH_MAX but might cause redefinition warnings when sys/param.h is
later included (as on MORE/BSD 4.3). */
#if defined(_POSIX_VERSION) || (defined(HAVE_LIMITS_H) && !defined(__GNUC__))
#include <limits.h>
#endif
# if defined(_POSIX_VERSION) || (defined(HAVE_LIMITS_H) && !defined(__GNUC__))
# include <limits.h>
# endif
#ifndef _POSIX_PATH_MAX
#define _POSIX_PATH_MAX 255
#endif
# ifndef _POSIX_PATH_MAX
# define _POSIX_PATH_MAX 255
# endif
#if !defined(PATH_MAX) && defined(_PC_PATH_MAX)
#define PATH_MAX (pathconf ("/", _PC_PATH_MAX) < 1 ? 1024 : pathconf ("/", _PC_PATH_MAX))
#endif
# if !defined(PATH_MAX) && defined(_PC_PATH_MAX)
# define PATH_MAX (pathconf ("/", _PC_PATH_MAX) < 1 ? 1024 \
: pathconf ("/", _PC_PATH_MAX))
# endif
/* Don't include sys/param.h if it already has been. */
#if defined(HAVE_SYS_PARAM_H) && !defined(PATH_MAX) && !defined(MAXPATHLEN)
#include <sys/param.h>
#endif
# if defined(HAVE_SYS_PARAM_H) && !defined(PATH_MAX) && !defined(MAXPATHLEN)
# include <sys/param.h>
# endif
#if !defined(PATH_MAX) && defined(MAXPATHLEN)
#define PATH_MAX MAXPATHLEN
#endif
# if !defined(PATH_MAX) && defined(MAXPATHLEN)
# define PATH_MAX MAXPATHLEN
# endif
#ifndef PATH_MAX
#define PATH_MAX _POSIX_PATH_MAX
#endif
# ifndef PATH_MAX
# define PATH_MAX _POSIX_PATH_MAX
# endif
#endif /* _PATHMAX_H */

View File

@@ -17,6 +17,8 @@
/* Written by Paul Eggert <eggert@twinsun.com> */
/* FIXME: Multibyte characters are not supported yet. */
#if HAVE_CONFIG_H
# include <config.h>
#endif
@@ -37,6 +39,13 @@
# define ISGRAPH(c) (ISASCII (c) && isprint (c) && !isspace (c))
#endif
#if ENABLE_NLS
# include <libintl.h>
# define _(text) gettext (text)
#else
# define _(text) text
#endif
#if HAVE_LIMITS_H
# include <limits.h>
#endif
@@ -76,6 +85,7 @@ char const *const quoting_style_args[] =
"shell-always",
"c",
"escape",
"locale",
0
};
@@ -86,7 +96,8 @@ enum quoting_style const quoting_style_vals[] =
shell_quoting_style,
shell_always_quoting_style,
c_quoting_style,
escape_quoting_style
escape_quoting_style,
locale_quoting_style
};
/* The default quoting options. */
@@ -150,8 +161,9 @@ quotearg_buffer (char *buffer, size_t buffersize,
{
unsigned char c;
size_t i;
size_t len;
int quote_mark;
size_t len = 0;
char const *quote_string;
size_t quote_string_len;
struct quoting_options const *p = o ? o : &default_quoting_options;
enum quoting_style quoting_style = p->style;
#define STORE(c) \
@@ -174,7 +186,6 @@ quotearg_buffer (char *buffer, size_t buffersize,
break;
default:
len = 0;
for (i = 0; ; i++)
{
if (argsize == (size_t) -1 ? arg[i] == '\0' : i == argsize)
@@ -199,31 +210,39 @@ quotearg_buffer (char *buffer, size_t buffersize,
STORE (c);
}
needs_quoting:;
len = 0;
break;
}
}
/* Fall through. */
case shell_always_quoting_style:
quote_mark = '\'';
STORE ('\'');
quote_string = "'";
quote_string_len = 1;
break;
case c_quoting_style:
quote_mark = '"';
STORE ('"');
quote_string = "\"";
quote_string_len = 1;
break;
case locale_quoting_style:
for (quote_string = _("`"); *quote_string; quote_string++)
STORE (*quote_string);
quote_string = _("'");
quote_string_len = strlen (quote_string);
break;
default:
quote_mark = 0;
quote_string = 0;
quote_string_len = 0;
break;
}
len = 0;
if (quote_mark)
STORE (quote_mark);
for (i = 0; ! (argsize == (size_t) -1 ? arg[i] == '\0' : i == argsize); i++)
{
c = arg[i];
@@ -245,6 +264,7 @@ quotearg_buffer (char *buffer, size_t buffersize,
case c_quoting_style:
case escape_quoting_style:
case locale_quoting_style:
switch (c)
{
case '?': /* Do not generate trigraphs. */
@@ -258,12 +278,12 @@ quotearg_buffer (char *buffer, size_t buffersize,
case '\t': c = 't'; goto store_escape;
case '\v': c = 'v'; goto store_escape;
case '"':
if (quoting_style == c_quoting_style)
goto store_escape;
break;
case ' ': break;
default:
if (quote_string_len
&& strncmp (arg + i, quote_string, quote_string_len) == 0)
goto store_escape;
if (!ISGRAPH (c))
{
STORE ('\\');
@@ -286,8 +306,9 @@ quotearg_buffer (char *buffer, size_t buffersize,
STORE (c);
}
if (quote_mark)
STORE (quote_mark);
if (quote_string)
for (; *quote_string; quote_string++)
STORE (*quote_string);
done:
if (len < buffersize)
@@ -351,6 +372,21 @@ quotearg (char const *arg)
return quotearg_n (0, arg);
}
char *
quotearg_n_style (unsigned int n, enum quoting_style s, char const *arg)
{
struct quoting_options o;
o.style = s;
memset (o.quote_these_too, 0, sizeof o.quote_these_too);
return quotearg_n_options (n, arg, &o);
}
char *
quotearg_style (enum quoting_style s, char const *arg)
{
return quotearg_n_style (0, s, arg);
}
char *
quotearg_char (char const *arg, char ch)
{

View File

@@ -24,11 +24,11 @@ enum quoting_style
shell_quoting_style, /* --quoting-style=shell */
shell_always_quoting_style, /* --quoting-style=shell-always */
c_quoting_style, /* --quoting-style=c */
escape_quoting_style /* --quoting-style=escape */
escape_quoting_style, /* --quoting-style=escape */
locale_quoting_style /* --quoting-style=locale */
};
/* For now, --quoting-style=literal is the default, but
this is planned to change to --quoting-style=shell in the future. */
/* For now, --quoting-style=literal is the default, but this may change. */
#ifndef DEFAULT_QUOTING_STYLE
# define DEFAULT_QUOTING_STYLE literal_quoting_style
#endif
@@ -93,6 +93,15 @@ char *quotearg_n PARAMS ((unsigned int n, char const *arg));
/* Equivalent to quotearg_n (0, ARG). */
char *quotearg PARAMS ((char const *arg));
/* Use style S and storage slot N to return a quoted version of the string ARG.
This is like quotearg_n (N, ARG), except that it uses S with no other
options to specify the quoting method. */
char *quotearg_n_style PARAMS ((unsigned int n, enum quoting_style s,
char const *arg));
/* Equivalent to quotearg_n_style (0, S, ARG). */
char *quotearg_style PARAMS ((enum quoting_style s, char const *arg));
/* Like quotearg (ARG), except also quote any instances of CH. */
char *quotearg_char PARAMS ((char const *arg, char ch));

View File

@@ -1,5 +1,5 @@
/* readtokens.c -- Functions for reading tokens from an input stream.
Copyright (C) 1990-1991 Jim Meyering.
Copyright (C) 1990-1991, 1999 Jim Meyering.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -77,11 +77,10 @@ init_tokenbuffer (tokenbuffer)
and on files that aren't newline-terminated. */
long
readtoken (stream, delim, n_delim, tokenbuffer)
FILE *stream;
const char *delim;
int n_delim;
token_buffer *tokenbuffer;
readtoken (FILE *stream,
const char *delim,
int n_delim,
token_buffer *tokenbuffer)
{
char *p;
int c, i, n;
@@ -164,14 +163,12 @@ readtoken (stream, delim, n_delim, tokenbuffer)
%%% realloc() of `tokens' just before returning? */
int
readtokens (stream, projected_n_tokens, delim, n_delim,
tokens_out, token_lengths)
FILE *stream;
int projected_n_tokens;
const char *delim;
int n_delim;
char ***tokens_out;
long **token_lengths;
readtokens (FILE *stream,
int projected_n_tokens,
const char *delim,
int n_delim,
char ***tokens_out,
long **token_lengths)
{
token_buffer tb, *token = &tb;
int token_length;

View File

@@ -1,5 +1,5 @@
/* GNU's read utmp module.
Copyright (C) 92, 93, 94, 95, 96, 1997, 1998 Free Software Foundation, Inc.
Copyright (C) 1992-1999 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -19,6 +19,8 @@
#include <config.h>
#include <stdio.h>
#include <sys/stat.h>
#if defined(STDC_HEADERS) || defined(HAVE_STRING_H)
# include <string.h>
@@ -29,6 +31,7 @@
#include "readutmp.h"
char *xmalloc ();
char *realloc ();
/* Copy UT->ut_name into storage obtained from malloc. Then remove any
trailing spaces from the copy, NUL terminate it, and return the copy. */
@@ -49,70 +52,42 @@ extract_trimmed_name (const STRUCT_UTMP *ut)
return trimmed_name;
}
/* Read the utmp file FILENAME into *UTMP_BUF, set *N_ENTRIES to the
number of entries read, and return zero. If there is any error,
/* Read the utmp entries corresponding to file FILENAME into freshly-
malloc'd storage, set *UTMP_BUF to that pointer, set *N_ENTRIES to
the number of entries, and return zero. If there is any error,
return non-zero and don't modify the parameters. */
#ifdef HAVE_UTMPNAME
#if HAVE_UTMPNAME
int
read_utmp (const char *filename, int *n_entries, STRUCT_UTMP **utmp_buf)
{
int count_utmp = 0;
int n_read;
STRUCT_UTMP *u;
STRUCT_UTMP *uptr;
STRUCT_UTMP *utmp_contents;
STRUCT_UTMP *utmp = NULL;
if (utmpname (filename))
{
return 1;
}
/* Ignore the return value for now.
Solaris' utmpname returns 1 upon success -- which is contrary
to what the GNU libc version does. In addition, older GNU libc
versions are actually void. */
UTMP_NAME_FUNCTION (filename);
/* FIXME: going through the list twice is wasteful. */
/* count the entries in utmp */
setutent ();
while ((u = getutent ()) != NULL)
++count_utmp;
if (count_utmp == 0)
return 0;
utmp_contents = (STRUCT_UTMP *) xmalloc (count_utmp * sizeof (STRUCT_UTMP));
/* read the entries in utmp */
/* FIXME: can this fail? */
setutent ();
SET_UTMP_ENT ();
n_read = 0;
uptr = utmp_contents;
while ((u = getutent ()) != NULL)
while ((u = GET_UTMP_ENT ()) != NULL)
{
++n_read;
if (n_read > count_utmp)
{
STRUCT_UTMP *old_utmp_contents = utmp_contents;
++count_utmp;
utmp_contents = (STRUCT_UTMP *) xrealloc (utmp_contents,
(count_utmp
* sizeof (STRUCT_UTMP)));
uptr = utmp_contents + (uptr - old_utmp_contents);
}
*uptr = *u;
++uptr;
utmp = (STRUCT_UTMP *) realloc (utmp, n_read * sizeof (STRUCT_UTMP));
if (utmp == NULL)
return 1;
utmp[n_read - 1] = *u;
}
if (n_read != count_utmp)
utmp_contents = (STRUCT_UTMP *) xrealloc (utmp_contents,
n_read * sizeof (STRUCT_UTMP));
/* FIXME: can this fail? */
endutent ();
END_UTMP_ENT ();
*n_entries = n_read;
*utmp_buf = utmp_contents;
*utmp_buf = utmp;
return 0;
}

View File

@@ -1,5 +1,5 @@
/* Declarations for GNU's read utmp module.
Copyright (C) 92, 93, 94, 95, 96, 1997, 1998 Free Software Foundation, Inc.
Copyright (C) 1992-1999 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -28,17 +28,24 @@
# endif
# endif
# include <stdio.h>
# include <sys/types.h>
# ifdef HAVE_UTMPX_H
# include <utmpx.h>
# define UTMP_STRUCT_NAME utmpx
# define UT_TIME_MEMBER(UT_PTR) ((UT_PTR)->ut_tv.tv_sec)
# define SET_UTMP_ENT setutxent
# define GET_UTMP_ENT getutxent
# define END_UTMP_ENT endutxent
# define UTMP_NAME_FUNCTION utmpxname
# else
# include <utmp.h>
# define UTMP_STRUCT_NAME utmp
# define UT_TIME_MEMBER(UT_PTR) ((UT_PTR)->ut_time)
# define SET_UTMP_ENT setutent
# define GET_UTMP_ENT getutent
# define END_UTMP_ENT endutent
# define UTMP_NAME_FUNCTION utmpname
# endif
typedef struct UTMP_STRUCT_NAME STRUCT_UTMP;

View File

@@ -2,7 +2,7 @@
version 0.12.
(Implements POSIX draft P1003.2/D11.2, except for some of the
internationalization features.)
Copyright (C) 1993, 94, 95, 96, 97, 98 Free Software Foundation, Inc.
Copyright (C) 1993, 94, 95, 96, 97, 98, 99 Free Software Foundation, Inc.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
@@ -254,6 +254,12 @@ init_syntax_once ()
#define ISUPPER(c) (ISASCII (c) && isupper (c))
#define ISXDIGIT(c) (ISASCII (c) && isxdigit (c))
#ifdef _tolower
# define TOLOWER(c) _tolower(c)
#else
# define TOLOWER(c) tolower(c)
#endif
#ifndef NULL
# define NULL (void *)0
#endif
@@ -5628,7 +5634,7 @@ regcomp (preg, pattern, cflags)
/* Map uppercase characters to corresponding lowercase ones. */
for (i = 0; i < CHAR_SET_SIZE; i++)
preg->translate[i] = ISUPPER (i) ? tolower (i) : i;
preg->translate[i] = ISUPPER (i) ? TOLOWER (i) : i;
}
else
preg->translate = NULL;

View File

@@ -41,7 +41,6 @@ int
rename (char *from, char *to)
{
struct stat from_stats, to_stats;
int pid, status;
if (stat (from, &from_stats))
return -1;
@@ -74,23 +73,27 @@ rename (char *from, char *to)
if (S_ISDIR (from_stats.st_mode))
{
/* Need a setuid root process to link and unlink directories. */
pid = fork ();
int status;
pid_t pid = fork ();
switch (pid)
{
case -1: /* Error. */
error (1, errno, "cannot fork");
return -1; /* errno already set */
case 0: /* Child. */
execl (MVDIR, "mvdir", from, to, (char *) 0);
error (255, errno, "cannot run `%s'", MVDIR);
_exit (1);
default: /* Parent. */
while (wait (&status) != pid)
/* Do nothing. */ ;
errno = 0; /* mvdir printed the system error message. */
if (status)
return -1;
{
/* MVDIR failed. */
errno = EIO;
return -1;
}
}
}
else

View File

@@ -44,7 +44,8 @@ int
rmdir (dpath)
char *dpath;
{
int cpid, status;
pid_t cpid;
int status;
struct stat statbuf;
if (stat (dpath, &statbuf) != 0)
@@ -73,7 +74,7 @@ rmdir (dpath)
while (wait (&status) != cpid)
/* Do nothing. */ ;
if (status & 0xFFFF)
if (status)
{
/* /bin/rmdir failed. */

75
lib/same.c Normal file
View File

@@ -0,0 +1,75 @@
#if HAVE_CONFIG_H
# include <config.h>
#endif
#include <stdio.h>
#ifdef HAVE_UNISTD_H
# include <unistd.h>
#endif
#if HAVE_STDLIB_H
# include <stdlib.h>
#endif
#include <sys/types.h>
#include <sys/stat.h>
#include <ctype.h>
#include <errno.h>
#ifndef errno
extern int errno;
#endif
#include "same.h"
#include "dirname.h"
#include "error.h"
#if ENABLE_NLS
# include <libintl.h>
# define _(Text) gettext (Text)
#else
# define _(Text) Text
#endif
#define STREQ(a, b) (strcmp ((a), (b)) == 0)
#ifndef HAVE_DECL_FREE
void free ();
#endif
char *base_name PARAMS ((char const *));
#define SAME_INODE(Stat_buf_1, Stat_buf_2) \
((Stat_buf_1).st_ino == (Stat_buf_2).st_ino \
&& (Stat_buf_1).st_dev == (Stat_buf_2).st_dev)
/* Return nonzero if SOURCE and DEST point to the same name in the same
directory. */
int
same_name (const char *source, const char *dest)
{
struct stat source_dir_stats;
struct stat dest_dir_stats;
char *source_dirname, *dest_dirname;
source_dirname = dir_name (source);
dest_dirname = dir_name (dest);
if (source_dirname == NULL || dest_dirname == NULL)
error (1, 0, _("virtual memory exhausted"));
if (stat (source_dirname, &source_dir_stats))
{
/* Shouldn't happen. */
error (1, errno, "%s", source_dirname);
}
if (stat (dest_dirname, &dest_dir_stats))
{
/* Shouldn't happen. */
error (1, errno, "%s", dest_dirname);
}
free (source_dirname);
free (dest_dirname);
return (SAME_INODE (source_dir_stats, dest_dir_stats)
&& STREQ (base_name (source), base_name (dest)));
}

19
lib/same.h Normal file
View File

@@ -0,0 +1,19 @@
#ifndef SAME_H_
# define SAME_H_ 1
# if HAVE_CONFIG_H
# include <config.h>
# endif
# ifndef PARAMS
# if defined PROTOTYPES || (defined __STDC__ && __STDC__)
# define PARAMS(Args) Args
# else
# define PARAMS(Args) ()
# endif
# endif
int
same_name PARAMS ((const char *source, const char *dest));
#endif /* SAME_H_ */

View File

@@ -1,5 +1,5 @@
/* savedir.c -- save the list of files in a directory in a string
Copyright (C) 1990, 1997, 1998 Free Software Foundation, Inc.
Copyright (C) 1990, 1997, 1998, 1999 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -76,7 +76,7 @@ char *stpcpy ();
Return NULL if DIR cannot be opened or if out of memory. */
char *
savedir (const char *dir, unsigned int name_size)
savedir (const char *dir, off_t name_size)
{
DIR *dirp;
struct dirent *dp;
@@ -102,7 +102,7 @@ savedir (const char *dir, unsigned int name_size)
|| (dp->d_name[1] != '\0'
&& (dp->d_name[1] != '.' || dp->d_name[2] != '\0')))
{
unsigned size_needed = (namep - name_space) + NAMLEN (dp) + 2;
off_t size_needed = (namep - name_space) + NAMLEN (dp) + 2;
if (size_needed > name_size)
{

View File

@@ -10,6 +10,6 @@
# endif
char *
savedir PARAMS ((const char *dir, unsigned int name_size));
savedir PARAMS ((const char *dir, off_t name_size));
#endif

View File

@@ -1,4 +1,4 @@
/* Copyright (C) 1991,92,93,94,95,96,97,98 Free Software Foundation, Inc.
/* Copyright (C) 1991,92,93,94,95,96,97,98,99 Free Software Foundation, Inc.
NOTE: The canonical source of this file is maintained with the GNU C Library.
Bugs can be reported to bug-glibc@prep.ai.mit.edu.
@@ -10,8 +10,8 @@
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
@@ -1025,7 +1025,6 @@ my_strftime (char *s, size_t maxsize, const char *format, const struct tm *tp
add (1, *p = '\t');
break;
case 'f':
case 'u': /* POSIX.2 extension. */
DO_NUMBER (1, (tp->tm_wday - 1 + 7) % 7 + 1);
@@ -1220,7 +1219,7 @@ my_strftime (char *s, size_t maxsize, const char *format, const struct tm *tp
}
}
if (p && i < maxsize)
if (p && maxsize != 0)
*p = '\0';
return i;
}

View File

@@ -1,7 +1,7 @@
/* strtol - Convert string representation of a number into an integer value.
Copyright (C) 1991, 92, 94, 95, 96, 97 Free Software Foundation, Inc.
/* Convert string representation of a number into an integer value.
Copyright (C) 1991, 92, 94, 95, 96, 97, 98, 99 Free Software Foundation, Inc.
NOTE: The canonical source of this file is maintained with the GNU C
Library. Bugs can be reported to bug-glibc@prep.ai.mit.edu.
Library. Bugs can be reported to bug-glibc@gnu.org.
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
@@ -54,7 +54,7 @@ extern int errno;
# include "../locale/localeinfo.h"
#endif
/* Nonzero if we are defining `strtoul' or `strtouq', operating on
/* Nonzero if we are defining `strtoul' or `strtoull', operating on
unsigned integers. */
#ifndef UNSIGNED
# define UNSIGNED 0
@@ -64,72 +64,154 @@ extern int errno;
#endif
/* Determine the name. */
#if UNSIGNED
# ifdef USE_WIDE_CHAR
# ifdef QUAD
# define strtol wcstouq
#ifdef USE_IN_EXTENDED_LOCALE_MODEL
# if UNSIGNED
# ifdef USE_WIDE_CHAR
# ifdef QUAD
# define strtol __wcstoull_l
# else
# define strtol __wcstoul_l
# endif
# else
# define strtol wcstoul
# ifdef QUAD
# define strtol __strtoull_l
# else
# define strtol __strtoul_l
# endif
# endif
# else
# ifdef QUAD
# define strtol strtouq
# ifdef USE_WIDE_CHAR
# ifdef QUAD
# define strtol __wcstoll_l
# else
# define strtol __wcstol_l
# endif
# else
# define strtol strtoul
# ifdef QUAD
# define strtol __strtoll_l
# else
# define strtol __strtol_l
# endif
# endif
# endif
#else
# ifdef USE_WIDE_CHAR
# ifdef QUAD
# define strtol wcstoq
# if UNSIGNED
# ifdef USE_WIDE_CHAR
# ifdef QUAD
# define strtol wcstoull
# else
# define strtol wcstoul
# endif
# else
# define strtol wcstol
# ifdef QUAD
# define strtol strtoull
# else
# define strtol strtoul
# endif
# endif
# else
# ifdef QUAD
# define strtol strtoq
# ifdef USE_WIDE_CHAR
# ifdef QUAD
# define strtol wcstoll
# else
# define strtol wcstol
# endif
# else
# ifdef QUAD
# define strtol strtoll
# endif
# endif
# endif
#endif
/* If QUAD is defined, we are defining `strtoq' or `strtouq',
/* If QUAD is defined, we are defining `strtoll' or `strtoull',
operating on `long long int's. */
#ifdef QUAD
# define LONG long long
# undef LONG_MIN
# define LONG_MIN LONG_LONG_MIN
# undef LONG_MAX
# define LONG_MAX LONG_LONG_MAX
# undef ULONG_MAX
# define ULONG_MAX ULONG_LONG_MAX
# define STRTOL_LONG_MIN LONG_LONG_MIN
# define STRTOL_LONG_MAX LONG_LONG_MAX
# define STRTOL_ULONG_MAX ULONG_LONG_MAX
/* The extra casts work around common compiler bugs,
e.g. Cray C 5.0.3.0 when t == time_t. */
# ifndef TYPE_SIGNED
# define TYPE_SIGNED(t) (! ((t) 0 < (t) -1))
# endif
# ifndef TYPE_MINIMUM
# define TYPE_MINIMUM(t) ((t) (TYPE_SIGNED (t) \
? ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1) \
: (t) 0))
# endif
# ifndef TYPE_MAXIMUM
# define TYPE_MAXIMUM(t) ((t) (~ (t) 0 - TYPE_MINIMUM (t)))
# endif
# ifndef ULONG_LONG_MAX
# define ULONG_LONG_MAX TYPE_MAXIMUM (unsigned long long)
# endif
# ifndef LONG_LONG_MAX
# define LONG_LONG_MAX TYPE_MAXIMUM (long long int)
# endif
# ifndef LONG_LONG_MIN
# define LONG_LONG_MIN TYPE_MINIMUM (long long int)
# endif
# if __GNUC__ == 2 && __GNUC_MINOR__ < 7
/* Work around gcc bug with using this constant. */
static const unsigned long long int maxquad = ULONG_LONG_MAX;
# undef ULONG_MAX
# define ULONG_MAX maxquad
# undef STRTOL_ULONG_MAX
# define STRTOL_ULONG_MAX maxquad
# endif
#else
# define LONG long
#ifndef ULONG_MAX
# define ULONG_MAX ((unsigned long) ~(unsigned long) 0)
# ifndef ULONG_MAX
# define ULONG_MAX ((unsigned long) ~(unsigned long) 0)
# endif
# ifndef LONG_MAX
# define LONG_MAX ((long int) (ULONG_MAX >> 1))
# endif
# define STRTOL_LONG_MIN LONG_MIN
# define STRTOL_LONG_MAX LONG_MAX
# define STRTOL_ULONG_MAX ULONG_MAX
#endif
#ifndef LONG_MAX
# define LONG_MAX ((long int) (ULONG_MAX >> 1))
/* We use this code also for the extended locale handling where the
function gets as an additional argument the locale which has to be
used. To access the values we have to redefine the _NL_CURRENT
macro. */
#ifdef USE_IN_EXTENDED_LOCALE_MODEL
# undef _NL_CURRENT
# define _NL_CURRENT(category, item) \
(current->values[_NL_ITEM_INDEX (item)].string)
# define LOCALE_PARAM , loc
# define LOCALE_PARAM_DECL __locale_t loc;
#else
# define LOCALE_PARAM
# define LOCALE_PARAM_DECL
#endif
#if defined _LIBC || defined HAVE_WCHAR_H
# include <wchar.h>
#endif
#ifdef USE_WIDE_CHAR
# include <wchar.h>
# include <wctype.h>
# define L_(Ch) L##Ch
# define UCHAR_TYPE wint_t
# define STRING_TYPE wchar_t
# define ISSPACE(Ch) iswspace (Ch)
# define ISALPHA(Ch) iswalpha (Ch)
# define TOUPPER(Ch) towupper (Ch)
# ifdef USE_IN_EXTENDED_LOCALE_MODEL
# define ISSPACE(Ch) __iswspace_l ((Ch), loc)
# define ISALPHA(Ch) __iswalpha_l ((Ch), loc)
# define TOUPPER(Ch) __towupper_l ((Ch), loc)
# else
# define ISSPACE(Ch) iswspace (Ch)
# define ISALPHA(Ch) iswalpha (Ch)
# define TOUPPER(Ch) towupper (Ch)
# endif
#else
# if defined (STDC_HEADERS) || (!defined (isascii) && !defined (HAVE_ISASCII))
# if defined STDC_HEADERS || (!defined isascii && !defined HAVE_ISASCII)
# define IN_CTYPE_DOMAIN(c) 1
# else
# define IN_CTYPE_DOMAIN(c) isascii(c)
@@ -137,12 +219,20 @@ extern int errno;
# define L_(Ch) Ch
# define UCHAR_TYPE unsigned char
# define STRING_TYPE char
# define ISSPACE(Ch) (IN_CTYPE_DOMAIN (Ch) && isspace (Ch))
# define ISALPHA(Ch) (IN_CTYPE_DOMAIN (Ch) && isalpha (Ch))
# define TOUPPER(Ch) (IN_CTYPE_DOMAIN (Ch) ? toupper (Ch) : (Ch))
# ifdef USE_IN_EXTENDED_LOCALE_MODEL
# define ISSPACE(Ch) __isspace_l ((Ch), loc)
# define ISALPHA(Ch) __isalpha_l ((Ch), loc)
# define TOUPPER(Ch) __toupper_l ((Ch), loc)
# else
# define ISSPACE(Ch) (IN_CTYPE_DOMAIN (Ch) && isspace (Ch))
# define ISALPHA(Ch) (IN_CTYPE_DOMAIN (Ch) && isalpha (Ch))
# define TOUPPER(Ch) (IN_CTYPE_DOMAIN (Ch) ? toupper (Ch) : (Ch))
# endif
#endif
#ifdef __STDC__
/* For compilers which are ansi but don't define __STDC__, like SGI
Irix-4.0.5 cc, also check whether PROTOTYPES is defined. */
#if defined (__STDC__) || defined (PROTOTYPES)
# define INTERNAL(X) INTERNAL1(X)
# define INTERNAL1(X) __##X##_internal
# define WEAKNAME(X) WEAKNAME1(X)
@@ -156,6 +246,7 @@ extern int errno;
#endif
/* Convert NPTR to an `unsigned long int' or `long int' in base BASE.
If BASE is 0 the base is determined by the presence of a leading
zero, indicating octal or a leading "0x" or "0X", indicating hexadecimal.
@@ -164,11 +255,12 @@ extern int errno;
one converted is stored in *ENDPTR. */
INT
INTERNAL (strtol) (nptr, endptr, base, group)
INTERNAL (strtol) (nptr, endptr, base, group LOCALE_PARAM)
const STRING_TYPE *nptr;
STRING_TYPE **endptr;
int base;
int group;
LOCALE_PARAM_DECL
{
int negative;
register unsigned LONG int cutoff;
@@ -180,8 +272,11 @@ INTERNAL (strtol) (nptr, endptr, base, group)
int overflow;
#ifdef USE_NUMBER_GROUPING
# ifdef USE_IN_EXTENDED_LOCALE_MODEL
struct locale_data *current = loc->__locales[LC_NUMERIC];
# endif
/* The thousands character of the current locale. */
wchar_t thousands;
wchar_t thousands = L'\0';
/* The numeric grouping specification of the current locale,
in the format described in <locale.h>. */
const char *grouping;
@@ -194,9 +289,11 @@ INTERNAL (strtol) (nptr, endptr, base, group)
else
{
/* Figure out the thousands separator character. */
if (mbtowc (&thousands, _NL_CURRENT (LC_NUMERIC, THOUSANDS_SEP),
strlen (_NL_CURRENT (LC_NUMERIC, THOUSANDS_SEP))) <= 0)
thousands = (wchar_t) *_NL_CURRENT (LC_NUMERIC, THOUSANDS_SEP);
# if defined _LIBC || defined _HAVE_BTOWC
thousands = __btowc (*_NL_CURRENT (LC_NUMERIC, THOUSANDS_SEP));
if (thousands == WEOF)
thousands = L'\0';
# endif
if (thousands == L'\0')
grouping = NULL;
}
@@ -233,23 +330,19 @@ INTERNAL (strtol) (nptr, endptr, base, group)
else
negative = 0;
if (base == 16 && s[0] == L_('0') && TOUPPER (s[1]) == L_('X'))
s += 2;
/* If BASE is zero, figure it out ourselves. */
if (base == 0)
if (*s == L_('0'))
{
if (TOUPPER (s[1]) == L_('X'))
{
s += 2;
base = 16;
}
else
base = 8;
}
else
base = 10;
/* Recognize number prefix and if BASE is zero, figure it out ourselves. */
if (*s == L_('0'))
{
if ((base == 0 || base == 16) && TOUPPER (s[1]) == L_('X'))
{
s += 2;
base = 16;
}
else if (base == 0)
base = 8;
}
else if (base == 0)
base = 10;
/* Save the pointer so we can check later if anything happened. */
save = s;
@@ -273,8 +366,8 @@ INTERNAL (strtol) (nptr, endptr, base, group)
#endif
end = NULL;
cutoff = ULONG_MAX / (unsigned LONG int) base;
cutlim = ULONG_MAX % (unsigned LONG int) base;
cutoff = STRTOL_ULONG_MAX / (unsigned LONG int) base;
cutlim = STRTOL_ULONG_MAX % (unsigned LONG int) base;
overflow = 0;
i = 0;
@@ -314,25 +407,23 @@ INTERNAL (strtol) (nptr, endptr, base, group)
`unsigned LONG int', but outside the range of `LONG int'. */
if (overflow == 0
&& i > (negative
? -((unsigned LONG int) (LONG_MIN + 1)) + 1
: (unsigned LONG int) LONG_MAX))
? -((unsigned LONG int) (STRTOL_LONG_MIN + 1)) + 1
: (unsigned LONG int) STRTOL_LONG_MAX))
overflow = 1;
#else
overflow |= negative;
#endif
if (overflow)
{
__set_errno (ERANGE);
#if UNSIGNED
return ULONG_MAX;
return STRTOL_ULONG_MAX;
#else
return negative ? LONG_MIN : LONG_MAX;
return negative ? STRTOL_LONG_MIN : STRTOL_LONG_MAX;
#endif
}
/* Return the result of the appropriate sign. */
return (negative ? -i : i);
return negative ? -i : i;
noconv:
/* We must handle a special case here: the base is 0 or 16 and the
@@ -340,12 +431,14 @@ noconv:
hexadecimal digits. This is no error case. We return 0 and
ENDPTR points to the `x`. */
if (endptr != NULL)
if (save - nptr >= 2 && TOUPPER (save[-1]) == L_('X')
&& save[-2] == L_('0'))
*endptr = (STRING_TYPE *) &save[-1];
else
/* There was no number to convert. */
*endptr = (STRING_TYPE *) nptr;
{
if (save - nptr >= 2 && TOUPPER (save[-1]) == L_('X')
&& save[-2] == L_('0'))
*endptr = (STRING_TYPE *) &save[-1];
else
/* There was no number to convert. */
*endptr = (STRING_TYPE *) nptr;
}
return 0L;
}
@@ -369,10 +462,11 @@ INT
#ifdef weak_function
weak_function
#endif
strtol (nptr, endptr, base)
strtol (nptr, endptr, base LOCALE_PARAM)
const STRING_TYPE *nptr;
STRING_TYPE **endptr;
int base;
LOCALE_PARAM_DECL
{
return INTERNAL (strtol) (nptr, endptr, base, 0);
return INTERNAL (strtol) (nptr, endptr, base, 0 LOCALE_PARAM);
}

View File

@@ -1,4 +1,4 @@
/* Copyright (C) 1991 Free Software Foundation, Inc.
/* Copyright (C) 1991, 1999 Free Software Foundation, Inc.
NOTE: The canonical source of this file is maintained with the GNU C Library.
Bugs can be reported to bug-glibc@prep.ai.mit.edu.
@@ -17,6 +17,6 @@ You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#define UNSIGNED 1
#define UNSIGNED 1
#include <strtol.c>

27
lib/strtoull.c Normal file
View File

@@ -0,0 +1,27 @@
/* Function to parse an `unsigned long long int' from text.
Copyright (C) 1995, 1996, 1997, 1999 Free Software Foundation, Inc.
NOTE: The canonical source of this file is maintained with the GNU C
Library. Bugs can be reported to bug-glibc@gnu.org.
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation; either version 2, or (at your option) any
later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#define QUAD 1
#include "strtoul.c"
#ifdef _LIBC
strong_alias (__strtoull_internal, __strtouq_internal)
weak_alias (strtoull, strtouq)
#endif

58
lib/strtoumax.c Normal file
View File

@@ -0,0 +1,58 @@
/* Convert string representation of a number into an uintmax_t value.
Copyright 1999 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
/* Written by Paul Eggert. */
#if HAVE_CONFIG_H
# include <config.h>
#endif
#if HAVE_INTTYPES_H
# include <inttypes.h>
#endif
#if HAVE_STDLIB_H
# include <stdlib.h>
#endif
#ifndef PARAMS
# if defined PROTOTYPES || defined __STDC__
# define PARAMS(Args) Args
# else
# define PARAMS(Args) ()
# endif
#endif
#if HAVE_UNSIGNED_LONG_LONG && ! HAVE_STRTOULL
unsigned long long strtoull PARAMS ((char const *, char **, int));
#endif
uintmax_t
strtoumax (char const *ptr, char **endptr, int base)
{
#define USE_IF_EQUIVALENT(function) \
if (sizeof (uintmax_t) == sizeof function (ptr, endptr, base)) \
return function (ptr, endptr, base);
#if HAVE_UNSIGNED_LONG_LONG
USE_IF_EQUIVALENT (strtoull)
#endif
USE_IF_EQUIVALENT (strtoul)
abort ();
}

View File

@@ -54,7 +54,7 @@ utime_null (const char *file)
int status = 0;
struct stat sb;
fd = open (file, O_RDWR, 0666);
fd = open (file, O_RDWR);
if (fd < 0
|| fstat (fd, &sb) < 0
|| safe_read (fd, &c, sizeof (char)) < 0

46
lib/version-etc.c Normal file
View File

@@ -0,0 +1,46 @@
/* Utility to help print --version output in a consistent format.
Copyright (C) 1999 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#if HAVE_CONFIG_H
# include <config.h>
#endif
#include <stdio.h>
#include "version-etc.h"
#if ENABLE_NLS
# include <libintl.h>
# define _(Text) gettext (Text)
#else
# define _(Text) Text
#endif
void
version_etc (FILE *stream,
const char *command_name, const char *package,
const char *version, const char *authors)
{
fprintf (stream, "%s (%s) %s\n", command_name, package, version);
fprintf (stream, _("Written by %s.\n"), authors);
fputs (_("\
\n\
Copyright (C) 1999 Free Software Foundation, Inc.\n\
This is free software; see the source for copying conditions. There is NO\n\
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\
"
), stream);
}

17
lib/version-etc.h Normal file
View File

@@ -0,0 +1,17 @@
#ifndef VERSION_ETC_H
# define VERSION_ETC_H 1
# ifndef PARAMS
# if defined PROTOTYPES || (defined __STDC__ && __STDC__)
# define PARAMS(Args) Args
# else
# define PARAMS(Args) ()
# endif
# endif
void
version_etc PARAMS ((FILE *stream,
const char *command_name, const char *package,
const char *version, const char *authors));
#endif /* VERSION_ETC_H */

View File

@@ -1,5 +1,5 @@
/* xmalloc.c -- malloc with out of memory checking
Copyright (C) 1990-1997, 98 Free Software Foundation, Inc.
Copyright (C) 1990-1997, 98, 99 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -70,7 +70,7 @@ xalloc_fail (void)
{
if (xalloc_fail_func)
(*xalloc_fail_func) ();
error (xalloc_exit_failure, 0, xalloc_msg_memory_exhausted);
error (xalloc_exit_failure, 0, "%s", _(xalloc_msg_memory_exhausted));
}
/* Allocate N bytes of memory dynamically, with error checking. */

View File

@@ -1,5 +1,5 @@
/* xstrtod.c - error-checking interface to strtod
Copyright (C) 1996 Free Software Foundation, Inc.
Copyright (C) 1996, 1999 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -68,4 +68,3 @@ xstrtod (str, ptr, result)
*result = val;
return fail;
}

View File

@@ -1,5 +1,5 @@
/* A more useful interface to strtol.
Copyright (C) 1995, 1996, 1998 Free Software Foundation, Inc.
Copyright 1995, 1996, 1998, 1999 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -21,6 +21,12 @@
# include <config.h>
#endif
#ifndef __strtol
# define __strtol strtol
# define __strtol_t long int
# define __xstrtol xstrtol
#endif
/* Some pre-ANSI implementations (e.g. SunOS 4)
need stderr defined if assertion checking is enabled. */
#include <stdio.h>
@@ -39,6 +45,7 @@
#endif
#include <assert.h>
#include <ctype.h>
#include <errno.h>
#ifndef errno
@@ -61,34 +68,32 @@ extern int errno;
? ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1) : (t) 0))
#define TYPE_MAXIMUM(t) (~ (t) 0 - TYPE_MINIMUM (t))
#ifndef ULONG_MAX
# define ULONG_MAX TYPE_MAXIMUM (unsigned long int)
#endif
#ifndef LONG_MAX
# define LONG_MAX TYPE_MAXIMUM (long int)
#endif
#if defined (STDC_HEADERS) || (!defined (isascii) && !defined (HAVE_ISASCII))
# define IN_CTYPE_DOMAIN(c) 1
#else
# define IN_CTYPE_DOMAIN(c) isascii(c)
#endif
#ifdef isblank
# define ISBLANK(c) (IN_CTYPE_DOMAIN (c) && isblank (c))
#else
# define ISBLANK(c) ((c) == ' ' || (c) == '\t')
#endif
#define ISSPACE(c) (IN_CTYPE_DOMAIN (c) && isspace (c))
#include "xstrtol.h"
__unsigned long int __strtol ();
#ifndef strtol
long int strtol ();
#endif
#ifndef strtoul
unsigned long int strtoul ();
#endif
#ifndef strtoumax
uintmax_t strtoumax ();
#endif
static int
bkm_scale (__unsigned long int *x, int scale_factor)
bkm_scale (__strtol_t *x, int scale_factor)
{
__unsigned long int product = *x * scale_factor;
__strtol_t product = *x * scale_factor;
if (*x != product / scale_factor)
return 1;
*x = product;
@@ -96,7 +101,7 @@ bkm_scale (__unsigned long int *x, int scale_factor)
}
static int
bkm_scale_by_power (__unsigned long int *x, int base, int power)
bkm_scale_by_power (__strtol_t *x, int base, int power)
{
while (power--)
if (bkm_scale (x, base))
@@ -109,27 +114,24 @@ bkm_scale_by_power (__unsigned long int *x, int base, int power)
strtol_error
__xstrtol (const char *s, char **ptr, int strtol_base,
__unsigned long int *val, const char *valid_suffixes)
__strtol_t *val, const char *valid_suffixes)
{
char *t_ptr;
char **p;
__unsigned long int tmp;
__strtol_t tmp;
assert (0 <= strtol_base && strtol_base <= 36);
p = (ptr ? ptr : &t_ptr);
#if STRING_TO_UNSIGNED
{
const char *q = s;
while (ISBLANK (*q))
{
if (! TYPE_SIGNED (__strtol_t))
{
const char *q = s;
while (ISSPACE ((unsigned char) *q))
++q;
}
if (*q == '-')
return LONGINT_INVALID;
}
#endif
if (*q == '-')
return LONGINT_INVALID;
}
errno = 0;
tmp = __strtol (s, p, strtol_base);
@@ -139,8 +141,8 @@ __xstrtol (const char *s, char **ptr, int strtol_base,
return LONGINT_INVALID;
/* Let valid_suffixes == NULL mean `allow any suffix'. */
/* FIXME: update all callers except the one in tail.c changing
last parameter NULL to `""'. */
/* FIXME: update all callers except the ones that allow suffixes
after the number, changing last parameter NULL to `""'. */
if (!valid_suffixes)
{
*val = tmp;
@@ -154,7 +156,10 @@ __xstrtol (const char *s, char **ptr, int strtol_base,
int overflow;
if (!strchr (valid_suffixes, **p))
return LONGINT_INVALID_SUFFIX_CHAR;
{
*val = tmp;
return LONGINT_INVALID_SUFFIX_CHAR;
}
if (strchr (valid_suffixes, '0'))
{
@@ -227,6 +232,7 @@ __xstrtol (const char *s, char **ptr, int strtol_base,
break;
default:
*val = tmp;
return LONGINT_INVALID_SUFFIX_CHAR;
break;
}
@@ -258,7 +264,7 @@ main (int argc, char** argv)
for (i=1; i<argc; i++)
{
char *p;
__unsigned long int val;
__strtol_t val;
s_err = __xstrtol (argv[i], &p, 0, &val, "bckmw");
if (s_err == LONGINT_OK)

View File

@@ -1,14 +1,8 @@
#ifndef XSTRTOL_H_
# define XSTRTOL_H_ 1
# if STRING_TO_UNSIGNED
# define __xstrtol xstrtoul
# define __strtol strtoul
# define __unsigned unsigned
# else
# define __xstrtol xstrtol
# define __strtol strtol
# define __unsigned /* empty */
# if HAVE_INTTYPES_H
# include <inttypes.h> /* for uintmax_t */
# endif
# ifndef PARAMS
@@ -27,11 +21,14 @@ enum strtol_error
typedef enum strtol_error strtol_error;
# endif
strtol_error
__xstrtol PARAMS ((const char *s, char **ptr, int base,
__unsigned long int *val, const char *valid_suffixes));
# define _DECLARE_XSTRTOL(name, type) \
strtol_error \
name PARAMS ((const char *s, char **ptr, int base, \
type *val, const char *valid_suffixes));
_DECLARE_XSTRTOL (xstrtol, long int)
_DECLARE_XSTRTOL (xstrtoul, unsigned long int)
_DECLARE_XSTRTOL (xstrtoumax, uintmax_t)
# undef _STRTOL_ERROR
# define _STRTOL_ERROR(Exit_code, Str, Argument_type_string, Err) \
do \
{ \
@@ -51,8 +48,7 @@ strtol_error
break; \
\
case LONGINT_OVERFLOW: \
/* FIXME: make this message dependent on STRING_TO_UNSIGNED */\
error ((Exit_code), 0, "%s `%s' larger than maximum long int",\
error ((Exit_code), 0, "%s `%s' too large", \
(Argument_type_string), (Str)); \
break; \
} \

View File

@@ -1,2 +1,4 @@
#define STRING_TO_UNSIGNED 1
#define __strtol strtoul
#define __strtol_t unsigned long int
#define __xstrtol xstrtoul
#include "xstrtol.c"

View File

@@ -1,13 +0,0 @@
#ifndef XSTRTOUL_H_
# define XSTRTOUL_H_ 1
# define STRING_TO_UNSIGNED 1
/* Undefine this symbol so we can include xstrtol.h a second time.
Otherwise, a program that wanted both xstrtol.h and xstrtoul.h
would never get the declaration corresponding to the header file
included after the first one. */
# undef XSTRTOL_H_
# include "xstrtol.h"
#endif /* not XSTRTOUL_H_ */

31
lib/xstrtoumax.c Normal file
View File

@@ -0,0 +1,31 @@
/* xstrtoumax.c -- A more useful interface to strtoumax.
Copyright 1999 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
/* Written by Paul Eggert. */
#if HAVE_CONFIG_H
# include <config.h>
#endif
#if HAVE_INTTYPES_H
# include <inttypes.h>
#endif
#define __strtol strtoumax
#define __strtol_t uintmax_t
#define __xstrtol xstrtoumax
#include "xstrtol.c"

View File

@@ -1,9 +1,166 @@
1999-08-05 Jim Meyering <meyering@ascend.com>
* getline.m4: Rename test file from conftestdata to conftest.data
to avoid conflicts with `conftest' on 8+3 filesystems.
Suggestion from Eli Zaretskii.
1999-08-04 Jim Meyering <meyering@ascend.com>
* jm-macros.m4: Move a 4-line block of code from the configure.in of
fileutils and sh-utils (textutils's getline test was inadequate).
(AM_FUNC_GETLINE): Run this test.
(AC_CHECK_FUNCS): Check for getdelim.
Reported by Bob Proulx.
1999-08-02 Jim Meyering <meyering@ascend.com>
* jm-macros.m4: Add a comment.
1999-08-01 Jim Meyering <meyering@ascend.com>
* mktime.m4 (AC_FUNC_MKTIME): Undefine to avoid syntax errors from m4.
1999-08-01 Paul Eggert <eggert@twinsun.com>
* lfs.m4: Remove this file.
* largefile.m4: New file. It contains the old contents of
lfs.m4, except that all names with prefix AC_LFS have been
changed to use the prefix AC_SYS_LARGEFILE instead, to be
compatible with future autoconf versions. Also, some minor m4
quoting problems have been fixed.
1999-07-16 Paul Eggert <eggert@twinsun.com>
* ulonglong.m4 (jm_AC_TYPE_UNSIGNED_LONG_LONG): Make sure
that we can shift, multiply and divide unsigned long long
values; Ultrix cc can't do it.
1999-07-14 Paul Eggert <eggert@twinsun.com>
* xstrtoumax.m4 (jm_AC_PREREQ_XSTRTOUMAX): Check whether
<inttypes.h> defines strtoumax as a macro (and not as a
function).
1999-07-05 Paul Eggert <eggert@twinsun.com>
* gettext.m4 (AM_WITH_NLS): Remove unnecessary lines.
Fix typo: $nls_cv_header_intl was misspelled as $nsl_cv_header_intl.
(AM_GNU_GETTEXT): Fix problem with brackets and m4 quoting,
and simplify the shell code.
1999-07-03 Paul Eggert <eggert@twinsun.com>
* mktime.m4: New file, which is a preview of what should appear
in the next public autoconf release.
1999-07-20 Jim Meyering <meyering@ascend.com>
* jm-macros.m4 (AC_REPLACE_FUNCS): Add memmove.
1999-07-15 Jim Meyering <meyering@ascend.com>
* jm-macros.m4: (AC_CHECK_FUNCS): Check for getpagesize.
1999-05-22 Jim Meyering <meyering@ascend.com>
* jm-macros.m4 (AC_REPLACE_FUNCS): Add memchr.
1999-05-20 Jim Meyering <meyering@ascend.com>
* search-libs.m4 [AC_SEARCH_LIBS]: Quote name in undefine.
Add a colon after each `then' in case $4 is empty.
1999-05-16 Jim Meyering <meyering@ascend.com>
* search-libs.m4: New file to override autoconf's AC_SEARCH_LIBS.
1999-05-10 Jim Meyering <meyering@ascend.com>
* jm-mktime.m4: Reflect renaming: AM_FUNC_MKTIME -> AC_FUNC_MKTIME.
* jm-macros.m4: Require 2.14.1, since we use newly-renamed
AC_FUNC_MKTIME.
1999-05-10 Andreas Schwab <schwab@issan.cs.uni-dortmund.de>
* jm-mktime.m4, putenv.m4: Fix typos in config.h comments.
1999-05-04 Paul Eggert <eggert@twinsun.com>
* lfs.m4 (AC_LFS): -n32, -o32, and -n64 should be in CFLAGS,
not CPPFLAGS, so that linking works correctly in IRIX.
1999-04-30 Paul Eggert <eggert@twinsun.com>
* jm-macros.m4 (AC_REPLACE_FUNCS): Add dup2.
1999-04-20 Jim Meyering <meyering@ascend.com>
* xstrtoumax.m4: Require jm_AC_TYPE_UNSIGNED_LONG_LONG.
AC_REPLACE xstroull if necessary. From Paul Eggert.
(AC_CHECK_FUNCS): Remove strtoull, strtoumax, strtouq.
1999-04-20 Paul Eggert <eggert@twinsun.com>
* uintmax_t.m4 (jm_AC_TYPE_UINTMAX_T): Move unsigned long
long check into new jm_AC_TYPE_UNSIGNED_LONG_LONG macro.
* jm-macros.m4 (jm_CHECK_ALL_TYPES): Require
jm_AC_TYPE_UNSIGNED_LONG_LONG.
* ulonglong.m4 (jm_AC_TYPE_UNSIGNED_LONG_LONG): New file/macro.
* lfs.m4: Port to AIX and HP-UX. Support cross-compilation.
1999-04-18 Jim Meyering <meyering@ascend.com>
* xstrtoumax.m4 (jm_AC_PREREQ_XSTRTOUMAX): New file/macro.
* jm-macros.m4: Use it.
1999-04-06 Jim Meyering <meyering@ascend.com>
* strftime.m4: Remove test for %f.
1999-03-29 Jim Meyering <meyering@ascend.com>
* jm-macros.m4 (jm_CHECK_ALL_TYPES): New macro, contains the
superset of the AC_TYPE_* checks in the textutils, fileutils,
and sh-utils, plus AC_TYPE_PID_T. Paul Eggert suggested adding
AC_TYPE_PID_T.
1999-03-28 Jim Meyering <meyering@ascend.com>
* jm-macros.m4: Define GNU_PACKAGE here.
Be sure to AC_SUBST it, once again, so that @GNU_PACKAGE@ is
replaced e.g., in the *.sh files of the sh-utils.
1999-03-20 Jim Meyering <meyering@ascend.com>
* jm-macros.m4: s/jm_WITH_REGEX/jm_INCLUDED_REGEX/.
* regex.m4 (jm_INCLUDED_REGEX): Rename from jm_WITH_REGEX.
Don't depend on AM_GLIBC. Suggestions from Alain Magloire.
1999-03-19 Jim Meyering <meyering@ascend.com>
* jm-winsz1.m4 (jm_WINSIZE_IN_PTEM): New macro.
1999-03-12 Jim Meyering <meyering@ascend.com>
* jm-macros.m4: Use AC_FUNC_SETVBUF_REVERSED.
1999-03-07 Jim Meyering <meyering@ascend.com>
* jm-glibc-io.m4: Use only those *_unlocked macros that are declared.
1999-02-17 Jim Meyering <meyering@ascend.com>
* gettext.m4 (AM_GNU_GETTEXT): Do `changequote' around use of brackets
in macro definition. From Eli Zaretskii and Alain Magloire.
1999-02-07 Jim Meyering <meyering@ascend.com>
* group-member.m4: New file -- extracted from sh-utils' configure.in.
1999-02-05 Eli Zaretskii <eliz@is.elta.co.il>
* m4/gettext.m4: Support DOS-style d:/foo/bar absolute file names.
* gettext.m4: Support DOS-style d:/foo/bar absolute file names.
1999-02-06 Jim Meyering <meyering@ascend.com>
@@ -352,7 +509,7 @@
Add lseek and memchr.
* decl.m4: s/HAVE_DECLARATION_/HAVE_DECL_/g.
T.E.Dickey <dickey@clark.net> said that some older preprocessors
T.E.Dickey <dickey@clark.net> said that some older preprocessors
have a 20-character limit on names.
1997-11-30 Jim Meyering <meyering@na-net.ornl.gov>

View File

@@ -27,13 +27,14 @@ jm-macros.m4 \
jm-mktime.m4 \
jm-winsz1.m4 \
jm-winsz2.m4 \
largefile.m4 \
lchown.m4 \
lcmessage.m4 \
lfs.m4 \
ls-mntd-fs.m4 \
lstat.m4 \
malloc.m4 \
memcmp.m4 \
mktime.m4 \
perl.m4 \
prereq.m4 \
progtest.m4 \
@@ -41,15 +42,18 @@ putenv.m4 \
readdir.m4 \
realloc.m4 \
regex.m4 \
search-libs.m4 \
st_dm_mode.m4 \
st_mtim.m4 \
stat.m4 \
strftime.m4 \
uintmax_t.m4 \
ulonglong.m4 \
uptime.m4 \
utimbuf.m4 \
utime.m4 \
utimes.m4
utimes.m4 \
xstrtoumax.m4
##m4-files-end
Makefile.am: Makefile.am.in

View File

@@ -10,7 +10,6 @@
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
SHELL = @SHELL@
srcdir = @srcdir@
@@ -46,9 +45,10 @@ AUTOMAKE = @AUTOMAKE@
AUTOHEADER = @AUTOHEADER@
INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_FLAG =
transform = @program_transform_name@
NORMAL_INSTALL = :
@@ -57,15 +57,21 @@ POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
host_alias = @host_alias@
host_triplet = @host@
AMTAR = @AMTAR@
AMTARFLAGS = @AMTARFLAGS@
CATALOGS = @CATALOGS@
CATOBJEXT = @CATOBJEXT@
CC = @CC@
CPP = @CPP@
DATADIRNAME = @DATADIRNAME@
GENCAT = @GENCAT@
GETCONF = @GETCONF@
GETLOADAVG_LIBS = @GETLOADAVG_LIBS@
GMOFILES = @GMOFILES@
GMSGFMT = @GMSGFMT@
GNU_PACKAGE = @GNU_PACKAGE@
GT_NO = @GT_NO@
GT_YES = @GT_YES@
INCLUDE_LOCALE_H = @INCLUDE_LOCALE_H@
@@ -98,17 +104,71 @@ VERSION = @VERSION@
YACC = @YACC@
l = @l@
EXTRA_DIST = README Makefile.am.in afs.m4 assert.m4 check-decl.m4 check-type.m4 chown.m4 const.m4 d-ino.m4 d-type.m4 decl.m4 error.m4 fnmatch.m4 fstypename.m4 getgroups.m4 getline.m4 getloadavg.m4 gettext.m4 glibc.m4 group-member.m4 inttypes_h.m4 isc-posix.m4 jm-glibc-io.m4 jm-macros.m4 jm-mktime.m4 jm-winsz1.m4 jm-winsz2.m4 lchown.m4 lcmessage.m4 lfs.m4 ls-mntd-fs.m4 lstat.m4 malloc.m4 memcmp.m4 perl.m4 prereq.m4 progtest.m4 putenv.m4 readdir.m4 realloc.m4 regex.m4 st_dm_mode.m4 st_mtim.m4 stat.m4 strftime.m4 uintmax_t.m4 uptime.m4 utimbuf.m4 utime.m4 utimes.m4
EXTRA_DIST = README Makefile.am.in \
afs.m4 \
assert.m4 \
check-decl.m4 \
check-type.m4 \
chown.m4 \
const.m4 \
d-ino.m4 \
d-type.m4 \
decl.m4 \
error.m4 \
fnmatch.m4 \
fstypename.m4 \
getgroups.m4 \
getline.m4 \
getloadavg.m4 \
gettext.m4 \
glibc.m4 \
group-member.m4 \
inttypes_h.m4 \
isc-posix.m4 \
jm-glibc-io.m4 \
jm-macros.m4 \
jm-mktime.m4 \
jm-winsz1.m4 \
jm-winsz2.m4 \
largefile.m4 \
lchown.m4 \
lcmessage.m4 \
ls-mntd-fs.m4 \
lstat.m4 \
malloc.m4 \
memcmp.m4 \
mktime.m4 \
perl.m4 \
prereq.m4 \
progtest.m4 \
putenv.m4 \
readdir.m4 \
realloc.m4 \
regex.m4 \
search-libs.m4 \
st_dm_mode.m4 \
st_mtim.m4 \
stat.m4 \
strftime.m4 \
uintmax_t.m4 \
ulonglong.m4 \
uptime.m4 \
utimbuf.m4 \
utime.m4 \
utimes.m4 \
xstrtoumax.m4
subdir = m4
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = ../config.h
CONFIG_CLEAN_FILES =
DIST_SOURCES =
DIST_COMMON = README ChangeLog Makefile.am Makefile.in
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
TAR = gtar
GZIP_ENV = --best
all: all-redirect
.SUFFIXES:
@@ -125,8 +185,6 @@ TAGS:
distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
subdir = m4
distdir: $(DISTFILES)
here=`cd $(top_builddir) && pwd`; \
top_distdir=`cd $(top_distdir) && pwd`; \
@@ -136,13 +194,14 @@ distdir: $(DISTFILES)
@for file in $(DISTFILES); do \
d=$(srcdir); \
if test -d $$d/$$file; then \
cp -pr $$/$$file $(distdir)/$$file; \
cp -pr $$d/$$file $(distdir)/$$file; \
else \
test -f $(distdir)/$$file \
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \
|| cp -p $$d/$$file $(distdir)/$$file || :; \
fi; \
done
info-am:
info: info-am
dvi-am:
@@ -165,7 +224,7 @@ uninstall: uninstall-am
all-am: Makefile
all-redirect: all-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
$(MAKE) $(AM_MAKEFLAGS) INSTALL_STRIP_FLAG=-s install
installdirs:
@@ -199,7 +258,7 @@ maintainer-clean: maintainer-clean-am
.PHONY: tags distdir info-am info dvi-am dvi check check-am \
installcheck-am installcheck install-exec-am install-exec \
install-data-am install-data install-am install uninstall-am uninstall \
all-redirect all-am all installdirs mostlyclean-generic \
all-redirect all-am all install-strip installdirs mostlyclean-generic \
distclean-generic clean-generic maintainer-clean-generic clean \
mostlyclean distclean maintainer-clean

View File

@@ -14,7 +14,7 @@ AC_DEFUN(AM_FUNC_GETLINE,
if test $am_getline_needs_run_time_check = yes; then
AC_CHECK_HEADERS(string.h)
AC_CACHE_CHECK([for working getline function], am_cv_func_working_getline,
[echo fooN |tr -d '\012'|tr N '\012' > conftestdata
[echo fooN |tr -d '\012'|tr N '\012' > conftest.data
AC_TRY_RUN([
# include <stdio.h>
# include <sys/types.h>
@@ -26,7 +26,7 @@ AC_DEFUN(AM_FUNC_GETLINE,
char *line = NULL;
size_t siz = 0;
int len;
FILE *in = fopen ("./conftestdata", "r");
FILE *in = fopen ("./conftest.data", "r");
if (!in)
return 1;
len = getline (&line, &siz, in);

View File

@@ -6,7 +6,7 @@
# but which still want to provide support for the GNU gettext functionality.
# Please note that the actual code is *not* freely available.
# serial 106
# serial 107
AC_PREREQ(2.13) dnl Minimum Autoconf version required.
@@ -48,21 +48,11 @@ AC_DEFUN(AM_WITH_NLS,
if test "$gt_cv_func_gettext_libc" != "yes"; then
AC_CHECK_LIB(intl, bindtextdomain,
[AC_CACHE_CHECK([for gettext in libintl],
gt_cv_func_gettext_libintl,
[AC_CHECK_LIB(intl, gettext,
gt_cv_func_gettext_libintl=yes,
gt_cv_func_gettext_libintl=no)],
gt_cv_func_gettext_libintl=no)])
if test "$gt_cv_func_gettext_libintl" = yes; then
LIBS="$LIBS -lintl"
fi
[AC_CHECK_LIB(intl, gettext)])
fi
if test "$gt_cv_func_gettext_libc" = "yes" \
|| test "$gt_cv_func_gettext_libintl" = "yes"; then
|| test "$ac_cv_lib_intl_gettext" = "yes"; then
AC_DEFINE(HAVE_GETTEXT, 1,
[Define to 1 if you have gettext and don't want to use GNU gettext.])
AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
@@ -166,7 +156,7 @@ AC_DEFUN(AM_WITH_NLS,
nls_cv_header_intl=intl/libintl.h
nls_cv_header_libgt=intl/libgettext.h
fi
if test -z "$nsl_cv_header_intl"; then
if test -z "$nls_cv_header_intl"; then
# Clean out junk possibly left behind by a previous configuration.
rm -f intl/libintl.h
fi
@@ -313,15 +303,16 @@ strdup __argz_count __argz_stringify __argz_next])
dnl Generate list of files to be processed by xgettext which will
dnl be included in po/Makefile.
test -d po || mkdir po
if test "x$srcdir" != "x."; then
if test "x`echo $srcdir | sed -e 's@^[A-z]:@@' -e 's@/.*@@'`" = "x"; then
posrcprefix="$srcdir/"
else
posrcprefix="../$srcdir/"
fi
else
posrcprefix="../"
fi
changequote(, )dnl
case "$srcdir" in
.)
posrcprefix="../" ;;
/* | [A-Za-z]:*)
posrcprefix="$srcdir/" ;;
*)
posrcprefix="../$srcdir/" ;;
esac
changequote([, ])dnl
rm -f po/POTFILES
sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \
< $srcdir/po/POTFILES.in > po/POTFILES

View File

@@ -1,23 +1,28 @@
#serial 1
#serial 2
dnl From Jim Meyering.
dnl
dnl See if the glibc *_unlocked I/O macros are available.
dnl Use only those *_unlocked macros that are declared.
dnl
AC_DEFUN(jm_FUNC_GLIBC_UNLOCKED_IO,
[AC_CHECK_FUNCS( \
clearerr_unlocked \
feof_unlocked \
ferror_unlocked \
fflush_unlocked \
fputc_unlocked \
fread_unlocked \
fwrite_unlocked \
getc_unlocked \
getchar_unlocked \
putc_unlocked \
putchar_unlocked \
)
[
io_functions='clearerr_unlocked feof_unlocked ferror_unlocked
fflush_unlocked fputc_unlocked fread_unlocked fwrite_unlocked
getc_unlocked getchar_unlocked putc_unlocked putchar_unlocked'
for jm_io_func in $io_functions; do
# Check for the existence of each function only if its declared.
# Otherwise, we'd get the Solaris5.5.1 functions that are not
# declared, and that have been removed from Solaris5.6. The resulting
# 5.5.1 binaries would not run on 5.6 due to shared library differences.
jm_CHECK_DECLARATIONS([#include <stdio.h>
], $jm_io_func,
jm_declared=yes,
jm_declared=no)
if test $jm_declared = yes; then
AC_CHECK_FUNCS($jm_io_func)
fi
done
]
)

View File

@@ -1,20 +1,23 @@
#serial 6
#serial 7
dnl Misc type-related macros for fileutils, sh-utils, textutils.
AC_DEFUN(jm_MACROS,
[
AC_PREREQ(2.13) dnl Minimum Autoconf version required.
AC_PREREQ(2.14.1) dnl Minimum Autoconf version required.
GNU_PACKAGE="GNU $PACKAGE"
AC_DEFINE_UNQUOTED(GNU_PACKAGE, "$GNU_PACKAGE",
[The concatenation of the strings \`GNU ', and PACKAGE.])
AC_SUBST(GNU_PACKAGE)
dnl This macro actually runs replacement code. See isc-posix.m4.
AC_REQUIRE([AC_ISC_POSIX])dnl
jm_WITH_REGEX([lib/regex.c])
jm_INCLUDED_REGEX([lib/regex.c])
AC_REQUIRE([jm_ASSERT])
AC_REQUIRE([jm_AC_HEADER_INTTYPES_H])
AC_REQUIRE([jm_AC_TYPE_UINTMAX_T])
AC_CHECK_TYPE(ssize_t, int)
AC_REQUIRE([jm_STRUCT_UTIMBUF])
AC_REQUIRE([jm_STRUCT_DIRENT_D_TYPE])
AC_REQUIRE([jm_STRUCT_DIRENT_D_INO])
@@ -34,11 +37,42 @@ AC_DEFUN(jm_MACROS,
AC_REQUIRE([jm_FUNC_GLIBC_UNLOCKED_IO])
AC_REQUIRE([jm_FUNC_FNMATCH])
AC_REQUIRE([jm_AFS])
AC_REQUIRE([jm_AC_PREREQ_XSTRTOUMAX])
AC_REPLACE_FUNCS(strcasecmp strncasecmp)
AC_REPLACE_FUNCS(dup2)
AC_REPLACE_FUNCS(memchr)
AC_REPLACE_FUNCS(memmove)
AC_CHECK_FUNCS(getpagesize)
# By default, argmatch should fail calling usage (1).
AC_DEFINE(ARGMATCH_DIE, [usage (1)],
[Define to the function xargmatch calls on failures.])
AC_DEFINE(ARGMATCH_DIE_DECL, [extern void usage ()],
[Define to the declaration of the xargmatch failure function.])
dnl Used to define SETVBUF in sys2.h.
dnl This evokes the following warning from autoconf:
dnl ...: warning: AC_TRY_RUN called without default to allow cross compiling
AC_FUNC_SETVBUF_REVERSED
AM_FUNC_GETLINE
if test $am_cv_func_working_getline != yes; then
AC_CHECK_FUNCS(getdelim)
fi
])
AC_DEFUN(jm_CHECK_ALL_TYPES,
[
AC_TYPE_GETGROUPS
AC_TYPE_MODE_T
AC_TYPE_OFF_T
AC_TYPE_PID_T
AC_TYPE_SIGNAL
AC_TYPE_SIZE_T
AC_TYPE_UID_T
AC_CHECK_TYPE(ino_t, unsigned long)
AC_CHECK_TYPE(ssize_t, int)
AC_REQUIRE([jm_AC_TYPE_UINTMAX_T])
AC_REQUIRE([jm_AC_TYPE_UNSIGNED_LONG_LONG])
])

View File

@@ -1,16 +1,16 @@
#serial 5
#serial 7
dnl From Jim Meyering.
dnl A wrapper around AM_FUNC_MKTIME.
dnl A wrapper around AC_FUNC_MKTIME.
AC_DEFUN(jm_FUNC_MKTIME,
[AC_REQUIRE([AM_FUNC_MKTIME])dnl
[AC_REQUIRE([AC_FUNC_MKTIME])dnl
dnl mktime.c uses localtime_r if it exists. Check for it.
AC_CHECK_FUNCS(localtime_r)
if test $am_cv_func_working_mktime = no; then
if test $ac_cv_func_working_mktime = no; then
AC_DEFINE_UNQUOTED(mktime, rpl_mktime,
[Define to gnu_mktime if the replacement function should be used.])
[Define to rpl_mktime if the replacement function should be used.])
fi
])

View File

@@ -1,5 +1,5 @@
dnl From Jim Meyering.
#serial 1
#serial 2
AC_DEFUN(jm_HEADER_TIOCGWINSZ_IN_TERMIOS_H,
[AC_REQUIRE([AM_SYS_POSIX_TERMIOS])
AC_CACHE_CHECK([whether use of TIOCGWINSZ requires termios.h],
@@ -17,3 +17,10 @@ AC_DEFUN(jm_HEADER_TIOCGWINSZ_IN_TERMIOS_H,
fi
])
])
AC_DEFUN(jm_WINSIZE_IN_PTEM,
[AC_CHECK_HEADER([sys/ptem.h],
AC_DEFINE(WINSIZE_IN_PTEM, 1,
[Define if your system defines \`struct winsize' in sys/ptem.h.]))
]
)

115
m4/largefile.m4 Normal file
View File

@@ -0,0 +1,115 @@
#serial 4
dnl By default, many hosts won't let programs access large files;
dnl one must use special compiler options to get large-file access to work.
dnl For more details about this brain damage please see:
dnl http://www.sas.com/standards/large.file/x_open.20Mar96.html
dnl Written by Paul Eggert <eggert@twinsun.com>.
dnl Internal subroutine of AC_SYS_LARGEFILE.
dnl AC_SYS_LARGEFILE_FLAGS(FLAGSNAME)
AC_DEFUN(AC_SYS_LARGEFILE_FLAGS,
[AC_CACHE_CHECK([for $1 value to request large file support],
ac_cv_sys_largefile_$1,
[ac_cv_sys_largefile_$1=`($GETCONF LFS_$1) 2>/dev/null` || {
ac_cv_sys_largefile_$1=no
ifelse($1, CFLAGS,
[case "$host_os" in
# IRIX 6.2 and later require cc -n32.
changequote(, )dnl
irix6.[2-9]* | irix6.1[0-9]* | irix[7-9].* | irix[1-9][0-9]*)
changequote([, ])dnl
if test "$GCC" != yes; then
ac_cv_sys_largefile_CFLAGS=-n32
fi
ac_save_CC="$CC"
CC="$CC $ac_cv_sys_largefile_CFLAGS"
AC_TRY_LINK(, , , ac_cv_sys_largefile_CFLAGS=no)
CC="$ac_save_CC"
esac])
}])])
dnl Internal subroutine of AC_SYS_LARGEFILE.
dnl AC_SYS_LARGEFILE_SPACE_APPEND(VAR, VAL)
AC_DEFUN(AC_SYS_LARGEFILE_SPACE_APPEND,
[case $2 in
no) ;;
?*)
case "[$]$1" in
'') $1=$2 ;;
*) $1=[$]$1' '$2 ;;
esac ;;
esac])
dnl Internal subroutine of AC_SYS_LARGEFILE.
dnl AC_SYS_LARGEFILE_MACRO_VALUE(C-MACRO, CACHE-VAR, COMMENT, CODE-TO-SET-DEFAULT)
AC_DEFUN(AC_SYS_LARGEFILE_MACRO_VALUE,
[AC_CACHE_CHECK([for $1], $2,
[$2=no
changequote(, )dnl
$4
for ac_flag in $ac_cv_sys_largefile_CFLAGS no; do
case "$ac_flag" in
-D$1)
$2=1 ;;
-D$1=*)
$2=`expr " $ac_flag" : '[^=]*=\(.*\)'` ;;
esac
done
changequote([, ])dnl
])
if test "[$]$2" != no; then
AC_DEFINE_UNQUOTED([$1], [$]$2, [$3])
fi])
AC_DEFUN(AC_SYS_LARGEFILE,
[AC_REQUIRE([AC_CANONICAL_HOST])
AC_ARG_ENABLE(largefile,
[ --disable-largefile omit support for large files])
if test "$enable_largefile" != no; then
AC_CHECK_TOOL(GETCONF, getconf)
AC_SYS_LARGEFILE_FLAGS(CFLAGS)
AC_SYS_LARGEFILE_FLAGS(LDFLAGS)
AC_SYS_LARGEFILE_FLAGS(LIBS)
for ac_flag in $ac_cv_sys_largefile_CFLAGS no; do
case "$ac_flag" in
no) ;;
-D_FILE_OFFSET_BITS=*) ;;
-D_LARGEFILE_SOURCE | -D_LARGEFILE_SOURCE=*) ;;
-D_LARGE_FILES | -D_LARGE_FILES=*) ;;
-D?* | -I?*)
AC_SYS_LARGEFILE_SPACE_APPEND(CPPFLAGS, "$ac_flag") ;;
*)
AC_SYS_LARGEFILE_SPACE_APPEND(CFLAGS, "$ac_flag") ;;
esac
done
AC_SYS_LARGEFILE_SPACE_APPEND(LDFLAGS, "$ac_cv_sys_largefile_LDFLAGS")
AC_SYS_LARGEFILE_SPACE_APPEND(LIBS, "$ac_cv_sys_largefile_LIBS")
AC_SYS_LARGEFILE_MACRO_VALUE(_FILE_OFFSET_BITS,
ac_cv_sys_file_offset_bits,
[Number of bits in a file offset, on hosts where this is settable.]
[case "$host_os" in
# HP-UX 10.20 and later
hpux10.[2-9][0-9]* | hpux1[1-9]* | hpux[2-9][0-9]*)
ac_cv_sys_file_offset_bits=64 ;;
esac])
AC_SYS_LARGEFILE_MACRO_VALUE(_LARGEFILE_SOURCE,
ac_cv_sys_largefile_source,
[Define to make fseeko etc. visible, on some hosts.],
[case "$host_os" in
# HP-UX 10.20 and later
hpux10.[2-9][0-9]* | hpux1[1-9]* | hpux[2-9][0-9]*)
ac_cv_sys_largefile_source=1 ;;
esac])
AC_SYS_LARGEFILE_MACRO_VALUE(_LARGE_FILES,
ac_cv_sys_large_files,
[Define for large files, on AIX-style hosts.],
[case "$host_os" in
# AIX 4.2 and later
aix4.[2-9]* | aix4.1[0-9]* | aix[5-9].* | aix[1-9][0-9]*)
ac_cv_sys_large_files=1 ;;
esac])
fi
])

View File

@@ -1,57 +0,0 @@
#serial 2
dnl The problem is that the default compilation flags in Solaris 2.6 won't
dnl let programs access large files; you need to tell the compiler that
dnl you actually want your programs to work on large files. For more
dnl details about this brain damage please see:
dnl http://www.sas.com/standards/large.file/x_open.20Mar96.html
dnl Written by Paul Eggert <eggert@twinsun.com>.
AC_DEFUN(AC_LFS,
[dnl
# If available, prefer support for large files unless the user specified
# one of the CPPFLAGS, LDFLAGS, or LIBS variables.
AC_MSG_CHECKING(whether large file support needs explicit enabling)
ac_getconfs=''
ac_result=yes
ac_set=''
ac_shellvars='CPPFLAGS LDFLAGS LIBS'
for ac_shellvar in $ac_shellvars; do
case $ac_shellvar in
CPPFLAGS) ac_lfsvar=LFS_CFLAGS ;;
*) ac_lfsvar=LFS_$ac_shellvar ;;
esac
eval test '"${'$ac_shellvar'+set}"' = set && ac_set=$ac_shellvar
(getconf $ac_lfsvar) >/dev/null 2>&1 || { ac_result=no; break; }
ac_getconf=`getconf $ac_lfsvar`
ac_getconfs=$ac_getconfs$ac_getconf
eval ac_test_$ac_shellvar=\$ac_getconf
done
case "$ac_result" in
no)
case "`(uname -s -r) 2>/dev/null`" in
HP-UX' '?.10.[[2-9]][[0-9]]* | HP-UX' '?.1[[1-9]]* | HP-UX' '?.[[2-9]][[0-9]]*)
# HP-UX 10.20 and later support large files,
# but do not support `getconf LFS_CFLAGS'.
ac_test_CPPFLAGS='-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
ac_test_LDFLAGS=
ac_test_LIBS=
ac_getconfs=nonempty
ac_result=yes ;;
esac ;;
esac
case "$ac_result$ac_getconfs" in
yes) ac_result=no ;;
esac
case "$ac_result$ac_set" in
yes?*) ac_result="yes, but $ac_set is already set, so use its settings"
esac
AC_MSG_RESULT($ac_result)
case $ac_result in
yes)
for ac_shellvar in $ac_shellvars; do
eval $ac_shellvar=\$ac_test_$ac_shellvar
done ;;
esac
])

170
m4/mktime.m4 Normal file
View File

@@ -0,0 +1,170 @@
#serial 1000
dnl From Paul Eggert
dnl Check for a working mktime.
dnl This is a preview of what should appear in the next public autoconf release.
dnl Override any existing definition.
undefine([AC_FUNC_MKTIME])
AC_DEFUN(AC_FUNC_MKTIME,
[AC_REQUIRE([AC_HEADER_TIME])dnl
AC_CHECK_HEADERS(sys/time.h unistd.h)
AC_CHECK_FUNCS(alarm)
AC_CACHE_CHECK([for working mktime], ac_cv_func_working_mktime,
[AC_TRY_RUN(
changequote(<<, >>)dnl
<</* Test program from Paul Eggert (eggert@twinsun.com)
and Tony Leneis (tony@plaza.ds.adp.com). */
#if TIME_WITH_SYS_TIME
# include <sys/time.h>
# include <time.h>
#else
# if HAVE_SYS_TIME_H
# include <sys/time.h>
# else
# include <time.h>
# endif
#endif
#if HAVE_UNISTD_H
# include <unistd.h>
#endif
#if !HAVE_ALARM
# define alarm(X) /* empty */
#endif
/* Work around redefinition to rpl_putenv by other config tests. */
#undef putenv
static time_t time_t_max;
/* Values we'll use to set the TZ environment variable. */
static const char *const tz_strings[] = {
(const char *) 0, "TZ=GMT0", "TZ=JST-9",
"TZ=EST+3EDT+2,M10.1.0/00:00:00,M2.3.0/00:00:00"
};
#define N_STRINGS (sizeof (tz_strings) / sizeof (tz_strings[0]))
/* Fail if mktime fails to convert a date in the spring-forward gap.
Based on a problem report from Andreas Jaeger. */
static void
spring_forward_gap ()
{
/* glibc (up to about 1998-10-07) failed this test) */
struct tm tm;
/* Use the portable POSIX.1 specification "TZ=PST8PDT,M4.1.0,M10.5.0"
instead of "TZ=America/Vancouver" in order to detect the bug even
on systems that don't support the Olson extension, or don't have the
full zoneinfo tables installed. */
putenv ("TZ=PST8PDT,M4.1.0,M10.5.0");
tm.tm_year = 98;
tm.tm_mon = 3;
tm.tm_mday = 5;
tm.tm_hour = 2;
tm.tm_min = 0;
tm.tm_sec = 0;
tm.tm_isdst = -1;
if (mktime (&tm) == (time_t)-1)
exit (1);
}
static void
mktime_test (now)
time_t now;
{
struct tm *lt;
if ((lt = localtime (&now)) && mktime (lt) != now)
exit (1);
now = time_t_max - now;
if ((lt = localtime (&now)) && mktime (lt) != now)
exit (1);
}
static void
irix_6_4_bug ()
{
/* Based on code from Ariel Faigon. */
struct tm tm;
tm.tm_year = 96;
tm.tm_mon = 3;
tm.tm_mday = 0;
tm.tm_hour = 0;
tm.tm_min = 0;
tm.tm_sec = 0;
tm.tm_isdst = -1;
mktime (&tm);
if (tm.tm_mon != 2 || tm.tm_mday != 31)
exit (1);
}
static void
bigtime_test (j)
int j;
{
struct tm tm;
time_t now;
tm.tm_year = tm.tm_mon = tm.tm_mday = tm.tm_hour = tm.tm_min = tm.tm_sec = j;
now = mktime (&tm);
if (now != (time_t) -1)
{
struct tm *lt = localtime (&now);
if (! (lt
&& lt->tm_year == tm.tm_year
&& lt->tm_mon == tm.tm_mon
&& lt->tm_mday == tm.tm_mday
&& lt->tm_hour == tm.tm_hour
&& lt->tm_min == tm.tm_min
&& lt->tm_sec == tm.tm_sec
&& lt->tm_yday == tm.tm_yday
&& lt->tm_wday == tm.tm_wday
&& ((lt->tm_isdst < 0 ? -1 : 0 < lt->tm_isdst)
== (tm.tm_isdst < 0 ? -1 : 0 < tm.tm_isdst))))
exit (1);
}
}
int
main ()
{
time_t t, delta;
int i, j;
/* This test makes some buggy mktime implementations loop.
Give up after 60 seconds; a mktime slower than that
isn't worth using anyway. */
alarm (60);
for (time_t_max = 1; 0 < time_t_max; time_t_max *= 2)
continue;
time_t_max--;
delta = time_t_max / 997; /* a suitable prime number */
for (i = 0; i < N_STRINGS; i++)
{
if (tz_strings[i])
putenv (tz_strings[i]);
for (t = 0; t <= time_t_max - delta; t += delta)
mktime_test (t);
mktime_test ((time_t) 60 * 60);
mktime_test ((time_t) 60 * 60 * 24);
for (j = 1; 0 < j; j *= 2)
bigtime_test (j);
bigtime_test (j - 1);
}
irix_6_4_bug ();
spring_forward_gap ();
exit (0);
}
>>,
changequote([, ])dnl
ac_cv_func_working_mktime=yes, ac_cv_func_working_mktime=no,
ac_cv_func_working_mktime=no)])
if test $ac_cv_func_working_mktime = no; then
LIBOBJS="$LIBOBJS mktime.${ac_objext}"
fi
])

View File

@@ -1,4 +1,4 @@
#serial 2
#serial 3
dnl From Jim Meyering.
dnl
@@ -36,6 +36,6 @@ AC_DEFUN(jm_FUNC_PUTENV,
AC_SUBST(LIBOBJS)
LIBOBJS="$LIBOBJS putenv.$ac_objext"
AC_DEFINE_UNQUOTED(putenv, rpl_putenv,
[Define to rpl_memcmp if the replacement function should be used.])
[Define to rpl_putenv if the replacement function should be used.])
fi
])

View File

@@ -1,54 +1,51 @@
#serial 4
#serial 5
dnl Initially derived from code in GNU grep.
dnl Mostly written by Jim Meyering.
AC_DEFUN(jm_WITH_REGEX,
dnl Usage: jm_INCLUDED_REGEX([lib/regex.c])
dnl
AC_DEFUN(jm_INCLUDED_REGEX,
[
AC_REQUIRE([AM_GLIBC])
dnl Even packages that don't use regex.c can use this macro.
dnl Of course, for them it doesn't do anything.
# By default, don't use the included regex.c on systems with a version
# of glibc 2 that's new enough to pass the following run test.
# If cross compiling, assume the test would fail and use the included
# regex.c. The failing regular expression is from `Spencer ere test
# #75' in grep-2.2f.
# Assume we'll default to using the included regex.c.
ac_use_included_regex=yes
if test "$ac_cv_glibc" = yes; then
# Without this run-test, on older glibc2 systems we'd end up
# using the buggy system regex.
AC_CACHE_CHECK([for working re_compile_pattern],
jm_cv_func_working_re_compile_pattern,
AC_TRY_RUN(
changequote(<<, >>)dnl
<<
# However, if the system regex support is good enough that it passes the
# the following run test, then default to *not* using the included regex.c.
# If cross compiling, assume the test would fail and use the included
# regex.c. The failing regular expression is from `Spencer ere test #75'
# in grep-2.3.
AC_CACHE_CHECK([for working re_compile_pattern],
jm_cv_func_working_re_compile_pattern,
AC_TRY_RUN(
changequote(<<, >>)dnl
<<
#include <stdio.h>
#include <regex.h>
int
main ()
{
static struct re_pattern_buffer regex;
const char *s;
re_set_syntax (RE_SYNTAX_POSIX_EGREP);
/* Add this third left square bracket, [, to balance the
three right ones below. Otherwise autoconf-2.14 chokes. */
s = re_compile_pattern ("a[[:]:]]b\n", 9, &regex);
/* This should fail with _Invalid character class name_ error. */
exit (s ? 0 : 1);
}
>>,
changequote([, ])dnl
int
main ()
{
static struct re_pattern_buffer regex;
const char *s;
re_set_syntax (RE_SYNTAX_POSIX_EGREP);
/* Add this third left square bracket, [, to balance the
three right ones below. Otherwise autoconf-2.14 chokes. */
s = re_compile_pattern ("a[[:]:]]b\n", 9, &regex);
/* This should fail with _Invalid character class name_ error. */
exit (s ? 0 : 1);
}
>>,
changequote([, ])dnl
jm_cv_func_working_re_compile_pattern=yes,
jm_cv_func_working_re_compile_pattern=no,
dnl When crosscompiling, assume it's broken.
jm_cv_func_working_re_compile_pattern=no))
if test $jm_cv_func_working_re_compile_pattern = yes; then
ac_use_included_regex=no
fi
jm_cv_func_working_re_compile_pattern=yes,
jm_cv_func_working_re_compile_pattern=no,
dnl When crosscompiling, assume it's broken.
jm_cv_func_working_re_compile_pattern=no))
if test $jm_cv_func_working_re_compile_pattern = yes; then
ac_use_included_regex=no
fi
test -n "$1" || AC_MSG_ERROR([missing argument])

44
m4/search-libs.m4 Normal file
View File

@@ -0,0 +1,44 @@
#serial 2
dnl A replacement for autoconf's macro by the same name. This version
dnl uses `ac_lib' rather than `i' for the loop variable, but more importantly
dnl moves the ACTION-IF-FOUND ($3) into the inner `if'-block so that it is
dnl run only if one of the listed libraries ends up being used (and not in
dnl the `none required' case.
dnl I hope it's only temporary while we wait for that version to be fixed.
undefine([AC_SEARCH_LIBS])
dnl AC_SEARCH_LIBS(FUNCTION, SEARCH-LIBS [, ACTION-IF-FOUND
dnl [, ACTION-IF-NOT-FOUND [, OTHER-LIBRARIES]]])
dnl Search for a library defining FUNC, if it's not already available.
AC_DEFUN(AC_SEARCH_LIBS,
[
AC_PREREQ([2.13])
AC_CACHE_CHECK([for library containing $1], [ac_cv_search_$1],
[
ac_func_search_save_LIBS="$LIBS"
ac_cv_search_$1="no"
AC_TRY_LINK_FUNC([$1], [ac_cv_search_$1="none required"])
if test "$ac_cv_search_$1" = "no"; then
for ac_lib in $2; do
LIBS="-l$ac_lib $5 $ac_func_search_save_LIBS"
AC_TRY_LINK_FUNC([$1],
[ac_cv_search_$1="-l$ac_lib"
break])
done
fi
LIBS="$ac_func_search_save_LIBS"
])
if test "$ac_cv_search_$1" = "no"; then :
$4
else
if test "$ac_cv_search_$1" = "none required"; then :
$4
else
LIBS="$ac_cv_search_$1 $LIBS"
$3
fi
fi
])

View File

@@ -104,7 +104,6 @@ main ()
CMP ("%^c", "FRI JAN 9 13:06:07 1970");
CMP ("%d", "09");
CMP ("%e", " 9"); /* POSIX.2 */
CMP ("%f", "5"); /* POSIX.2 */
CMP ("%g", "70"); /* GNU */
CMP ("%h", "Jan"); /* POSIX.2 */
CMP ("%^h", "JAN");

View File

@@ -1,4 +1,4 @@
#serial 2
#serial 3
dnl From Paul Eggert.
@@ -11,11 +11,7 @@ AC_DEFUN(jm_AC_TYPE_UINTMAX_T,
[
AC_REQUIRE([jm_AC_HEADER_INTTYPES_H])
if test $jm_ac_cv_header_inttypes_h = no; then
AC_CACHE_CHECK([for unsigned long long], ac_cv_type_unsigned_long_long,
[AC_TRY_COMPILE([],
[unsigned long long i = (unsigned long long) -1;],
ac_cv_type_unsigned_long_long=yes,
ac_cv_type_unsigned_long_long=no)])
AC_REQUIRE([jm_AC_TYPE_UNSIGNED_LONG_LONG])
test $ac_cv_type_unsigned_long_long = yes \
&& ac_type='unsigned long long' \
|| ac_type='unsigned long'

17
m4/ulonglong.m4 Normal file
View File

@@ -0,0 +1,17 @@
#serial 2
dnl From Paul Eggert.
AC_DEFUN(jm_AC_TYPE_UNSIGNED_LONG_LONG,
[
AC_CACHE_CHECK([for unsigned long long], ac_cv_type_unsigned_long_long,
[AC_TRY_LINK([unsigned long long ull = 1; int i = 63;],
[unsigned long long ullmax = (unsigned long long) -1;
return ull << i | ull >> i | ullmax / ull | ullmax % ull;],
ac_cv_type_unsigned_long_long=yes,
ac_cv_type_unsigned_long_long=no)])
if test $ac_cv_type_unsigned_long_long = yes; then
AC_DEFINE(HAVE_UNSIGNED_LONG_LONG, 1,
[Define if you have the unsigned long long type.])
fi
])

34
m4/xstrtoumax.m4 Normal file
View File

@@ -0,0 +1,34 @@
#serial 2
# autoconf tests required for use of xstrtoumax.c
AC_DEFUN(jm_AC_PREREQ_XSTRTOUMAX,
[
AC_REQUIRE([jm_AC_HEADER_INTTYPES_H])
AC_REQUIRE([jm_AC_TYPE_UNSIGNED_LONG_LONG])
AC_CHECK_HEADERS(stdlib.h)
AC_CACHE_CHECK([whether <inttypes.h> defines strtoumax as a macro],
jm_cv_func_strtoumax_macro,
AC_EGREP_CPP([inttypes_h_defines_strtoumax], [#include <inttypes.h>
#ifdef strtoumax
inttypes_h_defines_strtoumax
#endif],
jm_cv_func_strtoumax_macro=yes,
jm_cv_func_strtoumax_macro=no))
if test "$jm_cv_func_strtoumax_macro" != yes; then
AC_REPLACE_FUNCS(strtoumax)
fi
dnl We don't need (and can't compile) the replacement strtoull
dnl unless the type `unsigned long long' exists.
dnl Also, only the replacement strtoumax invokes strtoull,
dnl so we need the replacement strtoull only if strtoumax does not exist.
case "$ac_cv_type_unsigned_long_long,$jm_cv_func_strtoumax_macro,$ac_cv_func_strtoumax" in
yes,no,no)
AC_REPLACE_FUNCS(strtoull)
;;
esac
])

View File

@@ -1,7 +1,7 @@
#!/usr/bin/perl -w
#!/sw/tools/bin/perl -w
# Generate a short man page from --help and --version output.
# Copyright © 1997, 98 Free Software Foundation, Inc.
# Copyright © 1997, 98, 99 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -22,14 +22,15 @@
use 5.004;
use strict;
use Getopt::Long;
use Text::Tabs qw(expand);
use POSIX qw(strftime setlocale LC_TIME);
my $this_program = 'help2man';
my $this_version = '1.007';
my $this_version = '1.012';
my $version_info = <<EOT;
$this_program $this_version
Copyright (C) 1997, 98 Free Software Foundation, Inc.
Copyright (C) 1997, 98, 99 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
@@ -41,28 +42,32 @@ my $help_info = <<EOT;
Usage: $this_program [OPTION]... EXECUTABLE
--name=STRING use `STRING' as the description for the NAME paragraph
--include=FILE include material from `FILE'
--opt-include=FILE include material from `FILE' if it exists
--output=FILE send output to `FILE'
--no-info suppress pointer to Texinfo manual
--help print this help, then exit
--version print $this_program program version number, then exit
-n, --name=STRING use `STRING' as the description for the NAME paragraph
-s, --section=SECTION use `SECTION' as the section for the man page
-i, --include=FILE include material from `FILE'
-I, --opt-include=FILE include material from `FILE' if it exists
-o, --output=FILE send output to `FILE'
-N, --no-info suppress pointer to Texinfo manual
--help print this help, then exit
--version print $this_program program version number, then exit
EXECUTABLE should accept `--help' and `version' options.
EXECUTABLE should accept `--help' and `--version' options.
EOT
my $section = 1;
my ($include, $opt_name, $opt_include, $opt_output, $opt_no_info);
# Parse options.
Getopt::Long::config('bundling');
GetOptions (
'name=s' => \$opt_name,
'include=s' => \$include,
'opt-include=s' => \$opt_include,
'output=s' => \$opt_output,
'no-info' => \$opt_no_info,
help => sub { print $help_info; exit },
version => sub { print $version_info; exit },
'n|name=s' => \$opt_name,
's|section=s' => \$section,
'i|include=s' => \$include,
'I|opt-include=s' => \$opt_include,
'o|output=s' => \$opt_output,
'N|no-info' => \$opt_no_info,
help => sub { print $help_info; exit },
version => sub { print $version_info; exit },
) or die $help_info;
die $help_info unless @ARGV == 1;
@@ -124,11 +129,14 @@ if ($include or $opt_include)
# Turn off localisation of date (for strftime)
setlocale LC_TIME, 'C';
# Expand tabs, strip trailing spaces and break into paragraphs
sub paragraphs { split /\n\n+/, join '', expand @_ }
# Grab help and version paragraphs from executable
my @help = split /\n\n+/, `$ARGV[0] --help 2>/dev/null`
my @help = paragraphs `$ARGV[0] --help 2>/dev/null`
or die "$this_program: can't get `--help' info from $ARGV[0]\n";
my @version = split /\n\n+/, `$ARGV[0] --version 2>/dev/null`
my @version = paragraphs `$ARGV[0] --version 2>/dev/null`
or die "$this_program: can't get `--version' info from $ARGV[0]\n";
my $date = strftime "%B %Y", localtime;
@@ -159,14 +167,14 @@ if ($opt_output)
$_ = shift @version;
if (/^(\S+)\s+\(((?:GNU|Free)\s+[^)]+)\)\s+(.*)/ or
/^(\S+)\s+-\s*((?:GNU|Free)\s+\S+)\s+(.*)/)
if (/^(\S+) +\(((?:GNU|Free) +[^)]+)\) +(.*)/ or
/^(\S+) +- *((?:GNU|Free) +\S+) +(.*)/)
{
$program = $1;
$package = $2;
$version = $3;
}
elsif (/^((?:GNU|Free)\s+)?(\S+)\s+(.*)/)
elsif (/^((?:GNU|Free) +)?(\S+) +(.*)/)
{
$program = $2;
$package = $1 ? "$1$2" : $2;
@@ -194,11 +202,12 @@ my $PROGRAM = uc $program;
# Header.
print <<EOT;
.\\" DO NOT MODIFY THIS FILE! It was generated by $this_program $this_version.
.TH $PROGRAM 1 "$date" "$package $version" "FSF"
.TH $PROGRAM "$section" "$date" "$package $version" FSF
.SH NAME
$include{NAME}
EOT
my $break;
my $accumulate = 1;
my @description = ();
@@ -209,7 +218,7 @@ for (@help)
{
chomp;
if (s/^Usage:\s+\S+\s+(.*)\n?//)
if (s/^Usage: +\S+ +(.*)\n?//)
{
# Turn the usage clause into a synopsis.
my $synopsis = '';
@@ -219,13 +228,13 @@ for (@help)
$syn =~ s/(([][]|\.\.+)+)/\\fR$1\\fI/g;
$syn =~ s/^/\\fI/ unless $syn =~ s/^\\fR//;
$syn .= '\fR';
$syn =~ s/\\fI(\s*)\\fR/$1/g;
$syn =~ s/\\fI( *)\\fR/$1/g;
$synopsis .= ".br\n" unless $accumulate;
$synopsis .= ".B $program\n";
$synopsis .= "$syn\n";
$accumulate = 0;
} while s/^(?:Usage|\s*or):\s+\S+\s+(.*)\n?//;
} while s/^(?:Usage| *or): +\S+ +(.*)\n?//;
# Include file overrides SYNOPSIS.
print ".SH SYNOPSIS\n", $include{SYNOPSIS} || $synopsis;
@@ -241,6 +250,7 @@ for (@help)
print $include{DESCRIPTION};
}
$break = 1;
next unless $_;
}
@@ -252,55 +262,68 @@ for (@help)
next;
}
# Catch start of options.
if (/^Options:/)
# Convert some standard paragraph names
if (s/^(Options|Examples): *\n//)
{
print qq(.SH OPTIONS\n);
s/Options://;
print qq(.SH \U$1\n);
$break = '';
next unless length;
}
# Catch bug report text.
if (/^Report bugs |^Email bug reports to /)
{
print qq(.SH "REPORTING BUGS"\n$_\n);
$break = '';
next;
}
# Special case for tar 1.12: --label=NAME\nPATTERN.
s{(\n[ \t]*)(-V,[ \t]+--label=NAME.*)\n[ \t]+PATTERN[ \t]+}
{$1$2$1\\&...=PATTERN };
# Option subsections have second line indented.
if (s/^(\S.*)\n / /)
{
print qq(.SS "$1"\n);
$break = '';
}
my $output = '';
while (length)
{
my $indent = 0;
# Tagged paragraph
if (s/^( +(\S.*?) +)(\S.*)\n?//)
{
$indent = length $1;
$output .= ".TP\n$2\n$3\n";
$break = 1;
}
# Indented paragraph
elsif (s/^( +)(\S.*)\n?//)
{
$indent = length $1;
$output .= ".IP\n$2\n";
$break = 1;
}
# Left justified paragraph
else
{
s/(.*)\n?//;
$output .= ".PP\n" if $break;
$output .= "$1\n";
$break = 1;
}
# Continuations
$output .= "$1\n" while s/^ {$indent}(\S.*)\n?//;
}
$_ = $output;
# Convert options.
s/(\s)(-[][\w=-]+|\\&\S+)/$1 . convert_option $2/ge;
# Option subsections have second line indented.
print qq(.SS "$1"\n) if s/^(\S.*)\n(\s)/$2/;
# Lines indented more than about 10 spaces may be assumed to be
# continuations of the previous line.
s/\n {10,}/ /g;
# Lines following dotted (*) or numbered points may also be
# continued if indented to the same level as the text following
# the point.
1 while s{((?:^|\n)(\s+)(?:[1-9][.)]|\*)(\s+)(?:[^\n]+))\n\2 \3(\S)}
{$1 $4}g;
# Indented paragraph.
if (/^\s/)
{
for (split /\n/)
{
s/^\s+//;
s/([^,])\s+/$1\n/;
print ".TP\n$_\n" if $_;
}
}
# Anything else.
else
{
print ".PP\n$_\n";
}
s/(^| )(-[][\w=-]+)/$1 . convert_option $2/mge;
print;
}
# Print any include items other than the ones we have already dealt
@@ -341,16 +364,16 @@ for (@version)
s/([A-Za-z])-\n */$1/g;
# Convert copyright symbol or (c) to nroff character.
s/Copyright\s+(?:\xa9|\([Cc]\))/Copyright \\(co/g;
s/Copyright +(?:\xa9|\([Cc]\))/Copyright \\(co/g;
# Insert appropriate headings for copyright and author.
if (/^Copyright\s\\/) { print ".SH COPYRIGHT\n" }
elsif (/^Written\s+by/) { print ".SH AUTHOR\n" }
else { print ".PP\n"; }
if (/^Copyright \\/) { print ".SH COPYRIGHT\n" }
elsif (/^Written +by/) { print ".SH AUTHOR\n" }
else { print ".PP\n"; }
# Insert line breaks before additional copyright messages and the
# disclaimer.
s/(.)\n(Copyright\s|This is free software)/$1\n.br\n$2/g;
s/(.)\n(Copyright |This is free software)/$1\n.br\n$2/g;
print "$_\n";
}

2
man/pinky.x Normal file
View File

@@ -0,0 +1,2 @@
[DESCRIPTION]
.\" Add any additional description here

File diff suppressed because it is too large Load Diff

View File

@@ -1,4 +1,37 @@
Changes in release 4.1:
[4.0i]
* `cp -f FILE FILE' and `mv -f FILE FILE' no longer remove FILE
* touch works once again (DST-wise) when certain `--date DATE-TIME'
values are specified.
* shred's -u option (short form of --remove) is now accepted
[4.0h]
* cp --one-file-system (-x) no longer crosses filesystem boundaries.
* touch can once again operate on directories
[4.0g]
* New large-file support for AIX and HP-UX, and for cross-compiles.
* shred's default options are now suitable for devices, not files, since
shred is more reliable on devices. shred now does not remove by default;
the old -p or --preserve option was inverted and renamed to -u or --remove.
* shred -u now attempts to truncate devices before removing them.
* shred -v no longer outputs carriage-returns; shred -vv has no extra effect;
shred -v now outputs to stderr.
* shred now tries to find the size of a non-regular file by seeking to its end.
* dd now opens the output file for *read* access only if `seek=' is used.
[4.0f]
* `ls --color' no longer segfaults
* dd works once again
[4.0e]
* shred --devices option renamed to -D so that -d, -i and -r can be
compatible with rm.
* shred -s/--size=N option added to specify the size of the object to be
shredded.
* `shred -' now shreds stdout rather than stdin. This is incompatible with -v.
* shred now does not need to read from its output file, so opens it O_WRONLY
* `ls -l' uses `+' to designate each file that has a custom ACL
* eliminate race condition that could make touch truncate a nonempty file
* No longer use *_unlocked I/O macros on systems (like solaris5.5.1) where
they're not declared, so selected executables (e.g., rm) that are linked
with shared libraries will once again run on solaris5.6 systems.
[4.0d (aka 4.1-b3)]
* ls recognizes solaris 2 `doors'
* new program: shred

View File

@@ -1,5 +1,455 @@
1999-08-14 Jim Meyering <meyering@ascend.com>
* Version 2.0.
* tests/stty/basic-1: Fail-77 if stdin is not a tty.
* tests/stty/row-col-1: Likewise.
1999-08-07 Jim Meyering <meyering@ascend.com>
* Version 1.16m.
* Makefile.maint (po-check): New rule.
(alpha): Make it.
* po/POTFILES.in: Add the following from lib/: argmatch.c, closeout.c,
error.c, getopt.c, human.c, long-options.c, version-etc.c, xmalloc.c.
Add these from src/: false.c, hostid.c, true.c.
* lib/getdate.y (OtherTable[]): Use tDAY_UNIT for `tomorrow,'
`yesterday,' `today,' and `now' rather than tMINUTE_UNIT. Of course
with correspondingly smaller numbers for tomorrow and yesterday.
This change does not change the way the code works, since the
grammar rules for the two symbols are analogous.
From Tadayoshi Funaba.
1999-08-04 Jim Meyering <meyering@ascend.com>
false and true once again generate --help and --version output
* src/true.c: Honor --help and --version once again, bug ignore
those options when POSIXLY_CORRECT is set.
* src/false.c: Fail even for --help and --version.
* src/Makefile.am (false.c): Generate automatically from true.c.
(BUILT_SOURCES): Add false.c.
* man/Makefile.am (EXTRA_DIST): Remove false.1in and true.1in.
* man/Makefile.summ: Remove the rules added on 1999-07-31.
* man/Makefile.maint: Likewise.
* man/true.1in: Removed.
* man/false.1in: Removed.
* configure.in: Remove getline-testing code. Now it's in m4/.
1999-08-01 Jim Meyering <meyering@ascend.com>
* src/date.c (usage): Correct description of %S; (00..60, not 00..61).
From Ken Pizzini.
1999-08-01 Paul Eggert <eggert@twinsun.com>
* configure.in (AC_SYS_LARGEFILE): Renamed from AC_LFS.
1999-07-31 Jim Meyering <meyering@ascend.com>
* Version 1.16l.
false and true are now C programs rather than shell scripts
* src/true.c: New file.
* src/false.c: New file.
* src/true.sh: Removed.
* src/false.sh: Removed.
* src/Makefile.am: (bin_PROGRAMS): Add true and false.
(bin_SCRIPTS): Remove true and false.
(EXTRA_DIST): Remove false.sh and true.sh.
* man/true.1in: New file.
* man/false.1in: New file.
* man/Makefile.am (EXTRA_DIST): Remove extra (shadowed) assignment.
(EXTRA_DIST): Add false.1in and true.1in.
* man/Makefile.maint (helpful-men): Define.
* man/Makefile.summ ($(helpless-men)): New manual-generating rules to
accommodate the fact that false and true no longer accept --help.
* doc/sh-utils.texi: Include a couple of sentences from the
truefalse package.
Prompted by Christi Alice Scarborough's truefalse package.
1999-07-30 Jim Meyering <meyering@ascend.com>
* configure.in (ALL_LINGUAS): Add Brazilian Portuguese (pt_BR).
1999-07-26 Jim Meyering <meyering@ascend.com>
* src/tee.c (tee): Convert from open/fds to using fopen/streams for
output, in preparation for addition of new compression option.
1999-07-21 Jim Meyering <meyering@ascend.com>
* tests/stty/basic-1 (options): Avoid Solaris' broken /usr/ucb/tr by
removing offending use of tr altogether and removing hyphens with sed.
Reported by Kaveh Ghazi.
1999-06-01 Volker Borchert <bt@teknon.de>
* tests/Makefile.am: Make envvar-check depend on check-recursive rather
than on `check' so that its tests are performed before any real tests.
1999-07-15 Jim Meyering <meyering@ascend.com>
* src/false.sh: Always exit unsuccessfully, even with
--help and --version. Suggested by Felix Lee.
1999-07-12 Jim Meyering <meyering@ascend.com>
* src/sys2.h (mempcpy): Define only if not already defined.
Reported by Collin Rogowski.
1999-05-27 Volker Borchert <bt@teknon.de>
* tests/Makefile.am: Qualify .env-warn with $(srcdir)/ prefix.
1999-05-25 Jim Meyering <meyering@ascend.com>
* tests/stty/basic-1: Fix non-portable use of `tr' that caused
this test to fail when run with a SysV-style tr.
Based on a patch from Kaveh Ghazi.
1999-05-21 Jim Meyering <meyering@ascend.com>
* Version 1.16k.
* configuration fixes: see m4/ChangeLog.
1999-05-16 Jim Meyering <meyering@ascend.com>
* Version 1.16j.
* configure.in (AC_SEARCH_LIBS): Set LIB_CRYPT to $ac_cv_search_crypt,
to go along with the new macro in m4/search-libs.m4.
1999-05-14 Jim Meyering <meyering@ascend.com>
* lib/getugroups.c (getugroups): Don't dereference a null pointer when
running `id USER' for some USER that is listed on the RHS in /etc/group.
From Sander van Malssen.
Add some curly braces, use STREQ, reverse the sense of a test
and use `continue' to save a level of nesting.
* tests/Makefile.am (envvar-check): Renamed from check-local.
(check): Depend on envvar-check so the envvar check is performed
before all other tests. Reported by Volker Borchert.
* tests/.env-warn: Use `%%' place-holder that Makefile.am rule expects,
so CDPATH is mentioned in the message. Reported by Volker Borchert.
1999-05-10 Jim Meyering <meyering@ascend.com>
* src/uptime.c (AUTHORS): add Kaveh.
Expand each `&' character in the gecos field.
* src/pinky.c (count_ampersands): New function.
(create_fullname): New function.
(print_entry): Use create_fullname here.
(print_long_entry): Use it here, too.
From Kaveh Ghazi.
1999-05-09 Jim Meyering <meyering@ascend.com>
* lib/regex.c: Update from libc.
* Version 1.16i.
* configure.in: Clean up checks for libraries so that we don't add
-lshadow unless necessary. Reported by Joseph S. Myers.
1999-05-05 Jim Meyering <meyering@ascend.com>
Add definitions to help read utmpx on systems with utmpname.
* lib/readutmp.h (UTMP_NAME_FUNCTION): Define.
(SET_UTMP_ENT): Likewise.
(GET_UTMP_ENT): Likewise.
(END_UTMP_ENT): Likewise.
* lib/readutmp.c (read_utmp): Use the new definitions.
From Kaveh Ghazi.
* src/date.c (show_date): Change an automatic aggregate initializer
to be a static one. For SunOS4's cc. From Kaveh Ghazi.
1999-05-03 Jim Meyering <meyering@ascend.com>
* configure.in: Remove duplicate use of jm_FUNC_GNU_STRFTIME.
Kaveh Ghazi reported that strftime.o was listed twice in the command
to build libsu.a.
1999-05-02 Jim Meyering <meyering@ascend.com>
* Version 1.16h.
* src/hostname.c (main): Give a better diagnostic when we fail to
set the hostname.
* man/Makefile.summ (hostid-summary): Use correct description.
Reported by Joseph S. Myers.
* lib/readutmp.c (read_utmp): Ignore the return value from utmpname.
1999-04-30 Jim Meyering <meyering@ascend.com>
* src/dirname.c (main): Manually handle `--', since we no longer
call getopt. Reported by Joseph S. Myers.
* src/basename.c (main): Likewise.
* src/factor.c (main): Likewise.
1999-04-25 Jim Meyering <meyering@ascend.com>
* src/seq.c (main): Handle the case in which seq is given no args.
Reported by John Gotts.
(main): Revert last change.
Instead, loop on `optind < argc' to protect use of argv[optind].
* lib/human.c <inttypes.h>: Don't include it here.
* lib/human.h <inttypes.h>: Include it here instead.
<config.h>: Include it here too.
Reported by Andreas Jaeger.
* src/nice.c [NDEBUG]: Remove definition.
Reported by Andreas Jaeger.
1999-04-24 Jim Meyering <meyering@ascend.com>
* src/who.c (print_entry): Use `#if', not `#ifdef HAVE_UT_HOST'.
* Version 1.16g.
* configure.in: Use AC_CANONICAL_HOST.
1999-04-20 Jim Meyering <meyering@ascend.com>
Update factor to use `uintmax_t'.
* src/factor.c <xstrtol.h>: Include this, not xstrtoul.h.
<human.h>: Include.
Use uintmax_t in place of unsigned long.
Use human_readable to convert to strings for printing.
* lib/xstrtoumax.c: New file.
* lib/human.c: New file.
* lib/human.h: New file.
* lib/Makefile.am (libsu_a_SOURCES): Add human.c and xstrtoumax.c.
(noinst_HEADERS): Add human.h. Remove xstrtoul.h.
1999-04-19 Jim Meyering <meyering@ascend.com>
* src/seq.c (main): Restore `+' in getopt_long string. Otherwise,
commands like `seq 10 -2 0' wouldn't work. From Andreas Schwab.
* tests/seq/basic: Add tests for that.
1999-04-17 Jim Meyering <meyering@ascend.com>
* tests/seq: New directory and basic tests.
* tests/Makefile.am (SUBDIRS): Add seq.
* configure.in (AC_OUTPUT): Add tests/seq/Makefile.
1999-04-17 Andreas Schwab <schwab@issan.cs.uni-dortmund.de>
* configure.in: Check for localeconv.
* src/seq.c (decimal_point): New variable.
(main): Set it to locale's decimal point. Fix recognition of
negative number as argument.
(get_width_format): Correctly handle a negative min_val or step
when computing fraction width. Use decimal_point.
1999-04-08 Jim Meyering <meyering@ascend.com>
1999-03-25 James R. Van Zandt <jrv@vanzandt.mv.com>
* doc/sh-utils.texi (Options for date): Document --iso-8601
* src/date.c: Accept new option: --iso-8601.
* lib/Makefile.am (libsu_a_SOURCES): Add argmatch.c and quotearg.c.
(noinst_HEADERS): Add argmatch.h and quotearg.h.
* lib/argmatch.c: New file.
* lib/argmatch.h: New file.
* lib/quotearg.c: New file.
* lib/quotearg.h: New file.
1999-03-30 Jim Meyering <meyering@ascend.com>
* src/sys2.h: Include "closeout.h" and "version-etc.h"
* src/*.c (PROGRAM_NAME, AUTHORS): Define and use.
* src/date.c: No longer include long-options.h.
[long_options]: Add entries for --help and --version.
Remove parse_long_options call.
(main) [getopt switch]: Add a case for each of --help and --version.
* src/env.c: Likewise.
* src/id.c: Likewise.
* src/pinky.c: Likewise.
* src/seq.c: Likewise.
* src/su.c: Likewise.
* src/sys2.h: Likewise.
* src/tee.c: Likewise.
* src/tty.c: Likewise.
* src/uname.c: Likewise.
* src/who.c: Likewise.
1999-03-29 Jim Meyering <meyering@ascend.com>
* configure.in (GNU_PACKAGE): Remove related code -- now it's in
the catch-all for shared autoconf code, m4/jm-macros.m4.
(jm_CHECK_ALL_TYPES): Remove explicit AC_TYPE_* macros and use
this instead.
1999-03-28 Jim Meyering <meyering@ascend.com>
* src/test.c (PROGRAM_NAME): Rename from COMMAND_NAME.
1999-03-28 Paul Eggert <eggert@twinsun.com>
* lib/getdate.y (get_date): Reuse tm_isdst of first localtime
call; this is an improvement on a bug fix suggested by
martin@dresden.nacamar.de. Do not assume that localtime and
gmtime return non-null.
1999-03-27 Jim Meyering <meyering@ascend.com>
* src/false.sh (usage): Change `[OPTION]...' to `[OPTION]' to show
that only one of --help or --version is recognized at a time.
Reported by Meelis Roos.
* src/true.sh: Likewise.
* src/id.c (print_user): Use uid_t instead of int.
(print_group): Use gid_t instead of int.
From John Bley.
1999-03-26 Jim Meyering <meyering@ascend.com>
* lib/Makefile.am (libfu_a_SOURCES): Add version-etc.c.
(noinst_HEADERS): Add version-etc.h.
1999-03-20 Jim Meyering <meyering@ascend.com>
* src/nohup.sh: Don't modify PATH just to get GNU nice. Instead,
try to find an absolute path for GNU nice. From Bruno Haible.
1999-03-19 Jim Meyering <meyering@ascend.com>
* configure.in: Use new macro, jm_WINSIZE_IN_PTEM, instead of
open-coding it.
1999-03-17 Jim Meyering <meyering@ascend.com>
* configure.in (ALL_LINGUAS): Add Italian (it) and Slovak (sk).
1999-03-13 Jim Meyering <meyering@ascend.com>
* lib/basename.c (base_name): If NAME is all slashes, return `/' (in
conformance with the single unix spec). Reported by Peter Moulder.
1999-03-10 Jim Meyering <meyering@ascend.com>
* src/uptime.c: Declare getloadavg so I can build with -Werror.
* tests/stty/basic-1: Skip failing tests: parenb, -parenb, -cread.
* lib/canon-host.c (canon_host): Don't use he->h_addr directly.
Based on a patch from Savochkin Andrey Vladimirovich.
1999-03-09 Jim Meyering <meyering@ascend.com>
Running `id USER' doesn't report any groups if there is no entry
for USER in /etc/group. Always include the one from /etc/passwd.
* src/id.c: (xgetgroups): Take new parameter, gid, and pass
it to getugroups.
(print_group_list): Call getpwuid and adjust calls to xgetgroups
to include new parameter.
* lib/getugroups.c (getugroups): Take new parameter, gid.
Add gid to the list of groups.
From Ulrich Drepper.
* lib/getgroups.c (getgroups): Protoize.
1999-03-08 Jim Meyering <meyering@ascend.com>
* tests/basename: New directory and tests.
* tests/Makefile.am (SUBDIRS): Add basename.
* configure.in (AC_OUTPUT): Add tests/basename/Makefile.
1999-03-06 Jim Meyering <meyering@ascend.com>
* src/date.c (batch_convert): Use a `%s' format in error call,
in case the argument string contains a `%'.
* man/Makefile.am (man_MANS): Add pinky.1.
* man/Makefile.summ (pinky-summary): Define.
* src/date.c: Include long-options.h.
[long_options]: Remove the "help" and "version" entries.
Remove declarations of show_help and show_version.
(main): Use parse_long_options, including author name(s).
Remove the show_version and show_help blocks.
* src/env.c: Likewise.
* src/id.c: Likewise.
* src/logname.c: Likewise.
* src/pathchk.c: Likewise.
* src/pinky.c: Likewise.
* src/printenv.c: Likewise.
* src/seq.c: Likewise.
* src/sleep.c: Likewise.
* src/su.c: Likewise.
* src/tee.c: Likewise.
* src/tty.c: Likewise.
* src/uname.c: Likewise.
* src/uptime.c: Likewise.
* src/users.c: Likewise.
* src/who.c: Likewise.
* src/whoami.c: Likewise.
1999-03-04 Jim Meyering <meyering@ascend.com>
* src/basename.c (main): Include author name argument in call to
parse_long_options.
* src/chroot.c: Likewise.
* src/dirname.c: Likewise.
* src/echo.c: Likewise.
* src/expr.c: Likewise.
* src/factor.c: Likewise.
* src/hostid.c: Likewise.
* src/hostname.c: Likewise.
* src/nice.c: Likewise.
* src/printf.c: Likewise.
* src/pwd.c: Likewise.
* src/stty.c: Likewise.
* src/test.c: Likewise.
* src/yes.c: Likewise.
1999-03-02 Jim Meyering <meyering@ascend.com>
* lib/readutmp.c (read_utmp) [HAVE_UTMPNAME]: Rewrite.
1999-02-15 Jim Meyering <meyering@ascend.com>
* src/stty.c (main): #ifdef-out unreachable code.
* src/pinky.c (usage): Add a one-line description.
Suggestion from Karl Berry.
1999-02-08 Jim Meyering <meyering@ascend.com>
* configure.in (ALL_LINGUAS): Add Czech (cs).
1999-02-07 Jim Meyering <meyering@ascend.com>
* tests/stty/basic-1: Run all tests even if some fail.
Don't use trap.
* tests/stty/basic-1: Use `stty', not $STTY.
Fix typo in VERBOSE code: s/\$RM/stty/.
* tests/stty/row-col-1: Likewise.
* tests/stty/Makefile.am (TESTS_ENVIRONMENT): Set PATH, not STTY.
Include stdio.h before defining `_unlocked' macros.
* src/pinky.c: Include stdio.h.
* src/uptime.c: Likewise.
* src/users.c: Likewise.
* src/who.c: Likewise.
* lib/readutmp.c: Include stdio.h here...
* lib/readutmp.h: ...not here.
From Ulrich Drepper.
* Version 1.16f.
* Makefile.maint (my-distcheck): Don't depend on dist, now that this
@@ -167,7 +617,7 @@
1998-08-29 Jim Meyering <meyering@ascend.com>
* src/su.c (longopts): Use corresponding short-option character
in place of `1', and `NULL' in place of pointer in initialization.
in place of `1', and `NULL' in place of pointer in initialization.
1998-08-11 Jim Meyering <meyering@ascend.com>
@@ -369,8 +819,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.
* acconfig.h: Add lstat.
* lib/Makefile.am (EXTRA_DIST): Add lstat.c and stat.c.
@@ -384,7 +834,7 @@
* src/id.c (xgetgroups): Guard function defn with #if HAVE_GETGROUPS.
* lib/putenv.c (sys/types.h): Include to get size_t on some systems.
(NULL): Define if needed.
(NULL): Define if needed.
1998-01-31 Jim Meyering <meyering@na-net.ornl.gov>
@@ -1505,7 +1955,7 @@ Mon Oct 28 17:40:54 1996 Jim Meyering <meyering@na-net.ornl.gov>
Thu Oct 24 13:50:46 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* src/tee.c (main): Ignore SIGPIPE.
* src/tee.c (main): Ignore SIGPIPE.
Wed Oct 23 23:42:43 1996 Jim Meyering <meyering@na-net.ornl.gov>
@@ -1720,19 +2170,19 @@ Mon Sep 2 10:52:55 1996 Jim Meyering <meyering@na-net.ornl.gov>
Sun Sep 1 07:56:07 1996 Jim Meyering <meyering@na-net.ornl.gov>
* configure.in (AM_FUNC_MKTIME): Use it.
(AC_REPLACE_FUNCS): Remove mktime.
* configure.in (AM_FUNC_MKTIME): Use it.
(AC_REPLACE_FUNCS): Remove mktime.
(AM_INIT_AUTOMAKE): Use it.
(AM_PROG_INSTALL): Remove. AM_INIT_AUTOMAKE does this.
(AC_PROG_MAKE_SET): Likewise.
(AC_PROG_MAKE_SET): Likewise.
(jm_MAINTAINER_MODE, fp_C_PROTOTYPES): Rename with
AM_ prefix for latest automake/aclocal.
AM_ prefix for latest automake/aclocal.
* Makefile.am (EXTRA_DIST): Add acinclude.m4.
* acinclude.m4: New file -- derived from aclocal.m4.
* aclocal.m4: This file is now generated by the aclocal program
(which comes with the automake package.)
* acinclude.m4: New file -- derived from aclocal.m4.
* aclocal.m4: This file is now generated by the aclocal program
(which comes with the automake package.)
Sat Aug 17 00:14:55 1996 Jim Meyering <meyering@na-net.ornl.gov>

View File

@@ -1,4 +1,29 @@
Changes in release 1.17
Changes in release 2.0
* disable stty tests (otherwise they fail) when `make check' is run via rsh
[1.16m]
* false and true now ignore --help and --version when POSIXLY_CORRECT is set
[1.16l]
* false and true are now C programs rather than shell scripts
[1.16k]
* fix typos in my version of AC_SEARCH_LIBS.
* fix dates on config files so builders don't need autoconf/automake
[1.16j]
* work around problems with my use of AC_SEARCH_LIBS
* fix a bug in id
[1.16i]
* portability tweaks for lib/readutmp.[ch] and src/date.c
[1.16h]
* seq with no arguments now elicits a useful diagnostic rather than a segfault
* portability tweaks to work around utmpname differences
* who works on Solaris
[1.16g]
* factor now uses uintmax_t, so the largest number it can factor is now 2^64 - 1
on systems with type `long long'.
* nohup no longer modifies the shell's search path
* `basename /' now prints `/', per the single unix spec
* `who --lookup' no longer erroneously reports `localhost' for IP addresses
for which it could not do a reverse lookup.
* `id user' wouldn't report a group id in some situations. Now it always does.
[1.16f]
* chroot now calls chdir ("/") after chroot.
* `date -s' now exits with nonzero status upon failure

View File

@@ -1,3 +1,754 @@
1999-08-11 Paul Eggert <eggert@twinsun.com>
* doc/textutils.texi: Document how to ignore newline during sort.
1999-08-07 Jim Meyering <meyering@ascend.com>
* po/POTFILES.in: Add lots of lib/*.c files. Remove src/system.h.
1999-08-06 Jim Meyering <meyering@ascend.com>
* Version 2.0.
* src/sort.c: Include file name in `write error' diagnostics.
(write_bytes): Add output_file parameter and use it. Update callers.
(mergefps): Likewise.
(merge): Likewise.
(sort): Likewise.
Reported by John Summerfield.
1999-08-05 Jim Meyering <meyering@ascend.com>
* src/tail.c (Follow_mode): Remove comma at end of enumerator list.
Reported by Kaveh Ghazi.
* config.sub: Update from autoconf.
* config.guess: Update from autoconf.
1999-08-04 Jim Meyering <meyering@ascend.com>
* Version 1.22q.
* configure.in: Remove inadequate getline-testing code. md5sum would
segfault on HPUX because of the getline function in their C library.
Use the AM_FUNC_GETLINE test in m4/ instead.
1999-08-03 Jim Meyering <meyering@ascend.com>
* src/tail.c (tail_forever): When following by name and calling recheck
because of exceeding max_n_consecutive_size_changes_between_opens,
`continue' so we don't fall through and (assuming the file finally grew)
get the erroneous `file truncated' message. This was hard to reproduce.
1999-08-01 Jim Meyering <meyering@ascend.com>
* Version 1.22p.
* configure.in (AM_C_PROTOTYPES): Move test to precede a few
header tests -- merely on principle.
1999-08-01 Paul Eggert <eggert@twinsun.com>
* configure.in (AC_SYS_LARGEFILE): Renamed from AC_LFS.
1999-07-16 Paul Eggert <eggert@twinsun.com>
* lib/quotearg.c (quotearg_buffer):
Don't quote spaces if C quoting style.
1999-07-31 Jim Meyering <meyering@ascend.com>
* src/tail.c (tail_forever): Don't call kill if pid is 0.
Detect when `writer_is_dead' also when the writer is some other user.
From Karl Heuer.
* src/tail.c (parse_options): Warn if --pid=PID is used without -f.
1999-07-30 Jim Meyering <meyering@ascend.com>
* Version 1.22o.
* src/tail.c: New option: --pid=PID.
Include signal.h for kill prototype.
(pid): New global.
(long_options): Add `pid'.
(usage): Describe it.
(tail_forever): Implement it.
(parse_options): Handle the new option and required arg.
Suggestion and pseudo-code from Karl Heuer.
1999-07-27 Jim Meyering <meyering@ascend.com>
* lib/linebuffer.c: Include <sys/types.h> now that linebuffer.h uses
size_t. This is required on at least SunOS4. From Kaveh Ghazi.
1999-07-26 Jim Meyering <meyering@ascend.com>
* src/sys2.h (PID_T_MAX): Define.
* src/tail.c (struct File_spec) [n_stat_calls]: Remove unused member.
1999-07-25 Jim Meyering <meyering@ascend.com>
* src/pr.c (usage): Remove `NEWS'-style paragraph (sorry to have
let that in, translators).
* Version 1.22n.
1999-06-01 Volker Borchert <bt@teknon.de>
* tests/Makefile.am: Make envvar-check depend on check-recursive rather
than on `check' so that its tests are performed before any real tests.
1999-07-20 Jim Meyering <meyering@ascend.com>
* configure.in (AC_REPLACE_FUNCS) Remove memmove, now that it's
AC_REPLACE...'d in m4/jm-macros.m4.
* src/wc.c (posixly_correct): Declare global.
(write_counts): Use it to select printf formats.
(main): Set posixly_correct from the POSIXLY_CORRECT envvar.
From Peter Moulder.
1999-07-15 Jim Meyering <meyering@ascend.com>
* tests/md5sum/Makefile.am: Revert the 1999-02-15 change.
* tests/md5sum/basic-1, newine-1: Add --text for each individual test.
Reported by Eli Zaretskii.
1999-07-12 Jim Meyering <meyering@ascend.com>
* configure.in (ALL_LINGUAS): Add Slovak (sk).
1999-07-11 Jim Meyering <meyering@ascend.com>
* src/tail.c (recheck): Use assert instead of unnecessary close_fd.
Remove a couple of unnecessary FIXME comments.
1999-07-10 Jim Meyering <meyering@ascend.com>
* doc/textutils.texi: Document new tail options.
* src/tail.c (struct File_spec) [tailable]: Rename from `missing' and
document. Change all uses and locals like was_missing to was_tailable.
Invert expressions as appropriate.
(reopen_inaccessible_files): Rename from allow_missing.
(sleep_interval): Describe.
(--allow-missing): Deprecate.
(--retry): New option, equivalent to --allow-missing.
(usage): Document name vs. descriptor differences.
Refer to manual for descriptions of --max-unchanged-stats=N
and --max-consecutive-size-changes=N.
(valid_file_spec): New function.
(recheck): Assert valid_file_spec.
Remove dead else-if block (suggestion from Eli Zaretskii).
Adjust stmts that set f->tailable -- unlike for `missing', tailable
doesn't depend on errno == ENOENT.
(parse_options): Give a warning if --retry is used when not following
by name.
* tests/join/Test.pm: New test case (but commented out) for
Paul's 1999-06-01 fix.
1999-07-09 Jim Meyering <meyering@ascend.com>
* configure.in (ALL_LINGUAS): Add Greek (el).
1999-07-04 Jim Meyering <meyering@ascend.com>
* tests/join/Test.pm: New test case for Paul's 1999-06-03 fix.
1999-07-03 Eli Zaretskii <eliz@is.elta.co.il>
* src/tail.c (struct File_spec): New member, errnum.
(recheck): Record the new value of errno in f->errnum. Don't
output an error message unless the new value of errno differs from
the old one. Output a message if previously-inaccessible file
becomes accessible.
(tail_forever): Always recheck files whose fd is negative. If the
file cannot be fstat'ed, record the errno value in f[i].errnum.
(tail_file): If the file cannot be open, record the errno value in
f->errnum. If it can be opened, initialize f->errnum to zero. If
it's a non-regular non-fifo file, initialize f->errnum to -1.
1999-06-21 Jim Meyering <meyering@ascend.com>
* doc/textutils.texi: Use lower case characters in sc{} context.
Reported by Eli Zaretskii.
1999-06-03 Paul Eggert <eggert@shade.twinsun.com>
* src/join.c (xfields): Only <blank>s separate fields, not <space>s.
1999-06-01 Paul Eggert <eggert@twinsun.com>
* lib/linebuffer.c (readline): Leave room for an extra byte
after the newline; comm needs this for memcoll.
1999-06-01 Paul Eggert <eggert@twinsun.com>
Add LC_COLLATE support to `join'.
* doc/textutils.texi: Describe join and LC_COLLATE.
* src/join.c: Add support for LC_COLLATE locale.
Include hard-locale.h, linebuffer.h, memcoll.h.
(struct line): New member `buf', replacing `beg' and `lim'.
All uses changed.
(hard_LC_COLLATE): New var.
(main): Initialize it.
(get_line): Use readline to read the line,
instead of doing it by hand.
That way, we get a buffer that we can pass to memcoll.
(keycmp): Use memcoll to compare lines if hard_LC_COLLATE is nonzero.
1999-05-27 Volker Borchert <bt@teknon.de>
* tests/Makefile.am: Qualify .env-warn with $(srcdir)/ prefix.
1999-05-25 Paul Eggert <eggert@twinsun.com>
Add LC_COLLATE support to `comm', so that `comm' is compatible
with `sort' in nontrivial locales.
* doc/textutils.texi: Document locale-specific mode for comm.
* lib/Makefile.am (libtu_a_SOURCES): Add hard-locale.c, memcoll.c.
(noinst_HEADERS): Add hard-locale.h, memcoll.h.
* src/comm.c: Include hard-locale.h, memcoll.h.
(hard_LC_COLLATE): New variable.
(compare_files): Use memcoll to compare if hard_LC_COLLATE.
(main): Initialize hard_LC_COLLATE from locale.
* src/sort.c: Include hard-locale.h, memcoll.h.
(hard_LC_COLLATE, hard_LC_CTYPE, hard_LC_TIME): New variables,
replacing `need_locale'.
(memcoll): Move to lib/memcoll.c.
(keycompare): No need to alloc (0), since our caller now does it.
(compare): alloca (0) before returning.
(my_setlocale): Remove; hard_locale now dows this.
(main): Invoke setlocale, bindtextdomain, and textdomain before
invoking anything that might print an error.
Use hard_locale to determine which locales are hard.
* lib/hard-locale.c, lib/hard-locale.h, lib/memcoll.c, lib/memcoll.h:
New files.
1999-05-25 Paul Eggert <eggert@shade.twinsun.com>
* lib/linebuffer.c (readline):
Append trailing newline to line.
* lib/linebuffer.h
[struct linebuffer] (size): Declare to be of type size_t, not long.
[struct linebuffer] (length): Likewise.
* src/comm.c, (writeline): Lines now contain trailing newline.
* src/uniq.c (find_field, different): Use size_t, not int, for lengths.
(writeline): Lines now contain trailing newline.
(check_file): Use size_t, not int, for lengths.
* src/nl.c (proc_text, check_section, main): More of the same.
* lib/linebuffer.h (struct linebuffer): Use size_t for sizes.
src/nl.c (header_del_len, body_del_len, footer_del_len, main):
Likewise.
src/uniq.c (find_field, different, check_file): Likewise.
* lib/linebuffer.c (readline): Silently append trailing
newline if needed. Do not bother setting buffer length to 0
at EOF, since it's not part of the spec and nobody relies on
it. Do not compute the difference between unrelated pointers.
1999-05-25 Paul Eggert <eggert@twinsun.com>
* src/tac.c (memrchr): Ifdef out this unused function.
1999-05-25 Jim Meyering <meyering@ascend.com>
* doc/textutils.texi (Squeezing): Remove misleading square brackets
from SET1 in the one-word-per-line example.
1999-05-22 Jim Meyering <meyering@ascend.com>
* lib/Makefile.am (libtu_a_SOURCES): Remove memchr.c.
From Ulrich Drepper.
* Version 1.22m.
1999-05-22 Paul Eggert <eggert@twinsun.com>
* doc/textutils.texi: Document locale-specific changes to `sort',
as well as the new, POSIX-compliant definition of line comparison,
and -g's more careful treatment of NaNs, infinities and zeros.
* src/sort.c (general_numcompare): Put exceptional cases
first, not last, to be consistent with -M.
1999-05-21 Paul Eggert <eggert@twinsun.com>
* src/sort.c (strtod): Declare if STDC_HEADERS is not defined.
(general_numcompare): Use strtod, not xstrtod.
Do not consider partial conversions to be errors.
Put -infinity at the start, and +infinity at the end;
follow +infinity with NaNs (sorted by bit pattern),
and finally by conversion errors.
1999-05-21 Jim Meyering <meyering@ascend.com>
* tests/sort/Test.pm (11d): Reverse lines in expected output
to reflect latest change.
(use-nl): New test from Paul Eggert.
1999-05-20 Paul Eggert <eggert@twinsun.com>
* src/sort.c: Treat the trailing newline as part of the line,
as required by POSIX.2.
(struct line, findlines, compare, checkfp, mergefps, sort):
A line now includes its trailing newline.
(findlines): Do not replace newline with NUL.
(memcoll, keycompare): Work even if the data to be compared are
adjacent strings; this is possible now that lines contain the
trailing newline.
(fillbuf): Always have an unused byte at the end of the buffer,
since memcoll and keycompare want to modify a byte after the last line.
(sortalloc, mergealloc): Increase by 1, for trailing byte.
1999-05-20 Jim Meyering <meyering@ascend.com>
* tests/sort/Test.pm: Add test case from Paul Eggert.
1999-05-20 Paul Eggert <eggert@twinsun.com>
* src/sort.c (keycompare): Ignore any length difference if the
localized comparison says the strings are equal.
* src/sort.c (memcoll, keycompare, compare): Handle NUL
characters properly when comparing with LC_COLLATE semantics.
(NLS_MEMCMP): Remove.
(memcoll): Renamed from strncoll.
Take separate lengths for each string.
This function is now invoked only when need_locale.
(keycompare): Don't copy strings when ignore and translate
are both NULL.
1999-05-18 Paul Eggert <eggert@twinsun.com>
* src/sort.c (MONTHTAB_CONST): Renamed from NLS_CONST; the use
is also changed. Define to const also if !HAVE_NL_LANGINFO.
(usage): `,' -> `;' (English typo).
1999-05-17 Eli Zaretskii <eliz@is.elta.co.il>
* src/cat.c (main): When stdout is in binary mode, make sure all
input files are also read in binary mode.
1999-05-16 Jim Meyering <meyering@ascend.com>
* Version 1.22l.
1999-05-11 Paul Eggert <eggert@twinsun.com>
* src/sort.c: Don't autodetect the locale of numbers and
months, as this conflicts with POSIX.2 and is tricky to boot.
(FLOATING_COMMA, NLS_STRNCMP, NLS_MAX_GROUPS,
NLS_ONE_CHARACTER_STRING): Remove macros no longer used.
(nls_grouping, nls_fraction_found, nls_month_found, nos_monthtab,
nls_months_collide, nls_keyhead, us_monthtab): Remove variables no
longer used.
(struct nls_keyfield): Remove types no longer used.
(strncoll_s2_readonly, nls_set_fraction, look_for_fraction,
nls_month_is_either_locale, nls_numeric_format): Remove functions no
longer used.
(monthtab): Now has the role that us_monthtab had, but it's const only
if ENABLE_NLS is not defined.
(C_DECIMAL_POINT): Renamed from FLOATING_POINT. All uses changed.
(MONTHS_PER_YEAR): Renamed from NLS_NUM_MONTHS. All uses changed.
(struct_month_cmp): Renamed from nls_sort_month_comp. All uses changed.
Use strcmp, not strcoll, since the user doesn't care about collating
here.
(inittables): Read locale data into monthtab, rather than modifying a
separate month table and futzing with indirection. Do not worry about
colliding months, since we no longer autodetect month locale.
(fraccompare): Don't set no-longer-used variable nls_fraction_found.
(getmonth): Use strncmp to compare months, since user doesn't care
about collating here. Fix bug where code incorrectly assumed that
strlen (monthtab[lo].name) == strlen (monthtab[ix].name).
(keycompare, main): Don't autodetect month locale.
(compare): Don't use NLS_MEMCP in code that can't be executed if
need_locale is false, as NLS_MEMCP is equivalent to memcmp in that
case.
(sort, insertkey, main): Don't autodetect numeric locale.
1999-05-15 Jim Meyering <meyering@ascend.com>
* tests/join/Test.pm (trailing-sp): New test for this fix.
* src/join.c (xfields): Don't interpret a trailing blank as a
delimiter when e.g. -t: was specified. From Tim Smithers.
1999-05-12 Jim Meyering <meyering@ascend.com>
* tests/Makefile.am (envvar-check): Renamed from check-local.
(check): Depend on envvar-check so the envvar check is performed
before all other tests. Reported by Volker Borchert.
* tests/.env-warn: Use `%%' place-holder that Makefile.am rule expects,
so CDPATH is mentioned in the message. Reported by Volker Borchert.
1999-05-11 Jim Meyering <meyering@ascend.com>
* src/sort.c (usage): Split the --help message into two pieces so that
neither is longer than 2048. For Irix4's cc. Reported by Kaveh Ghazi.
1999-05-09 Jim Meyering <meyering@ascend.com>
* lib/regex.c: Update from libc.
* Version 1.22k.
* Makefile.maint (alpha): Put the announcement in
/tmp/announce-$(distdir)
* tests/sort/Test.pm (neg-nls): New test.
1999-05-08 Jim Meyering <meyering@ascend.com>
* src/system.h (CHAR_BIT, TYPE_SIGNED, TYPE_MINIMUM, TYPE_MAXIMUM,
and all the *_MIN and *_MAX symbols): Remove definitions.
* src/sys2.h: Put the definitions here instead (this file is shared
between all three *utils packages, while system.h is not).
1999-05-06 Paul Eggert <eggert@twinsun.com>
* src/sort.c (fraccompare, numcompare): Merge the NLS and
non-NLS versions into a single function.
(decimal_point): Now char, since we no longer convert to unsigned
char.
(th_sep): Now int, since we use a value out of char range to denote
the absence of a thousands separator.
(IS_THOUSANDS_SEP): New macro.
(USE_NEW_FRAC_COMPARE): Remove.
(nls_set_fraction): Arg is now char, not unsigned char.
Set th_sep to CHAR_MAX + 1 if there is no thousands separator.
(numcompare): Don't convert to unsigned char unless necessary.
(main): Turn off decimal points and thousand separators if they
are multibyte characters, as we don't support that yet.
1999-05-06 Paul Eggert <eggert@twinsun.com>
* src/system.h (CHAR_MIN, CHAR_MAX): New macros.
(SCHAR_MIN, SCHAR_MAX): Don't assume that char is signed.
1999-05-06 Paul Eggert <eggert@twinsun.com>
* src/sort.c (numcompare): Handle comparison of two negative
numbers correctly in the ENABLE_NLS case.
1999-05-04 Jim Meyering <meyering@ascend.com>
* src/pr.c (usage): Break the usage message into 3 pieces instead of
only 2. The strings had grown to be longer than 2048, which evokes
errors when compiling with Irix4's cc. Reported by Kaveh Ghazi.
* src/tsort.c (search_item): Use `1' instead of `+1'. The latter
elicits a syntax error from SunOS4's cc. From Kaveh Ghazi.
1999-05-03 Jim Meyering <meyering@ascend.com>
* src/ptx.c <ctype.h>: Don't include.
[!STDC_HEADERS]: Remove definitions of ctype macros.
Convert e.g., isspace to ISSPACE to use definitions from sys2.h.
Reported by Kaveh Ghazi.
* src/sys2.h (TOLOWER): Define.
(TOUPPER): Define.
* src/join.c (TOLOWER): Remove definition.
* src/md5sum.c: (TOLOWER): Remove definition.
1999-04-30 Jim Meyering <meyering@ascend.com>
* src/sort.c (usage): Document the differences between the
obsolescent, +POS1[-POS2] form, and the POSIX -k option.
1999-04-24 Jim Meyering <meyering@ascend.com>
* configure.in: Use AC_CANONICAL_HOST.
* lib/Makefile.am (libtu_a_SOURCES): Add xstrtoumax.c
(noinst_HEADERS): Remove xstrtoul.h.
* src/csplit.c: Include new "xstrtol.h", not "xstrtoul.h".
(struct control) [repeat]: Declare as uintmax_t, not int.
(struct control) [lines_required]: Likewise.
(handle_line_error): Use human_readable to print lines_required.
(parse_repeat_count): Parse a uintmax_t.
(parse_patterns): Parse a uintmax_t.
* src/tail.c: Include new "xstrtol.h", not "xstrtoul.h".
* src/od.c: Likewise.
* src/head.c: Include new "xstrtol.h", not "xstrtoul.h".
Change all U_LONG_LONG to uintmax_t.
(head_lines): Move a couple dcls into an inner scope.
(string_to_integer): Rename from string_to_ull.
1999-04-19 Jim Meyering <meyering@ascend.com>
* Makefile.maint (b_host): Remove /pub suffix.
1999-04-18 Jim Meyering <meyering@ascend.com>
* Version 1.22j.
* Makefile.maint (my-distcheck): Use AMTAR, not TAR.
* src/sort.c (usage): s/DIRECT/DIRECTORY/g
Rename global: s/temp_file_prefix/temp_dir/.
(NAME_MAX_IN_DIR): Rename from PATH_MAX_IN_DIR. Use _POSIX_NAME_MAX,
not _POSIX_PATH_MAX. Guard with #if HAVE_PATHCONF rather than
#if HAVE_UNISTD_H.
(tempname): Wrap after 99999 only for length-impaired file systems.
1999-04-17 Jim Meyering <meyering@ascend.com>
* src/tail.c (file_lines): Fix serious bug introduced with last changes.
From Andreas Schwab.
1999-04-15 Jim Meyering <meyering@ascend.com>
* tests/Makefile.am (EXTRA_DIST): Rename .posix-warn to .env-warn.
(check-local): Warn about CDPATH in the same way
we warn about POSIXLY_CORRECT, since the cp/same-file test fails at
least when using bash with CDPATH set. Reported by Mark Hewitt.
* src/pr.c Add comments.
(init_header): Tweak white space in Date/Time header.
* tests/pr/Test.pm: Updated all tests to reflect the big
1999-02-13 change. From Roland Huebner.
1999-04-12 Jim Meyering <meyering@ascend.com>
* src/cat.c (main): Declare out_dev to be of type dev_t, not `int'.
Declare out_ino to be of type ino_t, not `int'.
From John Bley.
* src/od.c (MIN, MAX): Remove definitions.
* src/sys2.h (MIN, MAX): Define here instead.
Reported by John Bley.
1999-04-11 Jim Meyering <meyering@ascend.com>
* Version 1.22i.
* tests/pr/Test.pm (test_vector): Disable all tests while I wait for
an updated suite.
Fix the problem whereby `yes > k & sleep 1; tail -2c k' would infloop.
* src/tail.c (COPY_TO_EOF): Define.
(dump_remainder): Add parameter, n_bytes, and rewrite to use it.
Update callers.
(file_lines): Rename parameter.
(tail_bytes): Remove obsolete comment.
Fix the problem whereby `yes > k & sleep 1; tail -1 k' would infloop.
* src/tail.c (dump_remainder): Move this function to precede the
new use in file_lines.
(tail_lines): Don't call dump_remainder here.
(file_lines): Call dump_remainder here instead.
Reported by Lehti Rami.
* lib/readtokens.c (readtoken, readtokens): Protoize.
1999-04-10 Jim Meyering <meyering@ascend.com>
* src/tail.c (xwrite): Use STDOUT_FILENO instead of literal `1'.
1999-04-04 Jim Meyering <meyering@ascend.com>
* src/cat.c: Standardize --help and --version processing.
* src/comm.c: Likewise.
* src/csplit.c: Likewise.
* src/cut.c: Likewise.
* src/expand.c: Likewise.
* src/fmt.c: Likewise.
* src/fold.c: Likewise.
* src/head.c: Likewise.
* src/join.c: Likewise.
* src/md5sum.c: Likewise.
* src/nl.c: Likewise.
* src/od.c: Likewise.
* src/paste.c: Likewise.
* src/pr.c: Likewise.
* src/ptx.c: Likewise.
* src/split.c: Likewise.
* src/sum.c: Likewise.
* src/tac.c: Likewise.
* src/tail.c: Likewise.
* src/tr.c: Likewise.
* src/unexpand.c: Likewise.
* src/uniq.c: Likewise.
* src/wc.c: Likewise.
1999-03-29 Jim Meyering <meyering@ascend.com>
* configure.in (GNU_PACKAGE): Remove related code -- now it's in
the catch-all for shared autoconf code, m4/jm-macros.m4.
(jm_CHECK_ALL_TYPES): Remove explicit AC_TYPE_* macros and use
this instead.
1999-03-26 Jim Meyering <meyering@ascend.com>
* lib/Makefile.am (libfu_a_SOURCES): Add version-etc.c.
(noinst_HEADERS): Add version-etc.h.
1999-03-25 Jim Meyering <meyering@ascend.com>
* src/tail.c (recheck): Factor out a block of duplicated code.
Set f->size to 0 upon encountering a new file so we read it from
the beginning rather than from then end of the first line or
block. Otherwise, after a log rotation, tail would omit the first
line or block of the new file. Reported by Ed Avis.
1999-03-20 Jim Meyering <meyering@ascend.com>
* tests/Makefile.am (SUBDIRS): Temporarily remove pr.
1999-03-13 Jim Meyering <meyering@ascend.com>
* src/tac.c: (tac_mem): `#if-0'-out this unused function.
(tac_stdin_to_mem): Likewise.
* doc/textutils.texi (cut invocation): Describe --output-delimiter.
1999-03-12 Jim Meyering <meyering@ascend.com>
* src/sys2.h (SETVBUF): Define new macro.
* src/tail.c (dump_remainder): Don't fflush stdout here.
(main) [if forever]: Make stdout unbuffered, instead.
Akim Demaille pointed out that when running `echo x>a; tail -f a>>a' ,
the file `a' didn't grow longer than two lines. Now it grows
without bound.
1999-03-07 Jim Meyering <meyering@ascend.com>
* tests/md5sum/newline-1: Test for the actual feature.
With help from Eli Zaretskii.
* src/pr.c (usage): Add missing \n\.
The newline test would always fail on MSDOS/Windows systems --
so move it to a separate file where we can test for that.
* tests/md5sum/basic-1: Remove newline test.
* tests/md5sum/newline-1: New file.
* tests/md5sum/Makefile.am (TESTS): Add newline-1.
Pointed out by Eli Zaretskii.
1999-02-13 Roland Huebner <rh@pelikan.cologne.de>
* src/pr.c
(main): Redefine options -s, -w to be POSIX compliant; introduce
new options -J, -S, -W to disentangle -s and -w when used together
with the three column options;
(add_line_number): Make POSIX compliant; use default number
separator TAB with single column output.
(add_line_number): Make POSIX compliant; with multicolumn output
now prefer `text columns of equal width' rather than a consequent
use of `default n-separator TAB'.
(add_line_number): Change line number cut-off from lower-oder to
higher-oder digit to avoid loss of information; no consequent
handling exists in different utilities and other UNIXes.
(char_to_clump): Expand input text tabs to 8 spaces, if
input_tab_char doesn't equal TAB (adapted to other UNIXes).
(usage): Update POSIX compliant options -s, -w; add new options -J,
-S, -W.
(main): Update the source internal documentation.
Some smaller BUGFIXES (print_sep_string, init_header, skip_to_page,
reset_status, print_header).
* tests/md5sum/basic-1 (backslash): Use .\foo instead of \.foo so we
don't tramp on root directory in MSDOS/Windows.
Suggestion from Eli Zaretskii.
1999-02-15 Eli Zaretskii <eliz@is.elta.co.il>
* tests/md5sum/Makefile.am (TESTS_ENVIRONMENT): Run md5sum with the
--text option (for MSDOS).
1999-03-06 Jim Meyering <meyering@ascend.com>
* src/cut.c (getstr): Change type of `delim' parameter from char to int.
(cut_fields): Cast to `unsigned char' before comparing.
(main): Cast to `unsigned char' before assigning.
From Arne Juul.
* tests/cut/Test.pm: Add a test to exercise the bug.
* src/ptx.c (swallow_file_in_memory): Use a `%s' format in error call,
in case the argument string contains a `%'.
(main): Likewise.
* src/fmt.c (main): Likewise.
* src/sort.c (main): Likewise.
1999-02-13 Eli Zaretskii <eliz@is.elta.co.il>
* src/sys2.h [__DJGPP__]: Include <io.h> and <sys/exceptn.h>.
* src/ptx.c (swallow_file_in_memory): Slurp up the whole file at
once on MSDOS as well, but we have to relax the test for whether
reading it succeeded.
1999-03-03 Jim Meyering <meyering@ascend.com>
* src/cat.c: Include long-options.h
[long_options]: Remove the "help" and "version" entries.
Remove declarations of show_help and show_version.
(main): Use parse_long_options, including author name(s).
Remove the show_version and show_help blocks.
* src/cksum.c: Likewise.
* src/comm.c: Likewise.
* src/csplit.c: Likewise.
* src/cut.c: Likewise.
* src/expand.c: Likewise.
* src/fmt.c: Likewise.
* src/fold.c: Likewise.
* src/head.c: Likewise.
* src/nl.c: Likewise.
* src/od.c: Likewise.
* src/paste.c: Likewise.
* src/pr.c: Likewise.
* src/split.c: Likewise.
* src/sum.c: Likewise.
* src/tac.c: Likewise.
* src/tail.c: Likewise.
* src/tr.c: Likewise.
* src/unexpand.c: Likewise.
* src/uniq.c: Likewise.
* src/wc.c: Likewise.
* src/ptx.c: Include long-options.h
[long_options]: Remove the "help" and "version" entries.
Remove declarations of show_help and show_version.
(main): Remove `const' attribute from dcl of argv parameter.
Call bindtextdomain and textdomain.
Use parse_long_options, including author name(s).
Remove the show_version and show_help blocks.
* src/join.c (main): Include author name argument in call to
parse_long_options.
* src/md5sum.c (main): Likewise.
* src/sort.c (main): Likewise.
* src/tsort.c (main): Likewise.
1999-02-07 Jim Meyering <meyering@ascend.com>
* Version 1.22h.
@@ -672,7 +1423,6 @@
* src/tail.c (parse_obsolescent_option): Do not interpret `-f -n 1 ...'
as obsolescent options.
Accept new option: --sleep-interval=SECONDS (-s).
FIXME: document new option in textutils.texi.
(parse_options): Recognize it.
(usage): Describe it.
(tail_forever): Use it.
@@ -985,9 +1735,9 @@
1997-10-16 Jim Meyering <meyering@na-net.ornl.gov>
* src/sort.c (look_for_fraction): Patch from Orn Hansen.
* src/sort.c (look_for_fraction): Patch from Ørn Hansen.
(getmonth): Compare the two month names only to the length of the
string in the month table. Patch from Orn Hansen.
string in the month table. Patch from Ørn Hansen.
(NLS_STRNCMP): New macro.
(strncoll_s2_readonly): New function.
(inittables): Don't use temporary `comp' to hide type of

View File

@@ -1,4 +1,52 @@
Changes in release 1.23
Changes in release 2.0
[1.22q]
* HPUX portability fix: md5sum would dump core due to use of libc's getline
[1.22p]
* portability fixes from Paul Eggert based largely on tar-1.13 reports
* `tail --pid=PID' now works even when PID belongs to some other user
[1.22o]
* tail accepts new option: --pid=PID
[1.22n]
* tail accepts the following new options (some of which were added in 1.22g):
--retry
--follow[={name|descriptor}]
--max-unchanged-stats=N
--max-consecutive-size-changes=N
--sleep-interval=S
* wc uses the POSIX-mandated output format when POSIXLY_CORRECT is set
* To maintain compatibility with sort, comm and join now obey the LC_COLLATE
locale, and comm now considers newlines to be part of the lines.
* use lib/memchr.c only if it's not provided by the system -- this means
that on systems with a fast library memchr function you may notice an
improvement. If you use a system with a buggy or signifcantly slower
memchr, please report it.
[1.22m]
* sort now considers newlines to be part of the line, as required by POSIX.2.
E.g. a line starting with a tab now sorts before an empty line,
since tab precedes newline in the ASCII collating sequence.
* sort handles NUL bytes correctly when configured/compiled with --enable-nls
* fix typos in my version of AC_SEARCH_LIBS.
* fix dates on config files so builders don't need autoconf/automake
[1.22l]
* sort no longer autodetects the locale of numbers and months,
as that conflicts with POSIX.2
* `join -tC' now works when input contains trailing spaces
* portability tweaks for Irix's cc
[1.22k]
* `sort -n' works with negative numbers when configured/compiled
with --enable-nls
* head accepts byte and line counts of type uintmax_t (so up to 2^64 - 1)
[1.22j]
* tail: fix bug introduced in 1.22i
[1.22i]
* tail now terminates in `yes > k & sleep 1; tail -2c k'
* `tail -f' now ensures that stdout is unbuffered
* fix a bug in cut to allow use of 8-bit delimiters
* pr accepts POSIX compliant options -s and -w,
the new capital letter options -J, -S and _W turn off the
unexpected interferences of the small letter options -s and -w
if used together with the column options.
* pr output has been adapted to other UNIXes in some cases.
[1.22h]
* portability tweaks
* Window/NT/DOS support
@@ -6,7 +54,7 @@ Changes in release 1.23
* uniq accepts new option: --all-repeated (-D).
* Windows/DOS portability fixes
* new program: tsort
* tail has several new options: FIXME
* tail has several new options
* md5sum can handle file names with embedded backslash characters
* pr accepts long option names (see `pr --help')
* new program: ptx (moved to this package from being its own distribution)

View File

@@ -1,6 +1,6 @@
/* Copyright (C) 1989, 1997, 1998, 1999 Aladdin Enterprises. All rights reserved. */
/*$Id: ansi2knr.c,v 1.13 1999/02/03 15:23:21 meyering Exp $*/
/*$Id: ansi2knr.c,v 1.14 1999/04/13 14:44:33 meyering Exp $*/
/* Convert ANSI C function definitions to K&R ("traditional C") syntax */
/*
@@ -44,7 +44,10 @@ program under the GPL.
* consisting of only
* identifier1(identifier2)
* will not be considered a function definition unless identifier2 is
* the word "void". ansi2knr will recognize a multi-line header provided
* the word "void", and a line consisting of
* identifier1(identifier2, <<arbitrary>>)
* will not be considered a function definition.
* ansi2knr will recognize a multi-line header provided
* that no intervening line ends with a left or right brace or a semicolon.
* These algorithms ignore whitespace and comments, except that
* the function name must be the first thing on the line.
@@ -58,6 +61,12 @@ program under the GPL.
* The original and principal author of ansi2knr is L. Peter Deutsch
* <ghost@aladdin.com>. Other authors are noted in the change history
* that follows (in reverse chronological order):
lpd 1999-04-12 added minor fixes from Pavel Roskin
<pavel_roskin@geocities.com> for clean compilation with
gcc -W -Wall
lpd 1999-03-22 added hack to recognize lines consisting of
identifier1(identifier2, xxx) as *not* being procedures
lpd 1999-02-03 made indentation of preprocessor commands consistent
lpd 1999-01-28 fixed two bugs: a '/' in an argument list caused an
endless loop; quoted strings within an argument list
confused the parser
@@ -158,6 +167,11 @@ program under the GPL.
#endif
/* Define NULL (for *very* old compilers). */
#ifndef NULL
# define NULL (0)
#endif
/*
* The ctype macros don't always handle 8-bit characters correctly.
* Compensate for this here.
@@ -263,6 +277,11 @@ main(argc, argv)
if ( filename )
fprintf(out, "#line 1 \"%s\"\n", filename);
buf = malloc(bufsize);
if ( buf == NULL )
{
fprintf(stderr, "Unable to allocate read buffer!\n");
exit(1);
}
line = buf;
while ( fgets(line, (unsigned)(buf + bufsize - line), in) != NULL )
{
@@ -430,7 +449,7 @@ test1(buf)
};
char **key = words;
char *kp;
int len = endfn - buf;
unsigned len = endfn - buf;
while ( (kp = *key) != 0 )
{ if ( strlen(kp) == len && !strncmp(kp, buf, len) )
@@ -443,14 +462,16 @@ test1(buf)
int len;
/*
* Check for identifier1(identifier2) and not
* identifier1(void).
* identifier1(void), or identifier1(identifier2, xxxx).
*/
while ( isidchar(*p) )
p++;
len = p - id;
p = skipspace(p, 1);
if ( *p == ')' && (len != 4 || strncmp(id, "void", 4)) )
if (*p == ',' ||
(*p == ')' && (len != 4 || strncmp(id, "void", 4)))
)
return 0; /* not a function */
}
/*
@@ -495,7 +516,7 @@ convert1(buf, out, header, convert_varargs)
;
top: p = endfn;
breaks = (char **)malloc(sizeof(char *) * num_breaks * 2);
if ( breaks == 0 )
if ( breaks == NULL )
{ /* Couldn't allocate break table, give up */
fprintf(stderr, "Unable to allocate break table!\n");
fputs(buf, out);
@@ -507,7 +528,7 @@ top: p = endfn;
do
{ int level = 0;
char *lp = NULL;
char *rp;
char *rp = NULL;
char *end = NULL;
if ( bp >= btop )
@@ -545,7 +566,7 @@ top: p = endfn;
}
}
/* Erase any embedded prototype parameters. */
if ( lp )
if ( lp && rp )
writeblanks(lp + 1, rp);
p--; /* back up over terminator */
/* Find the name being declared. */

View File

@@ -1,5 +1,5 @@
/* basename -- strip directory and suffix from filenames
Copyright (C) 90,91,92,93,94,95,96,1997 Free Software Foundation, Inc.
Copyright (C) 1990-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
@@ -33,6 +33,11 @@
#include "long-options.h"
#include "error.h"
/* The official name of this program (e.g., no `g' prefix). */
#define PROGRAM_NAME "basename"
#define AUTHORS "FIXME unknown"
char *base_name ();
void strip_trailing_slashes ();
@@ -93,7 +98,15 @@ main (int argc, char **argv)
bindtextdomain (PACKAGE, LOCALEDIR);
textdomain (PACKAGE);
parse_long_options (argc, argv, "basename", GNU_PACKAGE, VERSION, usage);
parse_long_options (argc, argv, PROGRAM_NAME, GNU_PACKAGE, VERSION,
AUTHORS, usage);
/* The above handles --help and --version.
Since there is no other invocation of getopt, handle `--' here. */
if (argc > 1 && STREQ (argv[1], "--"))
{
--argc;
++argv;
}
if (argc == 1 || argc > 3)
{

View File

@@ -1,5 +1,5 @@
/* cat -- concatenate files and print on the standard output.
Copyright (C) 88, 90, 91, 1995-1998, 1999 Free Software Foundation, Inc.
Copyright (C) 88, 90, 91, 1995-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
@@ -34,6 +34,11 @@
#include "error.h"
#include "safe-read.h"
/* The official name of this program (e.g., no `g' prefix). */
#define PROGRAM_NAME "cat"
#define AUTHORS "Torbjorn Granlund and Richard M. Stallman"
/* Undefine, to avoid warning about redefinition on some systems. */
#undef max
#define max(h,i) ((h) > (i) ? (h) : (i))
@@ -481,10 +486,10 @@ main (int argc, char **argv)
int argind;
/* Device number of the output (file or whatever). */
int out_dev;
dev_t out_dev;
/* I-node number of the output. */
int out_ino;
ino_t out_ino;
/* Nonzero if the output file should not be the same as any input file. */
int check_redirection = 1;
@@ -510,12 +515,6 @@ main (int argc, char **argv)
/* If nonzero, call cat, otherwise call simple_cat to do the actual work. */
int options = 0;
/* If nonzero, display usage information and exit. */
static int show_help;
/* If nonzero, print the version on standard output then exit. */
static int show_version;
static struct option const long_options[] =
{
{"number-nonblank", no_argument, NULL, 'b'},
@@ -528,8 +527,8 @@ main (int argc, char **argv)
#if O_BINARY
{"binary", no_argument, NULL, 'B'},
#endif
{"help", no_argument, &show_help, 1},
{"version", no_argument, &show_version, 1},
{GETOPT_HELP_OPTION_DECL},
{GETOPT_VERSION_OPTION_DECL},
{NULL, 0, NULL, 0}
};
@@ -614,20 +613,15 @@ main (int argc, char **argv)
output_tabs = 0;
break;
case_GETOPT_HELP_CHAR;
case_GETOPT_VERSION_CHAR (PROGRAM_NAME, AUTHORS);
default:
usage (EXIT_FAILURE);
}
}
if (show_version)
{
printf ("cat (%s) %s\n", GNU_PACKAGE, VERSION);
exit (EXIT_SUCCESS);
}
if (show_help)
usage (0);
output_desc = 1;
/* Get device, i-node number, and optimal blocksize of output. */
@@ -672,6 +666,9 @@ main (int argc, char **argv)
/* Switch stdout to BINARY mode. */
binary_output = 1;
SET_BINARY (output_desc);
/* When stdout is in binary mode, make sure all input files are
also read in binary mode. */
file_open_mode |= O_BINARY;
}
else if (quote)
{

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