From a77b52c86516752280fe9b7dd2b72fead11060b0 Mon Sep 17 00:00:00 2001 From: Fredrik Tolf Date: Tue, 27 May 2008 15:02:14 +0200 Subject: [PATCH] Check for xattr support in configure script. --- configure.in | 15 +++++++++++++++ daemon/Makefile.am | 2 +- daemon/reqstat.c | 13 ++++++++++++- 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/configure.in b/configure.in index 73f67a9..effe65b 100644 --- a/configure.in +++ b/configure.in @@ -83,6 +83,21 @@ if test "$HAS_LIBNOTIFY" = yes; then AC_DEFINE(HAVE_NOTIFY) fi +# libattr check +AH_TEMPLATE(HAVE_XATTR, [define to compile support for extended attributes]) +AC_ARG_WITH(xattr, [ --with-xattr Enable XATTR support]) +DOLDA_PKG([HAS_XATTR], [test "$with_xattr" = no && HAS_XATTR=no], + [AC_CHECK_LIB(attr, getxattr, [:], [HAS_XATTR=no])], + [DOLDA_CHECK_HEADER(attr/xattr.h, [], [HAS_XATTR=no])], + [XATTR_LIBS=-lattr]) +if test "$with_xattr" = yes -a "$HAS_XATTR" = no; then + AC_MSG_ERROR([*** cannot find xattr support on this system]) +fi +if test "$HAS_XATTR" = yes; then + AC_DEFINE(HAVE_XATTR) +fi +AC_SUBST(XATTR_LIBS) + # libpanelapplet check DOLDA_PKG([HAS_LIBPANELAPPLET], [PKG_CHECK_MODULES(PANELAPPLET, libpanelapplet-2.0, [], [HAS_LIBPANELAPPLET=no])]) diff --git a/daemon/Makefile.am b/daemon/Makefile.am index 532b4da..a80ad94 100644 --- a/daemon/Makefile.am +++ b/daemon/Makefile.am @@ -32,5 +32,5 @@ endif EXTRA_DIST=emacs-local doldacond_LDADD=$(top_srcdir)/common/libcommon.a \ - @KRB5_LIBS@ -lbz2 -lz -lgdbm @PAM_LIBS@ @KEYUTILS_LIBS@ + @KRB5_LIBS@ -lbz2 -lz -lgdbm @PAM_LIBS@ @KEYUTILS_LIBS@ @XATTR_LIBS@ doldacond_CPPFLAGS=-I$(top_srcdir)/include -DDAEMON @KRB5_CFLAGS@ -D_ISOC99_SOURCE -D_BSD_SOURCE -D_SVID_SOURCE -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 diff --git a/daemon/reqstat.c b/daemon/reqstat.c index 34b7ce3..d3d849f 100644 --- a/daemon/reqstat.c +++ b/daemon/reqstat.c @@ -22,7 +22,6 @@ #include #include #include -#include #ifdef HAVE_CONFIG_H #include @@ -31,6 +30,10 @@ #include "module.h" #include "log.h" +#ifdef HAVE_XATTR +#include +#endif + struct trdata { size_t startpos; }; @@ -62,6 +65,7 @@ void filelog(char *format, ...) fclose(out); } +#ifdef HAVE_XATTR void xainc(wchar_t *file, char *an, off_t inc) { char buf[32]; @@ -88,26 +92,33 @@ void xainc(wchar_t *file, char *an, off_t inc) if(setxattr(fn, an, buf, al, 0) < 0) flog(LOG_WARNING, "could not set xattr %s on %s: %s", an, fn, strerror(errno)); } +#endif void request(struct transfer *transfer, struct trdata *data) { filelog("request %ls", transfer->path); +#ifdef HAVE_XATTR if(confgetint("reqstat", "xa")) xainc(transfer->path, "user.dc-req", 1); +#endif } void start(struct transfer *transfer, struct trdata *data) { filelog("start %ls at %zi", transfer->path, data->startpos); +#ifdef HAVE_XATTR if(confgetint("reqstat", "xa")) xainc(transfer->path, "user.dc-started", 1); +#endif } void finish(struct transfer *transfer, struct trdata *data) { filelog("finish %ls at %zi, total %zi", transfer->path, transfer->curpos, transfer->curpos - data->startpos); +#ifdef HAVE_XATTR if(confgetint("reqstat", "xa")) xainc(transfer->path, "user.dc-bytes", transfer->curpos - data->startpos); +#endif } static int chattr(struct transfer *transfer, wchar_t *attrib, struct trdata *data) -- 2.11.0