#include <time.h>
#include <sys/ioctl.h>
+#include "c.h"
+
#ifdef __linux__
# include <sys/mount.h>
# include "mount-api-utils.h"
return 0;
}
+static int hlp_statmount_ok(void)
+{
+#ifdef HAVE_STATMOUNT_API
+ errno = 0;
+ ul_statmount(0, 0, 0, NULL, 0, 0);
+#else
+ errno = ENOSYS;
+#endif
+ printf("%d\n", errno != ENOSYS);
+ return 0;
+}
+
+static int hlp_listmount_ok(void)
+{
+#ifdef HAVE_STATMOUNT_API
+ uint64_t dummy;
+ errno = 0;
+ ul_listmount(LSMT_ROOT, 0, 0, &dummy, 1, LISTMOUNT_REVERSE);
+#else
+ errno = ENOSYS;
+#endif
+ printf("%d\n", errno != ENOSYS);
+ return 0;
+}
+
static int hlp_sz_time(void)
{
printf("%zu\n", sizeof(time_t));
{ "wcsspn-ok", hlp_wcsspn_ok },
{ "enotty-ok", hlp_enotty_ok },
{ "fsopen-ok", hlp_fsopen_ok },
+ { "statmount-ok", hlp_statmount_ok },
+ { "listmount-ok", hlp_listmount_ok },
{ "sz(time_t)", hlp_sz_time },
{ "ns-gettype-ok", hlp_get_nstype_ok },
{ "ns-getuserns-ok", hlp_get_userns_ok },
--- /dev/null
+#!/bin/bash
+
+# This file is part of util-linux.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This file 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.
+
+TS_TOPDIR="${0%/*}/../.."
+TS_DESC="listmount & statmount"
+
+. "$TS_TOPDIR"/functions.sh
+ts_init "$*"
+
+ts_check_test_command "$TS_CMD_FINDMNT"
+
+[ "$("$TS_HELPER_SYSINFO" statmount-ok)" = "1" ] || ts_skip "no statmount"
+[ "$("$TS_HELPER_SYSINFO" listmount-ok)" = "1" ] || ts_skip "no listmount"
+
+function check_field {
+ local name="$1"
+
+ data=$( $TS_CMD_FINDMNT --noheadings --kernel=listmount --output "$name" --target /proc )
+ [ -n "$data" ] || echo "$name empty"
+}
+
+
+ts_init_subtest "target"
+check_field "TARGET" >> $TS_OUTPUT 2>> $TS_ERRLOG
+ts_finalize_subtest
+
+ts_init_subtest "vfs-options"
+check_field "VFS-OPTIONS" >> $TS_OUTPUT 2>> $TS_ERRLOG
+ts_finalize_subtest
+
+ts_init_subtest "fs-options"
+check_field "FS-OPTIONS" >> $TS_OUTPUT 2>> $TS_ERRLOG
+ts_finalize_subtest
+
+ts_init_subtest "options"
+check_field "OPTIONS" >> $TS_OUTPUT 2>> $TS_ERRLOG
+ts_finalize_subtest
+
+ts_init_subtest "fstype"
+check_field "FSTYPE" >> $TS_OUTPUT 2>> $TS_ERRLOG
+ts_finalize_subtest
+
+ts_init_subtest "propagation"
+check_field "PROPAGATION" >> $TS_OUTPUT 2>> $TS_ERRLOG
+ts_finalize_subtest
+
+ts_init_subtest "fsroot"
+check_field "FSROOT" >> $TS_OUTPUT 2>> $TS_ERRLOG
+ts_finalize_subtest
+
+ts_init_subtest "parent"
+check_field "PARENT" >> $TS_OUTPUT 2>> $TS_ERRLOG
+ts_finalize_subtest
+
+ts_init_subtest "id"
+check_field "ID" >> $TS_OUTPUT 2>> $TS_ERRLOG
+ts_finalize_subtest
+
+ts_finalize