Sami Kerola [Sun, 29 Mar 2020 13:52:19 +0000 (14:52 +0100)]
more: fix moving backwards so that it can reach begining of the file
Moving backwards has worked fine until reaching start of file. At that
point more printout had one line too much in output causing more seemingly
never to be able to reach the start. That is now fixed, with clean ups to
skip_backwards() making it less confusing.
Sami Kerola [Sat, 28 Mar 2020 15:09:00 +0000 (15:09 +0000)]
more: use getopt_long() to parse options
This commit also includes fix to how initial skip lines and search are
instructed in the code. Earlier version was pretty close impossible to make
work with getopt_long() and had minor flaw - if both initial skip lines and
search were defined at the same time the skipping did not happen. That is
now corrected.
Sami Kerola [Sat, 28 Mar 2020 10:17:46 +0000 (10:17 +0000)]
more: fix SIGSTOP and SIGCONT handling
When suspending only the more process. Sending signal to process group
makes signal destination unnecessarily vague. After the suspend is over
SIGCONT is expected, and it needs to ensure output terminal settings are
what more needs.
Sami Kerola [Sat, 28 Mar 2020 10:00:08 +0000 (10:00 +0000)]
more: make execute() more robust and timely
The wait() is now a little more robust by being more tolerate rogue SIGCHLDs
and unblocked signals. The repeated fork() and sleep() is removed, if first
try does not success give up without delay to provide user timely feedback.
Sami Kerola [Sat, 21 Mar 2020 17:45:47 +0000 (17:45 +0000)]
more: target all standard streams when calling fflush()
If streams need to be flushed do not try to be clever, just flush all of
them. That lead to finding unnecessary print out in run_shell() that is
removed in this commit.
Sami Kerola [Sat, 21 Mar 2020 15:59:04 +0000 (15:59 +0000)]
more: avoid defining special characters locally
The sys/ttydefaults.h can be used for CTRL() and rubout that is CERASE. For
alarm it's best to keep things simple and call printf() alarm modifier.
QUIT was not in use, so it is just deleted.
Sami Kerola [Sat, 21 Mar 2020 09:30:57 +0000 (09:30 +0000)]
more: use single exit path to ensure resource freeing is unified
And be a little more complete all the allocations that can be released are,
but there is a small catch. As mentioned in ncurses FAQ some leaks are
intentional, and that's the way they are.
Reference: https://invisible-island.net/ncurses/ncurses.faq.html#config_leaks
Reference: http://man7.org/linux/man-pages/man3/_nc_free_tinfo.3x.html Signed-off-by: Sami Kerola <kerolasa@iki.fi>
libmount: Avoid triggering autofs in lookup_umount_fs_by_statfs
Currently, umount /foo results in a statfs("/foo") call, which triggers
autofs. This can create another mountpoint on /foo, which is then unmounted
later instead of the actual /foo at the time umount was called.
This is especially an issue for umount -R /bar, which just fails with
-EBUSY as the accidental mountpoint is never accounted for and so it tries
to umount /bar before /bar/someautofs.
Replace the direct statfs call with open(path, O_PATH) + fstatfs, which sees
the autofs mount directly, without triggering it.
Aurelien LAJOIE [Sat, 28 Mar 2020 22:33:41 +0000 (23:33 +0100)]
cal: correctly set the week width
There is seven values but only 6 spaces between them, that why the -1
The value is always used with a minus one, just set it correctly instead
of always fix when used
Aurelien LAJOIE [Thu, 26 Mar 2020 14:38:27 +0000 (15:38 +0100)]
libuuid: improve uuid_unparse() performance
There is 2 improvements:
* remove useless uuid_unpack,
* directly print the hexa format from memory without using printf
we can do this as the bytes order is the network byte order
https://tools.ietf.org/html/rfc4122#section-4.1.2
even the spatially unique node identifier(the last 6 bytes)
The improvement is important, some results for 1000000 uuid_unparse calls:
Little Endian Ubuntu:
before took 382623 us
after took 36740 us
Big Endian OpenBSD:
before took 3138172 us
after took 180116 us
Karel Zak [Tue, 31 Mar 2020 11:17:20 +0000 (13:17 +0200)]
Merge branch 'more' of https://github.com/kerolasa/util-linux
* 'more' of https://github.com/kerolasa/util-linux:
more: refactor and clarify code
more: add display_file() to show files and stdin
more: simplify initterm()
more: move currently open file to control structure
more: move code blocks from more_key_command() to functions
more: move runtime usage output to a function
more: restructure print_buf() if-else with continue
more: tell in run time help what the 'v' will execute as editor
more: drop setuid permissions before executing anything
more: do not allocate shell command buffer from stack
more: replace siglongjmp() and signal() calls with signalfd()
Karel Zak [Tue, 31 Mar 2020 11:05:53 +0000 (13:05 +0200)]
Merge branch '2020wk12' of https://github.com/kerolasa/util-linux
* '2020wk12' of https://github.com/kerolasa/util-linux:
lslogins: use lastlog as wtmp fallback
login: avoid lseek() with pread() and pwrite()
libuuid: ensure variable is initialized [cppcheck]
ctrlaltdel: display error message indicated by errno
Sami Kerola [Sat, 29 Feb 2020 08:51:53 +0000 (08:51 +0000)]
libuuid: ensure variable is initialized [cppcheck]
This fix has a little bit of a feel of making a static analyzer to be happy
instead of real progress. If I read the preprocessor directives correctly
it should be impossible hit uninitialized variable. Then again if a bug
creeps into these ifdef's in that case it is nice to have robust code that
doesn't immediately go wrong.
libuuid/src/gen_uuid.c:200:20: error: Uninitialized variable: a [uninitvar]
memcpy(node_id, a, 6);
^
libuuid/src/gen_uuid.c:197:8: error: Uninitialized variable: a [uninitvar]
if (!a[0] && !a[1] && !a[2] && !a[3] && !a[4] && !a[5])
^
Sami Kerola [Wed, 18 Mar 2020 20:13:16 +0000 (20:13 +0000)]
more: refactor and clarify code
Use the backspace provided dy terminfo, and if that is not possible use
fallback.
Simplify entering and exiting standard mode. Now when these std_enter and
std_exit variables are initialized correctly they do not need to be checked
quite as complex way as earlier.
Do not call prepare_line_buffer() unnecessarily. The line buffer needs only
to be prepared only at times of more(1) initialization and when terminal
size changes.
Add a function to print various separators, that is better than static
strings.
Sami Kerola [Wed, 18 Mar 2020 20:13:10 +0000 (20:13 +0000)]
more: simplify initterm()
Return rather than use long 'else' statement. Also unwind some overly
compact variable set and test code, that can be best observed how
underlining settings are now handled.
Sami Kerola [Wed, 18 Mar 2020 20:13:08 +0000 (20:13 +0000)]
more: move currently open file to control structure
Currently open file is needed a bit here and there. Move it to control
structure to avoid passing it around. This also makes fixing memory leak at
more_exit() very easy.
Sami Kerola [Wed, 18 Mar 2020 20:13:02 +0000 (20:13 +0000)]
more: move runtime usage output to a function
This change also removes a ghost prompt that was left in place when printing
help. When looking old commits the output fluke has been around at least
since util-linux v2.2.
Sami Kerola [Wed, 18 Mar 2020 20:13:00 +0000 (20:13 +0000)]
more: restructure print_buf() if-else with continue
Replacing long 'else' with 'continue' allows dropping one level of
indentation. Main aim is to improve code readability by reducing
complexity one needs to keep track while looking the code.
Sami Kerola [Wed, 18 Mar 2020 20:12:54 +0000 (20:12 +0000)]
more: do not allocate shell command buffer from stack
This change has three possitive effects: Avoid expansion code when it is
not needed. Stop wasting memory from stack for something rarely needed.
When command buffer is needed stop limiting it's size artificially.
Sami Kerola [Wed, 18 Mar 2020 20:12:51 +0000 (20:12 +0000)]
more: replace siglongjmp() and signal() calls with signalfd()
From man siglongjmp(3) 'longjmp() and siglongjmp() make programs hard to
understand and maintain. If possible, an alternative should be used.' That
manual page remark summarizes quite well why more(1) needs to move away from
jumping around.
Damien Le Moal [Thu, 26 Mar 2020 10:27:50 +0000 (11:27 +0100)]
blkzone: ioctl related code refactoring
[kzak@redhat.com: - generate patch from Damien's v3
- make commands[] initialization more robust]
Signed-off-by: Aravind Ramesh <Aravind.Ramesh@wdc.com> Signed-off-by: Damien Le Moal <damien.lemoal@wdc.com> Signed-off-by: Karel Zak <kzak@redhat.com>
Aravind Ramesh [Tue, 24 Mar 2020 10:02:17 +0000 (19:02 +0900)]
blkzone: add open/close/finish commands
Introduce blkzone open, close and finish commands, issuing BLKOPENZONE,
BLKCLOSEZONE and BLKFINISHZONE ioctl commands to open, close or finish
a range of zones of a zoned block device.
Since these three commands are similar to the existing zone reset
command, the existing zone reset command implementation is changed into
the generic blkzone_action() internal handler function for processing
all zone actions.
The BLKOPENZONE, BLKCLOSEZONE and BLKFINISHZONE ioctl commands codes are
defined in linux/blkzoned.h starting with kernel version 5.5. To ensure
that the blkzone utility compiles even with older blkzoned.h kernel
header versions, these ioctl commands are internally defined if the
blkzoned.h header definition is not present. Execution of these commands
on kernels older than 5.5 will result in a -ENOTTY error (missing
ioctl).
Signed-off-by: Aravind Ramesh <Aravind.Ramesh@wdc.com> Signed-off-by: Damien Le Moal <damien.lemoal@wdc.com> Tested-by: Hans Holmberg <Hans.Holmberg@wdc.com> Reviewed-by: Hans Holmberg <Hans.Holmberg@wdc.com>
Karel Zak [Tue, 24 Mar 2020 10:17:34 +0000 (11:17 +0100)]
fdisk: add --noauto-pt
The default partition table depends on system arch, for example on
Sparc it's SUN and on x86_64 it's MBR. This option forces fdisk to
keep the device empty and allow user to create non-default PT in more
elegant way.
Addresses: https://github.com/karelzak/util-linux/pull/994 Signed-off-by: Karel Zak <kzak@redhat.com>
Karel Zak [Mon, 23 Mar 2020 11:14:57 +0000 (12:14 +0100)]
Merge branch 'eject-sparc' of https://github.com/mator/util-linux
* 'eject-sparc' of https://github.com/mator/util-linux:
tests: fixes mount tests on SPARC
tests: fixes libmount/ on SPARC
tests: fixes eject/umount on SPARC
Damien Le Moal [Fri, 20 Mar 2020 04:55:43 +0000 (13:55 +0900)]
libblkid: Add support for zonefs
The zonefs filesystem was added to upstream linux kernel 5.6. This
patch add support for probing zonefs formatted zoned block devices so
that other file system formatting tool can detect its presence on a
device.
[kzak@redhat.com: - use standard integer types]
Signed-off-by: Damien Le Moal <damien.lemoal@wdc.com> Signed-off-by: Karel Zak <kzak@redhat.com>
Sami Kerola [Sun, 22 Mar 2020 09:37:41 +0000 (09:37 +0000)]
docs: kill.1 add note about shell-internal kill implementations
Requested-by: Ilia Baryshnikov <qwelias@gmail.com>
Reference: https://github.com/karelzak/util-linux/issues/991#issuecomment-602108648 Signed-off-by: Sami Kerola <kerolasa@iki.fi>
Anatoly Pugachev [Tue, 10 Mar 2020 16:16:01 +0000 (19:16 +0300)]
tests: fixes eject/umount on SPARC
Since SPARC is using 'sun' partition table by default, make test not to
assume that disk has 'dos' partition table, so write 'dos' partition
table on disk, before proceeding any further.
Adrian Reber [Mon, 9 Mar 2020 13:02:45 +0000 (13:02 +0000)]
nsenter: add support for the time namespace
Just as with unshare and lsns this adds time namespace support to
nsenter.
In contrast to unshare nsenter does not have the options '--boottime'
and '--monotonic' as that offset can only be set as long as there have
no processes being started in the corresponding time namespace.
Adrian Reber [Mon, 9 Mar 2020 12:20:51 +0000 (12:20 +0000)]
unshare: use '-T' for time namespace instead of '-t'
While working on getting time namespace support into 'nsenter' it was
not possible to use '-t' to enter a time namespace as '-t' is the short
option for '--target'. Fortunately '-T' is still available in 'nsenter'
and 'unshare' and therefore let's change 'unshare' to use the same flag
for the time namespace as 'nsenter'.
Adrian Reber [Fri, 6 Mar 2020 11:05:00 +0000 (12:05 +0100)]
unshare: support the time namespace
This adds support to unshare for time namespaces. With the newly added
options '-t, --time' and '--monotonic' and '--boottime' it is now
possible to change CLOCK_MONOTONIC and CLOCK_BOOTTIME in a new time
namespace.
The time namespace has been merged in kernel version 5.6 and an easy way
to test it is using CLOCK_BOOTTIME and the uptime command:
Adrian Reber [Fri, 6 Mar 2020 11:03:50 +0000 (12:03 +0100)]
unshare: fix help message indentation
A few lines of the help message were unaligned in the output because of
mixes use of tabs and space. This removes all tabs and replaces them
with spaces.
Sami Kerola [Fri, 6 Mar 2020 20:14:06 +0000 (20:14 +0000)]
lsirq: mark --json and --pairs options mutually exclusive
Before this change --pairs option would always win over --json. That is
unnecessarily confusing, it is much better to disallow combination that does
not make sense.
Notice that the --noheadings in combination with --json or --pairs will not
cause any effect. In strictest possible understanding --noheadings should
also be exclusive. Looking from more relaxed point of view neither --json
nor --pairs has heading, so excluding is not necessary because --noheading
is happening already.
Karel Zak [Fri, 6 Mar 2020 14:28:57 +0000 (15:28 +0100)]
irqtop: cleanup sort stuff
* user "cmp" in the function names (it does not sort)
* keep all in irq-common.c
* use column names on command line (e.g. --sort NAME)
* hardcode default to sort_result()