bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Problem compiling glob.c with MinGW


From: Eli Zaretskii
Subject: Problem compiling glob.c with MinGW
Date: Sat, 12 May 2018 11:17:47 +0300

Building the latest pretest of wget2 on MinGW produces the following
warning:

       CC       glob.lo
     glob.c: In function 'glob_in_dir':
     glob.c:1331:32: warning: case label value exceeds maximum value for type
                        case DT_DIR: case DT_LNK: case DT_UNKNOWN: break;
                                     ^~~~

This is because glob.c unconditionally defines dirent_type data
type as follows:

  typedef uint_fast8_t dirent_type;

But if system header dirent.h is found to define the d_type member of
struct dirent, the type should be the same as for d_type, or at least
as wide as that of d_type, otherwise the DT_* constants, which come
from dirent.h, might be outside the valid range of values for unsigned
char.  The above typedef should be used only for systems where d_type
member is missing from struct dirent, and the DT_* constants are
defined by Gnulib.

My solution was to use 'typeof' to declare dirent_type such that its
type is the same as that of d_type from struct dirent.  An alternative
is to use 'unsigned long' as the type of dirent_type, although I think
that is a bit more risky.

P.S.  Please CC me on any responses.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]