diff options
author | Max Kellermann <max@duempel.org> | 2008-08-29 09:38:08 +0200 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2008-08-29 09:38:08 +0200 |
commit | f42de62aa23dc238a767a6fcf0e92fd2c5f3a8f3 (patch) | |
tree | 9803723ce6923b2b12a80e0733b359b32cafd801 | |
parent | 8811c0e05943edbcb3d7203ef4f61ec89423718a (diff) | |
download | mpd-f42de62aa23dc238a767a6fcf0e92fd2c5f3a8f3.tar.gz mpd-f42de62aa23dc238a767a6fcf0e92fd2c5f3a8f3.tar.xz mpd-f42de62aa23dc238a767a6fcf0e92fd2c5f3a8f3.zip |
added xfree() which takes a const pointer
Unfortunately, the C standard postulates that the argument to free()
must be non-const. This does not makes sense, and virtually prevents
every pointer which must be freed at some time to be non-const. Use
the deconst hack (sorry for that) to allow us to free constant
pointers.
-rw-r--r-- | src/utils.h | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/utils.h b/src/utils.h index 6a6e562cf..77e143702 100644 --- a/src/utils.h +++ b/src/utils.h @@ -76,6 +76,19 @@ mpd_malloc void *xrealloc(void *ptr, size_t size); mpd_malloc void *xcalloc(size_t nmemb, size_t size); +/** + * free a const pointer - unfortunately free() expects a non-const + * pointer, for whatever reason + */ +static inline void xfree(const void *p) +{ + union { + const void *in; + void *out; + } deconst = { .in = p }; + free(deconst.out); +} + char *parsePath(char *path); int set_nonblocking(int fd); |