From c1b7fcc5e277bed300c208625fb32f4de39cb033 Mon Sep 17 00:00:00 2001 From: jixbo Date: Tue, 10 Nov 2015 20:14:57 +0100 Subject: [PATCH] dtbtool: fix for filesystems that don't return d_type from readdir readdir() doesn't fill in d_type in all filesystems, in particular XFS. This is fixed using stat(). Change-Id: Ia0e78a628bc13f1a4eb9a0332bff04d9ecf87913 --- dtbTool/dtbtool.c | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/dtbTool/dtbtool.c b/dtbTool/dtbtool.c index 9abc121b..184acddf 100644 --- a/dtbTool/dtbtool.c +++ b/dtbTool/dtbtool.c @@ -830,22 +830,23 @@ int main(int argc, char **argv) extract "qcom,msm-id" parameter */ while ((dp = readdir(dir)) != NULL) { - if ((dp->d_type == DT_REG)) { + + flen = strlen(input_dir) + strlen(dp->d_name) + 1; + filename = (char *)malloc(flen); + if (!filename) { + log_err("Out of memory\n"); + rc = RC_ERROR; + break; + } + strncpy(filename, input_dir, flen); + strncat(filename, dp->d_name, flen); + + if (stat(filename, &st) == 0 && S_ISREG(st.st_mode)) { flen = strlen(dp->d_name); if ((flen > 4) && (strncmp(&dp->d_name[flen-4], ".dtb", 4) == 0)) { log_info("Found file: %s ... \n", dp->d_name); - flen = strlen(input_dir) + strlen(dp->d_name) + 1; - filename = (char *)malloc(flen); - if (!filename) { - log_err("Out of memory\n"); - rc = RC_ERROR; - break; - } - strncpy(filename, input_dir, flen); - strncat(filename, dp->d_name, flen); - /* To identify the version number */ msmversion = GetVersionInfo(filename);