From a3dac1c3cee169e52c7d644dd565235a1cd833e3 Mon Sep 17 00:00:00 2001 From: Brendan Heading Date: Wed, 22 Jul 2015 23:10:11 +0100 Subject: [PATCH] support for non-glibc libcs Added a TEMP_FAILURE_RETRY macro. This is a glibcism provided by glibc and uclibc, but missing from musl (& possibly other libcs). Upstream-status: submitted (see https://sourceforge.net/p/acpid2/tickets/7/) --- acpi_listen.c | 2 ++ acpid.c | 1 + event.c | 2 ++ input_layer.c | 1 + kacpimon/libnetlink.h | 2 ++ libc_compat.h | 40 ++++++++++++++++++++++++++++++++++++++++ libnetlink.c | 2 ++ netlink.c | 1 + proc.c | 1 + ud_socket.c | 1 + 10 files changed, 53 insertions(+) create mode 100644 libc_compat.h diff --git a/acpi_listen.c b/acpi_listen.c index d0bc175..839e4f9 100644 --- a/acpi_listen.c +++ b/acpi_listen.c @@ -39,6 +39,8 @@ #include "acpid.h" #include "ud_socket.h" +#include "libc_compat.h" + static int handle_cmdline(int *argc, char ***argv); static char *read_line(int fd); diff --git a/acpid.c b/acpid.c index 23f1e58..8555c82 100644 --- a/acpid.c +++ b/acpid.c @@ -41,6 +41,7 @@ #include "input_layer.h" #include "inotify_handler.h" #include "netlink.h" +#include "libc_compat.h" static int handle_cmdline(int *argc, char ***argv); static void close_fds(void); diff --git a/event.c b/event.c index 324078f..3b069a2 100644 --- a/event.c +++ b/event.c @@ -39,6 +39,8 @@ #include "log.h" #include "sock.h" #include "ud_socket.h" +#include "libc_compat.h" + #include "event.h" /* * What is a rule? It's polymorphic, pretty much. diff --git a/input_layer.c b/input_layer.c index 9aa19c6..cbf8085 100644 --- a/input_layer.c +++ b/input_layer.c @@ -42,6 +42,7 @@ #include "log.h" #include "connection_list.h" #include "event.h" +#include "libc_compat.h" #include "input_layer.h" diff --git a/kacpimon/libnetlink.h b/kacpimon/libnetlink.h index 6185cbc..0c61896 100644 --- a/kacpimon/libnetlink.h +++ b/kacpimon/libnetlink.h @@ -7,6 +7,8 @@ #include #include +#include "libc_compat.h" + struct rtnl_handle { int fd; diff --git a/libc_compat.h b/libc_compat.h new file mode 100644 index 0000000..39f2336 --- /dev/null +++ b/libc_compat.h @@ -0,0 +1,40 @@ +/* + * libc_compat.h - implement defs/macros missing from some libcs + * + * Copyright (C) 1999-2000 Andrew Henroid + * Copyright (C) 2001 Sun Microsystems + * Portions Copyright (C) 2004 Tim Hockin (thockin@hockin.org) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef LIBC_COMPAT_H__ +#define LIBC_COMPAT_H__ + +/* Evaluate EXPRESSION, and repeat as long as it returns -1 with `errno' + set to EINTR. This macro is present on glibc/uclibc but may not be in other cases. */ + +#ifndef ____GLIBC__ +#ifndef TEMP_FAILURE_RETRY +#define TEMP_FAILURE_RETRY(expression) \ + (__extension__ \ + ({ long int __result; \ + do __result = (long int) (expression); \ + while (__result == -1L && errno == EINTR); \ + __result; })) +#endif +#endif /* __GLIBC__ */ + +#endif /* LIBC_COMPAT_H__ */ diff --git a/libnetlink.c b/libnetlink.c index e61d417..cc7aedc 100644 --- a/libnetlink.c +++ b/libnetlink.c @@ -24,6 +24,8 @@ #include #include +#include "libc_compat.h" + #include "libnetlink.h" void rtnl_close(struct rtnl_handle *rth) diff --git a/netlink.c b/netlink.c index c64e878..27e3536 100644 --- a/netlink.c +++ b/netlink.c @@ -41,6 +41,7 @@ #include "libnetlink.h" #include "genetlink.h" #include "acpi_genetlink.h" +#include "libc_compat.h" #include "acpi_ids.h" #include "connection_list.h" diff --git a/proc.c b/proc.c index 5bb8fa2..f96b913 100644 --- a/proc.c +++ b/proc.c @@ -31,6 +31,7 @@ #include "log.h" #include "event.h" #include "connection_list.h" +#include "libc_compat.h" #include "proc.h" diff --git a/ud_socket.c b/ud_socket.c index 2790686..1790917 100644 --- a/ud_socket.c +++ b/ud_socket.c @@ -21,6 +21,7 @@ #include "acpid.h" #include "log.h" #include "ud_socket.h" +#include "libc_compat.h" int ud_create_socket(const char *name, mode_t socketmode) -- 2.4.3