]> git.proxmox.com Git - mirror_lxcfs.git/commitdiff
Merge pull request #474 from brauner/2021-09-01.meson
authorStéphane Graber <stgraber@ubuntu.com>
Thu, 2 Sep 2021 15:42:26 +0000 (11:42 -0400)
committerGitHub <noreply@github.com>
Thu, 2 Sep 2021 15:42:26 +0000 (11:42 -0400)
meson: add meson support

67 files changed:
.github/workflows/coverity.yml
.github/workflows/test.yml
.gitignore
Makefile [new file with mode: 0644]
Makefile.am [deleted file]
bootstrap.sh [deleted file]
config/Makefile.am [deleted file]
config/init/Makefile.am [deleted file]
config/init/systemd/Makefile.am [deleted file]
config/init/sysvinit/Makefile.am [deleted file]
config/init/upstart/Makefile.am [deleted file]
configure.ac [deleted file]
doc/Makefile.am [deleted file]
m4/acinclude.m4 [deleted file]
m4/ax_check_compile_flag.m4 [deleted file]
m4/ax_check_link_flag.m4 [deleted file]
m4/ax_pthread.m4 [deleted file]
meson.build [new file with mode: 0644]
meson_options.txt [new file with mode: 0644]
share/Makefile.am [deleted file]
src/Makefile.am [deleted file]
src/bindings.c
src/bindings.h
src/cgroup_fuse.c
src/cgroup_fuse.h
src/cgroups/cgfsng.c
src/cgroups/cgroup.c
src/cgroups/cgroup2_devices.c
src/cgroups/cgroup2_devices.h
src/cgroups/cgroup_utils.c
src/cgroups/cgroup_utils.h
src/lxcfs.c
src/macro.h
src/proc_cpuview.c
src/proc_cpuview.h
src/proc_fuse.c
src/proc_fuse.h
src/proc_loadavg.c
src/proc_loadavg.h
src/sysfs_fuse.c
src/sysfs_fuse.h
src/utils.c
src/utils.h
tests/Makefile.am [deleted file]
tests/cpusetrange.c
tests/main.sh [deleted file]
tests/main.sh.in [new file with mode: 0755]
tests/meson.build [new file with mode: 0644]
tests/test-read.c
tests/test_cgroup [deleted file]
tests/test_cgroup.in [new file with mode: 0755]
tests/test_confinement.sh [deleted file]
tests/test_confinement.sh.in [new file with mode: 0755]
tests/test_meminfo_hierarchy.sh [deleted file]
tests/test_meminfo_hierarchy.sh.in [new file with mode: 0755]
tests/test_proc [deleted file]
tests/test_proc.in [new file with mode: 0755]
tests/test_read_proc.sh [deleted file]
tests/test_read_proc.sh.in [new file with mode: 0755]
tests/test_readdir [deleted file]
tests/test_readdir.in [new file with mode: 0755]
tests/test_reload.sh [deleted file]
tests/test_reload.sh.in [new file with mode: 0755]
tests/test_sigusr2.sh [deleted file]
tests/test_sigusr2.sh.in [new file with mode: 0755]
tests/test_syscalls.c
tools/meson-build.sh [new file with mode: 0755]

index 218e951b6a74a8ff7f1820c267678b1ba83163f4..379be6156c21630b882c2d756b36e85e92a48e88 100644 (file)
@@ -24,16 +24,17 @@ jobs:
           sudo apt-get update -qq
           sudo apt-get install -qq gcc clang
           sudo apt-get install -qq libfuse-dev uuid-runtime
+          sudo apt-get install -qq python3 python3-setuptools
+          sudo pip3 install meson ninja
 
       - name: Run coverity
         run: |
           export PATH="$(pwd)/cov-analysis-linux64/bin:${PATH}"
 
-          # Configure
-          ./bootstrap.sh
-          mkdir build
+          meson setup -Dtests=true -Dinit-script=systemd -Dprefix=/usr build/
+          meson compile -C build
+          ninja -C build
           cd build
-          ../configure --prefix=/usr
 
           # Build
           cov-build --dir cov-int make -j4
index aa5bcedfbd403bd0271f55aa33711628965b4615..19d4803db7397e194843b9526ce2f10cd9212026 100644 (file)
@@ -28,6 +28,8 @@ jobs:
           sudo apt-get update -qq
           sudo apt-get install -qq gcc clang
           sudo apt-get install -qq libfuse-dev uuid-runtime
+          sudo apt-get install -qq python3 python3-setuptools
+          sudo pip3 install meson==0.55.1 ninja
 
       - name: Compiler version
         env:
@@ -39,17 +41,11 @@ jobs:
         env:
           CC: ${{ matrix.compiler }}
         run: |
-          # Configure
-          ./bootstrap.sh
-          CFLAGS='-g -O0 -std=c11 -DDEBUG -DVERBOSE -DRESOLVE_NOW -Wall -Werror' ./configure --prefix=/usr
-
-          # Build
-          make -j4
-          (cd tests && make tests)
-
+          meson setup -Dtests=true -Dinit-script=systemd -Dprefix=/usr build/
+          ninja -C build
       - name: Test
         env:
           CC: ${{ matrix.compiler }}
         run: |
           echo 1 | sudo tee /sys/fs/cgroup/cpuset/cgroup.clone_children || true
-          sudo -E PATH="${PATH}" LD_LIBRARY_PATH="${LD_LIBRARY_PATH}" tests/main.sh
+          sudo -E PATH="${PATH}" LD_LIBRARY_PATH="${LD_LIBRARY_PATH}" build/tests/main.sh
index da934c49e6ddd63db10e53c623b0b52f9892854d..f3af2b694ebe4bbb5091a29612e0943dfd75279a 100644 (file)
@@ -1,34 +1,15 @@
-.deps/
 INSTALL
-Makefile
-Makefile.in
-aclocal.m4
-autom4te.cache/
-compile
-config.guess
-config.h
-config.h.in
-config.log
-config.status
-config.sub
-configure
-depcomp
-install-sh
-libtool
-ltmain.sh
 lxcfs
-m4/
 missing
-stamp-h1
 lxcfs.1
 lxcfs.spec
 share/00-lxcfs.conf
 share/lxc.mount.hook
 share/lxc.reboot.hook
-tests/cpusetrange
+tests/test-cpusetrange
 tests/test-read
 lxcfs_mkdir
-tests/test_syscalls
+tests/test-syscalls
 config/init/systemd/lxcfs.service
 *.o
 tags
diff --git a/Makefile b/Makefile
new file mode 100644 (file)
index 0000000..eeb0dbc
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,7 @@
+# SPDX-License-Identifier: LGPL-2.1-or-later
+
+all:
+       ninja -C build
+
+install:
+       DESTDIR=$(DESTDIR) ninja -C build install
diff --git a/Makefile.am b/Makefile.am
deleted file mode 100644 (file)
index 0c0ae0b..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-ACLOCAL_AMFLAGS = -I m4
-
-LIBTOOL_DEPS = @LIBTOOL_DEPS@
-SUBDIRS = config share src tests doc
-DIST_SUBDIRS = config share src tests doc
-
-EXTRA_DIST = lxcfs.spec
-
-libtool: $(LIBTOOL_DEPS)
-       $(SHELL) ./config.status libtool
diff --git a/bootstrap.sh b/bootstrap.sh
deleted file mode 100755 (executable)
index 97ceeda..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-# SPDX-License-Identifier: LGPL-2.1-or-later
-
-set -x
-set -e
-
-test -d autom4te.cache && rm -rf autom4te.cache
-libtoolize || exit 1
-aclocal -I m4 || exit 1
-autoheader || exit 1
-autoconf || exit 1
-automake --add-missing --copy || exit 1
diff --git a/config/Makefile.am b/config/Makefile.am
deleted file mode 100644 (file)
index a89fbfb..0000000
+++ /dev/null
@@ -1 +0,0 @@
-SUBDIRS = init
diff --git a/config/init/Makefile.am b/config/init/Makefile.am
deleted file mode 100644 (file)
index e2ffe28..0000000
+++ /dev/null
@@ -1 +0,0 @@
-SUBDIRS = systemd sysvinit upstart
diff --git a/config/init/systemd/Makefile.am b/config/init/systemd/Makefile.am
deleted file mode 100644 (file)
index 79e96f5..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-EXTRA_DIST = lxcfs.service
-
-if INIT_SCRIPT_SYSTEMD
-SYSTEMD_UNIT_DIR = /lib/systemd/system
-
-install-systemd: lxcfs.service
-       $(MKDIR_P) $(DESTDIR)$(SYSTEMD_UNIT_DIR)
-       $(INSTALL_DATA) lxcfs.service $(DESTDIR)$(SYSTEMD_UNIT_DIR)/
-
-uninstall-systemd:
-       rm -f $(DESTDIR)$(SYSTEMD_UNIT_DIR)/lxcfs.service
-       rmdir $(DESTDIR)$(SYSTEMD_UNIT_DIR) || :
-
-install-data-local: install-systemd
-uninstall-local: uninstall-systemd
-endif
diff --git a/config/init/sysvinit/Makefile.am b/config/init/sysvinit/Makefile.am
deleted file mode 100644 (file)
index 31ad09b..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-EXTRA_DIST = lxcfs
-
-if INIT_SCRIPT_SYSV
-install-sysvinit: lxcfs
-       $(MKDIR_P) $(DESTDIR)$(sysconfdir)/rc.d/init.d
-       $(INSTALL_SCRIPT) lxcfs $(DESTDIR)$(sysconfdir)/rc.d/init.d/lxcfs
-
-uninstall-sysvinit:
-       rm -f $(DESTDIR)$(sysconfdir)/rc.d/init.d/lxcfs
-       rmdir $(DESTDIR)$(sysconfdir)/rc.d/init.d || :
-
-install-data-local: install-sysvinit
-uninstall-local: uninstall-sysvinit
-endif
diff --git a/config/init/upstart/Makefile.am b/config/init/upstart/Makefile.am
deleted file mode 100644 (file)
index 8c87562..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-EXTRA_DIST = lxcfs.conf
-
-if INIT_SCRIPT_UPSTART
-install-upstart: lxcfs.conf
-       $(MKDIR_P) $(DESTDIR)$(sysconfdir)/init/
-       $(INSTALL_DATA) lxcfs.conf $(DESTDIR)$(sysconfdir)/init/
-
-uninstall-upstart:
-       rm -f $(DESTDIR)$(sysconfdir)/init/lxcfs.conf
-       rmdir $(DESTDIR)$(sysconfdir)/init || :
-
-install-data-local: install-upstart
-uninstall-local: uninstall-upstart
-endif
diff --git a/configure.ac b/configure.ac
deleted file mode 100644 (file)
index 90bcd8d..0000000
+++ /dev/null
@@ -1,283 +0,0 @@
-AC_PREREQ([2.69])
-
-AC_INIT([lxcfs], [4.0.0], [lxc-devel@lists.linuxcontainers.org])
-
-# We need pkg-config
-PKG_PROG_PKG_CONFIG
-
-AC_CONFIG_SRCDIR([configure.ac])
-AC_CONFIG_AUX_DIR([config])
-AC_CONFIG_HEADERS([config.h])
-
-AC_SUBST(ACLOCAL_AMFLAGS, "-I m4")
-AC_CONFIG_MACRO_DIR([m4])
-AM_INIT_AUTOMAKE([-Wall -Werror -Wno-portability subdir-objects])
-AC_CANONICAL_HOST
-AM_PROG_CC_C_O
-AC_USE_SYSTEM_EXTENSIONS
-
-# Test if we have a new enough compiler.
-AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
-#define GCC_VERSION \
-       (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)
-
-#define CLANG_VERSION \
-       (__clang_major__ * 10000 + __clang_minor__ * 100 + __clang_patchlevel__)
-
-#if GCC_VERSION < 40700 && CLANG_VERSION < 10000
-#error Sorry, your compiler is too old - please upgrade it
-#endif
-       ]])], [valid_compiler=yes], [valid_compiler=no])
-if test "x$valid_compiler" = "xno"; then
-       AC_MSG_ERROR([Sorry, your compiler is too old - please upgrade it])
-fi
-
-# libtool
-LT_INIT
-AC_SUBST([LIBTOOL_DEPS])
-
-AC_CONFIG_FILES([
-       Makefile
-       lxcfs.spec
-
-       config/Makefile
-       config/init/Makefile
-       config/init/systemd/Makefile
-       config/init/systemd/lxcfs.service
-       config/init/sysvinit/Makefile
-       config/init/upstart/Makefile
-
-       doc/Makefile
-
-       share/Makefile
-       share/00-lxcfs.conf
-       share/lxc.mount.hook
-       share/lxc.reboot.hook
-
-       src/Makefile
-
-       tests/Makefile ])
-
-AC_CHECK_LIB(pthread, main)
-
-PKG_CHECK_MODULES(FUSE, fuse, [], [
-       PKG_CHECK_MODULES(FUSE, fuse3, [AC_DEFINE([HAVE_FUSE3], [1], [Use fuse3])])
-])
-
-AC_PATH_PROG(HELP2MAN, help2man, false // No help2man //)
-AM_CONDITIONAL([HAVE_HELP2MAN], [test "x$HELP2MAN" != "xfalse // No help2man //" ])
-
-AC_ARG_WITH([runtime-path],
-       [AC_HELP_STRING(
-               [--with-runtime-path=dir],
-               [runtime directory (default: /run)]
-       )], [], [with_runtime_path=['/run']])
-
-AS_AC_EXPAND(RUNTIME_PATH, "$with_runtime_path")
-AS_AC_EXPAND(LXCFSSHAREDIR, "$datarootdir/lxcfs")
-AS_AC_EXPAND(LXCCONFDIR, "$datarootdir/lxc/config/common.conf.d")
-AS_AC_EXPAND(LXCFSTARGETDIR, "$localstatedir/lib/lxcfs")
-
-# Detect the distribution. This is used for the default configuration and
-# for some distro-specific build options.
-AC_MSG_CHECKING([host distribution])
-AC_ARG_WITH(distro, AS_HELP_STRING([--with-distro=DISTRO], [Specify the Linux distribution to target: One of redhat, oracle, centos, fedora, suse, gentoo, debian, arch, slackware, paldo, openmandriva or pardus.]))
-if type lsb_release >/dev/null 2>&1 && test "z$with_distro" = "z"; then
-       with_distro=`lsb_release -is`
-fi
-
-if test "z$with_distro" = "z"; then
-       AC_CHECK_FILE(/etc/redhat-release,with_distro="redhat")
-       AC_CHECK_FILE(/etc/oracle-release,with_distro="oracle")
-       AC_CHECK_FILE(/etc/centos-release,with_distro="centos")
-       AC_CHECK_FILE(/etc/fedora-release,with_distro="fedora")
-       AC_CHECK_FILE(/etc/SuSE-release,with_distro="suse")
-       AC_CHECK_FILE(/etc/gentoo-release,with_distro="gentoo")
-       AC_CHECK_FILE(/etc/debian_version,with_distro="debian")
-       AC_CHECK_FILE(/etc/arch-release,with_distro="arch")
-       AC_CHECK_FILE(/etc/slackware-version,with_distro="slackware")
-       AC_CHECK_FILE(/etc/frugalware-release,with_distro="frugalware")
-       AC_CHECK_FILE(/etc/mandrakelinux-release, with_distro="openmandriva")
-       AC_CHECK_FILE(/etc/mandriva-release,with_distro="openmandriva")
-       AC_CHECK_FILE(/etc/pardus-release,with_distro="pardus")
-       AC_CHECK_FILE(/etc/pld-release,with_distro="pld")
-fi
-
-with_distro=`echo ${with_distro} | tr '[[:upper:]]' '[[:lower:]]'`
-
-if test "z$with_distro" = "z"; then
-       with_distro="unknown"
-fi
-
-case $with_distro in
-       ubuntu)
-               distroconf=default.conf.ubuntu
-               ;;
-       redhat|centos|fedora|oracle|oracleserver|pld)
-               distroconf=default.conf.libvirt
-               ;;
-       *)
-               distroconf=default.conf.unknown
-               ;;
-esac
-
-AC_MSG_RESULT([$with_distro])
-AM_CONDITIONAL([HAVE_DEBIAN], [test x"$with_distro" = "xdebian" -o x"$with_distro" = "xubuntu"])
-AM_CONDITIONAL([DISTRO_UBUNTU], [test "x$with_distro" = "xubuntu"])
-
-# Check for init system type
-AC_MSG_CHECKING([for init system type])
-AC_ARG_WITH([init-script],
-           [AC_HELP_STRING([--with-init-script@<:@=TYPE@<:@,TYPE,...@:>@@:>@],
-                           [Type(s) of init script to install: bsd, openrc, sysvinit, systemd, upstart,
-                            distro @<:@default=distro@:>@])],[],[with_init_script=distro])
-case "$with_init_script" in
-       distro)
-               case $with_distro in
-                       fedora)
-                               init_script=systemd
-                               ;;
-                       redhat|centos|oracle|oracleserver)
-                               init_script=sysvinit
-                               ;;
-                       debian)
-                               init_script=upstart,systemd,sysvinit
-                               ;;
-                       ubuntu)
-                               init_script=upstart,systemd,sysvinit
-                               ;;
-                       pld)
-                               init_script=systemd,sysvinit
-                               ;;
-                       slackware)
-                               echo -n "Warning: bsd init job not yet implemented"
-                               init_script=
-                               ;;
-                        gentoo)
-                               echo -n "Warning: openrc init job not yet implemented"
-                               init_script=
-                               ;;
-                       *)
-                               echo -n "Linux distribution init system unknown."
-                               init_script=
-                               ;;
-               esac
-               ;;
-       *)
-               init_script=$with_init_script
-               ;;
-esac
-
-# Check valid init systems were given, run in subshell so we don't mess up IFS
-(IFS="," ; for init_sys in $init_script;
-do
-       case "$init_sys" in
-               none|bsd|openrc|sysvinit|systemd|upstart)
-                       ;;
-               *)
-                       exit 1
-                       ;;
-       esac
-done) || AC_MSG_ERROR([Unknown init system type in $init_script])
-
-AM_CONDITIONAL([INIT_SCRIPT_BSD], [echo "$init_script" |grep -q "bsd"])
-AM_CONDITIONAL([INIT_SCRIPT_OPENRC], [echo "$init_script" |grep -q "openrc"])
-AM_CONDITIONAL([INIT_SCRIPT_SYSV], [echo "$init_script" |grep -q "sysvinit"])
-AM_CONDITIONAL([INIT_SCRIPT_SYSTEMD], [echo "$init_script" |grep -q "systemd"])
-AM_CONDITIONAL([INIT_SCRIPT_UPSTART], [echo "$init_script" |grep -q "upstart"])
-AC_MSG_RESULT($init_script)
-
-AC_SUBST([lxcfsdir], "${libdir}/lxcfs")
-
-# Rootfs path, where the container mount structure is assembled
-AC_ARG_WITH([rootfs-path],
-       [AC_HELP_STRING(
-               [--with-rootfs-path=dir],
-               [lxc rootfs mount point]
-       )], [], [with_rootfs_path=['${libdir}/lxc/rootfs']])
-
-AS_AC_EXPAND(LIBDIR, "$libdir")
-
-AC_CHECK_FUNCS([strlcpy],
-       AM_CONDITIONAL(HAVE_STRLCPY, true)
-       AC_DEFINE(HAVE_STRLCPY,1,[Have strlcpy]),
-       AM_CONDITIONAL(HAVE_STRLCPY, false))
-
-AC_CHECK_FUNCS([strlcat],
-       AM_CONDITIONAL(HAVE_STRLCAT, true)
-       AC_DEFINE(HAVE_STRLCAT,1,[Have strlcat]),
-       AM_CONDITIONAL(HAVE_STRLCAT, false))
-
-AC_CHECK_FUNCS([pidfd_open],
-       AM_CONDITIONAL(HAVE_PIDFD_OPEN, true)
-       AC_DEFINE(HAVE_PIDFD_OPEN,1,[Supports pidfd_open]),
-       AM_CONDITIONAL(HAVE_PIDFD_OPEN, false))
-
-AC_CHECK_FUNCS([pidfd_send_signal],
-       AM_CONDITIONAL(HAVE_PIDFD_SEND_SIGNAL, true)
-       AC_DEFINE(HAVE_PIDFD_SEND_SIGNAL,1,[Supports pidfd_send_signal]),
-       AM_CONDITIONAL(HAVE_PIDFD_SEND_SIGNAL, false))
-
-AX_CHECK_COMPILE_FLAG([-fdiagnostics-color], [CFLAGS="$CFLAGS -fdiagnostics-color"],,[-Werror])
-AX_CHECK_COMPILE_FLAG([-Wimplicit-fallthrough=5], [CFLAGS="$CFLAGS -Wimplicit-fallthrough=5"],,[-Werror])
-AX_CHECK_COMPILE_FLAG([-Wcast-align], [CFLAGS="$CFLAGS -Wcast-align"],,[-Werror])
-AX_CHECK_COMPILE_FLAG([-Wstrict-prototypes], [CFLAGS="$CFLAGS -Wstrict-prototypes"],,[-Werror])
-AX_CHECK_COMPILE_FLAG([-fno-strict-aliasing], [CFLAGS="$CFLAGS -fno-strict-aliasing"],,[-Werror])
-AX_CHECK_COMPILE_FLAG([-fstack-clash-protection], [CFLAGS="$CFLAGS -fstack-clash-protection"],,[-Werror])
-AX_CHECK_LINK_FLAG([-fstack-protector-strong], [CFLAGS="$CFLAGS -fstack-protector-strong"],,[-Werror])
-AX_CHECK_LINK_FLAG([--param=ssp-buffer-size=4], [CFLAGS="$CFLAGS --param=ssp-buffer-size=4"],,[-Werror])
-AX_CHECK_COMPILE_FLAG([-g], [CFLAGS="$CFLAGS -g"],,[-Werror])
-AX_CHECK_COMPILE_FLAG([--mcet -fcf-protection], [CFLAGS="$CFLAGS --mcet -fcf-protection"],,[-Werror])
-AX_CHECK_COMPILE_FLAG([-Werror=implicit-function-declaration], [CFLAGS="$CFLAGS -Werror=implicit-function-declaration"],,[-Werror])
-AX_CHECK_COMPILE_FLAG([-Wlogical-op], [CFLAGS="$CFLAGS -Wlogical-op"],,[-Werror])
-AX_CHECK_COMPILE_FLAG([-Wmissing-include-dirs], [CFLAGS="$CFLAGS -Wmissing-include-dirs"],,[-Werror])
-AX_CHECK_COMPILE_FLAG([-Wold-style-definition], [CFLAGS="$CFLAGS -Wold-style-definition"],,[-Werror])
-AX_CHECK_COMPILE_FLAG([-Winit-self], [CFLAGS="$CFLAGS -Winit-self"],,[-Werror])
-AX_CHECK_COMPILE_FLAG([-Wunused-but-set-variable], [CFLAGS="$CFLAGS -Wunused-but-set-variable"],,[-Werror])
-AX_CHECK_COMPILE_FLAG([-Wfloat-equal], [CFLAGS="$CFLAGS -Wfloat-equal"],,[-Werror])
-AX_CHECK_COMPILE_FLAG([-Wsuggest-attribute=noreturn], [CFLAGS="$CFLAGS -Wsuggest-attribute=noreturn"],,[-Werror])
-AX_CHECK_COMPILE_FLAG([-Werror=return-type], [CFLAGS="$CFLAGS -Werror=return-type"],,[-Werror])
-AX_CHECK_COMPILE_FLAG([-Werror=incompatible-pointer-types], [CFLAGS="$CFLAGS -Werror=incompatible-pointer-types"],,[-Werror])
-AX_CHECK_COMPILE_FLAG([-Wformat=2], [CFLAGS="$CFLAGS -Wformat=2"],,[-Werror])
-AX_CHECK_COMPILE_FLAG([-Wshadow], [CFLAGS="$CFLAGS -Wshadow"],,[-Werror])
-AX_CHECK_COMPILE_FLAG([-Wendif-labels], [CFLAGS="$CFLAGS -Wendif-labels"],,[-Werror])
-AX_CHECK_COMPILE_FLAG([-Werror=overflow], [CFLAGS="$CFLAGS -Werror=overflow"],,[-Werror])
-AX_CHECK_COMPILE_FLAG([-fdiagnostics-show-option], [CFLAGS="$CFLAGS -fdiagnostics-show-option"],,[-Werror])
-AX_CHECK_COMPILE_FLAG([-Werror=shift-count-overflow], [CFLAGS="$CFLAGS -Werror=shift-count-overflow"],,[-Werror])
-AX_CHECK_COMPILE_FLAG([-Werror=shift-overflow=2], [CFLAGS="$CFLAGS -Werror=shift-overflow=2"],,[-Werror])
-AX_CHECK_COMPILE_FLAG([-Wdate-time], [CFLAGS="$CFLAGS -Wdate-time"],,[-Werror])
-AX_CHECK_COMPILE_FLAG([-Wnested-externs], [CFLAGS="$CFLAGS -Wnested-externs"],,[-Werror])
-AX_CHECK_COMPILE_FLAG([-fasynchronous-unwind-tables], [CFLAGS="$CFLAGS -fasynchronous-unwind-tables"],,[-Werror])
-AX_CHECK_COMPILE_FLAG([-pipe], [CFLAGS="$CFLAGS -pipe"],,[-Werror])
-AX_CHECK_COMPILE_FLAG([-fexceptions], [CFLAGS="$CFLAGS -fexceptions"],,[-Werror])
-
-CFLAGS="$CFLAGS -fvisibility=hidden -Wvla -std=gnu11"
-AX_CHECK_LINK_FLAG([-z relro], [LDFLAGS="$LDFLAGS -z relro"],,[])
-AX_CHECK_LINK_FLAG([-z now], [LDFLAGS="$LDFLAGS -z now"],,[])
-
-# Build with ASAN commands
-AC_ARG_ENABLE([asan],
-       [AS_HELP_STRING([--enable-asan], [build with address sanitizer enabled [default=no]])],
-       [enable_asan=$enableval], [enable_asan=no])
-AM_CONDITIONAL([ENABLE_ASAN], [test "x$enable_asan" = "xyes"])
-
-# Build with UBSAN commands
-AC_ARG_ENABLE([ubsan],
-       [AS_HELP_STRING([--enable-ubsan], [build with ubsan sanitizer enabled [default=no]])],
-       [enable_asan=$enableval], [enable_ubsan=no])
-AM_CONDITIONAL([ENABLE_UBSAN], [test "x$enable_ubsan" = "xyes"])
-
-AC_OUTPUT
-
-# Configuration overview
-cat << EOF
-
-----------------------------
-Environment:
- - compiler: $CC
-
-Debugging:
- - tests: $enable_tests
- - ASAN: $enable_asan
- - mutex debugging: $enable_mutex_debugging
-EOF
diff --git a/doc/Makefile.am b/doc/Makefile.am
deleted file mode 100644 (file)
index 022ea22..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-EXTRA_DIST = lxcfs.man.add
-
-if HAVE_HELP2MAN
-man_MANS = lxcfs.1
-
-lxcfs.1: ../src/lxcfs lxcfs.man.add
-       $(HELP2MAN) -n "System virtualization filesystem for containers" --no-discard-stderr -s 1 -I lxcfs.man.add -N ../src/lxcfs > lxcfs.1
-endif
diff --git a/m4/acinclude.m4 b/m4/acinclude.m4
deleted file mode 100644 (file)
index d718b5e..0000000
+++ /dev/null
@@ -1,137 +0,0 @@
-dnl as-ac-expand.m4 0.2.0
-dnl autostars m4 macro for expanding directories using configure's prefix
-dnl thomas@apestaart.org
-dnl
-
-dnl AS_AC_EXPAND(VAR, CONFIGURE_VAR)
-dnl example
-dnl AS_AC_EXPAND(SYSCONFDIR, $sysconfdir)
-dnl will set SYSCONFDIR to /usr/local/etc if prefix=/usr/local
-
-AC_DEFUN([AS_AC_EXPAND],
-[
-    EXP_VAR=[$1]
-    FROM_VAR=[$2]
-
-    dnl first expand prefix and exec_prefix if necessary
-    prefix_save=$prefix
-    exec_prefix_save=$exec_prefix
-
-    dnl if no prefix given, then use /usr/local, the default prefix
-    if test "x$prefix" = "xNONE"; then
-        prefix="$ac_default_prefix"
-    fi
-    dnl if no exec_prefix given, then use prefix
-    if test "x$exec_prefix" = "xNONE"; then
-        exec_prefix=$prefix
-    fi
-
-    full_var="$FROM_VAR"
-    dnl loop until it doesn't change anymore
-    while true; do
-        new_full_var="`eval echo $full_var`"
-        if test "x$new_full_var" = "x$full_var"; then break; fi
-        full_var=$new_full_var
-    done
-
-    dnl clean up
-    full_var=$new_full_var
-    AC_SUBST([$1], "$full_var")
-
-    dnl restore prefix and exec_prefix
-    prefix=$prefix_save
-    exec_prefix=$exec_prefix_save
-])
-
-dnl Available from the GNU Autoconf Macro Archive at:
-dnl http://www.gnu.org/software/ac-archive/htmldoc/ax_compare_version.html
-AC_DEFUN([AX_COMPARE_VERSION], [
-# Used to indicate true or false condition
-ax_compare_version=false
-         # Convert the two version strings to be compared into a format that
-  # allows a simple string comparison.  The end result is that a version
-  # string of the form 1.12.5-r617 will be converted to the form
-  # 0001001200050617.  In other words, each number is zero padded to four
-  # digits, and non digits are removed.
-  AS_VAR_PUSHDEF([A],[ax_compare_version_A])
-  A=`echo "$1" | sed -e 's/\([[0-9]]*\)/Z\1Z/g' \
-                     -e 's/Z\([[0-9]]\)Z/Z0\1Z/g' \
-                     -e 's/Z\([[0-9]][[0-9]]\)Z/Z0\1Z/g' \
-                     -e 's/Z\([[0-9]][[0-9]][[0-9]]\)Z/Z0\1Z/g' \
-                     -e 's/[[^0-9]]//g'`
-
-  AS_VAR_PUSHDEF([B],[ax_compare_version_B])
-  B=`echo "$3" | sed -e 's/\([[0-9]]*\)/Z\1Z/g' \
-                     -e 's/Z\([[0-9]]\)Z/Z0\1Z/g' \
-                     -e 's/Z\([[0-9]][[0-9]]\)Z/Z0\1Z/g' \
-                     -e 's/Z\([[0-9]][[0-9]][[0-9]]\)Z/Z0\1Z/g' \
-                     -e 's/[[^0-9]]//g'`
-
-  dnl # In the case of le, ge, lt, and gt, the strings are sorted as necessary
-  dnl # then the first line is used to determine if the condition is true.
-  dnl # The sed right after the echo is to remove any indented white space.
-  m4_case(m4_tolower($2),
-  [lt],[
-    ax_compare_version=`echo "x$A
-x$B" | sed 's/^ *//' | sort -r | sed "s/x${A}/false/;s/x${B}/true/;1q"`
-  ],
-  [gt],[
-    ax_compare_version=`echo "x$A
-x$B" | sed 's/^ *//' | sort | sed "s/x${A}/false/;s/x${B}/true/;1q"`
-  ],
-  [le],[
-    ax_compare_version=`echo "x$A
-x$B" | sed 's/^ *//' | sort | sed "s/x${A}/true/;s/x${B}/false/;1q"`
-  ],
-  [ge],[
-    ax_compare_version=`echo "x$A
-x$B" | sed 's/^ *//' | sort -r | sed "s/x${A}/true/;s/x${B}/false/;1q"`
-  ],[
-    dnl Split the operator from the subversion count if present.
-    m4_bmatch(m4_substr($2,2),
-    [0],[
-      # A count of zero means use the length of the shorter version.
-      # Determine the number of characters in A and B.
-      ax_compare_version_len_A=`echo "$A" | awk '{print(length)}'`
-      ax_compare_version_len_B=`echo "$B" | awk '{print(length)}'`
-
-      # Set A to no more than B's length and B to no more than A's length.
-      A=`echo "$A" | sed "s/\(.\{$ax_compare_version_len_B\}\).*/\1/"`
-      B=`echo "$B" | sed "s/\(.\{$ax_compare_version_len_A\}\).*/\1/"`
-    ],
-    [[0-9]+],[
-      # A count greater than zero means use only that many subversions
-      A=`echo "$A" | sed "s/\(\([[0-9]]\{4\}\)\{m4_substr($2,2)\}\).*/\1/"`
-      B=`echo "$B" | sed "s/\(\([[0-9]]\{4\}\)\{m4_substr($2,2)\}\).*/\1/"`
-    ],
-    [.+],[
-      AC_WARNING(
-        [illegal OP numeric parameter: $2])
-    ],[])
-
-    # Pad zeros at end of numbers to make same length.
-    ax_compare_version_tmp_A="$A`echo $B | sed 's/./0/g'`"
-    B="$B`echo $A | sed 's/./0/g'`"
-    A="$ax_compare_version_tmp_A"
-
-    # Check for equality or inequality as necessary.
-    m4_case(m4_tolower(m4_substr($2,0,2)),
-    [eq],[
-      test "x$A" = "x$B" && ax_compare_version=true
-    ],
-    [ne],[
-      test "x$A" != "x$B" && ax_compare_version=true
-    ],[
-      AC_WARNING([illegal OP parameter: $2])
-    ])
-  ])
-
-  AS_VAR_POPDEF([A])dnl
-  AS_VAR_POPDEF([B])dnl
-
-  dnl # Execute ACTION-IF-TRUE / ACTION-IF-FALSE.
-  if test "$ax_compare_version" = "true" ; then
-    m4_ifvaln([$4],[$4],[:])dnl
-    m4_ifvaln([$5],[else $5])dnl
-  fi
-]) dnl AX_COMPARE_VERSION
diff --git a/m4/ax_check_compile_flag.m4 b/m4/ax_check_compile_flag.m4
deleted file mode 100644 (file)
index bd753b3..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-# ===========================================================================
-#  https://www.gnu.org/software/autoconf-archive/ax_check_compile_flag.html
-# ===========================================================================
-#
-# SYNOPSIS
-#
-#   AX_CHECK_COMPILE_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS], [INPUT])
-#
-# DESCRIPTION
-#
-#   Check whether the given FLAG works with the current language's compiler
-#   or gives an error.  (Warnings, however, are ignored)
-#
-#   ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on
-#   success/failure.
-#
-#   If EXTRA-FLAGS is defined, it is added to the current language's default
-#   flags (e.g. CFLAGS) when the check is done.  The check is thus made with
-#   the flags: "CFLAGS EXTRA-FLAGS FLAG".  This can for example be used to
-#   force the compiler to issue an error when a bad flag is given.
-#
-#   INPUT gives an alternative input source to AC_COMPILE_IFELSE.
-#
-#   NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this
-#   macro in sync with AX_CHECK_{PREPROC,LINK}_FLAG.
-#
-# LICENSE
-#
-#   Copyright (c) 2008 Guido U. Draheim <guidod@gmx.de>
-#   Copyright (c) 2011 Maarten Bosmans <mkbosmans@gmail.com>
-#
-#   Copying and distribution of this file, with or without modification, are
-#   permitted in any medium without royalty provided the copyright notice
-#   and this notice are preserved.  This file is offered as-is, without any
-#   warranty.
-
-#serial 6
-
-AC_DEFUN([AX_CHECK_COMPILE_FLAG],
-[AC_PREREQ(2.64)dnl for _AC_LANG_PREFIX and AS_VAR_IF
-AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_[]_AC_LANG_ABBREV[]flags_$4_$1])dnl
-AC_CACHE_CHECK([whether _AC_LANG compiler accepts $1], CACHEVAR, [
-  ax_check_save_flags=$[]_AC_LANG_PREFIX[]FLAGS
-  _AC_LANG_PREFIX[]FLAGS="$[]_AC_LANG_PREFIX[]FLAGS $4 $1"
-  AC_COMPILE_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])],
-    [AS_VAR_SET(CACHEVAR,[yes])],
-    [AS_VAR_SET(CACHEVAR,[no])])
-  _AC_LANG_PREFIX[]FLAGS=$ax_check_save_flags])
-AS_VAR_IF(CACHEVAR,yes,
-  [m4_default([$2], :)],
-  [m4_default([$3], :)])
-AS_VAR_POPDEF([CACHEVAR])dnl
-])dnl AX_CHECK_COMPILE_FLAGS
diff --git a/m4/ax_check_link_flag.m4 b/m4/ax_check_link_flag.m4
deleted file mode 100644 (file)
index 03a30ce..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-# ===========================================================================
-#    https://www.gnu.org/software/autoconf-archive/ax_check_link_flag.html
-# ===========================================================================
-#
-# SYNOPSIS
-#
-#   AX_CHECK_LINK_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS], [INPUT])
-#
-# DESCRIPTION
-#
-#   Check whether the given FLAG works with the linker or gives an error.
-#   (Warnings, however, are ignored)
-#
-#   ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on
-#   success/failure.
-#
-#   If EXTRA-FLAGS is defined, it is added to the linker's default flags
-#   when the check is done.  The check is thus made with the flags: "LDFLAGS
-#   EXTRA-FLAGS FLAG".  This can for example be used to force the linker to
-#   issue an error when a bad flag is given.
-#
-#   INPUT gives an alternative input source to AC_LINK_IFELSE.
-#
-#   NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this
-#   macro in sync with AX_CHECK_{PREPROC,COMPILE}_FLAG.
-#
-# LICENSE
-#
-#   Copyright (c) 2008 Guido U. Draheim <guidod@gmx.de>
-#   Copyright (c) 2011 Maarten Bosmans <mkbosmans@gmail.com>
-#
-#   Copying and distribution of this file, with or without modification, are
-#   permitted in any medium without royalty provided the copyright notice
-#   and this notice are preserved.  This file is offered as-is, without any
-#   warranty.
-
-#serial 6
-
-AC_DEFUN([AX_CHECK_LINK_FLAG],
-[AC_PREREQ(2.64)dnl for _AC_LANG_PREFIX and AS_VAR_IF
-AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_ldflags_$4_$1])dnl
-AC_CACHE_CHECK([whether the linker accepts $1], CACHEVAR, [
-  ax_check_save_flags=$LDFLAGS
-  LDFLAGS="$LDFLAGS $4 $1"
-  AC_LINK_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])],
-    [AS_VAR_SET(CACHEVAR,[yes])],
-    [AS_VAR_SET(CACHEVAR,[no])])
-  LDFLAGS=$ax_check_save_flags])
-AS_VAR_IF(CACHEVAR,yes,
-  [m4_default([$2], :)],
-  [m4_default([$3], :)])
-AS_VAR_POPDEF([CACHEVAR])dnl
-])dnl AX_CHECK_LINK_FLAGS
diff --git a/m4/ax_pthread.m4 b/m4/ax_pthread.m4
deleted file mode 100644 (file)
index 5fbf9fe..0000000
+++ /dev/null
@@ -1,485 +0,0 @@
-# ===========================================================================
-#        https://www.gnu.org/software/autoconf-archive/ax_pthread.html
-# ===========================================================================
-#
-# SYNOPSIS
-#
-#   AX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
-#
-# DESCRIPTION
-#
-#   This macro figures out how to build C programs using POSIX threads. It
-#   sets the PTHREAD_LIBS output variable to the threads library and linker
-#   flags, and the PTHREAD_CFLAGS output variable to any special C compiler
-#   flags that are needed. (The user can also force certain compiler
-#   flags/libs to be tested by setting these environment variables.)
-#
-#   Also sets PTHREAD_CC to any special C compiler that is needed for
-#   multi-threaded programs (defaults to the value of CC otherwise). (This
-#   is necessary on AIX to use the special cc_r compiler alias.)
-#
-#   NOTE: You are assumed to not only compile your program with these flags,
-#   but also to link with them as well. For example, you might link with
-#   $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS
-#
-#   If you are only building threaded programs, you may wish to use these
-#   variables in your default LIBS, CFLAGS, and CC:
-#
-#     LIBS="$PTHREAD_LIBS $LIBS"
-#     CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
-#     CC="$PTHREAD_CC"
-#
-#   In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute constant
-#   has a nonstandard name, this macro defines PTHREAD_CREATE_JOINABLE to
-#   that name (e.g. PTHREAD_CREATE_UNDETACHED on AIX).
-#
-#   Also HAVE_PTHREAD_PRIO_INHERIT is defined if pthread is found and the
-#   PTHREAD_PRIO_INHERIT symbol is defined when compiling with
-#   PTHREAD_CFLAGS.
-#
-#   ACTION-IF-FOUND is a list of shell commands to run if a threads library
-#   is found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it
-#   is not found. If ACTION-IF-FOUND is not specified, the default action
-#   will define HAVE_PTHREAD.
-#
-#   Please let the authors know if this macro fails on any platform, or if
-#   you have any other suggestions or comments. This macro was based on work
-#   by SGJ on autoconf scripts for FFTW (http://www.fftw.org/) (with help
-#   from M. Frigo), as well as ac_pthread and hb_pthread macros posted by
-#   Alejandro Forero Cuervo to the autoconf macro repository. We are also
-#   grateful for the helpful feedback of numerous users.
-#
-#   Updated for Autoconf 2.68 by Daniel Richard G.
-#
-# LICENSE
-#
-#   Copyright (c) 2008 Steven G. Johnson <stevenj@alum.mit.edu>
-#   Copyright (c) 2011 Daniel Richard G. <skunk@iSKUNK.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 3 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, see <https://www.gnu.org/licenses/>.
-#
-#   As a special exception, the respective Autoconf Macro's copyright owner
-#   gives unlimited permission to copy, distribute and modify the configure
-#   scripts that are the output of Autoconf when processing the Macro. You
-#   need not follow the terms of the GNU General Public License when using
-#   or distributing such scripts, even though portions of the text of the
-#   Macro appear in them. The GNU General Public License (GPL) does govern
-#   all other use of the material that constitutes the Autoconf Macro.
-#
-#   This special exception to the GPL applies to versions of the Autoconf
-#   Macro released by the Autoconf Archive. When you make and distribute a
-#   modified version of the Autoconf Macro, you may extend this special
-#   exception to the GPL to apply to your modified version as well.
-
-#serial 24
-
-AU_ALIAS([ACX_PTHREAD], [AX_PTHREAD])
-AC_DEFUN([AX_PTHREAD], [
-AC_REQUIRE([AC_CANONICAL_HOST])
-AC_REQUIRE([AC_PROG_CC])
-AC_REQUIRE([AC_PROG_SED])
-AC_LANG_PUSH([C])
-ax_pthread_ok=no
-
-# We used to check for pthread.h first, but this fails if pthread.h
-# requires special compiler flags (e.g. on Tru64 or Sequent).
-# It gets checked for in the link test anyway.
-
-# First of all, check if the user has set any of the PTHREAD_LIBS,
-# etcetera environment variables, and if threads linking works using
-# them:
-if test "x$PTHREAD_CFLAGS$PTHREAD_LIBS" != "x"; then
-        ax_pthread_save_CC="$CC"
-        ax_pthread_save_CFLAGS="$CFLAGS"
-        ax_pthread_save_LIBS="$LIBS"
-        AS_IF([test "x$PTHREAD_CC" != "x"], [CC="$PTHREAD_CC"])
-        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
-        LIBS="$PTHREAD_LIBS $LIBS"
-        AC_MSG_CHECKING([for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS])
-        AC_LINK_IFELSE([AC_LANG_CALL([], [pthread_join])], [ax_pthread_ok=yes])
-        AC_MSG_RESULT([$ax_pthread_ok])
-        if test "x$ax_pthread_ok" = "xno"; then
-                PTHREAD_LIBS=""
-                PTHREAD_CFLAGS=""
-        fi
-        CC="$ax_pthread_save_CC"
-        CFLAGS="$ax_pthread_save_CFLAGS"
-        LIBS="$ax_pthread_save_LIBS"
-fi
-
-# We must check for the threads library under a number of different
-# names; the ordering is very important because some systems
-# (e.g. DEC) have both -lpthread and -lpthreads, where one of the
-# libraries is broken (non-POSIX).
-
-# Create a list of thread flags to try.  Items starting with a "-" are
-# C compiler flags, and other items are library names, except for "none"
-# which indicates that we try without any flags at all, and "pthread-config"
-# which is a program returning the flags for the Pth emulation library.
-
-ax_pthread_flags="pthreads none -Kthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
-
-# The ordering *is* (sometimes) important.  Some notes on the
-# individual items follow:
-
-# pthreads: AIX (must check this before -lpthread)
-# none: in case threads are in libc; should be tried before -Kthread and
-#       other compiler flags to prevent continual compiler warnings
-# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h)
-# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads), Tru64
-#           (Note: HP C rejects this with "bad form for `-t' option")
-# -pthreads: Solaris/gcc (Note: HP C also rejects)
-# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it
-#      doesn't hurt to check since this sometimes defines pthreads and
-#      -D_REENTRANT too), HP C (must be checked before -lpthread, which
-#      is present but should not be used directly; and before -mthreads,
-#      because the compiler interprets this as "-mt" + "-hreads")
-# -mthreads: Mingw32/gcc, Lynx/gcc
-# pthread: Linux, etcetera
-# --thread-safe: KAI C++
-# pthread-config: use pthread-config program (for GNU Pth library)
-
-case $host_os in
-
-        freebsd*)
-
-        # -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
-        # lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
-
-        ax_pthread_flags="-kthread lthread $ax_pthread_flags"
-        ;;
-
-        hpux*)
-
-        # From the cc(1) man page: "[-mt] Sets various -D flags to enable
-        # multi-threading and also sets -lpthread."
-
-        ax_pthread_flags="-mt -pthread pthread $ax_pthread_flags"
-        ;;
-
-        openedition*)
-
-        # IBM z/OS requires a feature-test macro to be defined in order to
-        # enable POSIX threads at all, so give the user a hint if this is
-        # not set. (We don't define these ourselves, as they can affect
-        # other portions of the system API in unpredictable ways.)
-
-        AC_EGREP_CPP([AX_PTHREAD_ZOS_MISSING],
-            [
-#            if !defined(_OPEN_THREADS) && !defined(_UNIX03_THREADS)
-             AX_PTHREAD_ZOS_MISSING
-#            endif
-            ],
-            [AC_MSG_WARN([IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support.])])
-        ;;
-
-        solaris*)
-
-        # On Solaris (at least, for some versions), libc contains stubbed
-        # (non-functional) versions of the pthreads routines, so link-based
-        # tests will erroneously succeed. (N.B.: The stubs are missing
-        # pthread_cleanup_push, or rather a function called by this macro,
-        # so we could check for that, but who knows whether they'll stub
-        # that too in a future libc.)  So we'll check first for the
-        # standard Solaris way of linking pthreads (-mt -lpthread).
-
-        ax_pthread_flags="-mt,pthread pthread $ax_pthread_flags"
-        ;;
-esac
-
-# GCC generally uses -pthread, or -pthreads on some platforms (e.g. SPARC)
-
-AS_IF([test "x$GCC" = "xyes"],
-      [ax_pthread_flags="-pthread -pthreads $ax_pthread_flags"])
-
-# The presence of a feature test macro requesting re-entrant function
-# definitions is, on some systems, a strong hint that pthreads support is
-# correctly enabled
-
-case $host_os in
-        darwin* | hpux* | linux* | osf* | solaris*)
-        ax_pthread_check_macro="_REENTRANT"
-        ;;
-
-        aix*)
-        ax_pthread_check_macro="_THREAD_SAFE"
-        ;;
-
-        *)
-        ax_pthread_check_macro="--"
-        ;;
-esac
-AS_IF([test "x$ax_pthread_check_macro" = "x--"],
-      [ax_pthread_check_cond=0],
-      [ax_pthread_check_cond="!defined($ax_pthread_check_macro)"])
-
-# Are we compiling with Clang?
-
-AC_CACHE_CHECK([whether $CC is Clang],
-    [ax_cv_PTHREAD_CLANG],
-    [ax_cv_PTHREAD_CLANG=no
-     # Note that Autoconf sets GCC=yes for Clang as well as GCC
-     if test "x$GCC" = "xyes"; then
-        AC_EGREP_CPP([AX_PTHREAD_CC_IS_CLANG],
-            [/* Note: Clang 2.7 lacks __clang_[a-z]+__ */
-#            if defined(__clang__) && defined(__llvm__)
-             AX_PTHREAD_CC_IS_CLANG
-#            endif
-            ],
-            [ax_cv_PTHREAD_CLANG=yes])
-     fi
-    ])
-ax_pthread_clang="$ax_cv_PTHREAD_CLANG"
-
-ax_pthread_clang_warning=no
-
-# Clang needs special handling, because older versions handle the -pthread
-# option in a rather... idiosyncratic way
-
-if test "x$ax_pthread_clang" = "xyes"; then
-
-        # Clang takes -pthread; it has never supported any other flag
-
-        # (Note 1: This will need to be revisited if a system that Clang
-        # supports has POSIX threads in a separate library.  This tends not
-        # to be the way of modern systems, but it's conceivable.)
-
-        # (Note 2: On some systems, notably Darwin, -pthread is not needed
-        # to get POSIX threads support; the API is always present and
-        # active.  We could reasonably leave PTHREAD_CFLAGS empty.  But
-        # -pthread does define _REENTRANT, and while the Darwin headers
-        # ignore this macro, third-party headers might not.)
-
-        PTHREAD_CFLAGS="-pthread"
-        PTHREAD_LIBS=
-
-        ax_pthread_ok=yes
-
-        # However, older versions of Clang make a point of warning the user
-        # that, in an invocation where only linking and no compilation is
-        # taking place, the -pthread option has no effect ("argument unused
-        # during compilation").  They expect -pthread to be passed in only
-        # when source code is being compiled.
-        #
-        # Problem is, this is at odds with the way Automake and most other
-        # C build frameworks function, which is that the same flags used in
-        # compilation (CFLAGS) are also used in linking.  Many systems
-        # supported by AX_PTHREAD require exactly this for POSIX threads
-        # support, and in fact it is often not straightforward to specify a
-        # flag that is used only in the compilation phase and not in
-        # linking.  Such a scenario is extremely rare in practice.
-        #
-        # Even though use of the -pthread flag in linking would only print
-        # a warning, this can be a nuisance for well-run software projects
-        # that build with -Werror.  So if the active version of Clang has
-        # this misfeature, we search for an option to squash it.
-
-        AC_CACHE_CHECK([whether Clang needs flag to prevent "argument unused" warning when linking with -pthread],
-            [ax_cv_PTHREAD_CLANG_NO_WARN_FLAG],
-            [ax_cv_PTHREAD_CLANG_NO_WARN_FLAG=unknown
-             # Create an alternate version of $ac_link that compiles and
-             # links in two steps (.c -> .o, .o -> exe) instead of one
-             # (.c -> exe), because the warning occurs only in the second
-             # step
-             ax_pthread_save_ac_link="$ac_link"
-             ax_pthread_sed='s/conftest\.\$ac_ext/conftest.$ac_objext/g'
-             ax_pthread_link_step=`$as_echo "$ac_link" | sed "$ax_pthread_sed"`
-             ax_pthread_2step_ac_link="($ac_compile) && (echo ==== >&5) && ($ax_pthread_link_step)"
-             ax_pthread_save_CFLAGS="$CFLAGS"
-             for ax_pthread_try in '' -Qunused-arguments -Wno-unused-command-line-argument unknown; do
-                AS_IF([test "x$ax_pthread_try" = "xunknown"], [break])
-                CFLAGS="-Werror -Wunknown-warning-option $ax_pthread_try -pthread $ax_pthread_save_CFLAGS"
-                ac_link="$ax_pthread_save_ac_link"
-                AC_LINK_IFELSE([AC_LANG_SOURCE([[int main(void){return 0;}]])],
-                    [ac_link="$ax_pthread_2step_ac_link"
-                     AC_LINK_IFELSE([AC_LANG_SOURCE([[int main(void){return 0;}]])],
-                         [break])
-                    ])
-             done
-             ac_link="$ax_pthread_save_ac_link"
-             CFLAGS="$ax_pthread_save_CFLAGS"
-             AS_IF([test "x$ax_pthread_try" = "x"], [ax_pthread_try=no])
-             ax_cv_PTHREAD_CLANG_NO_WARN_FLAG="$ax_pthread_try"
-            ])
-
-        case "$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" in
-                no | unknown) ;;
-                *) PTHREAD_CFLAGS="$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG $PTHREAD_CFLAGS" ;;
-        esac
-
-fi # $ax_pthread_clang = yes
-
-if test "x$ax_pthread_ok" = "xno"; then
-for ax_pthread_try_flag in $ax_pthread_flags; do
-
-        case $ax_pthread_try_flag in
-                none)
-                AC_MSG_CHECKING([whether pthreads work without any flags])
-                ;;
-
-                -mt,pthread)
-                AC_MSG_CHECKING([whether pthreads work with -mt -lpthread])
-                PTHREAD_CFLAGS="-mt"
-                PTHREAD_LIBS="-lpthread"
-                ;;
-
-                -*)
-                AC_MSG_CHECKING([whether pthreads work with $ax_pthread_try_flag])
-                PTHREAD_CFLAGS="$ax_pthread_try_flag"
-                ;;
-
-                pthread-config)
-                AC_CHECK_PROG([ax_pthread_config], [pthread-config], [yes], [no])
-                AS_IF([test "x$ax_pthread_config" = "xno"], [continue])
-                PTHREAD_CFLAGS="`pthread-config --cflags`"
-                PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
-                ;;
-
-                *)
-                AC_MSG_CHECKING([for the pthreads library -l$ax_pthread_try_flag])
-                PTHREAD_LIBS="-l$ax_pthread_try_flag"
-                ;;
-        esac
-
-        ax_pthread_save_CFLAGS="$CFLAGS"
-        ax_pthread_save_LIBS="$LIBS"
-        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
-        LIBS="$PTHREAD_LIBS $LIBS"
-
-        # Check for various functions.  We must include pthread.h,
-        # since some functions may be macros.  (On the Sequent, we
-        # need a special flag -Kthread to make this header compile.)
-        # We check for pthread_join because it is in -lpthread on IRIX
-        # while pthread_create is in libc.  We check for pthread_attr_init
-        # due to DEC craziness with -lpthreads.  We check for
-        # pthread_cleanup_push because it is one of the few pthread
-        # functions on Solaris that doesn't have a non-functional libc stub.
-        # We try pthread_create on general principles.
-
-        AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <pthread.h>
-#                       if $ax_pthread_check_cond
-#                        error "$ax_pthread_check_macro must be defined"
-#                       endif
-                        static void routine(void *a) { a = 0; }
-                        static void *start_routine(void *a) { return a; }],
-                       [pthread_t th; pthread_attr_t attr;
-                        pthread_create(&th, 0, start_routine, 0);
-                        pthread_join(th, 0);
-                        pthread_attr_init(&attr);
-                        pthread_cleanup_push(routine, 0);
-                        pthread_cleanup_pop(0) /* ; */])],
-            [ax_pthread_ok=yes],
-            [])
-
-        CFLAGS="$ax_pthread_save_CFLAGS"
-        LIBS="$ax_pthread_save_LIBS"
-
-        AC_MSG_RESULT([$ax_pthread_ok])
-        AS_IF([test "x$ax_pthread_ok" = "xyes"], [break])
-
-        PTHREAD_LIBS=""
-        PTHREAD_CFLAGS=""
-done
-fi
-
-# Various other checks:
-if test "x$ax_pthread_ok" = "xyes"; then
-        ax_pthread_save_CFLAGS="$CFLAGS"
-        ax_pthread_save_LIBS="$LIBS"
-        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
-        LIBS="$PTHREAD_LIBS $LIBS"
-
-        # Detect AIX lossage: JOINABLE attribute is called UNDETACHED.
-        AC_CACHE_CHECK([for joinable pthread attribute],
-            [ax_cv_PTHREAD_JOINABLE_ATTR],
-            [ax_cv_PTHREAD_JOINABLE_ATTR=unknown
-             for ax_pthread_attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
-                 AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <pthread.h>],
-                                                 [int attr = $ax_pthread_attr; return attr /* ; */])],
-                                [ax_cv_PTHREAD_JOINABLE_ATTR=$ax_pthread_attr; break],
-                                [])
-             done
-            ])
-        AS_IF([test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xunknown" && \
-               test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xPTHREAD_CREATE_JOINABLE" && \
-               test "x$ax_pthread_joinable_attr_defined" != "xyes"],
-              [AC_DEFINE_UNQUOTED([PTHREAD_CREATE_JOINABLE],
-                                  [$ax_cv_PTHREAD_JOINABLE_ATTR],
-                                  [Define to necessary symbol if this constant
-                                   uses a non-standard name on your system.])
-               ax_pthread_joinable_attr_defined=yes
-              ])
-
-        AC_CACHE_CHECK([whether more special flags are required for pthreads],
-            [ax_cv_PTHREAD_SPECIAL_FLAGS],
-            [ax_cv_PTHREAD_SPECIAL_FLAGS=no
-             case $host_os in
-             solaris*)
-             ax_cv_PTHREAD_SPECIAL_FLAGS="-D_POSIX_PTHREAD_SEMANTICS"
-             ;;
-             esac
-            ])
-        AS_IF([test "x$ax_cv_PTHREAD_SPECIAL_FLAGS" != "xno" && \
-               test "x$ax_pthread_special_flags_added" != "xyes"],
-              [PTHREAD_CFLAGS="$ax_cv_PTHREAD_SPECIAL_FLAGS $PTHREAD_CFLAGS"
-               ax_pthread_special_flags_added=yes])
-
-        AC_CACHE_CHECK([for PTHREAD_PRIO_INHERIT],
-            [ax_cv_PTHREAD_PRIO_INHERIT],
-            [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <pthread.h>]],
-                                             [[int i = PTHREAD_PRIO_INHERIT;]])],
-                            [ax_cv_PTHREAD_PRIO_INHERIT=yes],
-                            [ax_cv_PTHREAD_PRIO_INHERIT=no])
-            ])
-        AS_IF([test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes" && \
-               test "x$ax_pthread_prio_inherit_defined" != "xyes"],
-              [AC_DEFINE([HAVE_PTHREAD_PRIO_INHERIT], [1], [Have PTHREAD_PRIO_INHERIT.])
-               ax_pthread_prio_inherit_defined=yes
-              ])
-
-        CFLAGS="$ax_pthread_save_CFLAGS"
-        LIBS="$ax_pthread_save_LIBS"
-
-        # More AIX lossage: compile with *_r variant
-        if test "x$GCC" != "xyes"; then
-            case $host_os in
-                aix*)
-                AS_CASE(["x/$CC"],
-                    [x*/c89|x*/c89_128|x*/c99|x*/c99_128|x*/cc|x*/cc128|x*/xlc|x*/xlc_v6|x*/xlc128|x*/xlc128_v6],
-                    [#handle absolute path differently from PATH based program lookup
-                     AS_CASE(["x$CC"],
-                         [x/*],
-                         [AS_IF([AS_EXECUTABLE_P([${CC}_r])],[PTHREAD_CC="${CC}_r"])],
-                         [AC_CHECK_PROGS([PTHREAD_CC],[${CC}_r],[$CC])])])
-                ;;
-            esac
-        fi
-fi
-
-test -n "$PTHREAD_CC" || PTHREAD_CC="$CC"
-
-AC_SUBST([PTHREAD_LIBS])
-AC_SUBST([PTHREAD_CFLAGS])
-AC_SUBST([PTHREAD_CC])
-
-# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
-if test "x$ax_pthread_ok" = "xyes"; then
-        ifelse([$1],,[AC_DEFINE([HAVE_PTHREAD],[1],[Define if you have POSIX threads libraries and header files.])],[$1])
-        :
-else
-        ax_pthread_ok=no
-        $2
-fi
-AC_LANG_POP
-])dnl AX_PTHREAD
diff --git a/meson.build b/meson.build
new file mode 100644 (file)
index 0000000..58df887
--- /dev/null
@@ -0,0 +1,248 @@
+# SPDX-License-Identifier: LGPL-2.1-or-later
+
+project('lxcfs', 'c',
+        version : '4.0.0',
+        license : 'LGPLv2+',
+        default_options: [
+                'c_std=gnu11',
+                'warning_level=2',
+        ],
+        meson_version : '>= 0.45',
+       )
+
+conf = configuration_data()
+conf.set_quoted('PROJECT_URL', 'https://linuxcontainers.org/lxcfs/introduction/')
+conf.set('PROJECT_VERSION',    meson.project_version(),
+         description : 'Numerical project version (used where a simple number is expected)')
+project_source_root = meson.current_source_dir()
+project_build_root = meson.current_build_dir()
+
+# join_paths ignores the preceding arguments if an absolute component is
+# encountered, so this should canonicalize various paths when they are
+# absolute or relative.
+prefixdir = get_option('prefix')
+if not prefixdir.startswith('/')
+        error('Prefix is not absolute: "@0@"'.format(prefixdir))
+endif
+bindir = join_paths(prefixdir, get_option('bindir'))
+libdir = join_paths(prefixdir, get_option('libdir'))
+lxcfsdir = join_paths(libdir, 'lxcfs')
+sysconfdir = join_paths(prefixdir, get_option('sysconfdir'))
+runtimepath = join_paths(prefixdir, get_option('runtime-path'))
+localstatedir = join_paths('/', get_option('localstatedir'))
+
+conf.set_quoted('LXCFS_BUILD_ROOT',    project_build_root)
+conf.set_quoted('LXCFS_SOURCE_ROOT',   project_source_root)
+conf.set_quoted('BINDIR',              bindir)
+conf.set_quoted('LIBDIR',              libdir)
+conf.set_quoted('LOCALSTATEDIR',       localstatedir)
+conf.set_quoted('LXCFSSHAREDIR',       join_paths(localstatedir, 'lxcfs'))
+conf.set_quoted('LXCCONFDIR',          join_paths(localstatedir, '/lxc/config/common.conf.d'))
+conf.set_quoted('RUNTIME_PATH',                runtimepath)
+conf.set_quoted('SYSCONFDIR',          sysconfdir)
+
+init_script = get_option('init-script')
+
+cc = meson.get_compiler('c')
+meson_build_sh = find_program('tools/meson-build.sh')
+
+want_tests = get_option('tests')
+
+possible_cc_flags = [
+       '-fPIE',
+       '-Wvla',
+       '-std=gnu11',
+       '-fdiagnostics-color',
+       '-Wimplicit-fallthrough=5',
+       '-Wcast-align',
+       '-Wstrict-prototypes',
+       '-fno-strict-aliasing',
+       '-fstack-clash-protection',
+       '-fstack-protector-strong',
+       '--param=ssp-buffer-size=4',
+       '--mcet -fcf-protection',
+       '-Werror=implicit-function-declaration',
+       '-Wlogical-op',
+       '-Wmissing-include-dirs',
+       '-Wold-style-definition',
+       '-Winit-self',
+       '-Wunused-but-set-variable',
+       '-Wno-unused-parameter',
+       '-Wfloat-equal',
+       '-Wsuggest-attribute=noreturn',
+       '-Werror=return-type',
+       '-Werror=incompatible-pointer-types',
+       '-Wformat=2',
+       '-Wshadow',
+       '-Wendif-labels',
+       '-Werror=overflow',
+       '-fdiagnostics-show-option',
+       '-Werror=shift-count-overflow',
+       '-Werror=shift-overflow=2',
+       '-Wdate-time',
+       '-Wnested-externs',
+       '-fasynchronous-unwind-tables',
+       '-fexceptions',
+       '-Warray-bounds',
+       '-Wrestrict',
+       '-Wreturn-local-addr',
+       '-fsanitize=cfi',
+       '-Wstringop-overflow',
+]
+
+possible_link_flags = [
+       '-Wl,--as-needed',
+       '-Wl,--gc-sections',
+       '-Wl,-z,relro',
+       '-Wl,-z,now',
+       '-pie',
+       '-Wl,-fuse-ld=gold',
+]
+
+if meson.version().version_compare('>=0.46')
+       add_project_link_arguments(cc.get_supported_link_arguments(possible_link_flags), language : 'c')
+else
+       add_project_link_arguments(possible_link_flags, language : 'c')
+endif
+
+add_project_arguments(cc.get_supported_arguments(possible_cc_flags), language : 'c')
+
+foreach ident : [
+        ['strlcpy',            '''#include <string.h>'''],
+        ['strlcat',            '''#include <string.h>'''],
+        ['pidfd_send_signal',  '''#include <stdlib.h>
+                                 #include <unistd.h>
+                                 #include <signal.h>
+                                 #include <sys/wait.h>'''],
+        ['pidfd_open',         '''#include <stdlib.h>
+                                 #include <unistd.h>
+                                 #include <signal.h>
+                                 #include <sys/wait.h>'''],
+]
+
+        have = cc.has_function(ident[0], prefix : ident[1], args : '-D_GNU_SOURCE')
+        conf.set10('HAVE_' + ident[0].to_upper(), have)
+endforeach
+
+conf.set('_FILE_OFFSET_BITS', 64)
+
+libfuse = cc.find_library('fuse3', required : false)
+if libfuse.found()
+       conf.set10('HAVE_FUSE3', libfuse.found())
+       conf.set('FUSE_USE_VERSION', 30)
+else
+       libfuse = cc.find_library('fuse')
+       conf.set10('HAVE_FUSE', libfuse.found())
+       conf.set('FUSE_USE_VERSION', 26)
+endif
+
+libdl = cc.find_library('dl')
+threads = dependency('threads')
+
+config_h = configure_file(
+        output : 'config.h',
+        configuration : conf)
+config_include = include_directories('.')
+
+add_project_arguments('-include', 'config.h', language : 'c')
+
+subdir('tests')
+
+public_programs = []
+
+lxcfs_sources = files('src/lxcfs.c')
+
+public_programs += executable(
+        'lxcfs',
+        lxcfs_sources,
+        dependencies : [threads,
+                       libdl,
+                       libfuse],
+        install : true,
+        install_dir : bindir)
+
+liblxcfs_sources = files(
+       'src/api_extensions.h',
+       'src/bindings.c',
+       'src/bindings.h',
+       'src/cgroups/cgfsng.c',
+       'src/cgroups/cgroup.c',
+       'src/cgroups/cgroup.h',
+       'src/cgroups/cgroup2_devices.c',
+       'src/cgroups/cgroup2_devices.h',
+       'src/cgroups/cgroup_utils.c',
+       'src/cgroups/cgroup_utils.h',
+       'src/cgroup_fuse.c',
+       'src/cgroup_fuse.h',
+       'src/cpuset_parse.c',
+       'src/cpuset_parse.h',
+       'src/lxcfs.c',
+       'src/lxcfs_fuse_compat.h',
+       'src/macro.h',
+       'src/memory_utils.h',
+       'src/proc_cpuview.c',
+       'src/proc_cpuview.h',
+       'src/proc_fuse.c',
+       'src/proc_fuse.h',
+       'src/proc_loadavg.c',
+       'src/proc_loadavg.h',
+       'src/syscall_numbers.h',
+       'src/sysfs_fuse.c',
+       'src/sysfs_fuse.h',
+       'src/utils.c',
+       'src/utils.h')
+
+liblxcfs = shared_library(
+        'lxcfs',
+        liblxcfs_sources,
+        link_args : ['-shared'],
+        dependencies : [threads,
+                       libdl,
+                       libfuse],
+        install : true,
+        install_dir : lxcfsdir)
+
+if want_tests == true
+       liblxcfs_test = shared_library(
+               'lxcfstest',
+               liblxcfs_sources,
+               link_args : ['-shared'],
+               dependencies : [threads,
+                               libdl,
+                               libfuse],
+               install : false,
+               install_dir : lxcfsdir,
+               c_args : '-DRELOADTEST -DDEBUG')
+endif
+
+if init_script == 'systemd'
+        systemd_service_data = configuration_data()
+       systemd_service_data.set_quoted('LXCFSTARGETDIR', join_paths(localstatedir, 'lib/lxcfs'))
+        systemd_service = configure_file(
+                               configuration : systemd_service_data,
+                                input : 'config/init/systemd/lxcfs.service.in',
+                                output : 'lxcfs.service')
+        install_data(join_paths(project_build_root, 'lxcfs.service'), install_dir : '/lib/systemd/system')
+elif init_script == 'upstart'
+        install_data('config/init/upstart/lxcfs.conf', install_dir : join_paths(sysconfdir, 'init'))
+elif init_script == 'openrc'
+        install_data('config/init/sysvinit/lxcfs', install_dir : join_paths(sysconfdir, 'rc.d/init.d/lxcfs'))
+elif init_script == 'sysvinit'
+        install_data('config/init/sysvinit/lxcfs', install_dir : join_paths(sysconfdir, 'rc.d/init.d/lxcfs'))
+endif
+
+status = [
+        '@0@ @1@'.format(meson.project_name(), meson.project_version()),
+
+        'prefix directory:             @0@'.format(prefixdir),
+        'sysconf directory:            @0@'.format(sysconfdir),
+        'bin directory:                        @0@'.format(bindir),
+        'lxcfs directory:              @0@'.format(lxcfsdir),
+        'runtime directory:            @0@'.format(runtimepath),
+        'local state directory:                @0@'.format(localstatedir),
+        'lxcfs build root directory:   @0@'.format(project_build_root),
+        'lxcfs source root directory:  @0@'.format(project_source_root),
+        'init system:                  @0@'.format(init_script),
+        'tests:                                @0@'.format(want_tests)]
+
+message('\n         '.join(status))
diff --git a/meson_options.txt b/meson_options.txt
new file mode 100644 (file)
index 0000000..8529aef
--- /dev/null
@@ -0,0 +1,14 @@
+# -*- mode: meson -*-
+
+option('tests', type : 'boolean', value: 'false',
+       description : 'enable tests')
+
+option('runtime-path', type : 'string', value : '/run',
+       description : 'the runtime directory')
+
+option('with-init-script', type : 'string', value : 'systemd',
+       description : 'the runtime directory')
+
+option('init-script', type : 'combo',
+       choices : ['systemd', 'sysvinit', 'openrc', 'upstart'], value : 'systemd',
+       description : 'init script')
diff --git a/share/Makefile.am b/share/Makefile.am
deleted file mode 100644 (file)
index 64e43a9..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-lxccommondir=@LXCCONFDIR@
-lxcfssharedir=@LXCFSSHAREDIR@
-
-lxcfsshare_SCRIPTS = lxc.mount.hook lxc.reboot.hook
-lxccommon_DATA = 00-lxcfs.conf
diff --git a/src/Makefile.am b/src/Makefile.am
deleted file mode 100644 (file)
index e06dc35..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-AM_CFLAGS = -Wall -ggdb -D_GNU_SOURCE -DSBINDIR=\"$(SBINDIR)\" -pthread
-AM_CFLAGS += $(FUSE_CFLAGS)
-AM_CFLAGS += -DLIBDIR=\"$(LIBDIR)\"
-AM_LDFLAGS = $(FUSE_LIBS) -pthread
-#AM_CFLAGS += -DDEBUG
-#AM_CFLAGS += -DVERBOSE
-
-AM_CFLAGS += -DRUNTIME_PATH=\"$(RUNTIME_PATH)\"
-
-liblxcfs_la_SOURCES = api_extensions.h \
-                     bindings.c bindings.h \
-                     cgroup_fuse.c cgroup_fuse.h \
-                     cgroups/cgfsng.c \
-                     cgroups/cgroup.c cgroups/cgroup.h \
-                     cgroups/cgroup2_devices.c cgroups/cgroup2_devices.h \
-                     cgroups/cgroup_utils.c cgroups/cgroup_utils.h \
-                     cpuset_parse.c cpuset_parse.h \
-                     lxcfs_fuse_compat.h \
-                     macro.h \
-                     memory_utils.h \
-                     proc_cpuview.c proc_cpuview.h \
-                     proc_fuse.c proc_fuse.h \
-                     proc_loadavg.c proc_loadavg.h \
-                     syscall_numbers.h \
-                     sysfs_fuse.c sysfs_fuse.h \
-                     utils.c utils.h
-liblxcfs_la_CFLAGS = $(AM_CFLAGS)
-
-if ENABLE_ASAN
-liblxcfs_la_CFLAGS += -fsanitize=address \
-                     -fno-omit-frame-pointer
-endif
-
-if ENABLE_UBSAN
-liblxcfs_la_CFLAGS += -fsanitize=undefined
-endif
-
-liblxcfs_la_LDFLAGS = $(AM_CFLAGS) -module -avoid-version -shared
-
-liblxcfstest_la_SOURCES = api_extensions.h \
-                         bindings.c bindings.h \
-                         cgroup_fuse.c cgroup_fuse.h \
-                         cgroups/cgfsng.c \
-                         cgroups/cgroup.c cgroups/cgroup.h \
-                         cgroups/cgroup2_devices.c cgroups/cgroup2_devices.h \
-                         cgroups/cgroup_utils.c cgroups/cgroup_utils.h \
-                         cpuset_parse.c cpuset_parse.h \
-                         lxcfs_fuse_compat.h \
-                         macro.h \
-                         memory_utils.h \
-                         proc_cpuview.c proc_cpuview.h \
-                         proc_fuse.c proc_fuse.h \
-                         proc_loadavg.c proc_loadavg.h \
-                         syscall_numbers.h \
-                         sysfs_fuse.c sysfs_fuse.h \
-                         utils.c utils.h
-liblxcfstest_la_CFLAGS = $(AM_CFLAGS) -DRELOADTEST
-
-if ENABLE_ASAN
-liblxcfstest_la_CFLAGS += -fsanitize=address \
-                         -fno-omit-frame-pointer
-endif
-
-if ENABLE_UBSAN
-liblxcfstest_la_CFLAGS += -fsanitize=undefined
-endif
-
-liblxcfstest_la_LDFLAGS = $(AM_CFLAGS) -module -avoid-version -shared
-
-noinst_HEADERS = api_extensions.h \
-                bindings.h \
-                cgroup_fuse.h \
-                cgroups/cgroup.h \
-                cgroups/cgroup2_devices.h \
-                cgroups/cgroup_utils.h \
-                cpuset_parse.h \
-                lxcfs_fuse_compat.h \
-                macro.h \
-                memory_utils.h \
-                proc_cpuview.h \
-                proc_fuse.h \
-                proc_loadavg.h \
-                syscall_numbers.h \
-                sysfs_fuse.h \
-                utils.h
-
-sodir=$(libdir)
-lxcfs_LTLIBRARIES = liblxcfs.la
-EXTRA_LTLIBRARIES = liblxcfstest.la
-
-lxcfs_SOURCES = lxcfs.c
-lxcfs_LDADD = -ldl
-lxcfs_CFLAGS = $(AM_CFLAGS)
-lxcfs_LDFLAGS = $(AM_LDFLAGS)
-bin_PROGRAMS = lxcfs
-
-TEST_READ: tests/test-read.c
-       $(CC) -o tests/test-read \
-               tests/test-read.c
-TEST_CPUSET: tests/cpusetrange.c cpuset_parse.c
-       $(CC) -o tests/cpusetrange \
-               tests/cpusetrange.c \
-               cpuset_parse.c
-TEST_SYSCALLS: tests/test_syscalls.c
-       $(CC) -o tests/test_syscalls \
-               tests/test_syscalls.c
-tests: TEST_READ TEST_CPUSET TEST_SYSCALLS
index ccf52e2d5a33ed32c4a301fc23194c1c981b9068..dc4da14281ec69ef2eda8c03b3a9be093356534f 100644 (file)
@@ -6,22 +6,9 @@
 
 #include "config.h"
 
-#ifdef HAVE_FUSE3
-#ifndef FUSE_USE_VERSION
-#define FUSE_USE_VERSION 30
-#endif
-#else
-#ifndef FUSE_USE_VERSION
-#define FUSE_USE_VERSION 26
-#endif
-#endif
-
-#define _FILE_OFFSET_BITS 64
-
 #include <dirent.h>
 #include <errno.h>
 #include <fcntl.h>
-#include <fuse.h>
 #include <inttypes.h>
 #include <libgen.h>
 #include <linux/magic.h>
@@ -46,8 +33,9 @@
 #include <unistd.h>
 #include <wait.h>
 
-#include "api_extensions.h"
 #include "bindings.h"
+
+#include "api_extensions.h"
 #include "cgroup_fuse.h"
 #include "cgroups/cgroup.h"
 #include "cgroups/cgroup_utils.h"
@@ -621,7 +609,7 @@ static bool is_on_ramfs(void)
        return false;
 }
 
-static int pivot_enter()
+static int pivot_enter(void)
 {
        __do_close int oldroot = -EBADF, newroot = -EBADF;
 
@@ -664,7 +652,7 @@ static int pivot_enter()
        return 0;
 }
 
-static int chroot_enter()
+static int chroot_enter(void)
 {
        if (mount(ROOTDIR, "/", NULL, MS_REC | MS_BIND, NULL)) {
                lxcfs_error("Failed to recursively bind-mount %s into /.", ROOTDIR);
@@ -911,8 +899,8 @@ static void __attribute__((constructor)) lxcfs_init(void)
                lxcfs_info("Kernel does not support swap accounting");
 
        lxcfs_info("api_extensions:");
-       for (i = 0; i < nr_api_extensions; i++)
-               lxcfs_info("- %s", api_extensions[i]);
+       for (size_t nr = 0; nr < nr_api_extensions; nr++)
+               lxcfs_info("- %s", api_extensions[nr]);
 
        root_fd = open("/", O_PATH | O_CLOEXEC);
        if (root_fd < 0)
index 686df0c2d05d47a7dbf3168d656c76b93104f2f2..4e033628b224d2658db6783c5b6e19f1d67fa722 100644 (file)
@@ -3,17 +3,8 @@
 #ifndef __LXCFS_BINDINGS_H
 #define __LXCFS_BINDINGS_H
 
-#ifndef _GNU_SOURCE
-#define _GNU_SOURCE
-#endif
-
-#ifndef FUSE_USE_VERSION
-#define FUSE_USE_VERSION 26
-#endif
-
-#define _FILE_OFFSET_BITS 64
+#include "config.h"
 
-#include <fuse.h>
 #include <linux/types.h>
 #include <signal.h>
 #include <stdbool.h>
 #include <sys/types.h>
 #include <unistd.h>
 
+#if HAVE_FUSE3
+#include <fuse3/fuse.h>
+#else
+#include <fuse.h>
+#endif
+
 #include "cgroup_fuse.h"
-#include "config.h"
 #include "macro.h"
 #include "proc_cpuview.h"
 #include "proc_fuse.h"
index 98ef236fe2431e426bc4b5a7f4f1e6e994a1fb50..cfdf77013408dc14b7c8c2e5ecfc9202a21cff5b 100644 (file)
@@ -6,23 +6,10 @@
 
 #include "config.h"
 
-#ifdef HAVE_FUSE3
-#ifndef FUSE_USE_VERSION
-#define FUSE_USE_VERSION 30
-#endif
-#else
-#ifndef FUSE_USE_VERSION
-#define FUSE_USE_VERSION 26
-#endif
-#endif
-
-#define _FILE_OFFSET_BITS 64
-
 #define __STDC_FORMAT_MACROS
 #include <dirent.h>
 #include <errno.h>
 #include <fcntl.h>
-#include <fuse.h>
 #include <inttypes.h>
 #include <libgen.h>
 #include <pthread.h>
@@ -47,6 +34,8 @@
 #include <sys/sysinfo.h>
 #include <sys/vfs.h>
 
+#include "cgroup_fuse.h"
+
 #include "bindings.h"
 #include "cgroups/cgroup.h"
 #include "cgroups/cgroup_utils.h"
@@ -357,7 +346,7 @@ static struct cgfs_files *cgfs_get_key(const char *controller,
  * pid's namespace.
  * Returns the mapped id, or -1 on error.
  */
-static unsigned int convert_id_to_ns(FILE *idfile, unsigned int in_id)
+static int convert_id_to_ns(FILE *idfile, unsigned int in_id)
 {
        unsigned int nsuid,   // base id for a range in the idfile's namespace
                     hostuid, // base id for a range in the caller's namespace
@@ -406,12 +395,13 @@ static unsigned int convert_id_to_ns(FILE *idfile, unsigned int in_id)
 
 static bool is_privileged_over(pid_t pid, uid_t uid, uid_t victim, bool req_ns_root)
 {
+       FILE *f;
        char fpath[PROCLEN];
        int ret;
        bool answer = false;
        uid_t nsuid;
 
-       if (victim == -1 || uid == -1)
+       if (victim == (uid_t)-1 || uid == (uid_t)-1)
                return false;
 
        /*
@@ -425,7 +415,8 @@ static bool is_privileged_over(pid_t pid, uid_t uid, uid_t victim, bool req_ns_r
        ret = snprintf(fpath, PROCLEN, "/proc/%d/uid_map", pid);
        if (ret < 0 || ret >= PROCLEN)
                return false;
-       FILE *f = fopen(fpath, "re");
+
+       f = fopen(fpath, "re");
        if (!f)
                return false;
 
@@ -440,7 +431,7 @@ static bool is_privileged_over(pid_t pid, uid_t uid, uid_t victim, bool req_ns_r
         * will be sending requests where the vfs has converted
         */
        nsuid = convert_id_to_ns(f, victim);
-       if (nsuid == -1)
+       if (nsuid == (uid_t)-1)
                goto out;
 
        answer = true;
@@ -1218,7 +1209,7 @@ static void pid_to_ns_wrapper(int sock, pid_t tpid)
        char v;
 
        ret = snprintf(fnam, sizeof(fnam), "/proc/%d/ns/pid", tpid);
-       if (ret < 0 || ret >= sizeof(fnam))
+       if (ret < 0 || (size_t)ret >= sizeof(fnam))
                _exit(1);
        newnsfd = open(fnam, O_RDONLY);
        if (newnsfd < 0)
@@ -1361,7 +1352,8 @@ __lxcfs_fuse_ops int cg_read(const char *path, char *buf, size_t size,
        struct file_info *f = INTTYPE_TO_PTR(fi->fh);
        struct cgfs_files *k = NULL;
        char *data = NULL;
-       int ret, s;
+       int ret;
+       size_t s;
        bool r;
 
        if (!liblxcfs_functional())
@@ -1414,7 +1406,7 @@ __lxcfs_fuse_ops int cg_read(const char *path, char *buf, size_t size,
        if (s > size)
                s = size;
        memcpy(buf, data, s);
-       if (s > 0 && s < size && data[s-1] != '\n')
+       if ((s > 0) && (s < size) && (data[s - 1] != '\n'))
                buf[s++] = '\n';
 
        ret = s;
@@ -1555,7 +1547,7 @@ static void pid_from_ns_wrapper(int sock, pid_t tpid)
        char v;
 
        ret = snprintf(fnam, sizeof(fnam), "/proc/%d/ns/pid", tpid);
-       if (ret < 0 || ret >= sizeof(fnam))
+       if (ret < 0 || (size_t)ret >= sizeof(fnam))
                _exit(1);
        newnsfd = open(fnam, O_RDONLY);
        if (newnsfd < 0)
@@ -1647,7 +1639,7 @@ static bool hostuid_to_ns(uid_t uid, pid_t pid, uid_t *answer)
        *answer = convert_id_to_ns(f, uid);
        fclose(f);
 
-       if (*answer == -1)
+       if (*answer == (uid_t)-1)
                return false;
        return true;
 }
@@ -1764,6 +1756,7 @@ static bool cgfs_set_value(const char *controller, const char *cgroup,
        __do_free char *path = NULL;
        int cfd;
        size_t len;
+       ssize_t ret;
 
        cfd = get_cgroup_fd_handle_named(controller);
        if (cfd < 0)
@@ -1776,7 +1769,11 @@ static bool cgfs_set_value(const char *controller, const char *cgroup,
                return false;
 
        len = strlen(value);
-       return write_nointr(fd, value, len) == len;
+       ret = write_nointr(fd, value, len);
+       if (ret < 0)
+               return false;
+
+       return (size_t)ret == len;
 }
 
 __lxcfs_fuse_ops int cg_write(const char *path, const char *buf, size_t size,
@@ -1872,7 +1869,7 @@ static bool cgfs_iterate_cgroup(const char *controller, const char *cgroup,
                        continue;
 
                ret = snprintf(pathname, sizeof(pathname), "%s/%s", path, dirent->d_name);
-               if (ret < 0 || ret >= sizeof(pathname)) {
+               if (ret < 0 || (size_t)ret >= sizeof(pathname)) {
                        lxcfs_error("Pathname too long under %s\n", path);
                        continue;
                }
index 4f3d21df6b777791c56db72a23185676ee0df299..494dac70515f1867ab0ad53a00f4933c0cdcb4f5 100644 (file)
@@ -3,24 +3,20 @@
 #ifndef __LXCFS_CGROUP_FUSE_H
 #define __LXCFS_CGROUP_FUSE_H
 
-#ifndef _GNU_SOURCE
-#define _GNU_SOURCE
-#endif
-
-#ifndef FUSE_USE_VERSION
-#define FUSE_USE_VERSION 26
-#endif
-
-#define _FILE_OFFSET_BITS 64
+#include "config.h"
 
-#include <fuse.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <sys/stat.h>
 #include <sys/types.h>
 #include <unistd.h>
 
-#include "config.h"
+#if HAVE_FUSE3
+#include <fuse3/fuse.h>
+#else
+#include <fuse.h>
+#endif
+
 #include "macro.h"
 
 __visible extern int cg_getattr(const char *path, struct stat *sb);
index f80785f9848f400347390be40182661467550a56..eb951b40c6839d08150be0fc95fb70b8982bb751 100644 (file)
 #define _GNU_SOURCE
 #endif
 
-#include "../config.h"
-
-#ifdef HAVE_FUSE3
-#ifndef FUSE_USE_VERSION
-#define FUSE_USE_VERSION 30
-#endif
-#else
-#ifndef FUSE_USE_VERSION
-#define FUSE_USE_VERSION 26
-#endif
-#endif
-
-#define _FILE_OFFSET_BITS 64
+#include "config.h"
 
 #include <ctype.h>
 #include <dirent.h>
index 26c87aeb063648286c2f06cd4d3c7d5ada1b955d..7aec7aed6a290179dba4fa89a79bd6bb43047a4a 100644 (file)
@@ -4,19 +4,7 @@
 #define _GNU_SOURCE
 #endif
 
-#include "../config.h"
-
-#ifdef HAVE_FUSE3
-#ifndef FUSE_USE_VERSION
-#define FUSE_USE_VERSION 30
-#endif
-#else
-#ifndef FUSE_USE_VERSION
-#define FUSE_USE_VERSION 26
-#endif
-#endif
-
-#define _FILE_OFFSET_BITS 64
+#include "config.h"
 
 #include <dirent.h>
 #include <errno.h>
index c40b087d130f9559d453db4c6247c3e304d3f5e7..06d258fa15eb32fdae226add2867b11a7f993be7 100644 (file)
@@ -6,19 +6,7 @@
 #define _GNU_SOURCE
 #endif
 
-#include "../config.h"
-
-#ifdef HAVE_FUSE3
-#ifndef FUSE_USE_VERSION
-#define FUSE_USE_VERSION 30
-#endif
-#else
-#ifndef FUSE_USE_VERSION
-#define FUSE_USE_VERSION 26
-#endif
-#endif
-
-#define _FILE_OFFSET_BITS 64
+#include "config.h"
 
 #include <errno.h>
 #include <fcntl.h>
index d5ba963ea904f77dd40bb7988bc20fdba16cdfa8..67a2da8c7d09b491837c564e4f2731872d48633d 100644 (file)
@@ -30,7 +30,7 @@
 #include <linux/filter.h>
 #endif
 
-#include "syscall_numbers.h"
+#include "../syscall_numbers.h"
 
 #if !HAVE_BPF
 
index 5165a0900f0b382efc7e7a435a1b17ec8edb1d97..f4ae4ccf93849c5cb2a3f72010be9be682b10aad 100644 (file)
@@ -4,19 +4,7 @@
 #define _GNU_SOURCE
 #endif
 
-#include "../config.h"
-
-#ifdef HAVE_FUSE3
-#ifndef FUSE_USE_VERSION
-#define FUSE_USE_VERSION 30
-#endif
-#else
-#ifndef FUSE_USE_VERSION
-#define FUSE_USE_VERSION 26
-#endif
-#endif
-
-#define _FILE_OFFSET_BITS 64
+#include "config.h"
 
 #include <fcntl.h>
 #include <stdarg.h>
@@ -443,7 +431,7 @@ int safe_mount(const char *src, const char *dest, const char *fstype,
        return 0;
 }
 
-#ifndef HAVE_STRLCPY
+#if !HAVE_STRLCPY
 size_t strlcpy(char *dest, const char *src, size_t size)
 {
        size_t ret = strlen(src);
@@ -458,7 +446,7 @@ size_t strlcpy(char *dest, const char *src, size_t size)
 }
 #endif
 
-#ifndef HAVE_STRLCAT
+#if !HAVE_STRLCAT
 size_t strlcat(char *d, const char *s, size_t n)
 {
        size_t l = strnlen(d, n);
index d1f563934bb20df7297e8573b4b9597f5d2c06b0..8576e5e4ec54be506871087a23f8356a6b469007 100644 (file)
@@ -70,11 +70,11 @@ extern bool dir_exists(const char *path);
 extern int safe_mount(const char *src, const char *dest, const char *fstype,
                      unsigned long flags, const void *data, const char *rootfs);
 
-#ifndef HAVE_STRLCPY
+#if !HAVE_STRLCPY
 extern size_t strlcpy(char *, const char *, size_t);
 #endif
 
-#ifndef HAVE_STRLCAT
+#if !HAVE_STRLCAT
 extern size_t strlcat(char *d, const char *s, size_t n);
 #endif
 
index 7861398370f7d5db24a00c5d411686a21a58b5c8..172140b84141971cc95df24053b9676041aa56a4 100644 (file)
@@ -6,24 +6,11 @@
 
 #include "config.h"
 
-#ifdef HAVE_FUSE3
-#ifndef FUSE_USE_VERSION
-#define FUSE_USE_VERSION 30
-#endif
-#else
-#ifndef FUSE_USE_VERSION
-#define FUSE_USE_VERSION 26
-#endif
-#endif
-
-#define _FILE_OFFSET_BITS 64
-
 #include <alloca.h>
 #include <dirent.h>
 #include <dlfcn.h>
 #include <errno.h>
 #include <fcntl.h>
-#include <fuse.h>
 #include <getopt.h>
 #include <libgen.h>
 #include <pthread.h>
 #include <sys/socket.h>
 #include <linux/limits.h>
 
+#if HAVE_FUSE3
+#include <fuse3/fuse.h>
+#else
+#include <fuse.h>
+#endif
+
 #include "bindings.h"
 #include "lxcfs_fuse_compat.h"
 #include "macro.h"
@@ -152,7 +145,7 @@ static void do_reload(void)
 #else
         ret = snprintf(lxcfs_lib_path, sizeof(lxcfs_lib_path), "/usr/local/lib/lxcfs/liblxcfs.so");
 #endif
-       if (ret < 0 || ret >= sizeof(lxcfs_lib_path))
+       if (ret < 0 || (size_t)ret >= sizeof(lxcfs_lib_path))
                log_exit("Failed to create path to open liblxcfs");
 
         dlopen_handle = dlopen(lxcfs_lib_path, RTLD_LAZY);
@@ -1078,7 +1071,7 @@ const struct fuse_operations lxcfs_ops = {
 #endif
 };
 
-static void usage()
+static void usage(void)
 {
        lxcfs_info("Usage: lxcfs <directory>\n");
        lxcfs_info("lxcfs is a FUSE-based proc, sys and cgroup virtualizing filesystem\n");
@@ -1123,7 +1116,7 @@ static int set_pidfile(char *pidfile)
                return log_error(-1, "Error truncating PID file '%s': %m", pidfile);
 
        ret = snprintf(buf, sizeof(buf), "%ld\n", (long)getpid());
-       if (ret < 0 || ret >= sizeof(buf))
+       if (ret < 0 || (size_t)ret >= sizeof(buf))
                return log_error(-1, "Failed to convert pid to string %m");
 
        if (write(fd, buf, ret) != ret)
index 05eee6510015966f2f43337635b3784f9575386f..a7fe05d26ebd156ce7c237a15a1e0a5cba17eaa9 100644 (file)
 #define CGROUP2_SUPER_MAGIC 0x63677270
 #endif
 
-#define lxcfs_debug_stream(stream, format, ...)                                \
-       do {                                                                   \
-               fprintf(stream, "%s: %d: %s: " format "\n", __FILE__, __LINE__,     \
-                       __func__, ##__VA_ARGS__);                                \
+#define lxcfs_debug_stream(stream, format, ...)                       \
+       do {                                                          \
+               fprintf(stream, "%s: %d: %s: " format "\n", __FILE__, \
+                       __LINE__, __func__, ##__VA_ARGS__);           \
        } while (false)
 
 #define lxcfs_error(format, ...) lxcfs_debug_stream(stderr, format, ##__VA_ARGS__)
@@ -39,7 +39,9 @@
 #ifdef DEBUG
 #define lxcfs_debug(format, ...) lxcfs_error(format, ##__VA_ARGS__)
 #else
-#define lxcfs_debug(format, ...)
+#define lxcfs_debug(format, ...) \
+       do {                     \
+       } while (false)
 #endif /* DEBUG */
 
 #ifdef VERBOSE
index cbb03757379d14d198d034b046e0bd977603082c..653e7ebb6651f11357d2262703371cd1228d2cdc 100644 (file)
@@ -6,23 +6,10 @@
 
 #include "config.h"
 
-#ifdef HAVE_FUSE3
-#ifndef FUSE_USE_VERSION
-#define FUSE_USE_VERSION 30
-#endif
-#else
-#ifndef FUSE_USE_VERSION
-#define FUSE_USE_VERSION 26
-#endif
-#endif
-
-#define _FILE_OFFSET_BITS 64
-
 #define __STDC_FORMAT_MACROS
 #include <dirent.h>
 #include <errno.h>
 #include <fcntl.h>
-#include <fuse.h>
 #include <inttypes.h>
 #include <libgen.h>
 #include <pthread.h>
@@ -47,6 +34,8 @@
 #include <sys/sysinfo.h>
 #include <sys/vfs.h>
 
+#include "proc_cpuview.h"
+
 #include "bindings.h"
 #include "cgroup_fuse.h"
 #include "cpuset_parse.h"
@@ -246,7 +235,7 @@ static struct cg_proc_stat *prune_proc_stat_list(struct cg_proc_stat *node)
 
        for (struct cg_proc_stat *prev = NULL; node; ) {
                if (!cgroup_supports("cpu", node->cg, "cpu.shares")) {
-                       call_cleaner(free_proc_stat_node) struct cg_proc_stat *cur = node;
+                       struct cg_proc_stat *cur = node;
 
                        if (prev)
                                prev->next = node->next;
@@ -254,7 +243,9 @@ static struct cg_proc_stat *prune_proc_stat_list(struct cg_proc_stat *node)
                                first = node->next;
 
                        node = node->next;
-                       lxcfs_debug("Removing stat node for %s\n", cur->cg);
+                       lxcfs_debug("Removing stat node for %s\n", cur);
+
+                       free_proc_stat_node(cur);
                } else {
                        if (!first)
                                first = node;
@@ -766,7 +757,7 @@ int cpuview_proc_stat(const char *cg, const char *cpuset,
                total_len = 0;
                goto out_pthread_mutex_unlock;
        }
-       if (l >= buf_size) {
+       if ((size_t)l >= buf_size) {
                lxcfs_error("Write to cache was truncated");
                total_len = 0;
                goto out_pthread_mutex_unlock;
@@ -797,7 +788,7 @@ int cpuview_proc_stat(const char *cg, const char *cpuset,
                        total_len = 0;
                        goto out_pthread_mutex_unlock;
                }
-               if (l >= buf_size) {
+               if ((size_t)l >= buf_size) {
                        lxcfs_error("Write to cache was truncated");
                        total_len = 0;
                        goto out_pthread_mutex_unlock;
@@ -815,7 +806,7 @@ int cpuview_proc_stat(const char *cg, const char *cpuset,
                total_len = 0;
                goto out_pthread_mutex_unlock;
        }
-       if (l >= buf_size) {
+       if ((size_t)l >= buf_size) {
                lxcfs_error("Write to cache was truncated");
                total_len = 0;
                goto out_pthread_mutex_unlock;
@@ -833,7 +824,7 @@ int cpuview_proc_stat(const char *cg, const char *cpuset,
                        total_len = 0;
                        goto out_pthread_mutex_unlock;
                }
-               if (l >= buf_size) {
+               if ((size_t)l >= buf_size) {
                        lxcfs_error("Write to cache was truncated");
                        total_len = 0;
                        goto out_pthread_mutex_unlock;
@@ -887,7 +878,7 @@ int proc_cpuinfo_read(char *buf, size_t size, off_t offset,
        size_t cache_size = d->buflen;
 
        if (offset) {
-               int left;
+               size_t left;
 
                if (offset > d->size)
                        return -EINVAL;
@@ -950,7 +941,7 @@ int proc_cpuinfo_read(char *buf, size_t size, off_t offset,
                                l = snprintf(cache, cache_size, "processor      : %d\n", curcpu);
                                if (l < 0)
                                        return log_error(0, "Failed to write cache");
-                               if (l >= cache_size)
+                               if ((size_t)l >= cache_size)
                                        return log_error(0, "Write to cache was truncated");
                                cache += l;
                                cache_size -= l;
@@ -975,7 +966,7 @@ int proc_cpuinfo_read(char *buf, size_t size, off_t offset,
                        l = snprintf(cache, cache_size, "processor %d:%s", curcpu, p);
                        if (l < 0)
                                return log_error(0, "Failed to write cache");
-                       if (l >= cache_size)
+                       if ((size_t)l >= cache_size)
                                return log_error(0, "Write to cache was truncated");
 
                        cache += l;
@@ -988,7 +979,7 @@ int proc_cpuinfo_read(char *buf, size_t size, off_t offset,
                        l = snprintf(cache, cache_size, "%s", line);
                        if (l < 0)
                                return log_error(0, "Failed to write cache");
-                       if (l >= cache_size)
+                       if ((size_t)l >= cache_size)
                                return log_error(0, "Write to cache was truncated");
 
                        cache += l;
@@ -1011,21 +1002,21 @@ int proc_cpuinfo_read(char *buf, size_t size, off_t offset,
                cache_size = d->buflen;
                total_len = 0;
                l = snprintf(cache, cache_size, "vendor_id       : IBM/S390\n");
-               if (l < 0 || l >= cache_size)
+               if (l < 0 || (size_t)l >= cache_size)
                        return 0;
 
                cache_size -= l;
                cache += l;
                total_len += l;
                l = snprintf(cache, cache_size, "# processors    : %d\n", curcpu + 1);
-               if (l < 0 || l >= cache_size)
+               if (l < 0 || (size_t)l >= cache_size)
                        return 0;
 
                cache_size -= l;
                cache += l;
                total_len += l;
                l = snprintf(cache, cache_size, "%s", origcache);
-               if (l < 0 || l >= cache_size)
+               if (l < 0 || (size_t)l >= cache_size)
                        return 0;
                total_len += l;
        }
index 6935d957410abe8fb45abae0365f5c4518843903..15511e96be292aaa4c0fa8d488e72e01eab6b4b8 100644 (file)
@@ -3,22 +3,19 @@
 #ifndef __LXCFS_PROC_CPUVIEW_FUSE_H
 #define __LXCFS_PROC_CPUVIEW_FUSE_H
 
-#ifndef _GNU_SOURCE
-#define _GNU_SOURCE
-#endif
-
-#ifndef FUSE_USE_VERSION
-#define FUSE_USE_VERSION 26
-#endif
-
-#define _FILE_OFFSET_BITS 64
+#include "config.h"
 
 #include <stdio.h>
 #include <stdlib.h>
 #include <sys/types.h>
 #include <unistd.h>
 
-#include "config.h"
+#if HAVE_FUSE3
+#include <fuse3/fuse.h>
+#else
+#include <fuse.h>
+#endif
+
 #include "macro.h"
 
 struct cpuacct_usage {
index bb7be96afae29d1700adc98d9c257a8993822a1a..8208a3222cfdc2c11f06ff65d6a45e252bec6874 100644 (file)
@@ -6,23 +6,10 @@
 
 #include "config.h"
 
-#ifdef HAVE_FUSE3
-#ifndef FUSE_USE_VERSION
-#define FUSE_USE_VERSION 30
-#endif
-#else
-#ifndef FUSE_USE_VERSION
-#define FUSE_USE_VERSION 26
-#endif
-#endif
-
-#define _FILE_OFFSET_BITS 64
-
 #define __STDC_FORMAT_MACROS
 #include <dirent.h>
 #include <errno.h>
 #include <fcntl.h>
-#include <fuse.h>
 #include <inttypes.h>
 #include <libgen.h>
 #include <pthread.h>
@@ -47,6 +34,8 @@
 #include <sys/sysinfo.h>
 #include <sys/vfs.h>
 
+#include "proc_fuse.h"
+
 #include "bindings.h"
 #include "cgroup_fuse.h"
 #include "cgroups/cgroup.h"
@@ -340,7 +329,7 @@ static int proc_swaps_read(char *buf, size_t size, off_t offset,
        size_t linelen = 0;
 
        if (offset) {
-               int left;
+               size_t left;
 
                if (offset > d->size)
                        return -EINVAL;
@@ -437,7 +426,7 @@ static int proc_swaps_read(char *buf, size_t size, off_t offset,
        d->cached = 1;
        d->size = (int)total_len;
 
-       if (total_len > size)
+       if ((size_t)total_len > size)
                total_len = size;
        memcpy(buf, d->buf, total_len);
 
@@ -511,7 +500,7 @@ static int proc_diskstats_read(char *buf, size_t size, off_t offset,
        int ret;
 
        if (offset) {
-               int left;
+               size_t left;
 
                if (offset > d->size)
                        return -EINVAL;
@@ -642,7 +631,7 @@ static int proc_diskstats_read(char *buf, size_t size, off_t offset,
                l = snprintf(cache, cache_size, "%s", lbuf);
                if (l < 0)
                        return log_error(0, "Failed to write cache");
-               if (l >= cache_size)
+               if ((size_t)l >= cache_size)
                        return log_error(0, "Write to cache was truncated");
 
                cache += l;
@@ -659,7 +648,7 @@ static int proc_diskstats_read(char *buf, size_t size, off_t offset,
        return total_len;
 }
 
-#if RELOADTEST
+#ifdef RELOADTEST
 static inline void iwashere(void)
 {
        mknod("/tmp/lxcfs-iwashere", S_IFREG, 0644);
@@ -814,12 +803,12 @@ static int proc_uptime_read(char *buf, size_t size, off_t offset,
        ssize_t total_len = 0, ret = 0;
        double busytime, idletime, reaperage;
 
-#if RELOADTEST
+#ifdef RELOADTEST
        iwashere();
 #endif
 
        if (offset) {
-               int left;
+               size_t left;
 
                if (offset > d->size)
                        return -EINVAL;
@@ -851,7 +840,7 @@ static int proc_uptime_read(char *buf, size_t size, off_t offset,
 
        d->cached = 1;
        d->size = total_len;
-       if (total_len > size)
+       if ((size_t)total_len > size)
                total_len = size;
        memcpy(buf, d->buf, total_len);
 
@@ -884,7 +873,7 @@ static int proc_stat_read(char *buf, size_t size, off_t offset,
        int cg_cpu_usage_size = 0;
 
        if (offset) {
-               int left;
+               size_t left;
 
                if (offset > d->size)
                        return -EINVAL;
@@ -958,7 +947,7 @@ static int proc_stat_read(char *buf, size_t size, off_t offset,
                        l = snprintf(cache, cache_size, "%s", line);
                        if (l < 0)
                                return log_error(0, "Failed to write cache");
-                       if (l >= cache_size)
+                       if ((size_t)l >= cache_size)
                                return log_error(0, "Write to cache was truncated");
 
                        cache += l;
@@ -995,7 +984,7 @@ static int proc_stat_read(char *buf, size_t size, off_t offset,
                        l = snprintf(cache, cache_size, "cpu%d%s", curcpu, c);
                        if (l < 0)
                                return log_error(0, "Failed to write cache");
-                       if (l >= cache_size)
+                       if ((size_t)l >= cache_size)
                                return log_error(0, "Write to cache was truncated");
 
                        cache += l;
@@ -1027,7 +1016,7 @@ static int proc_stat_read(char *buf, size_t size, off_t offset,
                                     cg_cpu_usage[physcpu].system, new_idle);
                        if (l < 0)
                                return log_error(0, "Failed to write cache");
-                       if (l >= cache_size)
+                       if ((size_t)l >= cache_size)
                                return log_error(0, "Write to cache was truncated");
 
                        cache += l;
@@ -1171,7 +1160,7 @@ static int proc_meminfo_read(char *buf, size_t size, off_t offset,
        int ret;
 
        if (offset) {
-               int left;
+               size_t left;
 
                if (offset > d->size)
                        return -EINVAL;
@@ -1381,7 +1370,7 @@ static int proc_meminfo_read(char *buf, size_t size, off_t offset,
                l = snprintf(cache, cache_size, "%s", printme);
                if (l < 0)
                        return log_error(0, "Failed to write cache");
-               if (l >= cache_size)
+               if ((size_t)l >= cache_size)
                        return log_error(0, "Write to cache was truncated");
 
                cache += l;
@@ -1413,7 +1402,7 @@ static int proc_slabinfo_read(char *buf, size_t size, off_t offset,
        pid_t initpid;
 
        if (offset) {
-               int left;
+               size_t left;
 
                if (offset > d->size)
                        return -EINVAL;
@@ -1450,7 +1439,7 @@ static int proc_slabinfo_read(char *buf, size_t size, off_t offset,
                ssize_t l = snprintf(cache, cache_size, "%s", line);
                if (l < 0)
                        return log_error(0, "Failed to write cache");
-               if (l >= cache_size)
+               if ((size_t)l >= cache_size)
                        return log_error(0, "Write to cache was truncated");
 
                cache += l;
index f6960853fa534312f7ead5fc0dd2c887c66b4b2e..2c1f5727058e972cbb93e9f99bc625ebe16ec098 100644 (file)
@@ -3,24 +3,20 @@
 #ifndef __LXCFS_PROC_FUSE_H
 #define __LXCFS_PROC_FUSE_H
 
-#ifndef _GNU_SOURCE
-#define _GNU_SOURCE
-#endif
+#include "config.h"
 
-#ifndef FUSE_USE_VERSION
-#define FUSE_USE_VERSION 26
+#if HAVE_FUSE3
+#include <fuse3/fuse.h>
+#else
+#include <fuse.h>
 #endif
 
-#define _FILE_OFFSET_BITS 64
-
-#include <fuse.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <sys/stat.h>
 #include <sys/types.h>
 #include <unistd.h>
 
-#include "config.h"
 #include "macro.h"
 
 __visible extern int proc_getattr(const char *path, struct stat *sb);
index ca90b06a1aad0eb1b9e73c6d6c440793a6af38b2..b70437a930239739c29a4659b3fa5079ba329005 100644 (file)
@@ -6,23 +6,10 @@
 
 #include "config.h"
 
-#ifdef HAVE_FUSE3
-#ifndef FUSE_USE_VERSION
-#define FUSE_USE_VERSION 30
-#endif
-#else
-#ifndef FUSE_USE_VERSION
-#define FUSE_USE_VERSION 26
-#endif
-#endif
-
-#define _FILE_OFFSET_BITS 64
-
 #define __STDC_FORMAT_MACROS
 #include <dirent.h>
 #include <errno.h>
 #include <fcntl.h>
-#include <fuse.h>
 #include <inttypes.h>
 #include <libgen.h>
 #include <pthread.h>
@@ -47,6 +34,8 @@
 #include <sys/sysinfo.h>
 #include <sys/vfs.h>
 
+#include "proc_loadavg.h"
+
 #include "bindings.h"
 #include "cgroup_fuse.h"
 #include "cgroups/cgroup.h"
@@ -185,7 +174,7 @@ int proc_loadavg_read(char *buf, size_t size, off_t offset,
        uint64_t a, b, c;
 
        if (offset) {
-               int left;
+               size_t left;
 
                if (offset > d->size)
                        return -EINVAL;
@@ -263,7 +252,7 @@ int proc_loadavg_read(char *buf, size_t size, off_t offset,
        d->size = (int)total_len;
        d->cached = 1;
 
-       if (total_len > size)
+       if ((size_t)total_len > size)
                total_len = size;
 
        memcpy(buf, d->buf, total_len);
index 34b61babd98299ba35ce6bc8e8a86691f0dd61bc..bb6a78b1aefbd8b794a1d0dda65f4aa413c0db25 100644 (file)
@@ -3,24 +3,20 @@
 #ifndef __LXCFS_PROC_LOADAVG_FUSE_H
 #define __LXCFS_PROC_LOADAVG_FUSE_H
 
-#ifndef _GNU_SOURCE
-#define _GNU_SOURCE
-#endif
-
-#ifndef FUSE_USE_VERSION
-#define FUSE_USE_VERSION 26
-#endif
-
-#define _FILE_OFFSET_BITS 64
+#include "config.h"
 
-#include <fuse.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <sys/stat.h>
 #include <sys/types.h>
 #include <unistd.h>
 
-#include "config.h"
+#if HAVE_FUSE3
+#include <fuse3/fuse.h>
+#else
+#include <fuse.h>
+#endif
+
 #include "macro.h"
 
 __visible extern pthread_t load_daemon(int load_use);
index 4c74db7444670955e80cb950abc93d9098585b80..4525b69e92612ecb9e75df66bafc48c73f677bd4 100644 (file)
@@ -6,29 +6,16 @@
 
 #include "config.h"
 
-#ifdef HAVE_FUSE3
-#ifndef FUSE_USE_VERSION
-#define FUSE_USE_VERSION 30
-#endif
-#else
-#ifndef FUSE_USE_VERSION
-#define FUSE_USE_VERSION 26
-#endif
-#endif
-
 /* Taken over modified from the kernel sources. */
 #define NBITS 32 /* bits in uint32_t */
 #define DIV_ROUND_UP(n, d) (((n) + (d)-1) / (d))
 #define BITS_TO_LONGS(nr) DIV_ROUND_UP(nr, NBITS)
 
-#define _FILE_OFFSET_BITS 64
-
 #define __STDC_FORMAT_MACROS
 #include <ctype.h>
 #include <dirent.h>
 #include <errno.h>
 #include <fcntl.h>
-#include <fuse.h>
 #include <inttypes.h>
 #include <libgen.h>
 #include <pthread.h>
 #include <sys/sysinfo.h>
 #include <sys/vfs.h>
 
+#include "sysfs_fuse.h"
+
 #include "bindings.h"
 #include "memory_utils.h"
 #include "cgroups/cgroup.h"
 #include "lxcfs_fuse_compat.h"
-#include "sysfs_fuse.h"
 #include "utils.h"
 
 static ssize_t get_max_cpus(char *cpulist)
@@ -159,7 +147,7 @@ static int sys_devices_system_cpu_online_read(char *buf, size_t size,
        ssize_t total_len = 0;
 
        if (offset) {
-               int left;
+               size_t left;
 
                if (!d->cached)
                        return 0;
@@ -209,7 +197,7 @@ static int sys_devices_system_cpu_online_read(char *buf, size_t size,
        d->size = (int)total_len;
        d->cached = 1;
 
-       if (total_len > size)
+       if ((size_t)total_len > size)
                total_len = size;
 
        memcpy(buf, d->buf, total_len);
@@ -250,7 +238,7 @@ static int filler_sys_devices_system_cpu(const char *path, void *buf,
        if (!cpumask)
                return -errno;
 
-       for (size_t i = 0; i < max_cpus; i++) {
+       for (ssize_t i = 0; i < max_cpus; i++) {
                int ret;
                char cpu[100];
 
@@ -258,7 +246,7 @@ static int filler_sys_devices_system_cpu(const char *path, void *buf,
                        continue;
 
                ret = snprintf(cpu, sizeof(cpu), "cpu%ld", i);
-               if (ret < 0 || ret >= sizeof(cpu))
+               if (ret < 0 || (size_t)ret >= sizeof(cpu))
                        continue;
 
                if (DIR_FILLER(filler, buf, cpu, NULL, 0) != 0)
@@ -543,14 +531,16 @@ __lxcfs_fuse_ops int sys_readdir(const char *path, void *buf,
 
 __lxcfs_fuse_ops int sys_readlink(const char *path, char *buf, size_t size)
 {
-       int ret = readlink(path, buf, size);
+       ssize_t ret;
 
        if (!liblxcfs_functional())
                return -EIO;
 
+       ret = readlink(path, buf, size);
        if (ret < 0)
                return -errno;
-       if (ret > size)
+
+       if ((size_t)ret > size)
                return -1;
 
        buf[ret] = '\0';
index 592e8ecb7be1de9912efc8723a42b998b7723150..f151af7fb3c581a109e04d483c5035675dfafdcc 100644 (file)
@@ -3,24 +3,20 @@
 #ifndef __LXCFS_SYSFS_FUSE_H
 #define __LXCFS_SYSFS_FUSE_H
 
-#ifndef _GNU_SOURCE
-#define _GNU_SOURCE
-#endif
-
-#ifndef FUSE_USE_VERSION
-#define FUSE_USE_VERSION 26
-#endif
-
-#define _FILE_OFFSET_BITS 64
+#include "config.h"
 
-#include <fuse.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <sys/stat.h>
 #include <sys/types.h>
 #include <unistd.h>
 
-#include "config.h"
+#if HAVE_FUSE3
+#include <fuse3/fuse.h>
+#else
+#include <fuse.h>
+#endif
+
 #include "macro.h"
 
 __visible extern int sys_getattr(const char *path, struct stat *sb);
index 65629eb6850c35118b66e338e103508bf952fa9d..99271854ebb8ee23e1d592b50bfd4f26fe753334 100644 (file)
@@ -6,22 +6,10 @@
 
 #include "config.h"
 
-#ifdef HAVE_FUSE3
-#ifndef FUSE_USE_VERSION
-#define FUSE_USE_VERSION 30
-#endif
-#else
-#ifndef FUSE_USE_VERSION
-#define FUSE_USE_VERSION 26
-#endif
-#endif
-
 #define _FILE_OFFSET_BITS 64
-
 #include <ctype.h>
 #include <errno.h>
 #include <fcntl.h>
-#include <fuse.h>
 #include <inttypes.h>
 #include <sched.h>
 #include <stdarg.h>
 #include <sys/wait.h>
 #include <unistd.h>
 
+#include "utils.h"
+
 #include "bindings.h"
 #include "macro.h"
 #include "memory_utils.h"
-#include "utils.h"
 
 /*
  * append the given formatted string to *src.
@@ -331,10 +320,12 @@ int read_file_fuse(const char *path, char *buf, size_t size, struct file_info *d
                return 0;
 
        while (getline(&line, &linelen, f) != -1) {
-               ssize_t l = snprintf(cache, cache_size, "%s", line);
+               ssize_t l;
+
+               l = snprintf(cache, cache_size, "%s", line);
                if (l < 0)
                        return log_error(0, "Failed to write cache");
-               if (l >= cache_size)
+               if ((size_t)l >= cache_size)
                        return log_error(0, "Write to cache was truncated");
 
                cache += l;
@@ -349,7 +340,7 @@ int read_file_fuse(const char *path, char *buf, size_t size, struct file_info *d
        /* read from off 0 */
        memcpy(buf, d->buf, total_len);
 
-       if (d->size > total_len)
+       if (d->size > (int)total_len)
                d->cached = d->size - total_len;
 
        return total_len;
@@ -361,7 +352,7 @@ int read_file_fuse_with_offset(const char *path, char *buf, size_t size,
        if (offset) {
                ssize_t total_len = 0;
                char *cache = d->buf;
-               int left;
+               size_t left;
 
                if (offset > d->size)
                        return -EINVAL;
index c8f31e9caabda25805ed6f70bf8e1038e49d3702..e19eba49bcdac19a07cc3ddc8497d0ab20b8625d 100644 (file)
@@ -3,17 +3,8 @@
 #ifndef __LXCFS_UTILS_H
 #define __LXCFS_UTILS_H
 
-#ifndef _GNU_SOURCE
-#define _GNU_SOURCE
-#endif
-
-#ifndef FUSE_USE_VERSION
-#define FUSE_USE_VERSION 26
-#endif
-
-#define _FILE_OFFSET_BITS 64
+#include "config.h"
 
-#include <fuse.h>
 #include <signal.h>
 #include <stdbool.h>
 #include <sys/socket.h>
 #include <sys/syscall.h>
 #include <unistd.h>
 
-#include "config.h"
+#if HAVE_FUSE3
+#include <fuse3/fuse.h>
+#else
+#include <fuse.h>
+#endif
+
 #include "macro.h"
 #include "syscall_numbers.h"
 
@@ -49,14 +45,14 @@ extern int read_file_fuse_with_offset(const char *path, char *buf, size_t size,
 extern void prune_init_slice(char *cg);
 extern int wait_for_pid(pid_t pid);
 
-#ifndef HAVE_PIDFD_OPEN
+#if !HAVE_PIDFD_OPEN
 static inline int pidfd_open(pid_t pid, unsigned int flags)
 {
        return syscall(__NR_pidfd_open, pid, flags);
 }
 #endif
 
-#ifndef HAVE_PIDFD_SEND_SIGNAL
+#if !HAVE_PIDFD_SEND_SIGNAL
 static inline int pidfd_send_signal(int pidfd, int sig, siginfo_t *info,
                                    unsigned int flags)
 {
diff --git a/tests/Makefile.am b/tests/Makefile.am
deleted file mode 100644 (file)
index 8572269..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-EXTRA_DIST = \
-       cpusetrange.c \
-       main.sh \
-       test_cgroup \
-       test_confinement.sh \
-       test_meminfo_hierarchy.sh \
-       test_proc \
-       test-read.c \
-       test_read_proc.sh \
-       test_readdir \
-       test_reload.sh \
-       test_sigusr2.sh \
-       test_syscalls.c
-
-TEST_READ: test-read.c
-       $(CC) -o test-read test-read.c
-TEST_CPUSET: cpusetrange.c
-       $(CC) -I../ -I../src/ -o cpusetrange cpusetrange.c ../src/cpuset_parse.c
-TEST_SYSCALLS: test_syscalls.c
-       $(CC) -o test_syscalls test_syscalls.c
-
-tests: TEST_READ TEST_CPUSET TEST_SYSCALLS
index 06bbe4ef7b00afb1ba4123fc658c5b8a9ff07c56..38eea26b73b846114e8c96881dd69d12f633c6bd 100644 (file)
@@ -4,11 +4,7 @@
 #define _GNU_SOURCE
 #endif
 
-#ifndef FUSE_USE_VERSION
-#define FUSE_USE_VERSION 26
-#endif
-
-#define _FILE_OFFSET_BITS 64
+#include "config.h"
 
 #include <stdio.h>
 #include <string.h>
@@ -26,7 +22,7 @@ static void verify(bool condition) {
        }
 }
 
-int main() {
+int main(void) {
        char *a = "1,2";
        char *b = "1-3,5";
        char *c = "1,4-5";
diff --git a/tests/main.sh b/tests/main.sh
deleted file mode 100755 (executable)
index 1231a0a..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-#!/bin/sh
-# SPDX-License-Identifier: LGPL-2.1+
-
-set -eu
-[ -n "${DEBUG:-}" ] && set -x
-
-[ $(id -u) -eq 0 ]
-
-# Run lxcfs testsuite
-export LXCFSDIR=$(mktemp -d)
-pidfile=$(mktemp)
-export LXCFSPID=-1
-
-cmdline=$(realpath $0)
-dirname=$(dirname ${cmdline})
-topdir=$(dirname ${dirname})
-
-FAILED=1
-UNSHARE=1
-cleanup() {
-       echo "=> Cleaning up"
-       set +e
-       if [ $LXCFSPID -ne -1 ]; then
-               kill -9 $LXCFSPID
-       fi
-       if [ ${LXCFSDIR} != "/var/lib/lxcfs" ]; then
-               umount -l ${LXCFSDIR}
-               rmdir ${LXCFSDIR}
-       fi
-       rm -f ${pidfile}
-       if [ ${FAILED} -eq 1 ]; then
-               echo "=> FAILED at $TESTCASE"
-               exit 1
-       fi
-       echo "=> PASSED"
-       exit 0
-}
-
-TESTCASE="setup"
-lxcfs=${topdir}/src/lxcfs
-
-if [ -x ${lxcfs} ]; then
-       if [ -n "${LD_LIBRARY_PATH:-}" ]; then
-               export LD_LIBRARY_PATH="${topdir}/src/.libs/:${LD_LIBRARY_PATH}"
-       else
-               export LD_LIBRARY_PATH="${topdir}/src/.libs/"
-       fi
-       echo "=> Spawning ${lxcfs} ${LXCFSDIR}"
-       ${lxcfs} -p ${pidfile} ${LXCFSDIR} &
-       LXCFSPID=$!
-else
-       UNSHARE=0
-       LXCFSPID=$(cat "/run/lxcfs.pid")
-       echo "=> Re-using host lxcfs"
-       rmdir $LXCFSDIR
-       export LXCFSDIR=/var/lib/lxcfs
-fi
-
-trap cleanup EXIT HUP INT TERM
-
-count=1
-while ! mountpoint -q $LXCFSDIR; do
-       sleep 1s
-       if [ $count -gt 5 ]; then
-               echo "lxcfs failed to start"
-               false
-       fi
-       count=$((count+1))
-done
-
-RUNTEST() {
-       echo ""
-       echo "=> Running ${TESTCASE}"
-
-       if [ "${UNSHARE:-1}" != "0" ]; then
-               unshare -fmp --mount-proc $*
-       else
-               $*
-       fi
-}
-
-TESTCASE="Stress readdir"
-RUNTEST ${dirname}/test_readdir
-TESTCASE="test_proc"
-RUNTEST ${dirname}/test_proc
-TESTCASE="test_cgroup"
-RUNTEST ${dirname}/test_cgroup
-TESTCASE="test_read_proc.sh"
-RUNTEST ${dirname}/test_read_proc.sh
-TESTCASE="cpusetrange"
-RUNTEST ${dirname}/cpusetrange
-TESTCASE="meminfo hierarchy"
-RUNTEST ${dirname}/test_meminfo_hierarchy.sh
-TESTCASE="liblxcfs reloading"
-UNSHARE=0 RUNTEST ${dirname}/test_reload.sh
-TESTCASE="SIGUSR2 virtualization mode switching"
-echo "==> Switching to non-virtualization mode"
-kill -USR2 $LXCFSPID
-RUNTEST ${dirname}/test_sigusr2.sh
-echo "==> Switching to virtualization mode"
-kill -USR2 $LXCFSPID
-
-# Check for any defunct processes - children we didn't reap
-n=`ps -ef | grep lxcfs | grep defunct | wc -l`
-[ $n = 0 ]
-
-FAILED=0
diff --git a/tests/main.sh.in b/tests/main.sh.in
new file mode 100755 (executable)
index 0000000..261fc99
--- /dev/null
@@ -0,0 +1,106 @@
+#!/bin/sh
+# SPDX-License-Identifier: LGPL-2.1+
+
+set -eu
+[ -n "${DEBUG:-}" ] && set -x
+
+[ $(id -u) -eq 0 ]
+
+# Run lxcfs testsuite
+export LXCFSDIR=$(mktemp -d)
+pidfile=$(mktemp)
+export LXCFSPID=-1
+
+cmdline=$(realpath $0)
+dirname=$(dirname ${cmdline})
+
+FAILED=1
+UNSHARE=1
+cleanup() {
+       echo "=> Cleaning up"
+       set +e
+       if [ $LXCFSPID -ne -1 ]; then
+               kill -9 $LXCFSPID
+       fi
+       if [ ${LXCFSDIR} != "/var/lib/lxcfs" ]; then
+               umount -l ${LXCFSDIR}
+               rmdir ${LXCFSDIR}
+       fi
+       rm -f ${pidfile}
+       if [ ${FAILED} -eq 1 ]; then
+               echo "=> FAILED at $TESTCASE"
+               exit 1
+       fi
+       echo "=> PASSED"
+       exit 0
+}
+
+TESTCASE="setup"
+lxcfs="@LXCFS_BUILD_ROOT@/lxcfs"
+
+if [ -x ${lxcfs} ]; then
+       if [ -n "${LD_LIBRARY_PATH:-}" ]; then
+               export LD_LIBRARY_PATH="@LXCFS_BUILD_ROOT@:${LD_LIBRARY_PATH}"
+       else
+               export LD_LIBRARY_PATH="@LXCFS_BUILD_ROOT@"
+       fi
+       echo "=> Spawning ${lxcfs} ${LXCFSDIR}"
+       ${lxcfs} -p ${pidfile} ${LXCFSDIR} &
+       LXCFSPID=$!
+else
+       UNSHARE=0
+       LXCFSPID=$(cat "@RUNTIME_PATH@/lxcfs.pid")
+       echo "=> Re-using host lxcfs"
+       rmdir $LXCFSDIR
+       export LXCFSDIR=/var/lib/lxcfs
+fi
+
+trap cleanup EXIT HUP INT TERM
+
+count=1
+while ! mountpoint -q $LXCFSDIR; do
+       sleep 1s
+       if [ $count -gt 5 ]; then
+               echo "lxcfs failed to start"
+               false
+       fi
+       count=$((count+1))
+done
+
+RUNTEST() {
+       echo ""
+       echo "=> Running ${TESTCASE}"
+
+       if [ "${UNSHARE:-1}" != "0" ]; then
+               unshare -fmp --mount-proc $*
+       else
+               $*
+       fi
+}
+
+TESTCASE="Stress readdir"
+RUNTEST ${dirname}/test_readdir
+TESTCASE="test_proc"
+RUNTEST ${dirname}/test_proc
+TESTCASE="test_cgroup"
+RUNTEST ${dirname}/test_cgroup
+TESTCASE="test_read_proc.sh"
+RUNTEST ${dirname}/test_read_proc.sh
+TESTCASE="cpusetrange"
+RUNTEST ${dirname}/test-cpusetrange
+TESTCASE="meminfo hierarchy"
+RUNTEST ${dirname}/test_meminfo_hierarchy.sh
+TESTCASE="liblxcfs reloading"
+UNSHARE=0 RUNTEST ${dirname}/test_reload.sh
+TESTCASE="SIGUSR2 virtualization mode switching"
+echo "==> Switching to non-virtualization mode"
+kill -USR2 $LXCFSPID
+RUNTEST ${dirname}/test_sigusr2.sh
+echo "==> Switching to virtualization mode"
+kill -USR2 $LXCFSPID
+
+# Check for any defunct processes - children we didn't reap
+n=`ps -ef | grep lxcfs | grep defunct | wc -l`
+[ $n = 0 ]
+
+FAILED=0
diff --git a/tests/meson.build b/tests/meson.build
new file mode 100644 (file)
index 0000000..eafcd1f
--- /dev/null
@@ -0,0 +1,73 @@
+# SPDX-License-Identifier: LGPL-2.1-or-later
+
+test_main = configure_file(
+        input : 'main.sh.in',
+        output : 'main.sh',
+        configuration : conf)
+
+test_main = configure_file(
+        input : 'test_cgroup.in',
+        output : 'test_cgroup',
+        configuration : conf)
+
+test_main = configure_file(
+        input : 'test_confinement.sh.in',
+        output : 'test_confinement.sh',
+        configuration : conf)
+
+test_main = configure_file(
+        input : 'test_meminfo_hierarchy.sh.in',
+        output : 'test_meminfo_hierarchy.sh',
+        configuration : conf)
+
+test_main = configure_file(
+        input : 'test_proc.in',
+        output : 'test_proc',
+        configuration : conf)
+
+test_main = configure_file(
+        input : 'test_read_proc.sh.in',
+        output : 'test_read_proc.sh',
+        configuration : conf)
+
+test_main = configure_file(
+        input : 'test_readdir.in',
+        output : 'test_readdir',
+        configuration : conf)
+
+test_main = configure_file(
+        input : 'test_reload.sh.in',
+        output : 'test_reload.sh',
+        configuration : conf)
+
+test_main = configure_file(
+        input : 'test_sigusr2.sh.in',
+        output : 'test_sigusr2.sh',
+        configuration : conf)
+
+test_read = executable(
+        'test-read',
+        'test-read.c',
+       include_directories: config_include,
+       install: false,
+        build_by_default : want_tests != false)
+
+test_syscalls = executable(
+        'test-syscalls',
+        'test_syscalls.c',
+       include_directories: config_include,
+       install: false,
+        build_by_default : want_tests != false)
+
+test_cpusetrange_sources = files(
+               'cpusetrange.c',
+               '../src/cpuset_parse.c',
+               '../src/cpuset_parse.h')
+
+test_cpusetrange = executable(
+        'test-cpusetrange',
+        test_cpusetrange_sources,
+       include_directories: config_include,
+       install: false,
+        build_by_default : want_tests != false)
+
index 5be9e43450cfe651a33a95e1eaa01aabf56daf7a..9166dde842077dc374bbea9d408043b0b1d5a86a 100644 (file)
@@ -4,11 +4,7 @@
 #define _GNU_SOURCE
 #endif
 
-#ifndef FUSE_USE_VERSION
-#define FUSE_USE_VERSION 26
-#endif
-
-#define _FILE_OFFSET_BITS 64
+#include "config.h"
 
 #include <stdio.h>
 #include <unistd.h>
diff --git a/tests/test_cgroup b/tests/test_cgroup
deleted file mode 100755 (executable)
index 17eba9f..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-#!/bin/sh
-# SPDX-License-Identifier: LGPL-2.1+
-
-set -eu
-[ -n "${DEBUG:-}" ] && set -x
-
-PASS=0
-UUID=$(uuidgen)
-
-cleanup() {
-    [ "$PASS" = "1" ] || (echo FAIL && exit 1)
-}
-
-LXCFSDIR=${LXCFSDIR:-/var/lib/lxcfs}
-
-trap cleanup EXIT HUP INT TERM
-
-if ! mountpoint -q ${LXCFSDIR}; then
-    echo "lxcfs isn't mounted on ${LXCFSDIR}"
-    exit 1
-fi
-
-echo "==> Setting up memory, freeze and cpuset cgroups"
-for c in memory freezer cpuset; do
-       [ ! -d /sys/fs/cgroup/${c} ] && exit 0
-done
-
-initcpuset=`awk -F: '/cpuset/ { print $3 }' /proc/1/cgroup`
-initmemory=`awk -F: '/memory/ { print $3 }' /proc/1/cgroup`
-initfreezer=`awk -F: '/freezer/ { print $3 }' /proc/1/cgroup`
-
-cpupath=/sys/fs/cgroup/cpuset/${initcpuset}
-mempath=/sys/fs/cgroup/memory/${initmemory}
-frzpath=/sys/fs/cgroup/freezer/${initfreezer}
-
-rmdir ${cpupath}/${UUID} 2>/dev/null || true
-rmdir ${mempath}/${UUID} 2>/dev/null || true
-rmdir ${frzpath}/${UUID} 2>/dev/null || true
-mkdir ${cpupath}/${UUID}
-mkdir ${mempath}/${UUID}
-mkdir ${frzpath}/${UUID}
-
-# Check that the fs is readable
-for p in ${mempath} ${frzpath} ${cpupath}; do
-       echo "==> Test that ${p} is readable"
-       find ${p} > /dev/null
-       echo 1 > ${p}/${UUID}/tasks
-done
-
-echo "==> Testing memory.limit_in_bytes"
-echo $((64*1024*1024)) > ${LXCFSDIR}/cgroup/memory/${initmemory}/${UUID}/memory.limit_in_bytes
-v=`cat $mempath/${UUID}/memory.limit_in_bytes`
-[ "$v" = "$((64*1024*1024))" ]
-
-echo "==> Testing cpuset.cpus"
-echo 0 > ${LXCFSDIR}/cgroup/cpuset/${initcpuset}/${UUID}/cpuset.cpus
-v=`cat ${cpupath}/${UUID}/cpuset.cpus`
-[ "$v" = "0" ]
-
-PASS=1
diff --git a/tests/test_cgroup.in b/tests/test_cgroup.in
new file mode 100755 (executable)
index 0000000..17eba9f
--- /dev/null
@@ -0,0 +1,60 @@
+#!/bin/sh
+# SPDX-License-Identifier: LGPL-2.1+
+
+set -eu
+[ -n "${DEBUG:-}" ] && set -x
+
+PASS=0
+UUID=$(uuidgen)
+
+cleanup() {
+    [ "$PASS" = "1" ] || (echo FAIL && exit 1)
+}
+
+LXCFSDIR=${LXCFSDIR:-/var/lib/lxcfs}
+
+trap cleanup EXIT HUP INT TERM
+
+if ! mountpoint -q ${LXCFSDIR}; then
+    echo "lxcfs isn't mounted on ${LXCFSDIR}"
+    exit 1
+fi
+
+echo "==> Setting up memory, freeze and cpuset cgroups"
+for c in memory freezer cpuset; do
+       [ ! -d /sys/fs/cgroup/${c} ] && exit 0
+done
+
+initcpuset=`awk -F: '/cpuset/ { print $3 }' /proc/1/cgroup`
+initmemory=`awk -F: '/memory/ { print $3 }' /proc/1/cgroup`
+initfreezer=`awk -F: '/freezer/ { print $3 }' /proc/1/cgroup`
+
+cpupath=/sys/fs/cgroup/cpuset/${initcpuset}
+mempath=/sys/fs/cgroup/memory/${initmemory}
+frzpath=/sys/fs/cgroup/freezer/${initfreezer}
+
+rmdir ${cpupath}/${UUID} 2>/dev/null || true
+rmdir ${mempath}/${UUID} 2>/dev/null || true
+rmdir ${frzpath}/${UUID} 2>/dev/null || true
+mkdir ${cpupath}/${UUID}
+mkdir ${mempath}/${UUID}
+mkdir ${frzpath}/${UUID}
+
+# Check that the fs is readable
+for p in ${mempath} ${frzpath} ${cpupath}; do
+       echo "==> Test that ${p} is readable"
+       find ${p} > /dev/null
+       echo 1 > ${p}/${UUID}/tasks
+done
+
+echo "==> Testing memory.limit_in_bytes"
+echo $((64*1024*1024)) > ${LXCFSDIR}/cgroup/memory/${initmemory}/${UUID}/memory.limit_in_bytes
+v=`cat $mempath/${UUID}/memory.limit_in_bytes`
+[ "$v" = "$((64*1024*1024))" ]
+
+echo "==> Testing cpuset.cpus"
+echo 0 > ${LXCFSDIR}/cgroup/cpuset/${initcpuset}/${UUID}/cpuset.cpus
+v=`cat ${cpupath}/${UUID}/cpuset.cpus`
+[ "$v" = "0" ]
+
+PASS=1
diff --git a/tests/test_confinement.sh b/tests/test_confinement.sh
deleted file mode 100755 (executable)
index 4fb49ea..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-#!/bin/sh
-# SPDX-License-Identifier: LGPL-2.1+
-
-set -ex
-
-UUID=$(uuidgen)
-
-[ $(id -u) -eq 0 ]
-
-d=$(mktemp -t -d tmp.XXX)
-d2=$(mktemp -t -d tmp.XXX)
-
-pid=-1
-cleanup() {
-       [ $pid -ne -1 ] && kill -9 $pid
-       umount -l $d || true
-       umount -l $d2 || true
-       rm -rf $d $d2
-}
-
-cmdline=$(realpath $0)
-dirname=$(dirname ${cmdline})
-topdir=$(dirname ${dirname})
-
-trap cleanup EXIT HUP INT TERM
-
-${topdir}/lxcfs $d &
-pid=$!
-
-# put ourselves into x1
-cgm movepidabs freezer / 1
-cgm create freezer x1
-cgm movepid freezer x1 1
-
-mount -t cgroup -o freezer freezer $d2
-sudo rmdir $d2/${UUID}_a1/${UUID}_a2 || true
-sudo rmdir $d2/${UUID}_a1 || true
-
-echo "Making sure root cannot mkdir"
-bad=0
-mkdir $d/cgroup/freezer/${UUID}_a1 && bad=1
-if [ "${bad}" -eq 1 ]; then
-       false
-fi
-
-echo "Making sure root cannot rmdir"
-mkdir $d2/${UUID}_a1
-mkdir $d2/${UUID}_a1/${UUID}_a2
-rmdir $d/cgroup/freezer/${UUID}_a1 && bad=1
-if [ "${bad}" -eq 1 ]; then
-       false
-fi
-[ -d $d2/${UUID}_a1 ]
-rmdir $d/cgroup/freezer/${UUID}_a1/${UUID}_a2 && bad=1
-if [ "${bad}" -eq 1 ]; then
-       false
-fi
-[ -d $d2/${UUID}_a1/${UUID}_a2 ]
-
-echo "Making sure root cannot read/write"
-sleep 200 &
-p=$!
-echo $p > $d/cgroup/freezer/${UUID}_a1/tasks && bad=1
-if [ "${bad}" -eq 1 ]; then
-       false
-fi
-cat $d/cgroup/freezer/${UUID}_a1/tasks && bad=1
-if [ "${bad}" -eq 1 ]; then
-       false
-fi
-echo $p > $d/cgroup/freezer/${UUID}_a1/${UUID}_a2/tasks && bad=1
-if [ "${bad}" -eq 1 ]; then
-       false
-fi
-cat $d/cgroup/freezer/${UUID}_a1/${UUID}_a2/tasks && bad=1
-if [ "${bad}" -eq 1 ]; then
-       false
-fi
-
-# make sure things like truncate and access don't leak info about
-# the /${UUID}_a1 cgroup which we shouldn't be able to reach
-echo "Testing other system calls"
-${dirname}/test_syscalls $d/cgroup/freezer/${UUID}_a1
-${dirname}/test_syscalls $d/cgroup/freezer/${UUID}_a1/${UUID}_a2
-
-echo "Making sure root can act on descendents"
-mycg=$(cgm getpidcgroupabs freezer 1)
-newcg=${mycg}/${UUID}_a1
-rmdir $d2/$newcg || true  # cleanup previosu run
-mkdir $d/cgroup/freezer/$newcg
-echo $p > $d/cgroup/freezer/$newcg/tasks
-cat $d/cgroup/freezer/$newcg/tasks
-kill -9 $p
-while [ `wc -l $d/cgroup/freezer/$newcg/tasks | awk '{ print $1 }'` -ne 0 ]; do
-       sleep 1
-done
-rmdir $d/cgroup/freezer/$newcg
-
-echo "All tests passed!"
diff --git a/tests/test_confinement.sh.in b/tests/test_confinement.sh.in
new file mode 100755 (executable)
index 0000000..345ae12
--- /dev/null
@@ -0,0 +1,98 @@
+#!/bin/sh
+# SPDX-License-Identifier: LGPL-2.1+
+
+set -ex
+
+UUID=$(uuidgen)
+
+[ $(id -u) -eq 0 ]
+
+d=$(mktemp -t -d tmp.XXX)
+d2=$(mktemp -t -d tmp.XXX)
+
+pid=-1
+cleanup() {
+       [ $pid -ne -1 ] && kill -9 $pid
+       umount -l $d || true
+       umount -l $d2 || true
+       rm -rf $d $d2
+}
+
+cmdline=$(realpath $0)
+dirname=$(dirname ${cmdline})
+
+trap cleanup EXIT HUP INT TERM
+
+lxcfs="@LXCFS_BUILD_ROOT@/lxcfs" $d &
+pid=$!
+
+# put ourselves into x1
+cgm movepidabs freezer / 1
+cgm create freezer x1
+cgm movepid freezer x1 1
+
+mount -t cgroup -o freezer freezer $d2
+sudo rmdir $d2/${UUID}_a1/${UUID}_a2 || true
+sudo rmdir $d2/${UUID}_a1 || true
+
+echo "Making sure root cannot mkdir"
+bad=0
+mkdir $d/cgroup/freezer/${UUID}_a1 && bad=1
+if [ "${bad}" -eq 1 ]; then
+       false
+fi
+
+echo "Making sure root cannot rmdir"
+mkdir $d2/${UUID}_a1
+mkdir $d2/${UUID}_a1/${UUID}_a2
+rmdir $d/cgroup/freezer/${UUID}_a1 && bad=1
+if [ "${bad}" -eq 1 ]; then
+       false
+fi
+[ -d $d2/${UUID}_a1 ]
+rmdir $d/cgroup/freezer/${UUID}_a1/${UUID}_a2 && bad=1
+if [ "${bad}" -eq 1 ]; then
+       false
+fi
+[ -d $d2/${UUID}_a1/${UUID}_a2 ]
+
+echo "Making sure root cannot read/write"
+sleep 200 &
+p=$!
+echo $p > $d/cgroup/freezer/${UUID}_a1/tasks && bad=1
+if [ "${bad}" -eq 1 ]; then
+       false
+fi
+cat $d/cgroup/freezer/${UUID}_a1/tasks && bad=1
+if [ "${bad}" -eq 1 ]; then
+       false
+fi
+echo $p > $d/cgroup/freezer/${UUID}_a1/${UUID}_a2/tasks && bad=1
+if [ "${bad}" -eq 1 ]; then
+       false
+fi
+cat $d/cgroup/freezer/${UUID}_a1/${UUID}_a2/tasks && bad=1
+if [ "${bad}" -eq 1 ]; then
+       false
+fi
+
+# make sure things like truncate and access don't leak info about
+# the /${UUID}_a1 cgroup which we shouldn't be able to reach
+echo "Testing other system calls"
+${dirname}/test-syscalls $d/cgroup/freezer/${UUID}_a1
+${dirname}/test-syscalls $d/cgroup/freezer/${UUID}_a1/${UUID}_a2
+
+echo "Making sure root can act on descendents"
+mycg=$(cgm getpidcgroupabs freezer 1)
+newcg=${mycg}/${UUID}_a1
+rmdir $d2/$newcg || true  # cleanup previosu run
+mkdir $d/cgroup/freezer/$newcg
+echo $p > $d/cgroup/freezer/$newcg/tasks
+cat $d/cgroup/freezer/$newcg/tasks
+kill -9 $p
+while [ `wc -l $d/cgroup/freezer/$newcg/tasks | awk '{ print $1 }'` -ne 0 ]; do
+       sleep 1
+done
+rmdir $d/cgroup/freezer/$newcg
+
+echo "All tests passed!"
diff --git a/tests/test_meminfo_hierarchy.sh b/tests/test_meminfo_hierarchy.sh
deleted file mode 100755 (executable)
index de3b672..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-#!/bin/sh
-# SPDX-License-Identifier: LGPL-2.1+
-
-set -eu
-[ -n "${DEBUG:-}" ] && set -x
-
-LXCFSDIR=${LXCFSDIR:-/var/lib/lxcfs}
-
-cg1=$(uuidgen).$$
-cg2=$(uuidgen).$$
-
-cleanup() {
-       if [ $FAILED -eq 1 ]; then
-               exit 1
-       fi
-       exit 0
-}
-
-FAILED=1
-trap cleanup EXIT HUP INT TERM
-
-[ ! -d /sys/fs/cgroup/memory ] && exit 0
-echo "==> Setting up memory cgroup"
-initmemory=`awk -F: '/memory/ { print $3 }' /proc/1/cgroup`
-mempath=/sys/fs/cgroup/memory/${initmemory}
-rmdir ${mempath}/${cg1} 2>/dev/null || true
-rmdir ${mempath}/${cg2} 2>/dev/null || true
-
-echo "==> Testing /proc/meminfo with limit"
-mkdir ${mempath}/${cg1}
-echo 500000000 > ${mempath}/${cg1}/memory.limit_in_bytes
-echo 1 > ${mempath}/${cg1}/tasks
-m1=`awk '/^MemTotal:/ { print $2 }' ${LXCFSDIR}/proc/meminfo`
-
-echo "==> Testing /proc/meminfo with sub-cgroup"
-mkdir ${mempath}/${cg1}/${cg2}
-echo 1 > ${mempath}/${cg1}/${cg2}/tasks
-m2=`awk '/^MemTotal:/ { print $2 }' ${LXCFSDIR}/proc/meminfo`
-
-echo "==> Confirming same limits"
-[ $m1 -eq $m2 ]
-
-FAILED=0
diff --git a/tests/test_meminfo_hierarchy.sh.in b/tests/test_meminfo_hierarchy.sh.in
new file mode 100755 (executable)
index 0000000..de3b672
--- /dev/null
@@ -0,0 +1,43 @@
+#!/bin/sh
+# SPDX-License-Identifier: LGPL-2.1+
+
+set -eu
+[ -n "${DEBUG:-}" ] && set -x
+
+LXCFSDIR=${LXCFSDIR:-/var/lib/lxcfs}
+
+cg1=$(uuidgen).$$
+cg2=$(uuidgen).$$
+
+cleanup() {
+       if [ $FAILED -eq 1 ]; then
+               exit 1
+       fi
+       exit 0
+}
+
+FAILED=1
+trap cleanup EXIT HUP INT TERM
+
+[ ! -d /sys/fs/cgroup/memory ] && exit 0
+echo "==> Setting up memory cgroup"
+initmemory=`awk -F: '/memory/ { print $3 }' /proc/1/cgroup`
+mempath=/sys/fs/cgroup/memory/${initmemory}
+rmdir ${mempath}/${cg1} 2>/dev/null || true
+rmdir ${mempath}/${cg2} 2>/dev/null || true
+
+echo "==> Testing /proc/meminfo with limit"
+mkdir ${mempath}/${cg1}
+echo 500000000 > ${mempath}/${cg1}/memory.limit_in_bytes
+echo 1 > ${mempath}/${cg1}/tasks
+m1=`awk '/^MemTotal:/ { print $2 }' ${LXCFSDIR}/proc/meminfo`
+
+echo "==> Testing /proc/meminfo with sub-cgroup"
+mkdir ${mempath}/${cg1}/${cg2}
+echo 1 > ${mempath}/${cg1}/${cg2}/tasks
+m2=`awk '/^MemTotal:/ { print $2 }' ${LXCFSDIR}/proc/meminfo`
+
+echo "==> Confirming same limits"
+[ $m1 -eq $m2 ]
+
+FAILED=0
diff --git a/tests/test_proc b/tests/test_proc
deleted file mode 100755 (executable)
index 9e16878..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-#!/bin/sh
-# SPDX-License-Identifier: LGPL-2.1+
-
-set -eu
-[ -n "${DEBUG:-}" ] && set -x
-
-PASS=0
-
-cleanup() {
-    [ "$PASS" = "1" ] || (echo FAIL && exit 1)
-}
-
-trap cleanup EXIT HUP INT TERM
-
-LXCFSDIR=${LXCFSDIR:-/var/lib/lxcfs}
-
-if ! mountpoint -q ${LXCFSDIR}; then
-    echo "lxcfs isn't mounted on ${LXCFSDIR}"
-    exit 1
-fi
-
-echo "==> Setting up memory/cpuset cgroup in lxcfs_test_proc"
-[ ! -d /sys/fs/cgroup/memory ] && exit 0
-[ ! -d /sys/fs/cgroup/cpuset ] && exit 0
-
-initcpuset=`awk -F: '/cpuset/ { print $3 }' /proc/1/cgroup`
-initmemory=`awk -F: '/memory/ { print $3 }' /proc/1/cgroup`
-
-cpupath=/sys/fs/cgroup/cpuset/${initcpuset}
-mempath=/sys/fs/cgroup/memory/${initmemory}
-
-rmdir ${cpupath}/lxcfs_test_proc 2>/dev/null || true
-rmdir ${mempath}/lxcfs_test_proc 2>/dev/null || true
-mkdir ${cpupath}/lxcfs_test_proc
-mkdir ${mempath}/lxcfs_test_proc
-
-echo 1 > ${cpupath}/lxcfs_test_proc/tasks
-echo 1 > ${mempath}/lxcfs_test_proc/tasks
-
-echo $((64*1024*1024)) > ${mempath}/lxcfs_test_proc/memory.limit_in_bytes
-echo 0 > ${cpupath}/lxcfs_test_proc/cpuset.cpus
-
-# Test uptime
-echo "==> Testing /proc/uptime"
-grep -Eq "^0.[0-9]{2} 0.[0-9]{2}$" ${LXCFSDIR}/proc/uptime
-
-# Test cpuinfo
-echo "==> Testing /proc/cpuinfo"
-[ "$(grep "^processor" ${LXCFSDIR}/proc/cpuinfo | wc -l)" = "1" ]
-grep -q "^processor.*0$" ${LXCFSDIR}/proc/cpuinfo || grep -q "^processor 0:.*" ${LXCFSDIR}/proc/cpuinfo
-
-echo "==> Testing /sys/devices/system/cpu/online"
-[ "$(cat ${LXCFSDIR}/sys/devices/system/cpu/online)" = "$(cat ${cpupath}/lxcfs_test_proc/cpuset.cpus)" ]
-
-# Test stat
-echo "==> Testing /proc/stat"
-[ "$(grep "^cpu" ${LXCFSDIR}/proc/stat | wc -l)" = "2" ]
-
-# Test meminfo
-echo "==> Testing /proc/meminfo"
-grep -q "^MemTotal.*65536 kB$" ${LXCFSDIR}/proc/meminfo
-
-PASS=1
diff --git a/tests/test_proc.in b/tests/test_proc.in
new file mode 100755 (executable)
index 0000000..9e16878
--- /dev/null
@@ -0,0 +1,63 @@
+#!/bin/sh
+# SPDX-License-Identifier: LGPL-2.1+
+
+set -eu
+[ -n "${DEBUG:-}" ] && set -x
+
+PASS=0
+
+cleanup() {
+    [ "$PASS" = "1" ] || (echo FAIL && exit 1)
+}
+
+trap cleanup EXIT HUP INT TERM
+
+LXCFSDIR=${LXCFSDIR:-/var/lib/lxcfs}
+
+if ! mountpoint -q ${LXCFSDIR}; then
+    echo "lxcfs isn't mounted on ${LXCFSDIR}"
+    exit 1
+fi
+
+echo "==> Setting up memory/cpuset cgroup in lxcfs_test_proc"
+[ ! -d /sys/fs/cgroup/memory ] && exit 0
+[ ! -d /sys/fs/cgroup/cpuset ] && exit 0
+
+initcpuset=`awk -F: '/cpuset/ { print $3 }' /proc/1/cgroup`
+initmemory=`awk -F: '/memory/ { print $3 }' /proc/1/cgroup`
+
+cpupath=/sys/fs/cgroup/cpuset/${initcpuset}
+mempath=/sys/fs/cgroup/memory/${initmemory}
+
+rmdir ${cpupath}/lxcfs_test_proc 2>/dev/null || true
+rmdir ${mempath}/lxcfs_test_proc 2>/dev/null || true
+mkdir ${cpupath}/lxcfs_test_proc
+mkdir ${mempath}/lxcfs_test_proc
+
+echo 1 > ${cpupath}/lxcfs_test_proc/tasks
+echo 1 > ${mempath}/lxcfs_test_proc/tasks
+
+echo $((64*1024*1024)) > ${mempath}/lxcfs_test_proc/memory.limit_in_bytes
+echo 0 > ${cpupath}/lxcfs_test_proc/cpuset.cpus
+
+# Test uptime
+echo "==> Testing /proc/uptime"
+grep -Eq "^0.[0-9]{2} 0.[0-9]{2}$" ${LXCFSDIR}/proc/uptime
+
+# Test cpuinfo
+echo "==> Testing /proc/cpuinfo"
+[ "$(grep "^processor" ${LXCFSDIR}/proc/cpuinfo | wc -l)" = "1" ]
+grep -q "^processor.*0$" ${LXCFSDIR}/proc/cpuinfo || grep -q "^processor 0:.*" ${LXCFSDIR}/proc/cpuinfo
+
+echo "==> Testing /sys/devices/system/cpu/online"
+[ "$(cat ${LXCFSDIR}/sys/devices/system/cpu/online)" = "$(cat ${cpupath}/lxcfs_test_proc/cpuset.cpus)" ]
+
+# Test stat
+echo "==> Testing /proc/stat"
+[ "$(grep "^cpu" ${LXCFSDIR}/proc/stat | wc -l)" = "2" ]
+
+# Test meminfo
+echo "==> Testing /proc/meminfo"
+grep -q "^MemTotal.*65536 kB$" ${LXCFSDIR}/proc/meminfo
+
+PASS=1
diff --git a/tests/test_read_proc.sh b/tests/test_read_proc.sh
deleted file mode 100755 (executable)
index 697d772..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-#/bin/sh
-# SPDX-License-Identifier: LGPL-2.1+
-
-set -eu
-[ -n "${DEBUG:-}" ] && set -x
-
-DIR=${LXCFSDIR:-/var/lib/lxcfs}
-
-if ! mountpoint -q $DIR; then
-    echo "lxcfs isn't mounted on ${DIR}"
-    exit 1
-fi
-
-echo "==> Testing /proc/cpuinfo"
-tests/test-read $DIR/proc/cpuinfo 3 >/dev/null
-
-echo "==> Testing /proc/stat"
-tests/test-read $DIR/proc/stat 3 >/dev/null
-
-echo "==> Testing /proc/meminfo"
-tests/test-read $DIR/proc/meminfo 3 >/dev/null
-
-exit 0
diff --git a/tests/test_read_proc.sh.in b/tests/test_read_proc.sh.in
new file mode 100755 (executable)
index 0000000..e94c62d
--- /dev/null
@@ -0,0 +1,23 @@
+#/bin/sh
+# SPDX-License-Identifier: LGPL-2.1+
+
+set -eu
+[ -n "${DEBUG:-}" ] && set -x
+
+DIR=${LXCFSDIR:-/var/lib/lxcfs}
+
+if ! mountpoint -q $DIR; then
+    echo "lxcfs isn't mounted on ${DIR}"
+    exit 1
+fi
+
+echo "==> Testing /proc/cpuinfo"
+@LXCFS_BUILD_ROOT@/tests/test-read $DIR/proc/cpuinfo 3 >/dev/null
+
+echo "==> Testing /proc/stat"
+@LXCFS_BUILD_ROOT@/tests/test-read $DIR/proc/stat 3 >/dev/null
+
+echo "==> Testing /proc/meminfo"
+@LXCFS_BUILD_ROOT@/tests/test-read $DIR/proc/meminfo 3 >/dev/null
+
+exit 0
diff --git a/tests/test_readdir b/tests/test_readdir
deleted file mode 100755 (executable)
index 6848bfb..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/bin/sh
-# SPDX-License-Identifier: LGPL-2.1+
-
-set -eu
-[ -n "${DEBUG:-}" ] && set -x
-
-PASS=0
-UUID=$(uuidgen)
-
-cleanup() {
-    [ "$PASS" = "1" ] || (echo FAIL && exit 1)
-}
-
-LXCFSDIR=${LXCFSDIR:-/var/lib/lxcfs}
-
-trap cleanup EXIT HUP INT TERM
-
-if ! mountpoint -q ${LXCFSDIR}; then
-    echo "lxcfs isn't mounted on ${LXCFSDIR}"
-    exit 1
-fi
-
-TESTCASE="Stress readdir"
-echo "==> Checking for cpuset cgroups"
-if [ -d /sys/fs/cgroup/cpuset ]; then
-   for i in `seq 1 1000`;do ls -al "${LXCFSDIR}/cgroup/cpuset" >/dev/null; done
-else
-   echo "==> Skipping $TESTCASE"
-fi
-
-PASS=1
diff --git a/tests/test_readdir.in b/tests/test_readdir.in
new file mode 100755 (executable)
index 0000000..6848bfb
--- /dev/null
@@ -0,0 +1,31 @@
+#!/bin/sh
+# SPDX-License-Identifier: LGPL-2.1+
+
+set -eu
+[ -n "${DEBUG:-}" ] && set -x
+
+PASS=0
+UUID=$(uuidgen)
+
+cleanup() {
+    [ "$PASS" = "1" ] || (echo FAIL && exit 1)
+}
+
+LXCFSDIR=${LXCFSDIR:-/var/lib/lxcfs}
+
+trap cleanup EXIT HUP INT TERM
+
+if ! mountpoint -q ${LXCFSDIR}; then
+    echo "lxcfs isn't mounted on ${LXCFSDIR}"
+    exit 1
+fi
+
+TESTCASE="Stress readdir"
+echo "==> Checking for cpuset cgroups"
+if [ -d /sys/fs/cgroup/cpuset ]; then
+   for i in `seq 1 1000`;do ls -al "${LXCFSDIR}/cgroup/cpuset" >/dev/null; done
+else
+   echo "==> Skipping $TESTCASE"
+fi
+
+PASS=1
diff --git a/tests/test_reload.sh b/tests/test_reload.sh
deleted file mode 100755 (executable)
index 9c6e55f..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-#!/bin/sh
-# SPDX-License-Identifier: LGPL-2.1+
-
-set -eu
-[ -n "${DEBUG:-}" ] && set -x
-
-[ $(id -u) -eq 0 ]
-
-cmdline=$(realpath $0)
-dirname=$(dirname ${cmdline})
-topdir=$(dirname ${dirname})
-
-testdir=`mktemp -t -d libs.XXX`
-installdir=`mktemp -t -d libs.XXX`
-pidfile=$(mktemp)
-libdir=${installdir}/$(grep ^LIBDIR Makefile | awk '{print $NF}')
-bindir=${installdir}/usr/bin
-lxcfspid=-1
-FAILED=1
-
-cleanup() {
-  if [ ${lxcfspid} -ne -1 ]; then
-    kill -9 ${lxcfspid}
-    count=1
-    while [ -d ${testdir}/proc -a $count -lt 5 ]; do
-      sleep 1
-    done
-    umount -l ${testdir}
-  fi
-  rm -rf ${testdir} ${installdir}
-  rm -f /tmp/lxcfs-iwashere
-  rm -f ${pidfile}
-  if [ ${FAILED} -eq 1 ]; then
-    echo "liblxcfs.so reload test FAILED"
-  else
-    echo "liblxcfs.so reload test PASSED"
-  fi
-}
-
-trap cleanup EXIT HUP INT TERM
-
-echo "==> Installing lxcfs to temporary path"
-( cd ${topdir}; DESTDIR=${installdir} make -s install >/dev/null 2>&1)
-if [ -n "${LD_LIBRARY_PATH:-}" ]; then
-    export LD_LIBRARY_PATH="${libdir}:${LD_LIBRARY_PATH}"
-else
-    export LD_LIBRARY_PATH=${libdir}
-fi
-
-echo "==> Spawning lxcfs"
-${bindir}/lxcfs -p ${pidfile} ${testdir} &
-
-lxcfspid=$!
-
-count=1
-while [ ! -d ${testdir}/proc ]; do
-  [ $count -lt 5 ]
-  sleep 1
-  count=$((count+1))
-done
-
-rm -f /tmp/lxcfs-iwashere
-
-echo "==> Testing that lxcfs is functional"
-cat ${testdir}/proc/uptime
-
-[ ! -f /tmp/lxcfs-iwashere ]
-(
-  cd ${topdir}/src;
-  make -s liblxcfstest.la
-  gcc -shared -fPIC -DPIC -Wl,-soname,liblxcfs.so .libs/liblxcfstest_la-*.o cgroups/.libs/liblxcfstest_la-*.o -lpthread -pthread -o .libs/liblxcfstest.so
-  cp .libs/liblxcfstest.* "${libdir}"
-) > /dev/null
-rm -f ${libdir}/liblxcfs.so* ${libdir}/liblxcfs.la
-cp ${libdir}/liblxcfstest.so ${libdir}/liblxcfs.so
-
-kill -USR1 ${lxcfspid}
-sleep 1
-cat ${testdir}/proc/uptime
-sleep 1
-[ -f /tmp/lxcfs-iwashere ]
-
-FAILED=0
diff --git a/tests/test_reload.sh.in b/tests/test_reload.sh.in
new file mode 100755 (executable)
index 0000000..322ed5c
--- /dev/null
@@ -0,0 +1,77 @@
+#!/bin/sh
+# SPDX-License-Identifier: LGPL-2.1+
+
+set -eu
+[ -n "${DEBUG:-}" ] && set -x
+
+[ $(id -u) -eq 0 ]
+
+cmdline=$(realpath $0)
+topdir=@LXCFS_BUILD_ROOT@
+
+testdir=`mktemp -t -d libs.XXX`
+installdir=`mktemp -t -d libs.XXX`
+pidfile=$(mktemp)
+libdir=${installdir}/@LIBDIR@
+bindir=${installdir}/usr/bin
+lxcfspid=-1
+FAILED=1
+
+cleanup() {
+  if [ ${lxcfspid} -ne -1 ]; then
+    kill -9 ${lxcfspid}
+    count=1
+    while [ -d ${testdir}/proc -a $count -lt 5 ]; do
+      sleep 1
+    done
+    umount -l ${testdir}
+  fi
+  rm -rf ${testdir} ${installdir}
+  rm -f /tmp/lxcfs-iwashere
+  rm -f ${pidfile}
+  if [ ${FAILED} -eq 1 ]; then
+    echo "liblxcfs.so reload test FAILED"
+  else
+    echo "liblxcfs.so reload test PASSED"
+  fi
+}
+
+trap cleanup EXIT HUP INT TERM
+
+echo "==> Installing lxcfs to temporary path"
+cd @LXCFS_BUILD_ROOT@
+DESTDIR=${installdir} meson install
+if [ -n "${LD_LIBRARY_PATH:-}" ]; then
+    export LD_LIBRARY_PATH="${libdir}:${LD_LIBRARY_PATH}"
+else
+    export LD_LIBRARY_PATH=${libdir}
+fi
+
+echo "==> Spawning lxcfs"
+${bindir}/lxcfs -p ${pidfile} ${testdir} &
+
+lxcfspid=$!
+
+count=1
+while [ ! -d ${testdir}/proc ]; do
+  [ $count -lt 5 ]
+  sleep 1
+  count=$((count+1))
+done
+
+rm -f /tmp/lxcfs-iwashere
+
+echo "==> Testing that lxcfs is functional"
+cat ${testdir}/proc/uptime
+
+[ ! -f /tmp/lxcfs-iwashere ]
+rm -f ${libdir}/liblxcfs.so* ${libdir}/liblxcfs.la
+cp @LXCFS_BUILD_ROOT@/liblxcfstest.so ${libdir}/liblxcfs.so
+
+kill -USR1 ${lxcfspid}
+sleep 1
+cat ${testdir}/proc/uptime
+sleep 1
+[ -f /tmp/lxcfs-iwashere ]
+
+FAILED=0
diff --git a/tests/test_sigusr2.sh b/tests/test_sigusr2.sh
deleted file mode 100755 (executable)
index a17f4f1..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-#!/bin/sh
-# SPDX-License-Identifier: LGPL-2.1+
-
-set -eu
-[ -n "${DEBUG:-}" ] && set -x
-
-PASS=0
-
-cleanup() {
-    [ "$PASS" = "1" ] || (echo FAIL && exit 1)
-}
-
-trap cleanup EXIT HUP INT TERM
-
-LXCFSDIR=${LXCFSDIR:-/var/lib/lxcfs}
-
-if ! mountpoint -q ${LXCFSDIR}; then
-    echo "lxcfs isn't mounted on ${LXCFSDIR}"
-    exit 1
-fi
-
-echo "==> Setting up memory cgroup in lxcfs_test_proc"
-[ ! -d /sys/fs/cgroup/memory ] && exit 0
-
-initmemory=`awk -F: '/memory/ { print $3 }' /proc/1/cgroup`
-mempath=/sys/fs/cgroup/memory/${initmemory}
-rmdir ${mempath}/lxcfs_test_proc 2>/dev/null || true
-mkdir ${mempath}/lxcfs_test_proc
-echo 1 > ${mempath}/lxcfs_test_proc/tasks
-
-echo $((64*1024*1024)) > ${mempath}/lxcfs_test_proc/memory.limit_in_bytes
-
-# Test meminfo
-echo "==> Testing /proc/meminfo"
-[ "$(grep "^MemTotal:.*kB$" ${LXCFSDIR}/proc/meminfo)" = "$(grep "^MemTotal:.*kB$"  /proc/meminfo)" ]
-
-PASS=1
diff --git a/tests/test_sigusr2.sh.in b/tests/test_sigusr2.sh.in
new file mode 100755 (executable)
index 0000000..a17f4f1
--- /dev/null
@@ -0,0 +1,37 @@
+#!/bin/sh
+# SPDX-License-Identifier: LGPL-2.1+
+
+set -eu
+[ -n "${DEBUG:-}" ] && set -x
+
+PASS=0
+
+cleanup() {
+    [ "$PASS" = "1" ] || (echo FAIL && exit 1)
+}
+
+trap cleanup EXIT HUP INT TERM
+
+LXCFSDIR=${LXCFSDIR:-/var/lib/lxcfs}
+
+if ! mountpoint -q ${LXCFSDIR}; then
+    echo "lxcfs isn't mounted on ${LXCFSDIR}"
+    exit 1
+fi
+
+echo "==> Setting up memory cgroup in lxcfs_test_proc"
+[ ! -d /sys/fs/cgroup/memory ] && exit 0
+
+initmemory=`awk -F: '/memory/ { print $3 }' /proc/1/cgroup`
+mempath=/sys/fs/cgroup/memory/${initmemory}
+rmdir ${mempath}/lxcfs_test_proc 2>/dev/null || true
+mkdir ${mempath}/lxcfs_test_proc
+echo 1 > ${mempath}/lxcfs_test_proc/tasks
+
+echo $((64*1024*1024)) > ${mempath}/lxcfs_test_proc/memory.limit_in_bytes
+
+# Test meminfo
+echo "==> Testing /proc/meminfo"
+[ "$(grep "^MemTotal:.*kB$" ${LXCFSDIR}/proc/meminfo)" = "$(grep "^MemTotal:.*kB$"  /proc/meminfo)" ]
+
+PASS=1
index afbb52cdb324f8441271a4d5a079d06ef2b9ff33..f0dbf455815da747488659b735e73be614955084 100644 (file)
@@ -4,11 +4,7 @@
 #define _GNU_SOURCE
 #endif
 
-#ifndef FUSE_USE_VERSION
-#define FUSE_USE_VERSION 26
-#endif
-
-#define _FILE_OFFSET_BITS 64
+#include "config.h"
 
 #include <errno.h>
 #include <fcntl.h>
@@ -70,7 +66,7 @@ void test_access(const char *path)
 void test_bind(const char *path)
 {
        int sfd;
-       struct sockaddr_un my_addr, peer_addr;
+       struct sockaddr_un my_addr;
 
        sfd = socket(AF_UNIX, SOCK_STREAM, 0);
 
diff --git a/tools/meson-build.sh b/tools/meson-build.sh
new file mode 100755 (executable)
index 0000000..26f995d
--- /dev/null
@@ -0,0 +1,21 @@
+#!/bin/sh
+# SPDX-License-Identifier: LGPL-2.1-or-later
+set -eux
+
+src="$1"
+dst="$2"
+target="$3"
+options="$4"
+CC="$5"
+CXX="$6"
+
+[ -f "$dst/ninja.build" ] || CC="$CC" CXX="$CXX" meson "$src" "$dst" $options
+
+# Locate ninja binary, on CentOS 7 it is called ninja-build, so
+# use that name if available.
+ninja=ninja
+if which ninja-build >/dev/null 2>&1 ; then
+    ninja=ninja-build
+fi
+
+"$ninja" -C "$dst" "$target"