/*	
 *	clipcode.h
 *
 *	文字コード処理
 *
 *	CLiP - Common Library for P/ECE
 *	Copyright (C) 2001-2007 Naoyuki Sawa
 *
 *	* Mon Feb 19 00:05:57 JST 2007 Naoyuki Sawa
 *	- 1st リリース。
 */
#ifndef __CLIP_CODE_H__
#define __CLIP_CODE_H__

/****************************************************************************
 *	Base64
 ****************************************************************************/

/* バイナリをBase64エンコードし、文字列に変換します。
 * [in]
 *	dst		文字列。(出力)
 *	dst_cap		dst[]の許容量。
 *	src		バイナリ。(入力)
 *	src_len		src[]の要素数。
 * [out]
 *	戻り値		文字列の長さ。
 *			終端のnul文字は、文字列の長さに含めません。
 * [note]
 *	* 出力文字列はnul終端されます。
 *	  ただし、戻り値はnul文字を含まないことに注意してください。
 *	  <例>
 *		[in]
 *			dst[]		unsigned char dst[100]
 *			dst_len		100
 *			src[]		{ 0x12,0x34 }
 *			src_len		2
 *		[out]
 *			dst[]		"EjQ=" // { 'E','j','Q','=','\0' }
 *			戻り値		4
 *		[note]
 *			戻り値は文字数の4ですが、出力はnul終端を含めて5バイトです。
 *			もし、dst_lenが5未満だったならば、アサートします。
 *	* 戻り値は、strlen(dst)に一致するので、あとで算出することもできます。
 *	  文字列の長さがすぐに必要なければ、戻り値を受け取らなくても構いません。
 */
int base64_encode(char* dst, int dst_cap, const void* src, int src_len);

/* 文字列をBase64デコードし、バイナリに変換します。
 * [in]
 *	dst		バイナリ。(出力)
 *	dst_cap		dst[]の許容量。
 *	src		文字列。(入力)
 * [out]
 *	戻り値		バイナリの長さ。
 * [note]
 *	* 出力バイナリはnul終端されません。
 *	  出力バイナリそれ自身が、有意な値「0」を含む可能性があるからです。
 *	  <例>
 *		[in]
 *			dst[]		unsigned char dst[100]
 *			dst_len		100
 *			src[]		"EjQ=" // { 'E','j','Q','=','\0' }
 *		[out]
 *			dst[]		{ 0x12,0x34 }
 *			戻り値		2
 *		[note]
 *			もし、dst_lenが2未満だったならば、アサートします。
 *	* 出力バイナリの長さを、あとで算出することはできません。
 *	  base64_encode()の場合と違って、必ず、戻り値を受け取ってください。
 */
int base64_decode(void* _dst, int dst_cap, const char* src);

#endif /*__CLIP_CODE_H__*/
