summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--configure.ac24
-rw-r--r--include/c.h9
-rw-r--r--shlibs/blkid/src/read.c12
3 files changed, 40 insertions, 5 deletions
diff --git a/configure.ac b/configure.ac
index 246afd4f..2aadacf5 100644
--- a/configure.ac
+++ b/configure.ac
@@ -224,6 +224,30 @@ AC_SEARCH_LIBS([socket], [socket],
fi])
AC_SUBST([SOCKET_LIBS])
+
+have_dirfd=no
+AC_CHECK_FUNCS([dirfd], [have_dirfd=yes], [have_dirfd=no])
+if test x"$have_dirfd" = xno ; then
+ AC_CHECK_DECLS([dirfd],
+ [have_dirfd=yes], [have_dirfd=no],
+ [#include <sys/types.h>
+ #include <dirent.h>])
+fi
+
+have_ddfd=no
+if test x"$have_dirfd" = xno ; then
+ AC_CHECK_MEMBERS([DIR.dd_fd],
+ [have_ddfd=yes], [have_ddfd=no],
+ [#include <sys/types.h>
+ #include <dirent.h>])
+fi
+
+case "$have_dirfd:$have_ddfd" in
+no:no)
+ AC_MSG_ERROR([cannot find a method to get filedescriptor of directory]) ;;
+esac
+
+
dnl Static compilation
m4_define([UTIL_STATIC_PROGRAMS], [losetup, mount, umount, fdisk, sfdisk, blkid])
diff --git a/include/c.h b/include/c.h
index 83be3565..b37c4422 100644
--- a/include/c.h
+++ b/include/c.h
@@ -73,5 +73,14 @@ static inline __attribute__((const)) int is_power_of_2(unsigned long num)
typedef int64_t loff_t;
#endif
+#if !defined(HAVE_DIRFD) && (!defined(HAVE_DECL_DIRFD) || HAVE_DECL_DIRFD == 0) && defined(HAVE_DIR_DD_FD)
+#include <sys/types.h>
+#include <dirent.h>
+static inline int dirfd(DIR *d)
+{
+ return d->dd_fd;
+}
+#endif
+
#endif /* UTIL_LINUX_C_H */
diff --git a/shlibs/blkid/src/read.c b/shlibs/blkid/src/read.c
index e6aa0836..3ff9ebe9 100644
--- a/shlibs/blkid/src/read.c
+++ b/shlibs/blkid/src/read.c
@@ -10,7 +10,6 @@
* %End-Header%
*/
-#define _XOPEN_SOURCE 600 /* for inclusion of strtoull */
#include <stdio.h>
#include <ctype.h>
@@ -26,6 +25,13 @@
#include "blkidP.h"
+#if HAVE_STDLIB_H
+# ifndef _XOPEN_SOURCE
+# define _XOPEN_SOURCE 600 /* for inclusion of strtoull */
+# endif
+# include <stdlib.h>
+#endif
+
#ifdef HAVE_STRTOULL
#define STRTOULL strtoull /* defined in stdlib.h if you try hard enough */
#else
@@ -33,10 +39,6 @@
#define STRTOULL strtoul
#endif
-#if HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-
#ifdef TEST_PROGRAM
#define blkid_debug_dump_dev(dev) (debug_dump_dev(dev))
static void debug_dump_dev(blkid_dev dev);