From 4cc4b30426c5e5a0ecf912791e3f27312438d10e Mon Sep 17 00:00:00 2001 From: Bernhard Reutner-Fischer Date: Tue, 3 Jun 2008 08:11:56 +0000 Subject: - adds several config-options to allow for turning off certain features like o UCLIBC_HAS_GNU_ERROR o UCLIBC_HAS_BSD_ERR o UCLIBC_HAS_PTY o UCLIBC_HAS_GETPT (1) o UCLIBC_SYSCALL_STUBS o UCLIBC_SYSCALL_STUB_WARNING o UCLIBC_LINUX_SPECIFIC (2) o UCLIBC_BSD_SPECIFIC (3) o UCLIBC_NTP_LEGACY (4) o UCLIBC_SV4_DEPRECATED (5) o UCLIBC_HAVE_REALTIME (6) o UCLIBC_HAVE_ADVANCED_REALTIME (7) o UCLIBC_HAVE_EPOLL (8) o UCLIBC_HAVE_XATTR (9) o UCLIBC_HAVE_PROFILING (10) (1) make non-standard getpt optional and implement standard posix_openpt (2) fstatfs(), inotify_*(), ioperm(), iopl(), madvise(), modify_ldt(), personality() ppoll(), setresuid() (3) mincore(), getdomainname(), setdomainname() (4) ntp_adjtime(), ntp_gettime() aliases (5) ustat() [use statfs(2) in your code instead] (6) All marked as "(REALTIME)" in SUSv3 (7) All marked as "(ADVANCED REALTIME)" in SUSv3 (8) epoll_create(), epoll_ctl(), epoll_wait() (9) all Extended Attributes (10) helpers for gcc's -finstrument-functions - Fixes _dl_exit() - Implements sleep(3) for !UCLIBC_HAVE_REALTIME - Implements usleep(3) for !UCLIBC_HAVE_REALTIME - adds #warning about incorrect posix_fadvise{,64}() - removes unused and unwanted uselib() Net outcome is that an allnoconfig with HAVE_SHARED is now about 88k instead of formerly 130k. --- libc/stdlib/Makefile.in | 10 ++++++++-- libc/stdlib/_atexit.c | 1 + libc/stdlib/bsd_getpt.c | 2 ++ libc/stdlib/getpt.c | 40 ++++++++++++++++++++++++++++------------ 4 files changed, 39 insertions(+), 14 deletions(-) (limited to 'libc/stdlib') diff --git a/libc/stdlib/Makefile.in b/libc/stdlib/Makefile.in index ad2a95935..dfef6d18e 100644 --- a/libc/stdlib/Makefile.in +++ b/libc/stdlib/Makefile.in @@ -12,10 +12,16 @@ include $(top_srcdir)libc/stdlib/malloc-standard/Makefile.in CSRC := \ abort.c getenv.c mkdtemp.c mktemp.c realpath.c mkstemp.c \ rand.c random.c random_r.c setenv.c system.c div.c ldiv.c lldiv.c \ - getpt.c ptsname.c grantpt.c unlockpt.c drand48-iter.c jrand48.c \ + getpt.c drand48-iter.c jrand48.c \ jrand48_r.c lrand48.c lrand48_r.c mrand48.c mrand48_r.c nrand48.c \ nrand48_r.c rand_r.c srand48.c srand48_r.c seed48.c seed48_r.c \ - valloc.c posix_memalign.c a64l.c l64a.c __uc_malloc.c + valloc.c a64l.c l64a.c __uc_malloc.c +ifeq ($(UCLIBC_HAS_ADVANCED_REALTIME),y) +CSRC += posix_memalign.c +endif +ifeq ($(UCLIBC_HAS_PTY),y) +CSRC += grantpt.c unlockpt.c ptsname.c +endif ifeq ($(UCLIBC_HAS_ARC4RANDOM),y) CSRC += arc4random.c endif diff --git a/libc/stdlib/_atexit.c b/libc/stdlib/_atexit.c index 21aa30c81..e5840f471 100644 --- a/libc/stdlib/_atexit.c +++ b/libc/stdlib/_atexit.c @@ -107,6 +107,7 @@ extern void *__dso_handle __attribute__ ((__weak__)); #ifdef L_atexit int attribute_hidden atexit(aefuncp func) #else +int old_atexit(aefuncp func); int old_atexit(aefuncp func) #endif { diff --git a/libc/stdlib/bsd_getpt.c b/libc/stdlib/bsd_getpt.c index 9b93448bc..5f0f63f7a 100644 --- a/libc/stdlib/bsd_getpt.c +++ b/libc/stdlib/bsd_getpt.c @@ -22,6 +22,7 @@ #include #include +#if defined __USE_BSD libc_hidden_proto(open) /* Experimentally off - libc_hidden_proto(mempcpy) */ @@ -76,3 +77,4 @@ __getpt (void) __set_errno (ENOENT); return -1; } +#endif diff --git a/libc/stdlib/getpt.c b/libc/stdlib/getpt.c index 3dbaf9ed7..950664509 100644 --- a/libc/stdlib/getpt.c +++ b/libc/stdlib/getpt.c @@ -20,8 +20,13 @@ #include #include #include +#include #include #include +#include + +extern __typeof(statfs) __libc_statfs; +libc_hidden_proto(__libc_statfs) libc_hidden_proto(open) libc_hidden_proto(close) @@ -47,36 +52,37 @@ extern int __bsd_getpt (void) attribute_hidden; /* Open a master pseudo terminal and return its file descriptor. */ int -getpt (void) +posix_openpt (int flags) { +#define have_no_dev_ptmx (1<<0) +#define devpts_mounted (1<<1) #if !defined __UNIX98PTY_ONLY__ - static smallint have_no_dev_ptmx; + static smallint _state; #endif int fd; #if !defined __UNIX98PTY_ONLY__ - if (!have_no_dev_ptmx) + if (!(_state & have_no_dev_ptmx)) #endif { - fd = open (_PATH_DEVPTMX, O_RDWR); + fd = open (_PATH_DEVPTMX, flags); if (fd != -1) { #if defined __ASSUME_DEVPTS__ return fd; #else struct statfs fsbuf; - static smallint devpts_mounted; /* Check that the /dev/pts filesystem is mounted or if /dev is a devfs filesystem (this implies /dev/pts). */ - if (devpts_mounted - || (statfs (_PATH_DEVPTS, &fsbuf) == 0 + if ((_state & devpts_mounted) + || (__libc_statfs (_PATH_DEVPTS, &fsbuf) == 0 && fsbuf.f_type == DEVPTS_SUPER_MAGIC) - || (statfs (_PATH_DEV, &fsbuf) == 0 + || (__libc_statfs (_PATH_DEV, &fsbuf) == 0 && fsbuf.f_type == DEVFS_SUPER_MAGIC)) { /* Everything is ok. */ - devpts_mounted = 1; + _state |= devpts_mounted; return fd; } @@ -84,7 +90,7 @@ getpt (void) are not usable. */ close (fd); #if !defined __UNIX98PTY_ONLY__ - have_no_dev_ptmx = 1; + _state |= have_no_dev_ptmx; #endif #endif } @@ -92,16 +98,25 @@ getpt (void) { #if !defined __UNIX98PTY_ONLY__ if (errno == ENOENT || errno == ENODEV) - have_no_dev_ptmx = 1; + _state |= have_no_dev_ptmx; else #endif return -1; } } + return -1; +} +#if defined __USE_GNU && defined __UCLIBC_HAS_GETPT__ +int +getpt (void) +{ + int fd = posix_openpt(O_RDWR); #if !defined __UNIX98PTY_ONLY__ - return __bsd_getpt (); + if (fd == -1) + fd = __bsd_getpt(); #endif + return fd; } #if !defined __UNIX98PTY_ONLY__ @@ -111,3 +126,4 @@ getpt (void) # define __getpt __bsd_getpt # include "bsd_getpt.c" #endif +#endif /* GNU && __UCLIBC_HAS_GETPT__ */ -- cgit v1.2.3