comparison src/dmlib.h @ 2385:5ffc48a0bebe

Conditionally define DM_ATTR_PRINTF_FMT(xstart, xend) instead of using __attribute__ ((__format__ (__printf__, (xstart), (xend)))) directly. Wrap it in an #ifdef check for __MINGW64__ as there are some annoying issues on that side, which we just suppress now.
author Matti Hamalainen <ccr@tnsp.org>
date Thu, 09 Jan 2020 18:51:22 +0200
parents 43e39d9ec42f
children 835b231d8083
comparison
equal deleted inserted replaced
2384:36edd316184a 2385:5ffc48a0bebe
40 # if defined(__LP64__) || defined(_LP64) || defined(__WIN64) || defined(_WIN64) 40 # if defined(__LP64__) || defined(_LP64) || defined(__WIN64) || defined(_WIN64)
41 # define DM_ARCH 64 41 # define DM_ARCH 64
42 # else 42 # else
43 # define DM_ARCH 32 43 # define DM_ARCH 32
44 # endif 44 # endif
45 #endif
46
47
48 // Kludge, as MinGW64 cross-compiler does not like certain printf() format specifiers
49 #if defined(__MINGW64__)
50 # define DM_ATTR_PRINTF_FMT(xstart, xend)
51 #else
52 # define DM_ATTR_PRINTF_FMT(xstart, xend) __attribute__ ((__format__ (__printf__, (xstart), (xend))))
45 #endif 53 #endif
46 54
47 55
48 // Do we have a valid arch? 56 // Do we have a valid arch?
49 // If so, set some printf specifiers 57 // If so, set some printf specifiers
372 void dmInitProg(char *name, char *desc, char *version, char *author, char *license); 380 void dmInitProg(char *name, char *desc, char *version, char *author, char *license);
373 void dmPrintBanner(FILE *outFile, const char *name, const char *usage); 381 void dmPrintBanner(FILE *outFile, const char *name, const char *usage);
374 382
375 void dmMsgVA(int level, const char *fmt, va_list ap); 383 void dmMsgVA(int level, const char *fmt, va_list ap);
376 void dmMsg(int level, const char *fmt, ...) 384 void dmMsg(int level, const char *fmt, ...)
377 __attribute__ ((__format__ (__printf__, 2, 3))); 385 DM_ATTR_PRINTF_FMT(2, 3);
378 void dmPrintVA(int level, const char *fmt, va_list ap); 386 void dmPrintVA(int level, const char *fmt, va_list ap);
379 void dmPrint(int level, const char *fmt, ...) 387 void dmPrint(int level, const char *fmt, ...)
380 __attribute__ ((__format__ (__printf__, 2, 3))); 388 DM_ATTR_PRINTF_FMT(2, 3);
381 389
382 int dmErrorVA(const int error, const char *fmt, va_list); 390 int dmErrorVA(const int error, const char *fmt, va_list);
383 int dmError(const int error, const char *fmt, ...) 391 int dmError(const int error, const char *fmt, ...)
384 __attribute__ ((__format__ (__printf__, 2, 3))); 392 DM_ATTR_PRINTF_FMT(2, 3);
385 void dmErrorMsg(const char *fmt, ...) 393 void dmErrorMsg(const char *fmt, ...)
386 __attribute__ ((__format__ (__printf__, 1, 2))); 394 DM_ATTR_PRINTF_FMT(1, 2);
387 int dmGetErrno(); 395 int dmGetErrno();
388 const char *dmErrorStr(const int error); 396 const char *dmErrorStr(const int error);
389 397
390 #ifdef DM_DEBUG 398 #ifdef DM_DEBUG
391 # define dmErrorDBG dmError 399 # define dmErrorDBG dmError