syscalls/setgroups: moved compat_16.h to ../utils. This header will be common for all 16-bit syscalls definitions.
Signed-off-by: Stanislav Kholmanskikh <[email protected]> --- testcases/kernel/syscalls/setgroups/compat_16.h | 85 ---------------------- testcases/kernel/syscalls/utils/compat_16.h | 89 +++++++++++++++++++++++ 2 files changed, 89 insertions(+), 85 deletions(-) delete mode 100644 testcases/kernel/syscalls/setgroups/compat_16.h create mode 100644 testcases/kernel/syscalls/utils/compat_16.h diff --git a/testcases/kernel/syscalls/setgroups/compat_16.h b/testcases/kernel/syscalls/setgroups/compat_16.h deleted file mode 100644 index 0de4e78..0000000 --- a/testcases/kernel/syscalls/setgroups/compat_16.h +++ /dev/null @@ -1,85 +0,0 @@ -/* - * - * Copyright (c) Red Hat Inc., 2008 - * - * 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 2 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, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/* Author: Masatake YAMATO <[email protected]> */ - -#ifndef __SETGROUPS_COMPAT_16_H__ -#define __SETGROUPS_COMPAT_16_H__ - -#include "compat_gid.h" -#include "linux_syscall_numbers.h" - - -/* For avoiding circular dependency. */ -extern void cleanup(void); - -#ifdef TST_USE_COMPAT16_SYSCALL - -long -SETGROUPS(size_t gidsetsize, GID_T *list) -{ - return ltp_syscall(__NR_setgroups, gidsetsize, list); -} - -int -GETGROUPS(int size16, GID_T *list16) -{ - int r; - int i; - - gid_t *list32; - - list32 = malloc(size16 * sizeof(gid_t)); - if (list32 == NULL) - tst_brkm(TBROK, NULL, "malloc failed to alloc %zu errno " - " %d ", size16 * sizeof(gid_t), errno); - - r = getgroups(size16, list32); - if (r < 0) - goto out; - - for (i = 0; i < r; i++) { - if (!GID_SIZE_CHECK(list32[i])) - tst_brkm(TBROK, - cleanup, - "gid returned from getgroups is too large for testing setgroups32"); - list16[i] = (GID_T)list32[i]; - } - - out: - free(list32); - return r; -} - -#else -int -SETGROUPS(size_t size, const GID_T *list) -{ - return setgroups(size, list); -} - -int -GETGROUPS(int size, GID_T *list) -{ - return getgroups(size, list); -} - -#endif /* TST_USE_COMPAT16_SYSCALL */ - -#endif /* __SETGROUPS_COMPAT_16_H__ */ diff --git a/testcases/kernel/syscalls/utils/compat_16.h b/testcases/kernel/syscalls/utils/compat_16.h new file mode 100644 index 0000000..dc5dafa --- /dev/null +++ b/testcases/kernel/syscalls/utils/compat_16.h @@ -0,0 +1,89 @@ +/* + * Copyright (c) Red Hat Inc., 2008 + * + * 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 2 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, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* Author: Masatake YAMATO <[email protected]> */ + +#ifndef __SETGROUPS_COMPAT_16_H__ +#define __SETGROUPS_COMPAT_16_H__ + +#include "compat_gid.h" +#include "linux_syscall_numbers.h" + + +/* For avoiding circular dependency. */ +static void cleanup(void); + +#ifdef TST_USE_COMPAT16_SYSCALL + +/* + * LTP_COMPAT16_IS_DEFINED(SNAME) - if true, then __NR_SNAME + * is a 16-bit version of SNAME() syscall + * + * LTP_COMPAT16_IF_DEFINED(SNAME, ...) - action to execute + * if 16-bit version of SNAME syscall is supported + * + * LTP_COMPAT16_IF_UNDEFINED(SNAME) - action to execute + * if 16-bit version of SNAME syscall is not supported + */ +#define LTP_COMPAT16_IS_DEFINED(SNAME) \ + (__NR_##SNAME##32 != __LTP__NR_INVALID_SYSCALL) + +#define LTP_COMPAT16_IF_DEFINED(SNAME, ...) \ + return ltp_syscall(__NR_##SNAME, ##__VA_ARGS__); + +#define LTP_COMPAT16_IF_UNDEFINED(SNAME) \ + tst_brkm(TCONF, cleanup, \ + "16-bit version of %s() is not supported on your platform", \ + #SNAME); + +int +SETGROUPS(size_t gidsetsize, GID_T *list16) +{ +# if LTP_COMPAT16_IS_DEFINED(setgroups) + LTP_COMPAT16_IF_DEFINED(setgroups, gidsetsize, list16) +# else + LTP_COMPAT16_IF_UNDEFINED(setgroups) +# endif +} + +int +GETGROUPS(int gidsetsize, GID_T *list16) +{ +# if LTP_COMPAT16_IS_DEFINED(getgroups) + LTP_COMPAT16_IF_DEFINED(getgroups, gidsetsize, list16) +# else + LTP_COMPAT16_IF_UNDEFINED(getgroups) +# endif +} + +#else +int +SETGROUPS(size_t size, const GID_T *list) +{ + return setgroups(size, list); +} + +int +GETGROUPS(int size, GID_T *list) +{ + return getgroups(size, list); +} + +#endif /* TST_USE_COMPAT16_SYSCALL */ + +#endif /* __SETGROUPS_COMPAT_16_H__ */ -- 1.7.1 ------------------------------------------------------------------------------ Learn the latest--Visual Studio 2012, SharePoint 2013, SQL 2012, more! Discover the easy way to master current and previous Microsoft technologies and advance your career. Get an incredible 1,500+ hours of step-by-step tutorial videos with LearnDevNow. Subscribe today and save! http://pubads.g.doubleclick.net/gampad/clk?id=58040911&iu=/4140/ostg.clktrk _______________________________________________ Ltp-list mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/ltp-list
