fixup! Add GBase64Encoder and Decoder

Review feedback.
This commit is contained in:
Matthias Clasen
2024-05-06 20:33:09 -04:00
parent 647a449711
commit 3611a5ace8
4 changed files with 18 additions and 14 deletions

View File

@@ -21,8 +21,8 @@
/**
* GBase64Decoder:
*
* `GBase64Decoder` is an implementation of `GConverter` that
* converts data from base64 encoding.
* `GBase64Decoder` is an implementation of [iface@Gio.Converter]
* that converts data from base64 encoding.
*
* Since: 2.82
*/
@@ -104,7 +104,7 @@ g_base64_decoder_class_init (GBase64DecoderClass *klass)
*
* Creates a new `GBase64Decoder`.
*
* Returns: a new `GBase64Decoder`
* Returns: (transfer full): a new `GBase64Decoder`
*
* Since: 2.82
*/

View File

@@ -20,14 +20,15 @@
#include "glibintl.h"
/* See g_base64_encode_step docs in ../glib/gbase64.c */
#define BASE64_ENCODING_OUTPUT_SIZE(len, break_lines) \
(((len) / 3 + 1) * 4 + 4 + ((break_lines) ? ((((len) / 3 + 1) * 4 + 4) / 72 + 1) : 0))
/**
* GBase64Encoder:
*
* GBase64Encoder is an implementation of `GConverter` that
* converts data to base64 encoding.
* `GBase64Encoder` is an implementation of [iface@Gio.Converter]
* that converts data to base64 encoding.
*
* Since: 2.82
*/
@@ -40,11 +41,10 @@ struct _GBase64Encoder
int state[2];
};
enum
typedef enum
{
PROP_0,
PROP_BREAK_LINES
};
PROP_BREAK_LINES = 1,
} GBase64EncoderProperty;
static void
g_base64_encoder_reset (GConverter *converter)
@@ -134,7 +134,7 @@ g_base64_encoder_set_property (GObject *object,
{
GBase64Encoder *encoder = G_BASE64_ENCODER (object);
switch (prop_id)
switch ((GBase64EncoderProperty) prop_id)
{
case PROP_BREAK_LINES:
encoder->break_lines = g_value_get_boolean (value);
@@ -154,7 +154,7 @@ g_base64_encoder_get_property (GObject *object,
{
GBase64Encoder *encoder = G_BASE64_ENCODER (object);
switch (prop_id)
switch ((GBase64EncoderProperty) prop_id)
{
case PROP_BREAK_LINES:
g_value_set_boolean (value, encoder->break_lines);
@@ -182,6 +182,8 @@ g_base64_encoder_class_init (GBase64EncoderClass *klass)
* This is typically used when putting base64-encoded data in emails.
* It breaks the lines at 72 columns instead of putting all of the text on
* the same line. This avoids problems with long lines in the email system.
*
* Since: 2.82
*/
g_object_class_install_property (gobject_class,
PROP_BREAK_LINES,
@@ -203,7 +205,7 @@ g_base64_encoder_class_init (GBase64EncoderClass *klass)
* instead of putting all of the text on the same line. This avoids
* problems with long lines in the email system.
*
* Returns: a new `GBase64Encoder`
* Returns: (transfer full): a new `GBase64Encoder`
*
* Since: 2.82
*/

View File

@@ -640,6 +640,8 @@ gio_headers = files(
'gappinfo.h',
'gasyncinitable.h',
'gasyncresult.h',
'gbase64decoder.h',
'gbase64encoder.h',
'gbufferedinputstream.h',
'gbufferedoutputstream.h',
'gbytesicon.h',

View File

@@ -1217,8 +1217,8 @@ test_converter_base64 (void)
flags = G_OUTPUT_STREAM_SPLICE_CLOSE_SOURCE | G_OUTPUT_STREAM_SPLICE_CLOSE_TARGET;
size = g_output_stream_splice (converter, input, flags, NULL, &error);
g_assert_true (size != -1);
g_assert_no_error (error);
g_assert_cmpint (size, !=, -1);
result = g_memory_output_stream_steal_data (G_MEMORY_OUTPUT_STREAM (output));
g_assert_cmpstr (encoded, ==, result);
@@ -1237,8 +1237,8 @@ test_converter_base64 (void)
flags = G_OUTPUT_STREAM_SPLICE_CLOSE_SOURCE | G_OUTPUT_STREAM_SPLICE_CLOSE_TARGET;
size = g_output_stream_splice (output, converter2, flags, NULL, &error);
g_assert_true (size != -1);
g_assert_no_error (error);
g_assert_cmpint (size, !=, -1);
result = g_memory_output_stream_steal_data (G_MEMORY_OUTPUT_STREAM (output));