Compare commits

...

1178 Commits

Author SHA1 Message Date
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
Jim Meyering
07a5b9fe8e *** empty log message *** 1999-02-07 23:34:24 +00:00
Jim Meyering
cb954e6a87 *** empty log message *** 1999-02-07 23:31:49 +00:00
Jim Meyering
2d463bbcb5 *** empty log message *** 1999-02-07 23:07:43 +00:00
Jim Meyering
7d957fac2e *** empty log message *** 1999-02-07 23:06:38 +00:00
Jim Meyering
238e6f6a40 . 1999-02-07 23:06:14 +00:00
Jim Meyering
9625a6cdaf *** empty log message *** 1999-02-07 23:06:10 +00:00
Jim Meyering
05b9afe56b (my-distcheck): Don't depend on dist, now that this
is hooked up to the distcheck rule.
1999-02-07 23:02:34 +00:00
Jim Meyering
84f044b998 . 1999-02-07 23:00:01 +00:00
Jim Meyering
bc885b89c1 . 1999-02-07 16:38:18 +00:00
Jim Meyering
24c3de8eb7 *** empty log message *** 1999-02-07 16:37:08 +00:00
Jim Meyering
a2c6534e1d *** empty log message *** 1999-02-07 16:36:58 +00:00
Jim Meyering
38c9d6d2b6 . 1999-02-07 16:35:56 +00:00
Jim Meyering
a8f75cc5c9 . 1999-02-07 16:35:30 +00:00
Jim Meyering
467a9bfd4b New file -- extracted from sh-utils' configure.in. 1999-02-07 14:24:08 +00:00
Jim Meyering
c0dfa7f21b *** empty log message *** 1999-02-07 13:49:07 +00:00
Jim Meyering
9e0faa6d18 Support DOS-style d:/foo/bar absolute file names.
From Eli Zaretskii.
1999-02-07 13:41:27 +00:00
Jim Meyering
7e74cfab42 Use AC_SUBST(LIBOBJS) since we set LIBOBJS. 1999-02-07 05:37:39 +00:00
Jim Meyering
c77b696d1e *** empty log message *** 1999-02-07 05:32:49 +00:00
Jim Meyering
2c13a275ca Use .$ac_objext, not .o 1999-02-07 05:27:24 +00:00
Jim Meyering
48a0c3d403 . 1999-02-07 05:24:19 +00:00
Jim Meyering
a59624613d *** empty log message *** 1999-02-07 05:24:15 +00:00
Jim Meyering
88869ee024 Actually invoke jm_WITH_REGEX now that it requires an argument. 1999-02-07 05:23:27 +00:00
Jim Meyering
505f12e2e4 Add a run-time Test for proper operation of re_compile_pattern. 1999-02-07 05:20:23 +00:00
Jim Meyering
4473f3cb6e import latest 1999-02-06 18:37:55 +00:00
Jim Meyering
4ae35f8a89 cpp indent 1999-02-03 15:23:21 +00:00
Jim Meyering
cd9a08e476 (S_ISDOOR): Define if missing. 1999-02-03 13:56:43 +00:00
Jim Meyering
6025f81e94 . 1999-02-03 13:53:26 +00:00
Jim Meyering
e7dc64cdaf *** empty log message *** 1999-02-03 06:40:30 +00:00
Jim Meyering
ee34311b45 *** empty log message *** 1999-02-03 06:39:02 +00:00
Jim Meyering
ec20f35608 *** empty log message *** 1999-02-03 05:42:15 +00:00
Jim Meyering
0d148ec872 Handle DOOR. 1999-02-03 05:41:42 +00:00
Jim Meyering
751a3dc73b (S_ISLNK, S_ISFIFO, S_ISSOCK, S_ISCHR, S_ISBLK, S_ISDOOR):
Define to zero if not already defined.
(HAVE_SYMLINKS): Define.
(gobble_file): Remove #ifdef.
(get_link_name, make_link_path): Guard these with #if HAVE_SYMLINKS
rather than #ifdef S_ISLNK.
(print_type_indicator): Remove #ifdefs and reorganize.
(print_color_indicator): Remove #ifdefs.
(length_of_file_name_and_frills): Likewise.
1999-02-03 05:41:18 +00:00
Jim Meyering
43aa4122fc (print_type_indicator): Print doors as '>'.
(length_of_file_name_and_frills): Account for this.
1999-02-03 05:16:22 +00:00
Jim Meyering
a6d3060450 (ftypelet): Handle doors.
(S_ISDOOR): Define if missing.
1999-02-03 05:15:07 +00:00
Jim Meyering
015e2e77ed New version from L. Peter Deutsch. 1999-02-03 02:01:06 +00:00
Jim Meyering
b10a3f942e *** empty log message *** 1999-02-01 13:50:32 +00:00
Jim Meyering
ca787f30f6 (STRXCASECMP_FUNCTION): Don't increment within macro argument list.
From Akim Demaille.
1999-02-01 13:50:12 +00:00
Jim Meyering
ac68c4f0c9 *** empty log message *** 1999-01-31 23:16:49 +00:00
Jim Meyering
45d503f7f9 Wrap the @top node in @ifnottex instead of
@ifinfo so `makeinfo --html ...' works.  From Karl Berry.
1999-01-31 23:16:31 +00:00
Jim Meyering
3aaa173ce2 *** empty log message *** 1999-01-31 23:15:38 +00:00
Jim Meyering
7f7cdc86f9 Wrap the @top node in @ifnottex instead of
@ifinfo so `makeinfo --html ...' works.  From Karl Berry.
1999-01-31 23:15:30 +00:00
Jim Meyering
c54cb6e13b *** empty log message *** 1999-01-31 23:04:21 +00:00
Jim Meyering
c900767da2 *** empty log message *** 1999-01-31 18:51:14 +00:00
Jim Meyering
9f0e21b7ca new test: Create a hard link to a dangling symlink. 1999-01-31 18:51:08 +00:00
Jim Meyering
7442141536 *** empty log message *** 1999-01-31 18:44:48 +00:00
Jim Meyering
2aa0dbcc2e *** empty log message *** 1999-01-31 18:44:34 +00:00
Jim Meyering
94fa239afa *** empty log message *** 1999-01-31 18:44:14 +00:00
Jim Meyering
4872440d7a (do_link): Allow creation of a hard link to a dangling
symlink.  Reported by Alexey Solovyov:
1999-01-31 18:41:36 +00:00
Jim Meyering
821fddfdc5 *** empty log message *** 1999-01-31 18:41:18 +00:00
Jim Meyering
9a5044f0ea *** empty log message *** 1999-01-31 18:18:16 +00:00
Jim Meyering
2f07328f17 (main): Call chdir ("/") after chroot.
Suggestion from James Youngman.
1999-01-31 17:50:53 +00:00
Jim Meyering
09619556e6 . 1999-01-31 17:13:53 +00:00
Jim Meyering
5b070b2329 *** empty log message *** 1999-01-31 16:55:51 +00:00
Jim Meyering
a12101a224 Include locale.h.
[!HAVE_SETLOCALE]: Define-away setlocale.
(getloadavg): Ensure the sscanf of /proc/getloadavg data uses the
`C' numeric locale.  Restore afterwards.
1999-01-31 16:54:00 +00:00
Jim Meyering
62b3fd4e81 (print_uptime): Use the C numeric locale for sscanf
of /proc/uptime data, then restore.
1999-01-31 16:53:28 +00:00
Jim Meyering
c4ece6d8cb *** empty log message *** 1999-01-31 16:23:10 +00:00
Jim Meyering
69649d98b1 Check for locale.h and the function, setlocale. 1999-01-31 16:22:58 +00:00
Jim Meyering
99ce6d77e0 *** empty log message *** 1999-01-31 15:28:53 +00:00
Jim Meyering
3f9c40bdcb Protoize. 1999-01-31 15:28:48 +00:00
Jim Meyering
3b1dbb8f30 *** empty log message *** 1999-01-31 15:18:25 +00:00
Jim Meyering
6de09f9d18 *** empty log message *** 1999-01-31 15:13:00 +00:00
Jim Meyering
eaec7699ac (copy_internal): Describe any backup-related renaming
operations when in verbose mode.
(copy_internal): Likewise.
Based on changes from Marty Leisner.
1999-01-31 15:12:43 +00:00
Jim Meyering
e960794409 *** empty log message *** 1999-01-31 14:47:18 +00:00
Jim Meyering
82eb2dcf9e Declare chown manually. 1999-01-31 14:46:08 +00:00
Jim Meyering
c1fb8566f6 . 1999-01-31 14:16:28 +00:00
Jim Meyering
ef68c26a22 . 1999-01-31 05:41:02 +00:00
Jim Meyering
8ec1a397be . 1999-01-31 05:40:21 +00:00
Jim Meyering
9b531d8675 . 1999-01-31 05:39:01 +00:00
Jim Meyering
fc965709f9 *** empty log message *** 1999-01-31 05:29:41 +00:00
Jim Meyering
44a61d78bb Use 3-arg form of AC_DEFINE. 1999-01-31 05:29:34 +00:00
Jim Meyering
9195b6970b *** empty log message *** 1999-01-31 05:10:23 +00:00
Jim Meyering
eaacf48c40 . 1999-01-31 05:07:11 +00:00
Jim Meyering
263bc0f77b Make this a wrapper around the official AM_FUNC_MKTIME
rather than my private copy, now that the official one is up to date.
1999-01-31 05:06:51 +00:00
Jim Meyering
29d4ea7270 *** empty log message *** 1999-01-30 16:35:04 +00:00
Jim Meyering
9196dbf945 *** empty log message *** 1999-01-30 15:55:43 +00:00
Jim Meyering
98edf21e5e . 1999-01-30 15:53:25 +00:00
Jim Meyering
7dfa1c9eaa use AC_DEFINE_UNQUOTED, now 1999-01-30 14:20:15 +00:00
Jim Meyering
c1ea7960a5 *** empty log message *** 1999-01-30 13:51:20 +00:00
Jim Meyering
076e82b82b Use 3-arg form of AC_DEFINE. 1999-01-30 13:50:58 +00:00
Jim Meyering
779b181b61 Use 3-arg form of AC_DEFINE. 1999-01-30 13:38:57 +00:00
Jim Meyering
97f8518205 *** empty log message *** 1999-01-30 05:35:42 +00:00
Jim Meyering
d713f56660 use 3-arg form of AC_DEFINE_UNQUOTED 1999-01-30 05:35:10 +00:00
Jim Meyering
fed619866d *** empty log message *** 1999-01-30 05:34:00 +00:00
Jim Meyering
5d8751167c require 2.13 1999-01-30 04:51:49 +00:00
Jim Meyering
77f5cd6359 . 1999-01-29 13:45:11 +00:00
Jim Meyering
523442d018 *** empty log message *** 1999-01-29 05:15:49 +00:00
Jim Meyering
b04492c62b *** empty log message *** 1999-01-29 05:07:30 +00:00
Jim Meyering
87110cd9f2 . 1999-01-29 05:06:23 +00:00
Jim Meyering
7744b342e1 *** empty log message *** 1999-01-29 05:06:03 +00:00
Jim Meyering
56fee444e2 Use the 3-argument forms of AC_DEFINE* macros. 1999-01-29 05:05:56 +00:00
Jim Meyering
cef9c0a44a Use jm_AFS. 1999-01-29 05:03:30 +00:00
Jim Meyering
af1ef50ae1 *** empty log message *** 1999-01-29 05:00:35 +00:00
Jim Meyering
a2f2ba51bc Use TIME_WITH_SYS_TIME-based #if test rather than
TM_IN_SYS_TIME based one (for shred).
1999-01-29 04:58:32 +00:00
Jim Meyering
8bf7657cd4 . 1999-01-27 21:32:59 +00:00
Jim Meyering
4d319867cf . 1999-01-27 05:25:37 +00:00
Jim Meyering
9fe649e01a *** empty log message *** 1999-01-25 15:23:44 +00:00
Jim Meyering
922d1292c3 *** empty log message *** 1999-01-25 15:19:36 +00:00
Jim Meyering
f525fd81ca (isaac_seed): Guard clock_gettime with test of
HAVE_CLOCK_GETTIME, not CLOCK_REALTIME.
(wipename): Rename local dirfd to dir_fd to avoid shadowing the
function declared in Linux's dirent.h.
1999-01-25 15:13:10 +00:00
Jim Meyering
89826ef420 (ARRAY_CARDINALITY): Define.
(ARGMATCH_ASSERT): New macro.
1999-01-25 14:52:13 +00:00
Jim Meyering
a2e1454d4b *** empty log message *** 1999-01-25 14:33:44 +00:00
Jim Meyering
276d118b10 (usage): Remove static attribute. 1999-01-25 14:33:38 +00:00
Jim Meyering
fe9d964a78 (usage): Remove static attribute.
Move function be the first in the file.
1999-01-25 14:31:12 +00:00
Jim Meyering
54f4eb2224 (usage): Remove static attribute.
Move function be the first in the file.
1999-01-25 14:30:08 +00:00
Jim Meyering
86fb9cb9ec (usage): Remove static attribute.
Move function be the first in the file.
1999-01-25 14:29:22 +00:00
Jim Meyering
7082d762aa (usage): Remove static attribute.
Move function be the first in the file.
1999-01-25 14:28:31 +00:00
Jim Meyering
22099863b4 (usage): Remove static attribute.
Move function be the first in the file.
1999-01-25 14:27:48 +00:00
Jim Meyering
a4c1c9627e (usage): Remove static attribute.
Move function be the first in the file.
1999-01-25 14:26:38 +00:00
Jim Meyering
53ab150d29 (usage): Remove static attribute.
Move function be the first in the file.
1999-01-25 14:24:35 +00:00
Jim Meyering
1a3dfa550d . 1999-01-25 14:09:45 +00:00
Jim Meyering
2b9e4c6914 (program_name): Remove dcl.
Include error.h.
(argmatch_invalid): Use error rather than fprintf.
1999-01-25 14:08:04 +00:00
Jim Meyering
8908c87cb0 tweak comment 1999-01-25 13:59:34 +00:00
Jim Meyering
7049562dce tweak comment 1999-01-25 13:58:34 +00:00
Jim Meyering
e7ae216189 tweak comment 1999-01-25 13:54:30 +00:00
Jim Meyering
70ede084c0 *** empty log message *** 1999-01-25 05:51:07 +00:00
Jim Meyering
becdfba8b9 New version from L. Peter Deutsch. 1999-01-25 05:50:56 +00:00
Jim Meyering
cb6a8b722b *** empty log message *** 1999-01-25 00:34:39 +00:00
Jim Meyering
2ecbb0307d Exit nonzero upon failed write to stdout. 1999-01-25 00:34:26 +00:00
Jim Meyering
95ec5d7e78 *** empty log message *** 1999-01-25 00:18:55 +00:00
Jim Meyering
11a5174aa6 (DONT_UNLINK_WHILE_OPEN) [__MSDOS__ || _WIN32]: Define. 1999-01-25 00:18:47 +00:00
Jim Meyering
a9ec82981b *** empty log message *** 1999-01-25 00:17:40 +00:00
Jim Meyering
cbf82d876b (quotearg_n_options): Revert type of parameter `n'
(and hence that of the local `n1', too) to `int' at Paul's request.
1999-01-25 00:17:22 +00:00
Jim Meyering
8c5f91e5ad Add comments. 1999-01-25 00:13:36 +00:00
Jim Meyering
da9211c1c1 *** empty log message *** 1999-01-24 15:11:00 +00:00
Jim Meyering
26756c6f82 (fdatasync): Remove function. instead, ...
[! HAVE_FDATASYNC]: Define to fsync.
From Colin Plumb.
1999-01-24 15:10:22 +00:00
Jim Meyering
604691004d *** empty log message *** 1999-01-23 23:25:16 +00:00
Jim Meyering
70db3065cb (fdatasync) [! HAVE_FDATASYNC]: New function. 1999-01-23 23:07:53 +00:00
Jim Meyering
d91597a2e8 *** empty log message *** 1999-01-23 23:01:07 +00:00
Jim Meyering
1b0f03e1da (wipename): Print the `FILE: deleting' message only when in verbose mode. 1999-01-23 18:55:34 +00:00
Jim Meyering
e21cf52e03 (wipename): Print the `FILE: deleted' message only when in verbose mode. 1999-01-23 18:33:11 +00:00
Jim Meyering
4ab3a8a345 always close stdout 1999-01-23 18:15:41 +00:00
Jim Meyering
35c2b35dbd fix typos in comments 1999-01-23 17:36:33 +00:00
Jim Meyering
9550ca6b71 (pfstatus): Use __format__ and __printf__.
Remove `if __GNUC__ >= 2' guard.
1999-01-23 16:48:36 +00:00
Jim Meyering
5b181c3bd6 *** empty log message *** 1999-01-23 16:41:20 +00:00
Jim Meyering
b02f28bab4 Bracket pfstatus messages with _(). 1999-01-23 16:26:16 +00:00
Jim Meyering
68e327564d add parens around STREQ 1999-01-23 15:34:18 +00:00
Jim Meyering
e363353a48 restore mistakenly removed stdio.h
use error in place of pferror
(pferror): Remove.
(wipefd): Use error in place of fprintf(stderr,... call
s/alllocate/allocate
1999-01-23 15:32:48 +00:00
Jim Meyering
954d1b451f use `%s' rather than \"%s\" everywhere 1999-01-23 15:22:16 +00:00
Jim Meyering
8b036d56ef s/sterilize/shred/g
Don't include headers already included (and guarded by HAVE_FOO_H tests)
in system.h.
1999-01-23 15:17:54 +00:00
Jim Meyering
758bbda788 use getopt_long
(struct Options): Declare.
(usage): New function.
(program_name): Rename from argv0
(FLAG_* macros): Remove.
1999-01-23 05:32:58 +00:00
Jim Meyering
ae7d45cdc9 Include config.h, getopt.h, system.h and error.h.
Use #else/#if, not #elif.
1999-01-22 02:19:24 +00:00
Jim Meyering
6cb040753f import latest 1999-01-21 13:40:27 +00:00
Jim Meyering
42d3b0be50 *** empty log message *** 1999-01-19 04:47:33 +00:00
Jim Meyering
cdc04ccc0e (__mktime_internal): Adopt the traditional (and
problematic) notion of what to do when tm_isdst doesn't match.
From Paul Eggert.
1999-01-19 04:47:24 +00:00
Jim Meyering
509abea3f1 put back mistakenly removed pwd= assignment 1999-01-19 03:04:12 +00:00
Jim Meyering
67a1a846c4 remove temporary files 1999-01-18 18:33:58 +00:00
Jim Meyering
d3b6e5f4fb . 1999-01-18 17:14:57 +00:00
Jim Meyering
b83bf32695 . 1999-01-18 17:14:35 +00:00
Jim Meyering
65c540d59c Tweak grammar in description of ptx's --break-file=FILE option. 1999-01-18 16:30:20 +00:00
Jim Meyering
ab8dea5328 *** empty log message *** 1999-01-18 16:23:59 +00:00
Jim Meyering
a90a97ba1d Harmonization of @samp use for options. 1999-01-18 16:23:48 +00:00
Jim Meyering
21cf7cf8c2 indent -- sorry Colin. 1999-01-18 05:49:43 +00:00
Jim Meyering
9f4ddf5976 *** empty log message *** 1999-01-18 03:49:16 +00:00
Jim Meyering
25668ab60b *** empty log message *** 1999-01-18 03:47:16 +00:00
Jim Meyering
d12341e78a . 1999-01-18 03:46:48 +00:00
Jim Meyering
34ad3d2d3b Now that PATH is set properly, use ln rather than $LN. 1999-01-18 02:57:24 +00:00
Jim Meyering
bece904517 (TESTS): Add backup-1.
(TESTS_ENVIRONMENT): Set PATH here, rather than setting LN.
1999-01-18 02:56:27 +00:00
Jim Meyering
d869e3fdc0 . 1999-01-18 02:55:50 +00:00
Jim Meyering
33a1515274 . 1999-01-18 02:54:56 +00:00
Jim Meyering
890d74d50b Now that PATH is set properly, use rm and cp rather than $RM and $CP. 1999-01-18 02:54:36 +00:00
Jim Meyering
f0f15679fb . 1999-01-18 02:54:19 +00:00
Jim Meyering
b4b06d9c39 (TESTS_ENVIRONMENT): Set PATH here, rather than setting RM and CP. 1999-01-18 02:53:19 +00:00
Jim Meyering
e11c197cc2 (do_link): Try to remove DEST even after renaming it.
This fixes a bug reported by Jamie Lokier.
1999-01-18 02:41:13 +00:00
Jim Meyering
5967a93b4f *** empty log message *** 1999-01-18 02:40:30 +00:00
Jim Meyering
1f4c0ed890 cpp-indent #error line 1999-01-18 00:44:57 +00:00
Jim Meyering
9a6aae1ed7 . 1999-01-18 00:44:18 +00:00
Jim Meyering
3f05e0467f *** empty log message *** 1999-01-17 18:14:28 +00:00
Jim Meyering
ea020acdd2 (same_name): Use SAME_INODE rather than open coding it. 1999-01-17 18:12:19 +00:00
Jim Meyering
3b713062cd *** empty log message *** 1999-01-17 15:07:44 +00:00
Jim Meyering
f5f0c17fe9 Add SHELL = /bin/sh. 1999-01-17 13:53:32 +00:00
Jim Meyering
d34ec08816 compress copyright 1999-01-17 04:15:12 +00:00
Jim Meyering
7316f85aaa (ARGMATCH_DIE_DECL): Use it. 1999-01-16 17:18:01 +00:00
Jim Meyering
3c2295f52c *** empty log message *** 1999-01-16 17:15:32 +00:00
Jim Meyering
d3e2cd9eca (ARGMATCH_DIE_DECL): Define. 1999-01-16 17:15:24 +00:00
Jim Meyering
bf527b6094 *** empty log message *** 1999-01-16 17:01:20 +00:00
Jim Meyering
eb3b7c64d0 Define ARGMATCH_DIE. 1999-01-16 17:01:11 +00:00
Jim Meyering
0695444a89 . 1999-01-16 16:25:26 +00:00
Jim Meyering
cf00554f8f Don't declare base_name. 1999-01-16 16:22:00 +00:00
Jim Meyering
1b9f58551d Don't declare base_name.
Use function-style XARGMATCH once again.
1999-01-16 16:21:46 +00:00
Jim Meyering
4e83f9789c (usage): Remove `static'.
Use function-style XARGMATCH.
1999-01-16 16:20:02 +00:00
Jim Meyering
29064b5f4f Remove declarations of base_name and get_version.
(main): Don't call getenv ("VERSION_CONTROL"); xget_version does it.
Use xget_version and function-style XARGMATCH.
1999-01-16 16:18:26 +00:00
Jim Meyering
fadedac410 Remove declarations of base_name and get_version.
(main): Don't call getenv ("VERSION_CONTROL"); xget_version does it.
Use xget_version and function-style XARGMATCH.
1999-01-16 16:14:56 +00:00
Jim Meyering
06f14ae760 Remove declarations of base_name and get_version.
(main): Don't call getenv ("VERSION_CONTROL"); xget_version does it.
Use xget_version and function-style XARGMATCH.
1999-01-16 16:14:31 +00:00
Jim Meyering
1592f752f6 Don't declare base_name.
(usage): Don't make it static so that it can be
called from libfu.a by xargmatch.
1999-01-16 16:13:31 +00:00
Jim Meyering
84b4618b26 Remove declarations of base_name and get_version.
(main): Don't call getenv ("VERSION_CONTROL"); xget_version does it.
Use xget_version and function-style XARGMATCH.
1999-01-16 16:12:05 +00:00
Jim Meyering
414cf1b428 (base_name): Declare. 1999-01-16 16:04:43 +00:00
Jim Meyering
b76f341922 (quotearg_n_options): Declare n1 to be of type
unsigned int, not just int.
1999-01-16 15:55:20 +00:00
Jim Meyering
10f96d621c (get_version): Adjust prototype.
(xget_version): Add prototype.
(base_name): Remove prototype.
1999-01-16 15:54:22 +00:00
Jim Meyering
306ea2b028 [!HAVE_DECL_GETENV]: Declare getenv.
(backup_args): Reorder enum members.
(backup_types): Likewise.
(get_version): Take an additional parameter, `context'.
(xget_version): Like get_version, but if the `version' argument is NULL,
use the value of the envvar VERSION_CONTROL.
(base_name): Declare.
1999-01-16 15:51:21 +00:00
Jim Meyering
ff5b4df30b Add prototype for base_name. 1999-01-16 15:37:25 +00:00
Jim Meyering
20bc02752b (usage): Don't make it static so that it can be called from libfu.a by xargmatch. 1999-01-16 15:34:59 +00:00
Jim Meyering
410a3c94e8 (usage): Don't make it static so that it can be called from libfu.a by xargmatch. 1999-01-16 15:33:16 +00:00
Jim Meyering
c94e186b91 s/argmatch_exit_failure/argmatch_die/ 1999-01-16 15:21:52 +00:00
Jim Meyering
e42efa6866 (EXIT_FAILURE): Define.
(ARGMATCH_DIE): Use it.
1999-01-16 15:17:48 +00:00
Jim Meyering
115a5d0e61 *** empty log message *** 1999-01-16 15:12:19 +00:00
Jim Meyering
f28d5ba125 (XARGMATCH): Define to return a value once again.
(XARGCASEMATCH): Likewise.
1999-01-16 15:12:04 +00:00
Jim Meyering
f22e54a579 (ARGMATCH_DIE): Provide default.
(__xargmatch_internal): New function.
s/rogram_name/program_name.
From Akim Demaille.
1999-01-16 15:06:41 +00:00
Jim Meyering
888b0fe143 import latest 1999-01-15 13:26:46 +00:00
Jim Meyering
e0c1e743cc *** empty log message *** 1999-01-14 18:44:38 +00:00
Jim Meyering
3e60c9744d Use f', not x' as temp. file name to avoid warnings from perl5.004. 1999-01-14 18:43:54 +00:00
Jim Meyering
3cce240e0a . 1999-01-14 18:27:33 +00:00
Jim Meyering
17a4ddab33 *** empty log message *** 1999-01-14 18:27:01 +00:00
Jim Meyering
d2e1175756 (parse_long_options): Rename `usage' parameter
to avoid shadowing globally scoped function.
1999-01-14 18:26:51 +00:00
Jim Meyering
9fec9172be Don't prototype usage as static. 1999-01-14 18:25:16 +00:00
Jim Meyering
da25811932 Include closeout.h. (main): Use close_stdout. 1999-01-14 15:37:04 +00:00
Jim Meyering
dc4fd4c43b Include closeout.h. (main): Use close_stdout_status. 1999-01-14 15:36:50 +00:00
Jim Meyering
26ba9ca9df . 1999-01-13 05:50:34 +00:00
Jim Meyering
f749a71868 . 1999-01-13 05:50:05 +00:00
Jim Meyering
43ca488eae *** empty log message *** 1999-01-13 05:42:38 +00:00
Jim Meyering
b0c149e78f new version from automake 1999-01-13 05:40:42 +00:00
Jim Meyering
97bc6652e7 . 1999-01-13 05:38:11 +00:00
Jim Meyering
e0ad1ee4d1 . 1999-01-13 05:38:08 +00:00
Jim Meyering
af821763c5 new version from glibc 1999-01-13 05:37:17 +00:00
Jim Meyering
4a90a25973 new version from glibc 1999-01-13 05:36:45 +00:00
Jim Meyering
570fa71fb3 add parens, s/|/;/ 1999-01-12 17:40:08 +00:00
Jim Meyering
8d891cbf63 *** empty log message *** 1999-01-12 17:35:22 +00:00
Jim Meyering
58d4fd72fe Rewrite to avoid using fmt. 1999-01-12 17:35:13 +00:00
Jim Meyering
b517135765 . 1999-01-11 05:49:42 +00:00
Jim Meyering
f4e4297031 *** empty log message *** 1999-01-11 05:01:31 +00:00
Jim Meyering
22d584b475 . 1999-01-11 04:58:28 +00:00
Jim Meyering
f6aaba2b34 *** empty log message *** 1999-01-11 04:53:02 +00:00
Jim Meyering
c970990a0a All of the following new code is protected by `#if DONT_UNLINK_WHILE_OPEN'
(file_to_remove): New global.
(fp_to_close): New global.
(unlink_tempfile): New function.
(record_tempfile): New function.
(save_stdin): Call record_tempfile.
Use SET_BINARY.
(main): Use SET_BINARY and SET_BINARY2.
From Eli Zaretskii.
1999-01-11 04:52:44 +00:00
Jim Meyering
500f608a4d *** empty log message *** 1999-01-11 04:15:09 +00:00
Jim Meyering
e5eed12981 *** empty log message *** 1999-01-11 04:14:29 +00:00
Jim Meyering
8be71eeb83 . 1999-01-11 04:12:15 +00:00
Jim Meyering
06683af3c4 *** empty log message *** 1999-01-11 03:36:44 +00:00
Jim Meyering
38d09e7907 *** empty log message *** 1999-01-11 03:23:14 +00:00
Jim Meyering
0e777744cb (copy_internal): Handle two more values of errno from
failed rename of a directory into a subdirectory of itself.
1999-01-11 03:22:50 +00:00
Jim Meyering
9a887e5ca4 *** empty log message *** 1999-01-11 03:19:45 +00:00
Jim Meyering
495729b1dc (quotearg_buffer): Change escape_quoting_style so that it no longer escapes ` '.
Suggestion from Paul Eggert.
1999-01-11 03:11:15 +00:00
Jim Meyering
75e5479220 (decode_switches): Now that escape_quoting_style no longer
escapes the SPACE character, arrange for SPACEs to be quoted here.
1999-01-11 03:10:59 +00:00
Jim Meyering
db0dadb263 (ARGMATCH_QUOTING_STYLE): Change from c_quoting_style to escape_quoting_style.
(argmatch_invalid): Now that the quoted quantity is no longer double
quoted, remove the code that removed leading and trailing double quotes.
1999-01-11 03:10:19 +00:00
Jim Meyering
3c21ae616f *** empty log message *** 1999-01-11 02:49:20 +00:00
Jim Meyering
ac25bd69bf (main) [TEST_CANON_HOST]: Add a simple test driver. 1999-01-11 02:46:33 +00:00
Jim Meyering
87364848e2 import new version 1999-01-11 02:40:27 +00:00
Jim Meyering
015d9b3c3f . 1999-01-10 23:47:16 +00:00
Jim Meyering
8a3a8c7126 . 1999-01-10 23:44:44 +00:00
Jim Meyering
003cf75202 *** empty log message *** 1999-01-10 22:51:50 +00:00
Jim Meyering
51f90506ba Use the new 3-arg form of AC_DEFINE instead of my gross kludge. 1999-01-10 22:51:01 +00:00
Jim Meyering
4a0813fecb Use the new 3-arg form of AC_DEFINE instead of my gross kludge. 1999-01-10 22:50:14 +00:00
Jim Meyering
ee991227ee Use the new 3-arg form of AC_DEFINE instead of my gross kludge. 1999-01-10 22:49:24 +00:00
Jim Meyering
4d57863e63 Use the new 3-arg form of AC_DEFINE instead of my gross kludge. 1999-01-10 22:48:12 +00:00
Jim Meyering
d6c548c783 Use the new 3-arg form of AC_DEFINE instead of my gross kludge. 1999-01-10 22:47:37 +00:00
Jim Meyering
357c999a88 Use the new 3-arg form of AC_DEFINE instead of my gross kludge. 1999-01-10 22:47:01 +00:00
Jim Meyering
6222e67d7f Use 3-arg form of AC_DEFINE instead of the
AC_CHECK_FUNCS hack.  Now, it's still a hack, but at least the
comments in config.h.in are meaningful.
1999-01-10 22:45:03 +00:00
Jim Meyering
110bd4aa65 bump serial# 1999-01-10 22:43:13 +00:00
Jim Meyering
97d75acb2c Require autoconf-2.13 here. 1999-01-10 22:42:57 +00:00
Jim Meyering
8d598fb33d *** empty log message *** 1999-01-10 22:06:15 +00:00
Jim Meyering
ceb02a40aa *** empty log message *** 1999-01-10 14:57:07 +00:00
Jim Meyering
ea9ec4ab46 By default, don't use the included regex.c on systems
with glibc 2.  Suggestion from Uli Drepper.
1999-01-10 14:57:00 +00:00
Jim Meyering
37f6675617 *** empty log message *** 1999-01-09 21:20:02 +00:00
Jim Meyering
a9583f3841 *** empty log message *** 1999-01-09 16:25:02 +00:00
Jim Meyering
fd008ba80b declare `match' 1999-01-09 16:21:40 +00:00
Jim Meyering
1eb017af63 New option: --all-repeated (-D).
(output_all_repeated) [output_mode]: New enum value.
(usage): Describe it.
(writeline): Test for new mode.
(check_file): Likewise.
Based on patches from Jochen Hein and Florin Iucha.
(main): Diagnose `too many arguments'.
1999-01-09 16:16:18 +00:00
Jim Meyering
7a545dda54 Add tests from Jochen Hein. 1999-01-09 16:15:32 +00:00
Jim Meyering
27aafa985a (null-1): Add test from Jochen Hein. 1999-01-09 15:44:27 +00:00
Jim Meyering
df9cb5d5c0 s/max_n_consecutive_size_changes/max_n_consecutive_size_changes_between_opens/ 1999-01-09 14:21:32 +00:00
Jim Meyering
375b687738 (parse_obsolescent_option): Interpret `number' as decimal.
(parse_options): Likewise.
Reported by Kamal Paul Nigam.

New option: --max-unchanged-stats=N.
New option: --max-n-consecutive-size-changes=N.
1999-01-09 14:19:40 +00:00
Jim Meyering
955e21bb83 protoize 1999-01-07 03:43:01 +00:00
Jim Meyering
29547b55e4 import latest 1999-01-06 16:09:14 +00:00
Jim Meyering
15633a30c4 *** empty log message *** 1999-01-05 17:51:51 +00:00
Jim Meyering
6522d1a579 *** empty log message *** 1999-01-05 05:10:14 +00:00
Jim Meyering
dbe0ba8119 *** empty log message *** 1999-01-05 05:09:52 +00:00
Jim Meyering
ec29f8c718 *** empty log message *** 1999-01-05 04:38:35 +00:00
Jim Meyering
d7d06726a7 . 1999-01-05 04:29:34 +00:00
Jim Meyering
2b8ef64969 *** empty log message *** 1999-01-05 04:29:16 +00:00
Jim Meyering
5118d57563 (main): remove unused `i' 1999-01-04 20:16:31 +00:00
Jim Meyering
6bff151edc remove strcasecmp.cin 1999-01-04 20:14:26 +00:00
Jim Meyering
f8453c637e *** empty log message *** 1999-01-04 20:09:28 +00:00
Jim Meyering
551f17ed6f *** empty log message *** 1999-01-03 15:47:46 +00:00
Jim Meyering
944dc00d0c (usage): Remove third program_name argument -- there
were only two `%s' in the format string.
1999-01-03 15:47:38 +00:00
Jim Meyering
e38501be52 *** empty log message *** 1999-01-02 20:38:45 +00:00
Jim Meyering
7b36cfca74 (argmatch_invalid): Remove double quotes from the
offending quoted argument before using it in explanatory diagnostic.
Use a single fprintf stmt.
1999-01-02 20:35:06 +00:00
Jim Meyering
75b8fb688f . 1999-01-02 20:07:41 +00:00
Jim Meyering
5667ae159f *** empty log message *** 1999-01-02 20:07:04 +00:00
Jim Meyering
88d0241214 Replace strcasecmp and strncasecmp. 1999-01-02 20:06:59 +00:00
Jim Meyering
c3f528b978 . 1999-01-02 19:38:36 +00:00
Jim Meyering
fb888f11ab *** empty log message *** 1999-01-02 19:38:05 +00:00
Jim Meyering
731688ecd5 (tsort): Use a single call to error instead of two to fprintf.
(main): Remove `%s: ' prefix on format string.
1999-01-02 19:37:56 +00:00
Jim Meyering
7004c53ab4 (parse_options): Use XARGMATCH in place of argmatch. 1999-01-02 19:35:46 +00:00
Jim Meyering
501ee2ebd6 (format_vals): New array.
(main): Use XARGMATCH in place of argmatch.
1999-01-02 19:35:18 +00:00
Jim Meyering
e159d72704 *** empty log message *** 1999-01-02 19:33:33 +00:00
Jim Meyering
a31aa355b3 tsort docs 1999-01-02 19:32:14 +00:00
Jim Meyering
69834c7c98 (strcasecmp.c strncasecmp.c): Remove rules. 1999-01-02 19:31:19 +00:00
Jim Meyering
bfea519d18 . 1999-01-02 19:30:32 +00:00
Jim Meyering
51282eaf75 *** empty log message *** 1999-01-02 19:30:05 +00:00
Jim Meyering
1e25b6e3d3 Adapt to use new interface to XARGMATCH. 1999-01-02 19:29:47 +00:00
Jim Meyering
38acb920eb . 1999-01-02 19:28:42 +00:00
Jim Meyering
8b3cbe63d8 (get_version): Adapt to use new interface to XARGMATCH. 1999-01-02 19:28:31 +00:00
Jim Meyering
c7c2516a4d (XARGMATCH): Don't return a value; instead, modify a parameter.
Add a `Die_stmt' parameter.
Add parentheses.
1999-01-02 18:33:08 +00:00
Jim Meyering
fa7427c2ea (__xargmatch_internal): Remove now-unused function.
(argmatch_to_argument): Add `const' attribute to first parameter.
1999-01-02 18:32:50 +00:00
Jim Meyering
c39158b8ec *** empty log message *** 1999-01-02 16:36:25 +00:00
Jim Meyering
041b69340d use XARGMATCH, not XARGCASEMATCH 1999-01-02 16:35:55 +00:00
Jim Meyering
f4db32ef36 Add #ifdefs so it can be used for strncasecmp, too. 1999-01-02 15:55:52 +00:00
Jim Meyering
b966f347ee *** empty log message *** 1999-01-02 15:55:44 +00:00
Jim Meyering
49f27cd70e *** empty log message *** 1999-01-02 12:45:50 +00:00
Jim Meyering
2bb9d3c528 Move inclusion of assert.h to follow that of stdio.h.
Some losing systems require this.
Use STREQ macro instead of strcmp in a few places.
1999-01-02 05:54:07 +00:00
Jim Meyering
b311b41561 Remove definition of setlocale.
Remove definitions of bindtextdomain and textdomain.
1999-01-02 05:30:07 +00:00
Jim Meyering
0cb6dcf585 Include locale.h and libintl.h, and define `_()'.
Mark translatable strings.
1999-01-02 05:27:32 +00:00
Jim Meyering
e213c687aa *** empty log message *** 1999-01-02 05:17:17 +00:00
Jim Meyering
cb1d4eb4f2 (make_dir): New function, factored out of make_path.
(make_path): Use make_dir rather than open-coding it twice.
This effectively reverses the order of the latter pair of stat/mkdir
calls and fixes a race condition bug whereby one of two concurrent
`mkdir -p' processes could fail with EEXIST.
1999-01-02 05:16:57 +00:00
Jim Meyering
45ed22a319 *** empty log message *** 1999-01-02 02:34:47 +00:00
Jim Meyering
977e79ed76 Include readtokens.h.
(zeros): Rename global from `rr'.
(getstr): Remove function.
(tsort) Use readtoken instead of getstr.
1999-01-02 02:34:11 +00:00
Jim Meyering
a842553181 *** empty log message *** 1999-01-01 23:48:23 +00:00
Jim Meyering
1f6728404c *** empty log message *** 1999-01-01 23:46:52 +00:00
Jim Meyering
1b4f931bf4 . 1999-01-01 23:31:36 +00:00
Jim Meyering
2da1b2088f fix typo in comment 1999-01-01 22:55:53 +00:00
Jim Meyering
b99ab6e97d (PATH_MAX_IN_DIR) [HAVE_UNISTD_H]: New macro, for max
file name characters in a given directory.
(tempname): Make sure the temp file name is unique even if long
file names aren't supported.
1999-01-01 22:51:58 +00:00
Jim Meyering
13e5d17494 (cwrite) [O_BINARY]: Write output in binary mode.
(main) [O_BINARY]: Read input in binary mode.
1999-01-01 22:49:44 +00:00
Jim Meyering
f92719d4dc (bsd_sum_file, sysv_sum_file) [O_BINARY]: Read input in binary mode. 1999-01-01 22:48:51 +00:00
Jim Meyering
e60b747ade (tail_lines, tail_bytes) [O_BINARY]: Use binary I/O when appropriate. 1999-01-01 22:48:03 +00:00
Jim Meyering
7cb251e782 Add comments about peculiarities of Textutils operation on MS-DOS/MS-Windows. 1999-01-01 22:44:21 +00:00
Jim Meyering
f3ade72018 (wc): Use binary mode for input. 1999-01-01 22:42:36 +00:00
Jim Meyering
59998135d0 (unexpand): Use binary I/O where appropriate. 1999-01-01 22:41:58 +00:00
Jim Meyering
87f9e231c3 (main) [O_BINARY]: Use binary I/O when appropriate. 1999-01-01 22:40:48 +00:00
Jim Meyering
8e7da4a47c (skip, read_char, read_block) [O_BINARY]: Switch input
stream to binary mode.
1999-01-01 22:33:15 +00:00
Jim Meyering
f54c8f6d80 (OPENOPTS) [O_BINARY]: Use binary I/O when non-zero argument.
(md5_file) [O_BINARY]: Switch redirected stdin to binary mode.
(main) [O_BINARY]: Use binary reads by default on those systems
which care about the difference.
1999-01-01 22:29:32 +00:00
Jim Meyering
9eedfd2482 (head_bytes, head_lines) [O_BINARY]: Use binary I/O. 1999-01-01 22:28:40 +00:00
Jim Meyering
a498f54f37 (expand): Use binary I/O where appropriate. 1999-01-01 22:27:36 +00:00
Jim Meyering
4394c38352 (cksum) [O_BINARY]: Read redirected stdin in binary mode. 1999-01-01 22:22:02 +00:00
Jim Meyering
7914fb4069 (usage) [O_BINARY]: Describe -B,--binary option.
(main) [O_BINARY]: binary_files, binary_output, file_open_mode:
new variables. 	Add --binary to long_options[].  Switch stdin and
stdout to binary mode unless file contents are not important
anyway.  Open files in binary mode when required.
1999-01-01 22:20:23 +00:00
Jim Meyering
e6e8ae14c9 . 1999-01-01 22:11:50 +00:00
Jim Meyering
c704267b26 *** empty log message *** 1999-01-01 21:56:21 +00:00
Jim Meyering
3972420f3b (parse_options): Use XARGCASEMATCH in place of argmatch. 1999-01-01 21:47:08 +00:00
Jim Meyering
94c2a11f47 *** empty log message *** 1999-01-01 19:31:43 +00:00
Jim Meyering
d15c8cbe43 *** empty log message *** 1999-01-01 19:30:08 +00:00
Jim Meyering
b5c28b7097 Rename globals N and R so they don't shadow locals.
(tsort): Rename from `sort'.
1999-01-01 19:29:31 +00:00
Jim Meyering
06adce5358 remove trailing blanks 1999-01-01 19:05:47 +00:00
Jim Meyering
d9ce52992c from Mark Kettenis 1999-01-01 19:05:05 +00:00
Jim Meyering
83db4858d0 *** empty log message *** 1999-01-01 17:43:50 +00:00
Jim Meyering
21b87a6ab7 (quoting_style_vals): New public array. 1999-01-01 17:43:10 +00:00
Jim Meyering
975daefaad Add comments.
(xcalloc, xmalloc, xrealloc): Remove prototypes.
(calloc): Remove `#ifdef NOT_USED' that used to hide this function.
1999-01-01 17:40:08 +00:00
Jim Meyering
3b3e52352c Add comments.
(PARAMS, XMALLOC, XCALLOC, XREALLOC): Define.
Based on changes from Akim Demaille.
1999-01-01 17:36:43 +00:00
Jim Meyering
aa014b906c remove leading _ from _ARGMATCH_H_ 1999-01-01 17:34:18 +00:00
Jim Meyering
2a5e98c9a4 *** empty log message *** 1999-01-01 07:10:00 +00:00
Jim Meyering
dcaa4b656e . 1999-01-01 07:09:08 +00:00
Jim Meyering
5c6d6248e9 . 1999-01-01 07:08:54 +00:00
Jim Meyering
f8be5ac8df *** empty log message *** 1999-01-01 07:06:23 +00:00
Jim Meyering
32acfd66d0 (quotearg_n_options): Make options' parameter be const'. 1999-01-01 07:03:16 +00:00
Jim Meyering
dd16dfb3e3 (quotearg_buffer): Cast -1 to size_t before comparing.
(quotearg_n): Change type of 1st parameter from int to unsigned int.
(quotearg_n_options): Likewise.
From Akim Demaille.
1999-01-01 07:02:16 +00:00
Jim Meyering
2d4f0fea3a (humblock): Use ARGMATCH in place of argmatch. 1999-01-01 06:47:04 +00:00
Jim Meyering
46166ad9b7 (get_version): Use XARGCASEMATCH in place of argmatch & co. 1999-01-01 06:43:04 +00:00
Jim Meyering
bf97e5a0b8 . 1998-12-31 23:24:08 +00:00
Jim Meyering
422a7fdc78 (libfu_a_SOURCES): Remove strcasecmp.c.
(BUILT_SOURCES): Add strcasecmp.c and strncasecmp.c.
(EXTRA_DIST): Add strcasecmp.cin.
(strcasecmp.c): New rule.
(strncasecmp.c): New rule.
1998-12-31 22:03:13 +00:00
Jim Meyering
19270e99bc *** empty log message *** 1998-12-31 21:59:58 +00:00
Jim Meyering
91dc8874b0 (main): Use XARGCASEMATCH in place of argmatch & co. 1998-12-31 21:59:42 +00:00
Jim Meyering
58d6acdfd3 (indicator_style_types): New variable.
(format_types): Rename from `formats'.
(color_args): Remove unnecessary `no' string.
(color_types): Remove corresponding `color_never' entry.
(main): Use ARGMATCH_TO_ARGUMENT.
(decode_switches): Use ARGCASEMATCH instead of argmatch code
in each of several cases.
From Akim Demaille.
1998-12-31 21:49:36 +00:00
Jim Meyering
431652a886 (main): Use XARGCASEMATCH in place of argmatch & co. 1998-12-31 21:41:04 +00:00
Jim Meyering
2e487bb6da fix typo 1998-12-31 18:12:40 +00:00
Jim Meyering
c92163b6e9 white space changes 1998-12-31 18:10:53 +00:00
Jim Meyering
8782f7a817 (strncasecmp): Move to a separate file.
Add curly braces around some one-stmt-but-multiline blocks.
1998-12-31 18:07:23 +00:00
Jim Meyering
a58c222775 *** empty log message *** 1998-12-31 17:53:59 +00:00
Jim Meyering
44538bbbd8 remove trailing blanks 1998-12-31 16:19:31 +00:00
Jim Meyering
65df533705 lots of changes from Akim Demaille. 1998-12-31 16:18:46 +00:00
Jim Meyering
392902344a lots of changes from Akim Demaille. 1998-12-31 16:18:13 +00:00
Jim Meyering
bf588140c5 (addext): Protoize.
Indent cpp directives to match nesting.
1998-12-31 14:56:20 +00:00
Jim Meyering
0f2fbadbea (posix_time_parse): Change type of index `i' from int to unsigned int. 1998-12-31 14:53:16 +00:00
Jim Meyering
50225cad77 Fix warnings from gcc -W -Wall
(__attribute__): Define.
(ATTRIBUTE_UNUSED): Define.
(yyerror): Mark parameter as unused with ATTRIBUTE_UNUSED.
(MonthDayTable): Add initializers for last entry.
(UnitsTable): Likewise.
(OtherTable): Likewise.
(MilitaryTable): Likewise.
1998-12-31 14:37:21 +00:00
Jim Meyering
b15af47b49 . 1998-12-22 22:46:53 +00:00
Jim Meyering
9199178402 *** empty log message *** 1998-12-22 21:57:52 +00:00
Jim Meyering
f82c03de2d . 1998-12-20 13:50:13 +00:00
Jim Meyering
1a162983f4 *** empty log message *** 1998-12-20 02:31:54 +00:00
Jim Meyering
63ceb4f304 Use absolute path for final rm. 1998-12-20 02:31:47 +00:00
Jim Meyering
12838cec9b remove .saved-state 1998-12-19 21:07:32 +00:00
Jim Meyering
b5bfb1d399 *** empty log message *** 1998-12-19 17:21:00 +00:00
Jim Meyering
9497429d9b break long line 1998-12-19 17:20:03 +00:00
Jim Meyering
b80e127286 break long line 1998-12-19 17:19:13 +00:00
Jim Meyering
e53076d42c split long line 1998-12-19 17:18:23 +00:00
Jim Meyering
01fe7e76f4 . 1998-12-19 13:54:04 +00:00
Jim Meyering
bcf9971e84 *** empty log message *** 1998-12-19 13:53:37 +00:00
Jim Meyering
e107deb940 (my-distcheck): Run make with CFLAGS='-Wformat -Werror'. 1998-12-19 13:53:21 +00:00
Jim Meyering
7bf1f374e0 . 1998-12-18 22:11:39 +00:00
Jim Meyering
ede498bfb0 remove semicolon -- from Lars 1998-12-18 15:32:54 +00:00
Jim Meyering
2b00f4f4b6 *** empty log message *** 1998-12-18 15:32:29 +00:00
Jim Meyering
e93093d5e1 *** empty log message *** 1998-12-18 14:49:38 +00:00
Jim Meyering
f2606a6ba0 *** empty log message *** 1998-12-18 14:49:30 +00:00
Jim Meyering
58a77bf4f6 (Makefile.am): Simplify rule.
Based on suggestion from Lars Hecking.
1998-12-18 14:49:01 +00:00
Jim Meyering
344f43313d *** empty log message *** 1998-12-18 14:48:32 +00:00
Jim Meyering
e68c81a48f (copy_internal): Remove errnoeous `%s: ' prefix
from format string.  From Michiel Bacchiani.
1998-12-18 14:22:50 +00:00
Jim Meyering
0e49de1acb *** empty log message *** 1998-12-18 14:22:30 +00:00
Jim Meyering
a3e473c522 (UID_T_MAX, GID_T_MAX): Define them here instead. 1998-12-18 14:09:29 +00:00
Jim Meyering
6408b52640 (UID_T_MAX, GID_T_MAX): Remove definitions. 1998-12-18 14:09:19 +00:00
Jim Meyering
e28821d5f8 (MAXGID): Define.
Use gid_t (not int) as the type for `group' variables.
(parse_group): Use MAXGID, not INT_MAX.
1998-12-18 14:07:58 +00:00
Jim Meyering
621691b296 New options for tail: --follow=name, --follow=descriptor, --allow-missing
(Follow_mode): New enum.
(n_live_files): New function.
(tail_forever): Avoid starvation with --follow=name and a
continually-growing unlinked or renamed file.
1998-12-17 13:56:25 +00:00
Jim Meyering
72c9472cc0 import latest 1998-12-16 13:41:13 +00:00
Jim Meyering
7dfd5ca1cd add comment about opening exclusively 1998-12-13 19:26:35 +00:00
Jim Meyering
c5195207db . 1998-12-13 19:19:07 +00:00
Jim Meyering
8a644a90ef . 1998-12-13 19:01:59 +00:00
Jim Meyering
29ab746b79 Don't include stdlib.h and declare malloc and free.
This works around Solaris 2.7's conflicting prototype.
Reported by Karl Berry.
1998-12-13 18:04:11 +00:00
Jim Meyering
7cf7f3706f (EXTRA_DIST): Add xstat.in. 1998-12-13 17:19:51 +00:00
Jim Meyering
297e2cb744 . 1998-12-12 06:22:56 +00:00
Jim Meyering
9507d3559a In order to distinguish col(umn|or):
(init_column_info): Renamed from init_col_info.
(struct column_info): Renamed from struct col_info.
(struct color_ext_type): Renamed from struct col_ext_type.
From Akim Demaille.
1998-12-12 06:20:42 +00:00
Jim Meyering
876d24a3ed * src/ls.c: Group DIRED's code together.
(full_time, inhibit_group, col_ext_type): Declare static.
(dired_dump_obstack): Apply sizeof to variable, instead of its type.
(parse_ls_color): Rename ext2 as e2.  Move into the block where it is used.
From Akim Demaille.
1998-12-12 06:11:24 +00:00
Jim Meyering
1384f07f77 . 1998-12-12 05:48:25 +00:00
Jim Meyering
8ff77278a2 *** empty log message *** 1998-12-12 05:46:44 +00:00
Jim Meyering
8c97b5c46e (lstat.c): Add rule to generate this from xstat.in.
(stat.c): Likewise.
1998-12-12 05:46:02 +00:00
Jim Meyering
4ff6b43025 *** empty log message *** 1998-12-12 05:45:39 +00:00
Jim Meyering
af36c75750 . 1998-12-12 05:45:29 +00:00
Jim Meyering
fd65b86607 (quotearg_buffer): Use 7' as the mask, not 3'.
From Bruno Haible.
1998-12-11 14:14:16 +00:00
Jim Meyering
bc0c0e635c *** empty log message *** 1998-12-11 14:13:40 +00:00
Jim Meyering
0e65b3e861 Add a test for the quotearg_buffer bug. 1998-12-11 14:13:29 +00:00
Jim Meyering
458aad90ab *** empty log message *** 1998-12-11 13:47:28 +00:00
Jim Meyering
74235b07fa *** empty log message *** 1998-12-11 13:39:42 +00:00
Jim Meyering
a17cdb1173 (main): Arrange to exit unsuccessfully when stime fails.
From Andreas Schwab.
1998-12-11 13:37:52 +00:00
Jim Meyering
b2747b91a8 import version 1.006 1998-12-11 13:34:23 +00:00
Jim Meyering
0963c4ba11 . 1998-12-07 06:26:12 +00:00
Jim Meyering
b4640ed990 (dir_name): Rename from dirname.
Make argument `const'.  Include "dirname.h"
1998-12-07 06:25:54 +00:00
Jim Meyering
1698d53f72 (noinst_HEADERS): Add dirname.h. 1998-12-07 06:25:29 +00:00
Jim Meyering
5ae5d486a9 . 1998-12-07 06:24:28 +00:00
Jim Meyering
ef234641de *** empty log message *** 1998-12-07 06:21:12 +00:00
Jim Meyering
52dedbfebb Use dir_name, not dirname. Include dirname.h. 1998-12-07 06:20:50 +00:00
Jim Meyering
f5e9896c18 . 1998-12-07 05:54:49 +00:00
Jim Meyering
572632b8eb *** empty log message *** 1998-12-07 05:54:29 +00:00
Jim Meyering
a467be8ae8 *** empty log message *** 1998-12-07 05:18:06 +00:00
Jim Meyering
5551e54672 *** empty log message *** 1998-12-07 05:14:42 +00:00
Jim Meyering
b7e610bfdb (rpmatch) [!ENABLE_NLS]: Hard-code tests to use ^[yY]' and ^[nN]'.
From Karl Heuer.
1998-12-07 05:14:07 +00:00
Jim Meyering
7e6c89fc63 *** empty log message *** 1998-12-07 05:12:48 +00:00
Jim Meyering
7273e22923 declare base_name 1998-12-07 04:35:20 +00:00
Jim Meyering
6f5e749ea6 *** empty log message *** 1998-12-07 04:33:20 +00:00
Jim Meyering
376d67374f *** empty log message *** 1998-12-07 03:12:21 +00:00
Jim Meyering
7d60769bea ansideclify 1998-12-07 03:12:10 +00:00
Jim Meyering
604b3b397d *** empty log message *** 1998-12-06 23:09:39 +00:00
Jim Meyering
a68f3dee80 add ls -R . test 1998-12-06 23:09:29 +00:00
Jim Meyering
dd3bad9b7c . 1998-12-06 23:09:14 +00:00
Jim Meyering
6207f6f804 Fix `ls -R .' formatting bug that broke mktexlsr.
Include path-concat.h.
(basename_is_dot_or_dotdot): New function, derived from
is_not_dot_or_dotdot.
(is_not_dot_or_dotdot): Remove function.
(extract_dirs_from_files): Use `!basename_is_dot_or_dotdot'
instead of is_not_dot_or_dotdot and use path_concat instead of attach.
1998-12-06 23:08:55 +00:00
Jim Meyering
16c8a66a54 (TESTS): s/quoting/tests/. 1998-12-06 23:03:32 +00:00
Jim Meyering
9069b306dc renamed from quote 1998-12-06 23:01:12 +00:00
Jim Meyering
76223aedef *** empty log message *** 1998-12-06 22:18:38 +00:00
Jim Meyering
2ec7385fb0 Redefine putenv before including stdlib.h to work
around Solaris 2.7's conflicting prototype.  Reported by Karl Berry.
1998-12-06 22:18:17 +00:00
Jim Meyering
46dd5092ee . 1998-12-06 21:06:22 +00:00
Jim Meyering
e5f51be9f1 . 1998-12-06 21:06:02 +00:00
Jim Meyering
1e422ea7ec (DOT_OR_DOTDOT): New definition (moved here from remove.c.). 1998-11-30 03:01:24 +00:00
Jim Meyering
9d7c18290e (DOT_OR_DOTDOT): Move definition from this file... 1998-11-30 03:00:51 +00:00
Jim Meyering
90dbea92c4 (dd_copy): Rename function from `copy'. 1998-11-30 02:58:21 +00:00
Jim Meyering
d9878753d1 (do_copy): Rename local: s/unused/copy_into_self/ 1998-11-30 02:57:43 +00:00
Jim Meyering
4dbf57ed78 (do_move): Don't arrange to remove DEST in the copied-into-self case. 1998-11-30 02:56:05 +00:00
Jim Meyering
438a33770b *** empty log message *** 1998-11-30 02:54:28 +00:00
Jim Meyering
f7cd44c64c (TESTS): Add hard-link-1. 1998-11-30 02:53:57 +00:00
Jim Meyering
32df3704e4 (copy_internal): Remove earlier (but less effective)
test for move/copy-into-self.
Instead, deduce the move-into-self condition from errno==EINVAL
after a failed rename.
1998-11-30 02:10:13 +00:00
Jim Meyering
955d2c6ae5 *** empty log message *** 1998-11-30 02:03:01 +00:00
Jim Meyering
75d5ed8b58 (movefile): Don't free new_dest.
Bob McCracken reported that mv couldn't handle certain combinations
of hard linked source files.
1998-11-30 02:01:18 +00:00
Jim Meyering
b9c6c84a8c handle VERBOSE 1998-11-30 00:46:14 +00:00
Jim Meyering
3c6a1e9f08 (TESTS): Add into-self-3. 1998-11-30 00:45:44 +00:00
Jim Meyering
bb6a835cc1 *** empty log message *** 1998-11-30 00:44:59 +00:00
Jim Meyering
78f7236408 don't mention package name in comments 1998-11-21 17:43:41 +00:00
Jim Meyering
976ca67266 tweak comment 1998-11-21 17:33:45 +00:00
Jim Meyering
aba712c3bc *** empty log message *** 1998-11-17 02:14:16 +00:00
Jim Meyering
3ec7a99af6 Double-quote the uname... expression. 1998-11-17 02:14:12 +00:00
Jim Meyering
d60ac7e850 (AC_LFS): Add support for HP-UX 10.20 and HP-UX 11. 1998-11-17 02:09:52 +00:00
Jim Meyering
4c15e09a2c *** empty log message *** 1998-11-16 05:51:31 +00:00
Jim Meyering
a1d63c6f15 *** empty log message *** 1998-11-15 17:43:26 +00:00
Jim Meyering
e781ee9e60 *** empty log message *** 1998-11-15 17:36:02 +00:00
Jim Meyering
9764f6e3e1 *** empty log message *** 1998-11-15 17:35:45 +00:00
Jim Meyering
e77961586a (error): Don't use strerror_r's return value. 1998-11-15 17:35:34 +00:00
Jim Meyering
11135e1307 *** empty log message *** 1998-11-14 15:33:42 +00:00
Jim Meyering
d8a0eef528 (cvs-dist): Search for `$tag:' rather than just $tag
to avoid matching a prefix of another tag.
1998-11-14 15:33:34 +00:00
Jim Meyering
b7657496c3 update from master copy 1998-11-14 15:00:39 +00:00
Jim Meyering
01c7f17f33 Correct comment. POSIX does not permit it to succeed. 1998-11-14 13:23:22 +00:00
Jim Meyering
a211252152 *** empty log message *** 1998-11-14 13:23:08 +00:00
Jim Meyering
24c0a0a99d Correct comment. POSIX does not permit it to succeed. 1998-11-14 13:22:58 +00:00
Jim Meyering
df521a1b29 revert-to-4.0-b7 1998-11-14 13:17:34 +00:00
Jim Meyering
686a7e9ff3 *** empty log message *** 1998-11-14 13:15:22 +00:00
Jim Meyering
1d738b51d1 revert backupfile change 1998-11-14 13:13:50 +00:00
Jim Meyering
84c2d0e52e revert-last-change 1998-11-14 13:13:10 +00:00
Jim Meyering
6c0c08eb29 back out last change: there is a better way 1998-11-11 05:16:09 +00:00
Jim Meyering
7de9edecfc (BACKUPFILE_EXIT_FAILURE): Define.
(get_version): Use it in place of EXIT_FAILURE.
1998-11-11 05:01:26 +00:00
Jim Meyering
9e3f43b368 [EXIT_FAILURE]: Define.
(get_version): Use EXIT_FAILURE as exit status rather than
hard-coding `2'.  From Franois Pinard.
1998-11-10 05:57:56 +00:00
Jim Meyering
d7b702d0d0 avoid new warnings from texinfo-1.12b 1998-11-08 16:20:00 +00:00
Jim Meyering
ed5b1cad23 . 1998-11-08 16:13:13 +00:00
Jim Meyering
532074e1c7 . 1998-11-08 03:49:22 +00:00
Jim Meyering
deef42170f *** empty log message *** 1998-11-08 03:44:44 +00:00
Jim Meyering
b808de586b *** empty log message *** 1998-11-08 03:42:44 +00:00
Jim Meyering
ac7f057d98 Rewrite to set HAVE_LSTAT_EMPTY_STRING_BUG. 1998-11-08 03:42:35 +00:00
Jim Meyering
2daa912c53 Rewrite to set HAVE_STAT_EMPTY_STRING_BUG. 1998-11-08 03:42:20 +00:00
Jim Meyering
7bf8c634eb . 1998-11-08 03:42:04 +00:00
Jim Meyering
c091e6fe83 [lstat]: Remove #undef.
(rpl_lstat): Protoize.  Use ENOENT, not EINVAL, to be consistent
with lib/stat.c.
1998-11-08 03:40:04 +00:00
Jim Meyering
dc61111cc6 (rpl_stat): Protoize.
(stat): Remove #undef.
1998-11-08 03:39:42 +00:00
Jim Meyering
920680fe4f [HAVE_LSTAT_EMPTY_STRING_BUG]: Define lstat to rpl_lstat and declare the latter. 1998-11-08 03:38:06 +00:00
Jim Meyering
c9f0e3d343 *** empty log message *** 1998-11-02 17:08:44 +00:00
Jim Meyering
b4c9bd2b7e . 1998-11-01 17:17:52 +00:00
Jim Meyering
453be366da latest from ftp.gnu.org 1998-11-01 16:41:46 +00:00
Jim Meyering
f51e80f564 *** empty log message *** 1998-11-01 05:26:06 +00:00
Jim Meyering
993a56e8e0 . 1998-11-01 01:04:11 +00:00
Jim Meyering
d8e4dccdca . 1998-11-01 01:02:24 +00:00
Jim Meyering
427e67b196 Rewrite to use new testing framework. 1998-11-01 00:52:32 +00:00
Jim Meyering
90ffddc87e . 1998-11-01 00:52:16 +00:00
Jim Meyering
8458f55338 *** empty log message *** 1998-11-01 00:52:06 +00:00
Jim Meyering
bf5ef10371 . 1998-11-01 00:51:26 +00:00
Jim Meyering
d087967041 . 1998-11-01 00:50:23 +00:00
Jim Meyering
cfb54dec88 *** empty log message *** 1998-11-01 00:49:44 +00:00
Jim Meyering
e1958a7253 *** empty log message *** 1998-11-01 00:12:41 +00:00
Jim Meyering
cf50a06294 (TESTS): Add new test `empty-name', but comment it out. 1998-11-01 00:12:07 +00:00
Jim Meyering
c96d9a880f *** empty log message *** 1998-11-01 00:09:44 +00:00
Jim Meyering
25bf05e45e update from master copy 1998-10-31 15:19:09 +00:00
Jim Meyering
99b35637c4 . 1998-10-25 14:30:46 +00:00
Jim Meyering
09b8756e33 . 1998-10-25 14:30:15 +00:00
Jim Meyering
9c5d11d5c5 . 1998-10-25 14:28:04 +00:00
Jim Meyering
bf6c2a07af *** empty log message *** 1998-10-25 14:12:47 +00:00
Jim Meyering
c729fe037e (TESTS): Add new test `unreadable'. But comment
it out since we're so close to release and since the test compares the
text of diagnostics that are likely to vary between systems.
(TEST_ENVIRONMENT): Add required framework.
1998-10-25 14:08:38 +00:00
Jim Meyering
02cde32c0a *** empty log message *** 1998-10-25 14:03:09 +00:00
Jim Meyering
7741f87086 *** empty log message *** 1998-10-25 13:58:56 +00:00
Jim Meyering
9e630b86cb (remove_cwd_entries): Don't apply CLOSEDIR to a NULL
pointer. (provoke with `mkdir -m 0100 x; rm -rf x')
Upon CLOSEDIR failure, set `status' to RM_ERROR, not RM_OK.
(remove_dir): Return `status', rather than always RM_OK.
1998-10-25 13:58:50 +00:00
Jim Meyering
2e19f14a91 *** empty log message *** 1998-10-23 02:08:48 +00:00
Jim Meyering
65b1a6ec82 (usage): Add mention of --version and --help. 1998-10-23 02:08:35 +00:00
Jim Meyering
06d1a87e3b *** empty log message *** 1998-10-18 14:18:22 +00:00
Jim Meyering
f417e8b9d4 . 1998-10-18 14:14:09 +00:00
Jim Meyering
4fb556ee0e Don't invoke localtime_r or gmtime_r unless it's the GNU C
library's localtime_r and gmtime_r; there are too many buggy
	implementations of localtime_r and gmtime_r out there, and
	it's not worth keeping track of all the different bugs.

	* strftime.c (__EXTENSIONS__): Remove.
	(my_strftime_gmtime_r): Renamed from gmtime_r; all uses changed.
	(my_strftime_localtime_r): Renamed from localtime_r; all uses changed.
	Base them on localtime/gmtime if not _LIBC.
1998-10-18 14:09:48 +00:00
Jim Meyering
c850393032 Don't invoke localtime_r or gmtime_r unless it's the GNU C
library's localtime_r and gmtime_r; there are too many buggy
	implementations of localtime_r and gmtime_r out there, and
	it's not worth keeping track of all the different bugs.

	* mktime.c (__EXTENSIONS__, HAVE_LOCALTIME_R): Remove.
	(my_mktime_localtime_r): Renamed from localtime_r; all uses changed.
	Base it on localtime unless _LIBC.
1998-10-18 14:08:35 +00:00
Jim Meyering
61ece919c6 (jm_CHECK_DECL_LOCALTIME_R): Remove macro. 1998-10-18 14:08:09 +00:00
Jim Meyering
843b44b3f7 *** empty log message *** 1998-10-18 01:50:53 +00:00
Jim Meyering
5edb65b5c4 . 1998-10-18 01:49:44 +00:00
Jim Meyering
a71cb7cad1 Declare localtime_r if necessary. 1998-10-18 01:11:35 +00:00
Jim Meyering
e2d1b297e7 Declare localtime_r if necessary. 1998-10-18 01:10:21 +00:00
Jim Meyering
70bea7fd3e *** empty log message *** 1998-10-18 01:08:54 +00:00
Jim Meyering
ec936db8d7 (jm_CHECK_DECLS): Reflect interface change.
(jm_CHECK_DECL_LOCALTIME_R): New macro.
1998-10-18 01:08:22 +00:00
Jim Meyering
2b69ce2d89 (jm_CHECK_DECLARATION): Don't hard-code which headers to
include, though we still hard-code the `require'-like AC_CHECK_HEADERS
calls for those previously hard-coded headers.  Instead, take a new parameter.
(jm_CHECK_DECLARATIONS): Reflect interface change.
1998-10-18 01:07:17 +00:00
Jim Meyering
0a25bc498d Test for spring-forward gap before long-running test. 1998-10-18 00:58:07 +00:00
Jim Meyering
6cc7e13732 (run_tests): Run $prog with --version only if $verbose. 1998-10-17 12:47:21 +00:00
Jim Meyering
0e1c643956 *** empty log message *** 1998-10-17 12:39:57 +00:00
Jim Meyering
2e29b32116 Some systems require <unistd.h> to be included before <time.h> for
localtime_r to be declared properly.
1998-10-17 12:39:30 +00:00
Jim Meyering
082787996c Use the more portable "TZ=PST8PDT,M4.1.0,M10.5.0"
instead of "TZ=America/Vancouver".  From Paul Eggert.
1998-10-14 21:27:52 +00:00
Jim Meyering
edef42bf40 *** empty log message *** 1998-10-12 03:51:35 +00:00
Jim Meyering
efce5c3bdf . 1998-10-12 03:50:44 +00:00
Jim Meyering
18ac22d2fc . 1998-10-12 03:50:24 +00:00
Jim Meyering
c20eae80c7 add jm_ prefix to cache variable 1998-10-12 03:20:21 +00:00
Jim Meyering
6f43239736 *** empty log message *** 1998-10-12 02:56:35 +00:00
Jim Meyering
c6b7de061f *** empty log message *** 1998-10-12 02:55:35 +00:00
Jim Meyering
10d64e02c4 Require jm_AM_FUNC_MKTIME, not AM_FUNC_MKTIME. 1998-10-12 02:55:28 +00:00
Jim Meyering
852a30165b (jm_AM_FUNC_MKTIME): New file and macro. 1998-10-12 02:55:17 +00:00
Jim Meyering
e4d0cf679c . 1998-10-12 02:51:10 +00:00
Jim Meyering
57c0968203 *** empty log message *** 1998-10-12 02:51:01 +00:00
Jim Meyering
761ed79f4d (_REENTRANT): Define again -- linux-2.0.33 needs it. 1998-10-12 02:00:59 +00:00
Jim Meyering
f49ea966c3 *** empty log message *** 1998-10-12 01:18:08 +00:00
Jim Meyering
8c6d49c84d *** empty log message *** 1998-10-11 23:04:04 +00:00
Jim Meyering
061a10d1ff (__mktime_internal): When the requested time falls
in a spring-forward gap of size DT, return a time that is DT
away from the requested time, preferring a time whose tm_isdst
differs from the requested value.  Bump the max number of
probes from 4 to 6 to account for the extra probes needed to
discover a spring-forward gap in the worst case.
1998-10-11 23:03:41 +00:00
Jim Meyering
787dfe9c83 . 1998-10-10 18:38:05 +00:00
Jim Meyering
9e3949fa6f . 1998-10-10 18:37:44 +00:00
Jim Meyering
62b64a0e92 *** empty log message *** 1998-10-08 12:24:40 +00:00
Jim Meyering
37c289ea31 (my_mktime_localtime_r): Renamed from localtime_r.
Define also if HAVE_LOCALTIME_R && defined (localtime_r), with
a body that merely expands localtime_r; this works around a
bug in Digital Unix 4.0A and 4.0D.
1998-10-08 12:19:48 +00:00
Jim Meyering
297a13a5a3 import 1.5b 1998-10-06 04:07:25 +00:00
Jim Meyering
2aae4df6ef *** empty log message *** 1998-10-05 12:27:03 +00:00
Jim Meyering
8670ecb6cb (long_options): Add entry for --suffix=SUFFIX option. 1998-10-05 12:23:21 +00:00
Jim Meyering
1b1bcc5e29 *** empty log message *** 1998-10-05 04:30:40 +00:00
Jim Meyering
03d1ff2dea *** empty log message *** 1998-10-05 04:24:42 +00:00
Jim Meyering
1381664a56 . 1998-10-05 04:21:39 +00:00
Jim Meyering
3ed45d5062 back out last change 1998-10-05 04:20:33 +00:00
Jim Meyering
dfd3465715 half-hearted attempt to support file name quoting 1998-10-05 04:20:12 +00:00
Jim Meyering
86488adef8 *** empty log message *** 1998-10-05 04:05:41 +00:00
Jim Meyering
3564013e18 add double quotes 1998-10-05 03:34:17 +00:00
Jim Meyering
a019f34623 (TESTS_ENVIRONMENT): Define PERL. 1998-10-05 03:30:41 +00:00
Jim Meyering
0e2247a55b *** empty log message *** 1998-10-04 13:53:18 +00:00
Jim Meyering
253d68786d *** empty log message *** 1998-10-04 13:50:52 +00:00
Jim Meyering
f6a19e2c78 . 1998-10-04 13:15:15 +00:00
Jim Meyering
f7880af3db . 1998-10-04 03:23:24 +00:00
Jim Meyering
ce55ab29b1 . 1998-10-04 03:11:32 +00:00
Jim Meyering
6bbbdce4d8 *** empty log message *** 1998-10-04 03:08:54 +00:00
Jim Meyering
5027e9d281 *** empty log message *** 1998-10-04 03:06:22 +00:00
Jim Meyering
701e23d1e4 (split_3): Rename local variable, to `escaped_filename'.
(main): Output the leading backslash not just when there's a newline
in the file name, but also when there's a backslash.
1998-10-04 03:05:37 +00:00
Jim Meyering
516e60ed10 Add tests with filenames containing newline and backslash characters. 1998-10-04 03:01:12 +00:00
Jim Meyering
61c04cdaed use debug, not verbose 1998-10-04 02:54:15 +00:00
Jim Meyering
3d58b592ed rewrite for Fetish.pm 1998-10-04 02:51:30 +00:00
Jim Meyering
71aa0114bb . 1998-10-04 02:45:26 +00:00
Jim Meyering
cbd698b247 . 1998-10-04 01:08:18 +00:00
Jim Meyering
bf887b6800 . 1998-10-04 01:04:55 +00:00
Jim Meyering
d8827d033a *** empty log message *** 1998-10-04 01:03:51 +00:00
Jim Meyering
434df90510 (TESTS_ENVIRONMENT): Add PATH. 1998-10-04 01:03:26 +00:00
Jim Meyering
483b1367bc *** empty log message *** 1998-10-03 19:51:36 +00:00
Jim Meyering
df694b9339 . 1998-10-03 19:50:10 +00:00
Jim Meyering
dcd55a5277 . 1998-10-03 19:47:20 +00:00
Jim Meyering
742600e30d Invoke program with --manhelp option only if
--name=STRING not specified.  Otherwise, this would fail with `yes'.
1998-10-03 19:15:41 +00:00
Jim Meyering
62db78c613 *** empty log message *** 1998-10-03 17:39:49 +00:00
Jim Meyering
f439fa811c . 1998-10-03 17:27:28 +00:00
Jim Meyering
169bead160 . 1998-10-03 17:21:02 +00:00
Jim Meyering
2ebff08169 (main): Update to use new version of posixtime. 1998-10-03 17:18:52 +00:00
Jim Meyering
5b1af11410 . 1998-10-03 16:49:01 +00:00
Jim Meyering
62ff4ae63c Make `VERBOSE' be a little more verbose. 1998-10-03 16:47:44 +00:00
Jim Meyering
9ef5ce0581 (TESTS): Add i-1. 1998-10-03 16:46:27 +00:00
Jim Meyering
d21a17dbb4 . 1998-10-03 16:45:10 +00:00
Jim Meyering
cfd0d53368 . 1998-10-03 05:00:26 +00:00
Jim Meyering
432e6df3e4 Include /bin/sh driver framework. 1998-10-03 04:59:26 +00:00
Jim Meyering
95fd28c290 *** empty log message *** 1998-10-03 04:58:28 +00:00
Jim Meyering
2239a0ff2c . 1998-10-03 04:58:21 +00:00
Jim Meyering
0345ac460a . 1998-10-03 04:54:54 +00:00
Jim Meyering
8b0f15401b . 1998-10-03 04:52:09 +00:00
Jim Meyering
af988b5428 . 1998-10-03 04:43:55 +00:00
Jim Meyering
2e4ebbf522 *** empty log message *** 1998-10-02 14:31:24 +00:00
Jim Meyering
84fd56fe2a *** empty log message *** 1998-10-02 14:31:11 +00:00
Jim Meyering
a23ce11f2a latest from ftp.gnu.org 1998-10-02 03:21:04 +00:00
Jim Meyering
a7dea23c83 . 1998-09-29 03:54:30 +00:00
Jim Meyering
453a3cbd73 . 1998-09-29 03:41:16 +00:00
Jim Meyering
3da2cfc475 *** empty log message *** 1998-09-29 03:41:05 +00:00
Jim Meyering
22c794bf9b *** empty log message *** 1998-09-29 03:34:42 +00:00
Jim Meyering
0c47bc711f *** empty log message *** 1998-09-29 03:21:10 +00:00
Jim Meyering
cdd0e0a757 *** empty log message *** 1998-09-29 03:13:25 +00:00
Jim Meyering
0bb1cba1bc . 1998-09-29 03:12:27 +00:00
Jim Meyering
662777cad5 *** empty log message *** 1998-09-29 02:48:10 +00:00
Jim Meyering
b7e1eadbf8 (copy_internal): Do honor `n' reply in move-mode.
Otherwise, `touch a b; echo n|mv -i a b' would remove b.
From Bernd Leibing.
1998-09-28 16:15:00 +00:00
Jim Meyering
685d842096 *** empty log message *** 1998-09-28 16:14:33 +00:00
Jim Meyering
a3e6379a2c *** empty log message *** 1998-09-28 03:36:44 +00:00
Jim Meyering
3e99e73234 (main): Decrement optind when we find an `option' that
looks like -N.  Reported by Clark Morgan.
1998-09-28 03:35:51 +00:00
Jim Meyering
efcde72ce7 (my-distcheck): Tweak. 1998-09-27 19:37:57 +00:00
Jim Meyering
7155f1e45a *** empty log message *** 1998-09-27 19:37:51 +00:00
Jim Meyering
59463cd869 (alpha): New target. 1998-09-27 18:44:59 +00:00
Jim Meyering
998842665b (alpha): New target. 1998-09-27 18:44:34 +00:00
Jim Meyering
63a8243257 *** empty log message *** 1998-09-27 17:54:50 +00:00
Jim Meyering
9d806a54bf *** empty log message *** 1998-09-27 17:45:22 +00:00
Jim Meyering
855f6816d6 *** empty log message *** 1998-09-27 17:45:00 +00:00
Jim Meyering
2b53ea5791 Protect against multiple inclusion.
From Akim Demaille.
1998-09-27 17:44:49 +00:00
Jim Meyering
80768df1f5 *** empty log message *** 1998-09-27 17:36:17 +00:00
Jim Meyering
61f48952f2 add missing close paren 1998-09-27 17:31:29 +00:00
Jim Meyering
095d748e53 . 1998-09-27 17:30:06 +00:00
Jim Meyering
f5df8ad7f0 . 1998-09-27 17:27:38 +00:00
Jim Meyering
aaa4b67c31 (jm_MACROS): Require jm_FUNC_FNMATCH. 1998-09-27 17:26:55 +00:00
Jim Meyering
4a5b97a91e . 1998-09-27 16:45:42 +00:00
Jim Meyering
8589763111 Makefile.am 1998-09-27 16:45:21 +00:00
Jim Meyering
1ff7800b19 *** empty log message *** 1998-09-27 16:41:04 +00:00
Jim Meyering
fbe115a9e4 indent 1998-09-27 16:40:09 +00:00
Jim Meyering
3f17755a74 . 1998-09-27 16:39:53 +00:00
Jim Meyering
fbb1fb519f (my_strftime): Update from FSF. 1998-09-27 12:45:33 +00:00
Jim Meyering
dc68d2454e *** empty log message *** 1998-09-27 02:57:44 +00:00
Jim Meyering
80499598c1 (copy_internal): Don't preserve hard-linked directories
to avoid damaging the destination filesystem when copying from a
Netapp snapshot directory.  With code from Kjetil Torgrim Hollstein
and Paul Eggert.
1998-09-27 02:57:29 +00:00
Jim Meyering
b6dcafff11 . 1998-09-26 19:13:40 +00:00
Jim Meyering
219c7a280d . 1998-09-26 19:13:28 +00:00
Jim Meyering
3f9e8072e8 factor.c 1998-09-26 19:12:16 +00:00
Jim Meyering
72f8c0a17c (__xstrtol) [STRING_TO_UNSIGNED]: Return
LONGINT_INVALID for strings that begin with `-'.
1998-09-26 19:11:23 +00:00
Jim Meyering
d679ddd839 Add a test for negative argument.
Tweak postprocessing framework.
1998-09-26 15:32:31 +00:00
Jim Meyering
cded303e29 Declare locals: before, after. From Andries Brouwer. 1998-09-21 12:05:49 +00:00
Jim Meyering
050e7dcf7c *** empty log message *** 1998-09-20 14:35:17 +00:00
Jim Meyering
ad37e45e20 . 1998-09-20 13:44:20 +00:00
Jim Meyering
2b8279f893 (install_file_to_path) [-D]: Create any leading
directories with permissions of 0755.
1998-09-20 13:44:12 +00:00
Jim Meyering
ef679d9871 (install_file_to_path): Copy the file after creating any leading directories.
(main) [case 'v']: Set `x.verbose' to 1, not 0.
1998-09-20 02:17:26 +00:00
Jim Meyering
3ba504d409 (cvs-dist): Don't use tar --diff.
(announcement): Tweak.
1998-09-19 21:51:33 +00:00
Jim Meyering
c11fa3240a *** empty log message *** 1998-09-19 20:40:33 +00:00
Jim Meyering
ca22f0d886 . 1998-09-19 20:40:20 +00:00
Jim Meyering
23b298e107 *** empty log message *** 1998-09-19 18:43:12 +00:00
Jim Meyering
6aaf307bc4 *** empty log message *** 1998-09-19 17:39:38 +00:00
Jim Meyering
efcc24f9d4 *** empty log message *** 1998-09-19 17:33:27 +00:00
Jim Meyering
24a8bf2d3e update bug-reporting address 1998-09-19 17:32:35 +00:00
Jim Meyering
ef67832eae (main): Revamp option processing, again.
stty couldn't parse some of its options.
1998-09-19 17:30:17 +00:00
Jim Meyering
6eb0392a41 (TESTS): Add basic-1. 1998-09-19 17:28:45 +00:00
Jim Meyering
6880f434c0 update bug-reporting address 1998-09-19 17:24:05 +00:00
Jim Meyering
6606de8b81 (program_name): Declare *not* to be const. 1998-09-19 17:19:06 +00:00
Jim Meyering
08cfef16a2 update bug-reporting address 1998-09-19 17:17:58 +00:00
Jim Meyering
2f235c5843 *** empty log message *** 1998-09-19 13:33:49 +00:00
Jim Meyering
fde72176e8 *** empty log message *** 1998-09-19 13:11:58 +00:00
Jim Meyering
7c43d59107 Fix post-protoization typo. 1998-09-19 13:11:23 +00:00
Jim Meyering
dfb1f6a5b0 . 1998-09-19 13:09:51 +00:00
Jim Meyering
19ff66c384 (PARAMS): Define and use.
From Kaveh Ghazi.
1998-09-17 13:48:20 +00:00
Jim Meyering
d7a781ab5a *** empty log message *** 1998-09-13 15:19:44 +00:00
Jim Meyering
48c8542657 *** empty log message *** 1998-09-13 15:13:59 +00:00
549 changed files with 23475 additions and 11606 deletions

View File

@@ -4,6 +4,10 @@
# It is necessary if you want to build targets usually of interest
# only to the maintainer.
# Systems where /bin/sh is not the default shell need this. The $(shell)
# command below won't work with e.g. stock DOS/Windows shells.
SHELL = /bin/sh
have-Makefile := $(shell test -f Makefile && echo yes)
# If the user runs GNU make but has not yet run ./configure,

View File

@@ -11,44 +11,67 @@ maintainer-check:
$(MAKE) distcheck
$(MAKE) my-distcheck
prev-version := $(shell echo $(VERSION)|tr a-z Xa-y)
tag-package = $(shell echo "$(PACKAGE)" | tr a-z A-Z)
tag-this-version = $(subst .,_,$(VERSION))
tag-prev-version = $(subst .,_,$(prev-version))
this-cvs-tag = $(tag-package)-$(tag-this-version)
prev-cvs-tag = $(tag-package)-$(tag-prev-version)
# Tag before making distribution. Also, don't make a distribution if
# checks fail. Also, make sure the NEWS file is up-to-date.
# FIXME: use dist-hook/my-dist like distcheck-hook/my-distcheck.
cvs-dist: maintainer-check
pkg=`echo "$(PACKAGE)" | tr a-z A-Z`; \
ver=`echo "$(VERSION)" | sed 's/\./_/g'`; \
tag="$$pkg-$$ver"; \
echo tag=$$tag; \
if cvs -n log -h README| grep -e $$tag > /dev/null; then \
echo $(this-cvs-tag); \
if cvs -n log -h README| grep -e $(this-cvs-tag): > /dev/null; then \
echo "VERSION not new; not tagging" 1>&2; \
exit 1; \
fi; \
cvs update po; \
cvs tag -c $$tag
cvs tag -c $(this-cvs-tag)
$(MAKE) dist
t=./=test
my-distcheck: dist
my-distcheck:
-rm -rf $(t)
mkdir $(t)
GZIP=$(GZIP) $(TAR) -C $(t) -zxf $(distdir).tar.gz
GZIP=$(GZIP) $(AMTAR) -C $(t) -zxf $(distdir).tar.gz
cd $(t)/$(distdir) \
&& ./configure --disable-nls \
&& $(MAKE) \
&& $(MAKE) CFLAGS='-Wformat -Werror' \
&& $(MAKE) dvi \
&& $(MAKE) check \
&& $(MAKE) distclean
cd $(t) && $(TAR) --diff -z -f ../$(distdir).tar.gz
cd $(t) && mv $(distdir) $(distdir).old \
&& $(AMTAR) -zxf ../$(distdir).tar.gz
diff -ur $(t)/$(distdir).old $(t)/$(distdir)
-rm -rf $(t)
@echo "========================"; \
echo "$(distdir).tar.gz is ready for distribution"; \
echo "========================"
THIS_VERSION_REGEXP := $(shell echo $(VERSION)|sed 's/\./\\./g')
# FIXME: this works only for test releases.
THIS_VERSION_REGEXP = $(subst .,\.,$(VERSION))
# FIXME: this works only for Gnits-style test releases.
PREV_VERSION := $(shell echo $(VERSION)|tr a-z Xa-y)
PREV_VERSION_REGEXP := $(shell echo $(PREV_VERSION)|sed 's/\./\\./g')
v = Version
url = ftp://alpha.gnu.org/gnu/$(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:
@@ -66,7 +89,9 @@ announcement: NEWS ChangeLog $(distdir).tar.gz
echo; \
echo FIXME: put comments here; \
echo; \
echo " $(url)"; \
for url in $(url_dir_list); do \
echo " $$url/$(distdir).tar.gz"; \
done; \
echo; \
echo "$(md5) $(distdir).tar.gz"; \
echo; \
@@ -75,6 +100,22 @@ announcement: NEWS ChangeLog $(distdir).tar.gz
| grep -v '^\['; \
echo; \
echo ChangeLog entries:; \
sed -n "/$v $(THIS_VERSION_REGEXP)/,/$v $(PREV_VERSION_REGEXP)/p" \
ChangeLog | grep -v '\* $v'; \
find . -name ChangeLog \
| xargs cvs diff -up -r$(prev-cvs-tag) -rHEAD \
| sed -n 's/^+//p' \
| perl -ne 'm!^\+\+ (\./)?! or print,next;' \
-e 'print "\n"."*"x70 ."\n"; s///; print; print "*"x70 ."\n"'; \
)
alpha:
$(MAKE) cvs-dist
$(MAKE) -s announcement > /tmp/announce-$(distdir)
ln $(distdir).tar.gz ../release
chmod a-w $(distdir).tar.gz
@echo =====================================
@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 =====================================

32
THANKS
View File

@@ -2,14 +2,26 @@ This is just a start at listing e-mail addresses of contributors.
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
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
Brendan O'Dea: bod@compusol.com.au
Charles Karney: karney@pppl.gov
Christian von Roques: roques@pond.sub.org
Colin Plumb: colin@nyx.net
Dirk Lattermann: dlatt@t-online.de
Don Parsons: dparsons@synapse.kent.edu
Eirik Fuller: eirik@netcom.com
@@ -23,28 +35,48 @@ Hugh Daniel: hugh@xanadu.com
James: james@albion.glarp.com
James Antill: jmanti%essex.ac.uk@seralph21.essex.ac.uk
James Tanis: jtt@soscorp.com
Jamie Lokier: jamie@imbolc.ucc.ie
Janos Farkas: chexum@shadow.banki.hu
Jesse Thilo: jgt2@eecs.lehigh.edu
Joakim Rosqvist: dvljrt@cs.umu.se
Johan Danielsson: joda@pdc.kth.se
John Bley: jbb6@acpub.duke.edu
John Gatewood Ham: zappaman@alphabox.compsci.buu.ac.th
John Gotts: jgotts@umich.edu
jvogel: jvogel@linkny.com
Karl Heuer: kwzh@gnu.org
Kjetil Torgrim Homme: kjetilho@ifi.uio.no
Larry McVoy: lm@sgi.com
Lars Hecking: lhecking@nmrc.ucc.ie
Lorne Baker: lbaker@nitro.avint.net
Marcus Daniels: marcus@sysc.pdx.edu
Mark A. Thomas: thommark@access.digex.net
Mark Harris: mark@monitor.designacc.com
Mark Kettenis: kettenis@phys.uva.nl
Marty Leisner: leisner@sdsp.mc.xerox.com
Masami Takikawa: takikawm@CS.ORST.EDU
Matthew S. Levine: mslevine@theory.lcs.mit.edu
Matthew Swift: swift@alum.mit.edu
Matthias Urlichs: smurf@noris.de
Michiel Bacchiani: bacchian@raven.bu.edu
Miles Bader: miles@gnu.ai.mit.edu
Noel Cragg: noel@red-bean.com
Olav Morkrid: olav@funcom.com
Per Kristian Hove: perhov@math.ntnu.no
Peter Eriksson: peter@ifm.liu.se
Peter Samuelson: psamuels@sampo.creighton.edu
Paul Eggert: eggert@twinsun.com
Philippe De Muyter: phdm@macqel.be
Rainer Orth: ro@TechFak.Uni-Bielefeld.DE
Ross Ridge: rridge@calum.csclub.uwaterloo.ca
Santiago Vila Doncel: sanvila@unex.es
Stuart Kemp: skemp@peter.bmc.com
Thomas Bushnell, n/BSG: thomas@gnu.ai.mit.edu
Ton Hospel: thospel@mail.dma.be
Torbjorn Lindgren: tl@funcom.no
Tony Leneis: tony@plaza.ds.adp.com
Ulrich Drepper: drepper@cygnus.com
Volker Borchert: bt@teknon.de
Michael Veksler: mveksler@techunix.technion.ac.il
Wayne Stewart: wstewa@atl.com
William Bader: william@nscs.fast.net

View File

@@ -1,20 +1,19 @@
Makefile
fileutils.info
version.texi
fileutils.info*
fileutils.log
fileutils.dvi
fileutils.aux
fileutils.toc
fileutils.cp
fileutils.fn
fileutils.vr
fileutils.tp
fileutils.ky
fileutils.pg
fileutils.cm
fileutils.fl
fileutils.op
fileutils.cp
fileutils.cps
fileutils.dvi
fileutils.fl
fileutils.fn
fileutils.info
fileutils.info*
fileutils.ky
fileutils.log
fileutils.op
fileutils.pg
fileutils.toc
fileutils.tp
fileutils.vr
stamp-vti
version.texi

View File

@@ -3,8 +3,12 @@ info_TEXINFOS = fileutils.texi
EXTRA_DIST = perm.texi getdate.texi
# Tell makeinfo to put everything in a single info file: sh-utils.info.
# Otherwise, it would also generate files with names like sh-utils.info-[123],
# and those names all map to one 14-byte name (sh-utils.info-) on some crufty
# The following is necessary if the package name is 8 characters or longer.
# If the info documentation would be split into 10 or more separate files,
# then this is necessary even if the package name is 7 characters long.
#
# Tell makeinfo to put everything in a single info file: <package>.info.
# Otherwise, it would also generate files with names like <package>.info-[123],
# and those names all map to one 14-byte name (<package>.info-) on some crufty
# old systems.
MAKEINFO = makeinfo --no-split

View File

@@ -1,16 +1,16 @@
# Makefile.in generated automatically by automake 1.3 from Makefile.am
# Makefile.in generated automatically by automake 1.4a from Makefile.am
# Copyright (C) 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
SHELL = /bin/sh
SHELL = @SHELL@
srcdir = @srcdir@
top_srcdir = @top_srcdir@
@@ -31,7 +31,7 @@ mandir = @mandir@
includedir = @includedir@
oldincludedir = /usr/include
DISTDIR =
DESTDIR =
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
@@ -48,6 +48,7 @@ INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_FLAG =
transform = @program_transform_name@
NORMAL_INSTALL = :
@@ -56,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@
@@ -63,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@
@@ -88,20 +95,25 @@ VERSION = @VERSION@
YACC = @YACC@
l = @l@
info_TEXINFOS = fileutils.texi
EXTRA_DIST = perm.texi getdate.texi
# Tell makeinfo to put everything in a single info file: sh-utils.info.
# Otherwise, it would also generate files with names like sh-utils.info-[123],
# and those names all map to one 14-byte name (sh-utils.info-) on some crufty
# The following is necessary if the package name is 8 characters or longer.
# If the info documentation would be split into 10 or more separate files,
# then this is necessary even if the package name is 7 characters long.
#
# Tell makeinfo to put everything in a single info file: <package>.info.
# Otherwise, it would also generate files with names like <package>.info-[123],
# and those names all map to one 14-byte name (<package>.info-) on some crufty
# old systems.
MAKEINFO = makeinfo --no-split
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = ../config.h
CONFIG_CLEAN_FILES =
DIST_SOURCES =
TEXI2DVI = texi2dvi
TEXINFO_TEX = $(srcdir)/texinfo.tex
INFO_DEPS = fileutils.info
DVIS = fileutils.dvi
TEXINFOS = fileutils.texi
@@ -109,15 +121,13 @@ DIST_COMMON = Makefile.am Makefile.in mdate-sh stamp-vti texinfo.tex \
version.texi
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
TAR = tar
GZIP = --best
all: Makefile $(INFO_DEPS)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
GZIP_ENV = --best
all: all-redirect
.SUFFIXES:
.SUFFIXES: .dvi .info .ps .texi .texinfo .txi
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && $(AUTOMAKE) --gnits doc/Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES)
@@ -125,18 +135,18 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES)
&& CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
version.texi: stamp-vti
cp $(srcdir)/stamp-vti $(srcdir)/version.texi
$(srcdir)/version.texi: stamp-vti
@:
stamp-vti: fileutils.texi $(top_srcdir)/configure.in
@echo "@set UPDATED `cd $(srcdir) \
&& $(SHELL) ./mdate-sh fileutils.texi`" > vti.tmp
$(srcdir)/stamp-vti: fileutils.texi $(top_srcdir)/configure.in
@echo "@set UPDATED `$(SHELL) $(srcdir)/mdate-sh $(srcdir)/fileutils.texi`" > vti.tmp
@echo "@set EDITION $(VERSION)" >> vti.tmp
@echo "@set VERSION $(VERSION)" >> vti.tmp
@cmp -s vti.tmp $(srcdir)/stamp-vti \
|| (echo "Updating $(srcdir)/stamp-vti"; \
cp vti.tmp $(srcdir)/stamp-vti)
@cmp -s vti.tmp $(srcdir)/version.texi \
|| (echo "Updating $(srcdir)/version.texi"; \
cp vti.tmp $(srcdir)/version.texi)
-@rm -f vti.tmp
@cp $(srcdir)/version.texi $@
mostlyclean-vti:
-rm -f vti.tmp
@@ -146,7 +156,7 @@ clean-vti:
distclean-vti:
maintainer-clean-vti:
-rm -f stamp-vti version.texi
-rm -f $(srcdir)/stamp-vti $(srcdir)/version.texi
fileutils.info: fileutils.texi version.texi
fileutils.dvi: fileutils.texi version.texi
@@ -201,7 +211,8 @@ DVIPS = dvips
install-info-am: $(INFO_DEPS)
@$(NORMAL_INSTALL)
$(mkinstalldirs) $(DESTDIR)$(infodir)
@for file in $(INFO_DEPS); do \
@list='$(INFO_DEPS)'; \
for file in $$list; do \
d=$(srcdir); \
for ifile in `cd $$d && echo $$file $$file-[0-9] $$file-[0-9][0-9]`; do \
if test -f $$d/$$ifile; then \
@@ -212,7 +223,8 @@ install-info-am: $(INFO_DEPS)
done
@$(POST_INSTALL)
@if $(SHELL) -c 'install-info --version | sed 1q | fgrep -s -v -i debian' >/dev/null 2>&1; then \
for file in $(INFO_DEPS); do \
list='$(INFO_DEPS)'; \
for file in $$list; do \
echo " install-info --info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/$$file";\
install-info --info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/$$file || :;\
done; \
@@ -221,19 +233,24 @@ install-info-am: $(INFO_DEPS)
uninstall-info:
$(PRE_UNINSTALL)
@if $(SHELL) -c 'install-info --version | sed 1q | fgrep -s -v -i debian' >/dev/null 2>&1; then \
ii=yes; \
else ii=; fi; \
for file in $(INFO_DEPS); do \
test -z "$ii" \
|| install-info --info-dir=$(DESTDIR)$(infodir) --remove $$file; \
done
list='$(INFO_DEPS)'; \
for file in $$list; do \
echo " install-info --info-dir=$(DESTDIR)$(infodir) --remove $$file"; \
install-info --info-dir=$(DESTDIR)$(infodir) --remove $$file; \
done; \
else :; fi
@$(NORMAL_UNINSTALL)
for file in $(INFO_DEPS); do \
(cd $(DESTDIR)$(infodir) && rm -f $$file $$file-[0-9] $$file-[0-9][0-9]); \
@list='$(INFO_DEPS)'; \
for file in $$list; do \
(if cd $(DESTDIR)$(infodir); then \
echo " rm -f $$file $$file-[0-9] $$file-[0-9][0-9])"; \
rm -f $$file $$file-[0-9] $$file-[0-9][0-9]; \
else :; fi); \
done
dist-info: $(INFO_DEPS)
for base in $(INFO_DEPS); do \
list='$(INFO_DEPS)'; \
for base in $$list; do \
d=$(srcdir); \
for file in `cd $$d && eval echo $$base*`; do \
test -f $(distdir)/$$file \
@@ -244,17 +261,18 @@ 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:
distclean-aminfo:
maintainer-clean-aminfo:
for i in $(INFO_DEPS); do \
cd $(srcdir) && for i in $(INFO_DEPS); do \
rm -f $$i; \
if test "`echo $$i-[0-9]*`" != "$$i-[0-9]*"; then \
rm -f $$i-[0-9]*; \
@@ -276,64 +294,78 @@ distdir: $(DISTFILES)
&& $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnits doc/Makefile
@for file in $(DISTFILES); do \
d=$(srcdir); \
test -f $(distdir)/$$file \
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \
|| cp -p $$d/$$file $(distdir)/$$file; \
if test -d $$d/$$file; then \
cp -pr $$d/$$file $(distdir)/$$file; \
else \
test -f $(distdir)/$$file \
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \
|| cp -p $$d/$$file $(distdir)/$$file || :; \
fi; \
done
$(MAKE) top_distdir="$(top_distdir)" distdir="$(distdir)" dist-info
info: $(INFO_DEPS)
dvi: $(DVIS)
check: all
$(MAKE)
installcheck:
install-exec:
@$(NORMAL_INSTALL)
install-data: install-info-am
@$(NORMAL_INSTALL)
$(MAKE) $(AM_MAKEFLAGS) top_distdir="$(top_distdir)" distdir="$(distdir)" dist-info
info-am: $(INFO_DEPS)
info: info-am
dvi-am: $(DVIS)
dvi: dvi-am
check-am: all-am
check: check-am
installcheck-am:
installcheck: installcheck-am
install-exec-am:
install-exec: install-exec-am
install: install-exec install-data all
@:
uninstall: uninstall-info
install-data-am: install-info-am
install-data: install-data-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
install: install-am
uninstall-am: uninstall-info
uninstall: uninstall-am
all-am: Makefile $(INFO_DEPS)
all-redirect: all-am
install-strip:
$(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' INSTALL_SCRIPT='$(INSTALL_PROGRAM)' install
$(MAKE) $(AM_MAKEFLAGS) INSTALL_STRIP_FLAG=-s install
installdirs:
$(mkinstalldirs) $(DESTDIR)$(infodir)
mostlyclean-generic:
-test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
clean-generic:
-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
distclean-generic:
-rm -f Makefile $(DISTCLEANFILES)
-rm -f Makefile $(CONFIG_CLEAN_FILES)
-rm -f config.cache config.log stamp-h stamp-h[0-9]*
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
maintainer-clean-generic:
-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
mostlyclean: mostlyclean-vti mostlyclean-aminfo mostlyclean-generic
mostlyclean-am: mostlyclean-vti mostlyclean-aminfo mostlyclean-generic
clean: clean-vti clean-aminfo clean-generic mostlyclean
mostlyclean: mostlyclean-am
distclean: distclean-vti distclean-aminfo distclean-generic clean
-rm -f config.status
clean-am: clean-vti clean-aminfo clean-generic mostlyclean-am
maintainer-clean: maintainer-clean-vti maintainer-clean-aminfo \
maintainer-clean-generic distclean
clean: clean-am
distclean-am: distclean-vti distclean-aminfo distclean-generic clean-am
distclean: distclean-am
maintainer-clean-am: maintainer-clean-vti maintainer-clean-aminfo \
maintainer-clean-generic distclean-am
@echo "This command is intended for maintainers to use;"
@echo "it deletes files that may require special tools to rebuild."
maintainer-clean: maintainer-clean-am
.PHONY: mostlyclean-vti distclean-vti clean-vti maintainer-clean-vti \
install-info-am uninstall-info mostlyclean-aminfo distclean-aminfo \
clean-aminfo maintainer-clean-aminfo tags distdir info dvi installcheck \
install-exec install-data install uninstall all installdirs \
mostlyclean-generic distclean-generic clean-generic \
clean-aminfo maintainer-clean-aminfo tags distdir info-am info dvi-am \
dvi check check-am installcheck-am installcheck install-exec-am \
install-exec install-data-am install-data install-am install \
uninstall-am uninstall all-redirect all-am all install-strip \
installdirs mostlyclean-generic distclean-generic clean-generic \
maintainer-clean-generic clean mostlyclean distclean maintainer-clean

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

@@ -113,7 +113,7 @@ by the Foundation.
@end titlepage
@ifinfo
@ifnottex
@node Top
@top GNU shell utilities
@@ -140,7 +140,7 @@ This manual documents version @value{VERSION} of the GNU shell utilities.
* Index:: General index.
@end menu
@end ifinfo
@end ifnottex
@node Introduction
@@ -166,7 +166,7 @@ The GNU shell utilities are mostly compatible with the POSIX.2 standard.
@c This paragraph appears in all of fileutils.texi, textutils.texi, and
@c sh-utils.texi too -- so be sure to keep them consistent.
@cindex bugs, reporting
Please report bugs to @samp{sh-utils-bugs@@gnu.org}. Remember
Please report bugs to @samp{bug-sh-utils@@gnu.org}. Remember
to include the version number, machine architecture, input files, and
any other information needed to reproduce the bug: your input, what you
expected, what you got, and why it is wrong. Diffs are welcome, but
@@ -797,7 +797,7 @@ This makes it possible to test @code{expr length quote "$x"} or
@code{expr quote "$x" : '.*/\(.\)'} and have it do the right thing even if
the value of @var{$x} happens to be (for example) @code{/} or @code{index}.
This operator is a GNU extension. It is disabled when
the environment variable @var{POSIXLY_CORRECT} is set.
the environment variable @env{POSIXLY_CORRECT} is set.
@end table
@@ -1749,7 +1749,7 @@ Tell the kernel that the terminal has @var{n} columns. Non-POSIX.
@vindex COLUMNS
Print the number of rows and columns that the kernel thinks the
terminal has. (Systems that don't support rows and cols in the kernel
typically use the environment variables @code{LINES} and @code{COLUMNS}
typically use the environment variables @env{LINES} and @env{COLUMNS}
instead; however, GNU @code{stty} does not know anything about them.)
Non-POSIX.
@@ -2390,6 +2390,33 @@ input. This is useful when you have many dates to process, because the
system overhead of starting up the @code{date} executable many times can
be considerable.
@item -I[@var{timespec}]
@itemx --iso-8601[=@var{timespec}]
@opindex -I[@var{timespec}]
@opindex --iso-8601[=@var{timespec}]
Display the date using the ISO 8601 format, @samp{%Y-%m-%d}.
The optional argument @var{timespec} specifies the number of additional
terms of the time to include. It can be one of the following:
@table @samp
@item auto
The default behavior: print just the date.
@item hours
Append the hour of the day to the date.
@item minutes
Append the hours and minutes.
@item seconds
Append the hours, minutes, and seconds.
@end table
If showing any time terms, then include the time zone using the format
@samp{%z}. If @samp{--utc} is also specified, use @samp{%Z} in place of
@samp{%z}.
@item -R
@itemx --rfc-822
@opindex -R
@opindex --rfc-822
@@ -2690,7 +2717,7 @@ Ordinarily, filenames are looked up starting at the root of the
directory structure, i.e., @file{/}. @code{chroot} changes the root to
the directory @var{newroot} (which must exist) and then runs
@var{command} with optional @var{args}. If @var{command} is not
specified, the default is the value of the @code{SHELL} environment
specified, the default is the value of the @env{SHELL} environment
variable or @code{/bin/sh} if not set, invoked with the @samp{-i} option.
The only options are @samp{--help} and @samp{--version}. @xref{Common
@@ -2720,7 +2747,7 @@ to an empty value is different from unsetting it.
@vindex PATH
The first remaining argument specifies the program name to invoke; it is
searched for according to the @code{PATH} environment variable. Any
searched for according to the @env{PATH} environment variable. Any
remaining arguments are passed as arguments to that program.
@cindex environment, printing
@@ -2864,9 +2891,9 @@ effective user id of zero (the super-user).
@vindex LOGNAME
@cindex login shell
By default, @code{su} does not change the current directory.
It sets the environment variables @code{HOME} and @code{SHELL}
It sets the environment variables @env{HOME} and @env{SHELL}
from the password entry for @var{user}, and if @var{user} is not
the super-user, sets @code{USER} and @code{LOGNAME} to @var{user}.
the super-user, sets @env{USER} and @env{LOGNAME} to @var{user}.
By default, the shell is not a login shell.
Any additional @var{arg}s are passed as additional arguments to the
@@ -2917,10 +2944,10 @@ expansion (globbing), which is not likely to be useful.
@vindex PATH
@cindex login shell, creating
Make the shell a login shell. This means the following. Unset all
environment variables except @code{TERM}, @code{HOME}, and @code{SHELL}
(which are set as described above), and @code{USER} and @code{LOGNAME}
environment variables except @env{TERM}, @env{HOME}, and @env{SHELL}
(which are set as described above), and @env{USER} and @env{LOGNAME}
(which are set, even for the super-user, as described above), and set
@code{PATH} to a compiled-in default value. Change to @var{user}'s home
@env{PATH} to a compiled-in default value. Change to @var{user}'s home
directory. Prepend @samp{-} to the shell's name, intended to make it
read its login startup file(s).
@@ -2933,9 +2960,9 @@ read its login startup file(s).
@cindex environment, preserving
@flindex /etc/shells
@cindex restricted shell
Do not change the environment variables @code{HOME}, @code{USER},
@code{LOGNAME}, or @code{SHELL}. Run the shell given in the environment
variable @code{SHELL} instead of the shell from @var{user}'s passwd
Do not change the environment variables @env{HOME}, @env{USER},
@env{LOGNAME}, or @env{SHELL}. Run the shell given in the environment
variable @env{SHELL} instead of the shell from @var{user}'s passwd
entry, unless the user running @code{su} is not the superuser and
@var{user}'s shell is restricted. A @dfn{restricted shell} is one that
is not listed in the file @file{/etc/shells}, or in a compiled-in list

File diff suppressed because it is too large Load Diff

View File

@@ -41,6 +41,7 @@ START-INFO-DIR-ENTRY
* sum: (textutils)sum invocation. Print traditional checksum.
* tac: (textutils)tac invocation. Reverse files.
* tail: (textutils)tail invocation. Output the last part of files.
* tsort: (textutils)tsort invocation. Topological sort.
* tr: (textutils)tr invocation. Translate characters.
* unexpand: (textutils)unexpand invocation. Convert spaces to tabs.
* uniq: (textutils)uniq invocation. Uniqify files.
@@ -102,7 +103,10 @@ by the Foundation.
@end titlepage
@ifinfo
@c If your makeinfo doesn't grok this @ifnottex directive, then either
@c get a newer version of makeinfo or do s/ifnottex/ifinfo/ here and on
@c the matching @end directive below.
@ifnottex
@node Top
@top GNU text utilities
@@ -118,7 +122,7 @@ This manual documents version @value{VERSION} of the GNU text utilities.
* Formatting file contents:: fmt pr fold
* Output of parts of files:: head tail split csplit
* Summarizing files:: wc sum cksum md5sum
* Operating on sorted files:: sort uniq comm ptx
* Operating on sorted files:: sort uniq comm ptx tsort
* Operating on fields within a line:: cut paste join
* Operating on characters:: tr expand unexpand
* Opening the software toolbox:: The software tools philosophy.
@@ -160,10 +164,11 @@ Operating on sorted files
* uniq invocation:: Uniqify files.
* comm invocation:: Compare two sorted files line by line.
* ptx invocation:: Produce a permuted index of file contents.
* tsort invocation:: Topological sort.
@code{ptx}: Produce permuted indexes
* General options in ptx:: Options which affect general program behaviour.
* General options in ptx:: Options which affect general program behavior.
* Charset selection in ptx:: Underlying character set considerations.
* Input processing in ptx:: Input fields, contexts, and keyword selection.
* Output formatting in ptx:: Types of output format, and sizing the fields.
@@ -201,7 +206,7 @@ Opening the software toolbox
@end detailmenu
@end menu
@end ifinfo
@end ifnottex
@node Introduction
@@ -220,7 +225,7 @@ The GNU text utilities are mostly compatible with the @sc{POSIX.2} standard.
@c This paragraph appears in all of fileutils.texi, textutils.texi, and
@c sh-utils.texi too -- so be sure to keep them consistent.
@cindex bugs, reporting
Please report bugs to @email{textutils-bugs@@gnu.org}. Remember
Please report bugs to @email{bug-textutils@@gnu.org}. Remember
to include the version number, machine architecture, input files, and
any other information needed to reproduce the bug: your input, what you
expected, what you got, and why it is wrong. Diffs are welcome, but
@@ -307,11 +312,32 @@ The program accepts the following options. Also see @ref{Common options}.
@opindex --show-all
Equivalent to @samp{-vET}.
@item -B
@itemx --binary
@opindex -B
@opindex --binary
@cindex binary and text I/O in cat
On MS-DOS and MS-Windows only, causes @code{cat} read and write the
files in binary mode. By default, @code{cat} on MS-DOS/MS-Windows uses
binary mode only when standard output is redirected to a file or a pipe;
this option overrides that. Binary file I/O is used so that the files
retain their format (Unix text as opposed to DOS text and binary),
because @code{cat} is frequently used as file copying program. Some
options (see below) cause @code{cat} read and write files in text mode
because then the original file contents aren't important (e.g., when
lines are numbered by @code{cat}, or when line endings should be
marked). This is so these options work as DOS/Windows users would
expect; for example, DOS-style text files have their lines end with
@key{CR-LF} pair of characters which won't be processed as an empty line
by @samp{-b} unless the file is read in text mode.
@item -b
@itemx --number-nonblank
@opindex -b
@opindex --number-nonblank
Number all nonblank output lines, starting with 1.
Number all nonblank output lines, starting with 1. On MS-DOS and
MS-Windows, this option causes @code{cat} to read and write files in
text mode.
@item -e
@opindex -e
@@ -321,20 +347,25 @@ Equivalent to @samp{-vE}.
@itemx --show-ends
@opindex -E
@opindex --show-ends
Display a @samp{$} after the end of each line.
Display a @samp{$} after the end of each line. On MS-DOS and
MS-Windows, this option causes @code{cat} to read and write files in
text mode.
@item -n
@itemx --number
@opindex -n
@opindex --number
Number all output lines, starting with 1.
Number all output lines, starting with 1. On MS-DOS and MS-Windows,
this option causes @code{cat} to read and write files in text mode.
@item -s
@itemx --squeeze-blank
@opindex -s
@opindex --squeeze-blank
@cindex squeezing blank lines
Replace multiple adjacent blank lines with a single blank line.
Replace multiple adjacent blank lines with a single blank line. On
MS-DOS and MS-Windows, this option causes @code{cat} to read and write
files in text mode.
@item -t
@opindex -t
@@ -355,8 +386,10 @@ Ignored; for Unix compatibility.
@opindex -v
@opindex --show-nonprinting
Display control characters except for @key{LFD} and @key{TAB} using
@samp{^} notation and precede characters that have the high bit set
with @samp{M-}.
@samp{^} notation and precede characters that have the high bit set with
@samp{M-}. On MS-DOS and MS-Windows, this option causes @code{cat} to
read files and standard input in DOS binary mode, so the @key{CR}
characters at the end of each line are also visible.
@end table
@@ -394,7 +427,10 @@ precedes in the file.
@itemx --regex
@opindex -r
@opindex --regex
Treat the separator string as a regular expression.
Treat the separator string as a regular expression. Users of @code{tac}
on MS-DOS/MS-Windows should note that, since @code{tac} reads files in
binary mode, each line of a text file might end with a CR/LF pair
instead of the Unix-style LF.
@item -s @var{separator}
@itemx --separator=@var{separator}
@@ -928,23 +964,43 @@ optionally outputting in multicolumn format; optionally merges all
pr [@var{option}]@dots{} [@var{file}]@dots{}
@end example
By default, a 5-line header is printed: two blank lines; a line with the
date, the file name, and the page count; and two more blank lines. A
footer of five blank lines is also printed. With the @samp{-f} option, a
3-line header is printed: the leading two blank lines are omitted; no
footer used. The default @var{page_length} in both cases is 66 lines.
The text line of the header takes up the full @var{page_width} in the
form @samp{yy-mm-dd HH:MM string Page nnnn}. String is a centered
string.
By default, a 5-line header is printed at each page: two blank lines;
a line with the date, the filename, and the page count; and two more
blank lines. A footer of five blank lines is also printed. With the @samp{-F}
option, a 3-line header is printed: the leading two blank lines are
omitted; no footer is used. The default @var{page_length} in both cases is 66
lines. The default number of text lines changes from 56 (without @samp{-F})
to 63 (with @samp{-F}). The text line of the header takes up the full
@var{page_width} in the form @samp{yyyy-mm-dd HH:MM string Page nnnn}.
String is a centered header string.
Form feeds in the input cause page breaks in the output. Multiple form
Form feeds in the input cause page breaks in the output. Multiple form
feeds produce empty pages.
Columns have equal width, separated by an optional string (default
space). Lines will always be truncated to line width (default 72),
unless you use the @samp{-j} option. For single column output no line
truncation occurs by default. Use @samp{-w} option to truncate lines
in that case.
Columns are of equal width, separated by an optional string (default
is @samp{space}). For multicolumn output, lines will always be truncated to
@var{page_width} (default 72), unless you use the @samp{-J} option. For single
column output no line truncation occurs by default. Use @samp{-W} option to
truncate lines in that case.
Including version 1.22i:
Some small @var{letter options} (@samp{-s}, @samp{-w}) has been redefined
with the object of a better @var{posix} compliance. The output of some
further cases has been adapted to other @var{unix}es. A violation of
downward compatibility has to be accepted.
Some @var{new capital letter} options (@samp{-J}, @samp{-S}, @samp{-W})
has been introduced to turn off unexpected interferences of small letter
options. The @samp{-N} option and the second argument @var{last_page}
of @samp{+FIRST_PAGE} offer more flexibility. The detailed handling of
form feeds set in the input files requires @samp{-T} option.
Capital letter options dominate small letter ones.
Some of the option-arguments (compare @samp{-s}, @samp{-S}, @samp{-e},
@samp{-i}, @samp{-n}) cannot be specified as separate arguments from the
preceding option letter (already stated in the @var{posix} specification).
The program accepts the following options. Also see @ref{Common options}.
@@ -954,32 +1010,39 @@ The program accepts the following options. Also see @ref{Common options}.
@itemx --pages=@var{first_page}[:@var{last_page}]
@opindex +@var{first_page}[:@var{last_page}]
@opindex --pages
Begin printing with page @var{first_page} and stop with
@var{last_page}. Missing @samp{:@var{last_page}} implies end of file. While
estimating the number of skipped pages each form feed in the input file
results in a new page. Page counting with and without
@samp{+@var{first_page}} is identical. By default, it starts with the
first page of input file (not first page printed). Page numbering may be
altered by @samp{-N} option.
Begin printing with page @var{first_page} and stop with @var{last_page}.
Missing @samp{:@var{last_page}} implies end of file. While estimating
the number of skipped pages each form feed in the input file results
in a new page. Page counting with and without @samp{+@var{first_page}}
is identical. By default, counting starts with the first page of input
file (not first page printed). Line numbering may be altered by @samp{-N}
option.
@item -@var{column}
@itemx --columns=@var{column}
@opindex -@var{column}
@opindex --columns
@cindex down columns
With each single @var{file}, produce @var{column}-column output and
print columns down. The column width is automatically estimated from
@var{page_width}. This option might well cause some columns to be
truncated. The number of lines in the columns on each page will be
balanced. @samp{-@var{column}} may not be used with @samp{-m} option.
With each single @var{file}, produce @var{column} columns of output
(default is 1) and print columns down, unless @samp{-a} is used. The
column width is automatically decreased as @var{column} increases; unless
you use the @samp{-W/-w} option to increase @var{page_width} as well.
This option might well cause some lines to be truncated. The number of
lines in the columns on each page are balanced. The options @samp{-e}
and @samp{-i} are on for multiple text-column output. Together with
@samp{-J} option column alignment and line truncation is turned off.
Lines of full length are joined in a free field format and @samp{-S}
option may set field separators. @samp{-@var{column}} may not be used
with @samp{-m} option.
@item -a
@itemx --across
@opindex -a
@opindex --across
@cindex across columns
With each single @var{file}, print columns across rather than down.
@var{column} must be greater than one.
With each single @var{file}, print columns across rather than down. The
@samp{-@var{column}} option must be given with @var{column} greater than one.
If a line is too long to fit in a column, it is truncated.
@item -c
@itemx --show-control-chars
@@ -1001,7 +1064,7 @@ Double space the output.
@opindex -e
@opindex --expand-tabs
@cindex input tabs
Expand tabs to spaces on input. Optional argument @var{in-tabchar} is
Expand @var{tab}s to spaces on input. Optional argument @var{in-tabchar} is
the input tab character (default is @key{TAB}). Second optional
argument @var{in-tabwidth} is the input tab character's width (default
is 8).
@@ -1012,93 +1075,110 @@ is 8).
@opindex -F
@opindex -f
@opindex --form-feed
Use a form feed instead of newlines to separate output pages. Default
page length of 66 lines is not altered. But the number of lines of text
per page changes from 56 to 63 lines.
Use a form feed instead of newlines to separate output pages. The default
page length of 66 lines is not altered. But the number of lines of text
per page changes from default 56 to 63 lines.
@item -h @var{HEADER}
@itemx --header=@var{HEADER}
@opindex -h
@opindex --header
Replace the file name in the header with the centered string
@var{header}. Left-hand-side truncation (marked by a @samp{*}) may occur
if the total header line @samp{yy-mm-dd HH:MM HEADER Page nnnn}
becomes larger than @var{page_width}. @samp{-h ""} prints a blank line
header. Don't use @samp{-h""}. A space between the -h option and the
argument is always peremptory.
Replace the filename in the header with the centered string @var{header}.
Left-hand-side truncation (marked by a @samp{*}) may occur if the total
header line @samp{yyyy-mm-dd HH:MM HEADER Page nnnn} becomes larger than
@var{page_width}. @samp{-h ""} prints a blank line header. Don't use
@samp{-h""}.
A space between the @samp{-h} option and the argument is always
indispensable.
@item -i[@var{out-tabchar}[@var{out-tabwidth}]]
@itemx --output-tabs[=@var{out-tabchar}[@var{out-tabwidth}]]
@opindex -i
@opindex --output-tabs
@cindex output tabs
Replace spaces with tabs on output. Optional argument @var{out-tabchar}
Replace spaces with @var{tab}s on output. Optional argument @var{out-tabchar}
is the output tab character (default is @key{TAB}). Second optional
argument @var{out-tabwidth} is the output tab character's width (default
is 8).
@item -j
@item -J
@itemx --join-lines
@opindex -j
@opindex -J
@opindex --join-lines
Merge lines of full length. Used together with the column options
@samp{-@var{column}}, @samp{-a -@var{column}} or @samp{-m}. Turns off
@samp{-w} line truncation; no column alignment used; may be used with
@samp{-s[@var{separator}]}.
Merge lines of full length. Used together with the column options
@samp{-@var{column}}, @samp{-a -@var{column}} or @samp{-m}. Turns off
@samp{-W/-w} line truncation;
no column alignment used; may be used with @samp{-S[@var{string}]}.
@samp{-J} has been introduced (together with @samp{-W} and @samp{-S})
to disentangle the old (@var{posix} compliant) options @samp{-w} and
@samp{-s} along with the three column options.
@item -l @var{page_length}
@itemx --length=@var{page_length}
@opindex -l
@opindex --length
Set the page length to @var{page_length} (default 66) lines. If
@var{page_length} is less than or equal 10 (and <= 3 with @samp{-f}),
the headers and footers are omitted, and all form feeds set in input
files are eliminated, as if the @samp{-T} option had been given.
Set the page length to @var{page_length} (default 66) lines, including
the lines of the header [and the footer]. If @var{page_length} is less
than or equal 10 (and <= 3 with @samp{-F}), the header and footer are
omitted, and all form feeds set in input files are eliminated, as if
the @samp{-T} option had been given.
@item -m
@itemx --merge
@opindex -m
@opindex --merge
Merge and print all @var{file}s in parallel, one in each column. If a
line is too long to fit in a column, it is truncated (but see
@samp{-j}). @samp{-s[@var{separator}]} may be used. Empty pages in some
@var{file}s (form feeds set) produce empty columns, still marked by
@var{separator}. Completely empty common pages show no separators or
line numbers. The default header becomes
@samp{yy-mm-dd HH:MM <blanks> Page nnnn}; may be used with
@samp{-h @var{header}} to fill up the middle part.
Merge and print all @var{file}s in parallel, one in each column. If a
line is too long to fit in a column, it is truncated, unless @samp{-J}
option is used. @samp{-S[@var{string}]} may be used. Empty pages in
some @var{file}s (form feeds set) produce empty columns, still marked
by @var{string}. The result is a continuous line numbering and column
marking throughout the whole merged file. Completely empty merged pages
show no separators or line numbers. The default header becomes
@samp{yyyy-mm-dd HH:MM <blanks> Page nnnn}; may be used with
@samp{-h @var{header}} to fill up the middle blank part.
@item -n[@var{number-separator}[@var{digits}]]
@itemx --number-lines[=@var{number-separator}[@var{digits}]]
@opindex -n
@opindex --number-lines
Precede each column with a line number; with parallel @var{file}s
(@samp{-m}), precede only each line with a line number. Optional argument
@var{number-separator} is the character to print after each number
(default is @key{TAB}). Optional argument @var{digits} is the number of
digits per line number (default is 5). Default line counting starts with
first line of the input file (not with the first line printed, see
@samp{-N}).
Provide @var{digits} digit line numbering (default for @var{digits} is
5). With multicolumn output the number occupies the first @var{digits}
column positions of each text column or only each line of @samp{-m}
output. With single column output the number precedes each line just as
@samp{-m} does. Default counting of the line numbers starts with 1st
line of the input file (not the 1st line printed, compare the
@samp{--page} option and @samp{-N} option).
Optional argument @var{number-separator} is the character appended to
the line number to separate it from the text followed. The default
separator is a @key{TAB}. In a strict sense a @key{TAB} is always
printed with single column output only. The @var{TAB}-width varies
with the @var{TAB}-position, e.g. with the left @var{margin} specified
by @samp{-o} option. With multicolumn output priority is given to
@samp{equal width of output columns} (a @var{posix} specification).
The @var{TAB}-width is fixed to the value of the 1st column and does
not change with different values of left @var{margin}. That means a
fixed number of spaces is always printed in the place of the
@var{number-separator tab}. The tabification depends upon the output
position.
@item -N @var{line_number}
@itemx --first-line-number=@var{line_number}
@opindex -N
@opindex --first-line-number
Start line counting with no. @var{line_number} at first line of first
page printed.
Start line counting with the number @var{line_number} at first line of
first page printed (in most cases not the first line of the input file).
@item -o @var{n}
@itemx --indent=@var{n}
@item -o @var{margin}
@itemx --indent=@var{margin}
@opindex -o
@opindex --indent
@cindex indenting lines
@cindex left margin
Indent each line with @var{n} (default is zero) spaces wide, i.e., set
the left margin. The total page width is @var{n} plus the width set
with the @samp{-w} option.
Indent each line with a margin @var{margin} spaces wide (default is zero).
The total page width is the size of the margin plus the @var{page_width}
set with the @samp{-W/-w} option. A limited overflow may occur with
numbered single column output (compare @samp{-n} option).
@item -r
@itemx --no-file-warnings
@@ -1107,34 +1187,50 @@ with the @samp{-w} option.
Do not print a warning message when an argument @var{file} cannot be
opened. (The exit status will still be nonzero, however.)
@item -s[@var{separator}]
@itemx --separator[=@var{separator}]
@item -s[@var{char}]
@itemx --separator[=@var{char}]
@opindex -s
@opindex --separator
Separate columns by a string @var{separator}. Don't use
@samp{-s @var{separator}}, no space between flag and argument. If this
option is omitted altogether, the default is @key{TAB} together with
@samp{-j} option and space otherwise (same as @samp{-s" "}). With
@samp{-s} only, no separator is used (same as @samp{-s""}). @samp{-s}
does not affect line truncation or column alignment.
Separate columns by a single character @var{char}. Default for @var{char}
is the @key{TAB} character without @samp{-w} and @samp{no character} with
@samp{-w}. Without @samp{-s} default separator @samp{space} is set.
@samp{-s[char]} turns off line truncation of all three column options
(@samp{-COLUMN}|@samp{-a -COLUMN}|@samp{-m}) except @samp{-w} is set.
That is a @var{posix} compliant formulation.
@item -S[@var{string}]
@itemx --sep-string[=@var{string}]
@opindex -S
@opindex --sep-string
Separate columns by any string @var{string}. The @samp{-S} option doesn't
react upon the @samp{-W/-w} option (unlike @samp{-s} option does). It
does not affect line truncation or column alignment. A separator is
defined, nothing else. Without @samp{-S}: default separator @key{TAB}
is used with @samp{-J} and @samp{space} otherwise (same as @samp{-S" "}).
With @samp{-S} only: no separator is used, same as @samp{-S""}. Quotes
should be used with blanks and some shell active characters. Some of the
@code{pr} options don't allow the option letter to be separated from its
argument. @samp{-S/-s} is one of them. Don't use @samp{-S "STRING"}.
That's @var{posix} compliant.
@item -t
@itemx --omit-header
@opindex -t
@opindex --omit-header
Do not print the usual header [and footer] on each page, and do not fill
out the bottoms of pages (with blank lines or a form feed). No page
structure is produced, but retain form feeds set in the input files. The
predefined page layout is not changed. @samp{-t} or @samp{-T} may be
useful together with other options; e.g.: @samp{-t -e4}, expand
@key{TAB} in the input file to 4 spaces but do not do any other changes.
Use of @samp{-t} overrides @samp{-h}.
out the bottom of pages (with blank lines or a form feed). No page
structure is produced, but form feeds set in the input files are retained.
The predefined pagination is not changed. @samp{-t} or @samp{-T} may be
useful together with other options; e.g.: @samp{-t -e4}, expand @key{TAB}
in the input file to 4 spaces but don't make any other changes. Use of
@samp{-t} overrides @samp{-h}.
@item -T
@itemx --omit-pagination
@opindex -T
@opindex --omit-pagination
Do not print header [and footer]. In addition eliminate all form feeds
Do not print header [and footer]. In addition eliminate all form feeds
set in the input files.
@item -v
@@ -1147,14 +1243,28 @@ Print unprintable characters in octal backslash notation.
@itemx --width=@var{page_width}
@opindex -w
@opindex --width
Set the page width to @var{page_width} (default 72) characters.
With/without @samp{-w}, header lines are always truncated to
@var{page_width} characters. With @samp{-w}, text lines are truncated,
unless @samp{-j} is used. Without @samp{-w} together with one of the
column options @samp{-@var{column}}, @samp{-a -@var{column}} or
@samp{-m}, default truncation of text lines to 72 characters is used.
Without @samp{-w} and without any of the column options, no line
truncation is used. That's equivalent to @samp{-w 72 -j}.
Set page width to @var{page_width} characters for multiple text-column
output only (default for @var{page_width} is 72). @samp{-s[CHAR]} turns
off the default page width and any line truncation and column alignment.
Lines of full length are merged, regardless of the column options
set. No @var{page_width} setting is possible with single column output.
A @var{posix} compliant formulation.
@item -W @var{page_width}
@itemx --page_width=@var{page_width}
@opindex -W
@opindex --page_width
Set the page width to @var{page_width} characters. That's valid with and
without a column option. Text lines are truncated, unless @samp{-J}
is used. Together with one of the three column options
(@samp{-@var{column}}, @samp{-a -@var{column}} or @samp{-m}) column
alignment is always used. The separator options @samp{-S} or @samp{-s}
don't affect the @samp{-W} option. Default is 72 characters. Without
@samp{-W @var{page_width}} and without any of the column options NO line
truncation is used (defined to keep downward compatibility and to meet
most frequent tasks). That's equivalent to @samp{-W 72 -J}. With and
without @samp{-W @var{page_width}} the header line is always truncated
to avoid line overflow.
@end table
@@ -1174,7 +1284,7 @@ lines. Synopsis:
fold [@var{option}]@dots{} [@var{file}]@dots{}
@end example
By default, @code{fold} breaks lines wider than 80 columns. The output
By default, @code{fold} breaks lines wider than 80 columns. The output
is split into as many lines as necessary.
@cindex screen columns
@@ -1359,16 +1469,47 @@ Output the last @var{bytes} bytes, instead of final lines. Appending
by 1048576.
@item -f
@itemx --follow
@itemx --follow[=@var{how}]
@opindex -f
@opindex --follow
@cindex growing files
@vindex name @r{follow option}
@vindex descriptor @r{follow option}
Loop forever trying to read more characters at the end of the file,
presumably because the file is growing. Ignored if reading from a pipe.
presumably because the file is growing. This option is ignored when
reading from a pipe.
If more than one file is given, @code{tail} prints a header whenever it
gets output from a different file, to indicate which file that output is
from.
There are two ways to specify how you'd like to track files with this option,
but that difference is noticeable only when a followed file is removed.
If you'd like to continue to track the end of a growing file even after
it has been unlinked, use @samp{--follow=descriptor}. This is the default
behavior, but it is not useful if you're tracking a log file that may be
rotated (removed and reopened). In that case, use @samp{--follow=name} to
track the named file by reopening it periodically
@c FIXME: cross reference to the new option name
to see if it has been removed and recreated by some other program.
No matter which method you use, if the tracked file is determined to have
shrunk, @code{tail} prints a message saying the file has been truncated
and resumes tracking the end of the file from the newly-determined endpoint.
When a file is removed, @code{tail}'s behavior depends on whether it is
following the name or the descriptor. When following by name, tail can
detect that a file has been removed and gives a message to that effect,
and if @samp{--allow-missing} has been specified it will continue checking
periodically to see if the file reappears.
When following a descriptor, tail does not detect that the file has
been unlinked and issues no message.
The option values @samp{descriptor} and @samp{name} may be specified only
with the long form of the option, not with @samp{-f}.
@c FIXME-describe --allow-missing [useful only with --follow]
@c FIXME-describe --sleep-interval [useful only with --follow]
@itemx -n @var{n}
@itemx --lines=@var{n}
@opindex -n
@@ -1788,7 +1929,8 @@ The program accepts the following options. Also see @ref{Common options}.
Treat all input files as binary. This option has no effect on Unix
systems, since they don't distinguish between binary and text files.
This option is useful on systems that have different internal and
external character representations.
external character representations. On MS-DOS and MS-Windows, this is
the default.
@item -c
@itemx --check
@@ -1858,7 +2000,8 @@ These commands work with (or produce) sorted files.
* sort invocation:: Sort text files.
* uniq invocation:: Uniqify files.
* comm invocation:: Compare two sorted files line by line.
* ptx invocation::
* ptx invocation:: Produce a permuted index of file contents.
* tsort invocation:: Topological sort.
@end menu
@@ -1925,7 +2068,7 @@ addition, if the final byte of an input file is not a newline, GNU
Upon any error, @code{sort} exits with a status of @samp{2}.
@vindex TMPDIR
If the environment variable @code{TMPDIR} is set, @code{sort} uses its
If the environment variable @env{TMPDIR} is set, @code{sort} uses its
value as the directory for temporary files instead of @file{/tmp}. The
@samp{-T @var{tempdir}} option in turn overrides the environment
variable.
@@ -2046,9 +2189,11 @@ check that no pair of consecutive lines compares equal.
@opindex -k
@cindex sort field
The recommended, @sc{POSIX}, option for specifying a sort field. The field
consists of the line between @var{pos1} and @var{pos2} (or the end of
the line, if @var{pos2} is omitted), inclusive. Fields and character
positions are numbered starting with 1. See below.
consists of the part of the line between @var{pos1} and @var{pos2} (or the
end of the line, if @var{pos2} is omitted), @emph{inclusive}.
Fields and character positions are numbered starting with 1.
So to sort on the second field, you'd use @samp{-k 2,2}
See below for more examples.
@item -z
@opindex -z
@@ -2183,6 +2328,16 @@ and an explicit @samp{n} with the second key specifier.
sort -t : -b -k 5,5 -k 3,3n /etc/passwd
@end example
@c This example is a bit contrived and needs more explanation.
@c @item
@c Sort records separated by an arbitrary string by using a pipe to convert
@c each record delimiter string to @samp{\0}, then using sort's -z option,
@c and converting each @samp{\0} back to the original record delimiter.
@c
@c @example
@c printf 'c\n\nb\n\na\n'|perl -0pe 's/\n\n/\n\0/g'|sort -z|perl -0pe 's/\0/\n/g'
@c @end example
@end itemize
@@ -2253,6 +2408,17 @@ Ignore differences in case when comparing lines.
@cindex duplicate lines, outputting
Print only duplicate lines.
@item -D
@itemx --all-repeated
@opindex -D
@opindex --all-repeated
@cindex all duplicate lines, outputting
Print all duplicate lines and only duplicate lines.
This option is useful mainly in conjunction with other options e.g.,
to ignore case or to compare only selected fields.
This is a GNU extension.
@c FIXME: give an example showing *how* it's useful
@item -u
@itemx --unique
@opindex -u
@@ -2309,6 +2475,57 @@ Upon normal completion @code{comm} produces an exit code of zero.
If there is an error it exits with nonzero status.
@node tsort invocation
@section @code{tsort}: Topological sort
@pindex tsort
@cindex topological sort
@code{tsort} performs a topological sort on the given @var{file}, or
standard input if no input file is given or for a @var{file} of
@samp{-}. Synopsis:
@example
tsort [@var{option}] [@var{file}]
@end example
@code{tsort} reads its input as pairs of strings, separated by blanks,
indicating a partial ordering. The output is a total ordering that
corresponds to the given partial ordering.
For example
@example
tsort <<EOF
a b c
d
e f
b c d e
EOF
@end example
@noindent
will produce the output
@example
a
b
c
d
e
f
@end example
@code{tsort} will detect cycles in the input and writes the first cycle
encountered to standard error.
Note that for a given partial ordering, generally there is no unique
total ordering.
The only options are @samp{--help} and @samp{--version}. @xref{Common
options}.
@node ptx invocation
@section @code{ptx}: Produce permuted indexes
@@ -2327,7 +2544,7 @@ all GNU extensions and revert to traditional mode, thus introducing some
limitations, and changes several of the program's default option values.
When @samp{-G} is not specified, GNU extensions are always enabled. GNU
extensions to @code{ptx} are documented wherever appropriate in this
document. See @xref{Compatibility in ptx} for an explicit list of them.
document. For the full list, see @xref{Compatibility in ptx}.
Individual options are explained in incoming sections.
@@ -2371,7 +2588,7 @@ convention more than once per program invocation.
@node General options in ptx
@subsection General options
@table @code
@table @samp
@item -C
@itemx --copyright
@@ -2408,7 +2625,7 @@ expression for a keyword allows foreign or diacriticized letters.
Keyword sorting, however, is still crude; it obeys the underlying
character set ordering quite blindly.
@table @code
@table @samp
@item -f
@itemx --ignore-case
@@ -2420,18 +2637,18 @@ Fold lower case letters to upper case for sorting.
@node Input processing in ptx
@subsection Word selection and input processing
@table @code
@table @samp
@item -b @var{file}
@item --break-file=@var{file}
This option is an alternative way to option @code{-W} for describing
which characters make up words. This option introduces the name of a
This option provides an alternative (to @samp{-W}) method of describing
which characters make up words. It introduces the name of a
file which contains a list of characters which can@emph{not} be part of
one word, this file is called the @dfn{Break file}. Any character which
is not part of the Break file is a word constituent. If both options
@code{-b} and @code{-W} are specified, then @code{-W} has precedence and
@code{-b} is ignored.
@samp{-b} and @samp{-W} are specified, then @samp{-W} has precedence and
@samp{-b} is ignored.
When GNU extensions are enabled, the only way to avoid newline as a
break character is to write all the break characters in the file with no
@@ -2446,7 +2663,7 @@ The file associated with this option contains a list of words which will
never be taken as keywords in concordance output. It is called the
@dfn{Ignore file}. The file contains exactly one word in each line; the
end of line separation of words is not subject to the value of the
@code{-S} option.
@samp{-S} option.
There is a default Ignore file used by @code{ptx} when this option is
not specified, usually found in @file{/usr/local/lib/eign} if this has
@@ -2460,7 +2677,7 @@ The file associated with this option contains a list of words which will
be retained in concordance output, any word not mentioned in this file
is ignored. The file is called the @dfn{Only file}. The file contains
exactly one word in each line; the end of line separation of words is
not subject to the value of the @code{-S} option.
not subject to the value of the @samp{-S} option.
There is no default for the Only file. In the case there are both an
Only file and an Ignore file, a word will be subject to be a keyword
@@ -2471,14 +2688,14 @@ only if it is given in the Only file and not given in the Ignore file.
On each input line, the leading sequence of non white characters will be
taken to be a reference that has the purpose of identifying this input
line on the produced permuted index. See @xref{Output formatting in ptx} for
more information about reference production. Using this option change
the default value for option @code{-S}.
line on the produced permuted index. For more information about reference
production, see @xref{Output formatting in ptx}.
Using this option changes the default value for option @samp{-S}.
Using this option, the program does not try very hard to remove
references from contexts in output, but it succeeds in doing so
@emph{when} the context ends exactly at the newline. If option
@code{-r} is used with @code{-S} default value, or when GNU extensions
@samp{-r} is used with @samp{-S} default value, or when GNU extensions
are disabled, this condition is always met and references are completely
excluded from the output contexts.
@@ -2490,25 +2707,25 @@ line or the end of a sentence. In fact, there is other distinction
between end of lines or end of sentences than the effect of this regular
expression, and input line boundaries have no special significance
outside this option. By default, when GNU extensions are enabled and if
@code{-r} option is not used, end of sentences are used. In this
@samp{-r} option is not used, end of sentences are used. In this
case, the precise @var{regex} is imported from GNU emacs:
@example
[.?!][]\"')@}]*\\($\\|\t\\| \\)[ \t\n]*
@end example
Whenever GNU extensions are disabled or if @code{-r} option is used, end
Whenever GNU extensions are disabled or if @samp{-r} option is used, end
of lines are used; in this case, the default @var{regexp} is just:
@example
\n
@end example
Using an empty REGEXP is equivalent to completely disabling end of line or end
of sentence recognition. In this case, the whole file is considered to
be a single big line or sentence. The user might want to disallow all
truncation flag generation as well, through option @code{-F ""}.
@xref{Regexps, , Syntax of Regular Expressions, emacs, The GNU Emacs
Using an empty @var{regexp} is equivalent to completely disabling end of
line or end of sentence recognition. In this case, the whole file is
considered to be a single big line or sentence. The user might want to
disallow all truncation flag generation as well, through option @samp{-F
""}. @xref{Regexps, , Syntax of Regular Expressions, emacs, The GNU Emacs
Manual}.
When the keywords happen to be near the beginning of the input line or
@@ -2530,11 +2747,11 @@ the corresponding characters by @code{ptx} itself.
This option selects which regular expression will describe each keyword.
By default, if GNU extensions are enabled, a word is a sequence of
letters; the @var{regexp} used is @code{\w+}. When GNU extensions are
letters; the @var{regexp} used is @samp{\w+}. When GNU extensions are
disabled, a word is by default anything which ends with a space, a tab
or a newline; the @var{regexp} used is @code{[^ \t\n]+}.
or a newline; the @var{regexp} used is @samp{[^ \t\n]+}.
An empty REGEXP is equivalent to not using this option, letting the
An empty @var{regexp} is equivalent to not using this option, letting the
default dive in. @xref{Regexps, , Syntax of Regular Expressions, emacs,
The GNU Emacs Manual}.
@@ -2548,15 +2765,15 @@ the corresponding characters by @code{ptx} itself.
@node Output formatting in ptx
@subsection Output formatting
Output format is mainly controlled by @code{-O} and @code{-T} options,
described in the table below. When neither @code{-O} nor @code{-T} is
Output format is mainly controlled by @samp{-O} and @samp{-T} options,
described in the table below. When neither @samp{-O} nor @samp{-T} is
selected, and if GNU extensions are enabled, the program choose an
output format suited for a dumb terminal. Each keyword occurrence is
output to the center of one line, surrounded by its left and right
contexts. Each field is properly justified, so the concordance output
could readily be observed. As a special feature, if automatic
references are selected by option @code{-A} and are output before the
left context, that is, if option @code{-R} is @emph{not} selected, then
references are selected by option @samp{-A} and are output before the
left context, that is, if option @samp{-R} is @emph{not} selected, then
a colon is added after the reference; this nicely interfaces with GNU
Emacs @code{next-error} processing. In this default output format, each
white space character, like newline and tab, is merely changed to
@@ -2567,7 +2784,7 @@ characters is transmitted verbatim.
Output format is further controlled by the following options.
@table @code
@table @samp
@item -g @var{number}
@itemx --gap-size=@var{number}
@@ -2580,7 +2797,7 @@ line.
Select the output maximum width of each final line. If references are
used, they are included or excluded from the output maximum width
depending on the value of option @code{-R}. If this option is not
depending on the value of option @samp{-R}. If this option is not
selected, that is, when references are output before the left context,
the output maximum width takes into account the maximum length of all
references. If this options is selected, that is, when references are
@@ -2594,22 +2811,22 @@ them.
Select automatic references. Each input line will have an automatic
reference made up of the file name and the line ordinal, with a single
colon between them. However, the file name will be empty when standard
input is being read. If both @code{-A} and @code{-r} are selected, then
input is being read. If both @samp{-A} and @samp{-r} are selected, then
the input reference is still read and skipped, but the automatic
reference is used at output time, overriding the input reference.
@item -R
@itemx --right-side-refs
In default output format, when option @code{-R} is not used, any
reference produced by the effect of options @code{-r} or @code{-A} are
In default output format, when option @samp{-R} is not used, any
reference produced by the effect of options @samp{-r} or @samp{-A} are
given to the far right of output lines, after the right context. In
default output format, when option @code{-R} is specified, references
default output format, when option @samp{-R} is specified, references
are rather given to the beginning of each output line, before the left
context. For any other output format, option @code{-R} is almost
context. For any other output format, option @samp{-R} is almost
ignored, except for the fact that the width of references is @emph{not}
taken into account in total output width given by @code{-w} whenever
@code{-R} is selected.
taken into account in total output width given by @samp{-w} whenever
@samp{-R} is selected.
This option is automatically selected whenever GNU extensions are
disabled.
@@ -2620,15 +2837,15 @@ disabled.
This option will request that any truncation in the output be reported
using the string @var{string}. Most output fields theoretically extend
towards the beginning or the end of the current line, or current
sentence, as selected with option @code{-S}. But there is a maximum
allowed output line width, changeable through option @code{-w}, which is
sentence, as selected with option @samp{-S}. But there is a maximum
allowed output line width, changeable through option @samp{-w}, which is
further divided into space for various output fields. When a field has
to be truncated because cannot extend until the beginning or the end of
the current line to fit in the, then a truncation occurs. By default,
the string used is a single slash, as in @code{-F /}.
the string used is a single slash, as in @samp{-F /}.
@var{string} may have more than one character, as in @code{-F ...}.
Also, in the particular case @var{string} is empty (@code{-F ""}),
@var{string} may have more than one character, as in @samp{-F ...}.
Also, in the particular case @var{string} is empty (@samp{-F ""}),
truncation flagging is disabled, and no truncation marks are appended in
this case.
@@ -2673,9 +2890,9 @@ line will look like:
@end example
@noindent
so it will be possible to write write a @code{\xx} definition to take
care of the output typesetting. Note that when references are not being
produced, that is, neither option @code{-A} nor option @code{-r} is
so it will be possible to write a @code{\xx} definition to take care of
the output typesetting. Note that when references are not being
produced, that is, neither option @samp{-A} nor option @samp{-r} is
selected, the last parameter of each @code{\xx} call is inhibited.
Option @samp{-M} might be used to change @samp{xx} to another macro
name.
@@ -2734,10 +2951,10 @@ meaning when GNU extensions are enabled, as explained below.
@item
By default, concordance output is not formatted for @code{troff} or
@code{nroff}. It is rather formatted for a dumb terminal. @code{troff}
or @code{nroff} output may still be selected through option @code{-O}.
or @code{nroff} output may still be selected through option @samp{-O}.
@item
Unless @code{-R} option is used, the maximum reference width is
Unless @samp{-R} option is used, the maximum reference width is
subtracted from the total output line width. With GNU extensions
disabled, width of references is not taken into account in the output
line width computations.
@@ -2746,7 +2963,7 @@ line width computations.
All 256 characters, even @kbd{NUL}s, are always read and processed from
input file with no adverse effect, even if GNU extensions are disabled.
However, System V @code{ptx} does not accept 8-bit characters, a few
control characters are rejected, and the tilda @kbd{~} is condemned.
control characters are rejected, and the tilde @kbd{~} is condemned.
@item
Input line length is only limited by available memory, even if GNU
@@ -2829,12 +3046,12 @@ take up 1 character.
Print only the fields listed in @var{field-list}. Fields are
separated by a @key{TAB} by default.
@item -d @var{delim}
@itemx --delimiter=@var{delim}
@item -d @var{input_delim_byte}
@itemx --delimiter=@var{input_delim_byte}
@opindex -d
@opindex --delimiter
For @samp{-f}, fields are separated by the first character in @var{delim}
(default is @key{TAB}).
For @samp{-f}, fields are separated in the input by the first character
in @var{input_delim_byte} (default is @key{TAB}).
@item -n
@opindex -n
@@ -2847,6 +3064,12 @@ Do not split multi-byte characters (no-op for now).
For @samp{-f}, do not print lines that do not contain the field separator
character.
@itemx --output-delimiter=@var{output_delim_string}
@opindex --output-delimiter
For @samp{-f}, output fields are separated by @var{output_delim_string}
The default is to use the input delimiter.
@end table
@@ -3305,7 +3528,7 @@ cat "$@@" \
@subsection Warning messages
@vindex POSIXLY_CORRECT
Setting the environment variable @code{POSIXLY_CORRECT} turns off the
Setting the environment variable @env{POSIXLY_CORRECT} turns off the
following warning and error messages, for strict compliance with
@sc{POSIX.2}. Otherwise, the following diagnostics are issued:
@@ -3950,9 +4173,9 @@ appropriate tool, build one.
As of this writing, all the programs we've discussed are available via
anonymous @code{ftp} from @code{prep.ai.mit.edu} as
@file{/pub/gnu/textutils-1.9.tar.gz} directory.@footnote{Version 1.9 was
current when this column was written. Check the nearest GNU archive for
the current version.}
@file{/pub/gnu/textutils-1.9.tar.gz}.@footnote{Version 1.9 was current
when this column was written. Check the nearest GNU archive for the
current version. The main GNU FTP site is now @code{ftp.gnu.org}.}
None of what I have presented in this column is new. The Software Tools
philosophy was first introduced in the book @cite{Software Tools},

View File

@@ -1,8 +1,10 @@
.deps
Makefile
getdate.c
safe-stat.h
safe-stat.c
getdate.tab.c
lstat.c
safe-lstat.c
safe-lstat.h
getdate.tab.c
.deps
safe-stat.c
safe-stat.h
stat.c

21
lib/.gdb-history Normal file
View File

@@ -0,0 +1,21 @@
r 206.65.212.10
b main
r
n
s
n
p addr
p addr
p he->h_name
n
q
b canon_host
r 206.65.212.10
n
p he
p *he
n
n
p (he->h_addrtype)
n
q

View File

@@ -11,17 +11,27 @@ addext.c argmatch.c backupfile.c basename.c \
closeout.c dirname.c exclude.c filemode.c \
full-write.c human.c idcache.c \
isdir.c long-options.c makepath.c modechange.c hash.c path-concat.c \
quotearg.c safe-read.c save-cwd.c savedir.c stripslash.c userspec.c xgetcwd.c \
xmalloc.c xstrdup.c xstrtol.c xstrtoul.c yesno.c
quotearg.c safe-read.c save-cwd.c savedir.c stripslash.c userspec.c \
version-etc.c xgetcwd.c xmalloc.c xstrdup.c \
xstrtol.c xstrtoul.c xstrtoumax.c yesno.c
libfu_a_LIBADD = @LIBOBJS@ @ALLOCA@
libfu_a_DEPENDENCIES = $(libfu_a_LIBADD)
noinst_HEADERS = argmatch.h backupfile.h closeout.h \
error.h exclude.h filemode.h fnmatch.h fsusage.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
version-etc.h xalloc.h xstrtol.h
BUILT_SOURCES = getdate.c
BUILT_SOURCES = getdate.c lstat.c stat.c
EXTRA_DIST = xstat.in
lstat.c: xstat.in
sed -e '/@IGNORE@/d' -e 's/@xstat@/lstat/g' $(srcdir)/xstat.in > $@-t
mv $@-t $@
stat.c: xstat.in
sed -e '/@IGNORE@/d' -e 's/@xstat@/stat/g' $(srcdir)/xstat.in > $@-t
mv $@-t $@

View File

@@ -1,16 +1,16 @@
# Makefile.in generated automatically by automake 1.3 from Makefile.am
# Makefile.in generated automatically by automake 1.4a from Makefile.am
# Copyright (C) 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
SHELL = /bin/sh
SHELL = @SHELL@
srcdir = @srcdir@
top_srcdir = @top_srcdir@
@@ -31,7 +31,7 @@ mandir = @mandir@
includedir = @includedir@
oldincludedir = /usr/include
DISTDIR =
DESTDIR =
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
@@ -48,6 +48,7 @@ INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_FLAG =
transform = @program_transform_name@
NORMAL_INSTALL = :
@@ -56,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@
@@ -63,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 +96,7 @@ VERSION = @VERSION@
YACC = @YACC@
l = @l@
AUTOMAKE_OPTIONS = ../src/ansi2knr
noinst_LIBRARIES = libfu.a
@@ -100,20 +108,25 @@ addext.c argmatch.c backupfile.c basename.c \
closeout.c dirname.c exclude.c filemode.c \
full-write.c human.c idcache.c \
isdir.c long-options.c makepath.c modechange.c hash.c path-concat.c \
quotearg.c safe-read.c save-cwd.c savedir.c stripslash.c userspec.c xgetcwd.c \
xmalloc.c xstrdup.c xstrtol.c xstrtoul.c yesno.c
quotearg.c safe-read.c save-cwd.c savedir.c stripslash.c userspec.c \
version-etc.c xgetcwd.c xmalloc.c xstrdup.c \
xstrtol.c xstrtoul.c xstrtoumax.c yesno.c
libfu_a_LIBADD = @LIBOBJS@ @ALLOCA@
libfu_a_DEPENDENCIES = $(libfu_a_LIBADD)
noinst_HEADERS = argmatch.h backupfile.h closeout.h \
error.h exclude.h filemode.h fnmatch.h fsusage.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
version-etc.h xalloc.h xstrtol.h
BUILT_SOURCES = getdate.c
BUILT_SOURCES = getdate.c lstat.c stat.c
EXTRA_DIST = xstat.in
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = ../config.h
CONFIG_CLEAN_FILES =
@@ -125,37 +138,41 @@ CPPFLAGS = @CPPFLAGS@
LDFLAGS = @LDFLAGS@
LIBS = @LIBS@
ANSI2KNR = ../src/ansi2knr
libfu_a_OBJECTS = getdate$U.o posixtm$U.o getopt$U.o getopt1$U.o \
am_libfu_a_OBJECTS = getdate$U.o posixtm$U.o getopt$U.o getopt1$U.o \
addext$U.o argmatch$U.o backupfile$U.o basename$U.o closeout$U.o \
dirname$U.o exclude$U.o filemode$U.o full-write$U.o human$U.o \
idcache$U.o isdir$U.o long-options$U.o makepath$U.o modechange$U.o \
hash$U.o path-concat$U.o quotearg$U.o safe-read$U.o save-cwd$U.o \
savedir$U.o stripslash$U.o userspec$U.o xgetcwd$U.o xmalloc$U.o \
xstrdup$U.o xstrtol$U.o xstrtoul$U.o yesno$U.o
savedir$U.o stripslash$U.o userspec$U.o version-etc$U.o xgetcwd$U.o \
xmalloc$U.o xstrdup$U.o xstrtol$U.o xstrtoul$U.o xstrtoumax$U.o \
yesno$U.o
libfu_a_OBJECTS = $(am_libfu_a_OBJECTS)
AR = ar
CFLAGS = @CFLAGS@
COMPILE = $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS)
LINK = $(CC) $(CFLAGS) $(LDFLAGS) -o $@
COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
DIST_SOURCES = $(libfu_a_SOURCES)
HEADERS = $(noinst_HEADERS)
DIST_COMMON = Makefile.am Makefile.in TODO alloca.c chown.c error.c \
error.h euidaccess.c fileblocks.c fnmatch.c fsusage.c ftruncate.c \
getdate.c getgroups.c getline.c group-member.c lchown.c lstat.c \
malloc.c memcmp.c memcpy.c memset.c mkdir.c mktime.c mountlist.c \
obstack.c obstack.h realloc.c regex.c rename.c rmdir.c rpmatch.c stat.c \
stpcpy.c strcasecmp.c strdup.c strftime.c strndup.c strstr.c strtol.c \
strtoul.c strverscmp.c utime.c ylwrap
DIST_COMMON = $(noinst_HEADERS) Makefile.am Makefile.in TODO alloca.c \
chown.c dup2.c error.c error.h euidaccess.c fileblocks.c fnmatch.c \
fsusage.c ftruncate.c getdate.c getgroups.c getline.c group-member.c \
lchown.c lstat.c malloc.c memcmp.c memcpy.c memset.c mkdir.c mktime.c \
mountlist.c obstack.c obstack.h realloc.c regex.c rename.c rmdir.c \
rpmatch.c stat.c stpcpy.c strcasecmp.c strdup.c strftime.c \
strncasecmp.c strndup.c strstr.c strtol.c strtoul.c strtoull.c \
strtoumax.c strverscmp.c utime.c
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
TAR = tar
GZIP = --best
GZIP_ENV = --best
DEP_FILES = .deps/addext.P .deps/alloca.P .deps/argmatch.P \
.deps/backupfile.P .deps/basename.P .deps/chown.P .deps/closeout.P \
.deps/dirname.P .deps/error.P .deps/euidaccess.P .deps/exclude.P \
.deps/fileblocks.P .deps/filemode.P .deps/fnmatch.P .deps/fsusage.P \
.deps/ftruncate.P .deps/full-write.P .deps/getdate .deps/getdate.P \
.deps/dirname.P .deps/dup2.P .deps/error.P .deps/euidaccess.P \
.deps/exclude.P .deps/fileblocks.P .deps/filemode.P .deps/fnmatch.P \
.deps/fsusage.P .deps/ftruncate.P .deps/full-write.P .deps/getdate.P \
.deps/getgroups.P .deps/getline.P .deps/getopt.P .deps/getopt1.P \
.deps/group-member.P .deps/hash.P .deps/human.P .deps/idcache.P \
.deps/isdir.P .deps/lchown.P .deps/long-options.P .deps/lstat.P \
@@ -165,18 +182,19 @@ DEP_FILES = .deps/addext.P .deps/alloca.P .deps/argmatch.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/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/strdup.P .deps/strftime.P .deps/stripslash.P .deps/strncasecmp.P \
.deps/strndup.P .deps/strstr.P .deps/strtol.P .deps/strtoul.P \
.deps/strtoull.P .deps/strtoumax.P .deps/strverscmp.P .deps/userspec.P \
.deps/utime.P .deps/version-etc.P .deps/xgetcwd.P .deps/xmalloc.P \
.deps/xstrdup.P .deps/xstrtol.P .deps/xstrtoul.P .deps/xstrtoumax.P \
.deps/yesno.P
SOURCES = $(libfu_a_SOURCES)
OBJECTS = $(libfu_a_OBJECTS)
all: Makefile $(LIBRARIES) $(HEADERS)
OBJECTS = $(am_libfu_a_OBJECTS)
all: all-redirect
.SUFFIXES:
.SUFFIXES: .S .c .o .s .y
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
.SUFFIXES: .c .o .y
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && $(AUTOMAKE) --gnits lib/Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES)
@@ -193,12 +211,6 @@ distclean-noinstLIBRARIES:
maintainer-clean-noinstLIBRARIES:
.s.o:
$(COMPILE) -c $<
.S.o:
$(COMPILE) -c $<
mostlyclean-compile:
-rm -f *.o core *.core
@@ -209,10 +221,10 @@ distclean-compile:
maintainer-clean-compile:
../src/ansi2knr: ../src/ansi2knr.o
cd ../src && $(MAKE) ansi2knr
cd ../src && $(MAKE) $(AM_MAKEFLAGS) ansi2knr
../src/ansi2knr.o:
cd ../src && $(MAKE) ansi2knr.o
cd ../src && $(MAKE) $(AM_MAKEFLAGS) ansi2knr.o
mostlyclean-kr:
@@ -223,176 +235,231 @@ clean-kr:
distclean-kr:
maintainer-clean-kr:
getdate$U.o:
posixtm$U.o:
getopt$U.o:
getopt1$U.o:
addext$U.o:
argmatch$U.o:
backupfile$U.o:
basename$U.o:
closeout$U.o:
dirname$U.o:
exclude$U.o:
filemode$U.o:
full-write$U.o:
human$U.o:
idcache$U.o:
isdir$U.o:
long-options$U.o:
makepath$U.o:
modechange$U.o:
hash$U.o:
path-concat$U.o:
quotearg$U.o:
safe-read$U.o:
save-cwd$U.o:
savedir$U.o:
stripslash$U.o:
userspec$U.o:
version-etc$U.o:
xgetcwd$U.o:
xmalloc$U.o:
xstrdup$U.o:
xstrtol$U.o:
xstrtoul$U.o:
xstrtoumax$U.o:
yesno$U.o:
libfu.a: $(libfu_a_OBJECTS) $(libfu_a_DEPENDENCIES)
-rm -f libfu.a
$(AR) cru libfu.a $(libfu_a_OBJECTS) $(libfu_a_LIBADD)
$(RANLIB) libfu.a
getdate.o:
lstat.o:
stat.o:
addext_.c: addext.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/addext.c; then echo $(srcdir)/addext.c; else echo addext.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > addext_.c
alloca_.c: alloca.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/alloca.c; then echo $(srcdir)/alloca.c; else echo alloca.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > alloca_.c
argmatch_.c: argmatch.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/argmatch.c; then echo $(srcdir)/argmatch.c; else echo argmatch.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > argmatch_.c
backupfile_.c: backupfile.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/backupfile.c; then echo $(srcdir)/backupfile.c; else echo backupfile.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > backupfile_.c
basename_.c: basename.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/basename.c; then echo $(srcdir)/basename.c; else echo basename.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > basename_.c
chown_.c: chown.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/chown.c; then echo $(srcdir)/chown.c; else echo chown.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > chown_.c
closeout_.c: closeout.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/closeout.c; then echo $(srcdir)/closeout.c; else echo closeout.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > closeout_.c
dirname_.c: dirname.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/dirname.c; then echo $(srcdir)/dirname.c; else echo dirname.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > dirname_.c
dup2_.c: dup2.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/dup2.c; then echo $(srcdir)/dup2.c; else echo dup2.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > dup2_.c
error_.c: error.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/error.c; then echo $(srcdir)/error.c; else echo error.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > error_.c
euidaccess_.c: euidaccess.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/euidaccess.c; then echo $(srcdir)/euidaccess.c; else echo euidaccess.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > euidaccess_.c
exclude_.c: exclude.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/exclude.c; then echo $(srcdir)/exclude.c; else echo exclude.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > exclude_.c
fileblocks_.c: fileblocks.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/fileblocks.c; then echo $(srcdir)/fileblocks.c; else echo fileblocks.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > fileblocks_.c
filemode_.c: filemode.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/filemode.c; then echo $(srcdir)/filemode.c; else echo filemode.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > filemode_.c
fnmatch_.c: fnmatch.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/fnmatch.c; then echo $(srcdir)/fnmatch.c; else echo fnmatch.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > fnmatch_.c
fsusage_.c: fsusage.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/fsusage.c; then echo $(srcdir)/fsusage.c; else echo fsusage.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > fsusage_.c
ftruncate_.c: ftruncate.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/ftruncate.c; then echo $(srcdir)/ftruncate.c; else echo ftruncate.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > ftruncate_.c
full-write_.c: full-write.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/full-write.c; then echo $(srcdir)/full-write.c; else echo full-write.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > full-write_.c
getdate_.c: getdate.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/getdate.c; then echo $(srcdir)/getdate.c; else echo getdate.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > getdate_.c
getgroups_.c: getgroups.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/getgroups.c; then echo $(srcdir)/getgroups.c; else echo getgroups.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > getgroups_.c
getline_.c: getline.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/getline.c; then echo $(srcdir)/getline.c; else echo getline.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > getline_.c
getopt_.c: getopt.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/getopt.c; then echo $(srcdir)/getopt.c; else echo getopt.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > getopt_.c
getopt1_.c: getopt1.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/getopt1.c; then echo $(srcdir)/getopt1.c; else echo getopt1.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > getopt1_.c
group-member_.c: group-member.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/group-member.c; then echo $(srcdir)/group-member.c; else echo group-member.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > group-member_.c
hash_.c: hash.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/hash.c; then echo $(srcdir)/hash.c; else echo hash.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > hash_.c
human_.c: human.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/human.c; then echo $(srcdir)/human.c; else echo human.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > human_.c
idcache_.c: idcache.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/idcache.c; then echo $(srcdir)/idcache.c; else echo idcache.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > idcache_.c
isdir_.c: isdir.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/isdir.c; then echo $(srcdir)/isdir.c; else echo isdir.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > isdir_.c
lchown_.c: lchown.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/lchown.c; then echo $(srcdir)/lchown.c; else echo lchown.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > lchown_.c
long-options_.c: long-options.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/long-options.c; then echo $(srcdir)/long-options.c; else echo long-options.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > long-options_.c
lstat_.c: lstat.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/lstat.c; then echo $(srcdir)/lstat.c; else echo lstat.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > lstat_.c
makepath_.c: makepath.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/makepath.c; then echo $(srcdir)/makepath.c; else echo makepath.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > makepath_.c
malloc_.c: malloc.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/malloc.c; then echo $(srcdir)/malloc.c; else echo malloc.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > malloc_.c
memcmp_.c: memcmp.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/memcmp.c; then echo $(srcdir)/memcmp.c; else echo memcmp.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > memcmp_.c
memcpy_.c: memcpy.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/memcpy.c; then echo $(srcdir)/memcpy.c; else echo memcpy.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > memcpy_.c
memset_.c: memset.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/memset.c; then echo $(srcdir)/memset.c; else echo memset.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > memset_.c
mkdir_.c: mkdir.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/mkdir.c; then echo $(srcdir)/mkdir.c; else echo mkdir.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > mkdir_.c
mktime_.c: mktime.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/mktime.c; then echo $(srcdir)/mktime.c; else echo mktime.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > mktime_.c
modechange_.c: modechange.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/modechange.c; then echo $(srcdir)/modechange.c; else echo modechange.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > modechange_.c
mountlist_.c: mountlist.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/mountlist.c; then echo $(srcdir)/mountlist.c; else echo mountlist.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > mountlist_.c
obstack_.c: obstack.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/obstack.c; then echo $(srcdir)/obstack.c; else echo obstack.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > obstack_.c
path-concat_.c: path-concat.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/path-concat.c; then echo $(srcdir)/path-concat.c; else echo path-concat.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > path-concat_.c
posixtm_.c: posixtm.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/posixtm.c; then echo $(srcdir)/posixtm.c; else echo posixtm.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > posixtm_.c
quotearg_.c: quotearg.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/quotearg.c; then echo $(srcdir)/quotearg.c; else echo quotearg.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > quotearg_.c
realloc_.c: realloc.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/realloc.c; then echo $(srcdir)/realloc.c; else echo realloc.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > realloc_.c
regex_.c: regex.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/regex.c; then echo $(srcdir)/regex.c; else echo regex.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > regex_.c
rename_.c: rename.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/rename.c; then echo $(srcdir)/rename.c; else echo rename.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > rename_.c
rmdir_.c: rmdir.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/rmdir.c; then echo $(srcdir)/rmdir.c; else echo rmdir.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > rmdir_.c
rpmatch_.c: rpmatch.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/rpmatch.c; then echo $(srcdir)/rpmatch.c; else echo rpmatch.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > rpmatch_.c
safe-read_.c: safe-read.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/safe-read.c; then echo $(srcdir)/safe-read.c; else echo safe-read.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > safe-read_.c
save-cwd_.c: save-cwd.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/save-cwd.c; then echo $(srcdir)/save-cwd.c; else echo save-cwd.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > save-cwd_.c
savedir_.c: savedir.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/savedir.c; then echo $(srcdir)/savedir.c; else echo savedir.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > savedir_.c
stat_.c: stat.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/stat.c; then echo $(srcdir)/stat.c; else echo stat.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > stat_.c
stpcpy_.c: stpcpy.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/stpcpy.c; then echo $(srcdir)/stpcpy.c; else echo stpcpy.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > stpcpy_.c
strcasecmp_.c: strcasecmp.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/strcasecmp.c; then echo $(srcdir)/strcasecmp.c; else echo strcasecmp.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > strcasecmp_.c
strdup_.c: strdup.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/strdup.c; then echo $(srcdir)/strdup.c; else echo strdup.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > strdup_.c
strftime_.c: strftime.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/strftime.c; then echo $(srcdir)/strftime.c; else echo strftime.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > strftime_.c
stripslash_.c: stripslash.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/stripslash.c; then echo $(srcdir)/stripslash.c; else echo stripslash.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > stripslash_.c
strncasecmp_.c: strncasecmp.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/strncasecmp.c; then echo $(srcdir)/strncasecmp.c; else echo strncasecmp.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > strncasecmp_.c
strndup_.c: strndup.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/strndup.c; then echo $(srcdir)/strndup.c; else echo strndup.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > strndup_.c
strstr_.c: strstr.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/strstr.c; then echo $(srcdir)/strstr.c; else echo strstr.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > strstr_.c
strtol_.c: strtol.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/strtol.c; then echo $(srcdir)/strtol.c; else echo strtol.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > strtol_.c
strtoul_.c: strtoul.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/strtoul.c; then echo $(srcdir)/strtoul.c; else echo strtoul.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > strtoul_.c
strtoull_.c: strtoull.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/strtoull.c; then echo $(srcdir)/strtoull.c; else echo strtoull.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > strtoull_.c
strtoumax_.c: strtoumax.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/strtoumax.c; then echo $(srcdir)/strtoumax.c; else echo strtoumax.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > strtoumax_.c
strverscmp_.c: strverscmp.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/strverscmp.c; then echo $(srcdir)/strverscmp.c; else echo strverscmp.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > strverscmp_.c
userspec_.c: userspec.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/userspec.c; then echo $(srcdir)/userspec.c; else echo userspec.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > userspec_.c
utime_.c: utime.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/utime.c; then echo $(srcdir)/utime.c; else echo utime.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > utime_.c
version-etc_.c: version-etc.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/version-etc.c; then echo $(srcdir)/version-etc.c; else echo version-etc.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > version-etc_.c
xgetcwd_.c: xgetcwd.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/xgetcwd.c; then echo $(srcdir)/xgetcwd.c; else echo xgetcwd.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > xgetcwd_.c
xmalloc_.c: xmalloc.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/xmalloc.c; then echo $(srcdir)/xmalloc.c; else echo xmalloc.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > xmalloc_.c
xstrdup_.c: xstrdup.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/xstrdup.c; then echo $(srcdir)/xstrdup.c; else echo xstrdup.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > xstrdup_.c
xstrtol_.c: xstrtol.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/xstrtol.c; then echo $(srcdir)/xstrtol.c; else echo xstrtol.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > xstrtol_.c
xstrtoul_.c: xstrtoul.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/xstrtoul.c; then echo $(srcdir)/xstrtoul.c; else echo xstrtoul.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > xstrtoul_.c
xstrtoumax_.c: xstrtoumax.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/xstrtoumax.c; then echo $(srcdir)/xstrtoumax.c; else echo xstrtoumax.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > xstrtoumax_.c
yesno_.c: yesno.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/yesno.c; then echo $(srcdir)/yesno.c; else echo yesno.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > yesno_.c
addext_.o alloca_.o argmatch_.o backupfile_.o basename_.o chown_.o \
closeout_.o dirname_.o dup2_.o error_.o euidaccess_.o exclude_.o \
fileblocks_.o filemode_.o fnmatch_.o fsusage_.o ftruncate_.o \
full-write_.o getdate_.o getgroups_.o getline_.o getopt_.o getopt1_.o \
group-member_.o hash_.o human_.o idcache_.o isdir_.o lchown_.o \
long-options_.o lstat_.o makepath_.o malloc_.o memcmp_.o memcpy_.o \
memset_.o mkdir_.o mktime_.o modechange_.o mountlist_.o obstack_.o \
path-concat_.o posixtm_.o quotearg_.o realloc_.o regex_.o rename_.o \
rmdir_.o rpmatch_.o safe-read_.o save-cwd_.o savedir_.o stat_.o \
stpcpy_.o strcasecmp_.o strdup_.o strftime_.o stripslash_.o \
strncasecmp_.o strndup_.o strstr_.o strtol_.o strtoul_.o strtoull_.o \
strtoumax_.o strverscmp_.o userspec_.o utime_.o version-etc_.o \
xgetcwd_.o xmalloc_.o xstrdup_.o xstrtol_.o xstrtoul_.o xstrtoumax_.o \
yesno_.o : $(ANSI2KNR)
.y.c:
$(YACC) $(YFLAGS) $< && mv y.tab.c $*.c
$(YACC) $(AM_YFLAGS) $(YFLAGS) $< && mv y.tab.c $*.c
if test -f y.tab.h; then \
if cmp -s y.tab.h $*.h; then rm -f y.tab.h; else mv y.tab.h $*.h; fi; \
else :; fi
getdate.h: getdate.c
addext_.c: addext.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/addext.c; then echo $(srcdir)/addext.c; else echo addext.c; fi` | $(ANSI2KNR) > addext_.c
alloca_.c: alloca.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/alloca.c; then echo $(srcdir)/alloca.c; else echo alloca.c; fi` | $(ANSI2KNR) > alloca_.c
argmatch_.c: argmatch.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/argmatch.c; then echo $(srcdir)/argmatch.c; else echo argmatch.c; fi` | $(ANSI2KNR) > argmatch_.c
backupfile_.c: backupfile.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/backupfile.c; then echo $(srcdir)/backupfile.c; else echo backupfile.c; fi` | $(ANSI2KNR) > backupfile_.c
basename_.c: basename.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/basename.c; then echo $(srcdir)/basename.c; else echo basename.c; fi` | $(ANSI2KNR) > basename_.c
chown_.c: chown.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/chown.c; then echo $(srcdir)/chown.c; else echo chown.c; fi` | $(ANSI2KNR) > chown_.c
closeout_.c: closeout.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/closeout.c; then echo $(srcdir)/closeout.c; else echo closeout.c; fi` | $(ANSI2KNR) > closeout_.c
dirname_.c: dirname.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/dirname.c; then echo $(srcdir)/dirname.c; else echo dirname.c; fi` | $(ANSI2KNR) > dirname_.c
error_.c: error.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/error.c; then echo $(srcdir)/error.c; else echo error.c; fi` | $(ANSI2KNR) > error_.c
euidaccess_.c: euidaccess.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/euidaccess.c; then echo $(srcdir)/euidaccess.c; else echo euidaccess.c; fi` | $(ANSI2KNR) > euidaccess_.c
exclude_.c: exclude.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/exclude.c; then echo $(srcdir)/exclude.c; else echo exclude.c; fi` | $(ANSI2KNR) > exclude_.c
fileblocks_.c: fileblocks.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/fileblocks.c; then echo $(srcdir)/fileblocks.c; else echo fileblocks.c; fi` | $(ANSI2KNR) > fileblocks_.c
filemode_.c: filemode.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/filemode.c; then echo $(srcdir)/filemode.c; else echo filemode.c; fi` | $(ANSI2KNR) > filemode_.c
fnmatch_.c: fnmatch.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/fnmatch.c; then echo $(srcdir)/fnmatch.c; else echo fnmatch.c; fi` | $(ANSI2KNR) > fnmatch_.c
fsusage_.c: fsusage.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/fsusage.c; then echo $(srcdir)/fsusage.c; else echo fsusage.c; fi` | $(ANSI2KNR) > fsusage_.c
ftruncate_.c: ftruncate.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/ftruncate.c; then echo $(srcdir)/ftruncate.c; else echo ftruncate.c; fi` | $(ANSI2KNR) > ftruncate_.c
full-write_.c: full-write.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/full-write.c; then echo $(srcdir)/full-write.c; else echo full-write.c; fi` | $(ANSI2KNR) > full-write_.c
getdate_.c: getdate.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/getdate.c; then echo $(srcdir)/getdate.c; else echo getdate.c; fi` | $(ANSI2KNR) > getdate_.c
getgroups_.c: getgroups.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/getgroups.c; then echo $(srcdir)/getgroups.c; else echo getgroups.c; fi` | $(ANSI2KNR) > getgroups_.c
getline_.c: getline.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/getline.c; then echo $(srcdir)/getline.c; else echo getline.c; fi` | $(ANSI2KNR) > getline_.c
getopt_.c: getopt.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/getopt.c; then echo $(srcdir)/getopt.c; else echo getopt.c; fi` | $(ANSI2KNR) > getopt_.c
getopt1_.c: getopt1.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/getopt1.c; then echo $(srcdir)/getopt1.c; else echo getopt1.c; fi` | $(ANSI2KNR) > getopt1_.c
group-member_.c: group-member.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/group-member.c; then echo $(srcdir)/group-member.c; else echo group-member.c; fi` | $(ANSI2KNR) > group-member_.c
hash_.c: hash.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/hash.c; then echo $(srcdir)/hash.c; else echo hash.c; fi` | $(ANSI2KNR) > hash_.c
human_.c: human.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/human.c; then echo $(srcdir)/human.c; else echo human.c; fi` | $(ANSI2KNR) > human_.c
idcache_.c: idcache.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/idcache.c; then echo $(srcdir)/idcache.c; else echo idcache.c; fi` | $(ANSI2KNR) > idcache_.c
isdir_.c: isdir.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/isdir.c; then echo $(srcdir)/isdir.c; else echo isdir.c; fi` | $(ANSI2KNR) > isdir_.c
lchown_.c: lchown.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/lchown.c; then echo $(srcdir)/lchown.c; else echo lchown.c; fi` | $(ANSI2KNR) > lchown_.c
long-options_.c: long-options.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/long-options.c; then echo $(srcdir)/long-options.c; else echo long-options.c; fi` | $(ANSI2KNR) > long-options_.c
lstat_.c: lstat.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/lstat.c; then echo $(srcdir)/lstat.c; else echo lstat.c; fi` | $(ANSI2KNR) > lstat_.c
makepath_.c: makepath.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/makepath.c; then echo $(srcdir)/makepath.c; else echo makepath.c; fi` | $(ANSI2KNR) > makepath_.c
malloc_.c: malloc.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/malloc.c; then echo $(srcdir)/malloc.c; else echo malloc.c; fi` | $(ANSI2KNR) > malloc_.c
memcmp_.c: memcmp.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/memcmp.c; then echo $(srcdir)/memcmp.c; else echo memcmp.c; fi` | $(ANSI2KNR) > memcmp_.c
memcpy_.c: memcpy.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/memcpy.c; then echo $(srcdir)/memcpy.c; else echo memcpy.c; fi` | $(ANSI2KNR) > memcpy_.c
memset_.c: memset.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/memset.c; then echo $(srcdir)/memset.c; else echo memset.c; fi` | $(ANSI2KNR) > memset_.c
mkdir_.c: mkdir.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/mkdir.c; then echo $(srcdir)/mkdir.c; else echo mkdir.c; fi` | $(ANSI2KNR) > mkdir_.c
mktime_.c: mktime.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/mktime.c; then echo $(srcdir)/mktime.c; else echo mktime.c; fi` | $(ANSI2KNR) > mktime_.c
modechange_.c: modechange.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/modechange.c; then echo $(srcdir)/modechange.c; else echo modechange.c; fi` | $(ANSI2KNR) > modechange_.c
mountlist_.c: mountlist.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/mountlist.c; then echo $(srcdir)/mountlist.c; else echo mountlist.c; fi` | $(ANSI2KNR) > mountlist_.c
obstack_.c: obstack.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/obstack.c; then echo $(srcdir)/obstack.c; else echo obstack.c; fi` | $(ANSI2KNR) > obstack_.c
path-concat_.c: path-concat.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/path-concat.c; then echo $(srcdir)/path-concat.c; else echo path-concat.c; fi` | $(ANSI2KNR) > path-concat_.c
posixtm_.c: posixtm.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/posixtm.c; then echo $(srcdir)/posixtm.c; else echo posixtm.c; fi` | $(ANSI2KNR) > posixtm_.c
quotearg_.c: quotearg.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/quotearg.c; then echo $(srcdir)/quotearg.c; else echo quotearg.c; fi` | $(ANSI2KNR) > quotearg_.c
realloc_.c: realloc.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/realloc.c; then echo $(srcdir)/realloc.c; else echo realloc.c; fi` | $(ANSI2KNR) > realloc_.c
regex_.c: regex.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/regex.c; then echo $(srcdir)/regex.c; else echo regex.c; fi` | $(ANSI2KNR) > regex_.c
rename_.c: rename.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/rename.c; then echo $(srcdir)/rename.c; else echo rename.c; fi` | $(ANSI2KNR) > rename_.c
rmdir_.c: rmdir.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/rmdir.c; then echo $(srcdir)/rmdir.c; else echo rmdir.c; fi` | $(ANSI2KNR) > rmdir_.c
rpmatch_.c: rpmatch.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/rpmatch.c; then echo $(srcdir)/rpmatch.c; else echo rpmatch.c; fi` | $(ANSI2KNR) > rpmatch_.c
safe-read_.c: safe-read.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/safe-read.c; then echo $(srcdir)/safe-read.c; else echo safe-read.c; fi` | $(ANSI2KNR) > safe-read_.c
save-cwd_.c: save-cwd.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/save-cwd.c; then echo $(srcdir)/save-cwd.c; else echo save-cwd.c; fi` | $(ANSI2KNR) > save-cwd_.c
savedir_.c: savedir.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/savedir.c; then echo $(srcdir)/savedir.c; else echo savedir.c; fi` | $(ANSI2KNR) > savedir_.c
stat_.c: stat.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/stat.c; then echo $(srcdir)/stat.c; else echo stat.c; fi` | $(ANSI2KNR) > stat_.c
stpcpy_.c: stpcpy.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/stpcpy.c; then echo $(srcdir)/stpcpy.c; else echo stpcpy.c; fi` | $(ANSI2KNR) > stpcpy_.c
strcasecmp_.c: strcasecmp.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/strcasecmp.c; then echo $(srcdir)/strcasecmp.c; else echo strcasecmp.c; fi` | $(ANSI2KNR) > strcasecmp_.c
strdup_.c: strdup.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/strdup.c; then echo $(srcdir)/strdup.c; else echo strdup.c; fi` | $(ANSI2KNR) > strdup_.c
strftime_.c: strftime.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/strftime.c; then echo $(srcdir)/strftime.c; else echo strftime.c; fi` | $(ANSI2KNR) > strftime_.c
stripslash_.c: stripslash.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/stripslash.c; then echo $(srcdir)/stripslash.c; else echo stripslash.c; fi` | $(ANSI2KNR) > stripslash_.c
strndup_.c: strndup.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/strndup.c; then echo $(srcdir)/strndup.c; else echo strndup.c; fi` | $(ANSI2KNR) > strndup_.c
strstr_.c: strstr.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/strstr.c; then echo $(srcdir)/strstr.c; else echo strstr.c; fi` | $(ANSI2KNR) > strstr_.c
strtol_.c: strtol.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/strtol.c; then echo $(srcdir)/strtol.c; else echo strtol.c; fi` | $(ANSI2KNR) > strtol_.c
strtoul_.c: strtoul.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/strtoul.c; then echo $(srcdir)/strtoul.c; else echo strtoul.c; fi` | $(ANSI2KNR) > strtoul_.c
strverscmp_.c: strverscmp.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/strverscmp.c; then echo $(srcdir)/strverscmp.c; else echo strverscmp.c; fi` | $(ANSI2KNR) > strverscmp_.c
userspec_.c: userspec.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/userspec.c; then echo $(srcdir)/userspec.c; else echo userspec.c; fi` | $(ANSI2KNR) > userspec_.c
utime_.c: utime.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/utime.c; then echo $(srcdir)/utime.c; else echo utime.c; fi` | $(ANSI2KNR) > utime_.c
xgetcwd_.c: xgetcwd.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/xgetcwd.c; then echo $(srcdir)/xgetcwd.c; else echo xgetcwd.c; fi` | $(ANSI2KNR) > xgetcwd_.c
xmalloc_.c: xmalloc.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/xmalloc.c; then echo $(srcdir)/xmalloc.c; else echo xmalloc.c; fi` | $(ANSI2KNR) > xmalloc_.c
xstrdup_.c: xstrdup.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/xstrdup.c; then echo $(srcdir)/xstrdup.c; else echo xstrdup.c; fi` | $(ANSI2KNR) > xstrdup_.c
xstrtol_.c: xstrtol.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/xstrtol.c; then echo $(srcdir)/xstrtol.c; else echo xstrtol.c; fi` | $(ANSI2KNR) > xstrtol_.c
xstrtoul_.c: xstrtoul.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/xstrtoul.c; then echo $(srcdir)/xstrtoul.c; else echo xstrtoul.c; fi` | $(ANSI2KNR) > xstrtoul_.c
yesno_.c: yesno.c $(ANSI2KNR)
$(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/yesno.c; then echo $(srcdir)/yesno.c; else echo yesno.c; fi` | $(ANSI2KNR) > yesno_.c
addext_.o alloca_.o argmatch_.o backupfile_.o basename_.o chown_.o \
closeout_.o dirname_.o error_.o euidaccess_.o exclude_.o fileblocks_.o \
filemode_.o fnmatch_.o fsusage_.o ftruncate_.o full-write_.o getdate_.o \
getgroups_.o getline_.o getopt_.o getopt1_.o group-member_.o hash_.o \
human_.o idcache_.o isdir_.o lchown_.o long-options_.o lstat_.o \
makepath_.o malloc_.o memcmp_.o memcpy_.o memset_.o mkdir_.o mktime_.o \
modechange_.o mountlist_.o obstack_.o path-concat_.o posixtm_.o \
quotearg_.o realloc_.o regex_.o rename_.o rmdir_.o rpmatch_.o \
safe-read_.o save-cwd_.o savedir_.o stat_.o stpcpy_.o strcasecmp_.o \
strdup_.o strftime_.o stripslash_.o strndup_.o strstr_.o strtol_.o \
strtoul_.o strverscmp_.o userspec_.o utime_.o xgetcwd_.o xmalloc_.o \
xstrdup_.o xstrtol_.o xstrtoul_.o yesno_.o : $(ANSI2KNR)
tags: TAGS
ID: $(HEADERS) $(SOURCES) $(LISP)
list='$(SOURCES) $(HEADERS)'; \
unique=`for i in $$list; do echo $$i; done | \
awk ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
here=`pwd` && cd $(srcdir) \
&& mkid -f$$here/ID $(SOURCES) $(HEADERS) $(LISP)
&& mkid -f$$here/ID $$unique $(LISP)
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP)
tags=; \
@@ -425,11 +492,16 @@ distdir: $(DISTFILES)
&& $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnits lib/Makefile
@for file in $(DISTFILES); do \
d=$(srcdir); \
test -f $(distdir)/$$file \
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \
|| cp -p $$d/$$file $(distdir)/$$file; \
if test -d $$d/$$file; then \
cp -pr $$d/$$file $(distdir)/$$file; \
else \
test -f $(distdir)/$$file \
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \
|| cp -p $$d/$$file $(distdir)/$$file || :; \
fi; \
done
DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :)
-include $(DEP_FILES)
@@ -439,84 +511,110 @@ mostlyclean-depend:
clean-depend:
distclean-depend:
-rm -rf .deps
maintainer-clean-depend:
-rm -rf .deps
%.o: %.c
@echo '$(COMPILE) -c $<'; \
$(COMPILE) -Wp,-MD,.deps/$(*F).P -c $<
$(COMPILE) -Wp,-MD,.deps/$(*D)/$(*F).pp -c $<
@-cp .deps/$(*D)/$(*F).pp .deps/$(*D)/$(*F).P; \
tr ' ' '\012' < .deps/$(*D)/$(*F).pp \
| sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
>> .deps/$(*D)/$(*F).P; \
rm .deps/$(*D)/$(*F).pp
%.lo: %.c
@echo '$(LTCOMPILE) -c $<'; \
$(LTCOMPILE) -Wp,-MD,.deps/$(*F).p -c $<
@-sed -e 's/^\([^:]*\)\.o:/\1.lo \1.o:/' \
< .deps/$(*F).p > .deps/$(*F).P
@-rm -f .deps/$(*F).p
info:
dvi:
check: all
$(MAKE)
installcheck:
install-exec:
@$(NORMAL_INSTALL)
$(LTCOMPILE) -Wp,-MD,.deps/$(*D)/$(*F).pp -c $<
@-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \
< .deps/$(*D)/$(*F).pp > .deps/$(*D)/$(*F).P; \
tr ' ' '\012' < .deps/$(*D)/$(*F).pp \
| sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
>> .deps/$(*D)/$(*F).P; \
rm -f .deps/$(*D)/$(*F).pp
info-am:
info: info-am
dvi-am:
dvi: dvi-am
check-am: all-am
check: check-am
installcheck-am:
installcheck: installcheck-am
install-exec-am:
install-exec: install-exec-am
install-data:
@$(NORMAL_INSTALL)
install: install-exec install-data all
@:
uninstall:
install-data-am:
install-data: install-data-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
install: install-am
uninstall-am:
uninstall: uninstall-am
all-am: Makefile $(LIBRARIES) $(HEADERS)
all-redirect: all-am
install-strip:
$(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' INSTALL_SCRIPT='$(INSTALL_PROGRAM)' install
$(MAKE) $(AM_MAKEFLAGS) INSTALL_STRIP_FLAG=-s install
installdirs:
mostlyclean-generic:
-test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
clean-generic:
-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
distclean-generic:
-rm -f Makefile $(DISTCLEANFILES)
-rm -f Makefile $(CONFIG_CLEAN_FILES)
-rm -f config.cache config.log stamp-h stamp-h[0-9]*
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
maintainer-clean-generic:
-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
mostlyclean: mostlyclean-noinstLIBRARIES mostlyclean-compile \
-test -z "getdate.c$(BUILT_SOURCES)" || rm -f getdate.c $(BUILT_SOURCES)
mostlyclean-am: mostlyclean-noinstLIBRARIES mostlyclean-compile \
mostlyclean-kr mostlyclean-tags mostlyclean-depend \
mostlyclean-generic
clean: clean-noinstLIBRARIES clean-compile clean-kr clean-tags \
clean-depend clean-generic mostlyclean
mostlyclean: mostlyclean-am
distclean: distclean-noinstLIBRARIES distclean-compile distclean-kr \
distclean-tags distclean-depend distclean-generic clean
-rm -f config.status
clean-am: clean-noinstLIBRARIES clean-compile clean-kr clean-tags \
clean-depend clean-generic mostlyclean-am
maintainer-clean: maintainer-clean-noinstLIBRARIES \
clean: clean-am
distclean-am: distclean-noinstLIBRARIES distclean-compile distclean-kr \
distclean-tags distclean-depend distclean-generic \
clean-am
distclean: distclean-am
maintainer-clean-am: maintainer-clean-noinstLIBRARIES \
maintainer-clean-compile maintainer-clean-kr \
maintainer-clean-tags maintainer-clean-depend \
maintainer-clean-generic distclean
maintainer-clean-generic distclean-am
@echo "This command is intended for maintainers to use;"
@echo "it deletes files that may require special tools to rebuild."
maintainer-clean: maintainer-clean-am
.PHONY: mostlyclean-noinstLIBRARIES distclean-noinstLIBRARIES \
clean-noinstLIBRARIES maintainer-clean-noinstLIBRARIES \
mostlyclean-compile distclean-compile clean-compile \
maintainer-clean-compile mostlyclean-kr distclean-kr clean-kr \
maintainer-clean-kr tags mostlyclean-tags distclean-tags clean-tags \
maintainer-clean-tags distdir mostlyclean-depend distclean-depend \
clean-depend maintainer-clean-depend info dvi installcheck install-exec \
install-data install uninstall all installdirs mostlyclean-generic \
clean-depend maintainer-clean-depend info-am info dvi-am dvi check \
check-am installcheck-am installcheck install-exec-am install-exec \
install-data-am install-data install-am install uninstall-am uninstall \
all-redirect all-am all install-strip installdirs mostlyclean-generic \
distclean-generic clean-generic maintainer-clean-generic clean \
mostlyclean distclean maintainer-clean
lstat.c: xstat.in
sed -e '/@IGNORE@/d' -e 's/@xstat@/lstat/g' $(srcdir)/xstat.in > $@-t
mv $@-t $@
stat.c: xstat.in
sed -e '/@IGNORE@/d' -e 's/@xstat@/stat/g' $(srcdir)/xstat.in > $@-t
mv $@-t $@
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.

View File

@@ -1,5 +1,5 @@
/* addext.c -- add an extension to a file name
Copyright (C) 1990, 1997 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
@@ -23,10 +23,10 @@
#endif
#ifndef HAVE_DOS_FILE_NAMES
#define HAVE_DOS_FILE_NAMES 0
# define HAVE_DOS_FILE_NAMES 0
#endif
#ifndef HAVE_LONG_FILE_NAMES
#define HAVE_LONG_FILE_NAMES 0
# define HAVE_LONG_FILE_NAMES 0
#endif
#include <backupfile.h>
@@ -35,7 +35,7 @@
# include <limits.h>
#endif
#ifndef _POSIX_NAME_MAX
#define _POSIX_NAME_MAX 14
# define _POSIX_NAME_MAX 14
#endif
#include <sys/types.h>
@@ -49,14 +49,13 @@
# include <unistd.h>
#endif
char *base_name PARAMS ((char const *));
/* Append to FILENAME the extension EXT, unless the result would be too long,
in which case just append the character E. */
void
addext (filename, ext, e)
char *filename;
char const *ext;
int e;
addext (char *filename, char const *ext, int e)
{
char *s = base_name (filename);
size_t slen = strlen (s), extlen = strlen (ext);

View File

@@ -161,8 +161,7 @@ static header *last_alloca_header = NULL; /* -> last alloca header. */
implementations of C, for example under Gould's UTX/32. */
pointer
alloca (size)
unsigned size;
alloca (unsigned size)
{
auto char probe; /* Probes stack depth: */
register char *depth = ADDRESS_FUNCTION (probe);

View File

@@ -1,5 +1,5 @@
/* argmatch.c -- find a match for a string in an array
Copyright (C) 1990, 1997 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
@@ -12,36 +12,86 @@
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; see the file COPYING.
If not, write to the Free Software Foundation,
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
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 David MacKenzie <djm@gnu.ai.mit.edu> */
/* Written by David MacKenzie <djm@ai.mit.edu>
Modified by Akim Demaille <demaille@inf.enst.fr> */
#if HAVE_CONFIG_H
# include <config.h>
#endif
#include <argmatch.h>
#include <sys/types.h>
#include "argmatch.h"
#include <stdio.h>
#if HAVE_STRING_H
#ifdef STDC_HEADERS
# include <string.h>
#else
# include <strings.h>
#endif
/* If ARG is an unambiguous match for an element of the
null-terminated array OPTLIST, return the index in OPTLIST
of the matched element, else -1 if it does not match any element
or -2 if it is ambiguous (is a prefix of more than one element). */
#if HAVE_LOCALE_H
# include <locale.h>
#endif
int
argmatch (const char *arg, const char *const *optlist)
#if ENABLE_NLS
# include <libintl.h>
# define _(Text) gettext (Text)
#else
# define _(Text) Text
#endif
#include "error.h"
#include "quotearg.h"
/* When reporting an invalid argument, show nonprinting characters
by using the quoting style ARGMATCH_QUOTING_STYLE. Do not use
literal_quoting_style. */
#ifndef ARGMATCH_QUOTING_STYLE
# define ARGMATCH_QUOTING_STYLE escape_quoting_style
#endif
/* The following test is to work around the gross typo in
systems like Sony NEWS-OS Release 4.0C, whereby EXIT_FAILURE
is defined to 0, not 1. */
#if !EXIT_FAILURE
# undef EXIT_FAILURE
# define EXIT_FAILURE 1
#endif
/* Non failing version of argmatch call this function after failing. */
#ifndef ARGMATCH_DIE
# define ARGMATCH_DIE exit (EXIT_FAILURE)
#endif
#ifdef ARGMATCH_DIE_DECL
ARGMATCH_DIE_DECL;
#endif
static void
__argmatch_die (void)
{
int i; /* Temporary index in OPTLIST. */
ARGMATCH_DIE;
}
/* Used by XARGMATCH and XARGCASEMATCH. See description in argmatch.h.
Default to __argmatch_die, but allow caller to change this at run-time. */
argmatch_exit_fn argmatch_die = __argmatch_die;
/* If ARG is an unambiguous match for an element of the
null-terminated array ARGLIST, return the index in ARGLIST
of the matched element, else -1 if it does not match any element
or -2 if it is ambiguous (is a prefix of more than one element).
If SENSITIVE, comparison is case sensitive.
If VALLIST is none null, use it to resolve ambiguities limited to
synonyms, i.e., for
"yes", "yop" -> 0
"no", "nope" -> 1
"y" is a valid argument, for `0', and "n" for `1'. */
static int
__argmatch_internal (const char *arg, const char *const *arglist,
const char *vallist, size_t valsize,
int case_sensitive)
{
int i; /* Temporary index in ARGLIST. */
size_t arglen; /* Length of ARG. */
int matchind = -1; /* Index of first nonexact match. */
int ambiguous = 0; /* If nonzero, multiple nonexact match(es). */
@@ -49,19 +99,30 @@ argmatch (const char *arg, const char *const *optlist)
arglen = strlen (arg);
/* Test all elements for either exact match or abbreviated matches. */
for (i = 0; optlist[i]; i++)
for (i = 0; arglist[i]; i++)
{
if (!strncmp (optlist[i], arg, arglen))
if (case_sensitive
? !strncmp (arglist[i], arg, arglen)
: !strncasecmp (arglist[i], arg, arglen))
{
if (strlen (optlist[i]) == arglen)
if (strlen (arglist[i]) == arglen)
/* Exact match found. */
return i;
else if (matchind == -1)
/* First nonexact match found. */
matchind = i;
else
/* Second nonexact match found. */
ambiguous = 1;
{
/* Second nonexact match found. */
if (vallist == NULL
|| memcmp (vallist + valsize * matchind,
vallist + valsize * i, valsize))
{
/* There is a real ambiguity, or we could not
disambiguate. */
ambiguous = 1;
}
}
}
}
if (ambiguous)
@@ -70,16 +131,186 @@ argmatch (const char *arg, const char *const *optlist)
return matchind;
}
/* argmatch - case sensitive version */
int
argmatch (const char *arg, const char *const *arglist,
const char *vallist, size_t valsize)
{
return __argmatch_internal (arg, arglist, vallist, valsize, 1);
}
/* argcasematch - case insensitive version */
int
argcasematch (const char *arg, const char *const *arglist,
const char *vallist, size_t valsize)
{
return __argmatch_internal (arg, arglist, vallist, valsize, 0);
}
/* Error reporting for argmatch.
KIND is a description of the type of entity that was being matched.
CONTEXT is a description of the type of entity that was being matched.
VALUE is the invalid value that was given.
PROBLEM is the return value from argmatch. */
void
invalid_arg (const char *kind, const char *value, int problem)
argmatch_invalid (const char *context, const char *value, int problem)
{
const char *fmt = (problem == -1
? "%s: invalid %s `%s'\n"
: "%s: ambiguous %s `%s'\n");
fprintf (stderr, fmt, program_name, kind, value);
enum quoting_style saved_quoting_style;
char const *format;
/* 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);
}
/* List the valid arguments for argmatch.
ARGLIST is the same as in argmatch.
VALLIST is a pointer to an array of values.
VALSIZE is the size of the elements of VALLIST */
void
argmatch_valid (const char *const *arglist,
const char *vallist, size_t valsize)
{
int i;
const char *last_val = NULL;
/* We try to put synonyms on the same line. The assumption is that
synonyms follow each other */
fprintf (stderr, _("Valid arguments are:"));
for (i = 0; arglist[i]; i++)
if ((i == 0)
|| memcmp (last_val, vallist + valsize * i, valsize))
{
fprintf (stderr, "\n - `%s'", arglist[i]);
last_val = vallist + valsize * i;
}
else
{
fprintf (stderr, ", `%s'", arglist[i]);
}
putc ('\n', stderr);
}
/* Never failing versions of the previous functions.
CONTEXT is the context for which argmatch is called (e.g.,
"--version-control", or "$VERSION_CONTROL" etc.). Upon failure,
calls the (supposed never to return) function EXIT_FN. */
int
__xargmatch_internal (const char *context,
const char *arg, const char *const *arglist,
const char *vallist, size_t valsize,
int case_sensitive,
argmatch_exit_fn exit_fn)
{
int res = __argmatch_internal (arg, arglist,
vallist, valsize,
case_sensitive);
if (res >= 0)
/* Success. */
return res;
/* We failed. Explain why. */
argmatch_invalid (context, arg, res);
argmatch_valid (arglist, vallist, valsize);
(*exit_fn) ();
return -1; /* To please the compilers. */
}
/* Look for VALUE in VALLIST, an array of objects of size VALSIZE and
return the first corresponding argument in ARGLIST */
const char *
argmatch_to_argument (const char *value,
const char *const *arglist,
const char *vallist, size_t valsize)
{
int i;
for (i = 0; arglist[i]; i++)
if (!memcmp (value, vallist + valsize * i, valsize))
return arglist[i];
return NULL;
}
#ifdef TEST
/*
* Based on "getversion.c" by David MacKenzie <djm@gnu.ai.mit.edu>
*/
char *program_name;
extern const char *getenv ();
/* When to make backup files. */
enum backup_type
{
/* Never make backups. */
none,
/* Make simple backups of every file. */
simple,
/* Make numbered backups of files that already have numbered backups,
and simple backups of the others. */
numbered_existing,
/* Make numbered backups of every file. */
numbered
};
/* Two tables describing arguments (keys) and their corresponding
values */
static const char *const backup_args[] =
{
"no", "none", "off",
"simple", "never",
"existing", "nil",
"numbered", "t",
0
};
static const enum backup_type backup_vals[] =
{
none, none, none,
simple, simple,
numbered_existing, numbered_existing,
numbered, numbered
};
int
main (int argc, const char *const *argv)
{
const char *cp;
enum backup_type backup_type = none;
program_name = (char *) argv[0];
if (argc > 2)
{
fprintf (stderr, "Usage: %s [VERSION_CONTROL]\n", program_name);
exit (1);
}
if ((cp = getenv ("VERSION_CONTROL")))
backup_type = XARGCASEMATCH ("$VERSION_CONTROL", cp,
backup_args, backup_vals);
if (argc == 2)
backup_type = XARGCASEMATCH (program_name, argv[1],
backup_args, backup_vals);
printf ("The version control is `%s'\n",
ARGMATCH_TO_ARGUMENT (backup_type, backup_args, backup_vals));
return 0;
}
#endif

View File

@@ -1,12 +1,129 @@
/* argmatch.h -- declarations for matching arguments against option lists */
/* argmatch.h -- definitions and prototypes for argmatch.c
Copyright (C) 1990, 1998, 1999 Free Software Foundation, Inc.
#if defined __STDC__ || __GNUC__
# define __ARGMATCH_P(args) args
#else
# define __ARGMATCH_P(args) ()
#endif
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.
int argmatch __ARGMATCH_P ((const char *, const char * const *));
void invalid_arg __ARGMATCH_P ((const char *, const char *, int));
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.
extern char *program_name;
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 David MacKenzie <djm@ai.mit.edu>
Modified by Akim Demaille <demaille@inf.enst.fr> */
#ifndef ARGMATCH_H_
# define ARGMATCH_H_ 1
# if HAVE_CONFIG_H
# include <config.h>
# endif
# include <sys/types.h>
# ifndef PARAMS
# if PROTOTYPES || (defined (__STDC__) && __STDC__)
# define PARAMS(args) args
# else
# define PARAMS(args) ()
# endif /* GCC. */
# endif /* Not PARAMS. */
/* Assert there are as many real arguments as there are values
(argument list ends with a NULL guard). There is no execution
cost, since it will be statically evalauted to `assert (0)' or
`assert (1)'. Unfortunately there is no -Wassert-0. */
# undef ARRAY_CARDINALITY
# define ARRAY_CARDINALITY(Array) (sizeof ((Array)) / sizeof (*(Array)))
# define ARGMATCH_ASSERT(Arglist, Vallist) \
assert (ARRAY_CARDINALITY ((Arglist)) == ARRAY_CARDINALITY ((Vallist)) + 1)
/* Return the index of the element of ARGLIST (NULL terminated) that
matches with ARG. If VALLIST is not NULL, then use it to resolve
false ambiguities (i.e., different matches of ARG but corresponding
to the same values in VALLIST). */
int argmatch
PARAMS ((const char *arg, const char *const *arglist,
const char *vallist, size_t valsize));
int argcasematch
PARAMS ((const char *arg, const char *const *arglist,
const char *vallist, size_t valsize));
# define ARGMATCH(Arg, Arglist, Vallist) \
argmatch ((Arg), (Arglist), (const char *) (Vallist), sizeof (*(Vallist)))
# define ARGCASEMATCH(Arg, Arglist, Vallist) \
argcasematch ((Arg), (Arglist), (const char *) (Vallist), sizeof (*(Vallist)))
/* xargmatch calls this function when it fails. This function should not
return. By default, this is a function that calls ARGMATCH_DIE which
in turn defaults to `exit (EXIT_FAILURE)'. */
typedef void (*argmatch_exit_fn) PARAMS ((void));
extern argmatch_exit_fn argmatch_die;
/* Report on stderr why argmatch failed. Report correct values. */
void argmatch_invalid
PARAMS ((const char *context, const char *value, int problem));
/* Left for compatibility with the old name invalid_arg */
# define invalid_arg(Context, Value, Problem) \
argmatch_invalid ((Context), (Value), (Problem))
/* Report on stderr the list of possible arguments. */
void argmatch_valid
PARAMS ((const char *const *arglist,
const char *vallist, size_t valsize));
# define ARGMATCH_VALID(Arglist, Vallist) \
argmatch_valid (Arglist, (const char *) Vallist, sizeof (*(Vallist)))
/* Same as argmatch, but upon failure, reports a explanation on the
failure, and exits using the function EXIT_FN. */
int __xargmatch_internal
PARAMS ((const char *context,
const char *arg, const char *const *arglist,
const char *vallist, size_t valsize,
int case_sensitive, argmatch_exit_fn exit_fn));
/* Programmer friendly interface to __xargmatch_internal. */
# define XARGMATCH(Context, Arg, Arglist, Vallist) \
(Vallist [__xargmatch_internal ((Context), (Arg), (Arglist), \
(const char *) (Vallist), \
sizeof (*(Vallist)), \
1, argmatch_die)])
# define XARGCASEMATCH(Context, Arg, Arglist, Vallist) \
(Vallist [__xargmatch_internal ((Context), (Arg), (Arglist), \
(const char *) (Vallist), \
sizeof (*(Vallist)), \
0, argmatch_die)])
/* Convert a value into a corresponding argument. */
const char *argmatch_to_argument
PARAMS ((char const *value, const char *const *arglist,
const char *vallist, size_t valsize));
# define ARGMATCH_TO_ARGUMENT(Value, Arglist, Vallist) \
argmatch_to_argument ((char const *) &(Value), (Arglist), \
(const char *) (Vallist), sizeof (*(Vallist)))
#endif /* ARGMATCH_H_ */

View File

@@ -1,5 +1,5 @@
/* backupfile.c -- make Emacs style backup file names
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
@@ -64,6 +64,12 @@
char *malloc ();
#endif
#ifndef HAVE_DECL_GETENV
char *getenv ();
#endif
char *base_name PARAMS ((char const *));
#if HAVE_DIRENT_H || HAVE_NDIR_H || HAVE_SYS_DIR_H || HAVE_SYS_NDIR_H
# define HAVE_DIR 1
#else
@@ -214,29 +220,49 @@ version_number (const char *base, const char *backup, size_t base_length)
static const char * const backup_args[] =
{
"never", "simple", "nil", "existing", "t", "numbered", 0
/* In a series of synonyms, present the most meaning full first, so
that argmatch_valid be more readable. */
"none", "off",
"simple", "never",
"existing", "nil",
"numbered", "t",
0
};
static const enum backup_type backup_types[] =
{
simple, simple, numbered_existing, numbered_existing, numbered, numbered
none, none,
simple, simple,
numbered_existing, numbered_existing,
numbered, numbered
};
/* Return the type of backup indicated by VERSION.
Unique abbreviations are accepted. */
/* Return the type of backup specified by VERSION.
If VERSION is NULL or the empty string, return numbered_existing.
If VERSION is invalid or ambiguous, fail with a diagnostic appropriate
for the specified CONTEXT. Unambiguous abbreviations are accepted. */
enum backup_type
get_version (const char *version)
get_version (const char *context, const char *version)
{
int i;
if (version == 0 || *version == 0)
return numbered_existing;
i = argmatch (version, backup_args);
if (i < 0)
{
invalid_arg ("version control type", version, i);
exit (2);
}
return backup_types[i];
else
return XARGMATCH (context, version, backup_args, backup_types);
}
/* Return the type of backup specified by VERSION.
If VERSION is NULL, use the value of the envvar VERSION_CONTROL.
If the specified string is invalid or ambiguous, fail with a diagnostic
appropriate for the specified CONTEXT.
Unambiguous abbreviations are accepted. */
enum backup_type
xget_version (const char *context, const char *version)
{
if (version && *version)
return get_version (context, version);
else
return get_version ("$VERSION_CONTROL", getenv ("VERSION_CONTROL"));
}

View File

@@ -1,5 +1,5 @@
/* backupfile.h -- declarations for making Emacs style backup file names
Copyright (C) 1990, 1991, 1992, 1997, 1998 Free Software Foundation, Inc.
Copyright (C) 1990-1992, 1997-1999 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -16,6 +16,9 @@
If not, write to the Free Software Foundation,
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#ifndef BACKUPFILE_H_
# define BACKUPFILE_H_
/* When to make backup files. */
enum backup_type
{
@@ -33,7 +36,7 @@ enum backup_type
numbered
};
#define VALID_BACKUP_TYPE(Type) \
# define VALID_BACKUP_TYPE(Type) \
((Type) == none \
|| (Type) == simple \
|| (Type) == numbered_existing \
@@ -41,15 +44,17 @@ enum backup_type
extern char const *simple_backup_suffix;
#ifndef PARAMS
# if defined PROTOTYPES || (defined __STDC__ && __STDC__)
# define PARAMS(Args) Args
# else
# define PARAMS(Args) ()
# ifndef PARAMS
# if defined PROTOTYPES || (defined __STDC__ && __STDC__)
# define PARAMS(Args) Args
# else
# define PARAMS(Args) ()
# endif
# endif
#endif
char *base_name PARAMS ((char const *));
char *find_backup_file_name PARAMS ((char const *, enum backup_type));
enum backup_type get_version PARAMS ((char const *));
enum backup_type get_version PARAMS ((char const *context, char const *arg));
enum backup_type xget_version PARAMS ((char const *context, char const *arg));
void addext PARAMS ((char *, char const *, int));
#endif /* ! BACKUPFILE_H_ */

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

@@ -1,6 +1,6 @@
/* Host name canonicalization
Copyright (C) 1995 Free Software Foundation, Inc.
Copyright (C) 1995, 1999 Free Software Foundation, Inc.
Written by Miles Bader <miles@gnu.ai.mit.edu>
@@ -43,11 +43,12 @@
# 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 *
canon_host (host)
char *host;
canon_host (const char *host)
{
#ifdef HAVE_GETHOSTBYNAME
struct hostent *he = gethostbyname (host);
@@ -68,9 +69,23 @@ canon_host (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)
@@ -79,3 +94,17 @@ canon_host (host)
#endif /* HAVE_GETHOSTBYNAME */
return 0;
}
#ifdef TEST_CANON_HOST
int
main (int argc, char **argv)
{
int i;
for (i = 1; i < argc; i++)
{
char *s = canon_host (argv[i]);
printf ("%s: %s\n", argv[i], (s ? s : "<undef>"));
}
exit (0);
}
#endif /* TEST_CANON_HOST */

View File

@@ -34,10 +34,7 @@
/* FIXME: describe. */
int
rpl_chown (file, uid, gid)
const char *file;
uid_t uid;
gid_t gid;
rpl_chown (const char *file, uid_t uid, gid_t gid)
{
if (gid == (gid_t) -1 || uid == (uid_t) -1)
{

View File

@@ -1,5 +1,5 @@
/* closeout.c - close standard output
Copyright (C) 1998 Free Software Foundation, Inc.
Copyright (C) 1998, 1999 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -42,7 +42,28 @@ extern int errno;
#include "closeout.h"
#include "error.h"
/* Close standard output, exiting with status STATUS on failure. */
/* Close standard output, exiting with status STATUS on failure.
If a program writes *anything* to stdout, that program should `fflush'
stdout and make sure that it succeeds before exiting. Otherwise,
suppose that you go to the extreme of checking the return status
of every function that does an explicit write to stdout. The last
printf can succeed in writing to the internal stream buffer, and yet
the fclose(stdout) could still fail (due e.g., to a disk full error)
when it tries to write out that buffered data. Thus, you would be
left with an incomplete output file and the offending program would
exit successfully.
FIXME: note the fflush suggested above is implicit in the fclose
we actually do below. Consider doing only the fflush and/or using
setvbuf to inhibit buffering.
Besides, it's wasteful to check the return value from every call
that writes to stdout -- just let the internal stream state record
the failure. That's what the ferror test is checking below.
It's important to detect such failures and exit nonzero because many
tools (most notably `make' and other build-management systems) depend
on being able to detect failure in other tools via their exit status. */
void
close_stdout_status (int status)
{

View File

@@ -33,14 +33,15 @@ char *malloc ();
# endif
#endif
#include "dirname.h"
/* Return the leading directories part of PATH,
allocated with malloc. If out of memory, return 0.
Assumes that trailing slashes have already been
removed. */
char *
dirname (path)
char *path;
dir_name (const char *path)
{
char *newpath;
char *slash;

31
lib/dirname.h Normal file
View File

@@ -0,0 +1,31 @@
/* Copyright (C) 1998 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#ifndef DIRNAME_H_
# define DIRNAME_H_ 1
# ifndef PARAMS
# if defined PROTOTYPES || (defined __STDC__ && __STDC__)
# define PARAMS(Args) Args
# else
# define PARAMS(Args) ()
# endif
# endif
char *
dir_name PARAMS ((const char *path));
#endif /* not DIRNAME_H_ */

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

@@ -152,7 +152,10 @@ error (status, errnum, message, va_alist)
{
#if defined HAVE_STRERROR_R || defined _LIBC
char errbuf[1024];
fprintf (stderr, ": %s", __strerror_r (errnum, errbuf, sizeof errbuf));
/* Don't use __strerror_r's return value because on some systems
(at least DEC UNIX 4.0[A-D]) strerror_r returns `int'. */
__strerror_r (errnum, errbuf, sizeof errbuf);
fprintf (stderr, ": %s", errbuf);
#else
fprintf (stderr, ": %s", strerror (errnum));
#endif

View File

@@ -1,5 +1,5 @@
/* euidaccess -- check if effective user id can access file
Copyright (C) 1990, 1991, 1995 Free Software Foundation, Inc.
Copyright (C) 1990, 1991, 1995, 1998 Free Software Foundation, Inc.
This file is part of the GNU C Library.
@@ -127,9 +127,7 @@ int group_member ();
filesystem, text busy, etc. */
int
euidaccess (path, mode)
const char *path;
int mode;
euidaccess (const char *path, int mode)
{
struct stat stats;
int granted;

View File

@@ -50,8 +50,7 @@ typedef long daddr_t; /* for disk address */
/* Return the number of 512-byte blocks in a file of SIZE bytes. */
off_t
st_blocks (size)
off_t size;
st_blocks (off_t size)
{
off_t datablks = size / 512 + (size % 512 != 0);
off_t indrblks = 0;

View File

@@ -1,5 +1,5 @@
/* filemode.c -- make a string describing file modes
Copyright (C) 1985, 1990, 1993, 1998 Free Software Foundation, Inc.
Copyright (C) 1985, 1990, 1993, 1998, 1999 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -48,6 +48,25 @@
# endif
#endif
#if !S_IRGRP
# define S_IRGRP (S_IRUSR >> 3)
#endif
#if !S_IWGRP
# define S_IWGRP (S_IWUSR >> 3)
#endif
#if !S_IXGRP
# define S_IXGRP (S_IXUSR >> 3)
#endif
#if !S_IROTH
# define S_IROTH (S_IRUSR >> 6)
#endif
#if !S_IWOTH
# define S_IWOTH (S_IWUSR >> 6)
#endif
#if !S_IXOTH
# define S_IXOTH (S_IXUSR >> 6)
#endif
#ifdef STAT_MACROS_BROKEN
# undef S_ISBLK
# undef S_ISCHR
@@ -89,23 +108,15 @@
#if !defined(S_ISNWK) && defined(S_IFNWK) /* HP/UX */
# define S_ISNWK(m) (((m) & S_IFMT) == S_IFNWK)
#endif
/* Look at read, write, and execute bits in BITS and set
flags in CHARS accordingly. */
static void
rwx (short unsigned int bits, char *chars)
{
chars[0] = (bits & S_IRUSR) ? 'r' : '-';
chars[1] = (bits & S_IWUSR) ? 'w' : '-';
chars[2] = (bits & S_IXUSR) ? 'x' : '-';
}
#if !defined(S_ISDOOR) && defined(S_IFDOOR) /* Solaris 2.5 and up */
# define S_ISDOOR(m) (((m) & S_IFMT) == S_IFDOOR)
#endif
/* Set the 's' and 't' flags in file attributes string CHARS,
according to the file mode BITS. */
static void
setst (short unsigned int bits, char *chars)
setst (mode_t bits, char *chars)
{
#ifdef S_ISUID
if (bits & S_ISUID)
@@ -142,6 +153,7 @@ setst (short unsigned int bits, char *chars)
/* Return a character indicating the type of file described by
file mode BITS:
'd' for directories
'D' for doors
'b' for block special files
'c' for character special files
'm' for multiplexor files
@@ -153,7 +165,7 @@ setst (short unsigned int bits, char *chars)
'?' for any other file type. */
static char
ftypelet (long int bits)
ftypelet (mode_t bits)
{
#ifdef S_ISBLK
if (S_ISBLK (bits))
@@ -185,6 +197,10 @@ ftypelet (long int bits)
if (S_ISNWK (bits))
return 'n';
#endif
#ifdef S_ISDOOR
if (S_ISDOOR (bits))
return 'D';
#endif
/* The following two tests are for Cray DMF (Data Migration
Facility), which is a HSM file system. A migrated file has a
@@ -208,12 +224,18 @@ ftypelet (long int bits)
is given as an argument. */
void
mode_string (short unsigned int mode, char *str)
mode_string (mode_t mode, char *str)
{
str[0] = ftypelet ((long) mode);
rwx ((mode & 0700) << 0, &str[1]);
rwx ((mode & 0070) << 3, &str[4]);
rwx ((mode & 0007) << 6, &str[7]);
str[0] = ftypelet (mode);
str[1] = mode & S_IRUSR ? 'r' : '-';
str[2] = mode & S_IWUSR ? 'w' : '-';
str[3] = mode & S_IXUSR ? 'x' : '-';
str[4] = mode & S_IRGRP ? 'r' : '-';
str[5] = mode & S_IWGRP ? 'w' : '-';
str[6] = mode & S_IXGRP ? 'x' : '-';
str[7] = mode & S_IROTH ? 'r' : '-';
str[8] = mode & S_IWOTH ? 'w' : '-';
str[9] = mode & S_IXOTH ? 'x' : '-';
setst (mode, str);
}

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

@@ -55,10 +55,7 @@ extern int errno;
/* Match STRING against the filename pattern PATTERN, returning zero if
it matches, nonzero if not. */
int
fnmatch (pattern, string, flags)
const char *pattern;
const char *string;
int flags;
fnmatch (const char *pattern, const char *string, int flags)
{
register const char *p = pattern, *n = string;
register char c;

View File

@@ -101,10 +101,7 @@ int safe_read ();
ERRNO is either a system error value, or zero if DISK is NULL
on a system that requires a non-NULL value. */
int
get_fs_usage (path, disk, fsp)
const char *path;
const char *disk;
struct fs_usage *fsp;
get_fs_usage (const char *path, const char *disk, struct fs_usage *fsp)
{
#ifdef STAT_STATFS3_OSF1
@@ -262,9 +259,7 @@ get_fs_usage (path, disk, fsp)
/* AIX PS/2 does not supply statfs. */
int
statfs (path, fsb)
char *path;
struct statfs *fsb;
statfs (char *path, struct statfs *fsb)
{
struct stat stats;
struct dustat fsd;

View File

@@ -11,9 +11,7 @@
#ifdef F_CHSIZE
int
ftruncate (fd, length)
int fd;
off_t length;
ftruncate (int fd, off_t length)
{
return fcntl (fd, F_CHSIZE, length);
}
@@ -30,9 +28,7 @@ ftruncate (fd, length)
# endif
int
ftruncate (fd, length)
int fd;
off_t length;
ftruncate (int fd, off_t length)
{
struct flock fl;
struct stat filebuf;
@@ -75,9 +71,7 @@ ftruncate (fd, length)
# if HAVE_CHSIZE
int
ftruncate (fd, length)
int fd;
off_t length;
ftruncate (int fd, off_t length)
{
return chsize (fd, length);
}
@@ -90,9 +84,7 @@ extern int errno;
# endif
int
ftruncate (fd, length)
int fd;
off_t length;
ftruncate (int fd, off_t length)
{
errno = EIO;
return -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
@@ -53,6 +57,14 @@
# include <string.h>
#endif
#if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7)
# define __attribute__(x)
#endif
#ifndef ATTRIBUTE_UNUSED
# define ATTRIBUTE_UNUSED __attribute__ ((__unused__))
#endif
/* Some old versions of bison generate parsers that use bcopy.
That loses on systems that don't provide the function, so we have
to redefine it here. */
@@ -471,7 +483,7 @@ static TABLE const MonthDayTable[] = {
{ "thurs", tDAY, 4 },
{ "friday", tDAY, 5 },
{ "saturday", tDAY, 6 },
{ NULL }
{ NULL, 0, 0 }
};
/* Time units table. */
@@ -486,7 +498,7 @@ static TABLE const UnitsTable[] = {
{ "min", tMINUTE_UNIT, 1 },
{ "second", tSEC_UNIT, 1 },
{ "sec", tSEC_UNIT, 1 },
{ NULL }
{ NULL, 0, 0 }
};
/* Assorted relative-time words. */
@@ -511,7 +523,7 @@ static TABLE const OtherTable[] = {
{ "eleventh", tUNUMBER, 11 },
{ "twelfth", tUNUMBER, 12 },
{ "ago", tAGO, 1 },
{ NULL }
{ NULL, 0, 0 }
};
/* The timezone table. */
@@ -596,7 +608,7 @@ static TABLE const TimezoneTable[] = {
{ "nzst", tZONE, -HOUR (12) }, /* New Zealand Standard */
{ "nzdt", tDAYZONE, -HOUR (12) }, /* New Zealand Daylight */
{ "idle", tZONE, -HOUR (12) }, /* International Date Line East */
{ NULL }
{ NULL, 0, 0 }
};
/* Military timezone table. */
@@ -626,7 +638,7 @@ static TABLE const MilitaryTable[] = {
{ "x", tZONE, HOUR (-11) },
{ "y", tZONE, HOUR (-12) },
{ "z", tZONE, HOUR ( 0) },
{ NULL }
{ NULL, 0, 0 }
};
@@ -635,7 +647,7 @@ static TABLE const MilitaryTable[] = {
/* ARGSUSED */
static int
yyerror (s)
char *s;
char *s ATTRIBUTE_UNUSED;
{
return 0;
}
@@ -698,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)
@@ -779,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)
@@ -810,7 +822,7 @@ LookupWord (buff)
static int
yylex ()
{
register char c;
register unsigned char c;
register char *p;
char buff[20];
int Count;
@@ -818,7 +830,7 @@ yylex ()
for (;;)
{
while (ISSPACE (*yyInput))
while (ISSPACE ((unsigned char) *yyInput))
yyInput++;
if (ISDIGIT (c = *yyInput) || c == '-' || c == '+')
@@ -869,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);
@@ -898,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;
@@ -939,7 +953,6 @@ get_date (const char *p, const time_t *now)
tm.tm_hour += yyRelHour;
tm.tm_min += yyRelMinutes;
tm.tm_sec += yyRelSeconds;
tm.tm_isdst = -1;
tm0 = tm;
Start = mktime (&tm);
@@ -986,7 +999,11 @@ get_date (const char *p, const time_t *now)
if (yyHaveZone)
{
long delta = yyTimezone * 60L + difftm (&tm, gmtime (&Start));
long delta;
struct tm *gmt = gmtime (&Start);
if (!gmt)
return -1;
delta = yyTimezone * 60L + difftm (&tm, gmt);
if ((Start + delta < Start) != (delta < 0))
return -1; /* time_t overflow */
Start += delta;

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,6 +1,6 @@
/* getline.c -- Replacement for GNU C library function getline
Copyright (C) 1993, 1996, 1997 Free Software Foundation, Inc.
Copyright (C) 1993, 1996, 1997, 1998 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
@@ -34,10 +34,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#if defined __GNU_LIBRARY__ && HAVE_GETDELIM
int
getline (lineptr, n, stream)
char **lineptr;
size_t *n;
FILE *stream;
getline (char **lineptr, size_t *n, FILE *stream)
{
return getdelim (lineptr, n, '\n', stream);
}
@@ -64,12 +61,7 @@ char *malloc (), *realloc ();
null terminator), or -1 on error or EOF. */
int
getstr (lineptr, n, stream, terminator, offset)
char **lineptr;
size_t *n;
FILE *stream;
char terminator;
size_t offset;
getstr (char **lineptr, size_t *n, FILE *stream, char terminator, size_t offset)
{
int nchars_avail; /* Allocated but unused chars in *LINEPTR. */
char *read_pos; /* Where we're reading into *LINEPTR. */
@@ -138,20 +130,13 @@ getstr (lineptr, n, stream, terminator, offset)
}
int
getline (lineptr, n, stream)
char **lineptr;
size_t *n;
FILE *stream;
getline (char **lineptr, size_t *n, FILE *stream)
{
return getstr (lineptr, n, stream, '\n', 0);
}
int
getdelim (lineptr, n, delimiter, stream)
char **lineptr;
size_t *n;
int delimiter;
FILE *stream;
getdelim (char **lineptr, size_t *n, int delimiter, FILE *stream)
{
return getstr (lineptr, n, stream, delimiter, 0);
}

View File

@@ -98,8 +98,14 @@
extern int errno;
#endif
#ifndef HAVE_GETLOADAVG
#if HAVE_LOCALE_H
# include <locale.h>
#endif
#if !HAVE_SETLOCALE
# define setlocale(Category, Locale) /* empty */
#endif
#ifndef HAVE_GETLOADAVG
/* The existing Emacs configuration files define a macro called
LOAD_AVE_CVT, which accepts a value of type LOAD_AVE_TYPE, and
@@ -638,8 +644,11 @@ getloadavg (loadavg, nelem)
if (count <= 0)
return -1;
/* The following sscanf must use the C locale. */
setlocale (LC_NUMERIC, "C");
count = sscanf (ldavgbuf, "%lf %lf %lf",
&load_ave[0], &load_ave[1], &load_ave[2]);
setlocale (LC_NUMERIC, "");
if (count < 1)
return -1;

View File

@@ -1,47 +1,42 @@
/* Getopt for GNU.
NOTE: getopt is now part of the C library, so if you don't know what
"Keep this file name-space clean" means, talk to roland@gnu.ai.mit.edu
"Keep this file name-space clean" means, talk to drepper@gnu.org
before changing it!
Copyright (C) 1987, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97
Copyright (C) 1987, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98
Free Software Foundation, Inc.
the C library, however. The master source lives in /gd/gnu/lib.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
NOTE: The canonical source of this file is maintained with the GNU C Library.
Bugs can be reported to bug-glibc@prep.ai.mit.edu.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation; either version 2, or (at your option) any
later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
USA. */
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If not,
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
/* This tells Alpha OSF/1 not to define a getopt prototype in <stdio.h>.
Ditto for AIX 3.2 and <stdlib.h>. */
#ifndef _NO_PROTO
#define _NO_PROTO
# define _NO_PROTO
#endif
#ifdef HAVE_CONFIG_H
#include <config.h>
# include <config.h>
#endif
#if !defined (__STDC__) || !__STDC__
#if !defined __STDC__ || !__STDC__
/* This is a separate conditional since some stdc systems
reject `defined (const)'. */
#ifndef const
#define const
#endif
# ifndef const
# define const
# endif
#endif
#include <stdio.h>
@@ -55,11 +50,11 @@ USA. */
it is simpler to just do this in the source for each such file. */
#define GETOPT_INTERFACE_VERSION 2
#if !defined (_LIBC) && defined (__GLIBC__) && __GLIBC__ >= 2
#include <gnu-versions.h>
#if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION
#define ELIDE_CODE
#endif
#if !defined _LIBC && defined __GLIBC__ && __GLIBC__ >= 2
# include <gnu-versions.h>
# if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION
# define ELIDE_CODE
# endif
#endif
#ifndef ELIDE_CODE
@@ -70,32 +65,26 @@ USA. */
#ifdef __GNU_LIBRARY__
/* Don't include stdlib.h for non-GNU C libraries because some of them
contain conflicting prototypes for getopt. */
#include <stdlib.h>
#include <unistd.h>
# include <stdlib.h>
# include <unistd.h>
#endif /* GNU C library. */
#ifdef VMS
#include <unixlib.h>
#if HAVE_STRING_H - 0
#include <string.h>
#endif
#endif
#if defined (WIN32) && !defined (__CYGWIN32__)
/* It's not Unix, really. See? Capital letters. */
#include <windows.h>
#define getpid() GetCurrentProcessId()
# include <unixlib.h>
# if HAVE_STRING_H - 0
# include <string.h>
# endif
#endif
#ifndef _
/* This is for other GNU distributions with internationalized messages.
When compiling libc, the _ macro is predefined. */
#ifdef HAVE_LIBINTL_H
# include <libintl.h>
# define _(msgid) gettext (msgid)
#else
# define _(msgid) (msgid)
#endif
# ifdef HAVE_LIBINTL_H
# include <libintl.h>
# define _(msgid) gettext (msgid)
# else
# define _(msgid) (msgid)
# endif
#endif
/* This version of `getopt' appears to the caller like standard Unix `getopt'
@@ -205,14 +194,22 @@ static char *posixly_correct;
because there are many ways it can cause trouble.
On some systems, it contains special magic macros that don't work
in GCC. */
#include <string.h>
#define my_index strchr
# include <string.h>
# define my_index strchr
#else
# if HAVE_STRING_H
# include <string.h>
# else
# include <strings.h>
# endif
/* Avoid depending on library functions or files
whose names are inconsistent. */
char *getenv ();
#ifndef getenv
extern char *getenv ();
#endif
static char *
my_index (str, chr)
@@ -233,11 +230,11 @@ my_index (str, chr)
#ifdef __GNUC__
/* Note that Motorola Delta 68k R3V7 comes with GCC but not stddef.h.
That was relevant to code that was here before. */
#if !defined (__STDC__) || !__STDC__
# if (!defined __STDC__ || !__STDC__) && !defined strlen
/* gcc with -traditional declares the built-in strlen to return int,
and has done so at least since version 2.4.5. -- rms. */
extern int strlen (const char *);
#endif /* not __STDC__ */
# endif /* not __STDC__ */
#endif /* __GNUC__ */
#endif /* not __GNU_LIBRARY__ */
@@ -264,8 +261,6 @@ static int nonoption_flags_len;
static int original_argc;
static char *const *original_argv;
extern pid_t __libc_pid;
/* Make sure the environment variable bash 2.0 puts in the environment
is valid for the getopt call we must make sure that the ARGV passed
to getopt is that one passed to the process. */
@@ -278,7 +273,9 @@ store_args_and_env (int argc, char *const *argv)
original_argc = argc;
original_argv = argv;
}
# ifdef text_set_element
text_set_element (__libc_subinit, store_args_and_env);
# endif /* text_set_element */
# define SWAP_FLAGS(ch1, ch2) \
if (nonoption_flags_len > 0) \
@@ -300,7 +297,7 @@ text_set_element (__libc_subinit, store_args_and_env);
`first_nonopt' and `last_nonopt' are relocated so that they describe
the new indices of the non-options in ARGV after they are moved. */
#if defined (__STDC__) && __STDC__
#if defined __STDC__ && __STDC__
static void exchange (char **);
#endif
@@ -331,9 +328,9 @@ exchange (argv)
nonoption_flags_len = nonoption_flags_max_len = 0;
else
{
memcpy (new_str, __getopt_nonoption_flags, nonoption_flags_max_len);
memset (&new_str[nonoption_flags_max_len], '\0',
top + 1 - nonoption_flags_max_len);
memset (__mempcpy (new_str, __getopt_nonoption_flags,
nonoption_flags_max_len),
'\0', top + 1 - nonoption_flags_max_len);
nonoption_flags_max_len = top + 1;
__getopt_nonoption_flags = new_str;
}
@@ -386,7 +383,7 @@ exchange (argv)
/* Initialize the internal data when the first call is made. */
#if defined (__STDC__) && __STDC__
#if defined __STDC__ && __STDC__
static const char *_getopt_initialize (int, char *const *, const char *);
#endif
static const char *
@@ -442,11 +439,8 @@ _getopt_initialize (argc, argv, optstring)
if (__getopt_nonoption_flags == NULL)
nonoption_flags_max_len = -1;
else
{
memcpy (__getopt_nonoption_flags, orig_str, len);
memset (&__getopt_nonoption_flags[len], '\0',
nonoption_flags_max_len - len);
}
memset (__mempcpy (__getopt_nonoption_flags, orig_str, len),
'\0', nonoption_flags_max_len - len);
}
}
nonoption_flags_len = nonoption_flags_max_len;
@@ -538,11 +532,11 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
from the shell indicating it is not an option. The later information
is only used when the used in the GNU libc. */
#ifdef _LIBC
#define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0' \
|| (optind < nonoption_flags_len \
&& __getopt_nonoption_flags[optind] == '1'))
# define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0' \
|| (optind < nonoption_flags_len \
&& __getopt_nonoption_flags[optind] == '1'))
#else
#define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0')
# define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0')
#endif
if (nextchar == NULL || *nextchar == '\0')
@@ -705,12 +699,12 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
if (argv[optind - 1][1] == '-')
/* --option */
fprintf (stderr,
_("%s: option `--%s' doesn't allow an argument\n"),
_("%s: option `--%s' doesn't allow an argument\n"),
argv[0], pfound->name);
else
/* +option or -option */
fprintf (stderr,
_("%s: option `%c%s' doesn't allow an argument\n"),
_("%s: option `%c%s' doesn't allow an argument\n"),
argv[0], argv[optind - 1][0], pfound->name);
}

View File

@@ -1,28 +1,27 @@
/* Declarations for getopt.
Copyright (C) 1989,90,91,92,93,94,96,97 Free Software Foundation, Inc.
Copyright (C) 1989,90,91,92,93,94,96,97,98 Free Software Foundation, Inc.
This file is part of the GNU C Library.
the C library, however. The master source lives in /gd/gnu/lib.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
NOTE: The canonical source of this file is maintained with the GNU C Library.
Bugs can be reported to bug-glibc@prep.ai.mit.edu.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation; either version 2, or (at your option) any
later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
USA. */
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If not,
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#ifndef _GETOPT_H
#define _GETOPT_H 1
#ifndef __need_getopt
# define _GETOPT_H 1
#endif
#ifdef __cplusplus
extern "C" {
@@ -59,6 +58,7 @@ extern int opterr;
extern int optopt;
#ifndef __need_getopt
/* Describe the long-named options requested by the application.
The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector
of `struct option' terminated by an element containing a name which is
@@ -82,11 +82,11 @@ extern int optopt;
struct option
{
#if defined (__STDC__) && __STDC__
# if defined __STDC__ && __STDC__
const char *name;
#else
# else
char *name;
#endif
# endif
/* has_arg can't be an enum because some compilers complain about
type mismatches in all the code that assumes it is an int. */
int has_arg;
@@ -96,40 +96,74 @@ struct option
/* Names for the values of the `has_arg' field of `struct option'. */
#define no_argument 0
#define required_argument 1
#define optional_argument 2
# define no_argument 0
# define required_argument 1
# define optional_argument 2
#endif /* need getopt */
#if defined (__STDC__) && __STDC__
#ifdef __GNU_LIBRARY__
/* Get definitions and prototypes for functions to process the
arguments in ARGV (ARGC of them, minus the program name) for
options given in OPTS.
Return the option character from OPTS just read. Return -1 when
there are no more options. For unrecognized options, or options
missing arguments, `optopt' is set to the option letter, and '?' is
returned.
The OPTS string is a list of characters which are recognized option
letters, optionally followed by colons, specifying that that letter
takes an argument, to be placed in `optarg'.
If a letter in OPTS is followed by two colons, its argument is
optional. This behavior is specific to the GNU `getopt'.
The argument `--' causes premature termination of argument
scanning, explicitly telling `getopt' that there are no more
options.
If OPTS begins with `--', then non-option arguments are treated as
arguments to the option '\0'. This behavior is specific to the GNU
`getopt'. */
#if defined __STDC__ && __STDC__
# ifdef __GNU_LIBRARY__
/* Many other libraries have conflicting prototypes for getopt, with
differences in the consts, in stdlib.h. To avoid compilation
errors, only prototype getopt for the GNU C library. */
extern int getopt (int argc, char *const *argv, const char *shortopts);
#else /* not __GNU_LIBRARY__ */
extern int getopt (int __argc, char *const *__argv, const char *__shortopts);
# else /* not __GNU_LIBRARY__ */
extern int getopt ();
#endif /* __GNU_LIBRARY__ */
extern int getopt_long (int argc, char *const *argv, const char *shortopts,
const struct option *longopts, int *longind);
extern int getopt_long_only (int argc, char *const *argv,
const char *shortopts,
const struct option *longopts, int *longind);
# endif /* __GNU_LIBRARY__ */
# ifndef __need_getopt
extern int getopt_long (int __argc, char *const *__argv, const char *__shortopts,
const struct option *__longopts, int *__longind);
extern int getopt_long_only (int __argc, char *const *__argv,
const char *__shortopts,
const struct option *__longopts, int *__longind);
/* Internal only. Users should not call this directly. */
extern int _getopt_internal (int argc, char *const *argv,
const char *shortopts,
const struct option *longopts, int *longind,
int long_only);
extern int _getopt_internal (int __argc, char *const *__argv,
const char *__shortopts,
const struct option *__longopts, int *__longind,
int __long_only);
# endif
#else /* not __STDC__ */
extern int getopt ();
# ifndef __need_getopt
extern int getopt_long ();
extern int getopt_long_only ();
extern int _getopt_internal ();
# endif
#endif /* __STDC__ */
#ifdef __cplusplus
}
#endif
#endif /* _GETOPT_H */
/* Make sure we later can get all the definitions and declarations. */
#undef __need_getopt
#endif /* getopt.h */

View File

@@ -1,25 +1,22 @@
/* getopt_long and getopt_long_only entry points for GNU getopt.
Copyright (C) 1987,88,89,90,91,92,93,94,96,97 Free Software Foundation, Inc.
Copyright (C) 1987,88,89,90,91,92,93,94,96,97,98
Free Software Foundation, Inc.
This file is part of the GNU C Library.
the C library, however. The master source lives in /gd/gnu/lib.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
NOTE: The canonical source of this file is maintained with the GNU C Library.
Bugs can be reported to bug-glibc@prep.ai.mit.edu.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation; either version 2, or (at your option) any
later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
USA. */
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If not,
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#ifdef HAVE_CONFIG_H
#include <config.h>
@@ -27,7 +24,7 @@ USA. */
#include "getopt.h"
#if !defined (__STDC__) || !__STDC__
#if !defined __STDC__ || !__STDC__
/* This is a separate conditional since some stdc systems
reject `defined (const)'. */
#ifndef const
@@ -46,7 +43,7 @@ USA. */
it is simpler to just do this in the source for each such file. */
#define GETOPT_INTERFACE_VERSION 2
#if !defined (_LIBC) && defined (__GLIBC__) && __GLIBC__ >= 2
#if !defined _LIBC && defined __GLIBC__ && __GLIBC__ >= 2
#include <gnu-versions.h>
#if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION
#define ELIDE_CODE

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,16 +41,27 @@ struct group *getgrent ();
# include <strings.h>
#endif
/* Like `getgroups', but for user USERNAME instead of for
the current process. */
/* Like `getgroups', but for user USERNAME instead of for the current
process. Store at most MAXCOUNT group IDs in the GROUPLIST array.
If GID is not -1, store it first (if possible). GID should be the
group ID (pw_gid) obtained from getpwuid, in case USERNAME is not
listed in /etc/groups.
Always return the number of groups of which USERNAME is a member. */
int
getugroups (int maxcount, GETGROUPS_T *grouplist, char *username)
getugroups (int maxcount, GETGROUPS_T *grouplist, char *username, gid_t gid)
{
struct group *grp;
register char **cp;
register int count = 0;
if (gid != -1)
{
if (maxcount != 0)
grouplist[count] = gid;
++count;
}
setgrent ();
while ((grp = getgrent ()) != 0)
for (cp = grp->gr_mem; *cp; ++cp)

View File

@@ -1,5 +1,5 @@
/* getversion.c -- select backup filename type
Copyright (C) 1990 Free Software Foundation, Inc.
Copyright (C) 1990, 1998 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -46,8 +46,7 @@ static const enum backup_type backup_types[] =
Unique abbreviations are accepted. */
enum backup_type
get_version (version)
char *version;
get_version (const char *version)
{
int i;

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

@@ -1,5 +1,5 @@
/* human.c -- print human readable file size
Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
Copyright (C) 1996, 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
@@ -23,10 +23,6 @@
# include <config.h>
#endif
#if HAVE_INTTYPES_H
# include <inttypes.h>
#endif
#include <sys/types.h>
#include <stdio.h>
@@ -54,7 +50,7 @@ char *getenv ();
#include <argmatch.h>
#include <error.h>
#include <xstrtoul.h>
#include <xstrtol.h>
#include "human.h"
@@ -258,7 +254,7 @@ humblock (char const *spec, int *block_size)
if (! spec && ! (spec = getenv ("BLOCK_SIZE")))
*block_size = getenv ("POSIXLY_CORRECT") ? 512 : DEFAULT_BLOCK_SIZE;
else if (0 <= (i = argmatch (spec, block_size_args)))
else if (0 <= (i = ARGMATCH (spec, block_size_args, block_size_types)))
*block_size = block_size_types[i];
else
{

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. */

View File

@@ -1,5 +1,6 @@
/* idcache.c -- map user and group IDs, cached for speed
Copyright (C) 1985, 1988, 1989, 1990, 1997, 1998 Free Software Foundation, Inc.
Copyright (C) 1985, 1988, 1989, 1990, 1997, 1998 Free Software
Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by

View File

@@ -34,8 +34,7 @@
return nonzero, else 0. */
int
isdir (path)
char *path;
isdir (const char *path)
{
struct stat stats;

View File

@@ -1,5 +1,5 @@
/* Provide a stub lchown function for systems that lack it.
Copyright (C) 1998 Free Software Foundation, Inc.
Copyright (C) 1998, 1999 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -27,6 +27,10 @@ extern int errno;
#endif
#include "lchown.h"
/* Declare chown to avoid a warning. Don't include unistd.h,
because it may have a conflicting prototype for lchown. */
int chown ();
/* Work just like chown, except when FILE is a symbolic link.
In that case, set errno to ENOSYS and return -1. */

View File

@@ -1,5 +1,5 @@
/* Utility to accept --help and --version options as unobtrusively as possible.
Copyright (C) 1993, 1994, 1998 Free Software Foundation, Inc.
Copyright (C) 1993, 1994, 1998, 1999 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -25,6 +25,14 @@
#include <getopt.h>
#include "closeout.h"
#include "long-options.h"
#include "version-etc.h"
#if ENABLE_NLS
# include <libintl.h>
# define _(Text) gettext (Text)
#else
# define _(Text) Text
#endif
static struct option const long_options[] =
{
@@ -37,13 +45,13 @@ static struct option const long_options[] =
Be careful not to gobble up `--'. */
void
parse_long_options (argc, argv, command_name, package, version, usage)
int argc;
char **argv;
const char *command_name;
const char *package;
const char *version;
void (*usage)();
parse_long_options (int argc,
char **argv,
const char *command_name,
const char *package,
const char *version,
const char *authors,
void (*usage_func)())
{
int c;
int saved_opterr;
@@ -59,10 +67,10 @@ parse_long_options (argc, argv, command_name, package, version, usage)
switch (c)
{
case 'h':
(*usage) (0);
(*usage_func) (0);
case 'v':
printf ("%s (%s) %s\n", command_name, package, version);
version_etc (stdout, command_name, package, version, authors);
close_stdout (); /* FIXME: output failure exit status
should be settable via an arg. */
exit (0);

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

@@ -1,50 +0,0 @@
/* Work around the bug in some systems whereby lstat succeeds when
given the zero-length file name argument. The lstat from SunOS4.1.4
has this bug.
Copyright (C) 1997 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
/* written by Jim Meyering */
#include <config.h>
/* Disable the definition of lstat to rpl_lstat (from config.h) in this
file. Otherwise, we'd get conflicting prototypes for rpl_lstat on
most systems. */
#undef lstat
#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>
#ifndef errno
extern int errno;
#endif
/* FIXME: describe. */
int
rpl_lstat (file, sbuf)
const char *file;
struct stat *sbuf;
{
if (file && *file == 0)
{
errno = EINVAL;
return -1;
}
return lstat (file, sbuf);
}

View File

@@ -1,5 +1,5 @@
/* makepath.c -- Ensure that a directory path exists.
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
@@ -71,23 +71,51 @@ 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
#if ENABLE_NLS
# include <libintl.h>
# define _(Text) gettext (Text)
#else
# define _(Text) Text
#endif
#ifdef __MSDOS__
typedef int uid_t;
typedef int gid_t;
#endif
#include "save-cwd.h"
#include "makepath.h"
#include "error.h"
void strip_trailing_slashes ();
@@ -99,9 +127,9 @@ void strip_trailing_slashes ();
Restore working directory. */ \
if (do_chdir) \
{ \
int fail = restore_cwd (&cwd, NULL, NULL); \
int _fail = restore_cwd (&cwd, NULL, NULL); \
free_cwd (&cwd); \
if (fail) \
if (_fail) \
return 1; \
} \
} \
@@ -115,6 +143,57 @@ void strip_trailing_slashes ();
} \
while (0)
/* Attempt to create directory DIR (aka DIRPATH) with the specified MODE.
If CREATED_DIR_P is non-NULL, set *CREATED_DIR_P to non-zero if this
function creates DIR and to zero otherwise. Give a diagnostic and
return non-zero if DIR cannot be created or cannot be determined to
exist already. Use DIRPATH in any diagnostic, not DIR.
Note that if DIR already exists, this function will return zero
(indicating success) and will set *CREATED_DIR_P to zero. */
static int
make_dir (const char *dir, const char *dirpath, mode_t mode, int *created_dir_p)
{
int fail = 0;
int created_dir;
created_dir = (mkdir (dir, mode) == 0);
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
call stat (to distinguish the three cases) only if mkdir fails.
The alternative to this approach is to `stat' each directory,
then to call mkdir if it doesn't exist. But if some other process
were to create the directory between the stat & mkdir, the mkdir
would fail with EEXIST. */
if (stat (dir, &stats))
{
error (0, saved_errno, _("cannot create directory `%s'"), dirpath);
fail = 1;
}
else if (!S_ISDIR (stats.st_mode))
{
error (0, 0, _("`%s' exists but is not a directory"), dirpath);
fail = 1;
}
else
{
/* DIR (aka DIRPATH) already exists and is a directory. */
}
}
if (created_dir_p)
*created_dir_p = created_dir;
return fail;
}
/* Ensure that the directory ARGPATH exists.
Remove any trailing slashes from ARGPATH before calling this function.
@@ -162,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);
@@ -174,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
@@ -203,7 +282,8 @@ make_path (const char *argpath,
while (1)
{
int newly_created_dir = 1;
int newly_created_dir;
int fail;
/* slash points to the leftmost unprocessed component of dirpath. */
basename_dir = slash;
@@ -217,34 +297,12 @@ make_path (const char *argpath,
if (!do_chdir)
basename_dir = dirpath;
/* The mkdir and stat calls below appear to be reversed.
They are not. It is important to call mkdir first and then to
call stat (to distinguish the three cases) only if mkdir fails.
The alternative to this approach is to `stat' each directory,
then to call mkdir if it doesn't exist. But if some other process
were to create the directory between the stat & mkdir, the mkdir
would fail with EEXIST. */
*slash = '\0';
if (mkdir (basename_dir, tmp_mode))
fail = make_dir (basename_dir, dirpath, tmp_mode, &newly_created_dir);
if (fail)
{
if (stat (basename_dir, &stats))
{
error (0, errno, "cannot create directory `%s'", dirpath);
CLEANUP;
return 1;
}
else if (!S_ISDIR (stats.st_mode))
{
error (0, 0, "`%s' exists but is not a directory", dirpath);
CLEANUP;
return 1;
}
else
{
/* DIRPATH already exists and is a directory. */
newly_created_dir = 0;
}
CLEANUP;
return 1;
}
if (newly_created_dir)
@@ -280,7 +338,7 @@ make_path (const char *argpath,
stat and mkdir process O(n^2) file name components. */
if (do_chdir && chdir (basename_dir) < 0)
{
error (0, errno, "cannot chdir to directory, %s", dirpath);
error (0, errno, _("cannot chdir to directory, %s"), dirpath);
CLEANUP;
return 1;
}
@@ -299,12 +357,8 @@ make_path (const char *argpath,
/* We're done making leading directories.
Create the final component of the path. */
/* The path could end in "/." or contain "/..", so test
if we really have to create the directory. */
if (stat (basename_dir, &stats) && mkdir (basename_dir, mode))
if (make_dir (basename_dir, dirpath, mode, NULL))
{
error (0, errno, "cannot create directory `%s'", dirpath);
CLEANUP;
return 1;
}
@@ -323,13 +377,14 @@ make_path (const char *argpath,
#endif
)
{
error (0, errno, "cannot chown %s", dirpath);
error (0, errno, _("cannot chown %s"), dirpath);
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);
error (0, errno, _("cannot chmod %s"), dirpath);
retval = 1;
}
}
@@ -357,7 +412,7 @@ make_path (const char *argpath,
if (!S_ISDIR (stats.st_mode))
{
error (0, 0, "`%s' exists but is not a directory", dirpath);
error (0, 0, _("`%s' exists but is not a directory"), dirpath);
return 1;
}

View File

@@ -1,5 +1,5 @@
/* Work around bug on some systems where malloc (0) fails.
Copyright (C) 1997 Free Software Foundation, Inc.
Copyright (C) 1997, 1998 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -30,8 +30,7 @@ char *malloc ();
If N is zero, allocate a 1-byte block. */
char *
rpl_malloc (n)
size_t n;
rpl_malloc (size_t n)
{
if (n == 0)
n = 1;

View File

@@ -104,8 +104,7 @@ static int memcmp_bytes __P((op_t, op_t));
__inline
# endif
static int
memcmp_bytes (a, b)
op_t a, b;
memcmp_bytes (long unsigned int a, long unsigned int b)
{
long int srcp1 = (long int) &a;
long int srcp2 = (long int) &b;
@@ -132,10 +131,7 @@ static int memcmp_common_alignment __P((long, long, size_t));
__inline
#endif
static int
memcmp_common_alignment (srcp1, srcp2, len)
long int srcp1;
long int srcp2;
size_t len;
memcmp_common_alignment (long int srcp1, long int srcp2, size_t len)
{
op_t a0, a1;
op_t b0, b1;
@@ -222,10 +218,7 @@ static int memcmp_not_common_alignment __P((long, long, size_t));
__inline
#endif
static int
memcmp_not_common_alignment (srcp1, srcp2, len)
long int srcp1;
long int srcp2;
size_t len;
memcmp_not_common_alignment (long int srcp1, long int srcp2, size_t len)
{
op_t a0, a1, a2, a3;
op_t b0, b1, b2, b3;
@@ -325,10 +318,7 @@ memcmp_not_common_alignment (srcp1, srcp2, len)
}
int
rpl_memcmp (s1, s2, len)
const __ptr_t s1;
const __ptr_t s2;
size_t len;
rpl_memcmp (const void *s1, const void *s2, size_t len)
{
op_t a0;
op_t b0;

View File

@@ -16,10 +16,7 @@
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
char *
memset (str, c, len)
char *str;
int c;
unsigned len;
memset (char *str, int c, unsigned int len)
{
register char *st = str;

View File

@@ -1,5 +1,5 @@
/* BSD compatible make directory function for System V
Copyright (C) 1988, 1990 Free Software Foundation, Inc.
Copyright (C) 1988, 1990, 1998 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -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,11 +58,11 @@ extern int errno;
subroutine didn't return EEXIST. It does now. */
int
mkdir (dpath, dmode)
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)
@@ -76,8 +86,9 @@ mkdir (dpath, 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);
@@ -86,7 +97,7 @@ mkdir (dpath, 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 zzzzzz
Copyright (C) 1993-1997, 1998 Free Software Foundation, Inc.
/* Convert a `struct tm' to a time_t value.
Copyright (C) 1993, 94, 95, 96, 97, 98, 99 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Paul Eggert (eggert@twinsun.com).
NOTE: The canonical source of this file is maintained with the GNU C Library.
Bugs can be reported to bug-glibc@prep.ai.mit.edu.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation; either version 2, or (at your option) any
later version.
This program is distributed in the hope that it will be useful,
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
USA. */
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If not,
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
/* Define this to have a standalone program to test this implementation of
mktime. */
@@ -28,14 +26,8 @@
# include <config.h>
#endif
/* Some systems need this in order to declare localtime_r properly. */
#ifndef _REENTRANT
# define _REENTRANT 1
#endif
#ifdef _LIBC
# define HAVE_LIMITS_H 1
# define HAVE_LOCALTIME_R 1
# define STDC_HEADERS 1
#endif
@@ -63,7 +55,7 @@
#endif /* DEBUG */
#ifndef __P
# if defined (__GNUC__) || (defined (__STDC__) && __STDC__)
# if defined __GNUC__ || (defined __STDC__ && __STDC__)
# define __P(args) args
# else
# define __P(args) ()
@@ -115,26 +107,15 @@ 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 localtime_r __localtime_r
# define my_mktime_localtime_r __localtime_r
#else
# if ! HAVE_LOCALTIME_R && ! defined localtime_r
/* Approximate localtime_r as best we can in its absence. */
# define localtime_r my_mktime_localtime_r
static struct tm *localtime_r __P ((const time_t *, 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 *
localtime_r (t, tp)
const time_t *t;
struct tm *tp;
my_mktime_localtime_r (const time_t *t, struct tm *tp)
{
struct tm *l = localtime (t);
if (! l)
@@ -142,7 +123,6 @@ localtime_r (t, tp)
*tp = *l;
return tp;
}
# endif /* ! HAVE_LOCALTIME_R && ! defined (localtime_r) */
#endif /* ! _LIBC */
@@ -153,9 +133,8 @@ localtime_r (t, tp)
If TP is null, return a nonzero value.
If overflow occurs, yield the low order bits of the correct answer. */
static time_t
ydhms_tm_diff (year, yday, hour, min, sec, tp)
int year, yday, hour, min, sec;
const struct tm *tp;
ydhms_tm_diff (int year, int yday, int hour, int min, int sec,
const struct tm *tp)
{
if (!tp)
return 1;
@@ -182,32 +161,12 @@ ydhms_tm_diff (year, yday, hour, min, sec, tp)
}
}
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, 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. */
static struct tm *
ranged_convert (convert, t, tp)
struct tm *(*convert) __P ((const time_t *, struct tm *));
time_t *t;
struct tm *tp;
ranged_convert (struct tm *(*convert) (const time_t *, struct tm *),
time_t *t, struct tm *tp)
{
struct tm *r;
@@ -254,19 +213,18 @@ ranged_convert (convert, t, tp)
compared to what the result would be for UTC without leap seconds.
If *OFFSET's guess is correct, only one CONVERT call is needed. */
time_t
__mktime_internal (tp, convert, offset)
struct tm *tp;
struct tm *(*convert) __P ((const time_t *, struct tm *));
time_t *offset;
__mktime_internal (struct tm *tp,
struct tm *(*convert) (const time_t *, struct tm *),
time_t *offset)
{
time_t t, dt, t0;
time_t t, dt, t0, t1, t2;
struct tm tm;
/* The maximum number of probes (calls to CONVERT) should be enough
to handle any combinations of time zone rule changes, solar time,
and leap seconds. POSIX.1 prohibits leap seconds, but some hosts
have them anyway. */
int remaining_probes = 4;
leap seconds, and oscillations around a spring-forward gap.
POSIX.1 prohibits leap seconds, but some hosts have them anyway. */
int remaining_probes = 6;
/* Time requested. Copy it in case CONVERT modifies *TP; this can
occur if TP is localtime's returned value and CONVERT is localtime. */
@@ -312,36 +270,52 @@ __mktime_internal (tp, convert, offset)
tm.tm_yday = tm.tm_hour = tm.tm_min = tm.tm_sec = 0;
t0 = ydhms_tm_diff (year, yday, hour, min, sec, &tm);
for (t = t0 + *offset;
for (t = t1 = t2 = t0 + *offset;
(dt = ydhms_tm_diff (year, yday, hour, min, sec,
ranged_convert (convert, &t, &tm)));
t += dt)
if (--remaining_probes == 0)
t1 = t2, t2 = t, t += dt)
if (t == t1 && t != t2
&& (isdst < 0 || tm.tm_isdst < 0
|| (isdst != 0) != (tm.tm_isdst != 0)))
/* We can't possibly find a match, as we are oscillating
between two values. The requested time probably falls
within a spring-forward gap of size DT. Follow the common
practice in this case, which is to return a time that is DT
away from the requested time, preferring a time whose
tm_isdst differs from the requested value. In practice,
this is more useful than returning -1. */
break;
else if (--remaining_probes == 0)
return -1;
/* Check whether tm.tm_isdst has the requested value, if any. */
if (0 <= isdst && 0 <= tm.tm_isdst)
/* If we have a match, check whether tm.tm_isdst has the requested
value, if any. */
if (dt == 0 && isdst != tm.tm_isdst && 0 <= isdst && 0 <= tm.tm_isdst)
{
int dst_diff = (isdst != 0) - (tm.tm_isdst != 0);
if (dst_diff)
/* tm.tm_isdst has the wrong value. Look for a neighboring
time with the right value, and use its UTC offset.
Heuristic: probe the previous three calendar quarters (approximately),
looking for the desired isdst. This isn't perfect,
but it's good enough in practice. */
int quarter = 7889238; /* seconds per average 1/4 Gregorian year */
int i;
/* If we're too close to the time_t limit, look in future quarters. */
if (t < TIME_T_MIN + 3 * quarter)
quarter = -quarter;
for (i = 1; i <= 3; i++)
{
/* Move two hours in the direction indicated by the disagreement,
probe some more, and switch to a new time if found.
The largest known fallback due to daylight savings is two hours:
once, in Newfoundland, 1988-10-30 02:00 -> 00:00. */
time_t ot = t - 2 * 60 * 60 * dst_diff;
while (--remaining_probes != 0)
time_t ot = t - i * quarter;
struct tm otm;
ranged_convert (convert, &ot, &otm);
if (otm.tm_isdst == isdst)
{
struct tm otm;
if (! (dt = ydhms_tm_diff (year, yday, hour, min, sec,
ranged_convert (convert, &ot, &otm))))
{
t = ot;
tm = otm;
break;
}
if ((ot += dt) == t)
break; /* Avoid a redundant probe. */
/* We found the desired tm_isdst.
Extrapolate back to the desired time. */
t = ot + ydhms_tm_diff (year, yday, hour, min, sec, &otm);
ranged_convert (convert, &t, &tm);
break;
}
}
}
@@ -387,6 +361,24 @@ __mktime_internal (tp, convert, offset)
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
@@ -531,6 +523,6 @@ main (argc, argv)
/*
Local Variables:
compile-command: "gcc -DDEBUG -D__EXTENSIONS__ -DHAVE_LIMITS_H -DHAVE_LOCALTIME_R -DSTDC_HEADERS -Wall -W -O -g mktime.c -o mktime"
compile-command: "gcc -DDEBUG -DHAVE_LIMITS_H -DSTDC_HEADERS -Wall -W -O -g mktime.c -o mktime"
End:
*/

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,14 +28,14 @@
# 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>
#else
char *malloc;
char *malloc ();
#endif
#ifndef NULL
@@ -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

@@ -42,10 +42,7 @@ char *malloc ();
BASE in the returned concatenation. */
char *
path_concat (dir, base, base_in_result)
const char *dir;
const char *base;
char **base_in_result;
path_concat (const char *dir, const char *base, char **base_in_result)
{
char *p;
char *p_concat;

View File

@@ -1,4 +1,4 @@
/* Parse dates for touch.
/* Parse dates for touch and date.
Copyright (C) 1989, 1990, 1991, 1998 Free Software Foundation Inc.
This program is free software; you can redistribute it and/or modify
@@ -117,7 +117,7 @@ posix_time_parse (const char *s, unsigned int syntax_bits)
const char *dot = NULL;
int pair[6];
int *p;
int i;
unsigned int i;
size_t s_len = strlen (s);
size_t len = (((syntax_bits & PDS_SECONDS) && (dot = strchr (s, '.')))

View File

@@ -7,10 +7,18 @@
# define PDS_CENTURY 4
# define PDS_SECONDS 8
# ifndef PARAMS
# if defined PROTOTYPES || (defined __STDC__ && __STDC__)
# define PARAMS(Args) Args
# else
# define PARAMS(Args) ()
# endif
# endif
time_t
posixtime (const char *s, unsigned int syntax_bits);
posixtime PARAMS ((const char *s, unsigned int syntax_bits));
struct tm *
posixtm (const char *s, unsigned int syntax_bits);
posixtm PARAMS ((const char *s, unsigned int syntax_bits));
#endif

View File

@@ -1,242 +0,0 @@
/* Parse dates for touch.
Copyright (C) 1989, 1990, 1991 Free Software Foundation Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
/* Written by Jim Kingdon and David MacKenzie. */
%{
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
/* The following block of alloca-related preprocessor directives is here
solely to allow compilation by non GNU-C compilers of the C parser
produced from this file by old versions of bison. Newer versions of
bison include a block similar to this one in bison.simple. */
#ifdef __GNUC__
#define alloca __builtin_alloca
#else
#ifdef HAVE_ALLOCA_H
#include <alloca.h>
#else
#ifdef _AIX
#pragma alloca
#else
void *alloca ();
#endif
#endif
#endif
#include <stdio.h>
#include <sys/types.h>
#ifdef TM_IN_SYS_TIME
#include <sys/time.h>
#else
#include <time.h>
#endif
/* Some old versions of bison generate parsers that use bcopy.
That loses on systems that don't provide the function, so we have
to redefine it here. */
#if !defined (HAVE_BCOPY) && defined (HAVE_MEMCPY) && !defined (bcopy)
#define bcopy(from, to, len) memcpy ((to), (from), (len))
#endif
#define YYDEBUG 1
/* Lexical analyzer's current scan position in the input string. */
static char *curpos;
/* The return value. */
static struct tm t;
time_t mktime ();
/* Remap normal yacc parser interface names (yyparse, yylex, yyerror, etc),
as well as gratuitiously global symbol names, so we can have multiple
yacc generated parsers in the same program. Note that these are only
the variables produced by yacc. If other parser generators (bison,
byacc, etc) produce additional global names that conflict at link time,
then those parser generators need to be fixed instead of adding those
names to this list. */
#define yymaxdepth pt_maxdepth
#define yyparse pt_parse
#define yylex pt_lex
#define yyerror pt_error
#define yylval pt_lval
#define yychar pt_char
#define yydebug pt_debug
#define yypact pt_pact
#define yyr1 pt_r1
#define yyr2 pt_r2
#define yydef pt_def
#define yychk pt_chk
#define yypgo pt_pgo
#define yyact pt_act
#define yyexca pt_exca
#define yyerrflag pt_errflag
#define yynerrs pt_nerrs
#define yyps pt_ps
#define yypv pt_pv
#define yys pt_s
#define yy_yys pt_yys
#define yystate pt_state
#define yytmp pt_tmp
#define yyv pt_v
#define yy_yyv pt_yyv
#define yyval pt_val
#define yylloc pt_lloc
#define yyreds pt_reds /* With YYDEBUG defined */
#define yytoks pt_toks /* With YYDEBUG defined */
#define yylhs pt_yylhs
#define yylen pt_yylen
#define yydefred pt_yydefred
#define yydgoto pt_yydgoto
#define yysindex pt_yysindex
#define yyrindex pt_yyrindex
#define yygindex pt_yygindex
#define yytable pt_yytable
#define yycheck pt_yycheck
static int yylex ();
static int yyerror ();
%}
%token DIGIT
%%
date :
digitpair /* month */
digitpair /* day */
digitpair /* hours */
digitpair /* minutes */
year
seconds {
if ($1 >= 1 && $1 <= 12)
t.tm_mon = $1 - 1;
else {
YYABORT;
}
if ($2 >= 1 && $2 <= 31)
t.tm_mday = $2;
else {
YYABORT;
}
if ($3 >= 0 && $3 <= 23)
t.tm_hour = $3;
else {
YYABORT;
}
if ($4 >= 0 && $4 <= 59)
t.tm_min = $4;
else {
YYABORT;
}
}
year : digitpair {
t.tm_year = $1;
/* Deduce the century based on the year.
See POSIX.2 section 4.63.3. */
if ($1 <= 68)
t.tm_year += 100;
}
| digitpair digitpair {
t.tm_year = $1 * 100 + $2;
if (t.tm_year < 1900) {
YYABORT;
} else
t.tm_year -= 1900;
}
| /* empty */ {
time_t now;
struct tm *tmp;
/* Use current year. */
time (&now);
tmp = localtime (&now);
t.tm_year = tmp->tm_year;
}
;
seconds : /* empty */ {
t.tm_sec = 0;
}
| '.' digitpair {
if ($2 >= 0 && $2 <= 61)
t.tm_sec = $2;
else {
YYABORT;
}
}
;
digitpair : DIGIT DIGIT {
$$ = $1 * 10 + $2;
}
;
%%
static int
yylex ()
{
char ch = *curpos++;
if (ch >= '0' && ch <= '9')
{
yylval = ch - '0';
return DIGIT;
}
else if (ch == '.' || ch == 0)
return ch;
else
return '?'; /* Cause an error. */
}
static int
yyerror ()
{
return 0;
}
/* Parse a POSIX-style date and return it, or (time_t)-1 for an error. */
time_t
posixtime (s)
char *s;
{
curpos = s;
/* Let mktime decide whether it is daylight savings time. */
t.tm_isdst = -1;
if (yyparse ())
return (time_t)-1;
else
return mktime (&t);
}
/* Parse a POSIX-style date and return it, or NULL for an error. */
struct tm *
posixtm (s)
char *s;
{
if (posixtime (s) == -1)
return NULL;
return &t;
}

View File

@@ -23,16 +23,15 @@
# include <config.h>
#endif
/* Disable the definition of putenv to rpl_putenv (from config.h) in this
file. Otherwise, we'd get conflicting prototypes for rpl_putenv on
systems like Irix 5.3. */
#undef putenv
#include <sys/types.h>
#if defined (__GNU_LIBRARY__) || defined (HAVE_STDLIB_H)
# include <stdlib.h>
#endif
/* Don't include stdlib.h because some (e.g., Solaris 2.7) declare putenv
with a non-const argument. That would conflict with the declaration of
rpl_putenv below (due to the #define putenv rpl_putenv from config.h). */
char *malloc ();
void free ();
#if defined (__GNU_LIBRARY__) || defined (HAVE_STRING_H)
# include <string.h>
#endif
@@ -60,8 +59,7 @@ extern char **environ;
/* Put STRING, which is of the form "NAME=VALUE", in the environment. */
int
rpl_putenv (string)
const char *string;
rpl_putenv (const char *string)
{
const char *const name_end = strchr (string, '=');
register size_t size;

View File

@@ -1,5 +1,5 @@
/* quotearg.c - quote arguments for output
Copyright (C) 1998 Free Software Foundation, Inc.
Copyright (C) 1998, 1999 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -71,7 +71,22 @@ struct quoting_options
/* Names of quoting styles. */
char const *const quoting_style_args[] =
{
"literal", "shell", "shell-always", "c", "escape", 0
"literal",
"shell",
"shell-always",
"c",
"escape",
0
};
/* Correspondances to quoting style names. */
enum quoting_style const quoting_style_vals[] =
{
literal_quoting_style,
shell_quoting_style,
shell_always_quoting_style,
c_quoting_style,
escape_quoting_style
};
/* The default quoting options. */
@@ -151,7 +166,7 @@ quotearg_buffer (char *buffer, size_t buffersize,
switch (quoting_style)
{
case shell_quoting_style:
if (! (argsize == -1 ? arg[0] == '\0' : argsize == 0))
if (! (argsize == (size_t) -1 ? arg[0] == '\0' : argsize == 0))
{
switch (arg[0])
{
@@ -162,7 +177,7 @@ quotearg_buffer (char *buffer, size_t buffersize,
len = 0;
for (i = 0; ; i++)
{
if (argsize == -1 ? arg[i] == '\0' : i == argsize)
if (argsize == (size_t) -1 ? arg[i] == '\0' : i == argsize)
goto done;
c = arg[i];
@@ -209,7 +224,7 @@ quotearg_buffer (char *buffer, size_t buffersize,
if (quote_mark)
STORE (quote_mark);
for (i = 0; ! (argsize == -1 ? arg[i] == '\0' : i == argsize); i++)
for (i = 0; ! (argsize == (size_t) -1 ? arg[i] == '\0' : i == argsize); i++)
{
c = arg[i];
@@ -243,11 +258,6 @@ 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 == escape_quoting_style)
goto store_escape;
break;
case '"':
if (quoting_style == c_quoting_style)
goto store_escape;
@@ -258,8 +268,8 @@ quotearg_buffer (char *buffer, size_t buffersize,
{
STORE ('\\');
STORE ('0' + (c >> 6));
STORE ('0' + ((c >> 3) & 3));
c = '0' + (c & 3);
STORE ('0' + ((c >> 3) & 7));
c = '0' + (c & 7);
goto store_c;
}
break;
@@ -289,11 +299,13 @@ quotearg_buffer (char *buffer, size_t buffersize,
OPTIONS specifies the quoting options.
The returned value points to static storage that can be
reused by the next call to this function with the same value of N.
N must be nonnegative. */
N must be nonnegative. N is deliberately declared with type `int'
to allow for future extensions (using negative values). */
static char *
quotearg_n_options (int n, char const *arg, struct quoting_options *options)
quotearg_n_options (int n, char const *arg,
struct quoting_options const *options)
{
static unsigned nslots;
static unsigned int nslots;
static struct slotvec
{
size_t size;
@@ -328,7 +340,7 @@ quotearg_n_options (int n, char const *arg, struct quoting_options *options)
}
char *
quotearg_n (int n, char const *arg)
quotearg_n (unsigned int n, char const *arg)
{
return quotearg_n_options (n, arg, &default_quoting_options);
}

View File

@@ -1,5 +1,5 @@
/* quotearg.h - quote arguments for output
Copyright (C) 1998 Free Software Foundation, Inc.
Copyright (C) 1998, 1999 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -33,8 +33,9 @@ enum quoting_style
# define DEFAULT_QUOTING_STYLE literal_quoting_style
#endif
/* Names of quoting styles. */
/* Names of quoting styles and their corresponding values. */
extern char const *const quoting_style_args[];
extern enum quoting_style const quoting_style_vals[];
struct quoting_options;
@@ -87,9 +88,9 @@ size_t quotearg_buffer PARAMS ((char *buffer, size_t buffersize,
The returned value points to static storage that can be
reused by the next call to this function with the same value of N.
N must be nonnegative. */
char *quotearg_n PARAMS ((int n, char const *arg));
char *quotearg_n PARAMS ((unsigned int n, char const *arg));
/* Equivalent to quotearg_n (ARG, 0). */
/* Equivalent to quotearg_n (0, ARG). */
char *quotearg PARAMS ((char const *arg));
/* Like quotearg (ARG), except also quote any instances of 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

@@ -4,23 +4,20 @@
internationalization features.)
Copyright (C) 1993, 94, 95, 96, 97, 98 Free Software Foundation, Inc.
NOTE: The canonical source of this file is maintained with the GNU C Library.
Bugs can be reported to bug-glibc@prep.ai.mit.edu.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation; either version 2, or (at your option) any
later version.
This program is distributed in the hope that it will be useful,
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
USA. */
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If not,
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
/* AIX requires this to be the first thing in the file. */
#if defined _AIX && !defined REGEX_MALLOC
@@ -49,12 +46,11 @@
# include <sys/types.h>
#endif
#define WIDE_CHAR_SUPPORT \
defined _LIBC || (HAVE_WCTYPE_H && HAVE_WCHAR_H && HAVE_BTOWC)
#define WIDE_CHAR_SUPPORT (HAVE_WCTYPE_H && HAVE_WCHAR_H && HAVE_BTOWC)
/* For platform which support the ISO C amendement 1 functionality we
support user defined character classes. */
#if WIDE_CHAR_SUPPORT
#if defined _LIBC || WIDE_CHAR_SUPPORT
/* Solaris 2.5 has a bug: <wchar.h> must be included before <wctype.h>. */
# include <wchar.h>
# include <wctype.h>
@@ -211,7 +207,7 @@ init_syntax_once ()
#endif /* not emacs */
/* Get the interface, including the syntax bits. */
#include "regex.h"
#include <regex.h>
/* isalpha etc. are used for the character classes. */
#include <ctype.h>
@@ -1722,7 +1718,7 @@ typedef struct
} \
}
#if WIDE_CHAR_SUPPORT
#if defined _LIBC || WIDE_CHAR_SUPPORT
/* The GNU C library provides support for user-defined character classes
and the functions from ISO C amendement 1. */
# ifdef CHARCLASS_NAME_MAX
@@ -2214,10 +2210,13 @@ regex_compile (pattern, size, syntax, bufp)
for (;;)
{
PATFETCH (c);
if ((c == ':' && *p == ']') || p == pend
|| c1 == CHAR_CLASS_MAX_LENGTH)
if ((c == ':' && *p == ']') || p == pend)
break;
str[c1++] = c;
if (c1 < CHAR_CLASS_MAX_LENGTH)
str[c1++] = c;
else
/* This is in any case an invalid class name. */
str[0] = '\0';
}
str[c1] = '\0';
@@ -2226,7 +2225,7 @@ regex_compile (pattern, size, syntax, bufp)
the leading `:' and `[' (but set bits for them). */
if (c == ':' && *p == ']')
{
#if WIDE_CHAR_SUPPORT
#if defined _LIBC || WIDE_CHAR_SUPPORT
boolean is_lower = STREQ (str, "lower");
boolean is_upper = STREQ (str, "upper");
wctype_t wt;
@@ -2247,10 +2246,10 @@ regex_compile (pattern, size, syntax, bufp)
# ifdef _LIBC
if (__iswctype (__btowc (ch), wt))
SET_LIST_BIT (ch);
#else
# else
if (iswctype (btowc (ch), wt))
SET_LIST_BIT (ch);
#endif
# endif
if (translate && (is_upper || is_lower)
&& (ISUPPER (ch) || ISLOWER (ch)))
@@ -5574,7 +5573,8 @@ re_exec (s)
REG_EXTENDED bit in CFLAGS is set; otherwise, to
RE_SYNTAX_POSIX_BASIC;
`newline_anchor' to REG_NEWLINE being set in CFLAGS;
`fastmap' and `fastmap_accurate' to zero;
`fastmap' to an allocated space for the fastmap;
`fastmap_accurate' to zero;
`re_nsub' to the number of subexpressions in PATTERN.
PATTERN is the address of the pattern string.
@@ -5613,11 +5613,8 @@ regcomp (preg, pattern, cflags)
preg->allocated = 0;
preg->used = 0;
/* Don't bother to use a fastmap when searching. This simplifies the
REG_NEWLINE case: if we used a fastmap, we'd have to put all the
characters after newlines into the fastmap. This way, we just try
every character. */
preg->fastmap = 0;
/* Try to allocate space for the fastmap. */
preg->fastmap = (char *) malloc (1 << BYTEWIDTH);
if (cflags & REG_ICASE)
{
@@ -5657,6 +5654,19 @@ regcomp (preg, pattern, cflags)
unmatched close-group: both are REG_EPAREN. */
if (ret == REG_ERPAREN) ret = REG_EPAREN;
if (ret == REG_NOERROR && preg->fastmap)
{
/* Compute the fastmap now, since regexec cannot modify the pattern
buffer. */
if (re_compile_fastmap (preg) == -2)
{
/* Some error occured while computing the fastmap, just forget
about it. */
free (preg->fastmap);
preg->fastmap = NULL;
}
}
return (int) ret;
}
#ifdef _LIBC
@@ -5705,10 +5715,10 @@ regexec (preg, string, nmatch, pmatch, eflags)
if (want_reg_info)
{
regs.num_regs = nmatch;
regs.start = TALLOC (nmatch, regoff_t);
regs.end = TALLOC (nmatch, regoff_t);
if (regs.start == NULL || regs.end == NULL)
regs.start = TALLOC (nmatch * 2, regoff_t);
if (regs.start == NULL)
return (int) REG_NOMATCH;
regs.end = regs.start + nmatch;
}
/* Perform the searching operation. */
@@ -5732,7 +5742,6 @@ regexec (preg, string, nmatch, pmatch, eflags)
/* If we needed the temporary register info, free the space now. */
free (regs.start);
free (regs.end);
}
/* We want zero return to mean success, unlike `re_search'. */

View File

@@ -1,25 +1,24 @@
/* Definitions for data structures and routines for the regular
expression library, version 0.12.
Copyright (C) 1985,89,90,91,92,93,95,96,97 Free Software Foundation, Inc.
Copyright (C) 1985,89,90,91,92,93,95,96,97,98 Free Software Foundation, Inc.
This file is part of the GNU C Library. Its master source is NOT part of
the C library, however. The master source lives in /gd/gnu/lib.
NOTE: The canonical source of this file is maintained with the GNU C Library.
Bugs can be reported to bug-glibc@prep.ai.mit.edu.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation; either version 2, or (at your option) any
later version.
This program is distributed in the hope that it will be useful,
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
USA. */
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If not,
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#ifndef _REGEX_H
#define _REGEX_H 1
@@ -283,8 +282,8 @@ extern reg_syntax_t re_syntax_options;
`re_error_msg' table in regex.c. */
typedef enum
{
#if (_XOPEN_SOURCE - 0) == 500
REG_NOSYS = -1, /* This will never happen for this implementation. */
#ifdef _XOPEN_SOURCE
REG_ENOSYS = -1, /* This will never happen for this implementation. */
#endif
REG_NOERROR = 0, /* Success. */
@@ -442,15 +441,11 @@ typedef struct
/* Sets the current default syntax to SYNTAX, and return the old syntax.
You can also simply assign to the `re_syntax_options' variable. */
extern reg_syntax_t __re_set_syntax _RE_ARGS ((reg_syntax_t syntax));
extern reg_syntax_t re_set_syntax _RE_ARGS ((reg_syntax_t syntax));
/* Compile the regular expression PATTERN, with length LENGTH
and syntax given by the global `re_syntax_options', into the buffer
BUFFER. Return NULL if successful, and an error string if not. */
extern const char *__re_compile_pattern
_RE_ARGS ((const char *pattern, size_t length,
struct re_pattern_buffer *buffer));
extern const char *re_compile_pattern
_RE_ARGS ((const char *pattern, size_t length,
struct re_pattern_buffer *buffer));
@@ -459,7 +454,6 @@ extern const char *re_compile_pattern
/* Compile a fastmap for the compiled pattern in BUFFER; used to
accelerate searches. Return 0 if successful and -2 if was an
internal error. */
extern int __re_compile_fastmap _RE_ARGS ((struct re_pattern_buffer *buffer));
extern int re_compile_fastmap _RE_ARGS ((struct re_pattern_buffer *buffer));
@@ -468,9 +462,6 @@ extern int re_compile_fastmap _RE_ARGS ((struct re_pattern_buffer *buffer));
characters. Return the starting position of the match, -1 for no
match, or -2 for an internal error. Also return register
information in REGS (if REGS and BUFFER->no_sub are nonzero). */
extern int __re_search
_RE_ARGS ((struct re_pattern_buffer *buffer, const char *string,
int length, int start, int range, struct re_registers *regs));
extern int re_search
_RE_ARGS ((struct re_pattern_buffer *buffer, const char *string,
int length, int start, int range, struct re_registers *regs));
@@ -478,10 +469,6 @@ extern int re_search
/* Like `re_search', but search in the concatenation of STRING1 and
STRING2. Also, stop searching at index START + STOP. */
extern int __re_search_2
_RE_ARGS ((struct re_pattern_buffer *buffer, const char *string1,
int length1, const char *string2, int length2,
int start, int range, struct re_registers *regs, int stop));
extern int re_search_2
_RE_ARGS ((struct re_pattern_buffer *buffer, const char *string1,
int length1, const char *string2, int length2,
@@ -490,19 +477,12 @@ extern int re_search_2
/* Like `re_search', but return how many characters in STRING the regexp
in BUFFER matched, starting at position START. */
extern int __re_match
_RE_ARGS ((struct re_pattern_buffer *buffer, const char *string,
int length, int start, struct re_registers *regs));
extern int re_match
_RE_ARGS ((struct re_pattern_buffer *buffer, const char *string,
int length, int start, struct re_registers *regs));
/* Relates to `re_match' as `re_search_2' relates to `re_search'. */
extern int __re_match_2
_RE_ARGS ((struct re_pattern_buffer *buffer, const char *string1,
int length1, const char *string2, int length2,
int start, struct re_registers *regs, int stop));
extern int re_match_2
_RE_ARGS ((struct re_pattern_buffer *buffer, const char *string1,
int length1, const char *string2, int length2,
@@ -521,14 +501,11 @@ extern int re_match_2
Unless this function is called, the first search or match using
PATTERN_BUFFER will allocate its own register data, without
freeing the old data. */
extern void __re_set_registers
_RE_ARGS ((struct re_pattern_buffer *buffer, struct re_registers *regs,
unsigned num_regs, regoff_t *starts, regoff_t *ends));
extern void re_set_registers
_RE_ARGS ((struct re_pattern_buffer *buffer, struct re_registers *regs,
unsigned num_regs, regoff_t *starts, regoff_t *ends));
#ifdef _REGEX_RE_COMP
#if defined _REGEX_RE_COMP || defined _LIBC
# ifndef _CRAY
/* 4.2 bsd compatibility. */
extern char *re_comp _RE_ARGS ((const char *));
@@ -537,24 +514,16 @@ extern int re_exec _RE_ARGS ((const char *));
#endif
/* POSIX compatibility. */
extern int __regcomp _RE_ARGS ((regex_t *__preg, const char *__pattern,
int __cflags));
extern int regcomp _RE_ARGS ((regex_t *__preg, const char *__pattern,
int __cflags));
extern int __regexec _RE_ARGS ((const regex_t *__preg,
const char *__string, size_t __nmatch,
regmatch_t __pmatch[], int __eflags));
extern int regexec _RE_ARGS ((const regex_t *__preg,
const char *__string, size_t __nmatch,
regmatch_t __pmatch[], int __eflags));
extern size_t __regerror _RE_ARGS ((int __errcode, const regex_t *__preg,
char *__errbuf, size_t __errbuf_size));
extern size_t regerror _RE_ARGS ((int __errcode, const regex_t *__preg,
char *__errbuf, size_t __errbuf_size));
extern void __regfree _RE_ARGS ((regex_t *__preg));
extern void regfree _RE_ARGS ((regex_t *__preg));

View File

@@ -38,12 +38,9 @@ extern int errno;
Return 0 if successful, -1 if not. */
int
rename (from, to)
char *from;
char *to;
rename (char *from, char *to)
{
struct stat from_stats, to_stats;
int pid, status;
if (stat (from, &from_stats))
return -1;
@@ -76,23 +73,27 @@ rename (from, 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. */

View File

@@ -29,24 +29,15 @@
# endif
#endif
#include <sys/types.h>
#include <regex.h>
#if ENABLE_NLS
# include <sys/types.h>
# include <regex.h>
# include <libintl.h>
# define _(Text) gettext (Text)
#else
# define _(Text) Text
#endif
static int
try (response, pattern, match, nomatch, lastp, re)
const char *response;
const char *pattern;
const int match;
const int nomatch;
const char **lastp;
regex_t *re;
try (const char *response, const char *pattern, const int match,
const int nomatch, const char **lastp, regex_t *re)
{
if (pattern != *lastp)
{
@@ -66,12 +57,13 @@ try (response, pattern, match, nomatch, lastp, re)
/* See if the regular expression matches RESPONSE. */
return regexec (re, response, 0, NULL, 0) == 0 ? match : nomatch;
}
#endif
int
rpmatch (response)
const char *response;
rpmatch (const char *response)
{
#if ENABLE_NLS
/* Match against one of the response patterns, compiling the pattern
first if necessary. */
@@ -84,4 +76,9 @@ rpmatch (response)
&yesexpr, &yesre))
? result
: try (response, _("^[nN]"), 0, -1, &noexpr, &nore));
#else
/* Test against "^[yY]" and "^[nN]", hardcoded to avoid requiring regex */
return (*response == 'y' || *response == 'Y' ? 1
: *response == 'n' || *response == 'N' ? 0 : -1);
#endif
}

View File

@@ -57,8 +57,7 @@ char *xgetcwd PARAMS ((void));
called, but doing so is ok. Otherwise, return zero. */
int
save_cwd (cwd)
struct saved_cwd *cwd;
save_cwd (struct saved_cwd *cwd)
{
static int have_working_fchdir = 1;
@@ -118,10 +117,7 @@ save_cwd (cwd)
*/
int
restore_cwd (cwd, dest, from)
const struct saved_cwd *cwd;
const char *dest;
const char *from;
restore_cwd (const struct saved_cwd *cwd, const char *dest, const char *from)
{
int fail = 0;
if (cwd->desc >= 0)
@@ -144,8 +140,7 @@ restore_cwd (cwd, dest, from)
}
void
free_cwd (cwd)
struct saved_cwd *cwd;
free_cwd (struct saved_cwd *cwd)
{
if (cwd->desc >= 0)
close (cwd->desc);

View File

@@ -76,9 +76,7 @@ char *stpcpy ();
Return NULL if DIR cannot be opened or if out of memory. */
char *
savedir (dir, name_size)
const char *dir;
unsigned int name_size;
savedir (const char *dir, unsigned int name_size)
{
DIR *dirp;
struct dirent *dp;

View File

@@ -34,9 +34,7 @@
/* Copy SRC to DEST, returning the address of the terminating '\0' in DEST. */
char *
__stpcpy (dest, src)
char *dest;
const char *src;
__stpcpy (char *dest, const char *src)
{
register char *d = dest;
register const char *s = src;

66
lib/strcasecmp.c Normal file
View File

@@ -0,0 +1,66 @@
/* strcasecmp.c -- case insensitive string comparator
Copyright (C) 1998, 1999 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
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
#ifdef LENGTH_LIMIT
# define STRXCASECMP_FUNCTION strncasecmp
# define STRXCASECMP_DECLARE_N , size_t n
# define LENGTH_LIMIT_EXPR(Expr) Expr
#else
# define STRXCASECMP_FUNCTION strcasecmp
# define STRXCASECMP_DECLARE_N /* empty */
# define LENGTH_LIMIT_EXPR(Expr) 0
#endif
#include <sys/types.h>
#include <ctype.h>
#define TOLOWER(Ch) (isupper (Ch) ? tolower (Ch) : (Ch))
/* Compare {{no more than N characters of }}strings S1 and S2,
ignoring case, returning less than, equal to or
greater than zero if S1 is lexicographically less
than, equal to or greater than S2. */
int
STRXCASECMP_FUNCTION (const char *s1, const char *s2 STRXCASECMP_DECLARE_N)
{
register const unsigned char *p1 = (const unsigned char *) s1;
register const unsigned char *p2 = (const unsigned char *) s2;
unsigned char c1, c2;
if (p1 == p2 || LENGTH_LIMIT_EXPR (n == 0))
return 0;
do
{
c1 = TOLOWER (*p1);
c2 = TOLOWER (*p2);
if (LENGTH_LIMIT_EXPR (--n == 0) || c1 == '\0')
break;
++p1;
++p2;
}
while (c1 == c2);
return c1 - c2;
}

View File

@@ -31,8 +31,7 @@ char *strcpy ();
or 0 if out of memory. */
char *
strdup (str)
const char *str;
strdup (const char *str)
{
char *newstr;

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
@@ -22,11 +22,6 @@
# include <config.h>
#endif
/* Some systems need this in order to declare localtime_r properly. */
#ifndef _REENTRANT
# define _REENTRANT 1
#endif
#ifdef _LIBC
# define HAVE_LIMITS_H 1
# define HAVE_MBLEN 1
@@ -136,7 +131,7 @@ extern char *tzname[];
add one for integer division truncation;
add one more for a minus sign if t is signed. */
#define INT_STRLEN_BOUND(t) \
((sizeof (t) * CHAR_BIT - TYPE_SIGNED (t)) * 302 / 100 + 1 + TYPE_SIGNED (t))
((sizeof (t) * CHAR_BIT - TYPE_SIGNED (t)) * 302 / 1000 + 1 + TYPE_SIGNED (t))
#define TM_YEAR_BASE 1900
@@ -149,21 +144,20 @@ extern char *tzname[];
#ifdef _LIBC
# define gmtime_r __gmtime_r
# define localtime_r __localtime_r
# define my_strftime_gmtime_r __gmtime_r
# define my_strftime_localtime_r __localtime_r
# define tzname __tzname
# define tzset __tzset
#else
# if ! HAVE_LOCALTIME_R
# if ! HAVE_TM_GMTOFF
/* Approximate gmtime_r as best we can in its absence. */
# undef gmtime_r
# define gmtime_r my_gmtime_r
static struct tm *gmtime_r __P ((const time_t *, struct tm *));
/* If we're a strftime substitute in a GNU program, then prefer gmtime
to gmtime_r, since many gmtime_r implementations are buggy.
Similarly for localtime_r. */
# if ! HAVE_TM_GMTOFF
static struct tm *my_strftime_gmtime_r __P ((const time_t *, struct tm *));
static struct tm *
gmtime_r (t, tp)
const time_t *t;
struct tm *tp;
my_strftime_gmtime_r (const time_t *t, struct tm *tp)
{
struct tm *l = gmtime (t);
if (! l)
@@ -171,16 +165,11 @@ gmtime_r (t, tp)
*tp = *l;
return tp;
}
# endif /* ! HAVE_TM_GMTOFF */
# endif /* ! HAVE_TM_GMTOFF */
/* Approximate localtime_r as best we can in its absence. */
# undef localtime_r
# define localtime_r my_ftime_localtime_r
static struct tm *localtime_r __P ((const time_t *, struct tm *));
static struct tm *my_strftime_localtime_r __P ((const time_t *, struct tm *));
static struct tm *
localtime_r (t, tp)
const time_t *t;
struct tm *tp;
my_strftime_localtime_r (const time_t *t, struct tm *tp)
{
struct tm *l = localtime (t);
if (! l)
@@ -188,7 +177,6 @@ localtime_r (t, tp)
*tp = *l;
return tp;
}
# endif /* ! HAVE_LOCALTIME_R */
#endif /* ! defined _LIBC */
@@ -282,10 +270,7 @@ static const char zeroes[16] = /* "0000000000000000" */
static char *memcpy_lowcase __P ((char *dest, const char *src, size_t len));
static char *
memcpy_lowcase (dest, src, len)
char *dest;
const char *src;
size_t len;
memcpy_lowcase (char *dest, const char *src, size_t len)
{
while (len-- > 0)
dest[len] = TOLOWER ((unsigned char) src[len]);
@@ -295,10 +280,7 @@ memcpy_lowcase (dest, src, len)
static char *memcpy_uppcase __P ((char *dest, const char *src, size_t len));
static char *
memcpy_uppcase (dest, src, len)
char *dest;
const char *src;
size_t len;
memcpy_uppcase (char *dest, const char *src, size_t len)
{
while (len-- > 0)
dest[len] = TOUPPER ((unsigned char) src[len]);
@@ -312,9 +294,7 @@ memcpy_uppcase (dest, src, len)
# define tm_diff ftime_tm_diff
static int tm_diff __P ((const struct tm *, const struct tm *));
static int
tm_diff (a, b)
const struct tm *a;
const struct tm *b;
tm_diff (const struct tm *a, const struct tm *b)
{
/* Compute intervening leap days correctly even if year is negative.
Take care to avoid int overflow in leap day calculations,
@@ -349,9 +329,7 @@ static int iso_week_days __P ((int, int));
__inline__
#endif
static int
iso_week_days (yday, wday)
int yday;
int wday;
iso_week_days (int yday, int wday)
{
/* Add enough to the first operand of % to make it nonnegative. */
int big_enough_multiple_of_7 = (-YDAY_MINIMUM / 7 + 2) * 7;
@@ -376,34 +354,35 @@ static char const month_name[][10] =
#ifdef emacs
# define my_strftime emacs_strftime
/* Emacs 20.2 uses `-Dstrftime=emacs_strftime' when compiling,
because that's how strftime used to be configured.
Undo this, since it gets in the way of accessing the underlying strftime,
which is needed for things like %Ec in Solaris.
The following two lines can be removed once Emacs stops compiling with
`-Dstrftime=emacs_strftime'. */
# undef strftime
size_t strftime __P ((char *, size_t, const char *, const struct tm *));
# define my_strftime emacs_strftimeu
# define ut_argument , ut
# define ut_argument_spec int ut;
# define ut_argument_spec_iso , int ut
#else
# define my_strftime strftime
# define ut_argument
# define ut_argument_spec
# define ut_argument_spec_iso
/* We don't have this information in general. */
# define ut 0
#endif
#if !defined _LIBC && HAVE_TZNAME && HAVE_TZSET
/* Solaris 2.5 tzset sometimes modifies the storage returned by localtime.
Work around this bug by copying *tp before it might be munged. */
size_t _strftime_copytm __P ((char *, size_t, const char *,
const struct tm *));
const struct tm * ut_argument_spec_iso));
size_t
my_strftime (s, maxsize, format, tp)
my_strftime (s, maxsize, format, tp ut_argument)
char *s;
size_t maxsize;
const char *format;
const struct tm *tp;
ut_argument_spec
{
struct tm tmcopy;
tmcopy = *tp;
return _strftime_copytm (s, maxsize, format, &tmcopy);
return _strftime_copytm (s, maxsize, format, &tmcopy ut_argument);
}
# undef my_strftime
# define my_strftime(S, Maxsize, Format, Tp) \
@@ -418,41 +397,40 @@ size_t strftime __P ((char *, size_t, const char *, const struct tm *));
anywhere, so to determine how many characters would be
written, use NULL for S and (size_t) UINT_MAX for MAXSIZE. */
size_t
my_strftime (s, maxsize, format, tp)
char *s;
size_t maxsize;
const char *format;
const struct tm *tp;
my_strftime (char *s, size_t maxsize, const char *format, const struct tm *tp
ut_argument_spec)
{
int hour12 = tp->tm_hour;
#ifdef _NL_CURRENT
const char *const a_wkday = _NL_CURRENT (LC_TIME, ABDAY_1 + tp->tm_wday);
const char *const f_wkday = _NL_CURRENT (LC_TIME, DAY_1 + tp->tm_wday);
const char *const a_month = _NL_CURRENT (LC_TIME, ABMON_1 + tp->tm_mon);
const char *const f_month = _NL_CURRENT (LC_TIME, MON_1 + tp->tm_mon);
const char *const ampm = _NL_CURRENT (LC_TIME,
hour12 > 11 ? PM_STR : AM_STR);
size_t aw_len = strlen (a_wkday);
size_t am_len = strlen (a_month);
size_t ap_len = strlen (ampm);
/* We cannot make the following values variables since we must delay
the evaluation of these values until really needed since some
expressions might not be valid in every situation. The `struct tm'
might be generated by a strptime() call that initialized
only a few elements. Dereference the pointers only if the format
requires this. Then it is ok to fail if the pointers are invalid. */
# define a_wkday _NL_CURRENT (LC_TIME, ABDAY_1 + tp->tm_wday)
# define f_wkday _NL_CURRENT (LC_TIME, DAY_1 + tp->tm_wday)
# define a_month _NL_CURRENT (LC_TIME, ABMON_1 + tp->tm_mon)
# define f_month _NL_CURRENT (LC_TIME, MON_1 + tp->tm_mon)
# define ampm _NL_CURRENT (LC_TIME, tp->tm_hour > 11 ? PM_STR : AM_STR)
# define aw_len strlen (a_wkday)
# define am_len strlen (a_month)
# define ap_len strlen (ampm)
#else
# if !HAVE_STRFTIME
const char *const f_wkday = weekday_name[tp->tm_wday];
const char *const f_month = month_name[tp->tm_mon];
const char *const a_wkday = f_wkday;
const char *const a_month = f_month;
const char *const ampm = "AMPM" + 2 * (hour12 > 11);
# define f_wkday (weekday_name[tp->tm_wday])
# define f_month (month_name[tp->tm_mon])
# define a_wkday f_wkday
# define a_month f_month
# define ampm ("AMPM" + 2 * (tp->tm_hour > 11))
size_t aw_len = 3;
size_t am_len = 3;
size_t ap_len = 2;
# endif
#endif
#if defined _NL_CURRENT || !HAVE_STRFTIME
size_t wkday_len = strlen (f_wkday);
size_t month_len = strlen (f_month);
#endif
const char *zone;
size_t zonelen;
size_t i = 0;
char *p = s;
const char *f;
@@ -468,25 +446,27 @@ my_strftime (s, maxsize, format, tp)
zone = (const char *) tp->tm_zone;
#endif
#if HAVE_TZNAME
/* POSIX.1 8.1.1 requires that whenever strftime() is called, the
time zone names contained in the external variable `tzname' shall
be set as if the tzset() function had been called. */
if (ut)
{
if (! (zone && *zone))
zone = "GMT";
}
else
{
/* POSIX.1 8.1.1 requires that whenever strftime() is called, the
time zone names contained in the external variable `tzname' shall
be set as if the tzset() function had been called. */
# if HAVE_TZSET
tzset ();
tzset ();
# endif
if (!(zone && *zone) && tp->tm_isdst >= 0)
zone = tzname[tp->tm_isdst];
}
#endif
if (! zone)
zone = ""; /* POSIX.2 requires the empty string here. */
zonelen = strlen (zone);
if (hour12 > 12)
hour12 -= 12;
else
if (hour12 == 0) hour12 = 12;
if (hour12 == 0)
hour12 = 12;
for (f = format; *f != '\0'; ++f)
{
@@ -552,7 +532,13 @@ my_strftime (s, maxsize, format, tp)
if (bytes == 0)
break;
if (bytes == (size_t) -2 || bytes == (size_t) -1)
if (bytes == (size_t) -2)
{
len += strlen (f + len);
break;
}
if (bytes == (size_t) -1)
{
len++;
break;
@@ -563,6 +549,7 @@ my_strftime (s, maxsize, format, tp)
while (! mbsinit (&mbstate));
cpy (len, f);
f += len - 1;
continue;
}
}
@@ -672,7 +659,7 @@ my_strftime (s, maxsize, format, tp)
to_lowcase = 0;
}
#if defined _NL_CURRENT || !HAVE_STRFTIME
cpy (wkday_len, f_wkday);
cpy (strlen (f_wkday), f_wkday);
break;
#else
goto underlying_strftime;
@@ -698,7 +685,7 @@ my_strftime (s, maxsize, format, tp)
to_lowcase = 0;
}
#if defined _NL_CURRENT || !HAVE_STRFTIME
cpy (month_len, f_month);
cpy (strlen (f_month), f_month);
break;
#else
goto underlying_strftime;
@@ -722,9 +709,7 @@ my_strftime (s, maxsize, format, tp)
subformat:
{
char *old_start = p;
size_t len = my_strftime (NULL, maxsize - i, subfmt, tp);
if (len == 0 && *subfmt)
return 0;
size_t len = my_strftime (NULL, (size_t) -1, subfmt, tp);
add (len, my_strftime (p, maxsize - i, subfmt, tp));
if (to_uppcase)
@@ -751,7 +736,7 @@ my_strftime (s, maxsize, format, tp)
*u++ = format_char;
*u = '\0';
len = strftime (ubuf, sizeof ubuf, ufmt, tp);
if (len == 0)
if (len == 0 && ubuf[0] != '\0')
return 0;
cpy (len, ubuf);
}
@@ -1040,7 +1025,6 @@ my_strftime (s, maxsize, format, tp)
add (1, *p = '\t');
break;
case 'f':
case 'u': /* POSIX.2 extension. */
DO_NUMBER (1, (tp->tm_wday - 1 + 7) % 7 + 1);
@@ -1149,7 +1133,16 @@ my_strftime (s, maxsize, format, tp)
to_uppcase = 0;
to_lowcase = 1;
}
cpy (zonelen, zone);
#if HAVE_TZNAME
/* The tzset() call might have changed the value. */
if (!(zone && *zone) && tp->tm_isdst >= 0)
zone = tzname[tp->tm_isdst];
#endif
if (! zone)
zone = ""; /* POSIX.2 requires the empty string here. */
cpy (strlen (zone), zone);
break;
case 'z': /* GNU extension. */
@@ -1161,34 +1154,39 @@ my_strftime (s, maxsize, format, tp)
#if HAVE_TM_GMTOFF
diff = tp->tm_gmtoff;
#else
struct tm gtm;
struct tm ltm;
time_t lt;
ltm = *tp;
lt = mktime (&ltm);
if (lt == (time_t) -1)
if (ut)
diff = 0;
else
{
/* mktime returns -1 for errors, but -1 is also a
valid time_t value. Check whether an error really
occurred. */
struct tm tm;
localtime_r (&lt, &tm);
struct tm gtm;
struct tm ltm;
time_t lt;
if ((ltm.tm_sec ^ tm.tm_sec)
| (ltm.tm_min ^ tm.tm_min)
| (ltm.tm_hour ^ tm.tm_hour)
| (ltm.tm_mday ^ tm.tm_mday)
| (ltm.tm_mon ^ tm.tm_mon)
| (ltm.tm_year ^ tm.tm_year))
ltm = *tp;
lt = mktime (&ltm);
if (lt == (time_t) -1)
{
/* mktime returns -1 for errors, but -1 is also a
valid time_t value. Check whether an error really
occurred. */
struct tm tm;
if (! my_strftime_localtime_r (&lt, &tm)
|| ((ltm.tm_sec ^ tm.tm_sec)
| (ltm.tm_min ^ tm.tm_min)
| (ltm.tm_hour ^ tm.tm_hour)
| (ltm.tm_mday ^ tm.tm_mday)
| (ltm.tm_mon ^ tm.tm_mon)
| (ltm.tm_year ^ tm.tm_year)))
break;
}
if (! my_strftime_gmtime_r (&lt, &gtm))
break;
diff = tm_diff (&ltm, &gtm);
}
if (! gmtime_r (&lt, &gtm))
break;
diff = tm_diff (&ltm, &gtm);
#endif
if (diff < 0)
@@ -1221,7 +1219,23 @@ my_strftime (s, maxsize, format, tp)
}
}
if (p)
if (p && maxsize != 0)
*p = '\0';
return i;
}
#ifdef emacs
/* For Emacs we have a separate interface which corresponds to the normal
strftime function and does not have the extra information whether the
TP arguments comes from a `gmtime' call or not. */
size_t
emacs_strftime (s, maxsize, format, tp)
char *s;
size_t maxsize;
const char *format;
const struct tm *tp;
{
return my_strftime (s, maxsize, format, tp, 0);
}
#endif

View File

@@ -32,8 +32,7 @@
when given a path that ends in "/" (except for the root directory). */
void
strip_trailing_slashes (path)
char *path;
strip_trailing_slashes (char *path)
{
int last;

2
lib/strncasecmp.c Normal file
View File

@@ -0,0 +1,2 @@
#define LENGTH_LIMIT
#include "strcasecmp.c"

View File

@@ -33,9 +33,7 @@ char *malloc ();
/* Duplicate S, returning an identical malloc'd string. */
char *
strndup (s, n)
const char *s;
size_t n;
strndup (const char *s, size_t n)
{
char *new = malloc (n + 1);

View File

@@ -30,9 +30,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
typedef unsigned chartype;
char *
strstr (phaystack, pneedle)
const char *phaystack;
const char *pneedle;
strstr (const char *phaystack, const char *pneedle)
{
register const unsigned char *haystack, *needle;
register chartype b, c;

View File

@@ -1,4 +1,4 @@
/* Copyright (C) 1991, 1992, 1997 Free Software Foundation, Inc.
/* Copyright (C) 1991, 1992, 1997, 1999 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -57,9 +57,7 @@ extern int errno;
/* Convert NPTR to a double. If ENDPTR is not NULL, a pointer to the
character after the last one used in the number is put in *ENDPTR. */
double
strtod (nptr, endptr)
const char *nptr;
char **endptr;
strtod (const char *nptr, char **endptr)
{
register const char *s;
short int sign;

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);
}

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

@@ -43,9 +43,7 @@
*/
int
strverscmp (s1, s2)
const char *s1;
const char *s2;
strverscmp (const char *s1, const char *s2)
{
const unsigned char *p1 = (const unsigned char *) s1;
const unsigned char *p2 = (const unsigned char *) s2;

View File

@@ -1,5 +1,5 @@
/* userspec.c -- Parse a user and group string.
Copyright (C) 1989, 1990, 1991, 1992, 1997, 1998 Free Software Foundation, Inc.
Copyright (C) 1989-1992, 1997, 1998 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -93,8 +93,7 @@ char *strdup ();
otherwise return 0. */
static int
is_number (str)
const char *str;
is_number (const char *str)
{
for (; *str; str++)
if (!isdigit (*str))
@@ -115,11 +114,8 @@ is_number (str)
Return NULL if successful, a static error message string if not. */
const char *
parse_user_spec (spec_arg, uid, gid, username_arg, groupname_arg)
const char *spec_arg;
uid_t *uid;
gid_t *gid;
char **username_arg, **groupname_arg;
parse_user_spec (const char *spec_arg, uid_t *uid, gid_t *gid,
char **username_arg, char **groupname_arg)
{
static const char *tired = "virtual memory exhausted";
const char *error_msg;

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

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

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

17
lib/version-etc.h Normal file
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,21 +1,52 @@
#ifndef PARAMS
# if defined PROTOTYPES || (defined __STDC__ && __STDC__)
# define PARAMS(Args) Args
# else
# define PARAMS(Args) ()
/* xalloc.h -- malloc with out-of-memory checking
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
the Free Software Foundation; either version 2, or (at your option)
any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#ifndef XALLOC_H_
# define XALLOC_H_
# ifndef PARAMS
# if defined PROTOTYPES || (defined __STDC__ && __STDC__)
# define PARAMS(Args) Args
# else
# define PARAMS(Args) ()
# endif
# endif
#endif
/* Exit value when the requested amount of memory is not available.
The caller may set it to some other value. */
It is initialized to EXIT_FAILURE, but the caller may set it to
some other value. */
extern int xalloc_exit_failure;
/* FIXME: describe */
extern char *const xalloc_msg_memory_exhausted;
/* FIXME: describe */
/* If this pointer is non-zero, run the specified function upon each
allocation failure. It is initialized to zero. */
extern void (*xalloc_fail_func) ();
/* If XALLOC_FAIL_FUNC is undefined or a function that returns, this
message must be non-NULL. It is translated via gettext.
The default value is "Memory exhausted". */
extern char *const xalloc_msg_memory_exhausted;
void *xmalloc PARAMS ((size_t n));
void *xcalloc PARAMS ((size_t n, size_t s));
void *xrealloc PARAMS ((void *p, size_t n));
# define XMALLOC(Type, N_bytes) ((Type *) xmalloc (sizeof (Type) * (N_bytes)))
# define XCALLOC(Type, N_bytes) ((Type *) xcalloc (sizeof (Type), (N_bytes)))
# define XREALLOC(Ptr, Type, N_bytes) \
((Type *) xrealloc ((void *) (Ptr), sizeof (Type) * (N_bytes)))
#endif /* !XALLOC_H_ */

View File

@@ -1,5 +1,5 @@
/* xmalloc.c -- malloc with out of memory checking
Copyright (C) 1990, 91, 92, 93, 94, 95, 96, 97 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
@@ -46,13 +46,6 @@ void free ();
# define EXIT_FAILURE 1
#endif
/* Prototypes for functions defined here. */
#if defined (__STDC__) && __STDC__
void *xmalloc (size_t n);
void *xcalloc (size_t n, size_t s);
void *xrealloc (void *p, size_t n);
#endif
#ifndef HAVE_DONE_WORKING_MALLOC_CHECK
you must run the autoconf test for a properly working malloc -- see malloc.m4
#endif
@@ -65,31 +58,25 @@ you must run the autoconf test for a properly working realloc -- see realloc.m4
The caller may set it to some other value. */
int xalloc_exit_failure = EXIT_FAILURE;
/* FIXME: describe */
char *const xalloc_msg_memory_exhausted = N_("Memory exhausted");
/* FIXME: describe */
/* If non NULL, call this function when memory is exhausted. */
void (*xalloc_fail_func) () = 0;
#if __STDC__ && (HAVE_VPRINTF || HAVE_DOPRNT)
void error (int, int, const char *, ...);
#else
void error ();
#endif
/* If XALLOC_FAIL_FUNC is NULL, or does return, display this message
before exiting when memory is exhausted. Goes through gettext. */
char *const xalloc_msg_memory_exhausted = N_("Memory exhausted");
static void
xalloc_fail ()
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. */
void *
xmalloc (n)
size_t n;
xmalloc (size_t n)
{
void *p;
@@ -104,9 +91,7 @@ xmalloc (n)
If P is NULL, run xmalloc. */
void *
xrealloc (p, n)
void *p;
size_t n;
xrealloc (void *p, size_t n)
{
p = realloc (p, n);
if (p == 0)
@@ -114,13 +99,10 @@ xrealloc (p, n)
return p;
}
#ifdef NOT_USED
/* Allocate memory for N elements of S bytes, with error checking. */
void *
xcalloc (n, s)
size_t n, s;
xcalloc (size_t n, size_t s)
{
void *p;
@@ -129,5 +111,3 @@ xcalloc (n, s)
xalloc_fail ();
return p;
}
#endif /* NOT_USED */

View File

@@ -1,5 +1,8 @@
/* Work around the bug in some systems whereby stat succeeds when
given the zero-length file name argument. The stat from SunOS4.1.4
/* @IGNORE@ -*- c -*- */
/* @IGNORE@ This file is a template from which both stat.c and lstat.c
@IGNORE@ are generated. */
/* Work around the bug in some systems whereby @xstat@ succeeds when
given the zero-length file name argument. The @xstat@ from SunOS4.1.4
has this bug.
Copyright (C) 1997, 1998 Free Software Foundation, Inc.
@@ -21,11 +24,6 @@
#include <config.h>
/* Disable the definition of stat to rpl_stat (from config.h) in this
file. Otherwise, we'd get conflicting prototypes for rpl_stat on
most systems. */
#undef stat
#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>
@@ -33,18 +31,16 @@
extern int errno;
#endif
/* This is a wrapper for stat(2).
/* This is a wrapper for @xstat@(2).
If FILE is the empty string, fail with errno == ENOENT.
Otherwise, return the result of calling the real stat.
Otherwise, return the result of calling the real @xstat@.
This works around the bug in some systems whereby stat succeeds when
given the zero-length file name argument. The stat from SunOS4.1.4
This works around the bug in some systems whereby @xstat@ succeeds when
given the zero-length file name argument. The @xstat@ from SunOS4.1.4
has this bug. */
int
rpl_stat (file, sbuf)
const char *file;
struct stat *sbuf;
rpl_@xstat@ (const char *file, struct stat *sbuf)
{
if (file && *file == 0)
{
@@ -52,5 +48,5 @@ rpl_stat (file, sbuf)
return -1;
}
return stat (file, sbuf);
return @xstat@ (file, sbuf);
}

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,22 +68,22 @@ extern int errno;
? ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1) : (t) 0))
#define TYPE_MAXIMUM(t) (~ (t) 0 - TYPE_MINIMUM (t))
#ifndef ULONG_MAX
# define ULONG_MAX TYPE_MAXIMUM (unsigned long int)
#if defined (STDC_HEADERS) || (!defined (isascii) && !defined (HAVE_ISASCII))
# define IN_CTYPE_DOMAIN(c) 1
#else
# define IN_CTYPE_DOMAIN(c) isascii(c)
#endif
#ifndef LONG_MAX
# define LONG_MAX TYPE_MAXIMUM (long int)
#endif
#define ISSPACE(c) (IN_CTYPE_DOMAIN (c) && isspace (c))
#include "xstrtol.h"
__unsigned long int __strtol ();
__strtol_t __strtol ();
static int
bkm_scale (__unsigned long int *x, int scale_factor)
bkm_scale (__strtol_t *x, int scale_factor)
{
__unsigned long int product = *x * scale_factor;
__strtol_t product = *x * scale_factor;
if (*x != product / scale_factor)
return 1;
*x = product;
@@ -84,7 +91,7 @@ bkm_scale (__unsigned long int *x, int scale_factor)
}
static int
bkm_scale_by_power (__unsigned long int *x, int base, int power)
bkm_scale_by_power (__strtol_t *x, int base, int power)
{
while (power--)
if (bkm_scale (x, base))
@@ -97,16 +104,25 @@ 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 (! TYPE_SIGNED (__strtol_t))
{
const char *q = s;
while (ISSPACE ((unsigned char) *q))
++q;
if (*q == '-')
return LONGINT_INVALID;
}
errno = 0;
tmp = __strtol (s, p, strtol_base);
if (errno != 0)
@@ -115,8 +131,8 @@ __xstrtol (const char *s, char **ptr, int strtol_base,
return LONGINT_INVALID;
/* Let valid_suffixes == NULL mean `allow any suffix'. */
/* FIXME: update all callers except the one in tail.c changing
last parameter NULL to `""'. */
/* FIXME: update all callers except the ones that allow suffixes
after the number, changing last parameter NULL to `""'. */
if (!valid_suffixes)
{
*val = tmp;
@@ -130,7 +146,10 @@ __xstrtol (const char *s, char **ptr, int strtol_base,
int overflow;
if (!strchr (valid_suffixes, **p))
return LONGINT_INVALID_SUFFIX_CHAR;
{
*val = tmp;
return LONGINT_INVALID_SUFFIX_CHAR;
}
if (strchr (valid_suffixes, '0'))
{
@@ -203,6 +222,7 @@ __xstrtol (const char *s, char **ptr, int strtol_base,
break;
default:
*val = tmp;
return LONGINT_INVALID_SUFFIX_CHAR;
break;
}
@@ -234,7 +254,7 @@ main (int argc, char** argv)
for (i=1; i<argc; i++)
{
char *p;
__unsigned long int val;
__strtol_t val;
s_err = __xstrtol (argv[i], &p, 0, &val, "bckmw");
if (s_err == LONGINT_OK)

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