meta_set Tcl_Obj* imageObj Tcl_Obj* metaObj crimp_image* image; if (crimp_get_image_from_obj (interp, imageObj, &image) != TCL_OK) { return TCL_ERROR; } /* * Nothing to do if the assignment doesn't change anything. */ if (metaObj == image->meta) { Tcl_SetObjResult (interp, imageObj); return TCL_OK; } /* * For a non-shared image we can replace in-place, avoiding a memory copy. */ if (!Tcl_IsShared(imageObj)) { Tcl_IncrRefCount (metaObj); Tcl_DecrRefCount (image->meta); image->meta = metaObj; Tcl_SetObjResult (interp, imageObj); return TCL_OK; } /* * Create a new image with the modified meta data reference and otherwise * identical. */ image = crimp_newm (image->itype, image->w, image->h, metaObj); Tcl_SetObjResult(interp, crimp_new_image_obj (image)); return TCL_OK; /* vim: set sts=4 sw=4 tw=80 et ft=c: */ /* * Local Variables: * mode: c * c-basic-offset: 4 * fill-column: 78 * End: */