1) Fix mkdir -p to exit with the proper exit status and issue an error
message if it was unable to create all of the specified directories
and they did not previously exist. POSIX says:
The mkdir utility shall exit with one of the following values:
0 All the specified directories were created successfully or the
-p option was specified and all the specified directories now
exist.
E.g.
% mkdir -p /var/mkdir
mkdir: /var/mkdir: Permission denied
% touch /tmp/file
% mkdir -p /tmp/file/dir
mkdir: /tmp/file: Not a directory
Previously the above examples would exit with a zero exit status
and no error message. Something like the following run as a
normal user will still not produce an error:
% id
uid=629(mpp) gid=629(mpp)....
% mkdir -p /usr/local/etc
% ls -ld /usr/local/etc
drwxr-xr-x 4 bin bin 512 Dec 26 14:55 /usr/local/etc/
2) Cleaned up the mode handling to be more efficient when multiple
directories are being created.
3) Fixed a problem where directories could be created with the wrong mode
if the the -p option was specified and the build() routine returned
and error. It would leave the umask set incorrectly at this point.
4) Removed an unused variable.
Closes PR# 2304.
- Use MAP_FAILED instead of the constant -1 to indicate
failure (required by POSIX).
- Removed flag arguments of '0' (required by POSIX).
- Fixed code which expected an error return of 0.
- Fixed code which thought any address with the high bit set
was an error.
- Check for failure where no checks were present.
Discussed with: bde
This will make a number of things easier in the future, as well as (finally!)
avoiding the Id-smashing problem which has plagued developers for so long.
Boy, I'm glad we're not using sup anymore. This update would have been
insane otherwise.
while remaining (becoming :) compatible with other popular shells.
Specifically these changes include:
1) Implement 'trap -l' to get a list of valid signals names. This
is useful if you wanted to do something like reset all signal
handlers to there defaults values, in which case something like
this will do the trick.
trap `trap -l`
2) Reformat the output of 'trap' so it can be saved and later eval'd
to restore the saved settings.
3) Allow the use of signal names as well as signal numbers.
4) Fix trap handling of SIGCHLD so that commands like the following
(albeit, contrived) won't cause sh(1) to recurse ad infinitum.
trap uname 0 20
5) Make variables static that are used only in trap.c.
6) Minor 'style(9) police' mods.
now handles the getpwd() init problem the same way as bash
and ksh do. Also while I was in here, I cleaned up the format
a little, removed some unnnecessary #if SYMLINKS cruft, and
changed the pwd builtin to use getcwd(3) as Joerg suggested.
getopts should now work as expected. This fix was in the NetBSD
code that I was merging from but missed getting into FreeBSD's
version because of 'drain bamage' on my part.
Submitted by: NetBSD, joerg
isofs while the df command itself used the name iso9660fs or
cdfs. Both of these were inconsistent with the name cd9660 which
is used by the mount command. I modified df to recognize all of
the names cd9660, cdfs, isofs, and iso9660fs, and take them all
to refer to the same thing. Naturally I added a note of this
behaviour in the manual page too.
Submitted-By: Jukka Ukkonen <jau@jau.csc.fi>
and he's right ... I forgot about this floating point stuff you can
use in user-land :-)
Increase precision of duration to microseconds.
No heuristics to avoid overflow in calculation needed - just depend
on DBL_MAX being a bit larger than LONG_MAX.
Use double instead of `struct timeval' in dd.h so that everything
doesn't have to include <sys/time.h>.
Fixed style bugs in recent and old FreeBSD changes.
Reviewed by: phk
Submitted by: bde
This patch causes too many side effects, one of which bites hard is
when interrupting a 'make fetch' in the ports tree (PR#1990).
This whole area is a real can of worms....
This most definately should go into 2.2
Reviewed by: steve, bde
so that simple regresssion tests based on `cmp' work. mkdep still
doesn't work right for these tools. They should probably be in
separate directories.
Sorted dependencies.
the full argument vector.
I've bumped into a few things that expected this switch to be present,
the most recent was the snmp package in ports. I'm not 100% sure of the
origins of this, but Linux has it, so does the "BSD-compatable" version
of ps on our SVR4 systems (so I assume SunOS has it too).
the 4.4 lite 2 tape as well. There are now only two diffs between
NetBSD's cat and FreeBSD's cat:
getopt return value is -1 on NetBSD and EOF on FreeBSD.
NetBSD has added setlocale calls before anything else.
face of aliases. Note, bash doesn't do aliases while running scripts, but
"real" ksh does..
Also:
Reduce redundant .Nm macros in (unused) bltin/echo.1
nuke error2, it's hardly used.
More -Wall cleanups
dont do certain history operations if NO_HISTORY defined
handle quad_t's from resource limits
Submitted by: Steve Price <sprice@hiwaay.net> (minor tweaks by me)
- don't put \n on error() calls, error adds it already.
- don't prepend "ulimit" on error() calls in miscbltin.c.
- getopt typo on ulimit -p -> -u conversion
- get/setrlimit() calls were not being error checked
ulimit formatting cleanup from me, use same wording as bash on Bruce's
suggestion. Add ulimit arg to output on Joerg's suggestion.
merge of parallel duplicate work by Steve Price and myself. :-]
There are some changes to the build that are my fault... mkinit.c was
trying (poorly) to duplicate some of the work that make(1) is designed to
do. The Makefile hackery is my fault too, the depend list was incomplete
because of some explicit OBJS+= entries, so mkdep wasn't picking up their
source file #includes.
This closes a pile of /bin/sh PR's, but not all of them..
Submitted by: Steve Price <steve@bonsai.hiwaay.net>, peter
cat command appeared in Version 1 AT&T UNIX, not Version 6
Apparently the cat man page was the first written man page
Obtained from: A Quarter Century of UNIX, Peter H. Salus
[BUGS]
fix a typo
Requested by: joerg
(Note, this is mostly going to be conflicts, which is expected. Our entire
sh source has a mainline, so this should not change anything except for
a few new files appearing. I dont think they are a problem)
all flag variables initialized with zero
respond `Y' is equal to `y'
update usage string
prompt only if source exist
ignore -i option if file descriptor stdin not refers to a valid
terminal type device
didn't correctly start background jobs anymore. Strange that nobody
was complaining...
Add a dummy target for `builtins' in the Makefile, to prevent it
from attempting to build this file by compiling builtins.c. :-/
This fixes PR943.
ffs/ffs_vfsops.c:
ffs_statfs() multiplied by (100 - minfree) as part of calculating the
minfree percentage (complemented in 100%), so with the standard minfree
of 8, it was broken for file systems of size >= 1TB/92 = 11GB. Use the
standard freespace() macro instead. This also fixes a rounding bug (the
"Avail" count was sometimes 1 too small).
ffs/* (not fixed):
The freespace() macro multiplies by minfree, so with the standard
minfree of 8, it is broken for file systems of size >= 1TB/8 = 128GB.
This bug is more serious since it affects block allocation.
ffs/ffs_alloc.c (not fixed):
Ordinary users are sometimes allowed to allocate 1 (partial) block
too many so that the "Avail" count goes negative. E.g., if there is
1 fragment available and the file is fairly large, one more full
block is allocated.
df/df.c:
ufs_df() used/uses essentially the same code as ffs_statfs(), so it
had/has the same bugs.
ufs_df() gratuitously replaced "Avail" counts of < 0 by 0, so it
gave different results for non-mounted file systems in this case.
. mention the need for procfs
. make it clear that default sorting is first by ctty, then by PID
Submitted by: schweikh@ito.uni-stuttgart.de (Jens Schweikhardt)
list the processes belonging to a particular user without having to use
`-u' and grepping for the username. Basically you can now get a short
`ps -x' like list (with more space for the command) for other users.
traditional behaviour, and it violates Posix.2.
Fixes PR # bin/880: /bin/sh incorrectly parse...
Fixes also an earlier problem report about the shell not evaluating
loops correctly. (Not files via GNATS.)
Submitted by: nnd@itfs.nsk.su (Nickolay N. Dudorov)
This means that a script containing:
echo 1
set -v
echo 2
will now produce output, like it does on SYSV machines and other 'proper'
/bin/sh implementations..
This is done by a slight restructure of the input processor allowing it to
read chunks from the file at a time, but process the data by line from the
chunk.
Obtained from: Christos Zoulas for NetBSD. <christos@deshaw.com>
o fix brokeness for 1>&5 redirection, where `5' was an invalid file
descriptor, but no error message has been generated
o fix brokeness for redirect to/from myself case
command and badly needed in sh(1) for everybody who wants to modify
the system-wide limits from inside /etc/rc.
The options are similar to other system's implemantations of this
command, with the FreeBSD additions for -m (memoryuse) and -p (max
processes) that are not available on other systems.
`mv foo/ ../..' to `mv foo/ ../../foo/', not to `mv foo/ ../../'. The
latter caused a panic. Before the trailing slash changes in the kernel,
the trailing slashes caused the rename() for this mv to fail earlier, so
there was no panic in 2.0.
Fixes part of PR 760.
sh -c [-aCefinuvx] command_string [ command_name [argument ...] ] 1
4.56.3 Options
-c Read commands from the command_string operand. Set the
value of special parameter 0 (see 3.5.2) from the value of
the command_name operand and the positional parameters
($1, $2, etc.) in sequence from the remaining argument
operands.
Pointed out by: Kaleb Keithly (kaleb@x.org)
allow more than two tty characters.
David Greenman pointed out that when a process that had been revoked from
it's controlling tty, the "-" sign was detached from any two-character
names.
/usr/sbin/sendmail -f <> dest
rather than
/usr/sbin/sendmail -f dest.
Submitted by: Michael Butler <imb@scgt.oz.au>
Obtained from: Eric Allman <eric@cs.berkeley.edu>
This gives us more room to breath with tty names, especially with drivers
that support large numbers of ports.. eg: specialix and digiboard.
This does not actually change the current tty names, it just allows room
for reporting more characters if the drivers use them.
When comparing my recent parser change against the ash in 1.1.5.1, i
found that a couple of other problems in the same area has been fixed
there, but not in 2.2. Semicolons and EOF do also delimit words...
The && and || tokens do also terminate a command, not only the
newline.
While i was at it, disabled trace code by default, it served no good
purpose since it required the use of a debugger anyway to be turned
on. Instead, placed a hint in the Makefile on how to turn it on.
This makes the shell ~ 10 % faster and ~ 4 KB smaller. :)
Pointed out by: jan@physik.TU-Berlin.DE (Jan Riedinger)
oo
Turns out, it's pretty important if you use PAX for backup. In the man
page for PAX, there is an error (OK, we could call it a "potentially
catastrophic incompleteness"). It reads:
> The command:
>
> pax -r -v -f filename
>
> gives the verbose table of contents for an archive stored in filename.
Yup, it does do that. With a side effect: it also _replaces_ all the
files that come in from the archive. As is my custom, I did my
backup-validation real soon after the backup was written. Precisely
because I've seen the same sort of thing happen on other systems. So all
that file-restoring didn't do a lot of damage. Probably helped my
fragmentation somewhat (aha, an online defragger?) It did confuse one
hapless user, who lost an email message he _knew_ he hadn't deleted.
Apparently the system restored the file as of just before that critical
message came in.
The correct entry should read:
> The command:
>
> pax -v -f filename
>
> gives the verbose table of contents for an archive stored in filename.
Submitted by: John Beckett <jbeckett@southern.edu> via the BSDI mailing list
comparisions have been made as string comparisions, even in cases
where both operands clearly qualified as integers.
The fix is to make the parser properly analyzing whether an operand is
a valid integer or not.
stream, such as a rsh or vi pipeline.
The error message is:
stty: TIOCGETD: Operation not supported
It's immediately obvious to the knowledgable hacker type, but not
exactly comforting to the user who's not native to unix. It's
especially confusing if there's a stty command in their .cshrc and
it's showing up on rsh output.
(Fixes PR #bin/573)
Submitted by: peter@haywire.dialix.com (Peter Wemm)
cpio/copyout.c:
Don't output a file if the major, minor or totality of its rdev would be
truncated. Print a message about the skipped files to stderr but don't
report the error in the exit status. cpio's abysmal error handling doesn't
allow continuing after an error, and the rdev checks had to be misplaced
to avoid the problem of returning an error code from routines that return
void.
pax/pax.h:
Use the system macros for major(), minor() and makedev().
pax already checks _all_ output conversions for overflow. This has the
undesirable effect that failure to convert relatively useless fields
such as st_dev for regular files causes files not to be output. pax
doesn't report exactly which fields couldn't be converted.
tar/create.c:
Don't output a file if the major or minor its rdev would be truncated.
Print a message about the skipped files to stderr and report the error
in the exit status.
tar/tar.c:
For not immediately fatal errors, exit with status 1, not the error count
(mod 256).
All:
Minor numbers are limited to 21 bits in pax's ustar format and to 18
bits in archives created by gnu tar (gnu tar wastes 3 bits for padding).
pax's and cpio's ustar format is incompatible with gnu tar's ustar
format for other reasons (see cpio/README).
documented and is incompatible with gnu cp. It has very few good effects
(it recovers some disk space) and many bad ones:
- special files are unlinked after certain errors.
- the data may not be recoverable if the source is a special file or fifo.
- unlinking destroys the target attributes as well as the target data.
- unlinking doesn't actually remove the target data if the target is multiply
linked.
There is a bug in sh: the built in command "fc -l" generates
a core dump (*NULL in not_fcnumber).
According to the sh manual page (fc -l [-nr] [first [last]]), fc -l
is a correct sequence (in that case, values are defaulted to -16 and -1)
but fails when first is not given.
and `rtsflow' are the components of `crtscts'. `dtrflow' and `dsrflow' are
new and not yet supported. `dtrflow' may be useful for Cyclades serial
careds, which have h/w support for it and no h/w support for `rtsflow'.
print.c:
Report NTTYDISC in case the line is in this obsolescent state.