Buffer型サポートプログラム. More...
#include "buffer.h"
#include "jbxl_state.h"
Go to the source code of this file.
Defines | |
#define | DUMP_BUFFER_LINE_SIZE 85 |
#define | DUMP_BUFFER_DELI_START 48 |
#define | DUMP_BUFFER_CHAR_START 51 |
Functions | |
Buffer * | new_Buffer (int sz) |
空のBuffer型変数を生成する. | |
Buffer | init_Buffer () |
初期化したBuffer型変数を返す. | |
Buffer | make_Buffer (int sz) |
Buffer型変数のバッファ部をつくり出す.. | |
Buffer | make_Buffer_bychar (unsigned char cc) |
文字から,Buffer型変数のバッファ部をつくり出す. | |
void | free_Buffer (Buffer *buf) |
Buffer型変数のバッファ部を解放する. | |
void | del_Buffer (Buffer **buf) |
new_Buffer()で作り出した Buffer型変数を削除する. | |
Buffer | set_Buffer (void *dat, int len) |
Buffer型変数のバッファ部を新しく作り, そのバッファに bufをコピーする.. | |
Buffer | make_Buffer_randomstr (int n) |
ランダムな n文字から,Buffer型変数のバッファ部をつくり出す. | |
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 | clear_Buffer (Buffer *str) |
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 len) |
任意のバイナリデータsrcを Buffer型変数dstへ lenバイト copyする | |
int | cat_b2Buffer (void *src, Buffer *dst, int len) |
任意のバイナリデータsrcを Buffer型変数dstへ lenバイト catする. | |
int | ins_b2Buffer (void *src, Buffer *dst, int len) |
任意のバイナリデータ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の前に 挿入する. | |
int | cmp_Buffer (Buffer src, Buffer dst, int n) |
バッファ部の比較. | |
Buffer | encode_base64_Buffer (Buffer buf) |
バイナリデータ buf.bufの buf.vldszバイトを Base64にエンコード する | |
Buffer | decode_base64_Buffer (Buffer str) |
strのバッファを Base64からデコードする | |
Buffer | encode_base64_filename_Buffer (Buffer buf) |
バイナリデータ bufを Base64で encodeしてファイル名を作る.ただし '/' は '$' として扱う. | |
Buffer | decode_base64_filename_Buffer (Buffer str) |
bufを Base64で decodeしてバイナリデータを取り出す.ただし '$' は '/' として扱う. | |
Buffer | get_line_Buffer (Buffer str, int n) |
複数行の文字列バッファから任意の行を取り出す. | |
Buffer | get_seq_data_Buffer (Buffer str, int *ptr) |
複数行の文字列バッファ内の行データをシーケンシャルに取り出す. | |
Buffer | awk_Buffer (Buffer str, char cc, int n) |
Buffer文字列に対する awk.. | |
Buffer | cawk_Buffer (Buffer str, char cc, int n) |
Buffer文字列に対する(変形の)awk.. | |
Buffer | pack_Buffer (Buffer buf, char cc) |
文字列の先頭のcc(複数),終わりのcc(複数),TAB, CR, LF を削除 | |
void | kanji_convert_Buffer (Buffer *str) |
大域変数 KanjiCode (tools.h) に従って漢字コードを変換する. | |
Buffer | randstr_Buffer (int n) |
英数字を n個生成 | |
Buffer | randbit_Buffer (int n) |
ビットを n個生成 | |
Buffer | dump_Buffer (Buffer buf) |
Buffer型変数のデバッグ用 16進を Buffer型変数に出力する.. | |
int | recalc_strlen_Buffer (Buffer *buf) |
Buffer型変数のデータ部を文字列と見なして,その長さを返す.. | |
void | chomp_Buffer (Buffer *str) |
最初の改行コード以降を無視する. | |
int | isText_Buffer (Buffer buf) |
Buffer型変数 bufのバッファ部がテキストかどうか検査する.. | |
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_Buffer2_fp (Buffer key, Buffer buf, FILE *fp) |
ファイル fp へ 2つのBuffer型変数 keyと bufを書き込む | |
int | save_Buffer_fp (Buffer buf, FILE *fp) |
ファイル fp へ Buffer型変数の buf部を書き込む | |
Buffer | read_Buffer_fp (FILE *fp) |
ファイル fp から Buffer型変数の 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 |
Definition in file buffer.c.
#define DUMP_BUFFER_CHAR_START 51 |
Definition at line 1196 of file buffer.c.
Referenced by dump_Buffer().
#define DUMP_BUFFER_DELI_START 48 |
Definition at line 1195 of file buffer.c.
Referenced by dump_Buffer().
#define DUMP_BUFFER_LINE_SIZE 85 |
Definition at line 1194 of file buffer.c.
Referenced by dump_Buffer().
Buffer awk_Buffer(Buffer str, char cc, int n)
Buffer文字列に対する awk.
ccを区切り記号として, strのバッファ内の n番目の項目を返す.
str | 操作対象文字列. | |
cc | 区切り文字. | |
n | 項目の指定.1から数える. |
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 }
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は文字列として扱われる.
src | cat元の任意データへのポインタ. | |
dst | cat先のBuffer型変数へのポインタ. | |
len | catするバイト数. |
0以上 | dstのバッファにコピーされた文字数. | |
JBXL_NULL_EEROR | srcまたは dstが NULL | |
JBXL_MALLOC_ERROR | メモリの確保に失敗した.何も実行されなかった. |
func(Buffer buf){ ............... cat_b2Buffer(&src, &buf, n); ............... }
func(Buffer* buf){ ............... cat_b2Buffer(&src, buf, n); ............... }
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 }
int cat_Buffer(Buffer* src, Buffer* dst)
Buffer変数 srcから dstへバッファを catする.
もし, dstに srcの バッファを catするだけのスペースが無い場合は 新たにバッファ領域を確保して catする.
src | cat元へのポインタ. | |
dst | cat先へのポインタ. |
0以上 | dstのバッファにコピーされた文字数. | |
JBXL_NULL_EEROR | srcまたは dstが NULL | |
JBXL_MALLOC_ERROR | メモリの確保に失敗した.何も実行されなかった. |
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 }
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 }
Buffer cawk_Buffer(Buffer str, char cc, int n)
Buffer文字列に対する(変形の)awk.
ccを区切り記号として, strのバッファ内の n番目の項目を返す.
n は 1から数える.連続する cc(区切り)は一つの区切りとみなす.
str | 操作対象文字列. | |
cc | 区切り文字. | |
n | 項目の指定.1から数える. |
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 }
void chomp_Buffer | ( | Buffer * | str | ) |
void chomp_Buffer(Buffer* str)
最初の改行コード以降を無視する.
最初の改行コードに場所に,'\0'が代入される.
[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 }
void clear_Buffer | ( | Buffer * | str | ) |
void clear_Buffer(Buffer* str)
Buffer型変数 のバッファ部を 0クリアする.
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 }
int cmp_Buffer(Buffer src, Buffer dst, int n)
バッファ部の比較.
Buffer変数 srcと dstのバッファ部分を比較する.
n<=0 なら 完全一致, n>0 なら 先頭から nバイト比較する.
src | 比較元へのポインタ. | |
dst | 比較先へのポインタ. | |
n | 比較文字数. |
0 | srcと dstは一致している. | |
1 | srcは dstと一致していない. | |
JBXL_NULL_ERROR | バッファが NULL | |
JBXL_BUFFER_CMP_ERROR | n が vldsz より大きい |
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は文字列として扱われる.
src | copy元の任意データへのポインタ. | |
dst | copy先のBuffer型変数へのポインタ. | |
len | copyするバイト数. |
0以上 | dstのバッファにコピーされた文字数. | |
JBXL_NULL_EEROR | srcまたは dstが NULL | |
JBXL_MALLOC_ERROR | メモリの確保に失敗した.何も実行されなかった. |
func(Buffer buf){ ............... copy_b2Buffer(&src, &buf, n); ............... }
func(Buffer* buf){ ............... copy_b2Buffer(&src, buf, n); ............... }
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 }
int copy_Buffer(Buffer* src, Buffer* dst)
Buffer型変数 srcから dstへバッファをコピーする.
もし, dstに srcのバッファをコピーするだけのスペースが無い場合は, 新たにバッファ領域を確保してコピーする.
src | コピー元へのポインタ. | |
dst | コピー先へのポインタ. |
0以上 | dstのバッファにコピーされた文字数. | |
JBXL_NULL_EEROR | srcまたは dstが NULL | |
JBXL_MALLOC_ERROR | メモリの確保に失敗した.何も実行されなかった. |
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 }
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 }
Buffer decode_base64_Buffer(Buffer str)
strのバッファを Base64からデコードする.
変換は str.bufの先頭から順次行われる.A-Za-z0-9+/ 以外は無視する(例えば改行コード).
入力バッファ部が 4byte(6bit*4)の場合, 出力バッファ部は 3byte (8bit*3)となる.
入力バッファ部のバイト数が 4の倍数でない場合(不正なデータ), 足りない入力バッファ部には '='が挿入されているものとみなす.
str | Base64からデコードする文字列. |
"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 }
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 }
void del_Buffer | ( | Buffer ** | buf | ) |
new_Buffer()で作り出した Buffer型変数を削除する.
buf | 削除する 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 }
Buffer dump_Buffer(Buffer buf)
Buffer型変数のデバッグ用 16進を Buffer型変数に出力する.
buf.bufの buf.vldszバイトを16進表示する.
buf.vldsz<0 の場合は 文字列とみなす.
buf | 変換する 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 }
Buffer型変数のコピーをつくる.
buf | コピーする変数. |
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 }
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 となる.
buf | Base64にエンコードするデータ. |
'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 }
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 }
Buffer erase_bBuffer(Buffer buf, char* bin, int len)
buf.buf 中にある bin のデータ(各1Byte,順不同)を削除する.
buf | 操作する Buffer変数 | |
bin | 削除するデータを格納したメモリへのポインタ | |
len | binデータの長さ |
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 }
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 }
int fgets_Buffer | ( | Buffer * | str, | |
FILE * | fp | |||
) |
int fgets_Buffer(Buffer* str, FILE* fp)
拡張fgets.文字列の読み込みに使用する.改行コードは削除する.
strのバッファは予め十分な大きさを確保しておかなければならない.
str | 文字列を読みこむための Buffer型データバッファ. | |
fp | 文字列を読みこむファイルへのポインタ. |
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 }
void free_Buffer | ( | Buffer * | buf | ) |
Buffer型変数のバッファ部を解放する.
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().
Buffer get_line_Buffer(Buffer str, int n)
複数行の文字列バッファから任意の行を取り出す.
strのバッファ内の n行目を取り出す.改行コードは削除される.
n は 1から数える.取り出した行を Buffer型変数のバッファに格納(コピー)して返す.
str | 操作対象の文字列(含む改行). | |
n | 行の指定.1から数える. |
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 }
Buffer get_seq_data_Buffer(Buffer str, int* ptr)
複数行の文字列バッファ内の行データをシーケンシャルに取り出す.
改行コードは削除される.連続して呼び出す場合,一番最初は *ptrに 0を設定し,以後は *ptrの内容は変えない.
取り出した行を Buffer型変数のバッファに格納して返す.
バッファを越えて行を読もうとした時は NULL を返す. バッファの終わりは valdszで知る.
[in] | str | 操作対象文の Buffer型データ(含む改行) |
[in,out] | ptr | in: 読み込みを開始するデータの位置(バイト). out: 次のデータが始まる位置(バイト). |
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 }
Buffer init_Buffer | ( | void | ) |
初期化した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は文字列として扱われる.
src | 挿入元の任意データへのポインタ. | |
dst | 挿入先のBuffer型変数へのポインタ. | |
len | 挿入するバイト数. |
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 }
int ins_Buffer(Buffer* src, Buffer* dst)
Buffer変数 dst の前に src を挿入する.
src | 挿入元のポインタ. | |
dst | 挿入先へのポインタ. |
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 }
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 }
int isText_Buffer | ( | Buffer | buf | ) |
Buffer型変数 bufのバッファ部がテキストかどうか検査する.
buf | 検査対象の Buffer型変数. |
TRUE | バッファ部はテキストである. | |
FALSE | バッファ部はテキストではない. |
Definition at line 1310 of file buffer.c.
References Buffer::buf, FALSE, TRUE, and Buffer::vldsz.
void kanji_convert_Buffer | ( | Buffer * | str | ) |
void kanji_convert_Buffer(Buffer* str)
大域変数 KanjiCode (tools.h) に従って漢字コードを変換する.
[in,out] | str | 変換する文字列を持つBuffer型データ.内容が書き換えられる. |
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 }
Buffer make_Buffer | ( | int | sz | ) |
Buffer型変数のバッファ部をつくり出す.
sz は Buffer型変数のバッファの大きさ.
バッファ部は 0x00で初期化される.bufsz=sz, vldsz=0 となる.
バッファ部の作成に失敗した場合,バッファのサイズ(bufsz)は 0,バッファへのポインタは NULLとなる.
sz | 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変数の初期化にも使用される.
cc | Buffer型変数のバッファに格納する文字 |
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 }
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 }
Buffer* new_Buffer | ( | int | sz | ) |
Buffer* new_Buffer(int sz)
空のBuffer型変数を生成する.
sz | Buffer型変数のバッファの大きさ.0以下の場合は,バッファ部は作成しない. |
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 }
Buffer pack_Buffer(Buffer buf, char cc)
文字列の先頭のcc(複数),終わりのcc(複数),TAB, CR, LF を削除
文字列の先頭,終わり部分でない場所にある ccは削除されない.
buf | 操作対象の Buffer型変数 | |
cc | 削除する文字 |
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 }
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 }
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 }
Buffer randbit_Buffer | ( | int | n | ) |
ランダムに n bitのバイナリを生成する.
n | 出力する bit数. |
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 }
Buffer randstr_Buffer | ( | int | n | ) |
ランダムに A-Za-z0-9+/ までの文字を n文字生成する.
n | 出力する文字数. |
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 }
int read_Buffer2_fp(Buffer* key, Buffer* buf, FILE* fp)
ファイル fp から 2つのBuffer型変数の keyと bufを読み込む.
データ検索用ファイルからの読み込み時に使用する.
key | 読み込むキー部のBuffer型変数へのポインタ. | |
buf | 読み込むデータ部のBuffer型変数へのポインタ. | |
fp | ファイルディスクリプタ |
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 }
Buffer read_Buffer_data | ( | FILE * | fp, | |
int | sz | |||
) |
Buffer read_Buffer_data(FILE* fp, int sz)
ファイルポインタ fp から szバイトをBuffer型変数に読み込む.
fp | ファイルポインタ | |
sz | 読み込みサイズ |
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 }
Buffer read_Buffer_file | ( | const char * | fn | ) |
Buffer read_Buffer_file(const char* fn)
ファイル fn の内容を Buffer型変数に読み込む.
fn | ファイル名 |
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 }
Buffer read_Buffer_fp | ( | FILE * | fp | ) |
Buffer read_Buffer_fp(FILE* fp)
ファイル fp から Buffer型変数の buf部を読み込む.
ただしファイルの先頭にファイルサイズを示す4Byteの値が必要
fp | ファイルディスクリプタ |
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 }
int read_lines_Buffer | ( | Buffer * | str, | |
FILE * | fp | |||
) |
int read_lines_Buffer(Buffer* str, FILE* fp)
複数文字列行の読み込み.文字列の読み込みに使用する.
strのバッファは予め十分な大きさを確保しておかなければならない.
str | 文字列を読みこむための Buffer型データバッファ. | |
fp | 文字列を読みこむファイルへのポインタ. |
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 }
int recalc_strlen_Buffer | ( | Buffer * | buf | ) |
int recalc_strlen_Buffer(Buffer* buf)
Buffer型変数のデータ部を文字列と見なして,その長さを返す.
vldsz は再計算される.
[in] | buf | 操作対象文字列 |
[out] | buf | vldsz 文字列の長さ.再計算される. |
Definition at line 1266 of file buffer.c.
References Buffer::buf, and Buffer::vldsz.
Buffer replace_sBuffer_bystr(Buffer buf, const char* frm, const char* tos)
buf.buf中の文字列 frmを tosで置き換えた 新しい Bufferを返す.
frm は buf.buf とメモリ領域が重なってはいけない.
文字列型の Bufferにのみ対応.
buf | 操作する Buffer変数 | |
frm | 変換する文字列 | |
tos | 変換後の文字列 |
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 }
int replace_sBuffer_file(char* fn, Buffer frm, Buffer tos)
テキストファイル中の frm の文字列を tos に書き換える
fn | 操作するファイル名 | |
frm | 変換する文字列 | |
tos | 変換後の文字列 |
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 }
Buffer rept_Buffer | ( | unsigned char | cc, | |
int | n | |||
) |
Buffer rept_Buffer(unsigned char cc, int n)
文字 ccを n回繰り返したBuffer型データを返す.
cc | 繰り返す文字. | |
n | 繰り返す回数. |
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 }
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() と同じ.
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 }
int save_Buffer2_fp(Buffer key, Buffer buf, FILE* fp)
ファイル fp へ 2つのBuffer型変数 keyと bufを書き込む.
データ検索用ファイルを作成するときに使用する.
key | 書き込むキー部のBuffer型変数. | |
buf | 書き込むデータ部のBuffer型変数. | |
fp | ファイルディスクリプタ |
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 }
int save_Buffer_file | ( | Buffer | buf, | |
char * | fn | |||
) |
int save_Buffer_file(Buffer buf, char* fn)
ファイル fn へ Buffer型変数の buf部を書き込む.
buf | 書き込む Buffer型変数. | |
fn | ファイル名 |
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 }
int save_Buffer_fp | ( | Buffer | buf, | |
FILE * | fp | |||
) |
int save_Buffer_fp(Buffer buf, FILE* fp)
ファイル fp へ Buffer型変数の buf部を書き込む.
buf部に先立ち,buf部の大きさが intで書き込まれる.
buf | 書き込む Buffer型変数. | |
fp | ファイルディスクリプタ |
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 }
Buffer set_Buffer | ( | void * | dat, | |
int | len | |||
) |
Buffer set_Buffer(void* dat, int len)
Buffer型変数のバッファ部を新しく作り, そのバッファに bufをコピーする.
lenはコピーするデータ長.もし lenが 0未満の場合は, bufは文字列として扱われる.
buf が文字列の場合は make_Buffer_bystr() も使用可能.
dat | コピーするバッファへのポインタ. | |
len | バッファ長(バイト単位). |
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 }