Exemple #1
0
/* Create a new data buffer filled with SIZE bytes starting from
   BUFFER.  If COPY is zero, copying is delayed until necessary, and
   the data is taken from the original location when needed.  */
gpgme_error_t
gpgme_data_new_from_mem (gpgme_data_t *r_dh, const char *buffer,
			 size_t size, int copy)
{
  gpgme_error_t err;
  TRACE_BEG4 (DEBUG_DATA, "gpgme_data_new_from_mem", r_dh,
	      "buffer=%p, size=%u, copy=%i (%s)", buffer, size,
	      copy, copy ? "yes" : "no");

  err = _gpgme_data_new (r_dh, &mem_cbs);
  if (err)
    return TRACE_ERR (err);

  if (copy)
    {
      char *bufcpy = malloc (size);
      if (!bufcpy)
	{
	  int saved_err = gpg_error_from_syserror ();
	  _gpgme_data_release (*r_dh);
	  return TRACE_ERR (saved_err);
	}
      memcpy (bufcpy, buffer, size);
      (*r_dh)->data.mem.buffer = bufcpy;
    }
  else
    (*r_dh)->data.mem.orig_buffer = buffer;

  (*r_dh)->data.mem.size = size;
  (*r_dh)->data.mem.length = size;
  return TRACE_SUC1 ("dh=%p", *r_dh);
}
Exemple #2
0
/* Release the data object with the handle DH.  */
void
gpgme_data_release(gpgme_data_t dh)
{
    if(!dh)
        return;

    if(dh->cbs->release)
        (*dh->cbs->release)(dh);
    _gpgme_data_release(dh);
}
Exemple #3
0
/* Release the data object with the handle DH.  */
void
gpgme_data_release (gpgme_data_t dh)
{
  TRACE (DEBUG_DATA, "gpgme_data_release", dh);

  if (!dh)
    return;

  if (dh->cbs->release)
    (*dh->cbs->release) (dh);
  _gpgme_data_release (dh);
}