diff options
-rw-r--r-- | lib/portability.c | 10 | ||||
-rw-r--r-- | lib/portability.h | 17 | ||||
-rwxr-xr-x | scripts/genconfig.sh | 28 | ||||
-rw-r--r-- | toys.h | 3 | ||||
-rw-r--r-- | toys/lsb/passwd.c | 1 | ||||
-rw-r--r-- | toys/lsb/su.c | 1 | ||||
-rw-r--r-- | toys/other/login.c | 1 | ||||
-rw-r--r-- | toys/other/netcat.c | 1 | ||||
-rw-r--r-- | toys/other/uptime.c | 13 | ||||
-rw-r--r-- | toys/other/w.c | 1 | ||||
-rw-r--r-- | toys/pending/sulogin.c | 1 | ||||
-rw-r--r-- | toys/pending/telnetd.c | 1 | ||||
-rw-r--r-- | toys/posix/who.c | 1 |
13 files changed, 70 insertions, 9 deletions
diff --git a/lib/portability.c b/lib/portability.c index d901a4b6..29608bc1 100644 --- a/lib/portability.c +++ b/lib/portability.c @@ -5,6 +5,9 @@ */ #include "toys.h" +#if defined(__ANDROID__) +#include <asm/unistd.h> +#endif #if defined(__APPLE__) || defined(__ANDROID__) ssize_t getdelim(char **linep, size_t *np, int delim, FILE *stream) @@ -61,6 +64,13 @@ ssize_t getline(char **linep, size_t *np, FILE *stream) } #endif +#if defined(__ANDROID__) +int sethostname(const char *name, size_t len) +{ + return syscall(__NR_sethostname, name, len); +} +#endif + #if defined(__APPLE__) extern char **environ; diff --git a/lib/portability.h b/lib/portability.h index b7a7c794..5383efaa 100644 --- a/lib/portability.h +++ b/lib/portability.h @@ -180,10 +180,25 @@ ssize_t getline(char **lineptr, size_t *n, FILE *stream); #endif // Linux headers not listed by POSIX or LSB -#include <shadow.h> #include <sys/mount.h> #include <sys/swap.h> +// Android is missing some headers and functions +#if defined(__ANDROID__) +int sethostname(const char *name, size_t len); +#endif +// "generated/config.h" is included first +#if defined(CFG_TOYBOX_SHADOW) && CFG_TOYBOX_SHADOW +#include <shadow.h> +#endif +#if defined(CFG_TOYBOX_UTMPX) && CFG_TOYBOX_UTMPX +#include <utmpx.h> +#endif +#if defined(CFG_TOYBOX_PTY) && CFG_TOYBOX_PTY +#include <pty.h> +#endif + + // Some systems don't define O_NOFOLLOW, and it varies by architecture, so... #include <fcntl.h> #ifndef O_NOFOLLOW diff --git a/scripts/genconfig.sh b/scripts/genconfig.sh index b50c32bb..e040aea5 100755 --- a/scripts/genconfig.sh +++ b/scripts/genconfig.sh @@ -44,6 +44,34 @@ EOF int main(int argc, char *argv[]) { return posix_fallocate(0,0,0); } EOF + + # Android and some other platforms miss utmpx + probesymbol TOYBOX_UTMPX -c << EOF + #include <utmpx.h> + #ifndef BOOT_TIME + #error nope + #endif + int main(int argc, char *argv[]) { + struct utmpx *a; + if (0 != (a = getutxent())) return 0; + return 1; + } +EOF + + # Android is missing shadow.h and pty.h + probesymbol TOYBOX_PTY -c << EOF + #include <pty.h> + int main(int argc, char *argv[]) { + int master; return forkpty(&master, NULL, NULL, NULL); + } +EOF + + probesymbol TOYBOX_SHADOW -c << EOF + #include <shadow.h> + int main(int argc, char *argv[]) { + struct spwd *a = getspnam("root"); return 0; + } +EOF } genconfig() @@ -41,10 +41,10 @@ #include <sys/utsname.h> #include <sys/wait.h> #include <syslog.h> +#include <termios.h> #include <time.h> #include <unistd.h> #include <utime.h> -#include <utmpx.h> // Posix networking @@ -64,7 +64,6 @@ #include <wctype.h> // LSB 4.1 headers -#include <pty.h> #include <sys/ioctl.h> #include <sys/statfs.h> #include <sys/sysinfo.h> diff --git a/toys/lsb/passwd.c b/toys/lsb/passwd.c index c92fb0d7..ca98f2ef 100644 --- a/toys/lsb/passwd.c +++ b/toys/lsb/passwd.c @@ -10,6 +10,7 @@ USE_PASSWD(NEWTOY(passwd, ">1a:dlu", TOYFLAG_STAYROOT|TOYFLAG_USR|TOYFLAG_BIN)) config PASSWD bool "passwd" default y + depends on TOYBOX_SHADOW help usage: passwd [-a ALGO] [-dlu] <account name> diff --git a/toys/lsb/su.c b/toys/lsb/su.c index 268ddf75..616541b9 100644 --- a/toys/lsb/su.c +++ b/toys/lsb/su.c @@ -10,6 +10,7 @@ USE_SU(NEWTOY(su, "lmpc:s:", TOYFLAG_BIN|TOYFLAG_ROOTONLY)) config SU bool "su" default y + depends on TOYBOX_SHADOW help usage: su [-lmp] [-c CMD] [-s SHELL] [USER [ARGS...]] diff --git a/toys/other/login.c b/toys/other/login.c index 09861644..91523d43 100644 --- a/toys/other/login.c +++ b/toys/other/login.c @@ -10,6 +10,7 @@ USE_LOGIN(NEWTOY(login, ">1fph:", TOYFLAG_BIN)) config LOGIN bool "login" default y + depends on TOYBOX_SHADOW help usage: login [-p] [-h host] [[-f] username] diff --git a/toys/other/netcat.c b/toys/other/netcat.c index 485dda13..2c1ec7b2 100644 --- a/toys/other/netcat.c +++ b/toys/other/netcat.c @@ -26,6 +26,7 @@ config NETCAT_LISTEN bool "netcat server options (-let)" default y depends on NETCAT + depends on TOYBOX_PTY help usage: netcat [-t] [-lL COMMAND...] diff --git a/toys/other/uptime.c b/toys/other/uptime.c index adbbfc03..f584d9ab 100644 --- a/toys/other/uptime.c +++ b/toys/other/uptime.c @@ -25,17 +25,18 @@ void uptime_main(void) time_t tmptime; struct tm * now; unsigned int days, hours, minutes; - struct utmpx *entry; - int users = 0; + USE_TOYBOX_UTMPX(struct utmpx *entry;) + USE_TOYBOX_UTMPX(int users = 0;) // Obtain the data we need. sysinfo(&info); time(&tmptime); now = localtime(&tmptime); + // Obtain info about logged on users - setutxent(); - while ((entry = getutxent())) if (entry->ut_type == USER_PROCESS) users++; - endutxent(); + USE_TOYBOX_UTMPX(setutxent();) + USE_TOYBOX_UTMPX(while ((entry = getutxent())) if (entry->ut_type == USER_PROCESS) users++;) + USE_TOYBOX_UTMPX(endutxent();) // Time xprintf(" %02d:%02d:%02d up ", now->tm_hour, now->tm_min, now->tm_sec); @@ -48,7 +49,7 @@ void uptime_main(void) if (days) xprintf("%d day%s, ", days, (days!=1)?"s":""); if (hours) xprintf("%2d:%02d, ", hours, minutes); else printf("%d min, ", minutes); - printf(" %d user%s, ", users, (users!=1) ? "s" : ""); + USE_TOYBOX_UTMPX(printf(" %d user%s, ", users, (users!=1) ? "s" : "");) printf(" load average: %.02f, %.02f, %.02f\n", info.loads[0]/65536.0, info.loads[1]/65536.0, info.loads[2]/65536.0); } diff --git a/toys/other/w.c b/toys/other/w.c index c271e8bd..a76c82f5 100644 --- a/toys/other/w.c +++ b/toys/other/w.c @@ -7,6 +7,7 @@ USE_W(NEWTOY(w, NULL, TOYFLAG_USR|TOYFLAG_BIN)) config W bool "w" default y + depends on TOYBOX_UTMPX help usage: w diff --git a/toys/pending/sulogin.c b/toys/pending/sulogin.c index 45f76597..e6cb8314 100644 --- a/toys/pending/sulogin.c +++ b/toys/pending/sulogin.c @@ -13,6 +13,7 @@ USE_SULOGIN(NEWTOY(sulogin, "t#<0=0", TOYFLAG_SBIN|TOYFLAG_NEEDROOT)) config SULOGIN bool "sulogin" default n + depends on TOYBOX_SHADOW help usage: sulogin [-t time] [tty] diff --git a/toys/pending/telnetd.c b/toys/pending/telnetd.c index 4198e63f..f9f34224 100644 --- a/toys/pending/telnetd.c +++ b/toys/pending/telnetd.c @@ -8,6 +8,7 @@ USE_TELNETD(NEWTOY(telnetd, "w#<0b:p#<0>65535=23f:l:FSKi[!wi]", TOYFLAG_USR|TOYF config TELNETD bool "telnetd" default n + depends on TOYBOX_PTY help Handle incoming telnet connections diff --git a/toys/posix/who.c b/toys/posix/who.c index 2c8a2e65..876a562a 100644 --- a/toys/posix/who.c +++ b/toys/posix/who.c @@ -14,6 +14,7 @@ USE_WHO(NEWTOY(who, "a", TOYFLAG_BIN)) config WHO bool "who" default y + depends on TOYBOX_UTMPX help usage: who |