JunkBox_Lib  1.10.2
buffer.c File Reference

Buffer型サポートプログラム More...

#include "buffer.h"
#include "jbxl_state.h"
Include dependency graph for buffer.c:

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型変数を生成する. More...
 
Buffer init_Buffer ()
 初期化したBuffer型変数を返す. More...
 
Buffer make_Buffer (int sz)
 Buffer型変数のバッファ部をつくり出す. More...
 
Buffer make_Buffer_bychar (unsigned char cc)
 文字から,Buffer型変数のバッファ部をつくり出す. More...
 
void free_Buffer (Buffer *buf)
 Buffer型変数のバッファ部を解放する More...
 
void del_Buffer (Buffer **buf)
 new_Buffer()で作り出した Buffer型変数を削除する. More...
 
Buffer set_Buffer (void *dat, int len)
 Buffer型変数のバッファ部を新しく作り, そのバッファに bufをコピーする. More...
 
Buffer make_Buffer_randomstr (int n)
 ランダムな n文字から,Buffer型変数のバッファ部をつくり出す. More...
 
Buffer dup_Buffer (Buffer buf)
 Buffer型変数のコピーをつくる. More...
 
Buffer rept_Buffer (unsigned char cc, int n)
 文字 ccを n回繰り返したBuffer型データを返す. More...
 
void expand_Buffer (Buffer *buf, int len)
 buf のデータ部を lenに拡張した新しい Buffer を返す. More...
 
void clear_Buffer (Buffer *str)
 Buffer型変数 のバッファ部を 0クリアする. More...
 
int copy_Buffer (Buffer *src, Buffer *dst)
 Buffer型変数 srcから dstへバッファをコピーする. More...
 
int cat_Buffer (Buffer *src, Buffer *dst)
 Buffer変数 srcから dstへバッファを catする. More...
 
int ins_Buffer (Buffer *src, Buffer *dst)
 Buffer変数 dst の前に srcを挿入する. More...
 
int copy_b2Buffer (void *src, Buffer *dst, int len)
 任意のバイナリデータsrcを Buffer型変数dstへ lenバイト copyする More...
 
int cat_b2Buffer (void *src, Buffer *dst, int len)
 任意のバイナリデータsrcを Buffer型変数dstへ lenバイト catする. More...
 
int ins_b2Buffer (void *src, Buffer *dst, int len)
 任意のバイナリデータsrcを Buffer型変数dstの前に lenバイト挿入する More...
 
int copy_i2Buffer (int src, Buffer *dst)
 整数 srcを文字列に変換して,dstへ copyする. More...
 
int cat_i2Buffer (int src, Buffer *dst)
 整数 srcを文字列に変換して,dstへ catする. More...
 
int ins_i2Buffer (int src, Buffer *dst)
 整数 srcを文字列に変換して,dstの前に 挿入する. More...
 
int copy_r2Buffer (float src, Buffer *dst)
 実数 srcを文字列に変換して,dstへ copyする. More...
 
int cat_r2Buffer (float src, Buffer *dst)
 実数 srcを文字列に変換して,dstへ catする. More...
 
int ins_r2Buffer (float src, Buffer *dst)
 実数 srcを文字列に変換して,dstの前に 挿入する. More...
 
int cmp_Buffer (Buffer src, Buffer dst, int n)
 バッファ部の比較. More...
 
Buffer encode_base64_Buffer (Buffer buf)
 バイナリデータ buf.bufの buf.vldszバイトを Base64にエンコード する More...
 
Buffer decode_base64_Buffer (Buffer str)
 strのバッファを Base64からデコードする More...
 
Buffer encode_base64_Buffer_bin (unsigned char *bin, unsigned int sz, int nopad)
 sz バイトの バイナリデータ binを Base64にエンコード する. More...
 
Buffer encode_base64_filename_Buffer (Buffer buf, unsigned char cc)
 バイナリデータ bufを Base64で encodeしてファイル名を作る.ただし '/' は cc として扱う. More...
 
Buffer decode_base64_filename_Buffer (Buffer str, unsigned char cc)
 bufを Base64で decodeしてバイナリデータを取り出す.ただし cc は '/' として扱う. More...
 
Buffer get_line_Buffer (Buffer str, int n)
 複数行の文字列バッファから任意の行を取り出す. More...
 
Buffer get_seq_data_Buffer (Buffer str, int *ptr)
 複数行の文字列バッファ内の行データをシーケンシャルに取り出す. More...
 
Buffer awk_Buffer (Buffer str, char cc, int n)
 Buffer文字列に対する awk. More...
 
Buffer cawk_Buffer (Buffer str, char cc, int n)
 Buffer文字列に対する(変形の)awk. More...
 
Buffer pack_Buffer (Buffer buf, char cc)
 文字列の先頭のcc(複数),終わりのcc(複数),TAB, CR, LF を削除 More...
 
void kanji_convert_Buffer (Buffer *str)
 大域変数 KanjiCode (tools.h) に従って漢字コードを変換する.
More...
 
Buffer randstr_Buffer (int n)
 英数字を n個生成 More...
 
Buffer randbit_Buffer (int n)
 ビットを n個生成 More...
 
Buffer dump_Buffer (Buffer buf)
 Buffer型変数のデバッグ用 16進を Buffer型変数に出力する. More...
 
int recalc_strlen_Buffer (Buffer *buf)
 Buffer型変数のデータ部を文字列と見なして,その長さを返す. More...
 
void add_indent_Buffer (Buffer *buf, char cc, int len)
 インデント(cc x num) を付加する. More...
 
void chomp_Buffer (Buffer *str)
 最初の改行コード以降を無視する. More...
 
int isText_Buffer (Buffer buf)
 Buffer型変数 bufのバッファ部がテキストかどうか検査する. More...
 
int fgets_Buffer (Buffer *str, FILE *fp)
 拡張fgets.文字列の読み込みに使用する.改行コードは削除する More...
 
int read_lines_Buffer (Buffer *str, FILE *fp)
 複数文字列行の読み込み.文字列の読み込みに使用する More...
 
Buffer read_Buffer_file (const char *fn)
 ファイル fn の内容を Buffer型変数に読み込む. More...
 
Buffer read_Buffer_data (FILE *fp, int sz)
 ファイルポインタ fp から szバイトをBuffer型変数に読み込む. More...
 
int save_Buffer_file (Buffer buf, char *fn)
 ファイル fn へ Buffer型変数の buf部を書き込む More...
 
Buffer erase_bBuffer (Buffer buf, char *bin, int len)
 buf.buf 中にある bin のデータ(各1Byte,順不同)を削除する. More...
 
Buffer replace_sBuffer_bystr (Buffer buf, const char *frm, const char *tos)
 buf.buf中の文字列 frmを tosで置き換えた 新しい Bufferを返す More...
 
int replace_sBuffer_file (char *fn, Buffer frm, Buffer tos)
 テキストファイル中の frm の文字列を tos に書き換える More...
 
void rewrite_sBuffer_bystr (Buffer *buf, const char *frm, const char *tos)
 buf.buf自体を書き換えること以外は replace_sBuffer_bystr() と同じ More...
 
void rewrite_Buffer_bychar (Buffer *buf, const char frm, const char toc)
 buf.buf中の文字 frmを tocで置き換える More...
 
int save_Buffer2_format_fp (Buffer key, Buffer buf, FILE *fp)
 ファイル fp へ 2つのBuffer型変数 keyと bufを書き込む More...
 
int save_Buffer_format_fp (Buffer buf, FILE *fp)
 ファイル fp へ Buffer型変数の buf部を書き込む More...
 
Buffer read_Buffer_format_fp (FILE *fp)
 ファイル fp から Buffer型変数の buf部を読み込む More...
 
int read_Buffer2_format_fp (Buffer *key, Buffer *buf, FILE *fp)
 ファイル fp から 2つのBuffer型変数の keyと bufを読み込む. More...
 
char pop_char_ringStack (Buffer *buf)
 簡易 char型 ringStack POP More...
 
void push_char_ringStack (Buffer *buf, char cc)
 簡易 char型 ringStack PUSH More...
 

Detailed Description

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

Definition in file buffer.c.

Macro Definition Documentation

◆ DUMP_BUFFER_CHAR_START

#define DUMP_BUFFER_CHAR_START   51

Definition at line 1241 of file buffer.c.

◆ DUMP_BUFFER_DELI_START

#define DUMP_BUFFER_DELI_START   48

Definition at line 1240 of file buffer.c.

◆ DUMP_BUFFER_LINE_SIZE

#define DUMP_BUFFER_LINE_SIZE   85

Definition at line 1239 of file buffer.c.

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.c.

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
unsigned char ** buf
Definition: jpeg_tool.h:96
unsigned char unsigned long * len
Definition: jpeg_tool.h:96

References buf, cat_s2Buffer, and len.

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.c.

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.c:71
Buffer init_Buffer()
初期化したBuffer型変数を返す.
Definition: buffer.c:47
Definition: buffer.h:35
int vldsz
データの長さ.バイナリデータの場合も使用可能.文字列の場合は 0x00 を含まない.
Definition: buffer.h:37
unsigned char * buf
バッファの先頭へのポインタ.str[bufsz]は必ず 0x00となる.
Definition: buffer.h:39

References buf, 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.c:585
これは下記のように変更する.
func(Buffer* buf){
...............
cat_b2Buffer(&src, buf, n);
...............
}
理由:関数内でバッファ部の大きさが変わる可能性があるが, func を呼び出した側ではそのことを知ることができない.

Definition at line 585 of file buffer.c.

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.c: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 buf, Buffer::buf, BUFFER_FACT, Buffer::bufsz, free_Buffer(), JBXL_MALLOC_ERROR, JBXL_NULL_ERROR, len, Buffer::state, and Buffer::vldsz.

Referenced by _json_parse_term(), cat_i2Buffer(), cat_r2Buffer(), 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.c:384
これは下記のように変更する.
func(Buffer* buf){
...............
cat_Buffer(&src, buf);
...............
}
理由:関数内でバッファ部の大きさが変わる可能性があるが, 呼び出した側ではそのことを知ることができない.

Definition at line 384 of file buffer.c.

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 buf, 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(), extract_tTar(), 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_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().

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.c.

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 LEN_INT
log 2^64 + '\0' + 1(予備)
Definition: common.h:171

References cat_b2Buffer(), and LEN_INT.

Referenced by replace_sip_contact_dstipport().

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.c.

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(), and LEN_REAL.

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.c.

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

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.c.

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, len, and Buffer::vldsz.

Referenced by command_KEYEX(), and send_command_recv_ans().

Here is the caller graph for this function:

◆ clear_Buffer()

void clear_Buffer ( Buffer str)

void clear_Buffer(Buffer* str)

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

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

Definition at line 272 of file buffer.c.

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 check_auth(), erase_bBuffer(), get_protocol_header_list_seq(), read_lines_Buffer(), recv_http_Buffer(), recv_http_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().

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.c.

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.c:518
これは下記のように変更する.
func(Buffer* buf){
...............
copy_b2Buffer(&src, buf, n);
...............
}
理由:関数内でバッファ部の大きさが変わる可能性があるが, func を呼び出した側ではそのことを知ることができない.

Definition at line 518 of file buffer.c.

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 buf, Buffer::buf, BUFFER_FACT, Buffer::bufsz, JBXL_MALLOC_ERROR, JBXL_NORMAL, JBXL_NULL_ERROR, len, Buffer::state, and Buffer::vldsz.

Referenced by copy_i2Buffer(), copy_r2Buffer(), 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().

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.c:315
これは下記のように変更する.
func(Buffer* buf){
...............
copy_Buffer(&src, buf);
...............
}
理由:関数内でバッファ部の大きさが変わる可能性があるが, 呼び出した側ではそのことを知ることができない.

Definition at line 315 of file buffer.c.

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 buf, 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(), json_set_str_val(), read_ldap_config(), read_lines_Buffer(), recv_http_Buffer(), recv_http_file(), restore_protocol_header(), tcp_recv_crypt_Buffer(), udp_recv_crypt_Buffer(), and udp_recv_crypt_Buffer_sockaddr_in().

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.c.

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(), and LEN_INT.

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

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.c.

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(), and LEN_REAL.

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.c.

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.c:2787

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

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.c.

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.c: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.c.

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 }

References buf.

Referenced by command_USERID().

Here is the caller graph for this function:

◆ 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.c.

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.c:1239
#define DUMP_BUFFER_DELI_START
Definition: buffer.c:1240
#define DUMP_BUFFER_CHAR_START
Definition: buffer.c:1241

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

Here is the call 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.c.

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 buf, and Buffer::buf.

Referenced by _copy_tTree_byctrl(), buffer_key_tList(), check_ldap_passwd(), command_USERID(), decomp_hostport(), decomp_url(), dup_tList_data(), erase_bBuffer(), extract_tTar(), 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(), relative_path_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().

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.c.

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.c:2849

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

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

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.c.

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(), len, and make_Buffer_bystr.

Here is the call 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.c.

910 {
911  if (cc == 0x00) cc = '-';
912 
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.c:804

References buf, 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.c.

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.c:272
Buffer dup_Buffer(Buffer buf)
Buffer型変数のコピーをつくる.
Definition: buffer.c:211

References buf, Buffer::buf, clear_Buffer(), copy_Buffer(), dup_Buffer(), free_Buffer(), len, 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.c.

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 buf, copy_Buffer(), free_Buffer(), len, 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.c.

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.

Referenced by get_mime_filename().

Here is the caller graph for this function:

◆ free_Buffer()

void free_Buffer ( Buffer buf)

void free_Buffer(Buffer* buf)

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

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

Definition at line 128 of file buffer.c.

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 buf, and JBXL_NORMAL.

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(), awk_Buffer_tList(), cat_b2Buffer(), cat_Buffer(), cawk_Buffer_tList(), check_auth(), check_ldap_passwd(), check_server_spki(), clear_tList_data(), command_KEYEX(), command_USERID(), decode_runlength(), decomp_url(), deflate2gzip(), del_Buffer_dim(), del_sip_via(), encode_mime_string(), encrypt_Base64(), encrypt_Buffer(), erase_bBuffer(), expand_Buffer(), extract_tTar(), free_LDAP_Dn(), free_LDAP_Host(), get_crypt_message(), get_crypt_sBuffer(), 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(), 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(), open_ldap_connection(), print_json(), print_json_opt(), print_xml(), read_Buffer2_format_fp(), read_Buffer_data(), read_Buffer_format_fp(), read_Buffer_tList_fp(), 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_mesg_until_end(), relative_path_Buffer(), 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_http_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_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().

◆ 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.c.

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 buf, Buffer::buf, CHAR_CR, CHAR_LF, init_Buffer(), make_Buffer(), and Buffer::vldsz.

Referenced by get_tList_line_Buffer(), and send_algor_recv_spki().

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.c.

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 buf, 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.c.

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 buf, and JBXL_NORMAL.

Referenced by awk_Buffer(), buffer_key_tList(), buffer_key_value_tList(), cawk_Buffer(), check_auth(), check_server_spki(), clear_tList_data(), decode_base64_Buffer(), decode_EVPAPI_Buffer(), decode_runlength(), decomp_url(), deflate2gzip(), dump_Buffer(), encode_base64_Buffer(), encode_base64_Buffer_bin(), encode_EVPAPI_Buffer(), encode_runlength(), extract_tTar(), fgets_mstream_Buffer(), from_bin64(), get_Buffer_from_json(), get_Buffer_join_tList(), get_crypt_Buffer(), 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(), 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_ldap_config(), read_spki_with_ipaddr(), read_tagged_Buffer(), relative_path_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().

◆ 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.c.

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(), len, 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.c.

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.c.

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.c:636

References ins_b2Buffer(), and LEN_INT.

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.c.

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(), and LEN_REAL.

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.c.

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 buf, and FALSE.

◆ 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.c.

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.c:20
void euc2sjis(unsigned char *c1, unsigned char *c2)
EUC -> SJIS.
Definition: tools.c:2688
#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.c.

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 buf, JBXL_ERROR, and JBXL_NORMAL.

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(), get_Buffer_join_tList(), get_command(), get_comment(), 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(), 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(), 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(), 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().

◆ 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.c.

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 buf, LADDR, and make_Buffer().

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.c.

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.c:170
#define random_str(n)
ランダムな文字列を生成.要 free(). see temp_filename()
Definition: tools.h:351

References buf, 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.c.

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 buf, JBXL_NORMAL, and make_Buffer().

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

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.c.

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 buf, 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.c.

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

References buf.

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.c.

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 buf.

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.c.

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.c.

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.c.

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.c:1783
#define TRUE
Definition: common.h:226

References buf, 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.c.

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 buf, free_Buffer(), init_Buffer(), and make_Buffer().

Referenced by read_Buffer_file().

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.c.

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.c:1497
unsigned long int file_size(const char *fn)
ファイルの大きさを返す.
Definition: tools.c:2309

References buf, 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.c.

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 buf, free_Buffer(), init_Buffer(), and make_Buffer().

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.c.

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 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.c.

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

References buf, and len.

◆ 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.c.

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 buf, 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.c.

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.c:1467
int save_Buffer_file(Buffer buf, char *fn)
ファイル fn へ Buffer型変数の buf部を書き込む
Definition: buffer.c:1530
#define replace_sBuffer(buf, f, t)
replace_sBuffer()
Definition: buffer.h:175

References buf, 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.c.

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.

Here is the call 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.c.

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 buf.

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.c.

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.c:1603

References buf, 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.c.

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.c:1759

References buf, 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.c.

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 buf, FALSE, and TRUE.

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.c.

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 buf, FALSE, and TRUE.

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.c.

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 buf, init_Buffer(), len, and make_Buffer().

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: