--- /dev/null
+/* liblxcapi
+ *
+ * Copyright © 2018 Christian Brauner <christian.brauner@ubuntu.com>.
+ * Copyright © 2018 Canonical Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2, as
+ * published by the Free Software Foundation.
+ *
+ * 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.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#ifndef __LXC_COMPILER_H
+#define __LXC_COMPILER_H
+
+#include "config.h"
+
+#ifndef thread_local
+#if __STDC_VERSION__ >= 201112L && \
+ !(defined(__STDC_NO_THREADS__) || \
+ (defined(__GNU_LIBRARY__) && __GLIBC__ == 2 && __GLIBC_MINOR__ < 16))
+#define thread_local _Thread_local
+#else
+#define thread_local __thread
+#endif
+#endif
+
+#endif /* __LXC_COMPILER_H */
* This is used in the error calls.
*/
#ifdef HAVE_TLS
-__thread struct lxc_conf *current_config;
+thread_local struct lxc_conf *current_config;
#else
struct lxc_conf *current_config;
#endif
#include <sys/resource.h>
#endif
+#include "compiler.h"
#include "list.h"
#include "ringbuf.h"
#include "start.h" /* for lxc_handler */
size_t buf_size);
#ifdef HAVE_TLS
-extern __thread struct lxc_conf *current_config;
+extern thread_local struct lxc_conf *current_config;
#else
extern struct lxc_conf *current_config;
#endif
#include "initutils.h"
#include "log.h"
#include "macro.h"
+#include "compiler.h"
#ifndef HAVE_STRLCPY
#include "include/strlcpy.h"
/* placed in the thread local storage pool for non-bionic targets */
#ifdef HAVE_TLS
- static __thread const char *values[sizeof(options) / sizeof(options[0])] = { 0 };
+ static thread_local const char *values[sizeof(options) / sizeof(options[0])] = {0};
#else
- static const char *values[sizeof(options) / sizeof(options[0])] = { 0 };
+ static const char *values[sizeof(options) / sizeof(options[0])] = {0};
#endif
/* user_config_path is freed as soon as it is used */