Replace ERROR() macro with inline function. In-tree gcc cannot tolerate
the construct like printf("%\s", NULL) resulting from macroexpand of ERROR(u, NULL), making it impossible to use LIBUFS_DEBUGGING. With inline function, compiler cannot detect the NULL argument to known function and does not try to convert it into puts(). In collaboration with: pho
This commit is contained in:
parent
a7c797f063
commit
49e51fb02c
@ -30,34 +30,6 @@
|
||||
#ifndef __LIBUFS_H__
|
||||
#define __LIBUFS_H__
|
||||
|
||||
/*
|
||||
* libufs macros (internal, non-exported).
|
||||
*/
|
||||
#ifdef _LIBUFS
|
||||
#ifdef _LIBUFS_DEBUGGING
|
||||
/*
|
||||
* Trace steps through libufs, to be used at entry and erroneous return.
|
||||
*/
|
||||
#define ERROR(uufsd, str) \
|
||||
do { \
|
||||
fprintf(stderr, "libufs in %s", __func__); \
|
||||
if (str != NULL) \
|
||||
fprintf(stderr, ": %s", str); \
|
||||
if (errno) \
|
||||
fprintf(stderr, ": %s", strerror(errno)); \
|
||||
fprintf(stderr, "\n"); \
|
||||
if ((uufsd) != NULL) \
|
||||
(uufsd)->d_error = str; \
|
||||
} while (0)
|
||||
#else /* _LIBUFS_DEBUGGING */
|
||||
#define ERROR(uufsd, str) \
|
||||
do { \
|
||||
if ((uufsd) != NULL) \
|
||||
(uufsd)->d_error = str; \
|
||||
} while (0)
|
||||
#endif /* _LIBUFS_DEBUGGING */
|
||||
#endif /* _LIBUFS */
|
||||
|
||||
/*
|
||||
* libufs structures.
|
||||
*/
|
||||
@ -94,6 +66,30 @@ struct uufsd {
|
||||
#define d_cg d_cgunion.d_cg
|
||||
};
|
||||
|
||||
/*
|
||||
* libufs macros (internal, non-exported).
|
||||
*/
|
||||
#ifdef _LIBUFS
|
||||
/*
|
||||
* Trace steps through libufs, to be used at entry and erroneous return.
|
||||
*/
|
||||
static inline void
|
||||
ERROR(struct uufsd *u, const char *str)
|
||||
{
|
||||
|
||||
#ifdef _LIBUFS_DEBUGGING
|
||||
if (str != NULL) {
|
||||
fprintf(stderr, "libufs: %s", str);
|
||||
if (errno != 0)
|
||||
fprintf(stderr, ": %s", strerror(errno));
|
||||
fprintf(stderr, "\n");
|
||||
}
|
||||
#endif
|
||||
if (u != NULL)
|
||||
u->d_error = str;
|
||||
}
|
||||
#endif /* _LIBUFS */
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user