[1.16.2] Can't stop "ping" with CTRL+c
Kevin Cernekee
cernekee at gmail.com
Sun Jul 10 20:33:46 UTC 2011
On Fri, Jul 8, 2011 at 12:33 AM, Denys Vlasenko
<vda.linux at googlemail.com> wrote:
> There is probably no deep wisdom behind it. I think second #ifdef
> should be changed to #ifdef VT_GETSTATE, it will make more sense that way.
Here are a few patches to implement the changes we discussed:
0001 - check sysfs for the name of the active console
function old new delta
.rodata 147781 147813 +32
cttyhack_main 296 324 +28
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/0 up/down: 60/0) Total: 60 bytes
text data bss dec hex filename
1002368 1667 4961 1008996 f6564 busybox_old
1002428 1667 4961 1009056 f65a0 busybox_unstripped
Changing the code to use "do/while(0)/break/goto" instead of
"if(console[8])" saved about 12 bytes.
This was tested with ttyS0 and ttyAMA0, with and without the sysfs
feature. Not tested on tty0.
It is legal for /sys/class/tty/console/active to return more than one
device name, separated by spaces. I did not attempt to handle this
case, so if cttyhack runs into this situation it will try to open e.g.
"/dev/ttyS0 ttyS1" and this will not succeed.
0002 - test for defined(VT_GETSTATE) instead of defined(__linux__)
No impact on code size.
This patch brings cttyhack in line with the approach used in init/init.c:
#ifdef __linux__
#include <linux/vt.h>
#endif
[...]
#ifdef VT_foo
This case is relatively easy to handle because VT_GETSTATE and struct
vt_stat are both defined in <linux/vt.h>. You should not get one
without the other.
(Side note: is TIOCGSERIAL available on any non-Linux platforms? If
so, what does it use in lieu of the Linux serial_struct? If not,
should cttyhack be marked as Linux-only?)
0003 - fail gracefully if the device node is missing
function old new delta
cttyhack_main 324 328 +4
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/0 up/down: 4/0) Total: 4 bytes
text data bss dec hex filename
1002428 1667 4961 1009056 f65a0 busybox_old
1002432 1667 4961 1009060 f65a4 busybox_unstripped
One thing I noticed when testing with the console on ttyAMA0 is that
TIOCGSERIAL still succeeds (via serial_core.c:uart_get_info() in the
kernel), so cttyhack erroneously tries to open the nonexistent
/dev/ttyS0 device, and when that fails, it exits without running the
shell. This actually means you are worse off with cttyhack than
without it, in some unusual cases.
cttyhack could also fail to open the correct device if mdev somehow
malfunctioned.
My proposed fix is to change cttyhack so that it merely skips the
"dup2" code with a non-fatal error, rather than terminating
immediately, if it cannot open the device.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-cttyhack-check-sysfs-for-the-name-of-the-active-cons.patch
Type: application/octet-stream
Size: 4027 bytes
Desc: not available
URL: <http://lists.busybox.net/pipermail/busybox/attachments/20110710/050a02c0/attachment-0003.obj>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0002-cttyhack-test-for-defined-VT_GETSTATE-instead-of-def.patch
Type: application/octet-stream
Size: 1950 bytes
Desc: not available
URL: <http://lists.busybox.net/pipermail/busybox/attachments/20110710/050a02c0/attachment-0004.obj>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0003-cttyhack-fail-gracefully-if-the-device-node-is-missi.patch
Type: application/octet-stream
Size: 788 bytes
Desc: not available
URL: <http://lists.busybox.net/pipermail/busybox/attachments/20110710/050a02c0/attachment-0005.obj>
More information about the busybox
mailing list