X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=glib%2Fgbase64.c;h=a6cbea459bca7368383ef476461360fe4d09ed21;hb=49b59e5ac4428a6a99a85d699c3662f96efc4e9d;hp=5839936bdf822db2b172695cbac9bc247caaaa15;hpb=3691194b357aa5a045f8f87658150670834f45c2;p=platform%2Fupstream%2Fglib.git diff --git a/glib/gbase64.c b/glib/gbase64.c index 5839936..a6cbea4 100644 --- a/glib/gbase64.c +++ b/glib/gbase64.c @@ -14,9 +14,7 @@ * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. + * License along with this library; if not, see . * * This is based on code in camel, written by: * Michael Zucchi @@ -39,9 +37,11 @@ * * Base64 is an encoding that allows a sequence of arbitrary bytes to be * encoded as a sequence of printable ASCII characters. For the definition - * of Base64, see RFC - * 1421 or RFC - * 2045. Base64 is most commonly used as a MIME transfer encoding + * of Base64, see + * [RFC 1421](http://www.ietf.org/rfc/rfc1421.txt) + * or + * [RFC 2045](http://www.ietf.org/rfc/rfc2045.txt). + * Base64 is most commonly used as a MIME transfer encoding * for email. * * GLib supports incremental encoding using g_base64_encode_step() and @@ -81,11 +81,11 @@ static const char base64_alphabet[] = * @break_lines 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. - * Note however that it breaks the lines with LF - * characters, not CR LF sequences, so the result cannot - * be passed directly to SMTP or certain other protocols. + * Note however that it breaks the lines with `LF` characters, not + * `CR LF` sequences, so the result cannot be passed directly to SMTP + * or certain other protocols. * - * Return value: The number of bytes of output that was written + * Returns: The number of bytes of output that was written * * Since: 2.12 */ @@ -192,7 +192,7 @@ g_base64_encode_step (const guchar *in, * be written to it. It will need up to 4 bytes, or up to 5 bytes if * line-breaking is enabled. * - * Return value: The number of bytes of output that was written + * Returns: The number of bytes of output that was written * * Since: 2.12 */ @@ -244,7 +244,7 @@ g_base64_encode_close (gboolean break_lines, * Encode a sequence of binary data into its Base-64 stringified * representation. * - * Return value: (transfer full): a newly allocated, zero-terminated Base-64 + * Returns: (transfer full): a newly allocated, zero-terminated Base-64 * encoded string representing @data. The returned string must * be freed with g_free(). * @@ -311,7 +311,7 @@ static const unsigned char mime_base64_rank[256] = { * at least: (@len / 4) * 3 + 3 bytes (+ 3 may be needed in case of non-zero * state). * - * Return value: The number of bytes of output that was written + * Returns: The number of bytes of output that was written * * Since: 2.12 **/ @@ -344,8 +344,18 @@ g_base64_decode_step (const gchar *in, /* convert 4 base64 bytes to 3 normal bytes */ v=*save; i=*state; - inptr = (const guchar *)in; + last[0] = last[1] = 0; + + /* we use the sign in the state to determine if we got a padding character + in the previous sequence */ + if (i < 0) + { + i = -i; + last[0] = '='; + } + + inptr = (const guchar *)in; while (inptr < inend) { c = *inptr++; @@ -369,7 +379,7 @@ g_base64_decode_step (const gchar *in, } *save = v; - *state = i; + *state = last[0] == '=' ? -i : i; return outptr - out; } @@ -379,9 +389,11 @@ g_base64_decode_step (const gchar *in, * @text: zero-terminated string with base64 text to decode * @out_len: (out): The length of the decoded data is written here * - * Decode a sequence of Base-64 encoded text into binary data + * Decode a sequence of Base-64 encoded text into binary data. Note + * that the returned binary data is not necessarily zero-terminated, + * so it should not be used as a character string. * - * Return value: (transfer full) (array length=out_len) (element-type guint8): + * Returns: (transfer full) (array length=out_len) (element-type guint8): * newly allocated buffer containing the binary data * that @text represents. The returned buffer must * be freed with g_free(). @@ -403,7 +415,7 @@ g_base64_decode (const gchar *text, input_length = strlen (text); /* We can use a smaller limit here, since we know the saved state is 0, - +1 used to avoid calling g_malloc0(0), and hence retruning NULL */ + +1 used to avoid calling g_malloc0(0), and hence returning NULL */ ret = g_malloc0 ((input_length / 4) * 3 + 1); *out_len = g_base64_decode_step (text, input_length, ret, &state, &save); @@ -420,7 +432,7 @@ g_base64_decode (const gchar *text, * Decode a sequence of Base-64 encoded text into binary data * by overwriting the input data. * - * Return value: (transfer none): The binary data that @text responds. This pointer + * Returns: (transfer none): The binary data that @text responds. This pointer * is the same as the input @text. * * Since: 2.20