[prev in list] [next in list] [prev in thread] [next in thread]
List: busybox
Subject: Re: [PATCH] Bionic lacks ttyname_r; provide a workaround
From: Denys Vlasenko <vda.linux () googlemail ! com>
Date: 2015-04-25 19:33:21
Message-ID: CAK1hOcOk1vgAB8nHTnCT=-2Q3_Bd+yZcOsD2M4WAU=BDrOT-zg () mail ! gmail ! com
[Download RAW message or body]
Applied, thanks!
On Sat, Apr 25, 2015 at 9:29 PM, Matt Whitlock
<busybox@mattwhitlock.name> wrote:
> ---
> include/platform.h | 7 +++++++
> libbb/platform.c | 17 +++++++++++++++++
> 2 files changed, 24 insertions(+)
>
> diff --git a/include/platform.h b/include/platform.h
> index 8914d4a..8896a6b 100644
> --- a/include/platform.h
> +++ b/include/platform.h
> @@ -368,6 +368,7 @@ typedef unsigned smalluint;
> #define HAVE_DPRINTF 1
> #define HAVE_MEMRCHR 1
> #define HAVE_MKDTEMP 1
> +#define HAVE_TTYNAME_R 1
> #define HAVE_PTSNAME_R 1
> #define HAVE_SETBIT 1
> #define HAVE_SIGHANDLER_T 1
> @@ -480,6 +481,7 @@ typedef unsigned smalluint;
>
> #if defined(ANDROID) || defined(__ANDROID__)
> # undef HAVE_DPRINTF
> +# undef HAVE_TTYNAME_R
> # undef HAVE_GETLINE
> # undef HAVE_STPCPY
> # undef HAVE_MEMPCPY
> @@ -506,6 +508,11 @@ extern void *memrchr(const void *s, int c, size_t n) FAST_FUNC;
> extern char *mkdtemp(char *template) FAST_FUNC;
> #endif
>
> +#ifndef HAVE_TTYNAME_R
> +#define ttyname_r bb_ttyname_r
> +extern int ttyname_r(int fd, char *buf, size_t buflen);
> +#endif
> +
> #ifndef HAVE_SETBIT
> # define setbit(a, b) ((a)[(b) >> 3] |= 1 << ((b) & 7))
> # define clrbit(a, b) ((a)[(b) >> 3] &= ~(1 << ((b) & 7)))
> diff --git a/libbb/platform.c b/libbb/platform.c
> index 8d90ca4..c676f17 100644
> --- a/libbb/platform.c
> +++ b/libbb/platform.c
> @@ -113,6 +113,23 @@ char* FAST_FUNC mkdtemp(char *template)
> }
> #endif
>
> +#ifndef HAVE_TTYNAME_R
> +int ttyname_r(int fd, char *buf, size_t buflen)
> +{
> + int r;
> + char path[32];
> + if (!isatty(fd))
> + return errno == EINVAL ? ENOTTY : errno;
> + sprintf(path, "/proc/self/fd/%d", fd);
> + if ((r = readlink(path, buf, buflen)) < 0)
> + return errno;
> + if (r >= buflen)
> + return ERANGE;
> + buf[r] = '\0';
> + return 0;
> +}
> +#endif
> +
> #ifndef HAVE_STRCASESTR
> /* Copyright (c) 1999, 2000 The ht://Dig Group */
> char* FAST_FUNC strcasestr(const char *s, const char *pattern)
> --
> 2.3.5
>
> _______________________________________________
> busybox mailing list
> busybox@busybox.net
> http://lists.busybox.net/mailman/listinfo/busybox
_______________________________________________
busybox mailing list
busybox@busybox.net
http://lists.busybox.net/mailman/listinfo/busybox
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic