diff options
author | Neal H. Walfield <[email protected]> | 2016-03-02 14:35:39 +0000 |
---|---|---|
committer | Neal H. Walfield <[email protected]> | 2016-03-02 19:36:14 +0000 |
commit | 2fdb950471bd36f046672254ff26ca94797cc9f1 (patch) | |
tree | c1478b40cc3a8245828b3b8167f78368d013010a /g10/build-packet.c | |
parent | gpg: Add a new function for creating binary notations. (diff) | |
download | gnupg-2fdb950471bd36f046672254ff26ca94797cc9f1.tar.gz gnupg-2fdb950471bd36f046672254ff26ca94797cc9f1.zip |
gpg: Allow the caller to write the contents of a plaintext packet.
* g10/build-packet.c (do_plaintext): Change the semantics such that if
PT->BUF is NULL, it is the caller's responsibility to write the
content (and disable partial body length mode, if appropriate).
--
Signed-off-by: Neal H. Walfield <[email protected]>
Diffstat (limited to '')
-rw-r--r-- | g10/build-packet.c | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/g10/build-packet.c b/g10/build-packet.c index 623533f7c..40c466b9d 100644 --- a/g10/build-packet.c +++ b/g10/build-packet.c @@ -618,7 +618,12 @@ calc_plaintext( PKT_plaintext *pt ) after this much data has been read.) If PT->LEN is 0 and CTB indicates that this is a new format packet, then partial block mode is assumed to have been enabled on OUT. On success, partial block - mode is disabled. */ + mode is disabled. + + If PT->BUF is NULL, the the caller must write out the data. In + this case, if PT->LEN was 0, then partial body length mode was + enabled and the caller must disable it by calling + iobuf_set_partial_body_length_mode (out, 0). */ static int do_plaintext( IOBUF out, int ctb, PKT_plaintext *pt ) { @@ -637,13 +642,16 @@ do_plaintext( IOBUF out, int ctb, PKT_plaintext *pt ) if (rc) return rc; - nbytes = iobuf_copy (out, pt->buf); - if(ctb_new_format_p (ctb) && !pt->len) - /* Turn off partial body length mode. */ - iobuf_set_partial_body_length_mode (out, 0); - if( pt->len && nbytes != pt->len ) - log_error("do_plaintext(): wrote %lu bytes but expected %lu bytes\n", - (ulong)nbytes, (ulong)pt->len ); + if (pt->buf) + { + nbytes = iobuf_copy (out, pt->buf); + if(ctb_new_format_p (ctb) && !pt->len) + /* Turn off partial body length mode. */ + iobuf_set_partial_body_length_mode (out, 0); + if( pt->len && nbytes != pt->len ) + log_error("do_plaintext(): wrote %lu bytes but expected %lu bytes\n", + (ulong)nbytes, (ulong)pt->len ); + } return rc; } |