diff options
author | Austin Foxley <austinf@cetoncorp.com> | 2009-09-21 18:25:22 -0700 |
---|---|---|
committer | Austin Foxley <austinf@cetoncorp.com> | 2009-09-21 18:25:22 -0700 |
commit | e2784760e51ec0de62bbee61d27a85147460ece0 (patch) | |
tree | 0d1541dc5f16424d5a097929e0aaaa8c762a1056 | |
parent | a894902293392cdae3a614ae3ff065ca3a7b9f75 (diff) | |
download | uClibc-alpine-e2784760e51ec0de62bbee61d27a85147460ece0.tar.bz2 uClibc-alpine-e2784760e51ec0de62bbee61d27a85147460ece0.tar.xz |
not-cancel: use *_not_cancel variants directly
add a no threads version of not-cancel.h to fallback on
Signed-off-by: Austin Foxley <austinf@cetoncorp.com>
-rw-r--r-- | Rules.mak | 1 | ||||
-rw-r--r-- | libc/inet/hostid.c | 18 | ||||
-rw-r--r-- | libc/inet/if_index.c | 34 | ||||
-rw-r--r-- | libc/misc/dirent/closedir.c | 6 | ||||
-rw-r--r-- | libc/misc/dirent/opendir.c | 14 | ||||
-rw-r--r-- | libc/misc/utmp/utent.c | 27 | ||||
-rw-r--r-- | libc/misc/utmp/wtent.c | 14 | ||||
-rw-r--r-- | libc/stdio/tmpfile.c | 7 | ||||
-rw-r--r-- | libc/sysdeps/linux/common/not-cancel.h | 19 | ||||
-rw-r--r-- | libc/unistd/daemon.c | 39 | ||||
-rw-r--r-- | librt/Makefile.in | 2 |
11 files changed, 37 insertions, 144 deletions
@@ -654,6 +654,7 @@ else PTNAME := PTINC := endif +CFLAGS += -I$(top_srcdir)libc/sysdeps/linux/common CFLAGS += -I$(KERNEL_HEADERS) #CFLAGS += -iwithprefix include-fixed -iwithprefix include diff --git a/libc/inet/hostid.c b/libc/inet/hostid.c index caacef84d..86be79645 100644 --- a/libc/inet/hostid.c +++ b/libc/inet/hostid.c @@ -14,9 +14,7 @@ #include <netdb.h> #include <fcntl.h> #include <unistd.h> -#ifdef __UCLIBC_HAS_THREADS_NATIVE__ #include <not-cancel.h> -#endif #define HOSTID "/etc/hostid" @@ -28,17 +26,10 @@ int sethostid(long int new_id) int ret; if (geteuid() || getuid()) return __set_errno(EPERM); -#ifdef __UCLIBC_HAS_THREADS_NATIVE__ if ((fd=open_not_cancel(HOSTID,O_CREAT|O_WRONLY,0644))<0) return -1; ret = write_not_cancel(fd,(void *)&new_id,sizeof(new_id)) == sizeof(new_id) ? 0 : -1; close_not_cancel_no_status (fd); -#else - if ((fd=open(HOSTID,O_CREAT|O_WRONLY,0644))<0) return -1; - ret = write(fd,(void *)&new_id,sizeof(new_id)) == sizeof(new_id) - ? 0 : -1; - close (fd); -#endif return ret; } #endif @@ -52,7 +43,6 @@ long int gethostid(void) * It is not an error if we cannot read this file. It is not even an * error if we cannot read all the bytes, we just carry on trying... */ -#ifdef __UCLIBC_HAS_THREADS_NATIVE__ if ((fd =open_not_cancel_2 (HOSTID, O_RDONLY)) >= 0 && read_not_cancel (fd, (void *) &id, sizeof (id))) { @@ -60,14 +50,6 @@ long int gethostid(void) return id; } if (fd >= 0) close_not_cancel_no_status (fd); -#else - if ((fd=open(HOSTID,O_RDONLY))>=0 && read(fd,(void *)&id,sizeof(id))) - { - close (fd); - return id; - } - if (fd >= 0) close (fd); -#endif /* Try some methods of returning a unique 32 bit id. Clearly IP * numbers, if on the internet, will have a unique address. If they diff --git a/libc/inet/if_index.c b/libc/inet/if_index.c index b76d011b1..c249ad94f 100644 --- a/libc/inet/if_index.c +++ b/libc/inet/if_index.c @@ -32,9 +32,7 @@ #include <sys/socket.h> #include <sys/ioctl.h> #include <libc-internal.h> -#ifdef __UCLIBC_HAS_THREADS_NATIVE__ #include <not-cancel.h> -#endif #include "netlinkaccess.h" @@ -58,21 +56,13 @@ if_nametoindex(const char* ifname) { /* close never fails here, fd is just a unconnected socket *int saved_errno = errno; */ -#ifdef __UCLIBC_HAS_THREADS_NATIVE__ close_not_cancel_no_status(fd); -#else - close(fd); -#endif /*if (saved_errno == EINVAL) * __set_errno(ENOSYS); */ return 0; } -#ifdef __UCLIBC_HAS_THREADS_NATIVE__ close_not_cancel_no_status(fd); -#else - close(fd); -#endif return ifr.ifr_ifindex; #endif } @@ -123,11 +113,7 @@ if_nameindex (void) if (ioctl (fd, SIOCGIFCONF, &ifc) < 0) { -#ifdef __UCLIBC_HAS_THREADS_NATIVE__ close_not_cancel_no_status (fd); -#else - close (fd); -#endif return NULL; } } @@ -138,11 +124,7 @@ if_nameindex (void) idx = malloc ((nifs + 1) * sizeof (struct if_nameindex)); if (idx == NULL) { -#ifdef __UCLIBC_HAS_THREADS_NATIVE__ close_not_cancel_no_status (fd); -#else - close(fd); -#endif __set_errno(ENOBUFS); return NULL; } @@ -160,11 +142,7 @@ if_nameindex (void) for (j = 0; j < i; ++j) free (idx[j].if_name); free(idx); -#ifdef __UCLIBC_HAS_THREADS_NATIVE__ close_not_cancel_no_status (fd); -#else - close(fd); -#endif if (saved_errno == EINVAL) saved_errno = ENOSYS; else if (saved_errno == ENOMEM) @@ -178,11 +156,7 @@ if_nameindex (void) idx[i].if_index = 0; idx[i].if_name = NULL; -#ifdef __UCLIBC_HAS_THREADS_NATIVE__ close_not_cancel_no_status (fd); -#else - close(fd); -#endif return idx; #endif } @@ -325,22 +299,14 @@ if_indextoname (unsigned int ifindex, char *ifname) if (ioctl (fd, SIOCGIFNAME, &ifr) < 0) { int serrno = errno; -#ifdef __UCLIBC_HAS_THREADS_NATIVE__ close_not_cancel_no_status (fd); -#else - close (fd); -#endif if (serrno == ENODEV) /* POSIX requires ENXIO. */ serrno = ENXIO; __set_errno (serrno); return NULL; } -#ifdef __UCLIBC_HAS_THREADS_NATIVE__ close_not_cancel_no_status (fd); -#else - close (fd); -#endif return strncpy (ifname, ifr.ifr_name, IFNAMSIZ); # else diff --git a/libc/misc/dirent/closedir.c b/libc/misc/dirent/closedir.c index a7d980fc7..dfb53f888 100644 --- a/libc/misc/dirent/closedir.c +++ b/libc/misc/dirent/closedir.c @@ -9,9 +9,7 @@ #include <stdlib.h> #include <unistd.h> #include "dirstream.h" -#ifdef __UCLIBC_HAS_THREADS_NATIVE__ #include <not-cancel.h> -#endif int closedir(DIR * dir) @@ -34,10 +32,6 @@ int closedir(DIR * dir) __UCLIBC_MUTEX_UNLOCK(dir->dd_lock); free(dir->dd_buf); free(dir); -#ifdef __UCLIBC_HAS_THREADS_NATIVE__ return close_not_cancel(fd); -#else - return close(fd); -#endif } libc_hidden_def(closedir) diff --git a/libc/misc/dirent/opendir.c b/libc/misc/dirent/opendir.c index a2cfd5197..c2e008a3a 100644 --- a/libc/misc/dirent/opendir.c +++ b/libc/misc/dirent/opendir.c @@ -12,9 +12,7 @@ #include <unistd.h> #include <sys/dir.h> #include <sys/stat.h> -#ifdef __UCLIBC_HAS_THREADS_NATIVE__ #include <not-cancel.h> -#endif #include <dirent.h> #include "dirstream.h" @@ -89,11 +87,7 @@ DIR *opendir(const char *name) # define O_CLOEXEC 0 #endif -#ifdef __UCLIBC_HAS_THREADS_NATIVE__ fd = open_not_cancel_2(name, O_RDONLY|O_NDELAY|O_DIRECTORY|O_CLOEXEC); -#else - fd = open(name, O_RDONLY|O_NDELAY|O_DIRECTORY|O_CLOEXEC); -#endif if (fd < 0) return NULL; /* Note: we should check to make sure that between the stat() and open() @@ -105,11 +99,7 @@ DIR *opendir(const char *name) /* this close() never fails *int saved_errno; *saved_errno = errno; */ -#ifdef __UCLIBC_HAS_THREADS_NATIVE__ close_not_cancel_no_status(fd); -#else - close(fd); -#endif /*__set_errno(saved_errno);*/ return NULL; } @@ -123,11 +113,7 @@ DIR *opendir(const char *name) ptr = fd_to_DIR(fd, statbuf.st_blksize); if (!ptr) { -#ifdef __UCLIBC_HAS_THREADS_NATIVE__ close_not_cancel_no_status(fd); -#else - close(fd); -#endif __set_errno(ENOMEM); } return ptr; diff --git a/libc/misc/utmp/utent.c b/libc/misc/utmp/utent.c index 0176bbf6f..edada173e 100644 --- a/libc/misc/utmp/utent.c +++ b/libc/misc/utmp/utent.c @@ -19,10 +19,7 @@ #include <errno.h> #include <string.h> #include <utmp.h> - -#ifdef __UCLIBC_HAS_THREADS_NATIVE__ #include <not-cancel.h> -#endif #include <bits/uClibc_mutex.h> __UCLIBC_MUTEX_STATIC(utmplock, PTHREAD_MUTEX_INITIALIZER); @@ -42,17 +39,9 @@ static void __setutent(void) # define O_CLOEXEC 0 #endif -#ifdef __UCLIBC_HAS_THREADS_NATIVE__ static_fd = open_not_cancel_2(static_ut_name, O_RDWR | O_CLOEXEC); -#else - static_fd = open(static_ut_name, O_RDWR | O_CLOEXEC); -#endif if (static_fd < 0) { -#ifdef __UCLIBC_HAS_THREADS_NATIVE__ static_fd = open_not_cancel_2(static_ut_name, O_RDONLY | O_CLOEXEC); -#else - static_fd = open(static_ut_name, O_RDONLY | O_CLOEXEC); -#endif if (static_fd < 0) { return; /* static_fd remains < 0 */ } @@ -60,11 +49,7 @@ static void __setutent(void) if (O_CLOEXEC == 0) { /* Make sure the file will be closed on exec() */ -#ifdef __UCLIBC_HAS_THREADS_NATIVE__ fcntl_not_cancel(static_fd, F_SETFD, FD_CLOEXEC); -#else - fcntl(static_fd, F_SETFD, FD_CLOEXEC); -#endif /* thus far, {G,S}ETFD only has this single flag, * and setting it never fails. *int ret = fcntl(static_fd, F_GETFD, 0); @@ -101,11 +86,7 @@ static struct utmp *__getutent(void) } } -#ifdef __UCLIBC_HAS_THREADS_NATIVE__ if (read_not_cancel(static_fd, &static_utmp, sizeof(static_utmp)) == sizeof(static_utmp)) { -#else - if (read(static_fd, &static_utmp, sizeof(static_utmp)) == sizeof(static_utmp)) { -#endif ret = &static_utmp; } @@ -116,11 +97,7 @@ void endutent(void) { __UCLIBC_MUTEX_LOCK(utmplock); if (static_fd >= 0) -#ifdef __UCLIBC_HAS_THREADS_NATIVE__ close_not_cancel_no_status(static_fd); -#else - close(static_fd); -#endif static_fd = -1; __UCLIBC_MUTEX_UNLOCK(utmplock); } @@ -221,11 +198,7 @@ int utmpname(const char *new_ut_name) } if (static_fd >= 0) { -#ifdef __UCLIBC_HAS_THREADS_NATIVE__ close_not_cancel_no_status(static_fd); -#else - close(static_fd); -#endif static_fd = -1; } __UCLIBC_MUTEX_UNLOCK(utmplock); diff --git a/libc/misc/utmp/wtent.c b/libc/misc/utmp/wtent.c index 9b2763701..5ab743d9b 100644 --- a/libc/misc/utmp/wtent.c +++ b/libc/misc/utmp/wtent.c @@ -13,10 +13,7 @@ #include <utmp.h> #include <fcntl.h> #include <sys/file.h> -#ifdef __UCLIBC_HAS_THREADS_NATIVE__ -#include <errno.h> #include <not-cancel.h> -#endif #if 0 /* This is enabled in uClibc/libutil/logwtmp.c */ @@ -40,7 +37,6 @@ void updwtmp(const char *wtmp_file, const struct utmp *lutmp) { int fd; -#ifdef __UCLIBC_HAS_THREADS_NATIVE__ fd = open_not_cancel(wtmp_file, O_APPEND | O_WRONLY, 0); if (fd >= 0) { if (lockf(fd, F_LOCK, 0) == 0) { @@ -49,14 +45,4 @@ void updwtmp(const char *wtmp_file, const struct utmp *lutmp) close_not_cancel_no_status(fd); } } -#else - fd = open(wtmp_file, O_APPEND | O_WRONLY); - if (fd >= 0) { - if (lockf(fd, F_LOCK, 0) == 0) { - write(fd, lutmp, sizeof(*lutmp)); - lockf(fd, F_ULOCK, 0); - close(fd); - } - } -#endif } diff --git a/libc/stdio/tmpfile.c b/libc/stdio/tmpfile.c index f11595a34..57f252715 100644 --- a/libc/stdio/tmpfile.c +++ b/libc/stdio/tmpfile.c @@ -20,10 +20,7 @@ #include <stdio.h> #include <unistd.h> #include "../misc/internals/tempname.h" -#ifdef __UCLIBC_HAS_THREADS_NATIVE__ -#include <errno.h> #include <not-cancel.h> -#endif /* This returns a new stream opened on a temporary file (generated @@ -47,11 +44,7 @@ FILE * tmpfile (void) (void) remove (buf); if ((f = fdopen (fd, "w+b")) == NULL) -#ifdef __UCLIBC_HAS_THREADS_NATIVE__ close_not_cancel (fd); -#else - close (fd); -#endif return f; } diff --git a/libc/sysdeps/linux/common/not-cancel.h b/libc/sysdeps/linux/common/not-cancel.h new file mode 100644 index 000000000..ebdc6078d --- /dev/null +++ b/libc/sysdeps/linux/common/not-cancel.h @@ -0,0 +1,19 @@ +/* By default we have none. Map the name to the normal functions. */ +#define open_not_cancel(name, flags, mode) \ + open (name, flags, mode) +#define open_not_cancel_2(name, flags) \ + open (name, flags) +#define close_not_cancel(fd) \ + close (fd) +#define close_not_cancel_no_status(fd) \ + (void) close (fd) +#define read_not_cancel(fd, buf, n) \ + read (fd, buf, n) +#define write_not_cancel(fd, buf, n) \ + write (fd, buf, n) +#define writev_not_cancel_no_status(fd, iov, n) \ + (void) writev (fd, iov, n) +#define fcntl_not_cancel(fd, cmd, val) \ + fcntl (fd, cmd, val) +# define waitpid_not_cancel(pid, stat_loc, options) \ + waitpid (pid, stat_loc, options) diff --git a/libc/unistd/daemon.c b/libc/unistd/daemon.c index c270603f7..c3b563179 100644 --- a/libc/unistd/daemon.c +++ b/libc/unistd/daemon.c @@ -46,10 +46,19 @@ #include <paths.h> #include <signal.h> #include <unistd.h> -#ifdef __UCLIBC_HAS_THREADS_NATIVE__ +#include <not-cancel.h> #include <errno.h> + +#ifdef __UCLIBC_HAS_THREADS_NATIVE__ #include <sys/stat.h> -#include <not-cancel.h> +#endif + +#ifdef __UCLIBC_HAS_LFS__ +#define STAT stat64 +#define FSTAT fstat64 +#else +#define STAT stat +#define FSTAT fstat #endif #if defined __USE_BSD || (defined __USE_XOPEN && !defined __USE_UNIX98) @@ -112,35 +121,20 @@ int daemon(int nochdir, int noclose) if (!nochdir) chdir("/"); -#ifndef __UCLIBC_HAS_THREADS_NATIVE__ - if (!noclose && (fd = open(_PATH_DEVNULL, O_RDWR)) != -1) - { -#else if (!noclose) { -#ifdef __UCLIBC_HAS_LFS__ - struct stat64 st; -#else - struct stat st; -#endif + struct STAT st; if ((fd = open_not_cancel(_PATH_DEVNULL, O_RDWR, 0)) != -1 -#ifdef __UCLIBC_HAS_LFS__ - && (__builtin_expect (fstat64 (fd, &st), 0) == 0)) -#else - && (__builtin_expect (fstat (fd, &st), 0) == 0)) -#endif + && (__builtin_expect (FSTAT (fd, &st), 0) == 0)) { if (__builtin_expect (S_ISCHR (st.st_mode), 1) != 0) { -#endif dup2(fd, STDIN_FILENO); dup2(fd, STDOUT_FILENO); dup2(fd, STDERR_FILENO); if (fd > 2) close(fd); -#ifdef __UCLIBC_HAS_THREADS_NATIVE__ - } - else { + } else { /* We must set an errno value since no function call actually failed. */ close_not_cancel_no_status (fd); @@ -148,10 +142,9 @@ int daemon(int nochdir, int noclose) return -1; } } else { - close_not_cancel_no_status (fd); - return -1; + close_not_cancel_no_status (fd); + return -1; } -#endif } return 0; } diff --git a/librt/Makefile.in b/librt/Makefile.in index 1596d3a6f..ea1d03eb8 100644 --- a/librt/Makefile.in +++ b/librt/Makefile.in @@ -30,7 +30,7 @@ librt_CSRC := $(filter-out mq_notify.c timer_create.c timer_delete.c \ $(notdir $(wildcard $(librt_DIR)/*.c))) librt_SSRC := $(wildcard $(librt_DIR)/*.S) librt_OBJ := $(patsubst %.c,$(librt_OUT)/%.o,$(librt_CSRC)) -librt_OBJ += $(patsubst %.S,$(librt_OUT)/%.o,$(librt_SSRC)) +librt_OBJ += $(patsubst $(librt_DIR)/%.S,$(librt_OUT)/%.o,$(librt_SSRC)) else librt_SRC := $(filter-out clock_nanosleep.c clock_getcpuclockid.c clock_gettime.c, \ $(notdir $(wildcard $(librt_DIR)/*.c))) |