From 92c5462adef87b1e577b8557b6b9c64d5a089544 Mon Sep 17 00:00:00 2001 From: Nikias Bassen Date: Tue, 30 Oct 2018 13:12:34 +0800 Subject: idevicebackup2: Fix scan_directory() for platforms not having d_type in struct dirent --- configure.ac | 2 ++ tools/idevicebackup2.c | 6 ++++++ 2 files changed, 8 insertions(+) diff --git a/configure.ac b/configure.ac index ec210fc..69ff13b 100644 --- a/configure.ac +++ b/configure.ac @@ -83,6 +83,8 @@ case ${host_os} in esac AM_CONDITIONAL(WIN32, test x$win32 = xtrue) +AC_CHECK_MEMBER(struct dirent.d_type, AC_DEFINE(HAVE_DIRENT_D_TYPE, 1, [define if struct dirent has member d_type]),, [#include ]) + # Cython Python Bindings AC_ARG_WITH([cython], [AS_HELP_STRING([--without-cython], diff --git a/tools/idevicebackup2.c b/tools/idevicebackup2.c index 02611a1..f7ea53a 100644 --- a/tools/idevicebackup2.c +++ b/tools/idevicebackup2.c @@ -254,7 +254,13 @@ static void scan_directory(const char *path, struct entry **files, struct entry } char *fpath = string_build_path(path, ep->d_name, NULL); if (fpath) { +#ifdef HAVE_DIRENT_D_TYPE if (ep->d_type & DT_DIR) { +#else + struct stat st; + if (stat(fpath, &st) != 0) return; + if (S_ISDIR(st.st_mode)) { +#endif struct entry *ent = malloc(sizeof(struct entry)); if (!ent) return; ent->name = fpath; -- cgit v1.1-32-gdbae