From: Mathieu Desnoyers Date: Mon, 12 Jan 2015 21:27:11 +0000 (-0500) Subject: Fix: implement time.h wrapper for FD_ISSET X-Git-Tag: v2.5.3~2 X-Git-Url: https://git.lttng.org./?a=commitdiff_plain;h=985f39d951bbb98cf173f8dc7acc7a4d48f93aeb;p=lttng-modules.git 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 --- diff --git a/lttng-statedump-impl.c b/lttng-statedump-impl.c index cf92aa44..b525a815 100644 --- a/lttng-statedump-impl.c +++ b/lttng-statedump-impl.c @@ -56,6 +56,7 @@ #include "wrapper/irq.h" #include "wrapper/tracepoint.h" #include "wrapper/genhd.h" +#include "wrapper/time.h" #ifdef CONFIG_LTTNG_HAS_LIST_IRQ #include @@ -213,18 +214,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 */