mirror of
git://git.sv.gnu.org/coreutils.git
synced 2026-04-21 03:12:48 +02:00
maint: refactor SMACK interface to a separate module
Consolidate all smack routines and checks in a module. We replace and wrap the most commonly used smack routines, which allows removing ifdefs throughout the code. * gl/lib/smack.h: A new header containing the implementation of the wrapped and replacement routines. Note the is_smack_enabled() routine should be optimized out at compile time when compiled on a system without libsmack. * gl/modules/smack: Describe the new module and move the configure time code here from ... * m4/jm-macros.m4: ... here. * bootstrap.conf: Reference the new module. * src/id.c: Use the routines without ifdefs where possible. * src/ls.c: Likewise. * src/mkdir.c: Likewise. * src/mkfifo.c: Likewise. * src/mknod.c: Likewise.
This commit is contained in:
46
gl/lib/smack.h
Normal file
46
gl/lib/smack.h
Normal file
@@ -0,0 +1,46 @@
|
||||
/* Include and determine availability of smack routines
|
||||
Copyright (C) 2013 Free Software Foundation, Inc.
|
||||
|
||||
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 <http://www.gnu.org/licenses/>. */
|
||||
|
||||
/* Here we replace or wrap the most common smack functions used by coreutils.
|
||||
Others will need to be protected by HAVE_SMACK. */
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#ifdef HAVE_SMACK
|
||||
# include <sys/smack.h>
|
||||
#else
|
||||
static inline ssize_t
|
||||
smack_new_label_from_self (char **label)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
static inline int
|
||||
smack_set_label_for_self (const char *label)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
#endif
|
||||
|
||||
static inline bool
|
||||
is_smack_enabled (void)
|
||||
{
|
||||
#ifdef HAVE_SMACK
|
||||
return smack_smackfs_path () != NULL;
|
||||
#else
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
42
gl/modules/smack
Normal file
42
gl/modules/smack
Normal file
@@ -0,0 +1,42 @@
|
||||
Description:
|
||||
Include and determine the availability of smack routines
|
||||
|
||||
Files:
|
||||
lib/smack.h
|
||||
|
||||
Depends-on:
|
||||
|
||||
configure.ac:
|
||||
# Check whether libsmack is available
|
||||
LIB_SMACK=
|
||||
AC_ARG_ENABLE([libsmack],
|
||||
AC_HELP_STRING([--disable-libsmack], [disable libsmack support]))
|
||||
if test "X$enable_libsmack" != "Xno"; then
|
||||
AC_CHECK_LIB([smack], [smack_new_label_from_self],
|
||||
[AC_CHECK_LIB([smack], [smack_new_label_from_path],
|
||||
[AC_CHECK_HEADER([sys/smack.h],
|
||||
[LIB_SMACK=-lsmack
|
||||
AC_DEFINE([HAVE_SMACK], [1], [libsmack usability])]
|
||||
)])])
|
||||
if test "X$LIB_SMACK" = "X"; then
|
||||
if test "X$enable_libsmack" = "Xyes"; then
|
||||
AC_MSG_ERROR([libsmack library was not found or not usable])
|
||||
fi
|
||||
fi
|
||||
else
|
||||
AC_MSG_WARN([libsmack support disabled by user])
|
||||
fi
|
||||
AC_SUBST([LIB_SMACK])
|
||||
|
||||
|
||||
Makefile.am:
|
||||
lib_SOURCES += smack.h
|
||||
|
||||
Include:
|
||||
"smack.h"
|
||||
|
||||
License:
|
||||
LGPL
|
||||
|
||||
Maintainer:
|
||||
Pádraig Brady
|
||||
Reference in New Issue
Block a user