Cleaned up some macros
This commit is contained in:
@@ -98,7 +98,7 @@ nm_config_t *nm_config_parse(char **err_out) {
|
|||||||
fclose(cfgfile); \
|
fclose(cfgfile); \
|
||||||
free(line); \
|
free(line); \
|
||||||
closedir(cfgdir); \
|
closedir(cfgdir); \
|
||||||
NM_RETURN_ERR(fmt, ##__VA_ARGS__); \
|
NM_RETURN_ERR(fmt, ##__VA_ARGS__); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
// parse each line
|
// parse each line
|
||||||
|
|||||||
16
src/util.h
16
src/util.h
@@ -38,20 +38,20 @@ inline char *strtrim(char *s){
|
|||||||
// writes the formatted error message to *err_out as a malloc'd string. The
|
// writes the formatted error message to *err_out as a malloc'd string. The
|
||||||
// arguments may or may not be evaluated more than once.
|
// arguments may or may not be evaluated more than once.
|
||||||
#define NM_RETURN(ret, fmt, ...) _NM_RETURN(0, ret, fmt, ##__VA_ARGS__)
|
#define NM_RETURN(ret, fmt, ...) _NM_RETURN(0, ret, fmt, ##__VA_ARGS__)
|
||||||
#define _NM_RETURN(noerr, ret, fmt, ...) ({ \
|
#define _NM_RETURN(noerr, ret, fmt, ...) ({ \
|
||||||
__typeof__(ret) _ret = (ret); \
|
__typeof__(ret) _ret = (ret); \
|
||||||
if (err_out) { \
|
if (err_out) { \
|
||||||
if (!noerr && _ret == NM_ERR_RET) asprintf(err_out, fmt " (%s:%d)", ##__VA_ARGS__, __FILE__, __LINE__); \
|
if (!noerr && _ret == NM_ERR_RET) asprintf(err_out, fmt " (%s:%d)", ##__VA_ARGS__, __FILE__, __LINE__); \
|
||||||
else *err_out = NULL; \
|
else *err_out = NULL; \
|
||||||
} \
|
} \
|
||||||
return _ret; \
|
return _ret; \
|
||||||
})
|
})
|
||||||
|
|
||||||
// NM_ASSERT is like assert, but it writes the formatted error message to
|
// NM_ASSERT is like assert, but it writes the formatted error message to
|
||||||
// err_out as a malloc'd string, and returns NM_ERR_RET. Cond will always be
|
// err_out as a malloc'd string, and returns NM_ERR_RET. Cond will always be
|
||||||
// evaluated exactly once. The other arguments may or may not be evaluated one
|
// evaluated exactly once. The other arguments may or may not be evaluated one
|
||||||
// or more times.
|
// or more times.
|
||||||
#define NM_ASSERT(cond, fmt, ...) ({ \
|
#define NM_ASSERT(cond, fmt, ...) ({ \
|
||||||
if (!(cond)) _NM_RETURN(0, NM_ERR_RET, fmt " (assertion failed: %s)", ##__VA_ARGS__, #cond); \
|
if (!(cond)) _NM_RETURN(0, NM_ERR_RET, fmt " (assertion failed: %s)", ##__VA_ARGS__, #cond); \
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user