X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=src%2Fopaque.c;h=976ecd7471ad6cb0d5b3c37184437074da5e00f1;hb=57bf633187a745973c8f0e0220e3aad79a83462f;hp=1b080e55fe8fa1b6338b2df4935e3ed45f523e81;hpb=3890a2e3064a7f562107c58e59d928284ec04741;p=chise%2Fxemacs-chise.git.1 diff --git a/src/opaque.c b/src/opaque.c index 1b080e5..976ecd7 100644 --- a/src/opaque.c +++ b/src/opaque.c @@ -52,11 +52,17 @@ print_opaque (Lisp_Object obj, Lisp_Object printcharfun, int escapeflag) write_c_string (buf, printcharfun); } +inline static size_t +aligned_sizeof_opaque (size_t opaque_size) +{ + return ALIGN_SIZE (offsetof (Lisp_Opaque, data) + opaque_size, + ALIGNOF (max_align_t)); +} + static size_t sizeof_opaque (const void *header) { - const Lisp_Opaque *p = (const Lisp_Opaque *) header; - return offsetof (Lisp_Opaque, data) + p->size; + return aligned_sizeof_opaque (((const Lisp_Opaque *) header)->size); } /* Return an opaque object of size SIZE. @@ -67,7 +73,7 @@ Lisp_Object make_opaque (const void *data, size_t size) { Lisp_Opaque *p = (Lisp_Opaque *) - alloc_lcrecord (offsetof (Lisp_Opaque, data) + size, &lrecord_opaque); + alloc_lcrecord (aligned_sizeof_opaque (size), &lrecord_opaque); p->size = size; if (data == OPAQUE_CLEAR) @@ -124,7 +130,7 @@ print_opaque_ptr (Lisp_Object obj, Lisp_Object printcharfun, int escapeflag) const Lisp_Opaque_Ptr *p = XOPAQUE_PTR (obj); char buf[200]; - sprintf (buf, "#", + sprintf (buf, "#", (long)(p->ptr), (unsigned long) p); write_c_string (buf, printcharfun); } @@ -141,7 +147,7 @@ hash_opaque_ptr (Lisp_Object obj, int depth) return (unsigned long) XOPAQUE_PTR (obj)->ptr; } -DEFINE_LRECORD_IMPLEMENTATION ("opaque_ptr", opaque_ptr, +DEFINE_LRECORD_IMPLEMENTATION ("opaque-ptr", opaque_ptr, 0, print_opaque_ptr, 0, equal_opaque_ptr, hash_opaque_ptr, 0, Lisp_Opaque_Ptr);