From 19d48740cd3240df1197908e72ea544e13f1d0b6 Mon Sep 17 00:00:00 2001 From: Patrick Pelissier Date: Sat, 27 Oct 2018 16:13:02 +0200 Subject: [PATCH] Modify prototype of buffer _init_set & _set to allow const argument for src. Not proud of the solution. --- m-buffer.h | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/m-buffer.h b/m-buffer.h index 3897af85..39650c5b 100644 --- a/m-buffer.h +++ b/m-buffer.h @@ -124,6 +124,7 @@ typedef enum { \ typedef struct M_C(name, _s) *M_C(name, _ptr); \ typedef const struct M_C(name, _s) *M_C(name, _srcptr); \ + typedef union { M_C(name, _srcptr) cptr; M_C(name, _ptr) ptr; } M_C(name, _uptr); \ typedef type M_C(name, _type_t); \ \ static inline void \ @@ -230,8 +231,12 @@ M_C(name, _init)(buffer_t v, size_t size) \ } \ \ static inline void \ - M_C(name, _init_set)(buffer_t dest, buffer_t v) \ + M_C(name, _init_set)(buffer_t dest, const buffer_t src) \ { \ + /* unconst 'src', so that we can lock it (semantically it is const) */ \ + M_C(name, _uptr) vu; \ + vu.cptr = src; \ + M_C(name, _ptr) v = vu.ptr; \ assert (dest != v); \ BUFFERI_CONTRACT(v,m_size); \ M_C(name, _init)(dest, BUFFERI_SIZE(m_size)); \ @@ -270,8 +275,12 @@ M_C(name, _init)(buffer_t v, size_t size) \ } \ \ static inline void \ - M_C(name, _set)(buffer_t dest, buffer_t v) \ + M_C(name, _set)(buffer_t dest, const buffer_t src) \ { \ + /* unconst 'src', so that we can lock it (semantically it is const) */ \ + M_C(name, _uptr) vu; \ + vu.cptr = src; \ + M_C(name, _ptr) v = vu.ptr; \ BUFFERI_CONTRACT(dest,m_size); \ BUFFERI_CONTRACT(v,m_size); \ \