PR_ASSERT(obj && obj->options && output_fn);
MimeCMS_init(MimeObject *obj,			   int (*output_fn) (const char *buf, PRInt32 buf_size,								 void *output_closure),			   void *output_closure){  MimeCMSdata *data;  MimeDisplayOptions *opts;  nsresult rv;  PR_ASSERT(obj && obj->options && output_fn);  if (!(obj && obj->options && output_fn)) return 0;  opts = obj->options;  data = (MimeCMSdata *) PR_MALLOC(sizeof(*data));  if (!data) return 0;  nsCRT::memset(data, 0, sizeof(*data));  data->self = obj;  data->output_fn = output_fn;  data->output_closure = output_closure;  PR_SetError(0, 0);  data->decoder_context = do_CreateInstance(NS_CMSDECODER_CONTRACTID, &rv);  if (NS_FAILED(rv)) return 0;  rv = data->decoder_context->Start(MimeCMS_content_callback, data);  if (NS_FAILED(rv)) return 0;  // XXX Fix later XXX //#if 0   data->parent_holds_stamp_p =	(obj->parent &&	 (mime_crypto_stamped_p(obj->parent) ||	  mime_typep(obj->parent, (MimeObjectClass *) &mimeEncryptedClass)));  data->parent_is_encrypted_p =	(obj->parent && MimeEncryptedCMS_encrypted_p (obj->parent));  /* If the parent of this object is a crypto-blob, then it's the grandparent	 who would have written out the headers and prepared for a stamp...	 (This shit sucks.)   */  if (data->parent_is_encrypted_p &&	  !data->parent_holds_stamp_p &&	  obj->parent && obj->parent->parent)	data->parent_holds_stamp_p =	  mime_crypto_stamped_p (obj->parent->parent);#endif  return data;}