JunkBox_Lib++ (for Windows) 1.10.1
Loading...
Searching...
No Matches
buffer.cpp File Reference
#include "buffer.h"
#include "jbxl_state.h"
Include dependency graph for buffer.cpp:

Go to the source code of this file.

Macros

#define DUMP_BUFFER_LINE_SIZE   85
 
#define DUMP_BUFFER_DELI_START   48
 
#define DUMP_BUFFER_CHAR_START   51
 

Functions

Buffernew_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 copy_r2Buffer (float src, Buffer *dst)
 実数 srcを文字列に変換して,dstへ copyする.
 
int cat_r2Buffer (float src, Buffer *dst)
 実数 srcを文字列に変換して,dstへ catする.
 
int ins_r2Buffer (float 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_Buffer_bin (unsigned char *bin, unsigned int sz, int nopad)
 sz バイトの バイナリデータ binを Base64にエンコード する.
 
Buffer encode_base64_filename_Buffer (Buffer buf, unsigned char cc)
 バイナリデータ bufを Base64で encodeしてファイル名を作る.ただし '/' は cc として扱う.
 
Buffer decode_base64_filename_Buffer (Buffer str, unsigned char cc)
 bufを Base64で decodeしてバイナリデータを取り出す.ただし cc は '/' として扱う.
 
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 add_indent_Buffer (Buffer *buf, char cc, int len)
 インデント(cc x num) を付加する.
 
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() と同じ
 
void rewrite_Buffer_bychar (Buffer *buf, const char frm, const char toc)
 buf.buf中の文字 frmを tocで置き換える
 
int save_Buffer2_format_fp (Buffer key, Buffer buf, FILE *fp)
 ファイル fp へ 2つのBuffer型変数 keyと bufを書き込む
 
int save_Buffer_format_fp (Buffer buf, FILE *fp)
 ファイル fp へ Buffer型変数の buf部を書き込む
 
Buffer read_Buffer_format_fp (FILE *fp)
 ファイル fp から Buffer型変数の buf部を読み込む
 
int read_Buffer2_format_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
 

Macro Definition Documentation

◆ DUMP_BUFFER_CHAR_START

#define DUMP_BUFFER_CHAR_START   51

Definition at line 1241 of file buffer.cpp.

Referenced by dump_Buffer().

◆ DUMP_BUFFER_DELI_START

#define DUMP_BUFFER_DELI_START   48

Definition at line 1240 of file buffer.cpp.

Referenced by dump_Buffer().

◆ DUMP_BUFFER_LINE_SIZE

#define DUMP_BUFFER_LINE_SIZE   85

Definition at line 1239 of file buffer.cpp.

Referenced by dump_Buffer().

Function Documentation

◆ add_indent_Buffer()

void add_indent_Buffer ( Buffer * buf,
char cc,
int len )

void add_indent_Buffer(Buffer* buf, char* cc, int num);

buf にインデント(cc x num個) を付加する.

Parameters
bufインデントを付加するバッファ.
ccインデントの文字.' ' や '\t' param len インデントの文字数.

Definition at line 1327 of file buffer.cpp.

1328{
1329 char* indent = (char*)malloc(len + 1);
1330 if (indent!=NULL) {
1331 memset(indent, cc, len);
1332 indent[len] = '\0';
1333 cat_s2Buffer(indent, buf);
1334 free(indent);
1335 }
1336}
#define cat_s2Buffer(src, dst)
cat_b2Buffer()
Definition buffer.h:122

References cat_s2Buffer.

Referenced by xml_close_node_Buffer(), and xml_open_node_Buffer().

Here is the caller graph for this function:

◆ awk_Buffer()

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 1050 of file buffer.cpp.

1051{
1052 int i, j, pos, cnt;
1053 unsigned char* buf = str.buf;
1054 Buffer item = init_Buffer();
1055
1056 if (buf==NULL) return item;
1057 if (n<=0) n = 1;
1058
1059 for(i=0,j=0; j<n-1; j++) {
1060 while (buf[i]!='\0' && buf[i]!=cc) i++;
1061 if (buf[i]==cc) i++;
1062 }
1063 if (buf[i]=='\0') return item;
1064
1065 pos = i;
1066 while (buf[i]!='\0' && buf[i]!=cc) i++;
1067 cnt = i - pos;
1068
1069 item = make_Buffer(cnt);
1070 if (item.buf==NULL) return item;
1071
1072 for (i=0; i<cnt; i++) item.buf[i] = buf[pos+i];
1073 item.vldsz = (int)strlen((const char*)item.buf);
1074
1075 return item;
1076}
Buffer make_Buffer(int sz)
Buffer型変数のバッファ部をつくり出す.
Definition buffer.cpp:71
Buffer init_Buffer()
初期化したBuffer型変数を返す.
Definition buffer.cpp:47
int vldsz
データの長さ.バイナリデータの場合も使用可能.文字列の場合は 0x00 を含まない.
Definition buffer.h:37
unsigned char * buf
バッファの先頭へのポインタ.str[bufsz]は必ず 0x00となる.
Definition buffer.h:39

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

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

Here is the call graph for this function:
Here is the caller graph for this function:

◆ cat_b2Buffer()

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

Definition at line 585 of file buffer.cpp.

586{
587 int sz, dz;
588
589 if (src==NULL || dst==NULL) return JBXL_NULL_ERROR;
590 if (len<0) sz = (int)strlen((const char*)src);
591 else sz = len;
592 if (sz<=0) return 0;
593
594 dz = dst->vldsz;
595 if (dz<0) {
596 if (dst->buf!=NULL) dz = (int)strlen((const char*)dst->buf);
597 else dz = 0;
598 }
599
600 if (dst->bufsz < sz+dz) {
601 Buffer buf;
602 buf.state = dst->state;
603 buf.bufsz = (int)((dst->bufsz+sz+1)*BUFFER_FACT);
604 buf.vldsz = dz;
605 buf.buf = (unsigned char*)malloc(buf.bufsz+1);
606 if (buf.buf==NULL) return JBXL_MALLOC_ERROR;
607
608 memcpy(buf.buf, dst->buf, dz);
609 buf.buf[dz] = '\0';
610 free_Buffer(dst);
611 *dst = buf;
612 }
613
614 memcpy(dst->buf+dz, src, sz);
615 dst->buf[dz+sz] = '\0';
616 dst->vldsz = sz + dz;
617
618 return dst->vldsz;
619}
void free_Buffer(Buffer *buf)
Buffer型変数のバッファ部を解放する
Definition buffer.cpp:128
#define BUFFER_FACT
Buffer 変数の領域確保のための領域確保倍率
Definition buffer.h:43
#define JBXL_NULL_ERROR
参照先のアドレスが NULL
Definition jbxl_state.h:36
#define JBXL_MALLOC_ERROR
メモリ確保エラー
Definition jbxl_state.h:41
int bufsz
確保してあるバッファの大きさ - 1.
Definition buffer.h:36
int state
変数の状態を表す.正常は JBXL_NORMAL
Definition buffer.h:38

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(), cat_r2Buffer(), GLTFData::createBinDataAoS(), GLTFData::createBinDataIBM(), GLTFData::createBinDataSeqAoS(), GLTFData::createBinDataSeqSoA(), GLTFData::createBinDataSoA(), deflate2gzip(), get_Buffer_ringBuffer(), and send_http_file().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ cat_Buffer()

int cat_Buffer ( Buffer * src,
Buffer * dst )

int cat_Buffer(Buffer* src, Buffer* dst)

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

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

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

Definition at line 384 of file buffer.cpp.

385{
386 int sz, dz;
387
388 if (src==NULL || dst==NULL) return JBXL_NULL_ERROR;
389 if (src->buf==NULL) return JBXL_NULL_ERROR;
390
391 sz = src->vldsz;
392 if (sz<0) sz = (int)strlen((const char*)src->buf);
393 if (sz==0) return 0;
394
395 dz = dst->vldsz;
396 if (dz<0) {
397 if (dst->buf!=NULL) dz = (int)strlen((const char*)dst->buf);
398 else dz = 0;
399 }
400
401 if (dst->bufsz < sz+dz) {
402 Buffer buf;
403 buf.state = dst->state;
404 buf.bufsz = (int)((dst->bufsz+sz+1)*BUFFER_FACT);
405 buf.vldsz = dz;
406 buf.buf = (unsigned char*)malloc(buf.bufsz+1);
407 if (buf.buf==NULL) return JBXL_MALLOC_ERROR;
408
409 memcpy(buf.buf, dst->buf, dz);
410 buf.buf[dz] = '\0';
411 free_Buffer(dst);
412 *dst = buf;
413/*
414 Buffer buf; // dstの待避
415 buf.bufsz = dst->bufsz;
416 buf.vldsz = dz;
417 buf.buf = (unsigned char*)malloc(buf.bufsz+1);
418 if (buf.buf==NULL) return JBXL_MALLOC_ERROR;
419
420 buf.buf[buf.bufsz] = '\0';
421 memcpy(buf.buf, dst->buf, buf.bufsz);
422 free_Buffer(dst);
423
424 //dst->bufsz = (int)((buf.bufsz+src->bufsz+1)*BUFFER_FACT);
425 dst->bufsz = (int)((buf.bufsz+sz+1)*BUFFER_FACT);
426 dst->buf = (unsigned char*)malloc(dst->bufsz+1);
427 if (dst->buf==NULL) {
428 *dst = buf;
429 return JBXL_MALLOC_ERROR;
430 }
431 memset(dst->buf, 0, dst->bufsz+1);
432 memcpy(dst->buf, buf.buf, buf.vldsz);
433 free_Buffer(&buf);
434*/
435 }
436
437 //memset(dst->buf+dz, 0, dst->bufsz-dz+1); too late
438 memcpy(dst->buf+dz, src->buf, sz);
439 dst->buf[dz+sz] = '\0';
440 dst->vldsz = sz + dz;
441
442 return dst->vldsz;
443}

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

Referenced by CBVHTool::_get_bvh_params(), _json_to_Buffer(), ColladaXML::addController(), ColladaXML::addGeometry(), ColladaXML::addNormalSource(), ColladaXML::addScene(), ColladaXML::addTexcrdSource(), ColladaXML::addVertexSource(), ColladaXML::addVerticesPos(), ColladaXML::addWeightSource(), decomp_url(), extract_tTar(), gz_decode_data(), http_proxy_header_analyze(), ins_b2Buffer(), ins_Buffer(), join_Buffer_dim(), BrepSolidList::outputFile(), ColladaXML::outputFile(), CLogRingBuffer::putRingBuffer(), read_lines_Buffer(), rebuild_http_Buffer(), recv_http_chunked(), recv_http_chunked_remain(), recv_http_closed(), recv_http_content(), restore_protocol_contents(), restore_protocol_header(), search_protocol_header(), MeshFacetNode::setMaterialID(), 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().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ cat_i2Buffer()

int cat_i2Buffer ( int src,
Buffer * dst )

int cat_i2Buffer(int src, Buffer* dst)

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

Definition at line 678 of file buffer.cpp.

679{
680 char num[LEN_INT];
681
682 snprintf(num, LEN_INT-1, "%d", src);
683 return cat_b2Buffer((void*)num, dst, (int)strlen(num));
684}
#define snprintf
Definition common.h:56
#define LEN_INT
log 2^64 + '\0' + 1(予備)
Definition common.h:171

References cat_b2Buffer(), LEN_INT, and snprintf.

Referenced by GLTFData::addNodes().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ cat_r2Buffer()

int cat_r2Buffer ( float src,
Buffer * dst )

int cat_r2Buffer(float src, Buffer* dst)

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

Definition at line 720 of file buffer.cpp.

721{
722 char num[LEN_REAL];
723
724 snprintf(num, LEN_REAL-1, "%f", src);
725 return cat_b2Buffer((void*)num, dst, (int)strlen(num));
726}
#define LEN_REAL
15*2 + '\0' + 1(予備)
Definition common.h:170

References cat_b2Buffer(), LEN_REAL, and snprintf.

Here is the call graph for this function:

◆ cawk_Buffer()

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 1094 of file buffer.cpp.

1095{
1096 int i, j, pos, cnt;
1097 unsigned char* buf = str.buf;
1098 Buffer item = init_Buffer();
1099
1100 if (buf==NULL) return item;
1101 if (n<=0) n = 1;
1102
1103 i = 0;
1104 for(j=0; j<n-1; j++) {
1105 while (buf[i]!='\0' && buf[i]!=cc) i++;
1106 while (buf[i]!='\0' && buf[i]==cc) i++;
1107 }
1108 if (buf[i]=='\0') return item;
1109
1110 pos = i;
1111 while (buf[i]!='\0' && buf[i]!=cc) i++;
1112 cnt = i - pos;
1113
1114 item = make_Buffer(cnt);
1115 if (item.buf==NULL) return item;
1116
1117 for (i=0; i<cnt; i++) item.buf[i] = buf[pos+i];
1118 item.vldsz = (int)strlen((const char*)item.buf);
1119
1120 return item;
1121}

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

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

Here is the call graph for this function:
Here is the caller graph for this function:

◆ chomp_Buffer()

void chomp_Buffer ( Buffer * str)

void chomp_Buffer(Buffer* str)

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

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

Definition at line 1347 of file buffer.cpp.

1348{
1349 int i, len;
1350
1351 if (str->buf==NULL) return;
1352
1353 len = (int)strlen((const char*)str->buf);
1354 for (i=0; i<len; i++) {
1355 if (str->buf[i]==CHAR_LF || str->buf[i]==CHAR_CR) {
1356 str->buf[i] = '\0';
1357 str->vldsz = (int)strlen((const char*)str->buf);
1358 return;
1359 }
1360 }
1361}
#define CHAR_CR
改行
Definition tools.h:78
#define CHAR_LF
ラインフィード
Definition tools.h:79

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

◆ clear_Buffer()

void clear_Buffer ( Buffer * str)

void clear_Buffer(Buffer* str)

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

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

Definition at line 272 of file buffer.cpp.

273{
274 if (str->buf!=NULL) memset(str->buf, 0, str->bufsz+1);
275 str->vldsz = 0;
276 str->state = JBXL_NORMAL;
277}
#define JBXL_NORMAL
正常
Definition jbxl_state.h:32

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

Referenced by erase_bBuffer(), get_protocol_header_list_seq(), read_lines_Buffer(), recv_http_Buffer(), recv_http_chunked(), tcp_recv_lines_Buffer(), and tcp_recv_mstream_Buffer().

Here is the caller graph for this function:

◆ cmp_Buffer()

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
0srcと dstは一致している.
1srcは dstと一致していない.
JBXL_NULL_ERRORバッファが NULL
JBXL_BUFFER_CMP_ERRORn が vldsz より大きい
Attention
文字列データのみ適用.コーディングがベタベタ.

Definition at line 762 of file buffer.cpp.

763{
764 int i;
765
766 if (src.buf==NULL || dst.buf==NULL) return JBXL_NULL_ERROR;
767 if (n>src.vldsz || n>dst.vldsz) return JBXL_BUFFER_CMP_ERROR;
768
769 if (n<=0) {
770 if (src.vldsz!=dst.vldsz) return 1;
771 else n = src.vldsz;
772 }
773
774 for (i=0; i<n; i++) {
775 if (src.buf[i]!=dst.buf[i]) return 1;
776 }
777 return 0;
778}
#define JBXL_BUFFER_CMP_ERROR
比較文字数が vldsz より大きい
Definition jbxl_state.h:61

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

◆ copy_b2Buffer()

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

Definition at line 518 of file buffer.cpp.

519{
520 int sz, dz;
521
522 if (src==NULL || dst==NULL) return JBXL_NULL_ERROR;
523 if (len<0) sz = (int)strlen((const char*)src);
524 else sz = len;
525 if (sz<=0) return 0;
526
527 if (dst->bufsz < sz) {
528 unsigned char* buf;
529 dz = (int)((sz+1)*BUFFER_FACT);
530 buf = (unsigned char*)malloc(dz+1);
531 if (buf==NULL) return JBXL_MALLOC_ERROR;
532 memset(buf, 0, dz+1);
533
534 if (dst->buf!=NULL) free(dst->buf);
535 dst->bufsz = dz;
536 dst->buf = buf;
537 }
538
539 memcpy(dst->buf, src, sz);
540 dst->buf[sz] = '\0';
541 dst->vldsz = sz;
542 dst->state = JBXL_NORMAL;
543
544 return sz;
545}

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

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

Here is the caller graph for this function:

◆ copy_Buffer()

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_EERORsrcまたは dstが NULL
JBXL_MALLOC_ERRORメモリの確保に失敗した.何も実行されなかった.
Attention
注(重要): 関数内で使用する場合,参照型以外の引数に対してこの関数を用いてはいけない. つまり以下のような使い方は間違い.
func(Buffer buf){
...............
copy_Buffer(&src, &buf);
...............
}
int copy_Buffer(Buffer *src, Buffer *dst)
Buffer型変数 srcから dstへバッファをコピーする.
Definition buffer.cpp:315
これは下記のように変更する.
func(Buffer* buf){
...............
copy_Buffer(&src, buf);
...............
}
理由:関数内でバッファ部の大きさが変わる可能性があるが, 呼び出した側ではそのことを知ることができない.

Definition at line 315 of file buffer.cpp.

316{
317 int sz, dz;
318
319 if (src==NULL || dst==NULL) return JBXL_NULL_ERROR;
320 if (src->buf==NULL) return JBXL_NULL_ERROR;
321
322 sz = src->vldsz;
323 if (sz<0) sz = (int)strlen((const char*)src->buf);
324 if (sz==0) return 0;
325
326 if (dst->bufsz < sz) {
327 unsigned char* buf;
328 //dz = (int)((src->bufsz+1)*BUFFER_FACT);
329 dz = (int)((sz+1)*BUFFER_FACT);
330 buf = (unsigned char*)malloc(dz+1);
331 if (buf==NULL) return JBXL_MALLOC_ERROR;
332 memset(buf, 0, dz+1);
333
334 free(dst->buf);
335 dst->bufsz = dz;
336 dst->buf = buf;
337 }
338
339 //memset(dst->buf, 0, dst->bufsz+1); too late
340 memcpy(dst->buf, src->buf, sz);
341 dst->buf[sz] = '\0';
342 dst->vldsz = sz;
343
344 return sz;
345}

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

Referenced by ColladaXML::addGeometry(), decomp_url(), erase_bBuffer(), expand_Buffer(), CLogRingBuffer::getRingBuffer(), CLogRingBuffer::getRingBuffer(), http_proxy_header_analyze(), ins_Buffer(), json_copy_data(), json_copy_val(), json_set_str_val(), CLogRingBuffer::putRingBuffer(), read_lines_Buffer(), recv_http_Buffer(), recv_http_file(), and restore_protocol_header().

Here is the caller graph for this function:

◆ copy_i2Buffer()

int copy_i2Buffer ( int src,
Buffer * dst )

int copy_i2Buffer(int src, Buffer* dst)

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

Definition at line 664 of file buffer.cpp.

665{
666 char num[LEN_INT];
667
668 snprintf(num, LEN_INT-1, "%d", src);
669 return copy_b2Buffer((void*)num, dst, (int)strlen(num));
670}

References copy_b2Buffer(), LEN_INT, and snprintf.

Referenced by json_append_array_int_val(), json_append_obj_int_val(), json_set_int_val(), and rebuild_http_Buffer().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ copy_r2Buffer()

int copy_r2Buffer ( float src,
Buffer * dst )

int copy_r2Buffer(float src, Buffer* dst)

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

Definition at line 706 of file buffer.cpp.

707{
708 char num[LEN_REAL];
709
710 snprintf(num, LEN_REAL-1, "%f", src);
711 return copy_b2Buffer((void*)num, dst, (int)strlen(num));
712}

References copy_b2Buffer(), LEN_REAL, and snprintf.

Referenced by json_append_array_real_val(), json_append_obj_real_val(), and json_set_real_val().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ decode_base64_Buffer()

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
strBase64からデコードする文字列.
Returns
Base64からデコードされたデータ(Buffer型)
"QQ" をデコードすると 'A',0x00 となる.

Definition at line 850 of file buffer.cpp.

851{
852 unsigned char* bas;
853 int sz;
854 Buffer dcd = init_Buffer();
855
856 if (str.buf==NULL) return dcd;
857
858 bas = decode_base64(str.buf, &sz);
859 if (bas==NULL) return dcd;
860
861 dcd = make_Buffer(sz);
862 if (dcd.buf==NULL) {
863 free(bas);
864 return dcd;
865 }
866
867 copy_b2Buffer(bas, &dcd, sz);
868 dcd.vldsz = sz;
869
870 free(bas);
871 return dcd;
872}
unsigned char * decode_base64(unsigned char *buf, int *sz)
bufを base64からデコードする.要 free()
Definition tools.cpp:2786

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

Referenced by Base64::decode(), decode_base64_filename_Buffer(), encrypt_Base64(), llsd_xml_get_content_bin(), read_tagged_Buffer(), and setkey_byBase64().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ decode_base64_filename_Buffer()

Buffer decode_base64_filename_Buffer ( Buffer str,
unsigned char cc )

Buffer decode_base64_filename_Buffer(Buffer str, unsigned char cc)

bufを Base64で decodeしてファイル名からバイナリデータを取り出す.ただし cc は '/' として扱う.

Definition at line 929 of file buffer.cpp.

930{
931 if (cc == 0x00) cc = '-';
932
933 int i;
934 for (i=0; i<str.vldsz; i++) {
935 if (str.buf[i]==cc) str.buf[i] = '/';
936 }
937
938 Buffer dec = decode_base64_Buffer(str);
939
940 return dec;
941}
Buffer decode_base64_Buffer(Buffer str)
strのバッファを Base64からデコードする
Definition buffer.cpp:850

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

Here is the call graph for this function:

◆ del_Buffer()

void del_Buffer ( Buffer ** buf)

void del_Buffer(Buffer** buf)

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

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

Definition at line 148 of file buffer.cpp.

149{
150 if (buf!=NULL && *buf!=NULL) {
151 if ((*buf)->buf!=NULL) free((*buf)->buf);
152 (*buf)->buf = NULL;
153 free(*buf);
154 *buf = NULL;
155 }
156}

◆ dump_Buffer()

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 1254 of file buffer.cpp.

1255{
1256 int sz;
1257 char wrkbuf[10];
1258 Buffer str = init_Buffer();
1259
1260 if (buf.buf==NULL) return str;
1261 if (buf.vldsz<0) sz = (int)strlen((const char*)buf.buf) + 1;
1262 else sz = buf.vldsz;
1263
1264 int lineno = (sz + 15)/16;
1265 str = make_Buffer(lineno*DUMP_BUFFER_LINE_SIZE+1);
1266
1267 int l;
1268 for (l=0; l<lineno; l++) {
1269 int sp = l*DUMP_BUFFER_LINE_SIZE;
1270 int i = 0;
1271 while (i<16) {
1272 sprintf(wrkbuf, "%02x ", buf.buf[l*16+i]);
1273 memcpy(str.buf+sp+i*3, wrkbuf, 3);
1274
1275 if (buf.buf[l*16+i]>=0x20 && buf.buf[l*16+i]<=0x7e) {
1276 sprintf(wrkbuf, "%c ", buf.buf[l*16+i]);
1277 memcpy(str.buf+sp+DUMP_BUFFER_CHAR_START+i*2, wrkbuf, 2);
1278 }
1279 else {
1280 memcpy(str.buf+sp+DUMP_BUFFER_CHAR_START+i*2, ". ", 2);
1281 }
1282
1283 if (l*16+i>=sz) {
1284 memcpy(str.buf+sp+i*3, " ", 3);
1285 memcpy(str.buf+sp+DUMP_BUFFER_CHAR_START+i*2, " ", 2);
1286 }
1287
1288 i++;
1289 }
1290 memcpy(str.buf+sp+DUMP_BUFFER_DELI_START, " ", 3);
1291 str.buf[sp+DUMP_BUFFER_LINE_SIZE-2] = '\r';
1292 str.buf[sp+DUMP_BUFFER_LINE_SIZE-1] = '\n';
1293 }
1294
1295 str.vldsz = lineno*DUMP_BUFFER_LINE_SIZE;
1296 return str;
1297}
#define DUMP_BUFFER_LINE_SIZE
Definition buffer.cpp:1239
#define DUMP_BUFFER_DELI_START
Definition buffer.cpp:1240
#define DUMP_BUFFER_CHAR_START
Definition buffer.cpp:1241

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

Referenced by CLogRingBuffer::rewriteBinHexRingBuffer().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ dup_Buffer()

Buffer dup_Buffer ( Buffer buf)

Buffer dup_Buffer(Buffer buf)

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

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

Definition at line 211 of file buffer.cpp.

212{
213 Buffer str = buf;
214
215 if (buf.bufsz>=0 && buf.buf!=NULL) {
216 str.buf = (unsigned char*)malloc(buf.bufsz+1);
217 memcpy(str.buf, buf.buf, buf.bufsz);
218 str.buf[buf.bufsz] = '\0';
219 }
220 //
221 return str;
222}

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

Referenced by _copy_tTree_byctrl(), CBVHTool::_get_bvh_params(), ColladaXML::addController(), ColladaXML::addGeometry(), GLTFData::addNodes(), ColladaXML::addScene(), GLTFData::addShell(), OBJData::addShell(), buffer_key_tList(), decomp_hostport(), decomp_url(), TextureParam::dup(), dup_tList_data(), erase_bBuffer(), extract_tTar(), get_Buffer_dim_tList(), get_Buffer_dim_tList_value(), get_dir_files(), get_node_content(), get_value_tTree(), json_parse_seq(), make_tList_data(), OBJData::output_obj(), read_tagged_Buffer(), rebuild_http_Buffer(), relative_path_Buffer(), save_tagged_Buffer(), search_protocol_header(), set_protocol_contents(), set_tList_node_byBuffer(), and tcp_send_sBufferln().

Here is the caller graph for this function:

◆ encode_base64_Buffer()

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
bufBase64にエンコードするデータ.
Returns
Base64にエンコードされた文字列(Buffer型)
'A',0x00,0x01 を文字列(sz=1)とみなして符号化すると "QQ==" となる.
'A',0x00,0x01 の 3byteを符号化(sz=3)すると "QQAB" となる.

Definition at line 804 of file buffer.cpp.

805{
806 unsigned char* bas;
807 int sz;
808 Buffer ecd = init_Buffer();
809
810 //
811 if (buf.buf==NULL) return ecd;
812 if (buf.vldsz<0) sz = (int)strlen((const char*)buf.buf);
813 else sz = buf.vldsz;
814 if (sz<=0) return ecd;
815
816 bas = encode_base64(buf.buf, sz);
817 if (bas==NULL) return ecd;
818
819 sz = ((sz + 2)/3)*4 + 1;
820 ecd = make_Buffer(sz);
821 if (ecd.buf==NULL) {
822 free(bas);
823 return ecd;
824 }
825
826 copy_s2Buffer((char*)bas, &ecd);
827
828 free(bas);
829 return ecd;
830}
#define copy_s2Buffer(src, dst)
copy_b2Buffer()
Definition buffer.h:108
unsigned char * encode_base64(unsigned char *buf, int sz)
バイナリデータ bufを base64にエンコードする.要 free()
Definition tools.cpp:2848

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

Referenced by Base64::encode(), encode_base64_filename_Buffer(), encrypt_Base64(), llsd_bin_main_parse(), read_tagged_Buffer(), and save_tagged_Buffer().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ encode_base64_Buffer_bin()

Buffer encode_base64_Buffer_bin ( unsigned char * bin,
unsigned int sz,
int nopad )

Buffer encode_base64_Buffer_bin(unsigned char* bin, unsigned int sz, int nopad)

sz バイトの バイナリデータ binを Base64にエンコード する. nopad = TRUE の場合,データ末の パッド(=)は削除する.

Definition at line 881 of file buffer.cpp.

882{
883 unsigned char* str;
884 Buffer enc = init_Buffer();
885
886 if (bin==NULL) return enc;
887 if (sz<=0) sz = (unsigned)strlen((char*)bin);
888
889 str = encode_base64(bin, sz);
890 if (str==NULL) return enc;
891
892 if (nopad) {
893 unsigned int len = (unsigned int)strlen((char*)str);
894 if (str[len-2]=='=') str[len-2] = '\0';
895 else if (str[len-1]=='=') str[len-1] = '\0';
896 }
897 enc = make_Buffer_bystr(str);
898 free(str);
899
900 return enc;
901}
#define make_Buffer_bystr(str)
set_Buffer()
Definition buffer.h:57

References encode_base64(), init_Buffer(), and make_Buffer_bystr.

Referenced by Base64::encode_Buffer_bin().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ encode_base64_filename_Buffer()

Buffer encode_base64_filename_Buffer ( Buffer buf,
unsigned char cc )

Buffer encode_base64_filename_Buffer(Buffer buf, unsigned char cc)

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

Definition at line 909 of file buffer.cpp.

910{
911 if (cc == 0x00) cc = '-';
912
913 Buffer enc = encode_base64_Buffer(buf);
914
915 int i;
916 for (i=0; i<enc.vldsz; i++) {
917 if (enc.buf[i]=='/') enc.buf[i] = cc;
918 }
919
920 return enc;
921}
Buffer encode_base64_Buffer(Buffer buf)
バイナリデータ buf.bufの buf.vldszバイトを Base64にエンコード する
Definition buffer.cpp:804

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

Here is the call graph for this function:

◆ erase_bBuffer()

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削除するデータを格納したメモリへのポインタ
lenbinデータの長さ(-1以下の場合は strlen(bin))
Returns
変換した文字列を格納した Buffer変数.要free

Definition at line 1562 of file buffer.cpp.

1563{
1564 int i, j, n;
1565 char cc;
1566
1567 Buffer res = dup_Buffer(buf);
1568 if (bin==NULL) return res;
1569 Buffer wrk = make_Buffer(buf.vldsz + 1);
1570
1571 if (len<0) len = (int)strlen(bin);
1572 for (i=0; i<len; i++) {
1573 cc = bin[i];
1574 n = 0;
1575 for (j=0; j<res.vldsz; j++) {
1576 if (cc!=res.buf[j]) wrk.buf[n++] = res.buf[j];
1577 }
1578 wrk.vldsz = n;
1579
1580 copy_Buffer(&wrk, &res);
1581 clear_Buffer(&wrk);
1582 }
1583
1584 free_Buffer(&wrk);
1585
1586 return res;
1587}
void clear_Buffer(Buffer *str)
Buffer型変数 のバッファ部を 0クリアする.
Definition buffer.cpp:272
Buffer dup_Buffer(Buffer buf)
Buffer型変数のコピーをつくる.
Definition buffer.cpp:211

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

Here is the call graph for this function:

◆ expand_Buffer()

void expand_Buffer ( Buffer * buf,
int len )

void expand_Buffer(Buffer* buf, int len)

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

Definition at line 253 of file buffer.cpp.

254{
255 if (buf->bufsz>len) return;
256
257 Buffer expand = make_Buffer(len);
258 copy_Buffer(buf, &expand);
259 free_Buffer(buf);
260
261 *buf = expand;
262}

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

Here is the call graph for this function:

◆ fgets_Buffer()

int fgets_Buffer ( Buffer * str,
FILE * fp )

int fgets_Buffer(Buffer* str, FILE* fp)

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

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

Definition at line 1402 of file buffer.cpp.

1403{
1404 char* p;
1405 int n, m;
1406 UNUSED(p);
1407
1408 memset(str->buf, 0, str->bufsz);
1409 p = fgets((char*)str->buf, str->bufsz, fp);
1410 m = (int)strlen((const char*)str->buf);
1411
1412 n = 0;
1413 while(str->buf[n]!=CHAR_LF && str->buf[n]!=CHAR_CR && str->buf[n]!='\0') n++;
1414 str->buf[n] = '\0';
1415 str->vldsz = n;
1416
1417// if (KanjiCode!=US) kanji_convert_Buffer(str);
1418
1419 return m;
1420}
#define UNUSED(x)
Definition common.h:264

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

◆ free_Buffer()

void free_Buffer ( Buffer * buf)

void free_Buffer(Buffer* buf)

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

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

Definition at line 128 of file buffer.cpp.

129{
130 if (buf!=NULL) {
131 if (buf->buf!=NULL) free(buf->buf);
132 buf->buf = NULL;
133 memset(buf, 0, sizeof(Buffer));
134 buf->vldsz = -1;
135 buf->state = JBXL_NORMAL;
136 }
137}

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

Referenced by _copy_tTree_byctrl(), _DER_parse_children(), _json_array_parse(), _replace_all_node_byid_rcsv(), _replace_all_node_contents_rcsv(), add_resource_list(), add_xml_attr_double(), add_xml_attr_float(), add_xml_attr_int(), add_xml_attr_str(), ColladaXML::addController(), ColladaXML::addEffect(), ColladaXML::addExtraBumpmap(), ColladaXML::addGeometry(), ColladaXML::addImage(), GLTFData::addMaterials(), GLTFData::addNodes(), ColladaXML::addNormalSource(), ColladaXML::addScene(), GLTFData::addShell(), ColladaXML::addTexcrdSource(), GLTFData::addTextures(), ColladaXML::addVertexSource(), ColladaXML::addVerticesPos(), ColladaXML::addWeightSource(), awk_Buffer_tList(), cat_b2Buffer(), cat_Buffer(), cawk_Buffer_tList(), CBVHTool::clear_data(), clear_tList_data(), GLTFData::convertJson_TexturePath(), decode_runlength(), decomp_url(), deflate2gzip(), del_Buffer_dim(), encrypt_Base64(), encrypt_Buffer(), erase_bBuffer(), ColladaXML::existSameID(), expand_Buffer(), extract_tTar(), ColladaXML::free(), FBXData::free(), GLTFData::free(), TextureParam::free(), MaterialParam::free(), MeshFacetNode::free(), MeshObjectData::free(), OBJData::free(), OBJFacetGeoNode::free(), OBJFacetMtlNode::free(), GLTFData::freeGLBTextureInfo(), get_dir_files(), get_double_param_tList(), get_float_param_tList(), get_http_status_num(), get_http_version_num(), get_int_param_tList(), get_node_integer(), get_protocol_header_list_seq(), 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(), ColladaXML::initCollada(), ins_b2Buffer(), ins_Buffer(), is_http_header_field(), json_append_array_int_val(), json_append_array_key(), json_append_array_real_val(), json_append_array_str_val(), json_append_obj_int_val(), json_append_obj_key(), json_append_obj_real_val(), json_append_obj_str_val(), json_array_parse(), json_parse_file(), json_parse_prop(), json_parse_seq(), json_set_str_val(), 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(), GLTFData::output_glb(), GLTFData::output_gltf(), OBJData::output_mtl(), OBJData::output_obj(), FBXData::outputFile(), GLTFData::outputFile(), OBJData::outputFile(), BrepSolidList::outputFile(), ColladaXML::outputFile(), print_json(), print_json_opt(), print_xml(), CLogRingBuffer::putRingBuffer(), CLogRingBuffer::putRingFormat(), CLogRingBuffer::putRingFormat(), read_Buffer2_format_fp(), read_Buffer_data(), read_Buffer_format_fp(), read_Buffer_tList_fp(), read_index_tList_fp(), read_lines_Buffer(), read_tagged_Buffer(), jbxl::readXHead(), jbxl::readXHeadFile(), recv_http_Buffer(), recv_http_chunked(), recv_http_chunked_remain(), recv_http_closed(), recv_http_content(), recv_http_file(), recv_http_header(), relative_path_Buffer(), replace_all_tTree_node(), replace_item_tList_node(), replace_sBuffer_file(), replace_value_tList_node(), replace_xml_content(), rewrite_sBuffer_bystr(), CLogRingBuffer::rewriteBinHexRingBuffer(), save_http_xml(), save_tagged_Buffer(), search_protocol_header_item(), send_http_Buffer(), send_http_file(), send_http_header(), set_http_host_header(), set_item_tList_node(), set_protocol_contents(), set_tList_node_byBuffer(), set_tList_node_bystr(), set_value_tList_node(), MeshObjectData::setAltName(), setkey_byBase64(), setkey_byBuffer(), MeshFacetNode::setMaterialID(), TextureParam::setName(), MeshObjectData::setName(), simple_web_proxy(), tcp_recv_Buffer_tosize(), tcp_recv_Buffer_tosize_wait(), tcp_recv_lines_Buffer(), tcp_recv_mstream_Buffer(), tcp_relay(), tcp_send_sBufferln(), CBVHTool::writeMultiFile(), www2browser_relay(), and xml_parse_file().

◆ get_line_Buffer()

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 956 of file buffer.cpp.

957{
958 int i, j, pos, cnt;
959 unsigned char* buf;
960
961 Buffer ret = init_Buffer();
962 if (str.buf==NULL) return ret;
963
964 buf = str.buf;
965 for(i=0,j=0; j<n-1; j++) {
966 while (buf[i]!=CHAR_LF && buf[i]!=CHAR_CR && buf[i]!='\0') i++;
967 while (buf[i]==CHAR_LF || buf[i]==CHAR_CR) i++;
968 }
969 if (buf[i]=='\0') return ret;
970
971 pos = i;
972 while (buf[i]!=CHAR_LF && buf[i]!=CHAR_CR && buf[i]!='\0') i++;
973 cnt = i - pos;
974
975 if (cnt>=0) {
976 ret = make_Buffer(cnt+1);
977 if (ret.buf==NULL) return str;
978
979 for(i=0; i<cnt; i++) ret.buf[i] = buf[pos+i];
980 ret.buf[cnt] = '\0';
981 }
982
983 ret.vldsz = (int)strlen((const char*)ret.buf);
984
985 return ret;
986}

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

Referenced by get_tList_line_Buffer().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ get_seq_data_Buffer()

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]ptrin: 読み込みを開始するデータの位置(バイト).
out: 次のデータが始まる位置(バイト).
Returns
指定されたポインタ以下の一行分の文字列.改行は含まない.

Definition at line 1003 of file buffer.cpp.

1004{
1005 int i, pos, cnt;
1006 unsigned char* buf;
1007
1008 Buffer ret = init_Buffer();
1009
1010 if (str.buf==NULL) return ret;
1011 if (str.vldsz<=0) str.vldsz = (int)strlen((const char*)str.buf);
1012 if (*ptr >= str.vldsz) return ret;
1013
1014 buf = str.buf;
1015 pos = *ptr;
1016 while (buf[*ptr]!=CHAR_LF && buf[*ptr]!=CHAR_CR && buf[*ptr]!='\0') (*ptr)++;
1017 cnt = *ptr - pos;
1018
1019 if (cnt>=0) {
1020 ret = make_Buffer(cnt+1);
1021 if (ret.buf==NULL) return ret;
1022
1023 for(i=0; i<cnt; i++) ret.buf[i] = buf[pos+i];
1024 ret.buf[cnt] = '\0';
1025 }
1026
1027 ret.vldsz = (int)strlen((const char*)ret.buf);
1028
1029 // 空行
1030 while (buf[*ptr]==CHAR_LF || buf[*ptr]==CHAR_CR) (*ptr)++;
1031
1032 return ret;
1033}

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

Referenced by get_tList_seq_data_Buffer().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ init_Buffer()

Buffer init_Buffer ( void )

Buffer init_Buffer()

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

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

Definition at line 47 of file buffer.cpp.

48{
49 Buffer buf;
50
51 memset(&buf, 0, sizeof(Buffer));
52 buf.vldsz = -1;
53 buf.state = JBXL_NORMAL;
54
55 return buf;
56}

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

Referenced by GLTFData::addNodes(), awk_Buffer(), buffer_key_tList(), buffer_key_value_tList(), cawk_Buffer(), clear_tList_data(), decode_base64_Buffer(), decode_runlength(), decomp_url(), deflate2gzip(), dump_Buffer(), encode_base64_Buffer(), encode_base64_Buffer_bin(), encode_runlength(), extract_tTar(), fgets_mstream_Buffer(), from_bin64(), get_Buffer_from_json(), get_Buffer_join_tList(), get_json_val(), get_line_Buffer(), get_node_content(), get_seq_data_Buffer(), get_value_tTree(), CLogRingBuffer::getRingBuffer(), gz_decode_data(), http_proxy_header_analyze(), ColladaXML::init(), OBJData::init(), CBVHTool::init(), FBXData::init(), GLTFData::init(), TextureParam::init(), MaterialParam::init(), MeshFacetNode::init(), OBJFacetGeoNode::init(), OBJFacetMtlNode::init(), join_Buffer_dim(), json_inverse_parse(), json_inverse_parse_opt(), json_set_str_val(), 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_format_fp(), read_Buffer_data(), read_Buffer_file(), read_Buffer_format_fp(), read_tagged_Buffer(), relative_path_Buffer(), replace_sBuffer_bystr(), restore_protocol_header(), search_protocol_header(), search_protocol_header_partvalue(), search_protocol_header_value(), set_Buffer(), and xml_inverse_parse().

◆ ins_b2Buffer()

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_EERORsrcまたは dstが NULL
JBXL_MALLOC_ERRORメモリの確保に失敗した.何も実行されなかった.

Definition at line 636 of file buffer.cpp.

637{
638 Buffer tmp = make_Buffer(dst->bufsz+len);
639
640 int ret = copy_b2Buffer(src, &tmp, len);
641 if (ret<0) {
642 free_Buffer(&tmp);
643 return ret;
644 }
645
646 ret = cat_Buffer(dst, &tmp);
647 if (ret<0) {
648 free_Buffer(&tmp);
649 return ret;
650 }
651
652 free_Buffer(dst);
653 *dst = tmp;
654
655 return dst->vldsz;
656}

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

Referenced by ins_i2Buffer(), and ins_r2Buffer().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ins_Buffer()

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_EERORsrcまたは dstが NULL
JBXL_MALLOC_ERRORメモリの確保に失敗した.何も実行されなかった.

Definition at line 458 of file buffer.cpp.

459{
460 Buffer tmp = make_Buffer(src->bufsz + dst->bufsz);
461
462 int ret = copy_Buffer(src, &tmp);
463 if (ret<0) {
464 free_Buffer(&tmp);
465 return ret;
466 }
467
468 ret = cat_Buffer(dst, &tmp);
469 if (ret<0) {
470 free_Buffer(&tmp);
471 return ret;
472 }
473
474 free_Buffer(dst);
475 *dst = tmp;
476
477 return dst->vldsz;
478}

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

Here is the call graph for this function:

◆ ins_i2Buffer()

int ins_i2Buffer ( int src,
Buffer * dst )

int ins_i2Buffer(int src, Buffer* dst)

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

Definition at line 692 of file buffer.cpp.

693{
694 char num[LEN_INT];
695
696 snprintf(num, LEN_INT-1, "%d", src);
697 return ins_b2Buffer((void*)num, dst, (int)strlen(num));
698}
int ins_b2Buffer(void *src, Buffer *dst, int len)
任意のバイナリデータsrcを Buffer型変数dstの前に lenバイト挿入する
Definition buffer.cpp:636

References ins_b2Buffer(), LEN_INT, and snprintf.

Here is the call graph for this function:

◆ ins_r2Buffer()

int ins_r2Buffer ( float src,
Buffer * dst )

int ins_r2Buffer(float src, Buffer* dst)

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

Definition at line 734 of file buffer.cpp.

735{
736 char num[LEN_REAL];
737
738 snprintf(num, LEN_REAL-1, "%f", src);
739 return ins_b2Buffer((void*)num, dst, (int)strlen(num));
740}

References ins_b2Buffer(), LEN_REAL, and snprintf.

Here is the call graph for this function:

◆ isText_Buffer()

int isText_Buffer ( Buffer buf)

int isText_Buffer(Buffer buf)

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

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

Definition at line 1373 of file buffer.cpp.

1374{
1375 int i;
1376 for (i=0; i<buf.vldsz; i++) {
1377 if (buf.buf[i]<0x20 && buf.buf[i]!=0x0a && buf.buf[i]!=0x0d
1378 && buf.buf[i]!=0x00 && buf.buf[i]!=0x09) return FALSE;
1379 if (buf.buf[i]==0x7f) return FALSE; // DEL
1380 }
1381
1382 //if (buf.vldsz==(int)strlen((const char*)buf.buf)) return TRUE;
1383 return FALSE;
1384}
#define FALSE
Definition common.h:223

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

Referenced by CLogRingBuffer::putRingBuffer().

Here is the caller graph for this function:

◆ kanji_convert_Buffer()

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 1157 of file buffer.cpp.

1158{
1159 int i;
1160 unsigned char *c1, *c2;
1161
1162 if (KanjiCode==CODE_SJIS) {
1163 i = 0;
1164 while(str->buf[i]!='\0'){
1165 c1 = &(str->buf[i]);
1166 c2 = c1 + 1;
1167 if(*c1>=0xa1 && *c1<=0xfe){
1168 euc2sjis(c1, c2);
1169 i = i + 2;
1170 }
1171 else i++;
1172 }
1173 }
1174 /*
1175 else if (KanjiCode==CODE_EUC) {
1176 i = 0;
1177 while(str->buf[i]!='\0'){
1178 c1 = (unsigned char) str->buf[i];
1179 c2 = (unsigned char) str->buf[i+1];
1180 if((c1>=0x81 && c1<=0x9f) || (c1>=0xe0 && c1<=0xff)) {
1181 sjis2euc(c1, c2);
1182 i = i + 2;
1183 }
1184 else i++;
1185 }
1186 }
1187 */
1188}
int KanjiCode
システムの漢字コード
Definition tools.cpp:20
void euc2sjis(unsigned char *c1, unsigned char *c2)
EUC -> SJIS.
Definition tools.cpp:2687
#define CODE_SJIS
Definition tools.h:85

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

Here is the call graph for this function:

◆ make_Buffer()

Buffer make_Buffer ( int sz)

Buffer make_Buffer(int sz)

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

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

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

Definition at line 71 of file buffer.cpp.

72{
73 Buffer buf;
74
75 memset(&buf, 0, sizeof(Buffer));
76 buf.state = JBXL_NORMAL;
77 if (sz<0) return buf;
78
79 buf.bufsz = sz;
80 buf.buf = (unsigned char*)malloc(buf.bufsz+1);
81
82 if (buf.buf==NULL) {
83 buf.bufsz = 0;
84 buf.vldsz = -1;
85 buf.state = JBXL_ERROR;
86 }
87 else {
88 memset(buf.buf, 0, buf.bufsz+1);
89 }
90
91 return buf;
92}
#define JBXL_ERROR
エラー
Definition jbxl_state.h:34

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

Referenced by awk_Buffer(), bvh_parse_hierarchy(), cawk_Buffer(), comp_url(), GLTFData::createBinDataAoS(), GLTFData::createBinDataSeqAoS(), GLTFData::createBinDataSeqSoA(), GLTFData::createBinDataSoA(), decode_base64_Buffer(), decode_runlength(), decomp_url(), decompline_Buffer_dim(), deflate2gzip(), dump_Buffer(), encode_base64_Buffer(), encode_runlength(), erase_bBuffer(), expand_Buffer(), fgets_mstream_Buffer(), from_bin64(), get_Buffer_join_tList(), CBVHTool::get_bvh_params(), get_line_Buffer(), get_protocol_header_list_seq(), get_seq_data_Buffer(), CLogRingBuffer::getRingBuffer(), CLogRingBuffer::getRingBuffer(), gz_decode_data(), CLogRingBuffer::init(), ins_b2Buffer(), ins_Buffer(), int2bin_DER(), join_Buffer_dim(), json_append_array_int_val(), json_append_array_real_val(), json_append_array_str_val(), json_append_obj_int_val(), json_append_obj_real_val(), json_append_obj_str_val(), json_inverse_parse(), json_inverse_parse_opt(), json_set_str_val(), llsd_bin_get_length(), make_Buffer_bychar(), new_Buffer(), node2DER(), CLogRingBuffer::putRingFormat(), CLogRingBuffer::putRingFormat(), randbit_Buffer(), randstr_Buffer(), read_Buffer_data(), read_Buffer_format_fp(), read_lines_Buffer(), recv_http_chunked(), recv_http_chunked_remain(), recv_http_closed(), recv_http_content(), recv_http_file(), recv_http_header(), replace_sBuffer_bystr(), rept_Buffer(), restore_protocol_contents(), restore_protocol_header(), save_tagged_Buffer(), set_Buffer(), set_http_host_header(), simple_web_proxy(), tcp_recv_Buffer_tosize(), tcp_recv_Buffer_tosize_wait(), tcp_recv_lines_Buffer(), tcp_recv_mstream_Buffer(), tcp_relay(), to_bin64(), www2browser_relay(), and xml_inverse_parse().

◆ make_Buffer_bychar()

Buffer make_Buffer_bychar ( unsigned char cc)

Buffer make_Buffer_bychar(unsigned char cc)

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

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

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

Definition at line 108 of file buffer.cpp.

109{
110 Buffer buf;
111
112 buf = make_Buffer(LADDR);
113 if (buf.buf==NULL) return buf;
114
115 buf.buf[0] = cc;
116 buf.vldsz = 1;
117 return buf;
118}
#define LADDR
Definition common.h:162

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

Here is the call graph for this function:

◆ make_Buffer_randomstr()

Buffer make_Buffer_randomstr ( int n)

Buffer make_Buffer_randomstr(int n)

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

Definition at line 192 of file buffer.cpp.

193{
194 char* str = random_str(n);
195
196 Buffer buf = set_Buffer(str, -1);
197 free(str);
198
199 return buf;
200}
Buffer set_Buffer(void *dat, int len)
Buffer型変数のバッファ部を新しく作り, そのバッファに bufをコピーする.
Definition buffer.cpp:170
#define random_str(n)
ランダムな文字列を生成.要 free(). see temp_filename()
Definition tools.h:351

References random_str, and set_Buffer().

Here is the call graph for this function:

◆ new_Buffer()

Buffer * new_Buffer ( int sz)

Buffer* new_Buffer(int sz)

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

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

Definition at line 23 of file buffer.cpp.

24{
25 Buffer* buf;
26
27 buf = (Buffer*)malloc(sizeof(Buffer));
28 if (buf==NULL) return NULL;
29
30 memset(buf, 0, sizeof(Buffer));
31 buf->vldsz = -1;
32 buf->state = JBXL_NORMAL;
33
34 if (sz>0) *buf = make_Buffer(sz + 1);
35 return buf;
36}

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

Referenced by GLTFData::convertJson_TexturePath(), get_Buffer_ringBuffer(), and GLTFData::getGLBTextureInfo().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ pack_Buffer()

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 1134 of file buffer.cpp.

1135{
1136 Buffer res = init_Buffer();
1137
1138 if (buf.buf==NULL) return res;
1139
1140 res.buf = (unsigned char*)pack_char((char*)buf.buf, cc);
1141 res.vldsz = (int)strlen((char*)res.buf);
1142 res.bufsz = res.vldsz;
1143
1144 return res;
1145}
#define pack_char(s, c)
pack_char_len()
Definition tools.h:236

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().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ pop_char_ringStack()

char pop_char_ringStack ( Buffer * buf)

char pop_char_ringStack(Buffer* buf)

簡易 char型 ringStack POP

Definition at line 1855 of file buffer.cpp.

1856{
1857 buf->vldsz--;
1858 if (buf->vldsz<0) buf->vldsz = buf->bufsz - 1;
1859
1860 return (char)buf->buf[buf->vldsz];
1861}

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

Referenced by llsd_bin_get_length().

Here is the caller graph for this function:

◆ push_char_ringStack()

void push_char_ringStack ( Buffer * buf,
char cc )

void push_char_ringStack(Buffer* buf, char cc)

簡易 char型 ringStack PUSH

Definition at line 1869 of file buffer.cpp.

1870{
1871 buf->buf[buf->vldsz] = (unsigned char)cc;
1872 buf->vldsz++;
1873 if (buf->vldsz==buf->bufsz) buf->vldsz = 0;
1874
1875 return;
1876}

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

Referenced by llsd_bin_get_length().

Here is the caller graph for this function:

◆ randbit_Buffer()

Buffer randbit_Buffer ( int n)

Buffer randbit_Buffer(int n)

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

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

Definition at line 1224 of file buffer.cpp.

1225{
1226 int i, sz;
1227 Buffer str;
1228
1229 sz = (n+7)/8;
1230 str = make_Buffer(sz);
1231 if (str.buf==NULL) return str;
1232 str.vldsz = sz;
1233
1234 for (i=0; i<n; i++) setBit(str.buf, i, rand()%2);
1235 return str;
1236}
#define setBit(x, n, i)
Definition common.h:259

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

Here is the call graph for this function:

◆ randstr_Buffer()

Buffer randstr_Buffer ( int n)

Buffer randstr_Buffer(int n)

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

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

Definition at line 1199 of file buffer.cpp.

1200{
1201 char base[]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
1202 Buffer pass;
1203 int i, sz;
1204
1205 pass = make_Buffer(n);
1206 if (pass.buf==NULL) return pass;
1207
1208 sz = (int)strlen(base);
1209 for (i=0; i<n; i++) pass.buf[i] = base[rand()%sz];
1210 pass.vldsz = n;
1211
1212 return pass;
1213}

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

Here is the call graph for this function:

◆ read_Buffer2_format_fp()

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

int read_Buffer2_format_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 1819 of file buffer.cpp.

1820{
1821 if (key==NULL || buf==NULL) return FALSE;
1822
1823 *key = init_Buffer();
1824 *buf = init_Buffer();
1825
1826 *key = read_Buffer_format_fp(fp);
1827 if (key->buf==NULL) return FALSE;
1828
1829 *buf = read_Buffer_format_fp(fp);
1830 if (buf->buf==NULL) {
1831 free_Buffer(key);
1832 return FALSE;
1833 }
1834
1835 return TRUE;
1836}
Buffer read_Buffer_format_fp(FILE *fp)
ファイル fp から Buffer型変数の buf部を読み込む
Definition buffer.cpp:1783
#define TRUE
Definition common.h:226

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

Referenced by read_Buffer_tList_fp(), and read_tagged_Buffer().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ read_Buffer_data()

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 1497 of file buffer.cpp.

1498{
1499 int cc;
1500 Buffer buf;
1501
1502 buf = init_Buffer();
1503 if (sz<0) return buf;
1504
1505 buf = make_Buffer(sz);
1506 if (buf.buf==NULL) return buf;
1507 buf.vldsz = sz;
1508
1509 cc = (int)fread(buf.buf, buf.vldsz, 1, fp);
1510 if (cc!=1) {
1511 free_Buffer(&buf);
1512 return buf;
1513 }
1514
1515 return buf;
1516}

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

Referenced by read_Buffer_file(), jbxl::readXHead(), and jbxl::readXHeadFile().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ read_Buffer_file()

Buffer read_Buffer_file ( const char * fn)

Buffer read_Buffer_file(const char* fn)

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

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

Definition at line 1467 of file buffer.cpp.

1468{
1469 int sz;
1470 Buffer buf;
1471 FILE* fp;
1472
1473 buf = init_Buffer();
1474
1475 sz = file_size(fn);
1476 if (sz<=0) return buf;
1477
1478 fp = fopen(fn, "rb");
1479 if (fp==NULL) return buf;
1480
1481 buf = read_Buffer_data(fp, sz);
1482 fclose(fp);
1483
1484 return buf;
1485}
Buffer read_Buffer_data(FILE *fp, int sz)
ファイルポインタ fp から szバイトをBuffer型変数に読み込む.
Definition buffer.cpp:1497
unsigned long int file_size(const char *fn)
ファイルの大きさを返す.
Definition tools.cpp:2309

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().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ read_Buffer_format_fp()

Buffer read_Buffer_format_fp ( FILE * fp)

Buffer read_Buffer_format_fp(FILE* fp)

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

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

Definition at line 1783 of file buffer.cpp.

1784{
1785 int cc, sz;
1786 Buffer buf;
1787
1788 buf = init_Buffer();
1789 cc = (int)fread(&sz, sizeof(sz), 1, fp);
1790 if (cc!=1) return buf;
1791 sz = ntohl(sz);
1792
1793 buf = make_Buffer(sz);
1794 if (buf.buf==NULL) return buf;
1795 buf.vldsz = sz;
1796 cc = (int)fread(buf.buf, buf.vldsz, 1, fp);
1797 if (cc!=1) {
1798 free_Buffer(&buf);
1799 return buf;
1800 }
1801
1802 return buf;
1803}

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

Referenced by read_Buffer2_format_fp().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ read_lines_Buffer()

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 1433 of file buffer.cpp.

1434{
1435 Buffer buf;
1436 char* pp;
1437 UNUSED(pp);
1438
1439 buf = make_Buffer(str->bufsz);
1440 if (buf.buf==NULL) return JBXL_BUFFER_MAKE_ERROR;
1441
1442 pp = fgets((char*)buf.buf, buf.bufsz, fp);
1443 buf.vldsz = (int)strlen((const char*)buf.buf);
1444 copy_Buffer(&buf, str);
1445 clear_Buffer(&buf);
1446
1447 while (!feof(fp)) {
1448 pp = fgets((char*)buf.buf, buf.bufsz, fp);
1449 buf.vldsz = (int)strlen((const char*)buf.buf);
1450 cat_Buffer(&buf, str);
1451 clear_Buffer(&buf);
1452 }
1453
1454 free_Buffer(&buf);
1455 return str->vldsz;
1456}
#define JBXL_BUFFER_MAKE_ERROR
Buffer の作成に失敗
Definition jbxl_state.h:60

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

Here is the call graph for this function:

◆ recalc_strlen_Buffer()

int recalc_strlen_Buffer ( Buffer * buf)

int recalc_strlen_Buffer(Buffer* buf)

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

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

Definition at line 1310 of file buffer.cpp.

1311{
1312 int len = (int)strlen((char*)buf->buf);
1313 buf->vldsz = len;
1314 return len;
1315}

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

Referenced by CLogRingBuffer::putRingFormat(), and CLogRingBuffer::putRingFormat().

Here is the caller graph for this function:

◆ replace_sBuffer_bystr()

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 1603 of file buffer.cpp.

1604{
1605 int i, j, flen, tlen;
1606 Buffer res;
1607
1608 res = init_Buffer();
1609 if (buf.buf==NULL || frm==NULL || tos==NULL) return res;
1610
1611 flen = (int)strlen(frm);
1612 tlen = (int)strlen(tos);
1613 if (buf.vldsz<=0) buf.vldsz = (int)strlen((const char*)buf.buf);
1614
1615 int difsz = tlen - flen;
1616 if (difsz<0) difsz = 0;
1617 else difsz = difsz*100; // 100個まで
1618 res = make_Buffer((int)((buf.vldsz+difsz+1)*BUFFER_FACT));
1619
1620 i = j = 0;
1621 while (i<buf.vldsz && j<res.bufsz) {
1622 if (!strncmp((const char*)(buf.buf+i), frm, flen)){
1623 res.vldsz = (int)strlen((const char*)res.buf);
1624 cat_s2Buffer(tos, &res);
1625 i += flen;
1626 j += tlen;
1627 }
1628 else {
1629 res.buf[j++] = buf.buf[i++];
1630 }
1631 }
1632
1633 if (j==res.bufsz) res.state = JBXL_ERROR;
1634 res.vldsz = (int)strlen((const char*)res.buf);
1635
1636 return res;
1637}

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().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ replace_sBuffer_file()

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 1652 of file buffer.cpp.

1653{
1654 int ret;
1655 Buffer buf, res;
1656
1657 buf = read_Buffer_file(fn);
1658 if (buf.buf==NULL) return FALSE;
1659
1660 res = replace_sBuffer(buf, (char*)frm.buf, (char*)tos.buf);
1661 free_Buffer(&buf);
1662 if (res.buf==NULL) return FALSE;
1663
1664 ret = save_Buffer_file(res, fn);
1665 free_Buffer(&buf);
1666
1667 return ret;
1668}
Buffer read_Buffer_file(const char *fn)
ファイル fn の内容を Buffer型変数に読み込む.
Definition buffer.cpp:1467
int save_Buffer_file(Buffer buf, char *fn)
ファイル fn へ Buffer型変数の buf部を書き込む
Definition buffer.cpp:1530
#define replace_sBuffer(buf, f, t)
replace_sBuffer()
Definition buffer.h:175

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

Here is the call graph for this function:

◆ rept_Buffer()

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 234 of file buffer.cpp.

235{
236 int i;
237 Buffer str;
238
239 if (n<=0) n = 1;
240 str = make_Buffer(n);
241 for (i=0; i<n; i++) str.buf[i] = cc;
242 str.vldsz = n;
243 return str;
244}

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

Referenced by CLogRingBuffer::putRingBuffer().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rewrite_Buffer_bychar()

void rewrite_Buffer_bychar ( Buffer * buf,
const char frm,
const char toc )

void rewrite_Buffer_bychar(Buffer* buf, const char frm, const char toc)

buf.buf中の文字 frmを tosで置き換える.

Parameters
buf操作する Buffer変数
frm変換する文字
toc変換後の文字

Definition at line 1703 of file buffer.cpp.

1704{
1705 if (buf==NULL) return;
1706
1707 int i;
1708 for (i=0; i<buf->vldsz; i++) {
1709 if (buf->buf[i]==frm) buf->buf[i] = toc;
1710 }
1711 return;
1712}

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

Referenced by canonical_filename_Buffer().

Here is the caller graph for this function:

◆ rewrite_sBuffer_bystr()

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 1681 of file buffer.cpp.

1682{
1683 if (buf==NULL || frm==NULL || tos==NULL) return;
1684
1685 Buffer tmp = replace_sBuffer_bystr(*buf, frm, tos);
1686 if (tmp.state==JBXL_NORMAL) {
1687 free_Buffer(buf);
1688 *buf = tmp;
1689 }
1690 return;
1691}
Buffer replace_sBuffer_bystr(Buffer buf, const char *frm, const char *tos)
buf.buf中の文字列 frmを tosで置き換えた 新しい Bufferを返す
Definition buffer.cpp:1603

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

Here is the call graph for this function:

◆ save_Buffer2_format_fp()

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

int save_Buffer2_format_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 1733 of file buffer.cpp.

1734{
1735 int cc;
1736
1737 cc = save_Buffer_format_fp(key, fp);
1738 if (!cc) return FALSE;
1739
1740 cc = save_Buffer_format_fp(buf, fp);
1741 if (!cc) return FALSE;
1742
1743 return TRUE;
1744}
int save_Buffer_format_fp(Buffer buf, FILE *fp)
ファイル fp へ Buffer型変数の buf部を書き込む
Definition buffer.cpp:1759

References FALSE, save_Buffer_format_fp(), and TRUE.

Referenced by save_Buffer_tList_fp(), and save_tagged_Buffer().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ save_Buffer_file()

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 1530 of file buffer.cpp.

1531{
1532 int cc;
1533 FILE* fp;
1534
1535 fp = fopen(fn, "wb");
1536 if (fp==NULL) return FALSE;
1537
1538 cc = (int)fwrite(buf.buf, buf.vldsz, 1, fp);
1539 if (cc!=1) return FALSE;
1540 fclose(fp);
1541
1542 return TRUE;
1543}

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

Referenced by replace_sBuffer_file().

Here is the caller graph for this function:

◆ save_Buffer_format_fp()

int save_Buffer_format_fp ( Buffer buf,
FILE * fp )

int save_Buffer_format_fp(Buffer buf, FILE* fp)

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

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

Definition at line 1759 of file buffer.cpp.

1760{
1761 int cc, sz;
1762
1763 sz = htonl(buf.vldsz);
1764 cc = (int)fwrite(&sz, sizeof(sz), 1, fp);
1765 if (cc!=1) return FALSE;
1766
1767 cc = (int)fwrite(buf.buf, buf.vldsz, 1, fp);
1768 if (cc!=1) return FALSE;
1769
1770 return TRUE;
1771}

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

Referenced by save_Buffer2_format_fp().

Here is the caller graph for this function:

◆ set_Buffer()

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 170 of file buffer.cpp.

171{
172 Buffer buf;
173
174 buf = init_Buffer();
175 if (dat==NULL) return buf;
176
177 if (len<0) len = (int)strlen((char*)dat);
178 buf = make_Buffer(len);
179 if (buf.buf==NULL) return buf;
180
181 memcpy(buf.buf, dat, len);
182 buf.vldsz = len;
183 return buf;
184}

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_block_data(), llsd_bin_get_uuid(), make_Buffer_randomstr(), and set_DER_node().

Here is the call graph for this function:
Here is the caller graph for this function: