28 if (buf==NULL)
return NULL;
30 memset(buf, 0,
sizeof(
Buffer));
51 memset(&buf, 0,
sizeof(
Buffer));
75 memset(&buf, 0,
sizeof(
Buffer));
80 buf.
buf = (
unsigned char*)malloc(buf.
bufsz+1);
113 if (buf.
buf==NULL)
return buf;
131 if (buf->
buf!=NULL) free(buf->
buf);
133 memset(buf, 0,
sizeof(
Buffer));
150 if (buf!=NULL && *buf!=NULL) {
151 if ((*buf)->buf!=NULL) free((*buf)->buf);
175 if (dat==NULL)
return buf;
177 if (len<0) len = (int)strlen((
char*)dat);
179 if (buf.
buf==NULL)
return buf;
181 memcpy(buf.
buf, dat, len);
215 if (buf.
bufsz>=0 && buf.
buf!=NULL) {
216 str.
buf = (
unsigned char*)malloc(buf.
bufsz+1);
241 for (i=0; i<n; i++) str.
buf[i] = cc;
255 if (buf->
bufsz>len)
return;
274 if (str->
buf!=NULL) memset(str->
buf, 0, str->
bufsz+1);
323 if (sz<0) sz = (int)strlen((
const char*)src->
buf);
326 if (dst->
bufsz < sz) {
330 buf = (
unsigned char*)malloc(dz+1);
332 memset(buf, 0, dz+1);
340 memcpy(dst->
buf, src->
buf, sz);
392 if (sz<0) sz = (int)strlen((
const char*)src->
buf);
397 if (dst->
buf!=NULL) dz = (int)strlen((
const char*)dst->
buf);
401 if (dst->
bufsz < sz+dz) {
406 buf.
buf = (
unsigned char*)malloc(buf.
bufsz+1);
409 memcpy(buf.
buf, dst->
buf, dz);
438 memcpy(dst->
buf+dz, src->
buf, sz);
439 dst->
buf[dz+sz] =
'\0';
440 dst->
vldsz = sz + dz;
523 if (len<0) sz = (int)strlen((
const char*)src);
527 if (dst->
bufsz < sz) {
530 buf = (
unsigned char*)malloc(dz+1);
532 memset(buf, 0, dz+1);
534 if (dst->
buf!=NULL) free(dst->
buf);
539 memcpy(dst->
buf, src, sz);
590 if (len<0) sz = (int)strlen((
const char*)src);
596 if (dst->
buf!=NULL) dz = (int)strlen((
const char*)dst->
buf);
600 if (dst->
bufsz < sz+dz) {
605 buf.
buf = (
unsigned char*)malloc(buf.
bufsz+1);
608 memcpy(buf.
buf, dst->
buf, dz);
614 memcpy(dst->
buf+dz, src, sz);
615 dst->
buf[dz+sz] =
'\0';
616 dst->
vldsz = sz + dz;
774 for (i=0; i<n; i++) {
775 if (src.
buf[i]!=dst.
buf[i])
return 1;
811 if (buf.
buf==NULL)
return ecd;
812 if (buf.
vldsz<0) sz = (int)strlen((
const char*)buf.
buf);
814 if (sz<=0)
return ecd;
817 if (bas==NULL)
return ecd;
819 sz = ((sz + 2)/3)*4 + 1;
856 if (str.
buf==NULL)
return dcd;
859 if (bas==NULL)
return dcd;
886 if (bin==NULL)
return enc;
887 if (sz<=0) sz = (unsigned)strlen((
char*)bin);
890 if (str==NULL)
return enc;
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';
911 if (cc == 0x00) cc =
'-';
916 for (i=0; i<enc.
vldsz; i++) {
917 if (enc.
buf[i]==
'/') enc.
buf[i] = cc;
931 if (cc == 0x00) cc =
'-';
934 for (i=0; i<str.
vldsz; i++) {
935 if (str.
buf[i]==cc) str.
buf[i] =
'/';
962 if (str.
buf==NULL)
return ret;
965 for(i=0,j=0; j<n-1; j++) {
969 if (buf[i]==
'\0')
return ret;
977 if (ret.
buf==NULL)
return str;
979 for(i=0; i<cnt; i++) ret.
buf[i] = buf[pos+i];
983 ret.
vldsz = (int)strlen((
const char*)ret.
buf);
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;
1016 while (buf[*ptr]!=
CHAR_LF && buf[*ptr]!=
CHAR_CR && buf[*ptr]!=
'\0') (*ptr)++;
1021 if (ret.
buf==NULL)
return ret;
1023 for(i=0; i<cnt; i++) ret.
buf[i] = buf[pos+i];
1024 ret.
buf[cnt] =
'\0';
1027 ret.
vldsz = (int)strlen((
const char*)ret.
buf);
1053 unsigned char* buf = str.
buf;
1056 if (buf==NULL)
return item;
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++;
1063 if (buf[i]==
'\0')
return item;
1066 while (buf[i]!=
'\0' && buf[i]!=cc) i++;
1070 if (item.
buf==NULL)
return item;
1072 for (i=0; i<cnt; i++) item.
buf[i] = buf[pos+i];
1073 item.
vldsz = (int)strlen((
const char*)item.
buf);
1097 unsigned char* buf = str.
buf;
1100 if (buf==NULL)
return item;
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++;
1108 if (buf[i]==
'\0')
return item;
1111 while (buf[i]!=
'\0' && buf[i]!=cc) i++;
1115 if (item.
buf==NULL)
return item;
1117 for (i=0; i<cnt; i++) item.
buf[i] = buf[pos+i];
1118 item.
vldsz = (int)strlen((
const char*)item.
buf);
1138 if (buf.
buf==NULL)
return res;
1141 res.
vldsz = (int)strlen((
char*)res.
buf);
1160 unsigned char *c1, *c2;
1164 while(str->
buf[i]!=
'\0'){
1165 c1 = &(str->
buf[i]);
1167 if(*c1>=0xa1 && *c1<=0xfe){
1201 char base[]=
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
1206 if (pass.
buf==NULL)
return pass;
1208 sz = (int)strlen(base);
1209 for (i=0; i<n; i++) pass.
buf[i] = base[rand()%sz];
1231 if (str.
buf==NULL)
return str;
1234 for (i=0; i<n; i++)
setBit(str.
buf, i, rand()%2);
1239#define DUMP_BUFFER_LINE_SIZE 85
1240#define DUMP_BUFFER_DELI_START 48
1241#define DUMP_BUFFER_CHAR_START 51
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;
1264 int lineno = (sz + 15)/16;
1268 for (l=0; l<lineno; l++) {
1272 sprintf(wrkbuf,
"%02x ", buf.
buf[l*16+i]);
1273 memcpy(str.
buf+sp+i*3, wrkbuf, 3);
1275 if (buf.
buf[l*16+i]>=0x20 && buf.
buf[l*16+i]<=0x7e) {
1276 sprintf(wrkbuf,
"%c ", buf.
buf[l*16+i]);
1284 memcpy(str.
buf+sp+i*3,
" ", 3);
1312 int len = (int)strlen((
char*)buf->
buf);
1329 char* indent = (
char*)malloc(len + 1);
1331 memset(indent, cc, len);
1351 if (str->
buf==NULL)
return;
1353 len = (int)strlen((
const char*)str->
buf);
1354 for (i=0; i<len; i++) {
1357 str->
vldsz = (int)strlen((
const char*)str->
buf);
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;
1409 p = fgets((
char*)str->
buf, str->
bufsz, fp);
1410 m = (int)strlen((
const char*)str->
buf);
1442 pp = fgets((
char*)buf.
buf, buf.
bufsz, fp);
1443 buf.
vldsz = (int)strlen((
const char*)buf.
buf);
1448 pp = fgets((
char*)buf.
buf, buf.
bufsz, fp);
1449 buf.
vldsz = (int)strlen((
const char*)buf.
buf);
1476 if (sz<=0)
return buf;
1478 fp = fopen(fn,
"rb");
1479 if (fp==NULL)
return buf;
1503 if (sz<0)
return buf;
1506 if (buf.
buf==NULL)
return buf;
1509 cc = (int)fread(buf.
buf, buf.
vldsz, 1, fp);
1535 fp = fopen(fn,
"wb");
1536 if (fp==NULL)
return FALSE;
1538 cc = (int)fwrite(buf.
buf, buf.
vldsz, 1, fp);
1539 if (cc!=1)
return FALSE;
1568 if (bin==NULL)
return res;
1571 if (len<0) len = (int)strlen(bin);
1572 for (i=0; i<len; i++) {
1575 for (j=0; j<res.
vldsz; j++) {
1576 if (cc!=res.
buf[j]) wrk.
buf[n++] = res.
buf[j];
1605 int i, j, flen, tlen;
1609 if (buf.
buf==NULL || frm==NULL || tos==NULL)
return res;
1611 flen = (int)strlen(frm);
1612 tlen = (int)strlen(tos);
1613 if (buf.
vldsz<=0) buf.
vldsz = (int)strlen((
const char*)buf.
buf);
1615 int difsz = tlen - flen;
1616 if (difsz<0) difsz = 0;
1617 else difsz = difsz*100;
1622 if (!strncmp((
const char*)(buf.
buf+i), frm, flen)){
1623 res.
vldsz = (int)strlen((
const char*)res.
buf);
1629 res.
buf[j++] = buf.
buf[i++];
1634 res.
vldsz = (int)strlen((
const char*)res.
buf);
1683 if (buf==NULL || frm==NULL || tos==NULL)
return;
1705 if (buf==NULL)
return;
1708 for (i=0; i<buf->
vldsz; i++) {
1709 if (buf->
buf[i]==frm) buf->
buf[i] = toc;
1738 if (!cc)
return FALSE;
1741 if (!cc)
return FALSE;
1763 sz = htonl(buf.
vldsz);
1764 cc = (int)fwrite(&sz,
sizeof(sz), 1, fp);
1765 if (cc!=1)
return FALSE;
1767 cc = (int)fwrite(buf.
buf, buf.
vldsz, 1, fp);
1768 if (cc!=1)
return FALSE;
1789 cc = (int)fread(&sz,
sizeof(sz), 1, fp);
1790 if (cc!=1)
return buf;
1794 if (buf.
buf==NULL)
return buf;
1796 cc = (int)fread(buf.
buf, buf.
vldsz, 1, fp);
1821 if (key==NULL || buf==NULL)
return FALSE;
1830 if (buf->
buf==NULL) {
1871 buf->
buf[buf->
vldsz] = (
unsigned char)cc;
Buffer encode_base64_Buffer(Buffer buf)
バイナリデータ buf.bufの buf.vldszバイトを Base64にエンコード する
Buffer get_line_Buffer(Buffer str, int n)
複数行の文字列バッファから任意の行を取り出す.
int ins_Buffer(Buffer *src, Buffer *dst)
Buffer変数 dst の前に srcを挿入する.
int ins_i2Buffer(int src, Buffer *dst)
整数 srcを文字列に変換して,dstの前に 挿入する.
Buffer read_Buffer_format_fp(FILE *fp)
ファイル fp から Buffer型変数の buf部を読み込む
Buffer make_Buffer(int sz)
Buffer型変数のバッファ部をつくり出す.
Buffer replace_sBuffer_bystr(Buffer buf, const char *frm, const char *tos)
buf.buf中の文字列 frmを tosで置き換えた 新しい Bufferを返す
int fgets_Buffer(Buffer *str, FILE *fp)
拡張fgets.文字列の読み込みに使用する.改行コードは削除する
void chomp_Buffer(Buffer *str)
最初の改行コード以降を無視する.
Buffer set_Buffer(void *dat, int len)
Buffer型変数のバッファ部を新しく作り, そのバッファに bufをコピーする.
int read_Buffer2_format_fp(Buffer *key, Buffer *buf, FILE *fp)
ファイル fp から 2つのBuffer型変数の keyと bufを読み込む.
Buffer encode_base64_filename_Buffer(Buffer buf, unsigned char cc)
バイナリデータ bufを Base64で encodeしてファイル名を作る.ただし '/' は cc として扱う.
Buffer randstr_Buffer(int n)
英数字を n個生成
Buffer decode_base64_filename_Buffer(Buffer str, unsigned char cc)
bufを Base64で decodeしてバイナリデータを取り出す.ただし cc は '/' として扱う.
int cat_b2Buffer(void *src, Buffer *dst, int len)
任意のバイナリデータsrcを Buffer型変数dstへ lenバイト catする.
void kanji_convert_Buffer(Buffer *str)
大域変数 KanjiCode (tools.h) に従って漢字コードを変換する.
void clear_Buffer(Buffer *str)
Buffer型変数 のバッファ部を 0クリアする.
void free_Buffer(Buffer *buf)
Buffer型変数のバッファ部を解放する
Buffer randbit_Buffer(int n)
ビットを n個生成
char pop_char_ringStack(Buffer *buf)
簡易 char型 ringStack POP
void push_char_ringStack(Buffer *buf, char cc)
簡易 char型 ringStack PUSH
Buffer read_Buffer_file(const char *fn)
ファイル fn の内容を Buffer型変数に読み込む.
Buffer read_Buffer_data(FILE *fp, int sz)
ファイルポインタ fp から szバイトをBuffer型変数に読み込む.
Buffer init_Buffer()
初期化したBuffer型変数を返す.
void rewrite_Buffer_bychar(Buffer *buf, const char frm, const char toc)
buf.buf中の文字 frmを tocで置き換える
int save_Buffer_file(Buffer buf, char *fn)
ファイル fn へ Buffer型変数の buf部を書き込む
Buffer dup_Buffer(Buffer buf)
Buffer型変数のコピーをつくる.
int copy_r2Buffer(float src, Buffer *dst)
実数 srcを文字列に変換して,dstへ copyする.
int ins_r2Buffer(float src, Buffer *dst)
実数 srcを文字列に変換して,dstの前に 挿入する.
int read_lines_Buffer(Buffer *str, FILE *fp)
複数文字列行の読み込み.文字列の読み込みに使用する
void expand_Buffer(Buffer *buf, int len)
buf のデータ部を lenに拡張した新しい Buffer を返す.
int save_Buffer_format_fp(Buffer buf, FILE *fp)
ファイル fp へ Buffer型変数の buf部を書き込む
Buffer rept_Buffer(unsigned char cc, int n)
文字 ccを n回繰り返したBuffer型データを返す.
#define DUMP_BUFFER_LINE_SIZE
Buffer pack_Buffer(Buffer buf, char cc)
文字列の先頭のcc(複数),終わりのcc(複数),TAB, CR, LF を削除
void rewrite_sBuffer_bystr(Buffer *buf, const char *frm, const char *tos)
buf.buf自体を書き換えること以外は replace_sBuffer_bystr() と同じ
int isText_Buffer(Buffer buf)
Buffer型変数 bufのバッファ部がテキストかどうか検査する.
int copy_i2Buffer(int src, Buffer *dst)
整数 srcを文字列に変換して,dstへ copyする.
Buffer decode_base64_Buffer(Buffer str)
strのバッファを Base64からデコードする
int replace_sBuffer_file(char *fn, Buffer frm, Buffer tos)
テキストファイル中の frm の文字列を tos に書き換える
int cat_r2Buffer(float src, Buffer *dst)
実数 srcを文字列に変換して,dstへ catする.
int recalc_strlen_Buffer(Buffer *buf)
Buffer型変数のデータ部を文字列と見なして,その長さを返す.
Buffer make_Buffer_bychar(unsigned char cc)
文字から,Buffer型変数のバッファ部をつくり出す.
int cmp_Buffer(Buffer src, Buffer dst, int n)
バッファ部の比較.
int cat_Buffer(Buffer *src, Buffer *dst)
Buffer変数 srcから dstへバッファを catする.
Buffer encode_base64_Buffer_bin(unsigned char *bin, unsigned int sz, int nopad)
sz バイトの バイナリデータ binを Base64にエンコード する.
int cat_i2Buffer(int src, Buffer *dst)
整数 srcを文字列に変換して,dstへ catする.
void del_Buffer(Buffer **buf)
new_Buffer()で作り出した Buffer型変数を削除する.
#define DUMP_BUFFER_DELI_START
Buffer * new_Buffer(int sz)
空のBuffer型変数を生成する.
int copy_Buffer(Buffer *src, Buffer *dst)
Buffer型変数 srcから dstへバッファをコピーする.
Buffer cawk_Buffer(Buffer str, char cc, int n)
Buffer文字列に対する(変形の)awk.
int ins_b2Buffer(void *src, Buffer *dst, int len)
任意のバイナリデータsrcを Buffer型変数dstの前に lenバイト挿入する
#define DUMP_BUFFER_CHAR_START
Buffer get_seq_data_Buffer(Buffer str, int *ptr)
複数行の文字列バッファ内の行データをシーケンシャルに取り出す.
Buffer erase_bBuffer(Buffer buf, char *bin, int len)
buf.buf 中にある bin のデータ(各1Byte,順不同)を削除する.
int save_Buffer2_format_fp(Buffer key, Buffer buf, FILE *fp)
ファイル fp へ 2つのBuffer型変数 keyと bufを書き込む
int copy_b2Buffer(void *src, Buffer *dst, int len)
任意のバイナリデータsrcを Buffer型変数dstへ lenバイト copyする
Buffer dump_Buffer(Buffer buf)
Buffer型変数のデバッグ用 16進を Buffer型変数に出力する.
Buffer awk_Buffer(Buffer str, char cc, int n)
Buffer文字列に対する awk.
void add_indent_Buffer(Buffer *buf, char cc, int len)
インデント(cc x num) を付加する.
#define copy_s2Buffer(src, dst)
copy_b2Buffer()
#define make_Buffer_randomstr(sz)
make_Buffer_randomstr()
#define replace_sBuffer(buf, f, t)
replace_sBuffer()
#define BUFFER_FACT
Buffer 変数の領域確保のための領域確保倍率
#define cat_s2Buffer(src, dst)
cat_b2Buffer()
#define make_Buffer_bystr(str)
set_Buffer()
#define LEN_INT
log 2^64 + '\0' + 1(予備)
#define LEN_REAL
15*2 + '\0' + 1(予備)
#define JBXL_BUFFER_MAKE_ERROR
Buffer の作成に失敗
#define JBXL_NULL_ERROR
参照先のアドレスが NULL
#define JBXL_MALLOC_ERROR
メモリ確保エラー
#define JBXL_BUFFER_CMP_ERROR
比較文字数が vldsz より大きい
int bufsz
確保してあるバッファの大きさ - 1.
int vldsz
データの長さ.バイナリデータの場合も使用可能.文字列の場合は 0x00 を含まない.
int state
変数の状態を表す.正常は JBXL_NORMAL
unsigned char * buf
バッファの先頭へのポインタ.str[bufsz]は必ず 0x00となる.