X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=src%2Fopaque.c;h=976ecd7471ad6cb0d5b3c37184437074da5e00f1;hb=767a4d3c6cc84c530d28f5fa02f51c23ccd29f4e;hp=51ea9349ae8187b39e2babd1b0cf4da3e7be4979;hpb=3e447015251ce6dcde843cbed10d9033d5538622;p=chise%2Fxemacs-chise.git.1 diff --git a/src/opaque.c b/src/opaque.c index 51ea934..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); @@ -173,5 +179,8 @@ reinit_opaque_once_early (void) void init_opaque_once_early (void) { + INIT_LRECORD_IMPLEMENTATION (opaque); + INIT_LRECORD_IMPLEMENTATION (opaque_ptr); + reinit_opaque_once_early (); }