Partially sync files.el from XEmacs 21.5 for wildcard support.
[sxemacs] / src / opaque.c
index 0da4753..70459a5 100644 (file)
@@ -46,12 +46,10 @@ static void
 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
@@ -78,20 +76,25 @@ make_opaque(const void *data, size_t size)
 {
        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! */
@@ -130,12 +133,10 @@ static void
 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)