[dbench @ cvs-1:tridge-20041212143742-r0tjbd9yb1njroen]
authortridge <tridge@blu>
Sun, 12 Dec 2004 14:37:42 +0000 (14:37 +0000)
committertridge <tridge@blu>
Sun, 12 Dec 2004 14:37:42 +0000 (14:37 +0000)
- patch from BaT for bsd EA support

- cleanup some unusued fns

- move to samba4 mkproto.pl instead of mkproto.awk

15 files changed:
Makefile.in
config.h.in
configure
configure.in
dbench.c
dbench.h
fileio.c
mkproto.awk [deleted file]
mkproto.pl [new file with mode: 0755]
proto.h
sockio.c
socklib.c
system.c [new file with mode: 0644]
tbench_srv.c
util.c

index f4b4f16f235f83b09b8821fef0d7f5700327cb7d..4829d32e41a32301835f8eab32dd2a5dc041202a 100644 (file)
@@ -1,4 +1,4 @@
-VERSION=3.01
+VERSION=3.02
 
 srcdir=@srcdir@
 VPATH=@srcdir@
@@ -14,7 +14,7 @@ CC=@CC@
 CFLAGS=@CFLAGS@ -I. -DVERSION=\"$(VERSION)\" -DDATADIR=\"$(datadir)\"
 EXEEXT=@EXEEXT@
 
-DB_OBJS = fileio.o util.o dbench.o child.o
+DB_OBJS = fileio.o util.o dbench.o child.o system.o
 TB_OBJS = sockio.o util.o dbench.o child.o socklib.o
 SRV_OBJS = util.o tbench_srv.o socklib.o
 
@@ -42,4 +42,4 @@ clean:
        rm -f *.o *~ dbench tbench tbench_srv
 
 proto:
-       cat *.c | awk -f mkproto.awk > proto.h
+       ./mkproto.pl *.c > proto.h
index 5376097972a822d9cc8d41202ec8c935310d38d4..872bcdfd64424cdc8885990c7e3e87fc4abed510 100644 (file)
@@ -1,5 +1,29 @@
 /* config.h.in.  Generated from configure.in by autoheader.  */
 
+/* Define to 1 if you have the `attr_get' function. */
+#undef HAVE_ATTR_GET
+
+/* Define to 1 if you have the `attr_getf' function. */
+#undef HAVE_ATTR_GETF
+
+/* Define to 1 if you have the `attr_list' function. */
+#undef HAVE_ATTR_LIST
+
+/* Define to 1 if you have the `attr_listf' function. */
+#undef HAVE_ATTR_LISTF
+
+/* Define to 1 if you have the `attr_remove' function. */
+#undef HAVE_ATTR_REMOVE
+
+/* Define to 1 if you have the `attr_removef' function. */
+#undef HAVE_ATTR_REMOVEF
+
+/* Define to 1 if you have the `attr_set' function. */
+#undef HAVE_ATTR_SET
+
+/* Define to 1 if you have the `attr_setf' function. */
+#undef HAVE_ATTR_SETF
+
 /* Define to 1 if you have the <attr/xattr.h> header file. */
 #undef HAVE_ATTR_XATTR_H
 
    */
 #undef HAVE_DIRENT_H
 
+/* Whether we have EA support */
+#undef HAVE_EA_SUPPORT
+
+/* Define to 1 if you have the `extattr_delete_fd' function. */
+#undef HAVE_EXTATTR_DELETE_FD
+
+/* Define to 1 if you have the `extattr_delete_file' function. */
+#undef HAVE_EXTATTR_DELETE_FILE
+
+/* Define to 1 if you have the `extattr_delete_link' function. */
+#undef HAVE_EXTATTR_DELETE_LINK
+
+/* Define to 1 if you have the `extattr_get_fd' function. */
+#undef HAVE_EXTATTR_GET_FD
+
+/* Define to 1 if you have the `extattr_get_file' function. */
+#undef HAVE_EXTATTR_GET_FILE
+
+/* Define to 1 if you have the `extattr_get_link' function. */
+#undef HAVE_EXTATTR_GET_LINK
+
+/* Define to 1 if you have the `extattr_list_fd' function. */
+#undef HAVE_EXTATTR_LIST_FD
+
+/* Define to 1 if you have the `extattr_list_file' function. */
+#undef HAVE_EXTATTR_LIST_FILE
+
+/* Define to 1 if you have the `extattr_list_link' function. */
+#undef HAVE_EXTATTR_LIST_LINK
+
+/* Define to 1 if you have the `extattr_set_fd' function. */
+#undef HAVE_EXTATTR_SET_FD
+
+/* Define to 1 if you have the `extattr_set_file' function. */
+#undef HAVE_EXTATTR_SET_FILE
+
+/* Define to 1 if you have the `extattr_set_link' function. */
+#undef HAVE_EXTATTR_SET_LINK
+
+/* Define to 1 if you have the `fdatasync' function. */
+#undef HAVE_FDATASYNC
+
 /* Define to 1 if you have the `fgetxattr' function. */
 #undef HAVE_FGETXATTR
 
+/* Define to 1 if you have the `flistxattr' function. */
+#undef HAVE_FLISTXATTR
+
+/* Define to 1 if you have the `fremovexattr' function. */
+#undef HAVE_FREMOVEXATTR
+
+/* Define to 1 if you have the `fsetxattr' function. */
+#undef HAVE_FSETXATTR
+
+/* Define to 1 if you have the `getxattr' function. */
+#undef HAVE_GETXATTR
+
 /* Define to 1 if you have the <inttypes.h> header file. */
 #undef HAVE_INTTYPES_H
 
+/* Define to 1 if you have the `lgetxattr' function. */
+#undef HAVE_LGETXATTR
+
+/* Define to 1 if you have the `listxattr' function. */
+#undef HAVE_LISTXATTR
+
+/* Define to 1 if you have the `llistxattr' function. */
+#undef HAVE_LLISTXATTR
+
+/* Define to 1 if you have the `lremovexattr' function. */
+#undef HAVE_LREMOVEXATTR
+
+/* Define to 1 if you have the `lsetxattr' function. */
+#undef HAVE_LSETXATTR
+
 /* Define to 1 if you have the <memory.h> header file. */
 #undef HAVE_MEMORY_H
 
 /* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */
 #undef HAVE_NDIR_H
 
+/* Define to 1 if you have the `removexattr' function. */
+#undef HAVE_REMOVEXATTR
+
+/* Define to 1 if you have the `setxattr' function. */
+#undef HAVE_SETXATTR
+
 /* Define to 1 if you have the <stdint.h> header file. */
 #undef HAVE_STDINT_H
 
    */
 #undef HAVE_SYS_DIR_H
 
+/* Define to 1 if you have the <sys/extattr.h> header file. */
+#undef HAVE_SYS_EXTATTR_H
+
 /* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR'.
    */
 #undef HAVE_SYS_NDIR_H
 /* Define to 1 if you have the <sys/types.h> header file. */
 #undef HAVE_SYS_TYPES_H
 
+/* Define to 1 if you have the <sys/uio.h> header file. */
+#undef HAVE_SYS_UIO_H
+
+/* Define to 1 if you have the <sys/vfs.h> header file. */
+#undef HAVE_SYS_VFS_H
+
 /* Define to 1 if you have <sys/wait.h> that is POSIX.1 compatible. */
 #undef HAVE_SYS_WAIT_H
 
 /* Define to 1 if you have the <unistd.h> header file. */
 #undef HAVE_UNISTD_H
 
-/* Whether we have xattr support */
-#undef HAVE_XATTR_SUPPORT
-
 /* Define to the address where bug reports for this package should be sent. */
 #undef PACKAGE_BUGREPORT
 
index 36636dd0b49f7c2fe227a609546a455a11db4b98..e8859de800813e0261ae57a8c8720df25a5ec4fb 100755 (executable)
--- a/configure
+++ b/configure
@@ -3285,7 +3285,8 @@ done
 
 
 
-for ac_header in ctype.h strings.h stdlib.h string.h
+
+for ac_header in ctype.h strings.h stdlib.h string.h sys/vfs.h
 do
 as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
 if eval "test \"\${$as_ac_Header+set}\" = set"; then
@@ -3437,7 +3438,9 @@ done
 
 
 
-for ac_header in sys/attributes.h attr/xattr.h sys/xattr.h
+
+
+for ac_header in sys/attributes.h attr/xattr.h sys/xattr.h sys/extattr.h sys/uio.h
 do
 as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
 if eval "test \"\${$as_ac_Header+set}\" = set"; then
 
 done
 
-echo "$as_me:$LINENO: checking for library containing fgetxattr" >&5
-echo $ECHO_N "checking for library containing fgetxattr... $ECHO_C" >&6
-if test "${ac_cv_search_fgetxattr+set}" = set; then
+
+for ac_func in fdatasync
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $ac_func;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+        { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  eval "$as_ac_var=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+# Check if we have libattr
+echo "$as_me:$LINENO: checking for library containing getxattr" >&5
+echo $ECHO_N "checking for library containing getxattr... $ECHO_C" >&6
+if test "${ac_cv_search_getxattr+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   ac_func_search_save_LIBS=$LIBS
-ac_cv_search_fgetxattr=no
+ac_cv_search_getxattr=no
 cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
@@ -3605,11 +3710,11 @@ extern "C"
 #endif
 /* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
-char fgetxattr ();
+char getxattr ();
 int
 main ()
 {
-fgetxattr ();
+getxattr ();
   ;
   return 0;
 }
@@ -3635,7 +3740,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   ac_status=$?
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
-  ac_cv_search_fgetxattr="none required"
+  ac_cv_search_getxattr="none required"
 else
   echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
@@ -3643,7 +3748,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
 fi
 rm -f conftest.err conftest.$ac_objext \
       conftest$ac_exeext conftest.$ac_ext
-if test "$ac_cv_search_fgetxattr" = no; then
+if test "$ac_cv_search_getxattr" = no; then
   for ac_lib in attr; do
     LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
     cat >conftest.$ac_ext <<_ACEOF
@@ -3659,11 +3764,11 @@ extern "C"
 #endif
 /* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
-char fgetxattr ();
+char getxattr ();
 int
 main ()
 {
-fgetxattr ();
+getxattr ();
   ;
   return 0;
 }
@@ -3689,7 +3794,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   ac_status=$?
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
-  ac_cv_search_fgetxattr="-l$ac_lib"
+  ac_cv_search_getxattr="-l$ac_lib"
 break
 else
   echo "$as_me: failed program was:" >&5
@@ -3702,15 +3807,848 @@ rm -f conftest.err conftest.$ac_objext \
 fi
 LIBS=$ac_func_search_save_LIBS
 fi
-echo "$as_me:$LINENO: result: $ac_cv_search_fgetxattr" >&5
-echo "${ECHO_T}$ac_cv_search_fgetxattr" >&6
-if test "$ac_cv_search_fgetxattr" != no; then
-  test "$ac_cv_search_fgetxattr" = "none required" || LIBS="$ac_cv_search_fgetxattr $LIBS"
+echo "$as_me:$LINENO: result: $ac_cv_search_getxattr" >&5
+echo "${ECHO_T}$ac_cv_search_getxattr" >&6
+if test "$ac_cv_search_getxattr" != no; then
+  test "$ac_cv_search_getxattr" = "none required" || LIBS="$ac_cv_search_getxattr $LIBS"
+
+fi
+
+
+
+
+
+
+for ac_func in getxattr lgetxattr fgetxattr listxattr llistxattr
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $ac_func;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+        { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  eval "$as_ac_var=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
 
 fi
+done
+
+
+
+
+
+for ac_func in flistxattr removexattr lremovexattr fremovexattr
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $ac_func;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+        { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  eval "$as_ac_var=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+
+
+for ac_func in setxattr lsetxattr fsetxattr
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $ac_func;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+        { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  eval "$as_ac_var=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+# Check if we have attr_get
+
+
+
+
+for ac_func in attr_get attr_list attr_set attr_remove
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $ac_func;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+        { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  eval "$as_ac_var=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+
+
+
+for ac_func in attr_getf attr_listf attr_setf attr_removef
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $ac_func;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+        { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  eval "$as_ac_var=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+# Check if we have extattr
+
+
+
+for ac_func in extattr_delete_fd extattr_delete_file extattr_delete_link
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $ac_func;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+        { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  eval "$as_ac_var=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+
+
+for ac_func in extattr_get_fd extattr_get_file extattr_get_link
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $ac_func;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+        { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  eval "$as_ac_var=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+
+
+for ac_func in extattr_list_fd extattr_list_file extattr_list_link
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $ac_func;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+        { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  eval "$as_ac_var=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
 
 
-for ac_func in fgetxattr
+for ac_func in extattr_set_fd extattr_set_file extattr_set_link
 do
 as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
 echo "$as_me:$LINENO: checking for $ac_func" >&5
@@ -3811,10 +4749,12 @@ fi
 done
 
 
-if test x"$ac_cv_func_fgetxattr" = x"yes"; then
+if test x"$ac_cv_func_fgetxattr" = x"yes" -o \
+        x"$ac_cv_func_attr_getf" = x"yes" -o \
+        x"$ac_cv_func_extattr_get_fd" = x"yes"; then
 
 cat >>confdefs.h <<\_ACEOF
-#define HAVE_XATTR_SUPPORT 1
+#define HAVE_EA_SUPPORT 1
 _ACEOF
 
 fi
index d5210f3f784f3f4a56e5481b6e9c3d306c50710a..afd88fb75c89054adebda8dceab84559201cf181 100644 (file)
@@ -27,14 +27,28 @@ AC_HEADER_DIRENT
 AC_HEADER_TIME
 AC_HEADER_SYS_WAIT
 
-AC_CHECK_HEADERS(ctype.h strings.h stdlib.h string.h)
-
-AC_CHECK_HEADERS(sys/attributes.h attr/xattr.h sys/xattr.h)
-AC_SEARCH_LIBS(fgetxattr, [attr])
-AC_CHECK_FUNCS(fgetxattr)
-
-if test x"$ac_cv_func_fgetxattr" = x"yes"; then
-       AC_DEFINE(HAVE_XATTR_SUPPORT,1,[Whether we have xattr support])
+AC_CHECK_HEADERS(ctype.h strings.h stdlib.h string.h sys/vfs.h)
+
+AC_CHECK_HEADERS(sys/attributes.h attr/xattr.h sys/xattr.h sys/extattr.h sys/uio.h)
+AC_CHECK_FUNCS(fdatasync)
+# Check if we have libattr
+AC_SEARCH_LIBS(getxattr, [attr])
+AC_CHECK_FUNCS(getxattr lgetxattr fgetxattr listxattr llistxattr)
+AC_CHECK_FUNCS(flistxattr removexattr lremovexattr fremovexattr)
+AC_CHECK_FUNCS(setxattr lsetxattr fsetxattr)
+# Check if we have attr_get
+AC_CHECK_FUNCS(attr_get attr_list attr_set attr_remove)
+AC_CHECK_FUNCS(attr_getf attr_listf attr_setf attr_removef)
+# Check if we have extattr
+AC_CHECK_FUNCS(extattr_delete_fd extattr_delete_file extattr_delete_link)
+AC_CHECK_FUNCS(extattr_get_fd extattr_get_file extattr_get_link)
+AC_CHECK_FUNCS(extattr_list_fd extattr_list_file extattr_list_link)
+AC_CHECK_FUNCS(extattr_set_fd extattr_set_file extattr_set_link)
+
+if test x"$ac_cv_func_fgetxattr" = x"yes" -o \
+        x"$ac_cv_func_attr_getf" = x"yes" -o \
+        x"$ac_cv_func_extattr_get_fd" = x"yes"; then
+           AC_DEFINE(HAVE_EA_SUPPORT, 1, [Whether we have EA support])
 fi
 
 AC_CONFIG_FILES([Makefile])
index b6049b23508e846dc5c5dcb7974cac675359d79e..231a5526c08e1645d36b1384b24732b638daa678 100644 (file)
--- a/dbench.c
+++ b/dbench.c
 int sync_open = 0, sync_dirs = 0;
 char *tcp_options = TCP_OPTIONS;
 static int timelimit = 600, warmup;
-const char *directory = ".";
+static const char *directory = ".";
 static char *loadfile = DATADIR "/client.txt";
 static struct timeval tv_start;
 static struct timeval tv_end;
 
-#if HAVE_XATTR_SUPPORT
-int xattr_enable=0;
+#if HAVE_EA_SUPPORT
+int ea_enable=0;
 #endif
 
 static FILE *open_loadfile(void)
@@ -225,7 +225,7 @@ static void show_usage(void)
               "  -c loadfile      set location of the loadfile\n" \
               "  -s               synchronous file IO\n" \
               "  -S               synchronous directories (mkdir, unlink...)\n" \
-              "  -x               enable xattr support\n" \
+              "  -x               enable EA support\n" \
               "  -T options       set socket options for tbench\n");
        exit(1);
 }
@@ -263,10 +263,10 @@ static int process_opts(int argc, char **argv,
                        exit(0);
                        break;
                case 'x':
-#if HAVE_XATTR_SUPPORT
-                       xattr_enable = 1;
+#if HAVE_EA_SUPPORT
+                       ea_enable = 1;
 #else
-                       printf("xattr suppport not compiled in\n");
+                       printf("EA suppport not compiled in\n");
                        exit(1);
 #endif
                        break;
index a13d9c1c4228828fe042f311d5bd48994b5fb275..7ad5886520408169ea97d83b6d02f1a368d9873c 100644 (file)
--- a/dbench.h
+++ b/dbench.h
 #include <sys/ipc.h>
 #include <sys/shm.h>
 #include <sys/mman.h>
+
+#ifdef HAVE_SYS_VFS_H
 #include <sys/vfs.h>
+#endif
+
+#include <sys/param.h>
+#include <sys/mount.h>
+         
 #include <utime.h>
 #include <errno.h>
 #include <strings.h>
 #include <sys/attributes.h>
 #endif
 
+#ifdef HAVE_SYS_EXTATTR_H
+#include <sys/extattr.h>
+#endif
+
+#ifdef HAVE_SYS_UIO_H
+#include <sys/uio.h>
+#endif
+
 #ifndef MSG_WAITALL
 #define MSG_WAITALL 0x100
 #endif
 
 #define PRINT_FREQ 1
 
+#ifndef MIN
 #define MIN(x,y) ((x)<(y)?(x):(y))
+#endif
 
 #define TCP_PORT 7003
 #define TCP_OPTIONS "TCP_NODELAY SO_REUSEADDR"
index 5fdc7fa813252e2f4189ce0289db792627c3922c..f2bffb3cc6d6a4ec12242e2ba0e8e0a912de0545 100644 (file)
--- a/fileio.c
+++ b/fileio.c
@@ -67,7 +67,11 @@ static void sync_parent(char *fname)
                       copy_name,
                       strerror(errno));
        } else {
+#if defined(HAVE_FDATASYNC)
                if (fdatasync(dir_fd) == -1) {
+#else
+               if (fsync(dir_fd) == -1) {
+#endif
                        printf("datasync directory \"%s\" failed: %s\n",
                               copy_name,
                               strerror(errno));
@@ -82,12 +86,12 @@ static void sync_parent(char *fname)
 
 static void xattr_fd_read_hook(int fd)
 {
-#if HAVE_XATTR_SUPPORT
-       extern int xattr_enable;
+#if HAVE_EA_SUPPORT
+       extern int ea_enable;
        char buf[44];
-       if (xattr_enable) {
+       if (ea_enable) {
                memset(buf, 0, sizeof(buf));
-               fgetxattr(fd, "user.DosAttrib", buf, sizeof(buf));
+               sys_fgetxattr(fd, "user.DosAttrib", buf, sizeof(buf));
        }
 #else
        (void)fd;
@@ -96,11 +100,11 @@ static void xattr_fd_read_hook(int fd)
 
 static void xattr_fname_read_hook(const char *fname)
 {
-#if HAVE_XATTR_SUPPORT
-       extern int xattr_enable;
-       if (xattr_enable) {
+#if HAVE_EA_SUPPORT
+       extern int ea_enable;
+       if (ea_enable) {
                char buf[44];
-               getxattr(fname, "user.DosAttrib", buf, sizeof(buf));
+               sys_getxattr(fname, "user.DosAttrib", buf, sizeof(buf));
        }
 #else
        (void)fname;
@@ -109,16 +113,21 @@ static void xattr_fname_read_hook(const char *fname)
 
 static void xattr_fd_write_hook(int fd)
 {
-#if HAVE_XATTR_SUPPORT
-       extern int xattr_enable;
-       if (xattr_enable) {
+#if HAVE_EA_SUPPORT
+       extern int ea_enable;
+       if (ea_enable) {
                struct timeval tv;
                char buf[44];
+               sys_fgetxattr(fd, "user.DosAttrib", buf, sizeof(buf));
                memset(buf, 0, sizeof(buf));
-               fgetxattr(fd, "user.DosAttrib", buf, sizeof(buf));
-               gettimeofday(&tv, NULL);
-               memcpy(buf, &tv, sizeof(tv));
-               if (fsetxattr(fd, "user.DosAttrib", buf, sizeof(buf), 0) != 0) {
+               /* give some probability of sharing */
+               if (random() % 10 < 2) {
+                       *(time_t *)buf = time(NULL);
+               } else {
+                       gettimeofday(&tv, NULL);
+                       memcpy(buf, &tv, sizeof(tv));
+               }
+               if (sys_fsetxattr(fd, "user.DosAttrib", buf, sizeof(buf), 0) != 0) {
                        printf("fsetxattr failed - %s\n", strerror(errno));
                        exit(1);
                }
diff --git a/mkproto.awk b/mkproto.awk
deleted file mode 100644 (file)
index a1321a9..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-# generate prototypes for Samba C code
-# tridge, June 1996
-
-BEGIN {
-  inheader=0;
-  print "/* This file is automatically generated with \"make proto\". DO NOT EDIT */"
-  print ""
-}
-
-{
-  if (inheader) {
-    if (match($0,"[)][ \t]*$")) {
-      inheader = 0;
-      printf "%s;\n",$0;
-    } else {
-      printf "%s\n",$0;
-    }
-    next;
-  }
-}
-
-/^FN_LOCAL_BOOL/ {
-  split($0,a,"[,()]")
-  printf "BOOL %s(int );\n", a[2]
-}
-
-/^FN_LOCAL_STRING/ {
-  split($0,a,"[,()]")
-  printf "char *%s(int );\n", a[2]
-}
-
-/^FN_LOCAL_INT/ {
-  split($0,a,"[,()]")
-  printf "int %s(int );\n", a[2]
-}
-
-/^FN_LOCAL_CHAR/ {
-  split($0,a,"[,()]")
-  printf "char %s(int );\n", a[2]
-}
-
-/^FN_GLOBAL_BOOL/ {
-  split($0,a,"[,()]")
-  printf "BOOL %s(void);\n", a[2]
-}
-
-/^FN_GLOBAL_STRING/ {
-  split($0,a,"[,()]")
-  printf "char *%s(void);\n", a[2]
-}
-
-/^FN_GLOBAL_INT/ {
-  split($0,a,"[,()]")
-  printf "int %s(void);\n", a[2]
-}
-
-/^static|^extern/ || !/^[a-zA-Z]/ || /[;]/ {
-  next;
-}
-
-!/^OFF_T|^double|^size_t|^off_t|^pid_t|^unsigned|^mode_t|^DIR|^user|^int|^char|^uint|^struct|^BOOL|^void|^time/ {
-  next;
-}
-
-
-/[(].*[)][ \t]*$/ {
-    printf "%s;\n",$0;
-    next;
-}
-
-/[(]/ {
-  inheader=1;
-  printf "%s\n",$0;
-  next;
-}
-
diff --git a/mkproto.pl b/mkproto.pl
new file mode 100755 (executable)
index 0000000..227c7c0
--- /dev/null
@@ -0,0 +1,112 @@
+#!/usr/bin/perl
+
+use strict;
+
+# don't use warnings module as it is not portable enough
+# use warnings;
+
+my $header_name = '_PROTO_H_';
+
+if ($ARGV[0] eq '-h') {
+       shift @ARGV;
+       $header_name = shift @ARGV;
+}
+
+sub print_header {
+       print "#ifndef $header_name\n";
+       print "#define $header_name\n\n";
+       print "/* This file is automatically generated with \"make proto\". DO NOT EDIT */\n\n";
+}
+
+sub print_footer {
+       printf "\n#endif /*  %s  */\n", $header_name;
+}
+
+
+sub handle_loadparm {
+       my $line = shift;
+
+       if ($line =~ /^FN_(GLOBAL|LOCAL)_(CONST_STRING|STRING|BOOL|CHAR|INTEGER|LIST)\((\w+),.*\)/o) {
+               my $scope = $1;
+               my $type = $2;
+               my $name = $3;
+
+               my %tmap = (
+                           "BOOL" => "BOOL ",
+                           "CONST_STRING" => "const char *",
+                           "STRING" => "const char *",
+                           "INTEGER" => "int ",
+                           "CHAR" => "char ",
+                           "LIST" => "const char **",
+                           );
+
+               my %smap = (
+                           "GLOBAL" => "void",
+                           "LOCAL" => "int "
+                           );
+
+               print "$tmap{$type}$name($smap{$scope});\n";
+       }
+}
+
+
+sub process_file($) 
+{
+       my $filename = shift;
+
+       open(FH, "< $filename") || die "Failed to open $filename";
+
+       print "\n/* The following definitions come from $filename  */\n\n";
+
+       while (my $line = <FH>) {             
+               # these are ordered for maximum speed
+               next if ($line =~ /^\s/);
+             
+               next unless ($line =~ /\(/);
+
+               next if ($line =~ /^\/|[;]/);
+
+               next unless ( $line =~ /
+                             ^void|^BOOL|^int|^struct|^char|^const|^\w+_[tT]\s|^uint|^unsigned|^long|
+                             ^NTSTATUS|^ADS_STATUS|^enum\s.*\(|^DATA_BLOB|^WERROR|^XFILE|^FILE|^DIR|
+                             ^double|^TDB_CONTEXT|^TDB_DATA|^TALLOC_CTX|^NTTIME|^FN_|^REG_KEY|^REG_HANDLE|^REG_VAL|
+                             ^GtkWidget|^GType|^smb_ucs2_t
+                             /xo);
+
+               next if ($line =~ /^int\s*main/);
+
+               if ($line =~ /^FN_/) {
+                       handle_loadparm($line);
+                       next;
+               }
+
+               if ( $line =~ /\(.*\)\s*$/o ) {
+                       chomp $line;
+                       print "$line;\n";
+                       next;
+               }
+
+               print $line;
+
+               while ($line = <FH>) {
+                       if ($line =~ /\)\s*$/o) {
+                               chomp $line;
+                               print "$line;\n";
+                               last;
+                       }
+                       print $line;
+               }
+       }
+
+       close(FH);
+}
+
+sub process_files {
+       foreach my $filename (@ARGV) {
+               process_file($filename);
+       }
+}
+
+print_header();
+process_files();
+print_footer();
diff --git a/proto.h b/proto.h
index 75e681a02bb4c934dfd9101b8ab511fa4357b25e..905496db40abce49ec36736f1aa5f5da7fcc7253 100644 (file)
--- a/proto.h
+++ b/proto.h
@@ -1,6 +1,18 @@
+#ifndef _PROTO_H_
+#define _PROTO_H_
+
 /* This file is automatically generated with "make proto". DO NOT EDIT */
 
+
+/* The following definitions come from child.c  */
+
 void child_run(struct child_struct *child, const char *loadfile);
+
+/* The following definitions come from dbench.c  */
+
+
+/* The following definitions come from fileio.c  */
+
 void nb_setup(struct child_struct *child);
 void nb_unlink(struct child_struct *child, char *fname, int attr, const char *status);
 void nb_mkdir(struct child_struct *child, char *dname, const char *status);
@@ -29,6 +41,9 @@ void nb_lockx(struct child_struct *child, int handle, uint32_t offset, int size,
 void nb_unlockx(struct child_struct *child,
                int handle, uint32_t offset, int size, const char *status);
 void nb_sleep(struct child_struct *child, int usec, const char *status);
+
+/* The following definitions come from io.c  */
+
 void do_unlink(char *fname);
 void expand_file(int fd, int size);
 void do_open(char *fname, int handle, int size);
@@ -40,6 +55,9 @@ void do_rmdir(char *fname);
 void do_rename(char *old, char *new);
 void do_stat(char *fname, int size);
 void do_create(char *fname, int size);
+
+/* The following definitions come from sockio.c  */
+
 void nb_setup(struct child_struct *child);
 void nb_unlink(struct child_struct *child, char *fname, int attr, const char *status);
 void nb_mkdir(struct child_struct *child, char *dname, const char *status);
@@ -62,26 +80,37 @@ void nb_findfirst(struct child_struct *child, char *fname, int level, int maxcnt
                  int count, const char *status);
 void nb_cleanup(struct child_struct *child);
 void nb_deltree(struct child_struct *child, char *dname);
-void nb_warmup_done(struct child_struct *child);
 void nb_sfileinfo(struct child_struct *child, int handle, int level, const char *status);
 void nb_lockx(struct child_struct *child, int handle, uint32_t offset, int size, 
              const char *status);
 void nb_unlockx(struct child_struct *child,
                int handle, uint32_t offset, int size, const char *status);
 void nb_sleep(struct child_struct *child, int usec, const char *status);
+
+/* The following definitions come from socklib.c  */
+
 int open_socket_in(int type, int port);
 int open_socket_out(char *host, int port);
 void set_socket_options(int fd, char *options);
 int read_sock(int s, char *buf, int size);
 int write_sock(int s, char *buf, int size);
+
+/* The following definitions come from system.c  */
+
+ssize_t sys_getxattr (const char *path, const char *name, void *value, size_t size);
+ssize_t sys_fgetxattr (int filedes, const char *name, void *value, size_t size);
+int sys_fsetxattr (int filedes, const char *name, const void *value, size_t size, int flags);
+
+/* The following definitions come from tbench_srv.c  */
+
+
+/* The following definitions come from util.c  */
+
 void *shm_setup(int size);
-void strupper(char *s);
 void all_string_sub(char *s,const char *pattern,const char *insert);
 BOOL next_token(char **ptr,char *buff,char *sep);
-struct timeval timeval_zero(void);
 struct timeval timeval_current(void);
 double timeval_elapsed(struct timeval *tv);
 double timeval_elapsed2(struct timeval *tv1, struct timeval *tv2);
-struct timeval timeval_diff(struct timeval *tv1, struct timeval *tv2);
-int timeval_compare(struct timeval *tv1, struct timeval *tv2);
-struct timeval timeval_min(struct timeval *tv1, struct timeval *tv2);
+
+#endif /*  _PROTO_H_  */
index d88060a40224c999fa1ba6090335aeb5ff06df94..062b15986947480c39f88f37b7e9cb5bafff6eed 100644 (file)
--- a/sockio.c
+++ b/sockio.c
@@ -45,7 +45,7 @@ static void do_packets(int send_size, int recv_size)
                exit(1);
        }
 
-       if (ntohl(ubuf[0]) != recv_size-4) {
+       if (ntohl(ubuf[0]) != (unsigned)(recv_size-4)) {
                printf("lost sync (%d %d)\n", 
                       (int)recv_size-4, (int)ntohl(ubuf[0]));
                exit(1);
@@ -57,7 +57,7 @@ static void do_packets(int send_size, int recv_size)
                exit(1);
        }
 
-       if (ntohl(ubuf[0]) != recv_size-4) {
+       if (ntohl(ubuf[0]) != (unsigned)(recv_size-4)) {
                printf("lost sync (%d %d)\n", 
                       (int)recv_size-4, (int)ntohl(ubuf[0]));
        }
index 10a7ac5bbff8f4744872552d00370257732a6136..595885cc231ce3c18104aeeb16b0189610b1ba30 100644 (file)
--- a/socklib.c
+++ b/socklib.c
@@ -92,7 +92,7 @@ int open_socket_out(char *host, int port)
 
 enum SOCK_OPT_TYPES {OPT_BOOL,OPT_INT,OPT_ON};
 
-struct
+static const struct
 {
   char *name;
   int level;
diff --git a/system.c b/system.c
new file mode 100644 (file)
index 0000000..2dcbc09
--- /dev/null
+++ b/system.c
@@ -0,0 +1,115 @@
+/* 
+   dbench version 3
+
+   Copyright (c) Timur I. Bakeyev 2004
+   Copyright (C) Andrew Tridgell 1999-2004
+   
+   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., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#include "dbench.h"
+
+/**************************************************************************
+ Wrappers for extented attribute calls. Based on the Linux package with
+ support for IRIX also. Expand as other systems have them.
+****************************************************************************/
+
+ssize_t sys_getxattr (const char *path, const char *name, void *value, size_t size)
+{
+#if defined(HAVE_GETXATTR)
+       return getxattr(path, name, value, size);
+#elif defined(HAVE_EXTATTR_GET_FILE)
+       char *s;
+       int attrnamespace = (strncmp(name, "system", 6) == 0) ? 
+               EXTATTR_NAMESPACE_SYSTEM : EXTATTR_NAMESPACE_USER;
+       const char *attrname = ((s=strchr(name, '.')) == NULL) ? name : s + 1;
+
+       return extattr_get_file(path, attrnamespace, attrname, value, size);
+#elif defined(HAVE_ATTR_GET)
+       int retval, flags = 0;
+       int valuelength = (int)size;
+       char *attrname = strchr(name,'.') +1;
+       
+       if (strncmp(name, "system", 6) == 0) flags |= ATTR_ROOT;
+
+       retval = attr_get(path, attrname, (char *)value, &valuelength, flags);
+
+       return retval ? retval : valuelength;
+#else
+       errno = ENOSYS;
+       return -1;
+#endif
+}
+
+ssize_t sys_fgetxattr (int filedes, const char *name, void *value, size_t size)
+{
+#if defined(HAVE_FGETXATTR)
+       return fgetxattr(filedes, name, value, size);
+#elif defined(HAVE_EXTATTR_GET_FD)
+       char *s;
+       int attrnamespace = (strncmp(name, "system", 6) == 0) ? 
+               EXTATTR_NAMESPACE_SYSTEM : EXTATTR_NAMESPACE_USER;
+       const char *attrname = ((s=strchr(name, '.')) == NULL) ? name : s + 1;
+
+       return extattr_get_fd(filedes, attrnamespace, attrname, value, size);
+#elif defined(HAVE_ATTR_GETF)
+       int retval, flags = 0;
+       int valuelength = (int)size;
+       char *attrname = strchr(name,'.') +1;
+       
+       if (strncmp(name, "system", 6) == 0) flags |= ATTR_ROOT;
+
+       retval = attr_getf(filedes, attrname, (char *)value, &valuelength, flags);
+
+       return retval ? retval : valuelength;
+#else
+       errno = ENOSYS;
+       return -1;
+#endif
+}
+
+
+#if !defined(HAVE_SETXATTR)
+#define XATTR_CREATE  0x1       /* set value, fail if attr already exists */
+#define XATTR_REPLACE 0x2       /* set value, fail if attr does not exist */
+#endif
+
+int sys_fsetxattr (int filedes, const char *name, const void *value, size_t size, int flags)
+{
+#if defined(HAVE_FSETXATTR)
+       return fsetxattr(filedes, name, value, size, flags);
+#elif defined(HAVE_EXTATTR_SET_FD)
+       char *s;
+       int retval = 0;
+       int attrnamespace = (strncmp(name, "system", 6) == 0) ? 
+               EXTATTR_NAMESPACE_SYSTEM : EXTATTR_NAMESPACE_USER;
+       const char *attrname = ((s=strchr(name, '.')) == NULL) ? name : s + 1;
+
+       retval = extattr_set_fd(filedes, attrnamespace, attrname, value, size);
+       return (retval < 0) ? -1 : 0;
+#elif defined(HAVE_ATTR_SETF)
+       int myflags = 0;
+       char *attrname = strchr(name,'.') +1;
+       
+       if (strncmp(name, "system", 6) == 0) myflags |= ATTR_ROOT;
+       if (flags & XATTR_CREATE) myflags |= ATTR_CREATE;
+       if (flags & XATTR_REPLACE) myflags |= ATTR_REPLACE;
+
+       return attr_setf(filedes, attrname, (const char *)value, size, myflags);
+#else
+       errno = ENOSYS;
+       return -1;
+#endif
+}
index 1355179a694e99d9ebc25569f75124b8e32a5088..6cd1e14b7896b99bbaa2498fdac765dd4438db94 100644 (file)
@@ -38,10 +38,10 @@ static void server(int fd)
                        printf("overflow in server!\n");
                        exit(1);
                }
-               if (read_sock(fd, buf+4, n) != n) break;
+               if (read_sock(fd, buf+4, n) != (int)n) break;
                n = ntohl(ibuf[1]);
                ibuf[0] = htonl(n);
-               if (write_sock(fd, buf, n+4) != n+4) break;
+               if (write_sock(fd, buf, n+4) != (int)(n+4)) break;
        }
 
        exit(0);
diff --git a/util.c b/util.c
index f5ece954df3dd4c9a1111a2becf89a6a192c7240..543a8cd79984cae4f5cd2814e82eecb33fe7f9b5 100644 (file)
--- a/util.c
+++ b/util.c
@@ -68,15 +68,6 @@ void *shm_setup(int size)
        return ret;
 }
 
-void strupper(char *s)
-{
-       while (*s) {
-               *s = toupper(*s);
-               s++;
-       }
-}
-
-
 /****************************************************************************
 similar to string_sub() but allows for any character to be substituted. 
 Use with caution!
@@ -144,17 +135,6 @@ BOOL next_token(char **ptr,char *buff,char *sep)
        return(True);
 }
 
-/*
-  return a zero timeval
-*/
-struct timeval timeval_zero(void)
-{
-        struct timeval tv;
-        tv.tv_sec = 0;
-        tv.tv_usec = 0;
-        return tv;
-}
-
 /*
   return a timeval for the current time
 */
@@ -184,49 +164,3 @@ double timeval_elapsed2(struct timeval *tv1, struct timeval *tv2)
                (tv2->tv_usec - tv1->tv_usec)*1.0e-6;
 }
 
-/*
-  return the difference between two timevals as a timeval
-  if tv2 comes after tv1, then return a zero timeval
-  (this is *tv1 - *tv2)
-*/
-struct timeval timeval_diff(struct timeval *tv1, struct timeval *tv2)
-{
-        struct timeval t;
-        if (timeval_compare(tv1, tv2) >= 0) {
-                return timeval_zero();
-        }
-        t.tv_sec = tv1->tv_sec - tv2->tv_sec;
-        if (tv2->tv_usec > tv1->tv_usec) {
-                t.tv_sec--;
-                t.tv_usec = 1000000 - (tv2->tv_usec - tv1->tv_usec);
-        } else {
-                t.tv_usec = tv1->tv_usec - tv2->tv_usec;
-        }
-        return t;
-}
-
-/*
-  compare two timeval structures. 
-  Return 1 if tv2 > tv1
-  Return 0 if tv2 == tv1
-  Return -1 if tv2 < tv1
-*/
-int timeval_compare(struct timeval *tv1, struct timeval *tv2)
-{
-        if (tv2->tv_sec  > tv1->tv_sec)  return 1;
-        if (tv2->tv_sec  < tv1->tv_sec)  return -1;
-        if (tv2->tv_usec > tv1->tv_usec) return 1;
-        if (tv2->tv_usec < tv1->tv_usec) return -1;
-        return 0;
-}
-
-/*
-  return the lesser of two timevals
-*/
-struct timeval timeval_min(struct timeval *tv1, struct timeval *tv2)
-{
-       if (tv1->tv_sec < tv2->tv_sec) return *tv1;
-       if (tv1->tv_sec > tv2->tv_sec) return *tv2;
-       if (tv1->tv_usec < tv2->tv_usec) return *tv1;
-       return *tv2;
-}