cttyhack: move build system bits into cttyhack.c, no code changes
No binary (build failed)
—
(log yok)
| @@ -104,7 +104,6 @@ IF_CPIO(APPLET(cpio, _BB_DIR_BIN, _BB_SUID_DROP)) | |
| IF_CROND(APPLET(crond, _BB_DIR_USR_SBIN, _BB_SUID_DROP)) | |
| IF_CRONTAB(APPLET(crontab, _BB_DIR_USR_BIN, _BB_SUID_REQUIRE)) | |
| IF_CRYPTPW(APPLET(cryptpw, _BB_DIR_USR_BIN, _BB_SUID_DROP)) | |
| - | IF_CTTYHACK(APPLET(cttyhack, _BB_DIR_BIN, _BB_SUID_DROP)) |
| IF_CUT(APPLET_NOEXEC(cut, cut, _BB_DIR_USR_BIN, _BB_SUID_DROP, cut)) | |
| IF_DATE(APPLET(date, _BB_DIR_BIN, _BB_SUID_DROP)) | |
| IF_DC(APPLET(dc, _BB_DIR_USR_BIN, _BB_SUID_DROP)) | |
| @@ -678,17 +678,6 @@ INSERT | |
| "\n -S SALT" \ | |
| ) \ | |
| - | #define cttyhack_trivial_usage \ |
| - | "PROG ARGS" |
| - | #define cttyhack_full_usage "\n\n" \ |
| - | "Give PROG a controlling tty if possible." \ |
| - | "\nExample for /etc/inittab (for busybox init):" \ |
| - | "\n ::respawn:/bin/cttyhack /bin/sh" \ |
| - | "\nGiving controlling tty to shell running with PID 1:" \ |
| - | "\n $ exec cttyhack sh" \ |
| - | "\nStarting interactive shell from boot shell script:" \ |
| - | "\n setsid cttyhack sh" \ |
| - | |
| #define cut_trivial_usage \ | |
| "[OPTIONS] [FILE]..." | |
| #define cut_full_usage "\n\n" \ | |
| @@ -158,40 +158,4 @@ config FEATURE_SH_NOFORK | |
| This feature is relatively new. Use with care. | |
| - | config CTTYHACK |
| - | bool "cttyhack" |
| - | default y |
| - | help |
| - | One common problem reported on the mailing list is "can't access tty; |
| - | job control turned off" error message which typically appears when |
| - | one tries to use shell with stdin/stdout opened to /dev/console. |
| - | This device is special - it cannot be a controlling tty. |
| - | |
| - | Proper solution is to use correct device instead of /dev/console. |
| - | |
| - | cttyhack provides "quick and dirty" solution to this problem. |
| - | It analyzes stdin with various ioctls, trying to determine whether |
| - | it is a /dev/ttyN or /dev/ttySN (virtual terminal or serial line). |
| - | If it detects one, it closes stdin/out/err and reopens that device. |
| - | Then it executes given program. Opening the device will make |
| - | that device a controlling tty. This may require cttyhack |
| - | to be a session leader. |
| - | |
| - | Example for /etc/inittab (for busybox init): |
| - | |
| - | ::respawn:/bin/cttyhack /bin/sh |
| - | |
| - | Starting an interactive shell from boot shell script: |
| - | |
| - | setsid cttyhack sh |
| - | |
| - | Giving controlling tty to shell running with PID 1: |
| - | |
| - | # exec cttyhack sh |
| - | |
| - | Without cttyhack, you need to know exact tty name, |
| - | and do something like this: |
| - | |
| - | # exec setsid sh -c 'exec sh </dev/tty1 >/dev/tty1 2>&1' |
| - | |
| endmenu | |
| @@ -8,5 +8,4 @@ lib-y:= | |
| INSERT | |
| - | lib-$(CONFIG_CTTYHACK) += cttyhack.o |
| lib-$(CONFIG_SH_MATH_SUPPORT) += math.o | |
| @@ -179,6 +179,7 @@ | |
| //config: "PS#" may contain volatile content, such as backquote commands. | |
| //config: This option recreates the prompt string from the environment | |
| //config: variable each time it is displayed. | |
| + | //config: |
| //usage:#define ash_trivial_usage NOUSAGE_STR | |
| //usage:#define ash_full_usage "" | |
| @@ -6,6 +6,58 @@ | |
| */ | |
| #include "libbb.h" | |
| + | //applet:IF_CTTYHACK(APPLET(cttyhack, _BB_DIR_BIN, _BB_SUID_DROP)) |
| + | |
| + | //kbuild:lib-$(CONFIG_CTTYHACK) += cttyhack.o |
| + | |
| + | //config:config CTTYHACK |
| + | //config: bool "cttyhack" |
| + | //config: default y |
| + | //config: help |
| + | //config: One common problem reported on the mailing list is "can't access tty; |
| + | //config: job control turned off" error message which typically appears when |
| + | //config: one tries to use shell with stdin/stdout opened to /dev/console. |
| + | //config: This device is special - it cannot be a controlling tty. |
| + | //config: |
| + | //config: Proper solution is to use correct device instead of /dev/console. |
| + | //config: |
| + | //config: cttyhack provides "quick and dirty" solution to this problem. |
| + | //config: It analyzes stdin with various ioctls, trying to determine whether |
| + | //config: it is a /dev/ttyN or /dev/ttySN (virtual terminal or serial line). |
| + | //config: If it detects one, it closes stdin/out/err and reopens that device. |
| + | //config: Then it executes given program. Opening the device will make |
| + | //config: that device a controlling tty. This may require cttyhack |
| + | //config: to be a session leader. |
| + | //config: |
| + | //config: Example for /etc/inittab (for busybox init): |
| + | //config: |
| + | //config: ::respawn:/bin/cttyhack /bin/sh |
| + | //config: |
| + | //config: Starting an interactive shell from boot shell script: |
| + | //config: |
| + | //config: setsid cttyhack sh |
| + | //config: |
| + | //config: Giving controlling tty to shell running with PID 1: |
| + | //config: |
| + | //config: # exec cttyhack sh |
| + | //config: |
| + | //config: Without cttyhack, you need to know exact tty name, |
| + | //config: and do something like this: |
| + | //config: |
| + | //config: # exec setsid sh -c 'exec sh </dev/tty1 >/dev/tty1 2>&1' |
| + | //config: |
| + | |
| + | //usage:#define cttyhack_trivial_usage |
| + | //usage: "PROG ARGS" |
| + | //usage:#define cttyhack_full_usage "\n\n" |
| + | //usage: "Give PROG a controlling tty if possible." |
| + | //usage: "\nExample for /etc/inittab (for busybox init):" |
| + | //usage: "\n ::respawn:/bin/cttyhack /bin/sh" |
| + | //usage: "\nGiving controlling tty to shell running with PID 1:" |
| + | //usage: "\n $ exec cttyhack sh" |
| + | //usage: "\nStarting interactive shell from boot shell script:" |
| + | //usage: "\n setsid cttyhack sh" |
| + | |
| /* From <linux/vt.h> */ | |
| struct vt_stat { | |
| unsigned short v_active; /* active vt */ | |