From ad0f251f77f7eb5162b187a91f6ce3dee2280fef Mon Sep 17 00:00:00 2001 From: Mathieu Desnoyers Date: Mon, 12 Jan 2015 16:27:11 -0500 Subject: [PATCH] Fix: implement time.h wrapper for FD_ISSET Kernels v3.4.0 to v3.4.7 still define FD_ISSET, but __FD_ISSET has been removed. Therefore, we cannot use the FD_ISSET define to find out of we need to use the new close_on_exec(). Implement a wrapper based on kernel version detection instead. Fixes #872 Signed-off-by: Mathieu Desnoyers --- lttng-statedump-impl.c | 13 +------------ wrapper/time.h | 43 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 12 deletions(-) create mode 100644 wrapper/time.h diff --git a/lttng-statedump-impl.c b/lttng-statedump-impl.c index 2c7fc178..fcbdfa58 100644 --- a/lttng-statedump-impl.c +++ b/lttng-statedump-impl.c @@ -57,6 +57,7 @@ #include "wrapper/tracepoint.h" #include "wrapper/genhd.h" #include "wrapper/file.h" +#include "wrapper/time.h" #ifdef CONFIG_LTTNG_HAS_LIST_IRQ #include @@ -215,18 +216,6 @@ int lttng_enumerate_network_ip_interface(struct lttng_session *session) } #endif /* CONFIG_INET */ -#ifdef FD_ISSET /* For old kernels lacking close_on_exec() */ -static inline bool lttng_close_on_exec(int fd, const struct fdtable *fdt) -{ - return FD_ISSET(fd, fdt->close_on_exec); -} -#else -static inline bool lttng_close_on_exec(int fd, const struct fdtable *fdt) -{ - return close_on_exec(fd, fdt); -} -#endif - static int lttng_dump_one_fd(const void *p, struct file *file, unsigned int fd) { diff --git a/wrapper/time.h b/wrapper/time.h new file mode 100644 index 00000000..f33791f0 --- /dev/null +++ b/wrapper/time.h @@ -0,0 +1,43 @@ +#ifndef _LTTNG_WRAPPER_TIME_H +#define _LTTNG_WRAPPER_TIME_H + +/* + * wrapper/time.h + * + * Copyright (C) 2015 Mathieu Desnoyers + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; only + * version 2.1 of the License. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include +#include + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,4,0)) + +static inline bool lttng_close_on_exec(int fd, const struct fdtable *fdt) +{ + return close_on_exec(fd, fdt); +} + +#else + +static inline bool lttng_close_on_exec(int fd, const struct fdtable *fdt) +{ + return FD_ISSET(fd, fdt->close_on_exec); +} + +#endif + +#endif /* _LTTNG_WRAPPER_TIME_H */ -- 2.34.1