Lib/buffer.h File Reference

Buffer型サポートヘッダ. More...

#include "tools.h"
Include dependency graph for buffer.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  Buffer

Defines

#define BUFFER_FACT   (1.3)
 Buffer 変数の領域確保のための領域確保倍率.
#define make_Buffer_bystr(str)   set_Buffer((void*)(str), -1)
 set_Buffer()
#define make_Buffer_bybin(str, len)   set_Buffer((void*)(str), (len))
 set_Buffer()
#define make_Buffer_byrandomstr(sz)   make_Buffer_randomstr(sz)
 make_Buffer_randomstr()
#define make_Buffer_str(str)   set_Buffer((void*)(str), -1)
 set_Buffer()
#define make_Buffer_bin(str, len)   set_Buffer((void*)(str), (len))
 set_Buffer()
#define make_Buffer_randomstr(sz)   make_Buffer_randomstr(sz)
 make_Buffer_randomstr()
#define copy_s2Buffer(src, dst)   copy_b2Buffer((void*)(src), (dst), (int)strlen((char*)(src)))
 copy_b2Buffer()
#define cat_s2Buffer(src, dst)   cat_b2Buffer( (void*)(src), (dst), (int)strlen((char*)(src)))
 cat_b2Buffer()
#define ins_s2Buffer(src, dst)   ins_b2Buffer( (void*)(src), (dst), (int)strlen((char*)(src)))
 cat_b2Buffer()
#define strcmp_Buffer(a, b)   cmp_Buffer((a), (b), 0)
 cmp_Buffer()
#define strncmp_Buffer(a, b, n)   cmp_Buffer((a), (b), (n))
 cmp_Buffer()
#define bincmp_Buffer(a, b)   cmp_Buffer((a), (b), 0)
 cmp_Buffer()
#define binncmp_Buffer(a, b, n)   cmp_Buffer((a), (b), (n))
 cmp_Buffer()
#define erase_Buffer(b, f)   erase_bBuffer((b), (char*)((f).buf), (f).vldsz)
 erase_bBuffer()
#define erase_sBuffer(b, f)   erase_bBuffer((b), (char*)(f), strlen(f))
 erase_bBuffer()
#define replace_sBuffer_str(buf, f, t)   replace_sBuffer_bystr((buf), (f), (t))
 replace_sBuffer()
#define replace_sBuffer(buf, f, t)   replace_sBuffer_bystr((buf), (f), (t))
 replace_sBuffer()
#define rewrite_sBuffer_str(b, f, t)   rewrite_sBuffer_bystr((b), (f), (t))
 rewrite_sBuffer_bystr()
#define rewrite_sBuffer(b, f, t)   rewrite_sBuffer_bystr((b), (f), (t))
 rewrite_sBuffer_bystr()
#define rewrite_sBuffer_file(f, fr, to)   replace_sBuffer_file((f), (fr), (to))
 replace_sBuffer_file()

Functions

Buffernew_Buffer (int sz)
 空のBuffer型変数を生成する.
Buffer init_Buffer (void)
 初期化したBuffer型変数を返す.
Buffer make_Buffer (int sz)
 Buffer型変数のバッファ部をつくり出す..
Buffer make_Buffer_bychar (unsigned char cc)
 文字から,Buffer型変数のバッファ部をつくり出す.
Buffer make_Buffer_randomstr (int sz)
 ランダムな n文字から,Buffer型変数のバッファ部をつくり出す.
Buffer set_Buffer (void *buf, int sz)
 Buffer型変数のバッファ部を新しく作り, そのバッファに bufをコピーする..
Buffer dup_Buffer (Buffer buf)
 Buffer型変数のコピーをつくる..
Buffer rept_Buffer (unsigned char cc, int n)
 文字 ccを n回繰り返したBuffer型データを返す.
void expand_Buffer (Buffer *buf, int len)
 buf のデータ部を lenに拡張した新しい Buffer を返す.
void del_Buffer (Buffer **buf)
 new_Buffer()で作り出した Buffer型変数を削除する.
void free_Buffer (Buffer *buf)
 Buffer型変数のバッファ部を解放する.
void clear_Buffer (Buffer *buf)
 Buffer型変数 のバッファ部を 0クリアする..
int copy_Buffer (Buffer *src, Buffer *dst)
 Buffer型変数 srcから dstへバッファをコピーする..
int cat_Buffer (Buffer *src, Buffer *dst)
 Buffer変数 srcから dstへバッファを catする..
int ins_Buffer (Buffer *src, Buffer *dst)
 Buffer変数 dst の前に srcを挿入する..
int copy_b2Buffer (void *src, Buffer *dst, int sz)
 任意のバイナリデータsrcを Buffer型変数dstへ lenバイト copyする
int cat_b2Buffer (void *src, Buffer *dst, int sz)
 任意のバイナリデータsrcを Buffer型変数dstへ lenバイト catする.
int ins_b2Buffer (void *src, Buffer *dst, int sz)
 任意のバイナリデータsrcを Buffer型変数dstの前に lenバイト挿入する
int copy_i2Buffer (int src, Buffer *dst)
 整数 srcを文字列に変換して,dstへ copyする.
int cat_i2Buffer (int src, Buffer *dst)
 整数 srcを文字列に変換して,dstへ catする.
int ins_i2Buffer (int src, Buffer *dst)
 整数 srcを文字列に変換して,dstの前に 挿入する.
void kanji_convert_Buffer (Buffer *mesg)
 大域変数 KanjiCode (tools.h) に従って漢字コードを変換する.

Buffer encode_base64_Buffer (Buffer buf)
 バイナリデータ buf.bufの buf.vldszバイトを Base64にエンコード する
Buffer decode_base64_Buffer (Buffer buf)
 strのバッファを Base64からデコードする
Buffer encode_base64_filename_Buffer (Buffer buf)
 バイナリデータ bufを Base64で encodeしてファイル名を作る.ただし '/' は '$' として扱う.
Buffer decode_base64_filename_Buffer (Buffer buf)
 bufを Base64で decodeしてバイナリデータを取り出す.ただし '$' は '/' として扱う.
Buffer get_line_Buffer (Buffer buf, int n)
 複数行の文字列バッファから任意の行を取り出す.
Buffer get_seq_data_Buffer (Buffer str, int *ptr)
 複数行の文字列バッファ内の行データをシーケンシャルに取り出す.
Buffer awk_Buffer (Buffer buf, char cc, int n)
 Buffer文字列に対する awk..
Buffer cawk_Buffer (Buffer buf, char cc, int n)
 Buffer文字列に対する(変形の)awk..
Buffer pack_Buffer (Buffer buf, char cc)
 文字列の先頭のcc(複数),終わりのcc(複数),TAB, CR, LF を削除
int cmp_Buffer (Buffer src, Buffer dst, int n)
 バッファ部の比較.
void chomp_Buffer (Buffer *buf)
 最初の改行コード以降を無視する.
int isText_Buffer (Buffer buf)
 Buffer型変数 bufのバッファ部がテキストかどうか検査する..
Buffer dump_Buffer (Buffer buf)
 Buffer型変数のデバッグ用 16進を Buffer型変数に出力する..
int recalc_strlen_Buffer (Buffer *buf)
 Buffer型変数のデータ部を文字列と見なして,その長さを返す..
Buffer randstr_Buffer (int n)
 英数字を n個生成
Buffer randbit_Buffer (int n)
 ビットを n個生成
int fgets_Buffer (Buffer *str, FILE *fp)
 拡張fgets.文字列の読み込みに使用する.改行コードは削除する
int read_lines_Buffer (Buffer *str, FILE *fp)
 複数文字列行の読み込み.文字列の読み込みに使用する
Buffer read_Buffer_file (const char *fn)
 ファイル fn の内容を Buffer型変数に読み込む.
Buffer read_Buffer_data (FILE *fp, int sz)
 ファイルポインタ fp から szバイトをBuffer型変数に読み込む.
int save_Buffer_file (Buffer buf, char *fn)
 ファイル fn へ Buffer型変数の buf部を書き込む
Buffer erase_bBuffer (Buffer buf, char *bin, int len)
 buf.buf 中にある bin のデータ(各1Byte,順不同)を削除する.
Buffer replace_sBuffer_bystr (Buffer buf, const char *frm, const char *tos)
 buf.buf中の文字列 frmを tosで置き換えた 新しい Bufferを返す
int replace_sBuffer_file (char *fn, Buffer frm, Buffer tos)
 テキストファイル中の frm の文字列を tos に書き換える
void rewrite_sBuffer_bystr (Buffer *buf, const char *frm, const char *tos)
 buf.buf自体を書き換えること以外は replace_sBuffer_bystr() と同じ
int save_Buffer_fp (Buffer, FILE *)
 ファイル fp へ Buffer型変数の buf部を書き込む
Buffer read_Buffer_fp (FILE *)
 ファイル fp から Buffer型変数の buf部を読み込む
int save_Buffer2_fp (Buffer key, Buffer buf, FILE *fp)
 ファイル fp へ 2つのBuffer型変数 keyと bufを書き込む
int read_Buffer2_fp (Buffer *key, Buffer *buf, FILE *fp)
 ファイル fp から 2つのBuffer型変数の keyと bufを読み込む.
char pop_char_ringStack (Buffer *buf)
 簡易 char型 ringStack POP
void push_char_ringStack (Buffer *buf, char cc)
 簡易 char型 ringStack PUSH

Detailed Description

Version:
1.3
Author:
Fumi.Iseki (C)
Date:
2012 7/23
See also:
Buffer

Definition in file buffer.h.


Define Documentation

#define bincmp_Buffer ( a,
 )     cmp_Buffer((a), (b), 0)

Definition at line 147 of file buffer.h.

Referenced by check_server_spki().

#define binncmp_Buffer ( a,
b,
 )     cmp_Buffer((a), (b), (n))

Definition at line 148 of file buffer.h.

#define BUFFER_FACT   (1.3)

Definition at line 46 of file buffer.h.

Referenced by cat_b2Buffer(), cat_Buffer(), copy_b2Buffer(), copy_Buffer(), and replace_sBuffer_bystr().

#define cat_s2Buffer ( src,
dst   )     cat_b2Buffer( (void*)(src), (dst), (int)strlen((char*)(src)))

char*変数 srcから Buffer型変数dstへ文字列を catする.
もし, dstに srcの文字列を catするだけのスペースが無い場合は新たにバッファ領域を確保して catする.

Parameters:
src cat元へのポインタ.
dst cat先へのポインタ.
Return values:
0 srcまたは dstが NULL
-1 メモリの確保に失敗した.何も実行されなかった.
1以上 dstのバッファにコピーされた文字数.

Definition at line 122 of file buffer.h.

Referenced by _json_to_Buffer(), add_form_urlenc(), append_xml_content(), bvh_parse_hierarchy(), change_file_extension_Buffer(), check_auth(), check_ldap_passwd(), command_KEYEX(), command_USERID(), comp_url(), decomp_url(), encode_mime_string(), get_Buffer_join_tList(), get_dir_files(), http_proxy_header_analyze(), insert_sip_via(), join_Buffer_dim(), json_parse_seq(), llsd_xml_contain_key(), llsd_xml_get_content_bin(), llsd_xml_get_content_int(), llsd_xml_get_content_real(), llsd_xml_get_content_str(), make_form_urlenc(), make_xml_attr_bydouble(), make_xml_attr_byfloat(), make_xml_attr_byint(), make_xml_attr_bystr(), open_ldap_connection(), replace_sBuffer_bystr(), replace_sip_contact_dstipport(), restore_protocol_header(), search_protocol_header(), send_algor_recv_spki(), send_command_recv_ans(), set_http_host_header(), ssl_send_sBufferln(), ssl_tcp_send_sBufferln(), tcp_send_sBufferln(), xml_attr_to_Buffer(), xml_close_node_Buffer(), and xml_open_node_Buffer().

#define copy_s2Buffer ( src,
dst   )     copy_b2Buffer((void*)(src), (dst), (int)strlen((char*)(src)))

char*変数 srcから Buffer型変数dstへ文字列を copyする.
もし, dstに srcをコピーするだけのスペースが無い場合は, 新たにバッファ領域を確保してコピーする.

Parameters:
src コピー元へのポインタ.
dst コピー先へのポインタ.
Return values:
0 srcまたは dstが NULL
-1 メモリの確保に失敗した.何も実行されなかった.
1以上 dstのバッファにコピーされた文字数.

Definition at line 108 of file buffer.h.

Referenced by check_auth(), command_USERID(), comp_url(), decomp_url(), encode_base64_Buffer(), encode_mime_string(), fgets_mstream_Buffer(), get_protocol_header_list_seq(), insert_sip_via(), json_set_str_val(), replace_all_node_byid_rcsv(), replace_all_node_contents_rcsv(), replace_sip_contact_dstipport(), send_command_recv_ans(), send_http_file(), send_https_file(), set_http_host_header(), set_xml_content(), set_xml_content_list(), set_xml_node(), ssl_recv_mstream_Buffer(), ssl_tcp_recv_mstream_Buffer(), and tcp_recv_mstream_Buffer().

#define erase_Buffer ( b,
 )     erase_bBuffer((b), (char*)((f).buf), (f).vldsz)

Definition at line 165 of file buffer.h.

#define erase_sBuffer ( b,
 )     erase_bBuffer((b), (char*)(f), strlen(f))

Definition at line 166 of file buffer.h.

Referenced by check_ldap_passwd(), and read_ldap_config().

#define ins_s2Buffer ( src,
dst   )     ins_b2Buffer( (void*)(src), (dst), (int)strlen((char*)(src)))

Definition at line 123 of file buffer.h.

Referenced by check_ldap_passwd().

#define make_Buffer_bin ( str,
len   )     set_Buffer((void*)(str), (len))

Definition at line 65 of file buffer.h.

#define make_Buffer_bybin ( str,
len   )     set_Buffer((void*)(str), (len))

Definition at line 61 of file buffer.h.

#define make_Buffer_byrandomstr ( sz   )     make_Buffer_randomstr(sz)

Definition at line 62 of file buffer.h.

#define make_Buffer_bystr ( str   )     set_Buffer((void*)(str), -1)

文字列から,Buffer型変数のバッファ部をつくり出す.
make_Buffer_bystr("") は Buffer変数の初期化にも使用される. バイナリデータから Buffer変数を作り出すには,set_Buffer()を用いる.
バッファ部の作成に失敗した場合, バッファのサイズ(bufsz)は 0, バッファへのポインタは NULLとなる.

Parameters:
str Buffer型変数のバッファに格納する文字列
Returns:
作り出した Buffer型変数.
See also:
set_Buffer()

Definition at line 60 of file buffer.h.

Referenced by add_resource_list(), awk_tList(), buffer_key_value_tList(), cawk_tList(), check_auth(), check_ldap_passwd(), command_USERID(), comp_hostport(), decomp_url(), get_crypt_message(), get_dir_files(), get_plain_message(), get_sip_domain(), get_str_param_tList(), get_xml_double_attr(), get_xml_double_attr_bystr(), get_xml_int_attr(), get_xml_int_attr_bystr(), json_array_parse(), llsd_bin_get_str(), llsd_xml_contain_key(), llsd_xml_get_content_bin(), llsd_xml_get_content_int(), llsd_xml_get_content_real(), llsd_xml_get_content_str(), make_tList_data_bystr(), make_xml_attr_bydouble(), make_xml_attr_byfloat(), make_xml_attr_byint(), make_xml_attr_bystr(), open_ldap_connection(), replace_all_tTree_node(), search_protocol_header_partvalue(), search_protocol_header_value(), send_algor_recv_spki(), set_item_tList_node(), set_max_forwards(), set_tList_node_bystr(), set_value_tList_node(), simple_check_ldap_passwd(), simple_web_proxy(), sql_open(), and tcp_send_crypt_mesg().

#define make_Buffer_randomstr ( sz   )     make_Buffer_randomstr(sz)

Definition at line 66 of file buffer.h.

#define make_Buffer_str ( str   )     set_Buffer((void*)(str), -1)
#define replace_sBuffer ( buf,
f,
 )     replace_sBuffer_bystr((buf), (f), (t))
#define replace_sBuffer_str ( buf,
f,
 )     replace_sBuffer_bystr((buf), (f), (t))

Definition at line 172 of file buffer.h.

#define rewrite_sBuffer ( b,
f,
 )     rewrite_sBuffer_bystr((b), (f), (t))

Definition at line 179 of file buffer.h.

#define rewrite_sBuffer_file ( f,
fr,
to   )     replace_sBuffer_file((f), (fr), (to))

Definition at line 180 of file buffer.h.

#define rewrite_sBuffer_str ( b,
f,
 )     rewrite_sBuffer_bystr((b), (f), (t))

Definition at line 178 of file buffer.h.

#define strcmp_Buffer ( a,
 )     cmp_Buffer((a), (b), 0)

Definition at line 145 of file buffer.h.

Referenced by read_spki_with_ipaddr().

#define strncmp_Buffer ( a,
b,
 )     cmp_Buffer((a), (b), (n))

Definition at line 146 of file buffer.h.


Function Documentation

Buffer awk_Buffer ( Buffer  str,
char  cc,
int  n 
)

Buffer awk_Buffer(Buffer str, char cc, int n)

Buffer文字列に対する awk.

ccを区切り記号として, strのバッファ内の n番目の項目を返す.

Parameters:
str 操作対象文字列.
cc 区切り文字.
n 項目の指定.1から数える.
Returns:
指定された n番目の項目の文字列(Buffer型).
See also:
cawk_Buffer(), awk(), cawk()

Definition at line 999 of file buffer.c.

References Buffer::buf, init_Buffer(), make_Buffer(), and Buffer::vldsz.

Referenced by awk_Buffer_tList(), decomp_url(), and read_index_tList_fp().

01000 {
01001     int i, j, pos, cnt;
01002     unsigned char* buf = str.buf;
01003     Buffer item = init_Buffer();
01004 
01005     if (buf==NULL) return item;
01006     if (n<=0) n = 1;
01007 
01008     for(i=0,j=0; j<n-1; j++) {
01009         while (buf[i]!='\0' && buf[i]!=cc) i++;
01010         if (buf[i]==cc) i++;
01011     }
01012     if (buf[i]=='\0') return item;
01013 
01014     pos = i;
01015     while (buf[i]!='\0' && buf[i]!=cc) i++;
01016     cnt = i - pos;
01017 
01018     item = make_Buffer(cnt);
01019     if (item.buf==NULL) return item;
01020 
01021     for (i=0; i<cnt; i++) item.buf[i] = buf[pos+i];
01022     item.vldsz = (int)strlen((const char*)item.buf);
01023 
01024     return item;
01025 }

Here is the call graph for this function:

Here is the caller graph for this function:

int cat_b2Buffer ( void *  src,
Buffer dst,
int  len 
)

int cat_b2Buffer(void* src, Buffer* dst, int len)

任意のバイナリデータsrcを Buffer型変数dstへ lenバイト catする.

もし, dstに srcのバッファを catするだけのスペースが無い場合は新たにバッファ領域を確保して catする.
lenが 0未満の場合は, srcは文字列として扱われる.

Parameters:
src cat元の任意データへのポインタ.
dst cat先のBuffer型変数へのポインタ.
len catするバイト数.
Return values:
0以上 dstのバッファにコピーされた文字数.
JBXL_NULL_EEROR srcまたは dstが NULL
JBXL_MALLOC_ERROR メモリの確保に失敗した.何も実行されなかった.
Attention:
注(重要): 関数内で使用する場合,参照型以外の引数に対してこの関数を用いてはいけない. つまり以下のような使い方は間違い.
    func(Buffer buf){ 
        ...............
        cat_b2Buffer(&src, &buf, n);
        ...............
    }
これは下記のように変更する.
    func(Buffer* buf){ 
        ...............
        cat_b2Buffer(&src, buf, n);
        ...............
    }
理由:関数内でバッファ部の大きさが変わる可能性があるが, func を呼び出した側ではそのことを知ることができない.

Definition at line 598 of file buffer.c.

References Buffer::buf, BUFFER_FACT, Buffer::bufsz, free_Buffer(), JBXL_MALLOC_ERROR, JBXL_NULL_ERROR, Buffer::state, and Buffer::vldsz.

Referenced by _json_parse_term(), cat_i2Buffer(), deflate2gzip(), get_Buffer_ringBuffer(), send_http_file(), and send_https_file().

00599 {
00600     int sz, dz;
00601 
00602     if (src==NULL || dst==NULL) return JBXL_NULL_ERROR;
00603     if (len<0) sz = (int)strlen((const char*)src);
00604     else       sz = len;
00605     if (sz<=0) return 0;
00606    
00607     dz = dst->vldsz;
00608     if (dz<0) {
00609         if (dst->buf!=NULL) dz = (int)strlen((const char*)dst->buf);
00610         else                dz = 0;
00611     }
00612 
00613     if (dst->bufsz < sz+dz) {
00614         Buffer buf;
00615         buf.state = dst->state;
00616         buf.bufsz = (int)((dst->bufsz+sz+1)*BUFFER_FACT);
00617         buf.vldsz = dz;
00618         buf.buf   = (unsigned char*)malloc(buf.bufsz+1);
00619         if (buf.buf==NULL) return JBXL_MALLOC_ERROR;
00620     
00621         memcpy(buf.buf, dst->buf, dz);
00622         buf.buf[dz] = '\0';
00623         free_Buffer(dst);
00624         *dst = buf;    
00625     }
00626 
00627     memcpy(dst->buf+dz, src, sz);
00628     dst->buf[dz+sz] = '\0';
00629     dst->vldsz = sz + dz;
00630 
00631     return  dst->vldsz;
00632 }

Here is the call graph for this function:

Here is the caller graph for this function:

int cat_Buffer ( Buffer src,
Buffer dst 
)

int cat_Buffer(Buffer* src, Buffer* dst)

Buffer変数 srcから dstへバッファを catする.

もし, dstに srcの バッファを catするだけのスペースが無い場合は 新たにバッファ領域を確保して catする.

Parameters:
src cat元へのポインタ.
dst cat先へのポインタ.
Return values:
0以上 dstのバッファにコピーされた文字数.
JBXL_NULL_EEROR srcまたは dstが NULL
JBXL_MALLOC_ERROR メモリの確保に失敗した.何も実行されなかった.
Attention:
注(重要): 関数内で使用する場合,参照型以外の引数に対してこの関数を用いてはいけない. つまり以下のような使い方は間違い.
    func(Buffer buf){ 
        ...............
        cat_Buffer(&src, &buf);
        ...............
    }
これは下記のように変更する.
    func(Buffer* buf){ 
        ...............
        cat_Buffer(&src, buf);
        ...............
    }
理由:関数内でバッファ部の大きさが変わる可能性があるが, 呼び出した側ではそのことを知ることができない.

Definition at line 396 of file buffer.c.

References Buffer::buf, BUFFER_FACT, Buffer::bufsz, free_Buffer(), JBXL_MALLOC_ERROR, JBXL_NULL_ERROR, Buffer::state, and Buffer::vldsz.

Referenced by _json_to_Buffer(), check_auth(), check_ldap_passwd(), decomp_url(), gz_decode_data(), http_proxy_header_analyze(), ins_b2Buffer(), ins_Buffer(), join_Buffer_dim(), open_ldap_connection(), read_lines_Buffer(), rebuild_http_Buffer(), recv_http_chunked(), recv_http_chunked_remain(), recv_http_closed(), recv_http_content(), recv_https_chunked(), recv_https_chunked_remain(), recv_https_closed(), recv_https_content(), recv_mesg_until_end(), restore_protocol_contents(), restore_protocol_header(), search_protocol_header(), ssl_recv_lines_Buffer(), ssl_tcp_recv_Buffer_tosize(), ssl_tcp_recv_Buffer_tosize_wait(), ssl_tcp_recv_lines_Buffer(), tcp_recv_Buffer_tosize(), tcp_recv_Buffer_tosize_wait(), tcp_recv_lines_Buffer(), xml_attr_to_Buffer(), xml_close_node_Buffer(), and xml_open_node_Buffer().

00397 {
00398     int sz, dz;
00399 
00400     if (src==NULL || dst==NULL) return JBXL_NULL_ERROR;
00401     if (src->buf==NULL) return JBXL_NULL_ERROR;
00402 
00403     sz = src->vldsz;
00404     if (sz<0) sz = (int)strlen((const char*)src->buf);
00405     if (sz==0) return 0;
00406 
00407     dz = dst->vldsz;
00408     if (dz<0) {
00409         if (dst->buf!=NULL) dz = (int)strlen((const char*)dst->buf);
00410         else                dz = 0;
00411     }
00412 
00413     if (dst->bufsz < sz+dz) {
00414         Buffer buf;
00415         buf.state = dst->state;
00416         buf.bufsz = (int)((dst->bufsz+sz+1)*BUFFER_FACT);
00417         buf.vldsz = dz;
00418         buf.buf   = (unsigned char*)malloc(buf.bufsz+1);
00419         if (buf.buf==NULL) return JBXL_MALLOC_ERROR;
00420    
00421         memcpy(buf.buf, dst->buf, dz);
00422         buf.buf[dz] = '\0';
00423         free_Buffer(dst);
00424         *dst = buf;
00425 /*
00426         Buffer buf;                 // dstの待避 
00427         buf.bufsz = dst->bufsz;
00428         buf.vldsz = dz;
00429         buf.buf   = (unsigned char*)malloc(buf.bufsz+1);
00430         if (buf.buf==NULL) return JBXL_MALLOC_ERROR; 
00431 
00432         buf.buf[buf.bufsz] = '\0';
00433         memcpy(buf.buf, dst->buf, buf.bufsz);
00434         free_Buffer(dst);
00435 
00436         //dst->bufsz = (int)((buf.bufsz+src->bufsz+1)*BUFFER_FACT);
00437         dst->bufsz = (int)((buf.bufsz+sz+1)*BUFFER_FACT);
00438         dst->buf   = (unsigned char*)malloc(dst->bufsz+1);
00439         if (dst->buf==NULL) {
00440                *dst = buf;
00441                return JBXL_MALLOC_ERROR;
00442         }
00443         memset(dst->buf, 0, dst->bufsz+1);
00444         memcpy(dst->buf, buf.buf, buf.vldsz);
00445         free_Buffer(&buf);
00446 */
00447     }
00448 
00449     //memset(dst->buf+dz, 0, dst->bufsz-dz+1);  too late
00450     memcpy(dst->buf+dz, src->buf, sz);
00451     dst->buf[dz+sz] = '\0';
00452     dst->vldsz = sz + dz;
00453 
00454     return  dst->vldsz;
00455 }

Here is the call graph for this function:

Here is the caller graph for this function:

int cat_i2Buffer ( int  src,
Buffer dst 
)

int cat_i2Buffer(int src, Buffer* dst)

整数 srcを文字列に変換して,dstへ catする.

Definition at line 694 of file buffer.c.

References cat_b2Buffer(), and LEN_INT.

Referenced by replace_sip_contact_dstipport().

00695 {
00696     char num[LEN_INT];
00697 
00698     snprintf(num, LEN_INT-1, "%d", src);
00699     return cat_b2Buffer((void*)num, dst, (int)strlen(num));
00700 }

Here is the call graph for this function:

Here is the caller graph for this function:

Buffer cawk_Buffer ( Buffer  str,
char  cc,
int  n 
)

Buffer cawk_Buffer(Buffer str, char cc, int n)

Buffer文字列に対する(変形の)awk.

ccを区切り記号として, strのバッファ内の n番目の項目を返す.
n は 1から数える.連続する cc(区切り)は一つの区切りとみなす.

Parameters:
str 操作対象文字列.
cc 区切り文字.
n 項目の指定.1から数える.
Returns:
指定された n番目の項目の文字列(Buffer型).
See also:
awk_Buffer(), awk(), cawk()

Definition at line 1044 of file buffer.c.

References Buffer::buf, init_Buffer(), make_Buffer(), and Buffer::vldsz.

Referenced by cawk_Buffer_tList(), del_sip_via(), get_command(), get_http_status_num(), get_http_version_num(), get_operand(), http_proxy_header_analyze(), and search_protocol_header_item().

01045 {
01046     int i, j, pos, cnt;
01047     unsigned char* buf = str.buf;
01048     Buffer item = init_Buffer();
01049 
01050     if (buf==NULL) return item;
01051     if (n<=0) n = 1;
01052 
01053     i = 0;
01054     for(j=0; j<n-1; j++) {
01055         while (buf[i]!='\0' && buf[i]!=cc) i++;
01056         while (buf[i]!='\0' && buf[i]==cc) i++;
01057     }
01058     if (buf[i]=='\0') return item;
01059 
01060     pos = i;
01061     while (buf[i]!='\0' && buf[i]!=cc) i++;
01062     cnt = i - pos;
01063 
01064     item = make_Buffer(cnt);
01065     if (item.buf==NULL) return item;
01066 
01067     for (i=0; i<cnt; i++) item.buf[i] = buf[pos+i];
01068     item.vldsz = (int)strlen((const char*)item.buf);
01069 
01070     return item;
01071 }

Here is the call graph for this function:

Here is the caller graph for this function:

void chomp_Buffer ( Buffer str  ) 

void chomp_Buffer(Buffer* str)

最初の改行コード以降を無視する.
最初の改行コードに場所に,'\0'が代入される.

Parameters:
[in,out] str 操作対象の文字列(Buffer型).

Definition at line 1283 of file buffer.c.

References Buffer::buf, CHAR_CR, CHAR_LF, and Buffer::vldsz.

Referenced by command_KEYEX(), and send_command_recv_ans().

01284 {
01285     int i, len;
01286     
01287     if (str->buf==NULL) return;
01288 
01289     len = (int)strlen((const char*)str->buf);
01290     for (i=0; i<len; i++) {
01291         if (str->buf[i]==CHAR_LF || str->buf[i]==CHAR_CR) {
01292             str->buf[i] = '\0';
01293             str->vldsz = (int)strlen((const char*)str->buf);
01294             return;
01295         }
01296     }
01297 }

Here is the caller graph for this function:

void clear_Buffer ( Buffer str  ) 

void clear_Buffer(Buffer* str)

Buffer型変数 のバッファ部を 0クリアする.

Parameters:
str クリアする Buffer型データへのポインタ.

Definition at line 283 of file buffer.c.

References Buffer::buf, Buffer::bufsz, JBXL_NORMAL, Buffer::state, and Buffer::vldsz.

Referenced by check_auth(), erase_bBuffer(), get_protocol_header_list_seq(), read_lines_Buffer(), recv_http_Buffer(), recv_http_chunked(), recv_https_Buffer(), recv_https_chunked(), recv_mesg_until_end(), ssl_recv_lines_Buffer(), ssl_recv_mstream_Buffer(), ssl_tcp_recv_lines_Buffer(), ssl_tcp_recv_mstream_Buffer(), tcp_recv_lines_Buffer(), and tcp_recv_mstream_Buffer().

00284 {
00285     if (str->buf!=NULL) memset(str->buf, 0, str->bufsz+1);
00286     str->vldsz = 0;
00287     str->state = JBXL_NORMAL;
00288 }

Here is the caller graph for this function:

int cmp_Buffer ( Buffer  src,
Buffer  dst,
int  n 
)

int cmp_Buffer(Buffer src, Buffer dst, int n)

バッファ部の比較.

Buffer変数 srcと dstのバッファ部分を比較する.
n<=0 なら 完全一致, n>0 なら 先頭から nバイト比較する.

Parameters:
src 比較元へのポインタ.
dst 比較先へのポインタ.
n 比較文字数.
Return values:
0 srcと dstは一致している.
1 srcは dstと一致していない.
JBXL_NULL_ERROR バッファが NULL
JBXL_BUFFER_CMP_ERROR n が vldsz より大きい
Attention:
文字列データのみ適用.コーディングがベタベタ.

Definition at line 738 of file buffer.c.

References Buffer::buf, JBXL_BUFFER_CMP_ERROR, JBXL_NULL_ERROR, and Buffer::vldsz.

00739 {
00740     int i;
00741 
00742     if (src.buf==NULL || dst.buf==NULL) return JBXL_NULL_ERROR;
00743     if (n>src.vldsz   || n>dst.vldsz)   return JBXL_BUFFER_CMP_ERROR;
00744     
00745     if (n<=0) {
00746         if (src.vldsz!=dst.vldsz) return 1;
00747         else n = src.vldsz;
00748     }
00749     
00750     for (i=0; i<n; i++) {
00751         if (src.buf[i]!=dst.buf[i]) return 1;
00752     }
00753     return 0;
00754 }

int copy_b2Buffer ( void *  src,
Buffer dst,
int  len 
)

int copy_b2Buffer(void* src, Buffer* dst, int len)

任意のバイナリデータsrcを Buffer型変数dstへ lenバイト copyする.

もし, dstに srcのバッファを copyするだけのスペースが無い場合は新たにバッファ領域を確保して copyする.
lenが 0未満の場合は, srcは文字列として扱われる.

Parameters:
src copy元の任意データへのポインタ.
dst copy先のBuffer型変数へのポインタ.
len copyするバイト数.
Return values:
0以上 dstのバッファにコピーされた文字数.
JBXL_NULL_EEROR srcまたは dstが NULL
JBXL_MALLOC_ERROR メモリの確保に失敗した.何も実行されなかった.
Attention:
注(重要): 関数内で使用する場合,参照型以外の引数に対してこの関数を用いてはいけない. つまり以下のような使い方は間違い.
    func(Buffer buf){ 
        ...............
        copy_b2Buffer(&src, &buf, n);
        ...............
    }
これは下記のように変更する.
    func(Buffer* buf){ 
        ...............
        copy_b2Buffer(&src, buf, n);
        ...............
    }
理由:関数内でバッファ部の大きさが変わる可能性があるが, func を呼び出した側ではそのことを知ることができない.

Definition at line 532 of file buffer.c.

References Buffer::buf, BUFFER_FACT, Buffer::bufsz, JBXL_MALLOC_ERROR, JBXL_NORMAL, JBXL_NULL_ERROR, Buffer::state, and Buffer::vldsz.

Referenced by copy_i2Buffer(), decode_base64_Buffer(), get_Buffer_ringBuffer(), ins_b2Buffer(), ssl_tcp_recv_Buffer_tosize(), ssl_tcp_recv_Buffer_tosize_wait(), tcp_recv_Buffer_tosize(), and tcp_recv_Buffer_tosize_wait().

00533 {
00534     int sz, dz;
00535 
00536     if (src==NULL || dst==NULL) return JBXL_NULL_ERROR;
00537     if (len<0) sz = (int)strlen((const char*)src);
00538     else       sz = len;
00539     if (sz<=0) return 0;
00540 
00541     if (dst->bufsz < sz) {
00542         unsigned char* buf;
00543         dz  = (int)((sz+1)*BUFFER_FACT);
00544         buf = (unsigned char*)malloc(dz+1);
00545         if (buf==NULL) return JBXL_MALLOC_ERROR;
00546         if (dst->buf!=NULL) free(dst->buf);
00547         dst->bufsz = dz;
00548         dst->buf   = buf;
00549     }
00550 
00551     memcpy(dst->buf, src, sz);
00552     dst->buf[sz] = '\0';
00553     dst->vldsz = sz;
00554     dst->state = JBXL_NORMAL;
00555 
00556     return  sz;
00557 }

Here is the caller graph for this function:

int copy_Buffer ( Buffer src,
Buffer dst 
)

int copy_Buffer(Buffer* src, Buffer* dst)

Buffer型変数 srcから dstへバッファをコピーする.

もし, dstに srcのバッファをコピーするだけのスペースが無い場合は, 新たにバッファ領域を確保してコピーする.

Parameters:
src コピー元へのポインタ.
dst コピー先へのポインタ.
Return values:
0以上 dstのバッファにコピーされた文字数.
JBXL_NULL_EEROR srcまたは dstが NULL
JBXL_MALLOC_ERROR メモリの確保に失敗した.何も実行されなかった.
Attention:
注(重要): 関数内で使用する場合,参照型以外の引数に対してこの関数を用いてはいけない. つまり以下のような使い方は間違い.
    func(Buffer buf){ 
        ...............
        copy_Buffer(&src, &buf);
        ...............
    }
これは下記のように変更する.
    func(Buffer* buf){ 
        ...............
        copy_Buffer(&src, buf);
        ...............
    }
理由:関数内でバッファ部の大きさが変わる可能性があるが, 呼び出した側ではそのことを知ることができない.

Definition at line 327 of file buffer.c.

References Buffer::buf, BUFFER_FACT, Buffer::bufsz, JBXL_MALLOC_ERROR, JBXL_NULL_ERROR, and Buffer::vldsz.

Referenced by check_ldap_passwd(), command_KEYEX(), command_USERID(), decomp_url(), erase_bBuffer(), expand_Buffer(), http_proxy_header_analyze(), ins_Buffer(), json_copy_data(), json_copy_val(), read_ldap_config(), read_lines_Buffer(), recv_http_Buffer(), recv_http_file(), recv_https_Buffer(), recv_https_file(), restore_protocol_header(), tcp_recv_crypt_Buffer(), udp_recv_crypt_Buffer(), and udp_recv_crypt_Buffer_sockaddr_in().

00328 {
00329     int sz, dz;
00330 
00331     if (src==NULL || dst==NULL) return JBXL_NULL_ERROR;
00332     if (src->buf==NULL) return JBXL_NULL_ERROR;
00333 
00334     sz = src->vldsz;
00335     if (sz<0)  sz = (int)strlen((const char*)src->buf);
00336     if (sz==0) return 0;
00337 
00338     if (dst->bufsz < sz) {
00339         unsigned char* buf;
00340         //dz  = (int)((src->bufsz+1)*BUFFER_FACT);
00341         dz  = (int)((sz+1)*BUFFER_FACT);
00342         buf = (unsigned char*)malloc(dz+1);
00343         if (buf==NULL) return JBXL_MALLOC_ERROR;
00344 
00345         free(dst->buf);
00346         dst->bufsz = dz;
00347         dst->buf   = buf;
00348     }
00349 
00350     //memset(dst->buf, 0, dst->bufsz+1);        too late
00351     memcpy(dst->buf, src->buf, sz);
00352     dst->buf[sz] = '\0';
00353     dst->vldsz = sz;
00354 
00355     return  sz;
00356 }

Here is the caller graph for this function:

int copy_i2Buffer ( int  src,
Buffer dst 
)

int copy_i2Buffer(int src, Buffer* dst)

整数 srcを文字列に変換して,dstへ copyする.

Definition at line 679 of file buffer.c.

References copy_b2Buffer(), and LEN_INT.

Referenced by rebuild_http_Buffer(), and replace_sdp_invite_addr().

00680 {
00681     char num[LEN_INT];
00682 
00683     snprintf(num, LEN_INT-1, "%d", src);
00684     return copy_b2Buffer((void*)num, dst, (int)strlen(num));
00685 }

Here is the call graph for this function:

Here is the caller graph for this function:

Buffer decode_base64_Buffer ( Buffer  str  ) 

Buffer decode_base64_Buffer(Buffer str)

strのバッファを Base64からデコードする.

変換は str.bufの先頭から順次行われる.A-Za-z0-9+/ 以外は無視する(例えば改行コード).
入力バッファ部が 4byte(6bit*4)の場合, 出力バッファ部は 3byte (8bit*3)となる.
入力バッファ部のバイト数が 4の倍数でない場合(不正なデータ), 足りない入力バッファ部には '='が挿入されているものとみなす.

Parameters:
str Base64からデコードする文字列.
Returns:
Base64からデコードされたデータ(Buffer型)
    "QQ" をデコードすると 'A',0x00 となる.

Definition at line 828 of file buffer.c.

References Buffer::buf, copy_b2Buffer(), decode_base64(), init_Buffer(), make_Buffer(), and Buffer::vldsz.

Referenced by command_KEYEX(), decode_base64_filename_Buffer(), encrypt_Base64(), get_plain_message(), get_plain_sBuffer(), llsd_xml_get_content_bin(), read_tagged_Buffer(), send_algor_recv_spki(), and setkey_byBase64().

00829 {
00830     unsigned char* bas;
00831     int    sz;
00832     Buffer dcd = init_Buffer();
00833 
00834     if (str.buf==NULL) return dcd;
00835 
00836     bas = decode_base64(str.buf, &sz);
00837     if (bas==NULL) return dcd;
00838 
00839     dcd = make_Buffer(sz);
00840     if (dcd.buf==NULL) {
00841         free(bas);
00842         return dcd;
00843     }
00844 
00845     copy_b2Buffer(bas, &dcd, sz);
00846     dcd.vldsz = sz;
00847 
00848     free(bas);
00849     return dcd;
00850 }

Here is the call graph for this function:

Here is the caller graph for this function:

Buffer decode_base64_filename_Buffer ( Buffer  str  ) 

Buffer decode_base64_filename_Buffer(Buffer str)

bufを Base64で decodeしてバイナリデータを取り出す.ただし '$' は '/' として扱う.

Definition at line 877 of file buffer.c.

References Buffer::buf, decode_base64_Buffer(), and Buffer::vldsz.

00878 {
00879     int i;
00880     for (i=0; i<str.vldsz; i++) {
00881         if (str.buf[i]=='$') str.buf[i] = '/';
00882     }
00883 
00884     Buffer dec = decode_base64_Buffer(str);
00885 
00886     return dec;
00887 }

Here is the call graph for this function:

void del_Buffer ( Buffer **  buf  ) 

void del_Buffer(Buffer** buf)

new_Buffer()で作り出した Buffer型変数を削除する.

Parameters:
buf 削除する Bufferデータのポインタへのポインタ.
See also:
new_Buffer()

Definition at line 154 of file buffer.c.

Referenced by command_USERID().

00155 {
00156     if (buf!=NULL && *buf!=NULL) {
00157         if ((*buf)->buf!=NULL) free((*buf)->buf);
00158         (*buf)->buf = NULL;
00159         free(*buf);
00160         *buf = NULL;
00161     }
00162 }

Here is the caller graph for this function:

Buffer dump_Buffer ( Buffer  buf  ) 

Buffer dump_Buffer(Buffer buf)

Buffer型変数のデバッグ用 16進を Buffer型変数に出力する.

buf.bufの buf.vldszバイトを16進表示する.
buf.vldsz<0 の場合は 文字列とみなす.

Parameters:
buf 変換する Buffer型データ.
Returns:
ダンプデータが格納された Buffer型データ.

Definition at line 1209 of file buffer.c.

References Buffer::buf, DUMP_BUFFER_CHAR_START, DUMP_BUFFER_DELI_START, DUMP_BUFFER_LINE_SIZE, init_Buffer(), make_Buffer(), and Buffer::vldsz.

01210 {
01211     int    sz;
01212     char   wrkbuf[10];
01213     Buffer str = init_Buffer();
01214 
01215     if (buf.buf==NULL) return str;
01216     if (buf.vldsz<0) sz = (int)strlen((const char*)buf.buf) + 1;
01217     else             sz = buf.vldsz;
01218 
01219     int lineno = (sz + 15)/16;
01220     str = make_Buffer(lineno*DUMP_BUFFER_LINE_SIZE+1);
01221 
01222     int l;
01223     for (l=0; l<lineno; l++) {
01224         int sp = l*DUMP_BUFFER_LINE_SIZE;
01225         int i  = 0;
01226         while (i<16) {
01227             sprintf(wrkbuf, "%02x ", buf.buf[l*16+i]);
01228             memcpy(str.buf+sp+i*3, wrkbuf, 3);
01229 
01230             if (buf.buf[l*16+i]>=0x20 && buf.buf[l*16+i]<=0x7e) {
01231                 sprintf(wrkbuf, "%c ", buf.buf[l*16+i]);
01232                 memcpy(str.buf+sp+DUMP_BUFFER_CHAR_START+i*2, wrkbuf, 2);
01233             }
01234             else {
01235                 memcpy(str.buf+sp+DUMP_BUFFER_CHAR_START+i*2, ". ", 2);
01236             }
01237 
01238             if (l*16+i>=sz) {
01239                 memcpy(str.buf+sp+i*3, "   ", 3);
01240                 memcpy(str.buf+sp+DUMP_BUFFER_CHAR_START+i*2, "  ", 2);
01241             }
01242 
01243             i++;
01244         }
01245         memcpy(str.buf+sp+DUMP_BUFFER_DELI_START, "   ", 3);
01246         str.buf[sp+DUMP_BUFFER_LINE_SIZE-2] = '\r';
01247         str.buf[sp+DUMP_BUFFER_LINE_SIZE-1] = '\n';
01248     }
01249     
01250     str.vldsz = lineno*DUMP_BUFFER_LINE_SIZE;
01251     return str;
01252 }

Here is the call graph for this function:

Buffer dup_Buffer ( Buffer  buf  ) 

Buffer dup_Buffer(Buffer buf)

Buffer型変数のコピーをつくる.

Parameters:
buf コピーする変数.
Returns:
新しく作られた Buffer型データ.

Definition at line 219 of file buffer.c.

References Buffer::buf, and Buffer::bufsz.

Referenced by buffer_key_tList(), check_ldap_passwd(), command_USERID(), copy_tTree_byctrl(), decomp_hostport(), decomp_url(), dup_tList_data(), erase_bBuffer(), gen_CRYPT_SharedKey(), get_Buffer_dim_tList(), get_Buffer_dim_tList_value(), get_crypt_sBuffer(), get_dir_files(), get_node_content(), get_plain_sBuffer(), get_sip_domain(), get_sip_via_address(), get_value_tTree(), json_parse_seq(), make_tList_data(), read_ldap_config(), read_tagged_Buffer(), rebuild_http_Buffer(), save_tagged_Buffer(), search_protocol_header(), set_protocol_contents(), set_tList_node_byBuffer(), simple_check_ldap_passwd(), ssl_send_sBufferln(), ssl_tcp_send_sBufferln(), and tcp_send_sBufferln().

00220 {
00221     Buffer  str = buf;
00222 
00223     if (buf.bufsz>=0 && buf.buf!=NULL) {
00224         str.buf = (unsigned char*)malloc(buf.bufsz+1);
00225         memcpy(str.buf, buf.buf, buf.bufsz);
00226         str.buf[buf.bufsz] = '\0';
00227     }
00228     //
00229     return  str;
00230 }

Here is the caller graph for this function:

Buffer encode_base64_Buffer ( Buffer  buf  ) 

Buffer encode_base64_Buffer(Buffer buf)

バイナリデータ buf.bufの buf.vldszバイトを Base64にエンコード する.

buf.vldszが -1以下の場合は buf.vldszは buf.bufの最初の 0x00のまでの長さ(strlen()+1)となる.
つまり buf.buf は文字列と 見なされる.

入力バッファ部が 3byte(8bit*3)の場合, 出力バッファ部は 4byte(6bit*4)となる.
入力バッファ部が 6bit境界でない場合, 6bit境界まで 0が付加されたと見される.
出力バッファ部が 4byte境界でない場合, 4byte境界まで '='を付加して出力する.
また,出力バッファ部での 60byte毎の改行は行わない.
一般に n byte 入力された場合, Base64の出力の文字数は (n+2)/3*4 byte となる.

Parameters:
buf Base64にエンコードするデータ.
Returns:
Base64にエンコードされた文字列(Buffer型)
    'A',0x00,0x01 を文字列(sz=1)とみなして符号化すると "QQ==" となる.
    'A',0x00,0x01 の 3byteを符号化(sz=3)すると "QQAB" となる.

Definition at line 781 of file buffer.c.

References Buffer::buf, copy_s2Buffer, encode_base64(), init_Buffer(), make_Buffer(), and Buffer::vldsz.

Referenced by encode_base64_filename_Buffer(), encrypt_Base64(), get_crypt_message(), get_crypt_sBuffer(), llsd_bin_main_parse(), read_tagged_Buffer(), save_tagged_Buffer(), send_spki_recv_ans(), tcp_send_crypt_mesg(), and tcp_send_crypt_sBuffer().

00782 {
00783     unsigned char* bas;
00784     int     sz;
00785     Buffer ecd = init_Buffer();
00786      
00787     //
00788     if (buf.buf==NULL) return ecd;
00789     if (buf.vldsz<0) sz = (int)strlen((const char*)buf.buf);
00790     else             sz = buf.vldsz;
00791     if (sz<=0) return ecd;
00792 
00793     bas = encode_base64(buf.buf, sz);
00794     if (bas==NULL) return ecd;
00795     
00796     sz  = ((sz + 2)/3)*4 + 1;
00797     ecd = make_Buffer(sz);
00798     if (ecd.buf==NULL) {
00799         free(bas);
00800         return ecd;
00801     }
00802 
00803     copy_s2Buffer((char*)bas, &ecd);
00804 
00805     free(bas);
00806     return ecd;
00807 }

Here is the call graph for this function:

Here is the caller graph for this function:

Buffer encode_base64_filename_Buffer ( Buffer  buf  ) 

Buffer encode_base64_filename_Buffer(Buffer buf)

バイナリデータ bufを Base64で encodeしてファイル名を作る.ただし '/' は '$' として扱う.

Definition at line 859 of file buffer.c.

References Buffer::buf, encode_base64_Buffer(), and Buffer::vldsz.

00860 {
00861     Buffer enc = encode_base64_Buffer(buf);
00862 
00863     int i;
00864     for (i=0; i<enc.vldsz; i++) {
00865         if (enc.buf[i]=='/') enc.buf[i] = '$';
00866     }
00867 
00868     return enc;
00869 }

Here is the call graph for this function:

Buffer erase_bBuffer ( Buffer  buf,
char *  bin,
int  len 
)

Buffer erase_bBuffer(Buffer buf, char* bin, int len)

buf.buf 中にある bin のデータ(各1Byte,順不同)を削除する.

Parameters:
buf 操作する Buffer変数
bin 削除するデータを格納したメモリへのポインタ
len binデータの長さ
Returns:
変換した文字列を格納した Buffer変数.要free

Definition at line 1498 of file buffer.c.

References Buffer::buf, clear_Buffer(), copy_Buffer(), dup_Buffer(), free_Buffer(), make_Buffer(), and Buffer::vldsz.

01499 {
01500     int     i, j, n;
01501     char cc;
01502 
01503     Buffer res = dup_Buffer(buf);
01504     Buffer wrk = make_Buffer(buf.vldsz+1);
01505 
01506     for (i=0; i<len; i++) {
01507         cc = bin[i];
01508         n  = 0;
01509         for (j=0; j<res.vldsz; j++) {
01510             if (cc!=res.buf[j]) wrk.buf[n++] = res.buf[j];
01511         }
01512         wrk.vldsz = n;
01513 
01514         copy_Buffer(&wrk, &res);
01515         clear_Buffer(&wrk);
01516     }
01517                 
01518     free_Buffer(&wrk);
01519 
01520     return res;
01521 }

Here is the call graph for this function:

void expand_Buffer ( Buffer buf,
int  len 
)

void expand_Buffer(Buffer* buf, int len)

buf のデータ部を lenに拡張した新しい Buffer を返す.
bug のデータ部は 解放される.free_Buffer()

Definition at line 263 of file buffer.c.

References Buffer::bufsz, copy_Buffer(), free_Buffer(), and make_Buffer().

00264 {
00265     if (buf->bufsz>len) return;
00266 
00267     Buffer expand = make_Buffer(len);
00268     copy_Buffer(buf, &expand);
00269     free_Buffer(buf);
00270 
00271     *buf = expand;
00272 }

Here is the call graph for this function:

int fgets_Buffer ( Buffer str,
FILE *  fp 
)

int fgets_Buffer(Buffer* str, FILE* fp)

拡張fgets.文字列の読み込みに使用する.改行コードは削除する.
strのバッファは予め十分な大きさを確保しておかなければならない.

Parameters:
str 文字列を読みこむための Buffer型データバッファ.
fp 文字列を読みこむファイルへのポインタ.
Returns:
読み込んだ文字列の長さ(改行コードを含む).

Definition at line 1333 of file buffer.c.

References Buffer::buf, Buffer::bufsz, CHAR_CR, CHAR_LF, UNUSED, and Buffer::vldsz.

Referenced by get_mime_filename().

01334 {
01335     char* p;
01336     int   n, m;
01337     UNUSED(p);
01338 
01339     memset(str->buf, 0, str->bufsz);
01340     p = fgets((char*)str->buf, str->bufsz, fp);
01341     m = (int)strlen((const char*)str->buf);
01342 
01343     n = 0;
01344     while(str->buf[n]!=CHAR_LF && str->buf[n]!=CHAR_CR && str->buf[n]!='\0') n++;
01345     str->buf[n] = '\0';
01346     str->vldsz  = n;
01347 
01348 //    if (KanjiCode!=US) kanji_convert_Buffer(str);
01349 
01350     return m;
01351 }

Here is the caller graph for this function:

void free_Buffer ( Buffer buf  ) 

void free_Buffer(Buffer* buf)

Buffer型変数のバッファ部を解放する.

Parameters:
buf 開放するバッファを持った Bufferデータへのポインタ.

Definition at line 133 of file buffer.c.

References Buffer::buf, JBXL_NORMAL, Buffer::state, and Buffer::vldsz.

Referenced by _DER_parse_children(), _json_array_parse(), add_resource_list(), add_xml_attr_double(), add_xml_attr_float(), add_xml_attr_int(), add_xml_attr_str(), awk_Buffer_tList(), cat_b2Buffer(), cat_Buffer(), cawk_Buffer_tList(), check_auth(), check_ldap_passwd(), check_server_spki(), command_KEYEX(), command_USERID(), copy_tTree_byctrl(), decode_runlength(), decomp_url(), deflate2gzip(), del_Buffer_dim(), del_sip_via(), encode_mime_string(), encrypt_Base64(), encrypt_Buffer(), erase_bBuffer(), expand_Buffer(), free_LDAP_Dn(), free_LDAP_Host(), free_tList_data(), gen_DHspki(), gen_DHspki_fs(), get_crypt_message(), get_crypt_sBuffer(), get_DHsharedkey(), get_DHspki_ff(), get_dir_files(), get_double_param_tList(), get_float_param_tList(), get_http_status_num(), get_http_version_num(), get_int_param_tList(), get_mime_boundary(), get_mime_filename(), get_node_integer(), get_plain_message(), get_plain_sBuffer(), get_protocol_header_list_seq(), get_sdp_body_list(), get_sip_domain(), get_sip_via_address(), get_tList_line_Buffer(), get_tList_seq_data_Buffer(), get_xml_double_attr(), get_xml_double_attr_bystr(), get_xml_int_attr(), get_xml_int_attr_bystr(), gz_decode_data(), http_proxy_header_analyze(), ins_b2Buffer(), ins_Buffer(), insert_sip_via(), is_http_header_field(), join_DHpubkey(), json_array_parse(), json_parse_file(), json_parse_prop(), json_parse_seq(), llsd_bin_get_length(), llsd_bin_main_parse(), llsd_xml_contain_key(), llsd_xml_get_content_bin(), llsd_xml_get_content_int(), llsd_xml_get_content_real(), llsd_xml_get_content_str(), open_ldap_connection(), print_json(), print_json_opt(), print_xml(), read_Buffer2_fp(), read_Buffer_data(), read_Buffer_fp(), read_Buffer_tList_fp(), read_DHspki_with_private(), read_index_tList_fp(), read_ldap_config(), read_lines_Buffer(), read_spki_with_ipaddr(), read_tagged_Buffer(), recv_http_Buffer(), recv_http_chunked(), recv_http_chunked_remain(), recv_http_closed(), recv_http_content(), recv_http_file(), recv_http_header(), recv_https_Buffer(), recv_https_chunked(), recv_https_chunked_remain(), recv_https_closed(), recv_https_content(), recv_https_file(), recv_https_header(), recv_mesg_until_end(), replace_all_node_byid_rcsv(), replace_all_node_contents_rcsv(), replace_all_tTree_node(), replace_item_tList_node(), replace_sBuffer_file(), replace_sdp_invite_addr(), replace_sip_contact(), replace_sip_contact_dstipport(), replace_value_tList_node(), replace_xml_content(), rewrite_sBuffer_bystr(), save_DHspki_with_private(), save_http_xml(), save_https_xml(), save_tagged_Buffer(), search_protocol_header_item(), send_algor_recv_spki(), send_command_recv_ans(), send_http_Buffer(), send_http_file(), send_http_header(), send_https_Buffer(), send_https_file(), send_https_header(), send_spki_recv_ans(), set_http_host_header(), set_item_tList_node(), set_max_forwards(), set_protocol_contents(), set_tList_node_byBuffer(), set_tList_node_bystr(), set_value_tList_node(), setkey_byBase64(), setkey_byBuffer(), simple_web_proxy(), sql_open(), ssl_recv_lines_Buffer(), ssl_recv_mstream_Buffer(), ssl_send_sBufferln(), ssl_tcp_recv_Buffer_tosize(), ssl_tcp_recv_Buffer_tosize_wait(), ssl_tcp_recv_lines_Buffer(), ssl_tcp_recv_mstream_Buffer(), ssl_tcp_send_sBufferln(), start_CRYPT_transfer(), tcp_recv_Buffer_tosize(), tcp_recv_Buffer_tosize_wait(), tcp_recv_crypt_Buffer(), tcp_recv_lines_Buffer(), tcp_recv_mstream_Buffer(), tcp_relay(), tcp_send_crypt_Buffer(), tcp_send_crypt_mesg(), tcp_send_crypt_sBuffer(), tcp_send_sBufferln(), udp_recv_crypt_Buffer(), udp_recv_crypt_Buffer_sockaddr_in(), udp_send_crypt_Buffer(), udp_send_crypt_Buffer_sockaddr_in(), www2browser_relay(), and xml_parse_file().

00134 {
00135     if (buf!=NULL) {
00136         if (buf->buf!=NULL) free(buf->buf);
00137         buf->buf = NULL;
00138         memset(buf, 0, sizeof(Buffer));
00139         buf->vldsz = -1;
00140         buf->state = JBXL_NORMAL;
00141     }
00142 }

Buffer get_line_Buffer ( Buffer  str,
int  n 
)

Buffer get_line_Buffer(Buffer str, int n)

複数行の文字列バッファから任意の行を取り出す.

strのバッファ内の n行目を取り出す.改行コードは削除される.
n は 1から数える.取り出した行を Buffer型変数のバッファに格納(コピー)して返す.

Parameters:
str 操作対象の文字列(含む改行).
n 行の指定.1から数える.
Returns:
指定された n行目の文字列(Buffer型).改行は含まない.

Definition at line 903 of file buffer.c.

References Buffer::buf, CHAR_CR, CHAR_LF, init_Buffer(), make_Buffer(), and Buffer::vldsz.

Referenced by get_tList_line_Buffer(), and send_algor_recv_spki().

00904 {
00905     int i, j, pos, cnt;
00906     unsigned char* buf;
00907 
00908     Buffer ret = init_Buffer();
00909     if (str.buf==NULL) return ret;
00910 
00911     buf = str.buf;
00912     for(i=0,j=0; j<n-1; j++) {
00913         while (buf[i]!=CHAR_LF && buf[i]!=CHAR_CR && buf[i]!='\0') i++;
00914         while (buf[i]==CHAR_LF || buf[i]==CHAR_CR) i++;
00915     }
00916     if (buf[i]=='\0') return ret;
00917 
00918     pos = i;
00919     while (buf[i]!=CHAR_LF && buf[i]!=CHAR_CR && buf[i]!='\0') i++;
00920     cnt = i - pos;
00921 
00922     if (cnt>=0) {
00923         ret = make_Buffer(cnt+1);
00924         if (ret.buf==NULL) return str;
00925 
00926         for(i=0; i<cnt; i++) ret.buf[i] = buf[pos+i];
00927         ret.buf[cnt] = '\0';
00928     }
00929 
00930     ret.vldsz = (int)strlen((const char*)ret.buf);
00931 
00932     return  ret;
00933 }

Here is the call graph for this function:

Here is the caller graph for this function:

Buffer get_seq_data_Buffer ( Buffer  str,
int *  ptr 
)

Buffer get_seq_data_Buffer(Buffer str, int* ptr)

複数行の文字列バッファ内の行データをシーケンシャルに取り出す.

改行コードは削除される.連続して呼び出す場合,一番最初は *ptrに 0を設定し,以後は *ptrの内容は変えない.
取り出した行を Buffer型変数のバッファに格納して返す.
バッファを越えて行を読もうとした時は NULL を返す. バッファの終わりは valdszで知る.

Parameters:
[in] str 操作対象文の Buffer型データ(含む改行)
[in,out] ptr in: 読み込みを開始するデータの位置(バイト).
out: 次のデータが始まる位置(バイト).
Returns:
指定されたポインタ以下の一行分の文字列.改行は含まない.

Definition at line 951 of file buffer.c.

References Buffer::buf, CHAR_CR, CHAR_LF, init_Buffer(), make_Buffer(), and Buffer::vldsz.

Referenced by get_tList_seq_data_Buffer().

00952 {
00953     int   i, pos, cnt;
00954     unsigned char* buf;
00955 
00956     Buffer ret = init_Buffer();
00957 
00958     if (str.buf==NULL) return ret;
00959     if (str.vldsz<=0) str.vldsz = (int)strlen((const char*)str.buf);
00960     if (*ptr >= str.vldsz) return ret;
00961 
00962     buf = str.buf;
00963     pos = *ptr;
00964     while (buf[*ptr]!=CHAR_LF && buf[*ptr]!=CHAR_CR && buf[*ptr]!='\0') (*ptr)++;
00965     cnt = *ptr - pos;
00966 
00967     if (cnt>=0) {
00968         ret = make_Buffer(cnt+1);
00969         if (ret.buf==NULL) return ret;
00970 
00971         for(i=0; i<cnt; i++) ret.buf[i] = buf[pos+i];
00972         ret.buf[cnt] = '\0';
00973     }
00974 
00975     ret.vldsz = (int)strlen((const char*)ret.buf);
00976 
00977     // 空行
00978     while (buf[*ptr]==CHAR_LF || buf[*ptr]==CHAR_CR) (*ptr)++;
00979 
00980     return  ret;
00981 }

Here is the call graph for this function:

Here is the caller graph for this function:

Buffer init_Buffer ( void   ) 

Buffer init_Buffer()

初期化したBuffer型変数を返す.

Attention:
a = init_Buffer() とした場合,aに元々値が入っていても,その値は freeされないので注意.
Returns:
初期化されたBuffer型変数.

Definition at line 49 of file buffer.c.

References JBXL_NORMAL, Buffer::state, and Buffer::vldsz.

Referenced by awk_Buffer(), buffer_key_tList(), buffer_key_value_tList(), cawk_Buffer(), check_auth(), check_server_spki(), decode_base64_Buffer(), decode_EVPAPI_Buffer(), decode_runlength(), decomp_url(), deflate2gzip(), dump_Buffer(), encode_base64_Buffer(), encode_EVPAPI_Buffer(), encode_runlength(), fgets_mstream_Buffer(), free_tList_data(), from_bin64(), gen_DHspki(), gen_DHspki_fs(), get_Buffer_from_json(), get_Buffer_join_tList(), get_crypt_Buffer(), get_DHalgorism(), get_DHGkey(), get_DHPkey(), get_DHsharedkey(), get_DHsharedkey_fY(), get_DHspki_ff(), get_DHYkey(), get_json_val(), get_line_Buffer(), get_mime_filename(), get_node_content(), get_plain_Buffer(), get_seq_data_Buffer(), get_sip_contact_uri(), get_sip_domain(), get_sip_via_address(), get_value_tTree(), gz_decode_data(), http_proxy_header_analyze(), init_LDAP_Dn(), init_LDAP_Host(), join_Buffer_dim(), join_DHpubkey(), json_inverse_parse(), json_inverse_parse_opt(), llsd_bin_get_bin(), llsd_bin_get_str(), llsd_bin_get_uuid(), llsd_xml_get_content_bin(), llsd_xml_get_content_str(), make_form_urlenc(), pack_Buffer(), read_Buffer2_fp(), read_Buffer_data(), read_Buffer_file(), read_Buffer_fp(), read_DHspki_with_private(), read_ldap_config(), read_spki_with_ipaddr(), read_tagged_Buffer(), replace_sBuffer_bystr(), replace_sip_via(), restore_protocol_header(), restore_sdp_body(), search_protocol_header(), search_protocol_header_partvalue(), search_protocol_header_value(), send_algor_recv_spki(), set_Buffer(), and xml_inverse_parse().

00050 {
00051     Buffer  buf;
00052 
00053     memset(&buf, 0, sizeof(Buffer));
00054     buf.vldsz = -1;
00055     buf.state = JBXL_NORMAL;
00056 
00057     return buf;
00058 }

int ins_b2Buffer ( void *  src,
Buffer dst,
int  len 
)

int ins_b2Buffer(void* src, Buffer* dst, int len)

任意のバイナリデータsrcを Buffer型変数dstの前に lenバイト挿入する.
lenが 0未満の場合は, srcは文字列として扱われる.

Parameters:
src 挿入元の任意データへのポインタ.
dst 挿入先のBuffer型変数へのポインタ.
len 挿入するバイト数.
Return values:
0以上 dstのバッファにコピーされた文字数.
JBXL_NULL_EEROR srcまたは dstが NULL
JBXL_MALLOC_ERROR メモリの確保に失敗した.何も実行されなかった.

Definition at line 650 of file buffer.c.

References Buffer::bufsz, cat_Buffer(), copy_b2Buffer(), free_Buffer(), make_Buffer(), and Buffer::vldsz.

Referenced by ins_i2Buffer().

00651 {
00652     Buffer tmp = make_Buffer(dst->bufsz+len);
00653 
00654     int ret = copy_b2Buffer(src, &tmp, len);
00655     if (ret<0) {
00656         free_Buffer(&tmp);
00657         return ret;
00658     }
00659 
00660     ret = cat_Buffer(dst, &tmp);
00661     if (ret<0) {
00662         free_Buffer(&tmp);
00663         return ret;
00664     }
00665 
00666     free_Buffer(dst);
00667     *dst = tmp;
00668 
00669     return  dst->vldsz;
00670 }

Here is the call graph for this function:

Here is the caller graph for this function:

int ins_Buffer ( Buffer src,
Buffer dst 
)

int ins_Buffer(Buffer* src, Buffer* dst)

Buffer変数 dst の前に src を挿入する.

Parameters:
src 挿入元のポインタ.
dst 挿入先へのポインタ.
Return values:
0以上 dstのバッファにコピーされた文字数.
JBXL_NULL_EEROR srcまたは dstが NULL
JBXL_MALLOC_ERROR メモリの確保に失敗した.何も実行されなかった.

Definition at line 471 of file buffer.c.

References Buffer::bufsz, cat_Buffer(), copy_Buffer(), free_Buffer(), make_Buffer(), and Buffer::vldsz.

00472 {
00473     Buffer tmp = make_Buffer(src->bufsz + dst->bufsz);
00474 
00475     int ret = copy_Buffer(src, &tmp);
00476     if (ret<0) {
00477         free_Buffer(&tmp);
00478         return ret;
00479     }
00480 
00481     ret = cat_Buffer(dst, &tmp);
00482     if (ret<0) {
00483         free_Buffer(&tmp);
00484         return ret;
00485     }
00486 
00487     free_Buffer(dst);
00488     *dst = tmp;
00489 
00490     return  dst->vldsz;
00491 }

Here is the call graph for this function:

int ins_i2Buffer ( int  src,
Buffer dst 
)

int ins_i2Buffer(int src, Buffer* dst)

整数 srcを文字列に変換して,dstの前に 挿入する.

Definition at line 709 of file buffer.c.

References ins_b2Buffer(), and LEN_INT.

00710 {
00711     char num[LEN_INT];
00712 
00713     snprintf(num, LEN_INT-1, "%d", src);
00714     return ins_b2Buffer((void*)num, dst, (int)strlen(num));
00715 }

Here is the call graph for this function:

int isText_Buffer ( Buffer  buf  ) 

int isText_Buffer(Buffer buf)

Buffer型変数 bufのバッファ部がテキストかどうか検査する.

Parameters:
buf 検査対象の Buffer型変数.
Return values:
TRUE バッファ部はテキストである.
FALSE バッファ部はテキストではない.

Definition at line 1310 of file buffer.c.

References Buffer::buf, FALSE, TRUE, and Buffer::vldsz.

01311 {
01312     if (buf.vldsz==(int)strlen((const char*)buf.buf)) return TRUE;
01313     return FALSE;
01314 }

void kanji_convert_Buffer ( Buffer str  ) 

void kanji_convert_Buffer(Buffer* str)

大域変数 KanjiCode (tools.h) に従って漢字コードを変換する.

Parameters:
[in,out] str 変換する文字列を持つBuffer型データ.内容が書き換えられる.
Attention:
現在は KanjiCodeが SJISの場合のみ EUCを SJISに変換する.
See also:
KanjiCode

Definition at line 1109 of file buffer.c.

References Buffer::buf, CODE_SJIS, euc2sjis(), and KanjiCode.

01110 {
01111     int i; 
01112     unsigned char *c1, *c2;
01113 
01114     if (KanjiCode==CODE_SJIS) {
01115         i = 0;
01116         while(str->buf[i]!='\0'){
01117             c1 = &(str->buf[i]);
01118             c2 = c1 + 1;
01119             if(*c1>=0xa1 && *c1<=0xfe){
01120                 euc2sjis(c1, c2);    
01121                 i = i + 2;
01122             } 
01123             else  i++;
01124         }
01125     }              
01126     /*
01127     else if (KanjiCode==CODE_EUC) {
01128         i = 0;
01129         while(str->buf[i]!='\0'){
01130             c1 = (unsigned char) str->buf[i];
01131             c2 = (unsigned char) str->buf[i+1];
01132             if((c1>=0x81 && c1<=0x9f) || (c1>=0xe0 && c1<=0xff)) {
01133                 sjis2euc(c1, c2);    
01134                 i = i + 2;
01135             } 
01136             else  i++;
01137         }
01138     } 
01139     */             
01140 }

Here is the call graph for this function:

Buffer make_Buffer ( int  sz  ) 

Buffer make_Buffer(int sz)

Buffer型変数のバッファ部をつくり出す.

sz は Buffer型変数のバッファの大きさ.
バッファ部は 0x00で初期化される.bufsz=sz, vldsz=0 となる.
バッファ部の作成に失敗した場合,バッファのサイズ(bufsz)は 0,バッファへのポインタは NULLとなる.

Parameters:
sz Buffer型変数のバッファの大きさ.
Returns:
作り出した Buffer型変数.

Definition at line 74 of file buffer.c.

References Buffer::buf, Buffer::bufsz, JBXL_ERROR, JBXL_NORMAL, Buffer::state, and Buffer::vldsz.

Referenced by awk_Buffer(), bvh_parse_hierarchy(), cawk_Buffer(), check_auth(), command_KEYEX(), command_USERID(), comp_url(), decode_base64_Buffer(), decode_EVPAPI_Buffer(), decode_runlength(), decomp_url(), decompline_Buffer_dim(), deflate2gzip(), dump_Buffer(), encode_base64_Buffer(), encode_EVPAPI_Buffer(), encode_mime_string(), encode_runlength(), erase_bBuffer(), expand_Buffer(), fgets_mstream_Buffer(), from_bin64(), gen_DHspki(), gen_DHspki_fs(), get_Buffer_join_tList(), get_command(), get_comment(), get_DHalgorism(), get_DHGkey(), get_DHPkey(), get_DHprivatekey(), get_DHsharedkey_fY(), get_DHYkey(), get_line_Buffer(), get_mime_filename(), get_operand(), get_protocol_header_list_seq(), get_seq_data_Buffer(), gz_decode_data(), ins_b2Buffer(), ins_Buffer(), insert_sip_via(), int2bin_DER(), join_Buffer_dim(), join_DHpubkey(), json_inverse_parse(), json_inverse_parse_opt(), llsd_bin_get_length(), make_Buffer_bychar(), new_Buffer(), node2DER(), randbit_Buffer(), randstr_Buffer(), read_Buffer_data(), read_Buffer_fp(), read_lines_Buffer(), recv_http_chunked(), recv_http_chunked_remain(), recv_http_closed(), recv_http_content(), recv_http_file(), recv_http_header(), recv_https_chunked(), recv_https_chunked_remain(), recv_https_closed(), recv_https_content(), recv_https_file(), recv_https_header(), recv_mesg_until_end(), replace_sBuffer_bystr(), replace_sdp_invite_addr(), replace_sip_contact_dstipport(), rept_Buffer(), restore_protocol_contents(), restore_protocol_header(), save_tagged_Buffer(), send_command_recv_ans(), set_Buffer(), set_http_host_header(), simple_web_proxy(), ssl_recv_lines_Buffer(), ssl_recv_mstream_Buffer(), ssl_tcp_recv_Buffer_tosize(), ssl_tcp_recv_Buffer_tosize_wait(), ssl_tcp_recv_lines_Buffer(), ssl_tcp_recv_mstream_Buffer(), tcp_recv_Buffer_tosize(), tcp_recv_Buffer_tosize_wait(), tcp_recv_crypt_Buffer(), tcp_recv_lines_Buffer(), tcp_recv_mstream_Buffer(), tcp_relay(), to_bin64(), udp_recv_crypt_Buffer(), udp_recv_crypt_Buffer_sockaddr_in(), www2browser_relay(), and xml_inverse_parse().

00075 {
00076     Buffer  buf;
00077 
00078     memset(&buf, 0, sizeof(Buffer));
00079     buf.state = JBXL_NORMAL;
00080     if (sz<0) return buf;
00081 
00082     buf.bufsz = sz;
00083     buf.buf = (unsigned char*)malloc(buf.bufsz+1);
00084 
00085     if (buf.buf==NULL) {
00086         buf.bufsz = 0;
00087         buf.vldsz = -1;
00088         buf.state = JBXL_ERROR;
00089     }
00090     else {
00091         memset(buf.buf, 0, buf.bufsz+1);
00092     }
00093 
00094     return buf;
00095 }

Buffer make_Buffer_bychar ( unsigned char  cc  ) 

Buffer make_Buffer_bychar(unsigned char cc)

文字から,Buffer型変数のバッファ部をつくり出す.

make_Buffer_bychar('\0') は Buffer変数の初期化にも使用される.

Parameters:
cc Buffer型変数のバッファに格納する文字
Returns:
つくり出した Buffer型変数.バッファ部の作成に失敗した場合,
バッファのサイズ(bufsz)は 0,バッファへのポインタは NULLとなる.
See also:
make_Buffer_bystr()

Definition at line 112 of file buffer.c.

References Buffer::buf, LADDR, make_Buffer(), and Buffer::vldsz.

00113 {
00114     Buffer  buf;
00115     
00116     buf = make_Buffer(LADDR);
00117     if (buf.buf==NULL) return buf;
00118 
00119     buf.buf[0] = cc;
00120     buf.vldsz = 1;
00121     return buf;
00122 }

Here is the call graph for this function:

Buffer make_Buffer_randomstr ( int  n  ) 

Buffer make_Buffer_randomstr(int n)

ランダムな n文字から,Buffer型変数のバッファ部をつくり出す.

Definition at line 199 of file buffer.c.

References random_str, and set_Buffer().

00200 {
00201     char* str = random_str(n);
00202 
00203     Buffer buf = set_Buffer(str, -1);
00204     free(str);
00205 
00206     return buf;
00207 }

Here is the call graph for this function:

Buffer* new_Buffer ( int  sz  ) 

Buffer* new_Buffer(int sz)

空のBuffer型変数を生成する.

Parameters:
sz Buffer型変数のバッファの大きさ.0以下の場合は,バッファ部は作成しない.
Returns:
つくり出した Buffer型変数へのポインタ.作成に失敗した場合はNULLが返る.

Definition at line 24 of file buffer.c.

References JBXL_NORMAL, make_Buffer(), Buffer::state, and Buffer::vldsz.

Referenced by command_KEYEX(), command_USERID(), and get_Buffer_ringBuffer().

00025 {
00026     Buffer*  buf;
00027 
00028     buf = (Buffer*)malloc(sizeof(Buffer));
00029     if (buf==NULL) return NULL;
00030 
00031     memset(buf, 0, sizeof(Buffer));
00032     buf->vldsz = -1;
00033     buf->state = JBXL_NORMAL;
00034 
00035     if (sz>0) *buf = make_Buffer(sz + 1);
00036     return buf;
00037 }

Here is the call graph for this function:

Here is the caller graph for this function:

Buffer pack_Buffer ( Buffer  buf,
char  cc 
)

Buffer pack_Buffer(Buffer buf, char cc)

文字列の先頭のcc(複数),終わりのcc(複数),TAB, CR, LF を削除
文字列の先頭,終わり部分でない場所にある ccは削除されない.

Parameters:
buf 操作対象の Buffer型変数
cc 削除する文字
Returns:
変換後の文字列を含んだ Buffer型変数.

Definition at line 1085 of file buffer.c.

References Buffer::buf, Buffer::bufsz, init_Buffer(), pack_char, and Buffer::vldsz.

Referenced by json_array_parse(), json_parse_prop(), and read_index_tList_fp().

01086 {
01087     Buffer res = init_Buffer();
01088 
01089     if (buf.buf==NULL) return res;
01090 
01091     res.buf = (unsigned char*)pack_char((char*)buf.buf, cc);
01092     res.vldsz = (int)strlen((char*)res.buf);
01093     res.bufsz = res.vldsz;
01094 
01095     return res;
01096 }

Here is the call graph for this function:

Here is the caller graph for this function:

char pop_char_ringStack ( Buffer buf  ) 

char pop_char_ringStack(Buffer* buf)

簡易 char型 ringStack POP

Definition at line 1774 of file buffer.c.

References Buffer::buf, Buffer::bufsz, and Buffer::vldsz.

Referenced by llsd_bin_get_length().

01775 {
01776     buf->vldsz--;
01777     if (buf->vldsz<0) buf->vldsz = buf->bufsz - 1;
01778 
01779     return  (char)buf->buf[buf->vldsz];
01780 }

Here is the caller graph for this function:

void push_char_ringStack ( Buffer buf,
char  cc 
)

void push_char_ringStack(Buffer* buf, char cc)

簡易 char型 ringStack PUSH

Definition at line 1789 of file buffer.c.

References Buffer::buf, Buffer::bufsz, and Buffer::vldsz.

Referenced by llsd_bin_get_length().

01790 {
01791     buf->buf[buf->vldsz] = (unsigned char)cc;
01792     buf->vldsz++;
01793     if (buf->vldsz==buf->bufsz) buf->vldsz = 0;
01794 
01795     return;
01796 }

Here is the caller graph for this function:

Buffer randbit_Buffer ( int  n  ) 

Buffer randbit_Buffer(int n)

ランダムに n bitのバイナリを生成する.

Parameters:
n 出力する bit数.
Returns:
ランダムに生成された n bitのデータ(Buffer型).

Definition at line 1178 of file buffer.c.

References Buffer::buf, make_Buffer(), setBit, and Buffer::vldsz.

01179 {
01180     int   i, sz;
01181     Buffer str;
01182     
01183     sz = (n+7)/8;
01184     str = make_Buffer(sz);
01185     if (str.buf==NULL) return str;
01186     str.vldsz = sz;
01187 
01188     for (i=0; i<n; i++) setBit(str.buf, i, rand()%2);
01189     return str;     
01190 }

Here is the call graph for this function:

Buffer randstr_Buffer ( int  n  ) 

Buffer randstr_Buffer(int n)

ランダムに A-Za-z0-9+/ までの文字を n文字生成する.

Parameters:
n 出力する文字数.
Returns:
ランダムに生成された n文字の文字列(Buffer型).

Definition at line 1152 of file buffer.c.

References Buffer::buf, make_Buffer(), and Buffer::vldsz.

01153 {
01154     char   base[]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
01155     Buffer pass;
01156     int    i, sz;
01157 
01158     pass = make_Buffer(n);
01159     if (pass.buf==NULL) return pass;
01160 
01161     sz = (int)strlen(base);
01162     for (i=0; i<n; i++) pass.buf[i] = base[rand()%sz];
01163     pass.vldsz = n;
01164 
01165     return pass;
01166 }

Here is the call graph for this function:

int read_Buffer2_fp ( Buffer key,
Buffer buf,
FILE *  fp 
)

int read_Buffer2_fp(Buffer* key, Buffer* buf, FILE* fp)

ファイル fp から 2つのBuffer型変数の keyと bufを読み込む.
データ検索用ファイルからの読み込み時に使用する.

Parameters:
key 読み込むキー部のBuffer型変数へのポインタ.
buf 読み込むデータ部のBuffer型変数へのポインタ.
fp ファイルディスクリプタ
Return values:
TRUE 読み込み成功.
FALSE 読み込みに失敗.

Definition at line 1737 of file buffer.c.

References Buffer::buf, FALSE, free_Buffer(), init_Buffer(), read_Buffer_fp(), and TRUE.

Referenced by read_Buffer_tList_fp(), and read_tagged_Buffer().

01738 {
01739     if (key==NULL || buf==NULL) return FALSE;
01740 
01741     *key = init_Buffer();
01742     *buf = init_Buffer();
01743     
01744     *key = read_Buffer_fp(fp);
01745     if (key->buf==NULL) return FALSE;
01746 
01747     *buf = read_Buffer_fp(fp);
01748     if (buf->buf==NULL) {
01749         free_Buffer(key);
01750         return FALSE;
01751     }
01752 
01753     return TRUE;
01754 }

Here is the call graph for this function:

Here is the caller graph for this function:

Buffer read_Buffer_data ( FILE *  fp,
int  sz 
)

Buffer read_Buffer_data(FILE* fp, int sz)

ファイルポインタ fp から szバイトをBuffer型変数に読み込む.

Parameters:
fp ファイルポインタ
sz 読み込みサイズ
Returns:
読み込んだファイルの内容を保持する Buffer型変数

Definition at line 1431 of file buffer.c.

References Buffer::buf, free_Buffer(), init_Buffer(), make_Buffer(), and Buffer::vldsz.

Referenced by read_Buffer_file().

01432 {
01433     int     cc;
01434     Buffer  buf;
01435 
01436     buf = init_Buffer();
01437     if (sz<0) return buf;
01438 
01439     buf = make_Buffer(sz);
01440     if (buf.buf==NULL) return buf;
01441     buf.vldsz = sz;
01442 
01443     cc = (int)fread(buf.buf, buf.vldsz, 1, fp);
01444     if (cc!=1) {
01445         free_Buffer(&buf);
01446         return buf;
01447     }
01448     
01449     return buf;
01450 }

Here is the call graph for this function:

Here is the caller graph for this function:

Buffer read_Buffer_file ( const char *  fn  ) 

Buffer read_Buffer_file(const char* fn)

ファイル fn の内容を Buffer型変数に読み込む.

Parameters:
fn ファイル名
Returns:
読み込んだファイルの内容を保持する Buffer型変数

Definition at line 1400 of file buffer.c.

References file_size(), init_Buffer(), and read_Buffer_data().

Referenced by get_protocol_header_list_file(), json_parse_file(), replace_sBuffer_file(), and xml_parse_file().

01401 {
01402     int     sz;
01403     Buffer  buf;
01404     FILE*   fp;
01405 
01406     buf = init_Buffer();
01407 
01408     sz = file_size(fn);
01409     if (sz<=0) return buf;
01410 
01411     fp = fopen(fn, "rb");
01412     if (fp==NULL) return buf;
01413 
01414     buf = read_Buffer_data(fp, sz);
01415     fclose(fp);
01416     
01417     return buf;
01418 }

Here is the call graph for this function:

Here is the caller graph for this function:

Buffer read_Buffer_fp ( FILE *  fp  ) 

Buffer read_Buffer_fp(FILE* fp)

ファイル fp から Buffer型変数の buf部を読み込む.
ただしファイルの先頭にファイルサイズを示す4Byteの値が必要

Parameters:
fp ファイルディスクリプタ
Returns:
読み込んだ buf部を持つ Buffer型変数.

Definition at line 1700 of file buffer.c.

References Buffer::buf, free_Buffer(), init_Buffer(), make_Buffer(), and Buffer::vldsz.

Referenced by read_Buffer2_fp().

01701 {
01702     int     cc, sz;
01703     Buffer  buf;
01704 
01705     buf = init_Buffer();
01706     cc = (int)fread(&sz, sizeof(sz), 1, fp);
01707     if (cc!=1) return buf;
01708     sz = ntohl(sz);
01709 
01710     buf = make_Buffer(sz);
01711     if (buf.buf==NULL) return buf;
01712     buf.vldsz = sz;
01713     cc = (int)fread(buf.buf, buf.vldsz, 1, fp);
01714     if (cc!=1) {
01715         free_Buffer(&buf);
01716         return buf;
01717     }
01718     
01719     return buf;
01720 }

Here is the call graph for this function:

Here is the caller graph for this function:

int read_lines_Buffer ( Buffer str,
FILE *  fp 
)

int read_lines_Buffer(Buffer* str, FILE* fp)

複数文字列行の読み込み.文字列の読み込みに使用する.
strのバッファは予め十分な大きさを確保しておかなければならない.

Parameters:
str 文字列を読みこむための Buffer型データバッファ.
fp 文字列を読みこむファイルへのポインタ.
Returns:
読み込んだ全データの長さ.

Definition at line 1365 of file buffer.c.

References Buffer::buf, Buffer::bufsz, cat_Buffer(), clear_Buffer(), copy_Buffer(), free_Buffer(), JBXL_BUFFER_MAKE_ERROR, make_Buffer(), UNUSED, and Buffer::vldsz.

01366 {
01367     Buffer buf;
01368     char* pp;
01369     UNUSED(pp);
01370 
01371     buf = make_Buffer(str->bufsz);
01372     if (buf.buf==NULL) return JBXL_BUFFER_MAKE_ERROR;
01373 
01374     pp = fgets((char*)buf.buf, buf.bufsz, fp);
01375     buf.vldsz = (int)strlen((const char*)buf.buf);
01376     copy_Buffer(&buf, str);
01377     clear_Buffer(&buf);
01378 
01379     while (!feof(fp)) {
01380         pp = fgets((char*)buf.buf, buf.bufsz, fp);
01381         buf.vldsz = (int)strlen((const char*)buf.buf);
01382         cat_Buffer(&buf, str);
01383         clear_Buffer(&buf);
01384     }
01385 
01386     free_Buffer(&buf);
01387     return str->vldsz;
01388 }

Here is the call graph for this function:

int recalc_strlen_Buffer ( Buffer buf  ) 

int recalc_strlen_Buffer(Buffer* buf)

Buffer型変数のデータ部を文字列と見なして,その長さを返す.
vldsz は再計算される.

Parameters:
[in] buf 操作対象文字列
[out] buf vldsz 文字列の長さ.再計算される.
Returns:
文字列の長さ.

Definition at line 1266 of file buffer.c.

References Buffer::buf, and Buffer::vldsz.

01267 {
01268     int len = (int)strlen((char*)buf->buf);
01269     buf->vldsz = len;
01270     return len;
01271 }

Buffer replace_sBuffer_bystr ( Buffer  buf,
const char *  frm,
const char *  tos 
)

Buffer replace_sBuffer_bystr(Buffer buf, const char* frm, const char* tos)

buf.buf中の文字列 frmを tosで置き換えた 新しい Bufferを返す.
frm は buf.buf とメモリ領域が重なってはいけない.
文字列型の Bufferにのみ対応.

Parameters:
buf 操作する Buffer変数
frm 変換する文字列
tos 変換後の文字列
Returns:
変換した文字列を格納した Buffer変数.state==JBXL_ERROR の場合は失敗.

Definition at line 1538 of file buffer.c.

References Buffer::buf, BUFFER_FACT, Buffer::bufsz, cat_s2Buffer, init_Buffer(), JBXL_ERROR, make_Buffer(), Buffer::state, and Buffer::vldsz.

Referenced by replace_all_node_byid_rcsv(), replace_all_node_contents_rcsv(), replace_xml_content(), and rewrite_sBuffer_bystr().

01539 {
01540     int    i, j, flen, tlen;
01541     Buffer res;
01542 
01543     res = init_Buffer();
01544     if (buf.buf==NULL || frm==NULL || tos==NULL) return res;
01545 
01546     flen = (int)strlen(frm);
01547     tlen = (int)strlen(tos);
01548     if (buf.vldsz<=0) buf.vldsz = (int)strlen((const char*)buf.buf);
01549 
01550     int difsz = tlen - flen;
01551     if (difsz<0) difsz = 0;
01552     else         difsz = difsz*100;    // 100個まで
01553     res = make_Buffer((int)((buf.vldsz+difsz+1)*BUFFER_FACT));
01554 
01555     i = j = 0;
01556     while (i<buf.vldsz && j<res.bufsz) {
01557         if (!strncmp((const char*)(buf.buf+i), frm, flen)){
01558             res.vldsz = (int)strlen((const char*)res.buf);
01559             cat_s2Buffer(tos, &res);
01560             i += flen;
01561             j += tlen;
01562         }
01563         else {
01564             res.buf[j++] = buf.buf[i++];
01565         }
01566     }
01567 
01568     if (j==res.bufsz) res.state = JBXL_ERROR;
01569     res.vldsz = (int)strlen((const char*)res.buf);
01570 
01571     return res;
01572 }

Here is the call graph for this function:

Here is the caller graph for this function:

int replace_sBuffer_file ( char *  fn,
Buffer  frm,
Buffer  tos 
)

int replace_sBuffer_file(char* fn, Buffer frm, Buffer tos)

テキストファイル中の frm の文字列を tos に書き換える

Parameters:
fn 操作するファイル名
frm 変換する文字列
tos 変換後の文字列
Return values:
TRUE 書き込み成功. 
FALSE 書き込みに失敗.ファイルの内容は保証されない.

Definition at line 1588 of file buffer.c.

References Buffer::buf, FALSE, free_Buffer(), read_Buffer_file(), replace_sBuffer, and save_Buffer_file().

01589 {
01590     int  ret;
01591     Buffer buf, res;
01592 
01593     buf = read_Buffer_file(fn);
01594     if (buf.buf==NULL) return FALSE;
01595 
01596     res = replace_sBuffer(buf, (char*)frm.buf, (char*)tos.buf);
01597     free_Buffer(&buf);
01598     if (res.buf==NULL) return FALSE;
01599 
01600     ret = save_Buffer_file(res, fn);
01601     free_Buffer(&buf);
01602 
01603     return ret;
01604 }

Here is the call graph for this function:

Buffer rept_Buffer ( unsigned char  cc,
int  n 
)

Buffer rept_Buffer(unsigned char cc, int n)

文字 ccを n回繰り返したBuffer型データを返す.

Parameters:
cc 繰り返す文字.
n 繰り返す回数.
Returns:
新しく作られた Buffer型データ.

Definition at line 243 of file buffer.c.

References Buffer::buf, make_Buffer(), and Buffer::vldsz.

00244 {
00245     int  i;
00246     Buffer  str;
00247     
00248     if (n<=0) n = 1;
00249     str = make_Buffer(n);
00250     for (i=0; i<n; i++) str.buf[i] = cc;
00251     str.vldsz = n;
00252     return  str;
00253 }

Here is the call graph for this function:

void rewrite_sBuffer_bystr ( Buffer buf,
const char *  frm,
const char *  tos 
)

void rewrite_sBuffer_bystr(Buffer* buf, const char* frm, const char* tos)

buf.buf中の文字列 frmを tosで置き換える.
buf.buf自体を書き換えること以外は replace_sBuffer_bystr() と同じ.

Parameters:
buf 操作する Buffer変数
frm 変換する文字列
tos 変換後の文字列

Definition at line 1618 of file buffer.c.

References free_Buffer(), JBXL_NORMAL, replace_sBuffer_bystr(), and Buffer::state.

01619 {
01620     Buffer tmp = replace_sBuffer_bystr(*buf, frm, tos);
01621     if (tmp.state==JBXL_NORMAL) {
01622         free_Buffer(buf);
01623         *buf = tmp;
01624     }
01625     return;
01626 }

Here is the call graph for this function:

int save_Buffer2_fp ( Buffer  key,
Buffer  buf,
FILE *  fp 
)

int save_Buffer2_fp(Buffer key, Buffer buf, FILE* fp)

ファイル fp へ 2つのBuffer型変数 keyと bufを書き込む.
データ検索用ファイルを作成するときに使用する.

Parameters:
key 書き込むキー部のBuffer型変数.
buf 書き込むデータ部のBuffer型変数.
fp ファイルディスクリプタ
Return values:
TRUE 書き込み成功. 
FALSE 書き込みに失敗.ファイルの内容は保証されない.

Definition at line 1648 of file buffer.c.

References FALSE, save_Buffer_fp(), and TRUE.

Referenced by save_Buffer_tList_fp(), and save_tagged_Buffer().

01649 {
01650     int   cc;
01651     
01652     cc = save_Buffer_fp(key, fp);
01653     if (!cc) return FALSE;
01654 
01655     cc = save_Buffer_fp(buf, fp);
01656     if (!cc) return FALSE;
01657     
01658     return TRUE;
01659 }

Here is the call graph for this function:

Here is the caller graph for this function:

int save_Buffer_file ( Buffer  buf,
char *  fn 
)

int save_Buffer_file(Buffer buf, char* fn)

ファイル fn へ Buffer型変数の buf部を書き込む.

Parameters:
buf 書き込む Buffer型変数.
fn ファイル名
Return values:
TRUE 書き込み成功.
FALSE 書き込みに失敗.ファイルの内容は保証されない.

Definition at line 1465 of file buffer.c.

References Buffer::buf, FALSE, TRUE, and Buffer::vldsz.

Referenced by replace_sBuffer_file().

01466 {
01467     int   cc;
01468     FILE* fp;
01469 
01470     fp = fopen(fn, "wb");
01471     if (fp==NULL) return FALSE;
01472 
01473     cc = (int)fwrite(buf.buf, buf.vldsz, 1, fp);
01474     if (cc!=1) return FALSE;
01475     fclose(fp);
01476     
01477     return TRUE;
01478 }

Here is the caller graph for this function:

int save_Buffer_fp ( Buffer  buf,
FILE *  fp 
)

int save_Buffer_fp(Buffer buf, FILE* fp)

ファイル fp へ Buffer型変数の buf部を書き込む.
buf部に先立ち,buf部の大きさが intで書き込まれる.

Parameters:
buf 書き込む Buffer型変数.
fp ファイルディスクリプタ
Return values:
TRUE 書き込み成功. 
FALSE 書き込みに失敗.ファイルの内容は保証されない.

Definition at line 1675 of file buffer.c.

References Buffer::buf, FALSE, TRUE, and Buffer::vldsz.

Referenced by save_Buffer2_fp().

01676 {
01677     int   cc, sz;
01678 
01679     sz = htonl(buf.vldsz);
01680     cc = (int)fwrite(&sz, sizeof(sz), 1, fp);
01681     if (cc!=1) return FALSE;
01682 
01683     cc = (int)fwrite(buf.buf, buf.vldsz, 1, fp);
01684     if (cc!=1) return FALSE;
01685     
01686     return TRUE;
01687 }

Here is the caller graph for this function:

Buffer set_Buffer ( void *  dat,
int  len 
)

Buffer set_Buffer(void* dat, int len)

Buffer型変数のバッファ部を新しく作り, そのバッファに bufをコピーする.
lenはコピーするデータ長.もし lenが 0未満の場合は, bufは文字列として扱われる.
buf が文字列の場合は make_Buffer_bystr() も使用可能.

Parameters:
dat コピーするバッファへのポインタ.
len バッファ長(バイト単位).
Returns:
新しく作られた Buffer型データ.

Definition at line 177 of file buffer.c.

References Buffer::buf, init_Buffer(), make_Buffer(), and Buffer::vldsz.

Referenced by _json_parse_term(), get_json_val(), json_array_parse(), json_parse_prop(), llsd_bin_get_bin(), llsd_bin_get_uuid(), make_Buffer_randomstr(), and set_DER_node().

00178 {
00179     Buffer  buf;
00180 
00181     buf = init_Buffer();
00182     if (dat==NULL) return buf;
00183 
00184     if (len<0) len = (int)strlen((char*)dat);
00185     buf = make_Buffer(len);
00186     if (buf.buf==NULL) return buf;
00187 
00188     memcpy(buf.buf, dat, len);
00189     buf.vldsz = len;
00190     return  buf;
00191 }

Here is the call graph for this function:

Here is the caller graph for this function:


Generated on 15 Nov 2023 for JunkBox_Lib by  doxygen 1.6.1