print_opaque(Lisp_Object obj, Lisp_Object printcharfun, int escapeflag)
{
const Lisp_Opaque *p = XOPAQUE(obj);
- char buf[200];
- sprintf(buf,
- "#<INTERNAL OBJECT (SXEmacs bug?) (opaque, size=%lu) 0x%lx>",
- (long)(p->size), (unsigned long)p);
- write_c_string(buf, printcharfun);
+ write_fmt_str(printcharfun,
+ "#<INTERNAL OBJECT (SXEmacs bug?) (opaque, size=%lu) 0x%lx>",
+ (long)(p->size), (unsigned long)p);
}
static inline size_t
{
Lisp_Opaque *p = (Lisp_Opaque *)
alloc_lcrecord(aligned_sizeof_opaque(size), &lrecord_opaque);
- p->size = size;
- if (data == OPAQUE_CLEAR)
- memset(p->data, '\0', size);
- else if (data == OPAQUE_UNINIT)
- DO_NOTHING;
- else
- memcpy(p->data, data, size);
-
- {
- Lisp_Object val;
- XSETOPAQUE(val, p);
- return val;
+ assert(p!=NULL);
+ if(p != NULL) {
+ p->size = size;
+
+ if (data == OPAQUE_CLEAR)
+ memset(p->data, '\0', size);
+ else if (data == OPAQUE_UNINIT)
+ DO_NOTHING;
+ else
+ memcpy(p->data, data, size);
+
+ {
+ Lisp_Object val;
+ XSETOPAQUE(val, p);
+ return val;
+ }
}
+ return Qnil;
}
/* This will not work correctly for opaques with subobjects! */
print_opaque_ptr(Lisp_Object obj, Lisp_Object printcharfun, int escapeflag)
{
const Lisp_Opaque_Ptr *p = XOPAQUE_PTR(obj);
- char buf[200];
- sprintf(buf,
- "#<INTERNAL OBJECT (SXEmacs bug?) "
- "(opaque-ptr, adr=%p) %p>", p->ptr, p);
- write_c_string(buf, printcharfun);
+ write_fmt_string(printcharfun,
+ "#<INTERNAL OBJECT (SXEmacs bug?) "
+ "(opaque-ptr, adr=%p) %p>", p->ptr, p);
}
static int equal_opaque_ptr(Lisp_Object obj1, Lisp_Object obj2, int depth)