Paul Eggert [Fri, 3 Sep 2004 01:35:33 +0000 (01:35 +0000)]
Output correct errno-related diagnostic on "paste" I/O errors.
(write_error, xputchar): New functions.
(paste_parallel): Use correct errno value after input error.
(paste_parallel, paste_serial): Report errno value after output error.
Paul Eggert [Thu, 2 Sep 2004 23:56:42 +0000 (23:56 +0000)]
(dummy_closed, CLOSED, dummy_endlist, ENDLIST): Remove;
it's not portable C to assume FILE is a complete type.
(paste_parallel): Use null instead of ENDLIST, and an explicit
boolean instead of CLOSED.
Paul Eggert [Tue, 24 Aug 2004 07:38:49 +0000 (07:38 +0000)]
(add_tab_stop): Renamed from add_tabstop. All uses changed.
(parse_tab_stop): Renamed from parse_tabstop. All uses changed.
(validate_tab_stop): Renamed from validate_tabstop. All uses changed.
(next_file, main): Check fclose against 0, not EOF.
(unexpand): Remove unnecessary casts.
Add another loop nesting level, for lines, so that per-line variables
are initialized cleanly.
Revamp tab checking. Check for write error immediately, rather
than just once at the end of the program.
(TAB_STOP_SENTINEL): Remove.
(tab_size): Now size_t, not uintmax_t, since we need to store
the sequences of blanks.
(max_column_width): New var.
(usage): Say "blank" where POSIX requires this.
(add_tab_stop): Calculate maximum column width.
(unexpand): Store the pending blanks, instead of merely counting them.
Follow POSIX's rules about -a requiring two blanks before a tab stop.
Get rid of internal label and goto.
Paul Eggert [Tue, 24 Aug 2004 07:38:04 +0000 (07:38 +0000)]
Revamp to resemble the new unexpand.c better.
(usage): -i does not convert tabs after non-tabs.
(add_tab_stop): Renamed from add_tabstop. All uses changed.
(parse_tab_stop): Renamed from parse_tabstop. All uses changed.
(validate_tab_stop): Renamed from validate_tabstop. All uses changed.
(next_file, main): Check fclose against 0, not EOF.
(expand): Remove unnecessary casts.
Add another loop nesting level, for lines, so that per-line variables
are initialized cleanly.
Revamp tab checking. Check for write error immediately, rather
than just once at the end of the program.
Paul Eggert [Tue, 24 Aug 2004 07:37:28 +0000 (07:37 +0000)]
Standardize on "tab stop" (the POSIX usage)
rather than "tabstop".
(unexpand invocation): Use "blank" rather than "space" when
POSIX requires "blank". Define "blank". Initial blanks are
converted even if there's just one. For -a, convert two or
more blanks only if they occur just before a tab stop.
Paul Eggert [Thu, 19 Aug 2004 20:05:52 +0000 (20:05 +0000)]
(chown invocation): Fix synopsis:
group must always be preceded by separator.
"chown : file" and "chown '' file" don't change the owner or group.
Update the explanation of what happens to the set-user-ID or
set-group-ID bits, e.g., they sometimes are not cleared if they
denote mandatory locking. Change "find"-oriented examples to use
chown -h.
Paul Eggert [Thu, 19 Aug 2004 20:04:42 +0000 (20:04 +0000)]
Don't use <alloca.h>, so that we don't use alloca on
strings on unbounded length. alloca's performance benefits aren't
that important here.
(V_STRDUP): Remove.
(parse_with_separator): New function, with most of the internals
of the old parse_user_spec. Allow user to omit both user and group,
for compatibility with FreeBSD.
Clone only the user name, not the entire spec.
Do not set *uid, *gid unless entirely successful.
Avoid memory leak in some failing cases.
Fix regression for USER.GROUP reported by Dmitry V. Levin in
<http://lists.gnu.org/archive/html/bug-coreutils/2004-08/msg00102.html>
(parse_user_spec): Rewrite to use parse_with_separator.
Paul Eggert [Thu, 19 Aug 2004 20:02:46 +0000 (20:02 +0000)]
(parse_group): Return gid_t rather than storing it
through a pointer. Treat "chgrp '' file" as a no-op change,
as FreeBSD does.
(main): Set chopt.group_name to NULL if the group is the empty
string.
Paul Eggert [Wed, 11 Aug 2004 22:24:14 +0000 (22:24 +0000)]
Include <inttypes.h> and <stdint.h> if available.
(union fooround): Use uintmax_t, not long int.
The rest is a merge from libc:
[defined _LIBC]: Include <shlib-compat.h>.
(_obstack) [defined _LIBC]: Remove after 2.3.4.
Paul Eggert [Wed, 11 Aug 2004 17:19:25 +0000 (17:19 +0000)]
(copy_internal): When preserving links, unlink
a destination with link count greater than one. This is so
that commands like "cp -a" don't get confused when copying into
a destination that already contains many hard links.
Paul Eggert [Tue, 10 Aug 2004 22:08:09 +0000 (22:08 +0000)]
(die, xfopen, mergefps, first_same_file, merge):
A null file arg means standard output.
(main): "-o -" means to write to a file named "-",
not to standard output.
Paul Eggert [Tue, 10 Aug 2004 22:07:31 +0000 (22:07 +0000)]
(Common options): Clarify that "-" means
stdin/stdout only when it is an operand, not when it is an
option-argument.
(shred invocation): "shred -- -" is equivalent to "shred -",
not to "shred ./-".
(tee invocation): "tee -" means to copy (again) to stdout.
Paul Eggert [Mon, 9 Aug 2004 23:34:15 +0000 (23:34 +0000)]
(diropen): New function.
(fts_open, fts_read, fts_children, fts_safe_changedir):
Use it, so that the code works even if the directory
is writeable but not readable.
Paul Eggert [Wed, 4 Aug 2004 22:27:12 +0000 (22:27 +0000)]
Include copyright notice.
(gl_MACROS): Use the _ONCE variants when appropriate.
Include sys/param.h before testing for sys/sysctl.h and sys/mount.h;
needed for OpenBSD 3.4.
Paul Eggert [Wed, 4 Aug 2004 22:26:23 +0000 (22:26 +0000)]
(PRIdMAX, PRIoMAX, PRIuMAX, PRIxMAX):
Define to a concatenation of string literals, not to an expression;
needed for concatenation contexts.
(INTMAX_MAX, INTMAX_MIN): New macros.