Commit Graph

1530 Commits

Author SHA1 Message Date
Eivind Uggedal
f5f43dbd5b ln: exit non-zero when errors accured 2015-05-08 10:06:58 +01:00
Eivind Uggedal
8f4b2e8689 ln: only check existence of src/to for hardlinks
This allows for creating dangling symlinks with force applied:

    # Before:
    $ ln -sf non-existant target
    ln: stat non-existent: No such file or directory
    $ ls -l target
    ls: lstat target: No such file or directory

    # After:
    $ ln -sf non-existant target
    $ ls -l target
    lrwxrwxrwx    1 eu    users   12 May 08 07:50 target -> non-existent

This also allows creating relative non-dangling symlinks with force applied:

    touch existant; mkdir dir

    # Before
    $ ln -sf ../existant dir
    ln: stat ../existant: No such file or directory
    $ ls -l dir

    # After
    $ ln -sf ../existant dir
    $ ls -l dir
    lrwxrwxrwx    1 eu    users   11 May 08 07:53 existant -> ../existant

The check for whether each src and to pairs are on the same device with the
same inode are only needed for hardlinks so that a forcefull link does
not remove the underlying file:

    touch f; mkdir dir

    # Before:
    $ ln -f f f dir
    ln: f and f are the same file
    $ ls -i f dir/f
    3670611 dir/f
    3670611 f

    # After:
    $ ln -f f f dir
    ln: f and f are the same file
    $ ls -i f dir/f
    4332236 dir/f
    4332236 f
2015-05-08 10:06:58 +01:00
Hiltjo Posthuma
3f01706837 libutil/getlines: use known line length
also style: linelen = length of getline(), this was slightly confusing.
2015-05-07 18:18:36 +01:00
Hiltjo Posthuma
adf9f47525 Revert "libutil/getlines: use known line length"
This reverts commit c69a70ddfd5c2b1514d9efd1c7a0fcbee5b0d2e7.
2015-05-07 18:18:36 +01:00
Hiltjo Posthuma
bd67e7d92d libutil/getlines: use known line length 2015-05-07 18:18:35 +01:00
Hiltjo Posthuma
72250324b1 sort: reuse buffer in columns()
speeds up sorting for huge input aswell.
2015-05-07 18:18:35 +01:00
Wolfgang Corcoran-Mathe
0b85532616 join manpage: Fix spelling
'-eth' might sound good to a native English speaker but will
probably confuse everyone else.
2015-05-05 10:53:42 +01:00
Wolfgang Corcoran-Mathe
dcfa94cdbd join: Add LICENSE header 2015-05-05 10:53:41 +01:00
Evan Gates
72d6553b12 include stdint.h for SIZE_MAX 2015-04-29 22:25:03 +01:00
sin
50c8785497 kill: Include strings.h for strcasecmp() 2015-04-29 16:42:49 +01:00
sin
63d863ae53 du: Use off_t instead of uintmax_t 2015-04-29 16:42:49 +01:00
sin
2deb40290e Use off_t in humansize() as it is more descriptive and applicable 2015-04-29 16:42:49 +01:00
sin
42326f7684 Include stdint.h in util.h for uintmax_t 2015-04-28 11:36:58 +01:00
Dionysis Grigoropoulos
a04da01160 du: Use uintmax_t instead of size_t
Fixes wraparound for files greater than 4G on 32-bit systems.
2015-04-28 11:36:58 +01:00
Dionysis Grigoropoulos
2d6cde1862 humansize: Use uintmax_t for size
du(1) breaks on 32-bit size_t for files greater than 4G.
2015-04-28 11:36:58 +01:00
sin
68fb6754ba which: Add LICENSE header 2015-04-27 19:33:57 +01:00
FRIGN
0b76449414 Add flag support to printf(1)
We skipped flags before, so no real bug, but it's trivial to add
now, so there's no reason not to do it.
2015-04-27 19:33:57 +01:00
FRIGN
b333176b8c Refactor and audit which(1)
Use the *at functions instead of building paths manually. We do
still have path-building in recurse() and other areas, but the
long-term goal is to rid most interfaces of that for practical
and security reasons.
In this case, it's more or less trivial.

Also, refactor the manpage to be more consistent with the others.

BUGFIX: Return exit status 3 on error.
2015-04-27 19:33:57 +01:00
Michael Forney
035e14c516 tr: Fix -c option when translating 2015-04-27 17:16:37 +01:00
Hiltjo Posthuma
e34bcca3e3 join: remove argv0, it is in arg.h 2015-04-27 16:58:42 +01:00
Hiltjo Posthuma
58cb564bbd add which 2015-04-27 16:58:42 +01:00
FRIGN
5595af5742 Convert humansize() to accept a size_t instead of a double
General convention is to use size_t to store sizes of all kinds.
Internally, the function uses double anyway, but at least this
doesn't clobber up the API any more and there's a chance in the
future to make this function a bit cleaner and not use this dirty
static buffer hack any more.
2015-04-25 11:43:14 +01:00
FRIGN
9016d288f1 Do not use arg.h for tools which take no flags
We've already seen the issue with echo(1): Before we changed it to
ignore "--", the command

$ echo --

did not work as expected. Given POSIX mandated this and makes most
sense, in the interest of consistency the other tools need to be
streamlined for that as well.
Looking at yes(1) for instance, there's no reason to skip "--" in
the argument list.
We do not have long options like GNU does and there's no reason to
tinker with that here.

The majority of tools changed are ones taking lists of arguments
or only a single one. There's no reason why dirname should "fail"
on "--". In the end, this is a valid name.

The practice of hand-holding the user was established with the GNU
coreutils. "--help" and "--version" long-options are a disgrace to
what could've been done properly with manpages.
2015-04-25 11:43:14 +01:00
Hiltjo Posthuma
e73f58937d du: staticize du 2015-04-25 11:43:14 +01:00
FRIGN
5a52154a47 tar: Fix remove(3)-error-message 2015-04-24 10:09:26 +01:00
sin
fbd39af1fa tar: Minor style fixes 2015-04-24 10:09:25 +01:00
sin
ac694e6c4a tar: Add routine to test if the tar archive is "legit" 2015-04-23 16:34:12 +01:00
sin
74f680948e tar: Rename field to better match spec 2015-04-23 16:34:12 +01:00
sin
624bf64ac5 tar: Use more conventional name for iterator 2015-04-23 16:34:12 +01:00
sin
76eb6bdf42 tar: Match type like everywhere else 2015-04-23 15:32:00 +01:00
sin
d1e19e972a tar: No need to zero-fill variables with global storage 2015-04-23 15:32:00 +01:00
sin
ab267a87eb tar: Use raw I/O instead of standard file streams
As part of refactoring tar to add support for compression through
gzip/bzip2, it makes sense to avoid intermixing file stream I/O with
raw I/O.
2015-04-23 15:32:00 +01:00
sin
fb1595a69c tar: Use remove() instead of unlink() so we can work on directories too 2015-04-23 15:32:00 +01:00
sin
3419f94d83 tar: Staticise symbols 2015-04-23 12:38:53 +01:00
sin
ce4a10abe7 tar: Apply mtime at the end otherwise it gets reverted
Consider the following scenario:

1) create a/
2) apply mtime to a/
3) create a/b # reverts mtime on a

TODO: utimes() does not work on symlinks.
2015-04-23 12:37:39 +01:00
sin
aab2e273bd tar: Add skipblk() and simplify code 2015-04-23 12:37:38 +01:00
sin
201e71be2b tar: Skip over git's global pax header crap 2015-04-23 00:05:23 +01:00
sin
7a0d9fb3ea tar: Skip over data before processing the next entry
When we selectively process entries from the archive, ensure that
we jump over the data section of each uninteresting entry before going
on to process the next entry.  Not doing so, leaves the file stream
pointer in the wrong place.
2015-04-22 23:24:39 +01:00
sin
2fc73e410c xargs: Don't print trailing spaces when -t is set 2015-04-21 18:00:48 +01:00
sin
10b57e8a3d Actually print <space> to stream in putword() too 2015-04-21 18:00:47 +01:00
sin
c914a2feca Update putword() to accept a FILE * 2015-04-21 18:00:47 +01:00
sin
504855ff96 expr: Don't interpret any arguments
expr -1 '<' 1 failed previously.

There is no need to have usage at all, any errors will be flagged
up as necessary further down.
2015-04-21 17:09:20 +01:00
sin
0925bf95ac tar: Cast to proper type, no functional change 2015-04-21 16:20:31 +01:00
sin
22c0ae67a4 tar: Don't error out if we can't pull pw/gr entries 2015-04-21 16:18:46 +01:00
sin
e6c532a47a tar: Briefly update manpage and usage for the latest changes 2015-04-21 15:43:52 +01:00
sin
258d0793ac tar: Allow extracting only a given list of files
tar -xf foo.tar a b c
2015-04-21 15:43:52 +01:00
sin
fde9e29d05 tar: Don't assume that name, linkname and prefix are null-terminated 2015-04-21 15:43:52 +01:00
sin
f1261b57d9 Add support to tar multiple files in a single run 2015-04-21 15:43:52 +01:00
sin
542f645bc2 Convert chown() failure to a warning in tar(1)
This particular change does not have any immediate shortcomings.
We still print a warning to alert the user.

Exiting on a chown() failure caused problems when untarring
inside a restricted user namespace on Linux where the uid/gid
mappings were limited.
2015-04-21 09:17:26 +01:00
Hiltjo Posthuma
ce145a39a7 expr: fix, first parse then enfshut 2015-04-21 09:11:36 +01:00