S_ISREG macro undefined S_ISREG macro undefined curl curl

S_ISREG macro undefined


Currently curl 7.21.5 defines in setup.h this:

#if !defined(S_ISREG) && defined(S_IFMT) && defined(S_IFREG)#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)#endif


After having inspected Microsoft's sys/stat.h, I found that the following modification of @OliverZendel's answer worked for me, with Visual Studio 2017, and hopefully on other compilers as well:

// Windows does not define the S_ISREG and S_ISDIR macros in stat.h, so we do.// We have to define _CRT_INTERNAL_NONSTDC_NAMES 1 before #including sys/stat.h// in order for Microsoft's stat.h to define names like S_IFMT, S_IFREG, and S_IFDIR,// rather than just defining  _S_IFMT, _S_IFREG, and _S_IFDIR as it normally does.#define _CRT_INTERNAL_NONSTDC_NAMES 1#include <sys/stat.h>#if !defined(S_ISREG) && defined(S_IFMT) && defined(S_IFREG)  #define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)#endif#if !defined(S_ISDIR) && defined(S_IFMT) && defined(S_IFDIR)  #define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)#endif


No such thing on windows, you can use the FindFirstFile, FindNextFile win32 api, the return structure contains something similar but not the same.

If you use gcc/mingw library they have a stat() simulation. You need to include sys/stat.h for that macro.