diff options
author | Neal H. Walfield <[email protected]> | 2015-03-13 12:42:00 +0000 |
---|---|---|
committer | Neal H. Walfield <[email protected]> | 2015-03-23 18:58:27 +0000 |
commit | 63552852bf191985b4b55aa524bc397c5b1d1515 (patch) | |
tree | eac05933fc60983e828b3221e9e0308b05fe4f56 /dirmngr/misc.c | |
parent | Add new LDAP utility functions. (diff) | |
download | gnupg-63552852bf191985b4b55aa524bc397c5b1d1515.tar.gz gnupg-63552852bf191985b4b55aa524bc397c5b1d1515.zip |
Move armor_data to misc.c.
* dirmngr/ks-engine-hkp.c (armor_data): Move function from here...
* dirmngr/misc.c (armor_data): ... to here and drop static qualifier.
* dirmngr/misc.h: New declaration.
--
Signed-off-by: Neal H. Walfield <[email protected]>
Diffstat (limited to 'dirmngr/misc.c')
-rw-r--r-- | dirmngr/misc.c | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/dirmngr/misc.c b/dirmngr/misc.c index 25652a252..53d0099d2 100644 --- a/dirmngr/misc.c +++ b/dirmngr/misc.c @@ -562,3 +562,60 @@ create_estream_ksba_reader (ksba_reader_t *r_reader, estream_t fp) *r_reader = reader; return 0; } + +gpg_error_t +armor_data (char **r_string, const void *data, size_t datalen) +{ + gpg_error_t err; + struct b64state b64state; + estream_t fp; + long length; + char *buffer; + size_t nread; + + *r_string = NULL; + + fp = es_fopenmem (0, "rw,samethread"); + if (!fp) + return gpg_error_from_syserror (); + + if ((err=b64enc_start_es (&b64state, fp, "PGP PUBLIC KEY BLOCK")) + || (err=b64enc_write (&b64state, data, datalen)) + || (err = b64enc_finish (&b64state))) + { + es_fclose (fp); + return err; + } + + /* FIXME: To avoid the extra buffer allocation estream should + provide a function to snatch the internal allocated memory from + such a memory stream. */ + length = es_ftell (fp); + if (length < 0) + { + err = gpg_error_from_syserror (); + es_fclose (fp); + return err; + } + + buffer = xtrymalloc (length+1); + if (!buffer) + { + err = gpg_error_from_syserror (); + es_fclose (fp); + return err; + } + + es_rewind (fp); + if (es_read (fp, buffer, length, &nread)) + { + err = gpg_error_from_syserror (); + es_fclose (fp); + return err; + } + buffer[nread] = 0; + es_fclose (fp); + + *r_string = buffer; + return 0; +} |