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

Go to the source code of this file.

Functions

int isNull (void *p)
 
int is_little_endian (void)
 エンディアンの動的チェック
 
int is_big_endian (void)
 エンディアンの動的チェック
 
void check_endian (void)
 システムのエンディアンを判別して,大域変数 HostEndian に設定する
 
double double_from_little_endian (void *ptr)
 エンディアンによるデータ変換
 
float float_from_little_endian (void *ptr)
 
int int_from_little_endian (void *ptr)
 
unsigned int uint_from_little_endian (void *ptr)
 
short short_from_little_endian (void *ptr)
 
unsigned short ushort_from_little_endian (void *ptr)
 
double double_from_big_endian (void *ptr)
 
float float_from_big_endian (void *ptr)
 
int int_from_big_endian (void *ptr)
 
unsigned int uint_from_big_endian (void *ptr)
 
short short_from_big_endian (void *ptr)
 
unsigned short ushort_from_big_endian (void *ptr)
 
char * get_local_timestamp (time_t date, const char *format)
 要 free()
 
char * get_gmt_timestamp (time_t date, const char *format)
 要 free()
 
char * get_line (char *buf, int n)
 文字型データbufのバッファ内の n行目を取り出す.改行コードは削除される.要 free()
 
char * get_seq_data (char *buf, int *ptr)
 文字型データbufのバッファ内の 行データをシーケンシャルに取り出す.
 
char * awk (char *buf, char cc, int n)
 ccを区切り記号として, strのバッファ内の n番目の項目を返す.要 free()
 
char * cawk (char *buf, char cc, int n)
 連続するccを区切り記号として, strのバッファ内の n番目の項目を返す.要 free()
 
int bincmp (unsigned char *b1, unsigned char *b2, int n)
 バイナリデータを n Byte比べる.一致するなら 0
 
int strnrvscmp (const char *s1, const char *s2, int n)
 文字列 s1と s2を後ろから n文字比較する.一致するなら 0
 
int strncaservscmp (const char *s1, const char *s2, int n)
 文字列 s1と s2を後ろから n文字比較する.大文字小文字は区別しない.一致するなら 0
 
char * strstrcase (const char *buf, const char *nd)
 文字列 bufの中に文字列 ndがあるかどうかをチェックする.大文字小文字は区別しない.
 
int ex_strncmp (const char *dat, const char *key, int len)
 文字列 s1とs2を拡張比較する.一致するなら TRUE
 
int ex_strncasecmp (const char *dat, const char *key, int len)
 文字列 s1とs2を拡張比較する.大文字小文字を区別しない.一致するなら TRUE
 
int ex_strnrvscmp (const char *dat, const char *key, int len)
 文字列 s1とs2を後ろから拡張比較する.一致するなら TRUE
 
int ex_strncaservscmp (const char *dat, const char *key, int len)
 文字列 s1とs2を後ろから拡張比較する.一致するなら TRUE
 
char * chomp (char *buf)
 最初の改行コード以降を無効にする.
 
char * skip_chars (char *pp, const char *check)
 check[]中の何れかの文字までポインタをスキップさせる.ただし クォーテーション内は完全スキップ
 
char * skip_char (char *pp, char cc)
 cc の文字までポインタをスキップさせる.ただし クォーテーション内は完全スキップ
 
char * skip_char_pair (char *pp, char pair, char end)
 pair と end で閉じるまでポインタをスキップさせる.ただし クォーテーション内は完全スキップ
 
char * skip_string_end (char *pp)
 次の文字列を一つスキップする.最期のクォーテーションの位置を返す.
 
char * pack_head_tail_char (char *mesg, char cc)
 文字の先頭のcc(複数),TAB, CR, LF.終わりのcc(複数),TAB, CR, LF を削除.要 free()
 
char * pack_char_len (char *mesg, char cc, int len)
 文字列の一部の先頭のcc(複数),終わりのcc(複数),CR, LF を削除.要 free()
 
char * change_esc (char *mesg)
 文字列中の CR, LF を \r, \n に変換する.要 free()
 
void replace_char (unsigned char *buf, int len, unsigned char frm, unsigned char toc)
 データbuf 中のバイトデータ frm を tocに変更する.
 
char * replace_str (char *buf, int len, const char *frm, const char *tos)
 文字列 buf中の frmを tosに書き換えたものを返す.free() してはいけない.

 
char * cut_str (char *buf, int ls, int le)
 buf[ls]〜buf[le] を切り出す.要 free()
 
char * dup_str (char *buf)
 文字列を複製する.要 free()
 
int is_number (unsigned char *str)
 数字かどうか判定する(簡易版).整数(1) と小数点付き数字(2) のみ.
 
char * itostr (int n)
 int を文字に変換する.free() は不要

 
char * ltostr (long int n)
 long int を文字に変換する.free() は不要

 
char * ultostr (unsigned long int n)
 
char * lltostr (long long int n)
 long long int を文字に変換する.free() は不要

 
char * ulltostr (unsigned long long int n)
 
char * ftostr (float n)
 float を文字に変換する.free() は不要

 
char * dtostr (double n)
 double を文字に変換する.free() は不要

 
char * itostr_ts (int n)
 int を文字に変換する.要 free()

 
char * ltostr_ts (long int n)
 long int を文字に変換する.要 free()

 
char * ultostr_ts (unsigned long int n)
 
char * lltostr_ts (long long int n)
 long long int を文字に変換する.要 free()
 
char * ulltostr_ts (unsigned long long int n)
 
char * ftostr_ts (float n)
 float を文字に変換する.要 free()
 
char * dtostr_ts (double n)
 double を文字に変換する.要 free()
 
int count_lines (const char *buf)
 文字列データの行数を数える.行頭が '\0'の場合も1行と数える.
 
int hexstr2i (const char *str)
 16進の文字列を整数に変換する.
 
char * randstr (int n)
 ランダムに A-Za-z0-9 までの文字を n文字生成する.
 
unsigned char * randbit (int n)
 ランダムに n bitのバイナリを生成する.
 
unsigned long long int ntohull (unsigned long long int s)
 
void swap_byte (void *p, int s, int c)
 sの長さのpのバイト順序をbバイト毎に逆順にする.
 
short swaps (unsigned short p)
 16bit の上下8bitを入れ替える.
 
int swapl (unsigned int p)
 32bit pを8bitづつ逆順にする
 
long long int swapd (unsigned long long int p)
 
void reverse_str (uByte *p, int s)
 バイト(octet)列を逆順にする.
 
int file_from_to (const char *src, const char *dst, const char *mode)
 modeに従って,ファイル sを dにコピーする.
 
int fp_from_to (FILE *src, FILE *dst, long int sz)
 ファイル sを dにコピーする.
 
char * get_file_name (const char *str)
 フルパスからファイル名へのポインタを取り出す.free() してはいけない.
 
char * del_file_name (const char *str)
 フルパスを書き換えてファイル名部分を削除する.free() してはいけない.
 
char * get_file_path (const char *str)
 ファイル名を含むパスからパスのみを生成する.strは変化しない.要 free().
 
char * get_file_extension (const char *str)
 フルパスからファイル名の拡張子へのポインタを取り出す.free() してはいけない.
 
char * del_file_extension (const char *str)
 フルパスを書き換えて拡張子を削除する.free() してはいけない.
 
char * cut_file_extension (const char *str)
 拡張子を削除したフパス名を生成する.strは変化しない.要 free().
 
unsigned long int file_size (const char *fn)
 ファイルの大きさを返す.
 
int file_exist (const char *fn)
 ファイルの存在を検査する.
 
FILE * file_chmod_open (const char *fn, const char *fm, mode_t mode)
 ファイルの許可属性をmode へ変更した後,ファイルを fmモードでオープン
 
char * temp_filename (const char *dir, int flen)
 /dev/urandom を利用して作業用ファイルのランダムなファイル名を得る.
 
unsigned char * read_file (const char *fname, long unsigned int *size)
 ファイルからデータを読み込む
 
long unsigned int write_file (const char *fname, unsigned char *buf, long unsigned int size)
 ファイルにデータを書き込む
 
int mkdirp (const char *path, mode_t mode)
 mkdir -p path 相当.
 
char * double_bs (char *str)
 文字列中の \ を \\に置き換えた文字列を返す.要 free()
 
char * numbering_name (const char *fmt, int n)
 フォーマット fmtに従って,nを含む文字列を作り出す.要 free()
 
void kanji_convert (unsigned char *mesg)
 大域変数 KnjiCodeに従って漢字コードを変換する.
 
void kanji_convert_euc2sjis (unsigned char *mesg)
 EUCをSJISに変換する.
 
void kanji_convert_sjis2euc (unsigned char *mesg)
 SJISをEUCに変換する.
 
void euc2sjis (unsigned char *c1, unsigned char *c2)
 EUC -> SJIS.
 
void sjis2euc (unsigned char *c1, unsigned char *c2)
 SJIS -> EUC.
 
void upper_string (char *str)
 
unsigned char * decode_base64 (unsigned char *buf, int *sz)
 bufを base64からデコードする.要 free()
 
unsigned char * encode_base64 (unsigned char *buf, int sz)
 バイナリデータ bufを base64にエンコードする.要 free()
 
unsigned char * decode_base64_filename (unsigned char *buf, int *sz, unsigned char cc)
 bufを Base64で decodeしてバイナリデータを取り出す.ただし cc は '/' として扱う.要 free()
 
unsigned char * encode_base64_filename (unsigned char *buf, int sz, unsigned char cc)
 バイナリデータ bufを Base64で encodeしてファイル名を作る.ただし '/' は cc として扱う.要 free()
 
unsigned char * decode_urlenc (unsigned char *buf, int *sz)
 buf を URLエンコードからデコードする.要 free()
 
unsigned char * encode_urlenc (unsigned char *buf, int sz)
 バイナリデータ bufを URLエンコードする.要 free()
 
unsigned char * decode_quoted_printable (unsigned char *buf, int *sz)
 buf を quoted printableからデコードする.要 free()
 
unsigned char * encode_quoted_printable (unsigned char *buf, int sz)
 バイナリデータ bufを quoted printable にエンコードする.要 free()
 
unsigned char * encode_hex (unsigned char cc)
 キャラクタを16進コードの文字列に変換する.要 free()
 
unsigned char decode_hex (unsigned char pp1, unsigned char pp2)
 16進コードをキャラクタに変換する.O-9,A-F以外が指定された場合は0とみなす. 内容を書き換える.
 
ringBuffernew_ringBuffer (int sz)
 リングバッファを生成する.
 
void del_ringBuffer (ringBuffer **rb)
 リングバッファそのものを削除する.new_ringBuffer() と対.
 
ringBuffer init_ringBuffer ()
 リングバッファを初期化する.
 
ringBuffer make_ringBuffer (int sz)
 バッファ部が存在するリングバッファを作り出す.
 
void free_ringBuffer (ringBuffer *rb)
 リングバッファを解放する.make_ringBuffer() と対.
 
void clear_ringBuffer (ringBuffer *rb)
 リングバッファのデータを削除する.
 
int put_ringBuffer (ringBuffer *rb, unsigned char *pp, int sz)
 リングバッファにデータを格納する.
 
unsigned char * get_ringBuffer (ringBuffer *rb, int sz)
 リングバッファからデータを得る.要 free()
 
int seek_ringBuffer (ringBuffer *rb, int sz)
 リングバッファのデータポインタを seek する.
 
unsigned char * ref_ringBuffer (ringBuffer *rb, int pos)
 spoint 地点から pos番目のデータへの参照.posは 0から数える.spoint は変化しない.
 
int put_mstream (mstream *sb, unsigned char *mesg)
 メッセージ(文字列)ストリーム sb へメッセージ(の一部)を格納する
 
unsigned char * get_mstream (mstream *sb)
 メッセージ(文字列)ストリーム sb から次のメッセージを取り出す.改行コードは削除される.
 
unsigned char * fgets_mstream (unsigned char *mesg, mstream *sb)
 メッセージストリームからメッセージを一行だけ取り出す.
 
unsigned char * uuid2guid (unsigned char *p)
 uuid を guid に変換する.要 free()
 
unsigned char * guid2uuid (unsigned char *p)
 guid を uuid に変換する.要 free()
 
void open_logfile (void)
 デフォルトのログファイルをオープンする
 
void close_logfile (void)
 デフォルトのログファイルをクローズする
 
void print_logfile (const char *fmt,...)
 デフォルトのログファイルにデータを書き込む
 
void open_errfile (void)
 デフォルトのエラーファイルをオープンする
 
void close_errfile (void)
 デフォルトのエラーファイルをクローズする
 
void print_errfile (const char *fmt,...)
 デフォルトのエラーファイルにデータを書き込む
 
void print_message (const char *fmt,...)
 バッファリングなしのメッセージ出力(stderr)
 
void fprint_message (FILE *fp, const char *fmt,...)
 バッファリングなしのメッセージ出力
 
void print_escape (const char *fmt, char *mesg)
 エスケープ文字を含むメッセージの出力(stderr)
 
void fprint_escape (FILE *fp, char *fmt, char *mesg)
 
void fdump (FILE *fp, unsigned char *mesg, int n)
 16進ダンプを吐き出す
 
void print_16x (FILE *fp, unsigned char *mesg, int n)
 16進ダンプを吐き出す(1行)
 
char * get_graphic_extension (uWord tex)
 

Variables

int DebugMode = OFF
 ON の場合 ライブラリ全体がデバックモードであることを示す.デフォルトは OFF.
 
int UnitTestMode = OFF
 ユニット単体でのテストを行う場合に使用する.デフォルトは OFF.
 
int KanjiCode = CODE_UTF8
 システムの漢字コード
 
int HostEndian = UNKNOWN_ENDIAN
 システムの Endian
 
unsigned long int UsedMemoryBase = 0
 メモリチェック用
 
unsigned char LocalIPNum [4] = {0x7f, 0x00, 0x00, 0x01}
 127.0.0.1 のバイナリ
 
unsigned char LocalIPNum6 [16] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01}
 ::1 のバイナリ
 
static char _ToSTR [LDATA]
 作業用(文字変換)
 
FILE * FP_LogFile = NULL
 
FILE * FP_ErrFile = NULL
 
static char _GraphicFileExtension [L_OCT]
 

Function Documentation

◆ awk()

char * awk ( char * buf,
char cc,
int n )

char* awk(char* buf, char cc, int n)

ccを区切り記号として, strのバッファ内の n番目の項目を返す. 返されたデータは free()する必要がある.

Parameters
buf操作対象文字列.
cc区切り文字.
n項目の指定. 1から数える.
Returns
指定された n番目の項目の文字列.要 free
See also
cawk()

Definition at line 567 of file tools.cpp.

568{
569 int i, j, pos, cnt;
570 char* item = NULL;
571
572 if (buf==NULL) return NULL;
573
574 for(i=0,j=0; j<n-1; j++) {
575 while (buf[i]!='\0' && buf[i]!=cc) i++;
576 if (buf[i]==cc) i++;
577 }
578 if (buf[i]=='\0') return NULL;
579
580 pos = i;
581 while (buf[i]!='\0' && buf[i]!=cc) i++;
582 cnt = i - pos;
583
584 item = (char*)malloc(cnt+1);
585 if (item==NULL) return NULL;
586
587 for (i=0; i<cnt; i++) item[i] = buf[pos+i];
588 item[cnt] = '\0';
589
590 return item;
591}

Referenced by awk_tList(), to_address_num(), and to_ipaddress_list().

Here is the caller graph for this function:

◆ bincmp()

int bincmp ( unsigned char * b1,
unsigned char * b2,
int n )

int bincmp(unsigned char* b1, unsigned char* b2, int n)

バイナリデータ s1と s2 nバイト比較する.

Parameters
b1比較するバイナリデータ1
b2比較するバイナリデータ2
n比較するバイト数
Return values
0一致する
1一致しない
Attention
strncmp()の戻り値の定義とは若干異なるので注意すること.

Definition at line 650 of file tools.cpp.

651{
652 int i;
653
654 if (b1==NULL || b2==NULL) return 1;
655
656 for (i=0; i<n; i++) {
657 if (b1[i]!=b2[i]) return 1;
658 }
659
660 return 0;
661}

◆ cawk()

char * cawk ( char * buf,
char cc,
int n )

char* cawk(char* buf, char cc, int n)

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

n は 1から数える.連続する cc(区切り)は一つの区切りとみなす. 返されたデータは free()する必要がある.

Parameters
buf操作対象文字列.
cc区切り文字.
n項目の指定.
Returns
指定された n番目の項目の文字列.要 free.
See also
awk()

Definition at line 609 of file tools.cpp.

610{
611 int i, j, pos, cnt;
612 char* item = NULL;
613
614 if (buf==NULL) return NULL;
615
616 for(i=0,j=0; j<n-1; j++) {
617 while (buf[i]!='\0' && buf[i]!=cc) i++;
618 while (buf[i]!='\0' && buf[i]==cc) i++;
619 }
620 if (buf[i]=='\0') return NULL;
621
622 pos = i;
623 while (buf[i]!='\0' && buf[i]!=cc) i++;
624 cnt = i - pos;
625
626 item = (char*)malloc(cnt+1);
627 if (item==NULL) return NULL;
628
629 for (i=0; i<cnt; i++) item[i] = buf[pos+i];
630 item[cnt] = '\0';
631
632 return item;
633}

Referenced by cawk_tList().

Here is the caller graph for this function:

◆ change_esc()

char * change_esc ( char * mesg)

char* change_esc(char* mesg)

文字列中の CR, LF を \r, \n に変換する. 返されたデータは free()する必要がある.

Parameters
mesg操作対象の文字列
Returns
変換後の文字列.要 free

Definition at line 1210 of file tools.cpp.

1211{
1212 int i, j;
1213 char* pp;
1214
1215 if (mesg==NULL) return NULL;
1216
1217 pp = (char*)malloc((strlen(mesg)+1)*2);
1218 if (pp==NULL) return NULL;
1219 memset(pp, 0, (strlen(mesg)+1)*2);
1220
1221 i = j = 0;
1222 while(mesg[i]!='\0') {
1223 if (mesg[i]==CHAR_CR) {
1224 pp[j++] = '\\';
1225 pp[j++] = 'r';
1226 }
1227 else if (mesg[i]==CHAR_LF) {
1228 pp[j++] = '\\';
1229 pp[j++] = 'n';
1230 }
1231 else {
1232 pp[j++] = mesg[i];
1233 }
1234 i++;
1235 }
1236 pp[j] = '\0';
1237
1238 return pp;
1239}
#define CHAR_CR
改行
Definition tools.h:78
#define CHAR_LF
ラインフィード
Definition tools.h:79

References CHAR_CR, and CHAR_LF.

Referenced by fprint_escape(), and print_escape().

Here is the caller graph for this function:

◆ check_endian()

void check_endian ( void )

void check_endian(void)

大域変数 HostEndianLITTLE_ENDIANBIG_ENDIAN を設定する.

See also
HostEndian

Definition at line 143 of file tools.cpp.

144{
146}
int HostEndian
システムの Endian
Definition tools.cpp:21
int is_little_endian(void)
エンディアンの動的チェック
Definition tools.cpp:80
#define UNKNOWN_ENDIAN
Definition tools.h:88

References HostEndian, is_little_endian(), and UNKNOWN_ENDIAN.

Referenced by double_from_big_endian(), double_from_little_endian(), float_from_big_endian(), float_from_little_endian(), int_from_big_endian(), int_from_little_endian(), short_from_big_endian(), short_from_little_endian(), uint_from_big_endian(), uint_from_little_endian(), ushort_from_big_endian(), and ushort_from_little_endian().

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

◆ chomp()

char * chomp ( char * buf)

char* chomp(char* buf)

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

Parameters
[in,out]buf改行を無効にする文字列.
Returns
処理された buf[] へのポインタ.

Definition at line 921 of file tools.cpp.

922{
923 int i, len;
924
925 if (buf==NULL) return NULL;
926
927 len = (int)strlen(buf);
928 for (i=0; i<len; i++) {
929 if (buf[i]==CHAR_LF || buf[i]==CHAR_CR) {
930 buf[i] = '\0';
931 return buf;
932 }
933 }
934 return buf;
935}

References CHAR_CR, and CHAR_LF.

Referenced by get_mstream().

Here is the caller graph for this function:

◆ clear_ringBuffer()

void clear_ringBuffer ( ringBuffer * rb)

void clear_ringBuffer(ringBuffer* rb)

リングバッファ rb のデータをクリア(初期化)する.

Parameters
rbリングバッファへのポインタ

Definition at line 3312 of file tools.cpp.

3313{
3314 if (rb!=NULL) {
3315 int sz = rb->bufsz;
3316 unsigned char* ptr = rb->buf;
3317 memset(rb->buf, 0, rb->bufsz);
3318 memset(rb, 0, sizeof(ringBuffer));
3319 rb->buf = ptr;
3320 rb->state = JBXL_NORMAL;
3321 rb->bufsz = sz;
3322 }
3323}
#define JBXL_NORMAL
正常
Definition jbxl_state.h:32
int bufsz
バッファ部のサイズ
Definition tools.h:157
int state
リングバッファの状態
Definition tools.h:163
unsigned char * buf
バッファ
Definition tools.h:156

References ringBuffer::buf, ringBuffer::bufsz, JBXL_NORMAL, and ringBuffer::state.

◆ close_errfile()

void close_errfile ( void )

void close_errfile(void)

デフォルトのエラーファイルをクローズする

Definition at line 3990 of file tools.cpp.

3991{
3992 if (FP_ErrFile==NULL) return;
3993
3994 fclose(FP_ErrFile);
3995 FP_ErrFile = NULL;
3996
3997 return;
3998}
FILE * FP_ErrFile
Definition tools.cpp:3893

References FP_ErrFile.

◆ close_logfile()

void close_logfile ( void )

void close_logfile(void)

デフォルトのログファイルをクローズする

Definition at line 3915 of file tools.cpp.

3916{
3917 if (FP_LogFile==NULL) return;
3918
3919 fclose(FP_LogFile);
3920 FP_LogFile = NULL;
3921
3922 return;
3923}
FILE * FP_LogFile
Definition tools.cpp:3892

References FP_LogFile.

◆ count_lines()

int count_lines ( const char * buf)

int count_lines(const char* buf)

文字列データ bufの行数を数える. 行頭が '\0' であっても 1行と数える

Parameters
buf行数を数える文字列データ
Returns
行数.

Definition at line 1673 of file tools.cpp.

1674{
1675 int i = 0;
1676 int line = 0;
1677
1678 if (buf==NULL) return 0;
1679 line++;
1680
1681 while(buf[i]!='\0') {
1682 if (buf[i]==CHAR_CR) {
1683 line++;
1684 if (buf[i+1]==CHAR_LF) i++;
1685 }
1686 else if (buf[i]==CHAR_LF) {
1687 line++;
1688 }
1689 i++;
1690 }
1691
1692 return line;
1693}

References CHAR_CR, and CHAR_LF.

◆ cut_file_extension()

char * cut_file_extension ( const char * str)

char* cut_file_extension(const char* str)

拡張子を削除したパス名を生成する.strは変化しない.要 free.

Parameters
strファイルのフルパス
Returns
str中のファイル名へのポインタ

Definition at line 2282 of file tools.cpp.

2283{
2284 if (str==NULL) return NULL;
2285
2286 char cc = '.';
2287 int len = (int)strlen(str);
2288 char* path = (char*)malloc(len+1);
2289 memcpy(path, str, len+1);
2290
2291 int sz = len - 1;
2292 while (sz>=0 && path[sz]!=cc) sz--;
2293
2294 if (sz<1) return path;
2295 path[sz] = '\0';
2296
2297 return path;
2298}

◆ cut_str()

char * cut_str ( char * buf,
int ls,
int le )

char* cut_str(char* buf, int ls, int le)

buf[ls] 〜 buf[le] を切り出してメモリに格納して返す. 返されたデータは free()する必要がある.

Parameters
buf操作対象の文字列
ls切り出し開始の位置
le切り出し終了の位置
Returns
切り出した文字列.要 free

Definition at line 1338 of file tools.cpp.

1339{
1340 int i, len;
1341 char* ret;
1342
1343 if (buf==NULL) return NULL;
1344
1345 ls = Max(ls, 0);
1346 le = Min(le, (int)strlen((const char*)buf));
1347 len = le - ls + 1;
1348 if (len<=0) return NULL;
1349
1350 ret = (char*)malloc(len+1);
1351 if (ret==NULL) return NULL;
1352 memset(ret, 0, len+1);
1353
1354 for (i=0; i<len; i++) ret[i] = buf[i+ls];
1355
1356 return ret;
1357}
#define Min(x, y)
Definition common.h:250
#define Max(x, y)
Definition common.h:247

References Max, and Min.

Referenced by check_passwd(), and x2crypt().

Here is the caller graph for this function:

◆ decode_base64()

unsigned char * decode_base64 ( unsigned char * buf,
int * sz )

unsigned char* decode_base64(unsigned char* buf, int* sz)

bufを base64からデコードする.

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

返されたデータは free()する必要がある.

Parameters
bufbase64からデコードする文字列.
[in,out]szin: sz デコードされたデータの長さを格納する intへのポインタ.NULLでも良い.
out: デコードされたデータのサイズ.
Returns
base64からデコードされたデータ.要 free
"QQ" をデコードすると 'A',0x00 となる.

Definition at line 2786 of file tools.cpp.

2787{
2788 int i, j, cc=0, bas, lt, ln;
2789 unsigned char* dcd;
2790
2791 lt = 0;
2792 ln = (int)strlen((const char*)buf);
2793 while (buf[lt]!='=' && lt<ln) {
2794 lt++;
2795 if (lt==ln) break;
2796 }
2797
2798 int len = lt/4*3 + (lt%4)*3/4;
2799 if (sz!=NULL) *sz = len;
2800
2801 dcd = (unsigned char*)malloc(len+1);
2802 if (dcd==NULL) return NULL;
2803 memset(dcd, 0, len+1);
2804
2805 for (i=0; i<lt; i++) {
2806 if (buf[i]>='A' && buf[i]<='Z') cc = buf[i] - 'A';
2807 else if (buf[i]>='a' && buf[i]<='z') cc = buf[i] - 'a' + 26;
2808 else if (buf[i]>='0' && buf[i]<='9') cc = buf[i] - '0' + 52;
2809 else if (buf[i]=='+') cc = 62;
2810 else if (buf[i]=='/') cc = 63;
2811
2812 if (cc<64) {
2813 bas = 32;
2814 for (j=0; j<6; j++) {
2815 setBit(dcd, i*6+j, cc/bas);
2816 cc = cc%bas;
2817 bas = bas/2;
2818 }
2819 }
2820 }
2821 return dcd;
2822}
#define setBit(x, n, i)
Definition common.h:259

References setBit.

Referenced by Base64::decode(), decode_base64_Buffer(), and decode_base64_filename().

Here is the caller graph for this function:

◆ decode_base64_filename()

unsigned char * decode_base64_filename ( unsigned char * buf,
int * sz,
unsigned char cc )

unsigned char* decode_base64_filename(unsigned char* buf, int* sz, unsigned char cc)

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

Definition at line 2887 of file tools.cpp.

2888{
2889 if (cc==0x00) cc = '-';
2890
2891 int i, len = (int)strlen((char*)buf);
2892 for (i=0; i<len; i++) {
2893 if (buf[i]==cc) buf[i] = '/';
2894 }
2895
2896 unsigned char* dec = decode_base64(buf, sz);
2897
2898 return dec;
2899}
unsigned char * decode_base64(unsigned char *buf, int *sz)
bufを base64からデコードする.要 free()
Definition tools.cpp:2786

References decode_base64().

Here is the call graph for this function:

◆ decode_hex()

unsigned char decode_hex ( unsigned char pp1,
unsigned char pp2 )

unsigned char decode_hex(unsigned char pp1, unsigned char pp2)

16進コードをキャラクタに変換する.O-9,A-F以外が指定された場合は0とみなす.

Parameters
pp116進コードの上位4Bit. 0-9,A-F
pp216進コードの下位4Bit. 0-9,A-F
Returns
指定されたASCIIコードのキャラクタ
例:decode_hex('2', '0') は ' ' を返す.

Definition at line 3171 of file tools.cpp.

3172{
3173 unsigned char ret;
3174
3175 if (pp1>=0x30 && pp1<=0x39) pp1 -= 0x30; // 0-9
3176 else if (pp1>=0x41 && pp1<=0x46) pp1 -= 0x37; // A-F
3177 else if (pp1>=0x61 && pp1<=0x66) pp1 -= 0x57; // a-f
3178 else pp1 = 0x00;
3179
3180 if (pp2>=0x30 && pp2<=0x39) pp2 -= 0x30; // 0-9
3181 else if (pp2>=0x41 && pp2<=0x46) pp2 -= 0x37; // A-F
3182 else if (pp2>=0x41 && pp2<=0x46) pp2 -= 0x57; // a-f
3183 else pp1 = 0x00;
3184
3185 ret = (pp1<<4) + pp2;
3186 return ret;
3187}

Referenced by decode_quoted_printable(), and decode_urlenc().

Here is the caller graph for this function:

◆ decode_quoted_printable()

unsigned char * decode_quoted_printable ( unsigned char * buf,
int * sz )

unsigned char* decode_quoted_printable(unsigned char* buf, int* sz)

buf を quoted printableからデコードする. 返されたデータは free()する必要がある.

Parameters
bufデコードする文字列.
[out]szデコードされたデータの長さを格納する変数.
Returns
デコードされたデータ

Definition at line 3029 of file tools.cpp.

3030{
3031 int i, j, len;
3032 unsigned char* dec;
3033
3034 len = (int)strlen((const char*)buf) + 1;
3035 dec = (unsigned char*)malloc(len);
3036 if (dec==NULL) return NULL;
3037 memset(dec, 0, len);
3038
3039 i = j = 0;
3040 while (buf[i]!='\0') {
3041 if (buf[i]=='=') {
3042 if (buf[i+1]=='\0') return dec;
3043 if (buf[i+2]=='\0') return dec;
3044 dec[j++] = decode_hex(buf[i+1], buf[i+2]);
3045 i += 2;
3046 }
3047 else {
3048 if (buf[i]=='_') dec[j++] = ' '; // RFC2047
3049 else dec[j++] = buf[i];
3050 }
3051 i++;
3052 }
3053
3054 *sz = j;
3055 return dec;
3056}
unsigned char decode_hex(unsigned char pp1, unsigned char pp2)
16進コードをキャラクタに変換する.O-9,A-F以外が指定された場合は0とみなす. 内容を書き換える.
Definition tools.cpp:3171

References decode_hex().

Here is the call graph for this function:

◆ decode_urlenc()

unsigned char * decode_urlenc ( unsigned char * buf,
int * sz )

unsigned char* decode_urlenc(unsigned char* buf, int* sz)

buf を URLエンコードからデコードする. 返されたデータは free()する必要がある.

Parameters
bufデコードする文字列.
[out]szデコードされたデータの長さを格納する変数.
Returns
デコードされたデータ.要 free

Definition at line 2932 of file tools.cpp.

2933{
2934 int i, j, len;
2935 unsigned char* dec;
2936
2937 if (buf==NULL) return NULL;
2938
2939 len = (int)strlen((const char*)buf) + 1;
2940 dec = (unsigned char*)malloc(len);
2941 if (dec==NULL) return NULL;
2942 memset(dec, 0, len);
2943
2944 i = j = 0;
2945 while (buf[i]!='\0') {
2946 if (buf[i]=='%') {
2947 if (buf[i+1]=='\0') return dec;
2948 if (buf[i+2]=='\0') return dec;
2949 dec[j++] = decode_hex(buf[i+1], buf[i+2]);
2950 i += 2;
2951 }
2952 else {
2953 if (buf[i]=='+') dec[j++] = ' ';
2954 else dec[j++] = buf[i];
2955 }
2956 i++;
2957 }
2958
2959 *sz = j;
2960 return dec;
2961}

References decode_hex().

Here is the call graph for this function:

◆ del_file_extension()

char * del_file_extension ( const char * str)

char* del_file_extension(const char* str)

フルパスから拡張子を削除する. strの中身を書き換えて,strを返す.free() してはいけない.

Parameters
strファイルのフルパス
Returns
str中のファイル名へのポインタ

Definition at line 2256 of file tools.cpp.

2257{
2258 if (str==NULL) return NULL;
2259
2260 char cc = '.';
2261 char* path = (char*)str;
2262
2263 int len = (int)strlen(path);
2264 int sz = len - 1;
2265 while (sz>=0 && path[sz]!=cc) sz--;
2266
2267 if (sz<1) return path;
2268 path[sz] = '\0';
2269
2270 return path;
2271}

◆ del_file_name()

char * del_file_name ( const char * str)

char* del_file_name(const char* str)

フルパスからファイル名を削除する. strの中身を書き換えて,strを返す.free() してはいけない.

Parameters
strファイルのフルパス
Returns
str中のファイル名へのポインタ

Definition at line 2094 of file tools.cpp.

2095{
2096 if (str==NULL) return NULL;
2097
2098#ifdef WIN32
2099 char cc = '\\';
2100#else
2101 char cc = '/';
2102#endif
2103
2104 char* path = (char*)str;
2105 int len = (int)strlen(str);
2106 if (len==1) {
2107 if (path[0]==cc) return path;
2108 else return NULL;
2109 }
2110
2111 int sz = len - 1;
2112 while (sz>=0 && str[sz]!=cc) sz--;
2113
2114 if (sz<0) {
2115 path[0] = '.';
2116 path[1] = cc;
2117 path[2] = '\0';
2118 }
2119 else {
2120 path[sz+1] = '\0';
2121 }
2122
2123 return path;
2124}

◆ del_ringBuffer()

void del_ringBuffer ( ringBuffer ** rb)

void del_ringBuffer(ringBuffer** rb)

new_ringBuffer()で作り出したリングバッファを削除する.

Parameters
[in,out]rbin: 削除するリングバッファポインタへのポインタ.
out: *rb はNULLになる.
See also
ringBuffer, new_ringBuffer()

Definition at line 3232 of file tools.cpp.

3233{
3234 if (rb!=NULL && *rb!=NULL) {
3235 freeNull((*rb)->buf);
3236 free(*rb);
3237 *rb = NULL;
3238 }
3239}
void freeNull(T &p)
Definition common++.h:37

◆ double_bs()

char * double_bs ( char * str)

char* double_bs(char* str)

文字列中の バックスペース \を 2重 \\ に変えた文字列を返す. 返されたデータは free()する必要がある.

Parameters
str操作対象の文字列
Returns
変換された文字列.失敗した場合は NULL.要 free

Definition at line 2564 of file tools.cpp.

2565{
2566 int i, j;
2567 int len, bsn=0;
2568 char* buf;
2569
2570 len = (int)strlen(str);
2571 for (i=0; i<len; i++) if (str[i]=='\\') bsn++;
2572 buf = (char*)malloc(len+bsn+1);
2573 if (buf==NULL) return NULL;
2574 memset(buf, 0, len+bsn+1);
2575
2576 for (i=0,j=0; i<len; i++) {
2577 buf[j++] = str[i];
2578 if (str[i]=='\\') buf[j++] = '\\';
2579 }
2580 buf[j] = '\0';
2581
2582 return buf;
2583}

◆ double_from_big_endian()

double double_from_big_endian ( void * ptr)

double double_from_big_endian(void* ptr)

Big Endian形式で格納されている double型の値を取り出す.

Parameters
ptr変数が格納されているメモリへのポインタ
Returns
取り出した double型の値

Definition at line 264 of file tools.cpp.

265{
266 double ret = *((double*)ptr);
267
269 if (HostEndian==LITTLE_ENDIAN) reverse_str((uByte*)(&ret), 8);
270 return ret;
271}
unsigned char uByte
1Byte
Definition common.h:332
void reverse_str(uByte *p, int s)
バイト(octet)列を逆順にする.
Definition tools.cpp:1952
void check_endian(void)
システムのエンディアンを判別して,大域変数 HostEndian に設定する
Definition tools.cpp:143
#define LITTLE_ENDIAN
Definition tools.h:91

References check_endian(), HostEndian, LITTLE_ENDIAN, reverse_str(), and UNKNOWN_ENDIAN.

Here is the call graph for this function:

◆ double_from_little_endian()

double double_from_little_endian ( void * ptr)

double double_from_little_endian(void* ptr)

Little Endian形式で格納されている double型の値を取り出す.

Parameters
ptr変数が格納されているメモリへのポインタ
Returns
取り出した double型の値

Definition at line 156 of file tools.cpp.

157{
158 double ret = *((double*)ptr);
159
161 if (HostEndian==BIG_ENDIAN) reverse_str((uByte*)(&ret), 8);
162 return ret;
163}
#define BIG_ENDIAN
Definition tools.h:92

References BIG_ENDIAN, check_endian(), HostEndian, reverse_str(), and UNKNOWN_ENDIAN.

Here is the call graph for this function:

◆ dtostr()

char * dtostr ( double n)

char* dtostr(double n)

double型 nを文字列にして返す.

Parameters
n文字列に変換する値
Returns
変換された文字列.free() してはいけない.

Definition at line 1516 of file tools.cpp.

1517{
1518 memset(_ToSTR, 0, LDATA);
1519 snprintf(_ToSTR, LDATA-1, "%f", n);
1520 return _ToSTR;
1521}
#define snprintf
Definition common.h:56
#define LDATA
Definition common.h:151
static char _ToSTR[LDATA]
作業用(文字変換)
Definition tools.cpp:1410

References _ToSTR, LDATA, and snprintf.

Referenced by ColladaXML::addCenterScene(), ColladaXML::addController(), ColladaXML::addEffect(), ColladaXML::addNormalSource(), ColladaXML::addScene(), ColladaXML::addTexcrdSource(), ColladaXML::addVertexSource(), ColladaXML::addWeightSource(), and ColladaXML::setJointLocationMatrix().

Here is the caller graph for this function:

◆ dtostr_ts()

char * dtostr_ts ( double n)

char* dtostr_ts(double n)

double型 nを文字列にして返す. Thread Safe

Parameters
n文字列に変換する値
Returns
変換された文字列.要 free.

Definition at line 1652 of file tools.cpp.

1653{
1654 char* str = NULL;
1655 str = (char*)malloc(LDATA);
1656 if (str==NULL) return NULL;
1657
1658 memset(str, 0, LDATA);
1659 snprintf(str, LDATA-1, "%f", n);
1660 return str;
1661}

References LDATA, and snprintf.

Referenced by llsd_bin_main_parse(), and make_xml_attr_bydouble().

Here is the caller graph for this function:

◆ dup_str()

char * dup_str ( char * buf)

char* dup_str(char* buf)

文字列 bufの複製を作り出す.返されたデータは free()する必要がある.

Parameters
bufコピー元の文字列
Returns
複製された文字列.要 free

Definition at line 1368 of file tools.cpp.

1369{
1370 int len;
1371 char* ret;
1372
1373 if (buf==NULL) return NULL;
1374
1375 len = (int)strlen(buf);
1376 ret = (char*)malloc(len+1);
1377 if (ret==NULL) return NULL;
1378
1379 memcpy(ret, buf, len);
1380 ret[len] = '\0';
1381
1382 return ret;
1383}

Referenced by get_string_from_json(), and CBVHTool::writeMultiFile().

Here is the caller graph for this function:

◆ encode_base64()

unsigned char * encode_base64 ( unsigned char * buf,
int sz )

unsigned char* encode_base64(unsigned char* buf, int sz)

バイナリデータ bufを base64にエンコードする.

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

返されたデータは free()する必要がある.

Parameters
bufbase64にエンコードするデータ.
szデータの長さを示す.-1以下の場合は buf は文字列とみなす.
Returns
base64にエンコードされた文字列.要 free
'A',0x00,0x01 を文字列(sz=1)とみなして符号化すると "QQ==" となる.
'A',0x00,0x01 の 3byteを符号化(sz=3)すると "QQAB" となる.

Definition at line 2848 of file tools.cpp.

2849{
2850 unsigned char base[]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
2851 unsigned char bas;
2852 int i, j, len;
2853 unsigned char* ecd;
2854
2855 if (buf==NULL) return NULL;
2856 if (sz<0) len = (int)strlen((const char*)buf);
2857 else len = sz;
2858 if (len<=0) return NULL;
2859
2860 sz = ((len+2)/3)*4;
2861 ecd = (unsigned char*)malloc(sz+1);
2862 if (ecd==NULL) return NULL;
2863 memset(ecd, 0, sz+1);
2864
2865 for (i=0; i<sz; i++) {
2866 bas = 0x00;
2867 if (len*8 > i*6) {
2868 for (j=0; j<6; j++) {
2869 if (len*8 > i*6+j) setBit(&bas, j+2, getBit(buf, i*6+j));
2870 //else setBit(&bas, j+2, 0);
2871 }
2872 ecd[i] = base[(int)bas];
2873 }
2874 else {
2875 ecd[i] = '=';
2876 }
2877 }
2878 return ecd;
2879}
#define getBit(x, n)
Definition common.h:258

References getBit, and setBit.

Referenced by Base64::encode(), encode_base64_Buffer(), encode_base64_Buffer_bin(), encode_base64_filename(), and temp_filename().

Here is the caller graph for this function:

◆ encode_base64_filename()

unsigned char * encode_base64_filename ( unsigned char * buf,
int sz,
unsigned char cc )

unsigned char* encode_base64_filename(unsigned char* buf, int sz, unsiged char cc)

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

Definition at line 2907 of file tools.cpp.

2908{
2909 if (cc==0x00) cc = '-';
2910
2911 unsigned char* enc = encode_base64(buf, sz);
2912
2913 int i, len = (int)strlen((char*)enc);
2914 for (i=0; i<len; i++) {
2915 if (enc[i]=='/') enc[i] = cc;
2916 }
2917
2918 return enc;
2919}
unsigned char * encode_base64(unsigned char *buf, int sz)
バイナリデータ bufを base64にエンコードする.要 free()
Definition tools.cpp:2848

References encode_base64().

Referenced by MaterialParam::getBase64Params().

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

◆ encode_hex()

unsigned char * encode_hex ( unsigned char cc)

unsigned char* encode_hex(unsigned char cc)

キャラクタを16進コードの文字列に変換する. 返されたデータは free()する必要がある.

Parameters
cc変換するキャラクタ.
Returns
新しく確保された 3byteの領域
[0] 16進コードの上位4Bit. 0-9,A-F
[1] 16進コードの下位4Bit. 0-9,A-F
[2] '\0'
Return values
NULLメモリ不足.
encode_hex(' ') は "20" を返す.
unsigned char * encode_hex(unsigned char cc)
キャラクタを16進コードの文字列に変換する.要 free()
Definition tools.cpp:3138

Definition at line 3138 of file tools.cpp.

3139{
3140 unsigned char* ret;
3141 unsigned char pp1, pp2;
3142 unsigned char base[] = "0123456789ABCDEF";
3143
3144 ret = (unsigned char*)malloc(3);
3145 if (ret==NULL) return NULL;
3146
3147 pp1 = cc >> 4;
3148 pp2 = cc & 0x0f;
3149
3150 ret[0] = base[pp1];
3151 ret[1] = base[pp2];
3152 ret[2] = '\0';
3153
3154 return ret;
3155}

Referenced by encode_quoted_printable(), and encode_urlenc().

Here is the caller graph for this function:

◆ encode_quoted_printable()

unsigned char * encode_quoted_printable ( unsigned char * buf,
int sz )

unsigned char* encode_quoted_printable(unsigned char* buf, int sz)

バイナリデータ bufを quoted printable にエンコードする.

RFC2047 に従い,' ' は '_' にエンコードする.
エンコードしない文字 '=', '_' 以外の 0x21-0x7e
エンコードする文字 '=', '_', 0x00-0x20, 0x7f-0xff

返されたデータは free()する必要がある.

Parameters
bufエンコードするデータ.
szエンコードするデータの長さ.-1以下の場合は buf は文字列とみなす.
Returns
エンコードされた文字列.要 free

Definition at line 3074 of file tools.cpp.

3075{
3076 int i, j, len;
3077 unsigned char* enc;
3078
3079 if (sz<0) sz = (int)strlen((const char*)buf);
3080 len = sz*3 + 1;
3081 enc = (unsigned char*)malloc(len);
3082 if (enc==NULL) return NULL;
3083 memset(enc, 0, len);
3084
3085 for (i=0, j=0; i<sz; i++) {
3086 if (buf[i]=='=') { // 0x3d
3087 enc[j++] = '=';
3088 enc[j++] = '3';
3089 enc[j++] = 'D';
3090 }
3091 else if (buf[i]=='_') { // 0x5f
3092 enc[j++] = '=';
3093 enc[j++] = '5';
3094 enc[j++] = 'F';
3095 }
3096 else if (buf[i]==' ') { // 0x20 RFC2047
3097 enc[j++] = '_';
3098 }
3099 else if (buf[i]<=0x1f || buf[i]>=0x7f) {
3100 unsigned char* asc = encode_hex(buf[i]);
3101 if (asc==NULL) {
3102 free(enc);
3103 return NULL;
3104 }
3105 enc[j++] = '=';
3106 enc[j++] = asc[0];
3107 enc[j++] = asc[1];
3108 free(asc);
3109 }
3110 else {
3111 enc[j++] = buf[i];
3112 }
3113 }
3114
3115 return enc;
3116}

References encode_hex().

Here is the call graph for this function:

◆ encode_urlenc()

unsigned char * encode_urlenc ( unsigned char * buf,
int sz )

unsigned char* encode_urlenc(unsigned char* buf, int sz)

バイナリデータ bufを URLエンコードする.

エンコードしない文字については色々な考え方があるが,最大公約数的に考えてこのプログラムでは以下のようにする.
エンコードしない文字 0-9, A-Z, a-z, -._

返されたデータは free()する必要がある.

Parameters
bufエンコードするデータ.
szエンコードするデータの長さ.-1以下の場合は buf は文字列とみなす.
Returns
エンコードされた文字列.要 free

Definition at line 2979 of file tools.cpp.

2980{
2981 int i, j, len;
2982 unsigned char* enc;
2983
2984 if (buf==NULL) return NULL;
2985
2986 if (sz<0) sz = (int)strlen((const char*)buf);
2987 len = sz*3 + 1;
2988 enc = (unsigned char*)malloc(len);
2989 if (enc==NULL) return NULL;
2990 memset(enc, 0, len);
2991
2992 for(i=0, j=0; i<sz; i++) {
2993 if (buf[i]==' ') { // 半角スペース
2994 enc[j++] = '+';
2995 }
2996 else if ((buf[i]>=0x30 && buf[i]<=0x39) || // 0-9
2997 (buf[i]>=0x41 && buf[i]<=0x5a) || // A-Z
2998 (buf[i]>=0x61 && buf[i]<=0x7a) || // a-z
2999 buf[i]=='-' || buf[i]=='.' || buf[i]=='_'){ // - . _
3000 enc[j++] = buf[i];
3001 }
3002 else {
3003 unsigned char* asc = encode_hex(buf[i]);
3004 if (asc==NULL) {
3005 free(enc);
3006 return NULL;
3007 }
3008 enc[j++] = '%';
3009 enc[j++] = asc[0];
3010 enc[j++] = asc[1];
3011 free(asc);
3012 }
3013 }
3014
3015 return enc;
3016}

References encode_hex().

Referenced by add_form_urlenc(), and make_form_urlenc().

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

◆ euc2sjis()

void euc2sjis ( unsigned char * c1,
unsigned char * c2 )

void euc2sjis(unsigned char *c1, unsigned char *c2)

漢字コード変換.EUC → SJIS

Parameters
[in,out]c1変換する文字の第一バイト.内容が書き換えられる.
[in,out]c2変換する文字の第二バイト.内容が書き換えられる.

Definition at line 2687 of file tools.cpp.

2688{
2689 if (*c1%2==0) *c2 -= 0x02;
2690 else{
2691 *c2 -= 0x61;
2692 if (*c2>0x7e) (*c2)++;
2693 }
2694
2695 if (*c1<0xdf) {
2696 (*c1)++;
2697 *c1 /= 2;
2698 *c1 += 0x30;
2699 }
2700 else {
2701 (*c1)++;
2702 *c1 /= 2;
2703 *c1 += 0x70;
2704 }
2705}

Referenced by kanji_convert_Buffer(), and kanji_convert_euc2sjis().

Here is the caller graph for this function:

◆ ex_strncasecmp()

int ex_strncasecmp ( const char * dat,
const char * key,
int len )

int ex_strncasecmp(const char* dat, const char* key, int len)

拡張文字比較.ケース無視.

Parameters
dat比べる文字列1.
key比べる文字列2.
len1以上 一致させる長さ.
len0 完全一致.
len-1 dat の長さに合わせる.
len-2 key の長さに合わせる.
Return values
TRUE一致した
FALSE一致しなかった

Definition at line 820 of file tools.cpp.

821{
822 if (dat==NULL || key==NULL) return FALSE;
823
824 if (len==0) {
825 if (!strcasecmp(dat, key)) return TRUE;
826 }
827 else if (len>0) {
828 if (!strncasecmp(dat, key, len)) return TRUE;
829 }
830 else if (len<0) {
831 int sz;
832 if (len==-1) sz = (int)strlen(dat);
833 else sz = (int)strlen(key);
834 if (!strncasecmp(dat, key, sz)) return TRUE;
835 }
836
837 return FALSE;
838}
#define TRUE
Definition common.h:226
#define FALSE
Definition common.h:223
#define strncasecmp
Definition common.h:59
#define strcasecmp
Definition common.h:58

References FALSE, strcasecmp, strncasecmp, and TRUE.

Referenced by _next_strncasecmp_horizon_tTree(), _next_strncasecmp_vertical_tTree(), del_tList_key(), get_xml_attr_node(), strncasecmp_back_tList(), strncasecmp_tList(), and strncasecmp_tTree().

Here is the caller graph for this function:

◆ ex_strncaservscmp()

int ex_strncaservscmp ( const char * dat,
const char * key,
int len )

int ex_strncaervscmp(const char* dat, const char* key, int len)

拡張文字比較.後ろから比べる.ケース無視.

Parameters
dat比べる文字列1.
key比べる文字列2.
len1以上 一致させる長さ.
len0 完全一致.
len-1 dat の長さに合わせる.
len-2 key の長さに合わせる.
Return values
TRUE一致した
FALSE一致しなかった

Definition at line 892 of file tools.cpp.

893{
894 if (dat==NULL || key==NULL) return FALSE;
895
896 if (len==0) {
897 if (!strcasecmp(dat, key)) return TRUE;
898 }
899 else if (len>0) {
900 if (!strncaservscmp(dat, key, len)) return TRUE;
901 }
902 else if (len<0) {
903 int sz;
904 if (len==-1) sz = (int)strlen(dat);
905 else sz = (int)strlen(key);
906 if (!strncaservscmp(dat, key, sz)) return TRUE;
907 }
908
909 return FALSE;
910}
int strncaservscmp(const char *s1, const char *s2, int n)
文字列 s1と s2を後ろから n文字比較する.大文字小文字は区別しない.一致するなら 0
Definition tools.cpp:703

References FALSE, strcasecmp, strncaservscmp(), and TRUE.

Referenced by strncaservscmp_back_tList(), and strncaservscmp_tList().

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

◆ ex_strncmp()

int ex_strncmp ( const char * dat,
const char * key,
int len )

int ex_strncmp(const char* dat, const char* key, int len)

拡張文字比較

Parameters
dat比べる文字列1.
key比べる文字列2.
len1以上 一致させる長さ.
len0 完全一致.
len-1 dat の長さに合わせる.
len-2 key の長さに合わせる.
Return values
TRUE一致した
FALSE一致しなかった

Definition at line 784 of file tools.cpp.

785{
786 if (dat==NULL || key==NULL) return FALSE;
787
788 if (len==0) {
789 if (!strcmp(dat, key)) return TRUE;
790 }
791 else if (len>0) {
792 if (!strncmp(dat, key, len)) return TRUE;
793 }
794 else if (len<0) {
795 int sz;
796 if (len==-1) sz = (int)strlen(dat);
797 else sz = (int)strlen(key);
798 if (!strncmp(dat, key, sz)) return TRUE;
799 }
800
801 return FALSE;
802}

References FALSE, and TRUE.

Referenced by _next_strncmp_horizon_tTree(), _next_strncmp_vertical_tTree(), replace_all_tTree_node(), strncmp_back_tList(), strncmp_tList(), and strncmp_tTree().

Here is the caller graph for this function:

◆ ex_strnrvscmp()

int ex_strnrvscmp ( const char * dat,
const char * key,
int len )

int ex_strnrvscmp(const char* dat, const char* key, int len)

拡張文字比較.後ろから比べる.

Parameters
dat比べる文字列1.
key比べる文字列2.
len1以上 一致させる長さ.
len0 完全一致.
len-1 dat の長さに合わせる.
len-2 key の長さに合わせる.
Return values
TRUE一致した
FALSE一致しなかった

Definition at line 856 of file tools.cpp.

857{
858 if (dat==NULL || key==NULL) return FALSE;
859
860 if (len==0) {
861 if (!strcmp(dat, key)) return TRUE;
862 }
863 else if (len>0) {
864 if (!strnrvscmp(dat, key, len)) return TRUE;
865 }
866 else if (len<0) {
867 int sz;
868 if (len==-1) sz = (int)strlen(dat);
869 else sz = (int)strlen(key);
870 if (!strnrvscmp(dat, key, sz)) return TRUE;
871 }
872
873 return FALSE;
874}
int strnrvscmp(const char *s1, const char *s2, int n)
文字列 s1と s2を後ろから n文字比較する.一致するなら 0
Definition tools.cpp:674

References FALSE, strnrvscmp(), and TRUE.

Referenced by strnrvscmp_back_tList(), and strnrvscmp_tList().

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

◆ fdump()

void fdump ( FILE * fp,
unsigned char * mesg,
int n )

void fdump(FILE* fp, unsigned char* mesg, int n)

デバッグ用 16進ダンプ出力.

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

Parameters
fp出力するファイルへのポインタ.NULLの場合は stderr
mesg表示するデータ.
n表示するバイト数

Definition at line 4176 of file tools.cpp.

4177{
4178 int i, j, mod, len;
4179 char ascii[16];
4180
4181 if (fp==NULL) fp = stderr;
4182
4183 if (mesg==NULL) {
4184 fprintf(fp, "(Dump Data is NULL)\n");
4185 return;
4186 }
4187
4188 if (n<0) len = (int)strlen((const char*)mesg);
4189 else len = n;
4190
4191 memset(ascii, 0x2e, 16);
4192 for (i=0, j=0; i<len; i++) {
4193 fprintf(fp, "%02x ", mesg[i]);
4194 if (mesg[i]>=0x20 && mesg[i]<=0x7e) ascii[j] = mesg[i];
4195 j++;
4196 if (j==16) {
4197 fprintf(fp, " ");
4198 for (j=0; j<16; j++) {
4199 fprintf(fp, "%c ", ascii[j]);
4200 }
4201 fprintf(fp, "\n");
4202 memset(ascii, 0x2e, 16);
4203 j = 0;
4204 }
4205 }
4206
4207 mod = len%16;
4208 if (mod>0) {
4209 for (i=0; i<17-mod; i++) fprintf(fp, " ");
4210 for (i=0; i<mod; i++) fprintf(fp, "%c ", ascii[i]);
4211 }
4212 fprintf(fp, "\n");
4213}

Referenced by dump_http_header(), and dump_tList().

Here is the caller graph for this function:

◆ fgets_mstream()

unsigned char * fgets_mstream ( unsigned char * mesg,
mstream * sb )

unsigned char* fgets_mstream(unsigned char* mesg, mstream* sb)

メッセージストリームからメッセージを一行だけ取り出す.

メッセージ mesg はメッセージストリームに一旦バッファリングされ,この関数により一行ずつ読み出される.
結果が返される時,行中の改行コードは削除され,行末には必ず \0 が入る.
メッセージストリームのバッファ部が確保されていない場合は,最初に呼び出された時点で確保される.
一旦この関数を使用して,受信データをバッファリングしたら,最後まで読み取りには必ず同じストリームを使用して
この関数を呼び出さばければならない.そうで無い場合は受信データの整合性は保証されない.

Parameters
mesgバッファに一旦格納されるメッセージ.NULLでも可.
[in]sbストリームバッファ(リングバッファ型のストリームバッファ).
[out]sbsb->buf バッファ部が確保さえていなければ,自動的に確保される.
[out]sbsb->state JBXL_ERROR: メッセージストリーム操作中は異常な状態にある.
[out]sbsb->state JBXL_NODATA: メッセージストリーム中に有効なデータがない.return は NULL
Returns
取り出した文字列へのポインタ

Definition at line 3591 of file tools.cpp.

3592{
3593 int state = JBXL_NORMAL;
3594 unsigned char* pp;
3595
3596 if (sb==NULL) return NULL;
3597 if (sb->buf==NULL) {
3598 *sb = make_mstream(RECVBUFSZ);
3599 if (sb->buf==NULL) return NULL;
3600 }
3601
3602 if (mesg!=NULL) put_mstream(sb, mesg);
3603 if (sb->state<0) state = sb->state;
3604
3605 if (sb->datano==0) {
3606 sb->state = JBXL_NODATA;
3607 return NULL;
3608 }
3609 pp = get_mstream(sb);
3610
3611 if (sb->state>=0 && state<0) sb->state = state;
3612 return pp;
3613}
#define RECVBUFSZ
256K
Definition common.h:134
#define JBXL_NODATA
有効なデータが無い
Definition jbxl_state.h:35
int put_mstream(mstream *sb, unsigned char *mesg)
メッセージ(文字列)ストリーム sb へメッセージ(の一部)を格納する
Definition tools.cpp:3490
unsigned char * get_mstream(mstream *sb)
メッセージ(文字列)ストリーム sb から次のメッセージを取り出す.改行コードは削除される.
Definition tools.cpp:3531
#define make_mstream(s)
make_ringBuffer()
Definition tools.h:385

References get_mstream(), JBXL_NODATA, JBXL_NORMAL, make_mstream, put_mstream(), and RECVBUFSZ.

Referenced by fgets_mstream_Buffer().

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

◆ file_chmod_open()

FILE * file_chmod_open ( const char * fn,
const char * fm,
mode_t mode )

FILE* file_chmod_open(const char* fn, const char* fm, mode_t mode)

指定したファイルが存在して読み込み可能であれば,属性をmode へ変更した後,ファイルを fmモードでオープンしなおして,ファイルポインタを返す.
存在しなければ,ファイルを作成して属性を変更し,その後,ファイルを fmモードでオープンしなおして, ファイルポインタを返す.
属性の指定方法については man 2 chmod を参照すること.

Parameters
fnファイル名
fmファイルモード,"r","w","a".....
mode属性.see... man 2 chmod
Return values
NULL以外オープンしたファイルポインタ
NULL失敗.

Definition at line 2366 of file tools.cpp.

2367{
2368 FILE* fp;
2369
2370 if (!file_exist(fn)) {
2371 if ((fp=fopen(fn,"wb"))==NULL) return NULL;
2372 fclose(fp);
2373 }
2374
2375#ifndef WIN32
2376 fp = NULL;
2377 if (chmod(fn, mode)) return fp;
2378#endif
2379
2380 fp = fopen(fn, fm);
2381 return fp;
2382}
int file_exist(const char *fn)
ファイルの存在を検査する.
Definition tools.cpp:2337

References file_exist().

Here is the call graph for this function:

◆ file_exist()

int file_exist ( const char * fn)

int file_exist(const char* fn)

指定したファイルが存在して読み込み可能であれば「真」をそうでなければ「偽」を返す.

ファイルを一度オープンして確認するので,時間が掛かる. 読み込み可能なファイルを確認するのであれば,file_size()の方が(たぶん)早い.

Parameters
fnファイル名
Return values
TRUEファイルが存在し,読みこみ可能.
FALSEファイルが存在しないか,または読みこみ不可能.

Definition at line 2337 of file tools.cpp.

2338{
2339 FILE* fp;
2340
2341 if (fn==NULL) return FALSE;
2342
2343 if ((fp=fopen(fn,"rb"))==NULL) {
2344 return FALSE;
2345 }
2346 fclose(fp);
2347 return TRUE;
2348}

References FALSE, and TRUE.

Referenced by file_chmod_open(), and temp_filename().

Here is the caller graph for this function:

◆ file_from_to()

int file_from_to ( const char * src,
const char * dst,
const char * mode )

int file_from_to(const char* src, const char* dst, const char* mode)

modeに従って,ファイル srcを dstにコピーする.

Parameters
srcコピー元(ソース)ファイル名
dstコピー先(ディスティネーション)ファイル名
modeコピー先ファイルのオープンモード.fopenに同じ."r", "w", "a", "r+", "w+", "a+", ....
Return values
0以上コピーしたサイズ
JBXL_MALLOC_ERROR作業用メモリが足りない.
JBXL_FILE_EXIST_ERRORソースファイルが存在しない.(シンボリックリンクも×)
JBXL_FILE_OPEN_ERRORソースファイルのオープン失敗
JBXL_FILE_DESTOPEN_ERRORディスティネーションファイルのオープン失敗

Definition at line 1985 of file tools.cpp.

1986{
1987 long int sz;
1988 unsigned char* buf;
1989 FILE* fp;
1990 size_t rs;
1991 UNUSED(rs);
1992
1993 sz = file_size(src);
1994 if (sz<0) return JBXL_FILE_EXIST_ERROR;
1995 buf = (unsigned char*)malloc(sz);
1996 if (buf==NULL) return JBXL_MALLOC_ERROR;
1997 memset(buf, 0, sz);
1998
1999 fp = fopen(src, "rb");
2000 if (fp==NULL) {
2001 free(buf);
2002 return JBXL_FILE_OPEN_ERROR;
2003 }
2004 rs = fread(buf, sz, 1, fp);
2005 fclose(fp);
2006
2007 fp = fopen(dst, mode);
2008 if (fp==NULL) {
2009 free(buf);
2011 }
2012 fwrite(buf, sz, 1, fp);
2013 fclose(fp);
2014
2015 free(buf);
2016 return sz;
2017}
#define UNUSED(x)
Definition common.h:264
#define JBXL_FILE_EXIST_ERROR
ファイルが存在しない(シンボリックリンクもダメ).または既に存在する.
Definition jbxl_state.h:48
#define JBXL_FILE_DESTOPEN_ERROR
ディスティネーションファイルのオープン失敗
Definition jbxl_state.h:50
#define JBXL_MALLOC_ERROR
メモリ確保エラー
Definition jbxl_state.h:41
#define JBXL_FILE_OPEN_ERROR
ファイルオープン エラー
Definition jbxl_state.h:44
unsigned long int file_size(const char *fn)
ファイルの大きさを返す.
Definition tools.cpp:2309

References file_size(), JBXL_FILE_DESTOPEN_ERROR, JBXL_FILE_EXIST_ERROR, JBXL_FILE_OPEN_ERROR, JBXL_MALLOC_ERROR, and UNUSED.

Here is the call graph for this function:

◆ file_size()

unsigned long int file_size ( const char * fn)

unsigned long int file_size(const char* fn)

通常のファイルの大きさを返す.シンボリックリンクなどは 0.

Parameters
fnファイル名
Returns
ファイルのサイズ.ファイルが異常の場合は -2. fn が NULL の場合は -1

Definition at line 2309 of file tools.cpp.

2310{
2311 if (fn==NULL) return -1;
2312
2313 struct stat stbuf;
2314 stat(fn, &stbuf);
2315
2316#ifdef WIN32
2317 return stbuf.st_size;
2318#else
2319 if (S_ISREG(stbuf.st_mode)) return stbuf.st_size;
2320 else return -2;
2321#endif
2322}

Referenced by file_from_to(), GLTFData::getGLBTextureInfo(), read_Buffer_file(), read_file(), jbxl::readCmnHeadFile(), jbxl::readDicomFile(), CBVHTool::readFile(), jbxl::readMoonFile(), jbxl::readXHead(), jbxl::readXHeadFile(), send_http_file(), send_http_res_file(), and jbxl::writeCmnHeadFile().

Here is the caller graph for this function:

◆ float_from_big_endian()

float float_from_big_endian ( void * ptr)

float float_from_big_endian(void* ptr)

Big Endian形式で格納されている float型の値を取り出す.

Parameters
ptr変数が格納されているメモリへのポインタ
Returns
取り出した float型の値

Definition at line 282 of file tools.cpp.

283{
284 float ret = *((float*)ptr);
285
287 if (HostEndian==LITTLE_ENDIAN) reverse_str((uByte*)(&ret), 4);
288 return ret;
289}

References check_endian(), HostEndian, LITTLE_ENDIAN, reverse_str(), and UNKNOWN_ENDIAN.

Here is the call graph for this function:

◆ float_from_little_endian()

float float_from_little_endian ( void * ptr)

float float_from_little_endian(void* ptr)

Little Endian形式で格納されている float型の値を取り出す.

Parameters
ptr変数が格納されているメモリへのポインタ
Returns
取り出した float型の値

Definition at line 174 of file tools.cpp.

175{
176 float ret = *((float*)ptr);
177
179 if (HostEndian==BIG_ENDIAN) reverse_str((uByte*)(&ret), 4);
180 return ret;
181}

References BIG_ENDIAN, check_endian(), HostEndian, reverse_str(), and UNKNOWN_ENDIAN.

Here is the call graph for this function:

◆ fp_from_to()

int fp_from_to ( FILE * src,
FILE * dst,
long int sz )

int fp_from_to(FILE* src, FILE* dst, long int sz)

ファイル srcを dstにコピーする.

Parameters
srcコピー元(ソース)のファイルポインタ
dstコピー先(ディスティネーション)のファイルポインタ
szコピー元(ソース)のサイズ
Return values
0以上コピーしたサイズ
JBXL_MALLOC_ERROR作業用メモリが足りない.
JBXL_ARGS_ERRORファイルサイズの指定がおかしい.
JBXL_FILE_OPEN_ERRORソースファイルのオープン失敗.
JBXL_FILE_DESTOPEN_ERRORディスティネーションファイルのオープン失敗.

Definition at line 2035 of file tools.cpp.

2036{
2037 unsigned char* buf;
2038 size_t rs;
2039 UNUSED(rs);
2040
2041 if (sz<=0) return JBXL_ARGS_ERROR;
2042 if (src==NULL) return JBXL_FILE_OPEN_ERROR;
2043 if (dst==NULL) return JBXL_FILE_DESTOPEN_ERROR;
2044
2045 buf = (unsigned char*)malloc(sz);
2046 if (buf==NULL) return JBXL_MALLOC_ERROR;
2047 memset(buf, 0, sz);
2048
2049 rs = fread(buf, sz, 1, src);
2050 sz = (int)fwrite(buf, sz, 1, dst);
2051
2052 free(buf);
2053 return sz;
2054}
#define JBXL_ARGS_ERROR
不正な引数(NULLなど)
Definition jbxl_state.h:42

References JBXL_ARGS_ERROR, JBXL_FILE_DESTOPEN_ERROR, JBXL_FILE_OPEN_ERROR, JBXL_MALLOC_ERROR, and UNUSED.

◆ fprint_escape()

void fprint_escape ( FILE * fp,
char * fmt,
char * mesg )

void fprint_escape(FILE* fp, char* fmt, char* mesg)

エスケープ文字を含むメッセージの出力.

現在は CR, LF のみ \r, \n に変換する.

Parameters
fp出力先のファイルポインタ
fmt出力フォーマット.printf() に準拠.
mesgエスケープ文字を含む文字列.
See also
change_esc(), printf()

Definition at line 4151 of file tools.cpp.

4152{
4153 char* pp;
4154
4155 if (fmt==NULL || mesg==NULL) return;
4156
4157 pp = change_esc(mesg);
4158 if (pp==NULL) return;
4159
4160 fprint_message(fp, fmt, pp);
4161 free(pp);
4162}
void fprint_message(FILE *fp, const char *fmt,...)
バッファリングなしのメッセージ出力
Definition tools.cpp:4088
char * change_esc(char *mesg)
文字列中の CR, LF を \r, \n に変換する.要 free()
Definition tools.cpp:1210

References change_esc(), and fprint_message().

Here is the call graph for this function:

◆ fprint_message()

void fprint_message ( FILE * fp,
const char * fmt,
... )

void fprint_message(FILE fp, const char fmt, ...)

バッファリング無しのメッセージ出力

Parameters
fp出力先のファイルポインタ
fmt出力フォーマット.printf() に準拠.
See also
printf()

Definition at line 4088 of file tools.cpp.

4089{
4090 char* nfmt;
4091 int len;
4092
4093 va_list args;
4094 va_start(args, fmt);
4095
4096 len = (int)strlen(fmt);
4097 nfmt = (char*)malloc(len + 1);
4098 if (nfmt==NULL) return;
4099
4100 strncpy(nfmt, fmt, len);
4101 nfmt[len] = '\0';
4102
4103 vfprintf(fp, nfmt, args);
4104 fflush(fp);
4105 free(nfmt);
4106
4107 va_end(args);
4108
4109 return;
4110}

Referenced by fprint_escape().

Here is the caller graph for this function:

◆ free_ringBuffer()

void free_ringBuffer ( ringBuffer * rb)

void free_ringBuffer(ringBuffer* rb)

リングバッファのバッファ部を開放する.

Parameters
rbリングバッファへのポインタ

Definition at line 3295 of file tools.cpp.

3296{
3297 if (rb!=NULL) {
3298 freeNull(rb->buf);
3299 memset(rb, 0, sizeof(ringBuffer));
3300 rb->state = JBXL_NORMAL;
3301 }
3302}

References ringBuffer::buf, JBXL_NORMAL, and ringBuffer::state.

◆ ftostr()

char * ftostr ( float n)

char* ftostr(float n)

float型 nを文字列にして返す.

Parameters
n文字列に変換する値
Returns
変換された文字列.free() してはいけない.

Definition at line 1500 of file tools.cpp.

1501{
1502 memset(_ToSTR, 0, LDATA);
1503 snprintf(_ToSTR, LDATA-1, "%f", n);
1504 return _ToSTR;
1505}

References _ToSTR, LDATA, and snprintf.

◆ ftostr_ts()

char * ftostr_ts ( float n)

char* ftostr_ts(float n)

float型 nを文字列にして返す. Thread Safe

Parameters
n文字列に変換する値
Returns
変換された文字列.要 free.

Definition at line 1632 of file tools.cpp.

1633{
1634 char* str = NULL;
1635 str = (char*)malloc(LDATA);
1636 if (str==NULL) return NULL;
1637
1638 memset(str, 0, LDATA);
1639 snprintf(str, LDATA-1, "%f", n);
1640 return str;
1641}

References LDATA, and snprintf.

Referenced by make_xml_attr_byfloat().

Here is the caller graph for this function:

◆ get_file_extension()

char * get_file_extension ( const char * str)

char* get_file_extension(const char* str)

フルパスからファイル名の拡張子へのポインタを取り出す.

Parameters
strファイルのフルパス
Returns
str中のファイル名の拡張子(.を含まない)へのポインタ

Definition at line 2225 of file tools.cpp.

2226{
2227 int sz, len;
2228 char* ext;
2229
2230 if (str==NULL) return NULL;
2231
2232 char pd = '.';
2233 char cc1 = '\\';
2234 char cc2 = '/';
2235
2236 len = (int)strlen(str);
2237 sz = 0;
2238 while (sz<len && str[len-1-sz]!=cc1 && str[len-1-sz]!=cc2 && str[len-1-sz]!=pd) sz++;
2239
2240 if (str[len-1-sz]!=pd) return NULL;
2241 ext = (char*)str + len - sz;
2242
2243 return ext;
2244}

Referenced by add_resource_list(), and CBVHTool::writeMultiFile().

Here is the caller graph for this function:

◆ get_file_name()

char * get_file_name ( const char * str)

char* get_file_name(const char* str)

フルパスからファイル名へのポインタを取り出す. str中のポインタを返すので,free() してはいけない.

Parameters
strファイルのフルパス
Returns
str中のファイル名へのポインタ

Definition at line 2066 of file tools.cpp.

2067{
2068 if (str==NULL) return NULL;
2069
2070#ifdef WIN32
2071 char cc = '\\';
2072#else
2073 char cc = '/';
2074#endif
2075
2076 int len = (int)strlen(str);
2077 int sz = 0;
2078 while (sz<len && str[len-1-sz]!=cc) sz++;
2079 char* fnm = (char*)str + len - sz;
2080
2081 return fnm;
2082}

Referenced by add_resource_list(), FBXData::outputFile(), GLTFData::outputFile(), OBJData::outputFile(), BrepSolidList::outputFile(), and ColladaXML::outputFile().

Here is the caller graph for this function:

◆ get_file_path()

char * get_file_path ( const char * str)

char* make_file_path(const char* str)

フルパスからパスを生成する.strは変化しない.要 free.

非推奨:get_file_path() を使え.

Parameters
strファイルのフルパス
Returns
ファイルのフルパス(ファイル名を含まない). char* get_file_path(const char* str)

ファイルパスからパス部分のみを得る.strは変化しない.要 free.

Parameters
strファイルのパス
Returns
ファイルのパス(ファイル名を含まない).最後の '/' まはた '\' 付き

Definition at line 2191 of file tools.cpp.

2192{
2193 if (str==NULL || str[0]=='\0') return NULL;
2194
2195 int len = (int)strlen(str);
2196 char* path = (char*)malloc(len + 1);
2197 memcpy(path, str, len + 1);
2198
2199 char cc1 = '\\';
2200 char cc2 = '/';
2201
2202 int sz = len - 1;
2203 while (sz>=0 && path[sz]!=cc1 && path[sz]!=cc2) sz--;
2204
2205 if (sz<0) {
2206 free(path);
2207 path = NULL;
2208 }
2209 else {
2210 path[sz+1] = '\0';
2211 }
2212
2213 return path;
2214}

◆ get_gmt_timestamp()

char * get_gmt_timestamp ( time_t date,
const char * format )

Definition at line 454 of file tools.cpp.

455{
456 char* buf = (char*)malloc(64);
457 memset(buf, 0, 64);
458
459 struct tm tm = *gmtime(&date);
460 //struct tm tm = *localtime(&date);
461 strftime(buf, 63, format, &tm);
462
463 return buf;
464}

Referenced by get_http_header_date().

Here is the caller graph for this function:

◆ get_graphic_extension()

char * get_graphic_extension ( uWord tex)

Definition at line 4250 of file tools.cpp.

4251{
4252 memset(_GraphicFileExtension, 0, L_OCT);
4253
4254 uWord file = tex & 0x00f0;
4255 if (file==JBXL_TEXTURE_JPEG) memcpy(_GraphicFileExtension, ".jpeg", 5);
4256 else if (file==JBXL_TEXTURE_TIFF) memcpy(_GraphicFileExtension, ".tiff", 5);
4257 else if (file==JBXL_TEXTURE_PNG) memcpy(_GraphicFileExtension, ".png", 4);
4258 else if (file==JBXL_TEXTURE_TGA) memcpy(_GraphicFileExtension, ".tga", 4);
4259 else if (file==JBXL_TEXTURE_JP2K) memcpy(_GraphicFileExtension, ".jp2", 4);
4260 else if (file==JBXL_TEXTURE_RAS) memcpy(_GraphicFileExtension, ".ras", 4);
4261
4262 return _GraphicFileExtension;
4263}
unsigned short uWord
2Byte
Definition common.h:334
#define JBXL_TEXTURE_PNG
0x0040
Definition common.h:324
#define JBXL_TEXTURE_TGA
0x0050
Definition common.h:325
#define JBXL_TEXTURE_TIFF
0x0030
Definition common.h:323
#define JBXL_TEXTURE_RAS
0x0070 SUN RASTER 8bit
Definition common.h:327
#define L_OCT
Definition common.h:168
#define JBXL_TEXTURE_JP2K
0x0060
Definition common.h:326
#define JBXL_TEXTURE_JPEG
0x0020
Definition common.h:321
static char _GraphicFileExtension[L_OCT]
Definition tools.cpp:4248

References _GraphicFileExtension, JBXL_TEXTURE_JP2K, JBXL_TEXTURE_JPEG, JBXL_TEXTURE_PNG, JBXL_TEXTURE_RAS, JBXL_TEXTURE_TGA, JBXL_TEXTURE_TIFF, and L_OCT.

◆ get_line()

char * get_line ( char * buf,
int n )

char* get_line(char* buf, int n)

文字型データstrのバッファ内の n行目を取り出す.改行コードは削除される.

取り出した行を char型変数のバッファに格納して返す.
バッファの最後が '\0' で終わっている場合,バッファを越えて行を読もうとした場合は NULL を返す.
'\0' で終わっていない場合,バッファが何処で終わりかを知る事は(簡単な方法では)できない.

返されたデータは free()する必要がある.

Parameters
buf操作対象文の字列型データ(含む改行)
n行の指定.1 から数える.
Returns
指定された n行目の文字列.改行は含まない.要 free

Definition at line 484 of file tools.cpp.

485{
486 int i, j, pos, cnt;
487 char* ret = NULL;
488
489 if (buf==NULL) return NULL;
490
491 for(i=0,j=0; j<n-1; j++) {
492 while (buf[i]!=CHAR_LF && buf[i]!=CHAR_CR && buf[i]!='\0') i++;
493 while (buf[i]==CHAR_LF || buf[i]==CHAR_CR) i++;
494 }
495 if (buf[i]=='\0') return NULL;
496
497 pos = i;
498 while (buf[i]!=CHAR_LF && buf[i]!=CHAR_CR && buf[i]!='\0') i++;
499 cnt = i - pos;
500
501 if (cnt>=0) {
502 ret = (char*)malloc(cnt+1);
503 if (ret==NULL) return NULL;
504
505 for(i=0; i<cnt; i++) ret[i] = buf[pos+i];
506 ret[cnt] = '\0';
507 }
508 return ret;
509}

References CHAR_CR, and CHAR_LF.

Referenced by x2crypt().

Here is the caller graph for this function:

◆ get_local_timestamp()

char * get_local_timestamp ( time_t date,
const char * format )

char* get_localtime(char c1, char c2, char c3, char c4)

非推奨.use get_local_timestamp(time(0), "%Y/%m/%dT%H:%M:%SZ")

ローカルタイムを "年c1月c1日c2時c3分c3秒c4" の形式で返す.
返ってきた char* ポインタは free() してはいけない.

Returns
"年c1月c1日c2時c3分c3秒c4" 形式のローカルタイム
printf("%s\n", get_localtime('/', 'T', ':', 'Z'));
2021/08/16T15:04:56Z

char* get_localtime_ts(char c1, char c2, char c3, char c4)

非推奨.use get_local_timestamp(time(0), "%Y/%m/%dT%H:%M:%SZ")

ローカルタイムを "年c1月c1日c2時c3分c3秒c4" の形式で返す.
返ってきた char* ポインタは free() すること.

Returns
"年c1月c1日c2時c3分c4秒c5" 形式のローカルタイム.要 free

Definition at line 440 of file tools.cpp.

441{
442 char* buf = (char*)malloc(64);
443 memset(buf, 0, 64);
444
445 //struct tm tm = *gmtime(&date);
446 struct tm tm = *localtime(&date);
447 strftime(buf, 63, format, &tm);
448
449 return buf;
450}

Referenced by ColladaXML::initCollada().

Here is the caller graph for this function:

◆ get_mstream()

unsigned char * get_mstream ( mstream * sb)

unsigned char* get_mstream(mstream* sb)

メッセージ(文字列)ストリーム sb から次のメッセージを取り出す.改行コードは削除される.
ここで,メッセージとは \r\n, \r または \n で区切られている文字列でのことである.

Parameters
[in]sbメッセージストリームへのポインタ
[out]sbstate JBXL_NORMAL: ストリームは正常状態.JBXL_ERROR: ストリームは異常な状態にある.(未実装)
Return values
NULL以外取り出したストリームデータへのポインタ.要 free
NULLデータ取得失敗.現在有効なメッセージデータは無い.または単に失敗した.

Definition at line 3531 of file tools.cpp.

3532{
3533 int n, len;
3534 unsigned char* pp;
3535
3536 if (sb==NULL) return NULL;
3537 sb->state = JBXL_NORMAL;
3538 if (sb->buf==NULL) return NULL;
3539 if (sb->datano==0) return NULL;
3540
3541 len = sb->npoint - sb->spoint;
3542 if (len==0) return NULL;
3543 else if (len<0) len += sb->bufsz;
3544
3545 pp = get_ringBuffer(sb, len);
3546 if (pp==NULL) {
3547 sb->state = JBXL_ERROR;
3548 return NULL;
3549 }
3550 chomp((char*)pp);
3551
3552 sb->datano += -1;
3553 sb->spoint = sb->npoint;
3554
3555 if (sb->datano>=1) {
3556 int m;
3557 n = sb->spoint;
3558 while (n!=sb->epoint) {
3559 m = (n + 1) % sb->bufsz;
3560 if (sb->buf[n]==CHAR_LF || (sb->buf[n]==CHAR_CR && sb->buf[m]!=CHAR_LF)) {
3561 sb->npoint = m;
3562 break;
3563 }
3564 n = m;
3565 }
3566 }
3567
3568 return pp;
3569}
#define JBXL_ERROR
エラー
Definition jbxl_state.h:34
unsigned char * get_ringBuffer(ringBuffer *rb, int sz)
リングバッファからデータを得る.要 free()
Definition tools.cpp:3382
char * chomp(char *buf)
最初の改行コード以降を無効にする.
Definition tools.cpp:921

References CHAR_CR, CHAR_LF, chomp(), get_ringBuffer(), JBXL_ERROR, and JBXL_NORMAL.

Referenced by fgets_mstream(), tcp_recv_mstream(), and tcp_recv_mstream_Buffer().

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

◆ get_ringBuffer()

unsigned char * get_ringBuffer ( ringBuffer * rb,
int sz )

unsigned char* get_ringBuffer(ringBuffer* rb, int sz)

リングバッファ rb から szバイトのデータを取り出す.
返されたデータは free()する必要がある.

Parameters
[in]rbリングバッファへのポインタ
[out]rbstate JBXL_NORMAL: バッファは正常状態.JBXL_ERROR: バッファは異常な状態にある.
sz取り出すバイト数.
Return values
NULL以外取り出したデータへのポインタ.データサイズは sz + 1.要 free
NULLデータ取得失敗.現在有効なデータサイズはszより小さい.または単に失敗した.

Definition at line 3382 of file tools.cpp.

3383{
3384 unsigned char* pp;
3385
3386 if (rb==NULL) return NULL;
3387 if (rb->buf==NULL) return NULL;
3388 if (sz>rb->datasz) return NULL;
3389
3390 pp = (unsigned char*)malloc(sz+1);
3391 if (pp==NULL) return NULL;
3392 memset(pp, 0, sz+1);
3393
3394 if (rb->spoint+sz<=rb->bufsz) {
3395 memcpy(pp, &(rb->buf[rb->spoint]), sz);
3396 rb->spoint = rb->spoint + sz;
3397 if (rb->spoint==rb->bufsz) rb->spoint = 0;
3398 }
3399 else {
3400 memcpy(pp, &(rb->buf[rb->spoint]), rb->bufsz-rb->spoint);
3401 memcpy(&(pp[rb->bufsz-rb->spoint]), rb->buf, sz-(rb->bufsz-rb->spoint));
3402 rb->spoint = rb->spoint + sz - rb->bufsz;
3403 }
3404
3405 rb->datasz -= sz;
3406 return pp;
3407}
int datasz
保存されているデータの全体の長さ
Definition tools.h:160
int spoint
バッファデータの開始点
Definition tools.h:158

References ringBuffer::buf, ringBuffer::bufsz, ringBuffer::datasz, and ringBuffer::spoint.

Referenced by get_mstream().

Here is the caller graph for this function:

◆ get_seq_data()

char * get_seq_data ( char * buf,
int * ptr )

char* get_seq_data(char* buf, int* ptr)

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

改行コードは削除される.連続して呼び出す場合,一番最初は *ptrに 0を設定し,以後は *ptrの内容は変えない.
取り出した行を char型変数のバッファに格納して返す.
バッファの最後が '\0' で終わっている場合,バッファを越えて行を読もうとした時は NULL を返す.
'\0' で終わっていない場合,バッファが何処で終わりかを知る事は(簡単な方法では)できない.

返されたデータは free() する必要がある.

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

Definition at line 529 of file tools.cpp.

530{
531 int pos, cnt;
532 char* ret = NULL;
533
534 if (buf==NULL || buf[*ptr]=='\0') return NULL;
535
536 pos = *ptr;
537 while (buf[*ptr]!=CHAR_LF && buf[*ptr]!=CHAR_CR && buf[*ptr]!='\0') (*ptr)++;
538 cnt = *ptr - pos;
539
540 if (cnt>=0) {
541 ret = (char*)malloc(cnt+1);
542 if (ret==NULL) return NULL;
543
544 int i;
545 for(i=0; i<cnt; i++) ret[i] = buf[pos+i];
546 ret[cnt] = '\0';
547 }
548
549 while (buf[*ptr]==CHAR_LF || buf[*ptr]==CHAR_CR) (*ptr)++;
550 return ret;
551}

References CHAR_CR, and CHAR_LF.

◆ guid2uuid()

unsigned char * guid2uuid ( unsigned char * p)

unsigned char* guid2uuid(unsigned char* p)

テキストのGUID をバイナリのUUID に変換する.要 free()
入力が GUIDの形式でない時は,処理結果は保証されない.

Parameters
pテキストの GUID
Returns
バイナリの UUIDへのポインタ.128bit. 要 free

Definition at line 3654 of file tools.cpp.

3655{
3656 int i, j;
3657 unsigned char* uuid;
3658
3659 if (p==NULL) return NULL;
3660
3661 uuid = (unsigned char*)malloc(16);
3662 if (uuid==NULL) return NULL;
3663 memset(uuid, 0, 16);
3664
3665 i = j = 0;
3666 while (p[i]!='\0' && j<16) {
3667 if (p[i]!='-' && p[i+1]!='\0') {
3668 unsigned char hb, lb;
3669
3670 if (p[i]>='0' && p[i]<='9') hb = p[i] - '0';
3671 else if (p[i]>='a' && p[i]<='f') hb = p[i] - 'a' + 10;
3672 else if (p[i]>='A' && p[i]<='F') hb = p[i] - 'A' + 10;
3673 else hb = '\0';
3674
3675 if (p[i+1]>='0' && p[i+1]<='9') lb = p[i+1] - '0';
3676 else if (p[i+1]>='a' && p[i+1]<='f') lb = p[i+1] - 'a' + 10;
3677 else if (p[i+1]>='A' && p[i+1]<='F') lb = p[i+1] - 'A' + 10;
3678 else lb = '\0';
3679
3680 uuid[j] = (hb<<4) + lb;
3681 i++;
3682 j++;
3683 }
3684 i++;
3685 }
3686
3687 return uuid;
3688}

◆ hexstr2i()

int hexstr2i ( const char * str)

int hexstr2i(const char* str)

16進数の文字列を整数に変換する.

空白は無視する.空白以外の16進数でない文字が出現したら,そこで変換を止める

Parameters
str整数に変換する 16進の文字列
Returns
変換された整数

Definition at line 1706 of file tools.cpp.

1707{
1708 int i, ret = 0;
1709 if (str==NULL) return ret;
1710
1711 int len = (int)strlen(str);
1712
1713 for (i=0; i<len; i++) {
1714 if (str[i]>='0' && str[i]<='9') {
1715 ret = ret*16;
1716 ret += (int)(str[i] - '0');
1717 }
1718 else if (str[i]>='A' && str[i]<='F') {
1719 ret = ret*16;
1720 ret += (int)(str[i] - 'A') + 10;
1721 }
1722 else if (str[i]>='a' && str[i]<='f') {
1723 ret = ret*16;
1724 ret += (int)(str[i] - 'a') + 10;
1725 }
1726 else if (str[i]!=' ') {
1727 break;
1728 }
1729 }
1730
1731 return ret;
1732}

Referenced by get_chunked_size().

Here is the caller graph for this function:

◆ init_ringBuffer()

ringBuffer init_ringBuffer ( void )

ringBuffer init_ringBuffer()

初期化された ringBuffer変数を返す.

Returns
期化された ringBuffer変数
See also
ringBuffer

Definition at line 3250 of file tools.cpp.

3251{
3252 ringBuffer rb;
3253
3254 memset(&rb, 0, sizeof(ringBuffer));
3255 rb.state = JBXL_NORMAL;
3256
3257 return rb;
3258}

References JBXL_NORMAL, and ringBuffer::state.

◆ int_from_big_endian()

int int_from_big_endian ( void * ptr)

int int_from_big_endian(void* ptr)

Big Endian形式で格納されている int型の値を取り出す.

Parameters
ptr変数が格納されているメモリへのポインタ
Returns
取り出した int型の値

Definition at line 300 of file tools.cpp.

301{
302 int ret = *((int*)ptr);
303
305 if (HostEndian==LITTLE_ENDIAN) reverse_str((uByte*)(&ret), 4);
306 return ret;
307}

References check_endian(), HostEndian, LITTLE_ENDIAN, reverse_str(), and UNKNOWN_ENDIAN.

Here is the call graph for this function:

◆ int_from_little_endian()

int int_from_little_endian ( void * ptr)

int int_from_little_endian(void* ptr)

Little Endian形式で格納されている int型の値を取り出す.

Parameters
ptr変数が格納されているメモリへのポインタ
Returns
取り出した int型の値

Definition at line 192 of file tools.cpp.

193{
194 int ret = *((int*)ptr);
195
197 if (HostEndian==BIG_ENDIAN) reverse_str((uByte*)(&ret), 4);
198 return ret;
199}

References BIG_ENDIAN, check_endian(), HostEndian, reverse_str(), and UNKNOWN_ENDIAN.

Here is the call graph for this function:

◆ is_big_endian()

int is_big_endian ( void )

int is_big_endian(void)

エンディアンの動的チェック

一度呼び出すと,大域変数 HostEndianLITTLE_ENDIANBIG_ENDIAN が設定される.

Return values
TRUEBig Endian
FALSELittle Endian
See also
HostEndian, is_little_endian()

Definition at line 114 of file tools.cpp.

115{
116 unsigned char x[] = {0x00, 0x01};
117
118 if (HostEndian==BIG_ENDIAN) return TRUE;
119
120 else if (HostEndian==LITTLE_ENDIAN) return FALSE;
121
122 else {
123 unsigned short* xx = (unsigned short*)x;
124 if (*xx==1) {
126 return TRUE;
127 }
128 else {
130 return FALSE;
131 }
132 }
133}

References BIG_ENDIAN, FALSE, HostEndian, LITTLE_ENDIAN, and TRUE.

Referenced by get_tiff_ifd().

Here is the caller graph for this function:

◆ is_little_endian()

int is_little_endian ( void )

int is_little_endian(void)

エンディアンの動的チェック

一度呼び出すと,大域変数 HostEndianLITTLE_ENDIANBIG_ENDIAN が設定される.

Return values
TRUELittle Endian
FALSEBig Endian
See also
HostEndian, is_big_endian()

Definition at line 80 of file tools.cpp.

81{
82 unsigned char x[] = {0x01, 0x00};
83
84 if (HostEndian==LITTLE_ENDIAN) return TRUE;
85
86 else if (HostEndian==BIG_ENDIAN) return FALSE;
87
88 else {
89 unsigned short* xx = (unsigned short*)x;
90 if (*xx==1) {
92 return TRUE;
93 }
94 else {
96 return FALSE;
97 }
98 }
99}

References BIG_ENDIAN, FALSE, HostEndian, LITTLE_ENDIAN, and TRUE.

Referenced by check_endian(), get_tiff_ifd(), ntohull(), jbxl::readCmnHeadFile(), jbxl::readTGAData(), jbxl::readUserSetData(), jbxl::readXHeadFile(), and jbxl::setupTGAData().

Here is the caller graph for this function:

◆ is_number()

int is_number ( unsigned char * str)

int is_number(unsigned char* str)

文字列が数字かどうか反転する.

Parameters
検査する文字列
Returns
0: 数字でない.1: 整数.2: 小数点付き数字.

Definition at line 1394 of file tools.cpp.

1395{
1396 if (str==NULL) return 0;
1397 int i, len = (int)strlen((char*)str);
1398
1399 int cnt = 0;
1400 for (i=0; i<len; i++) {
1401 if (str[i]=='.') cnt += 1;
1402 else if (str[i]<'0' || str[i]>'9') return 0;
1403 }
1404 if (cnt>1) return 0;
1405 else if (cnt>0) return 2;
1406 return 1;
1407}

Referenced by json_array_parse(), and json_parse_prop().

Here is the caller graph for this function:

◆ isNull()

int isNull ( void * p)

int isNull(void* p)

ポインタが NULLかどうかを検査する.
Windowsの場合,無効ポインタも検出する.

Parameters
p検査するポインタ.
Return values
TRUEポインタがNULL,または無効(Windowsの場合)
FALSEポインタはNULLではなく有効(Windowsの場合)である.
Attention
JunkBox_LIb++ の場合はこの関数ではなく,inline型の isNull() が使用される.

Definition at line 51 of file tools.cpp.

52{
53 if (p==NULL) return TRUE;
54
55#ifdef WIN32
56 if (p==WIN_DD_NULL) return TRUE;
57#endif
58
59 return FALSE;
60}
#define WIN_DD_NULL
Definition common.h:96

References FALSE, TRUE, and WIN_DD_NULL.

◆ itostr()

char * itostr ( int n)

char* itostr(int n)

int型 nを文字列にして返す.

Parameters
n文字列に変換する値
Returns
変換された文字列.free() してはいけない.

Definition at line 1420 of file tools.cpp.

1421{
1422 memset(_ToSTR, 0, LDATA);
1423 snprintf(_ToSTR, LDATA-1, "%d", n);
1424 return _ToSTR;
1425}

References _ToSTR, LDATA, and snprintf.

Referenced by ColladaXML::addController(), ColladaXML::addPolylists(), and OBJData::output_obj().

Here is the caller graph for this function:

◆ itostr_ts()

char * itostr_ts ( int n)

char* itostr_ts(int n)

int型 nを文字列にして返す.Thread Safe

Parameters
n文字列に変換する値
Returns
変換された文字列.要 free.

Definition at line 1532 of file tools.cpp.

1533{
1534 char* str = NULL;
1535 str = (char*)malloc(LDATA);
1536 if (str==NULL) return NULL;
1537
1538 memset(str, 0, LDATA);
1539 snprintf(str, LDATA-1, "%d", n);
1540 return str;
1541}

References LDATA, and snprintf.

Referenced by _tcp_bind(), _tcp_bind_setopt(), _tcp_client_bind_socket(), _tcp_client_socket(), _tcp_connect(), _tcp_server_bind(), _tcp_server_bind_setopt(), _tcp_server_socket(), _tcp_server_socket_setopt(), _udp_bind(), _udp_bind_setopt(), _udp_client_socket(), _udp_server_socket(), _udp_server_socket_setopt(), llsd_bin_main_parse(), make_xml_attr_byint(), recv_http_Buffer(), and recv_http_file().

Here is the caller graph for this function:

◆ kanji_convert()

void kanji_convert ( unsigned char * mesg)

void kanji_convert(unsigned char* mesg)

大域変数 KnjiCodeに従って漢字コードを変換する.

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

Definition at line 2629 of file tools.cpp.

2630{
2631 if (KanjiCode==CODE_SJIS) {
2633 }
2634}
int KanjiCode
システムの漢字コード
Definition tools.cpp:20
void kanji_convert_euc2sjis(unsigned char *mesg)
EUCをSJISに変換する.
Definition tools.cpp:2644
#define CODE_SJIS
Definition tools.h:85

References CODE_SJIS, kanji_convert_euc2sjis(), and KanjiCode.

Here is the call graph for this function:

◆ kanji_convert_euc2sjis()

void kanji_convert_euc2sjis ( unsigned char * mesg)

void kanji_convert_euc2sjis(unsigned char* mesg)

EUCをSJISに変換する.

Parameters
[in,out]mesg変換する文字列を持つ unsigned char*型データ.内容が書き換えられる.

Definition at line 2644 of file tools.cpp.

2645{
2646 int i = 0;
2647 while(mesg[i]!='\0' && mesg[i+1]!='\0'){
2648 if (mesg[i]>=0xa1 && mesg[i]<=0xfe){ // EUC
2649 euc2sjis(&mesg[i], &mesg[i+1]);
2650 i = i + 2;
2651 }
2652 else i++;
2653 }
2654}
void euc2sjis(unsigned char *c1, unsigned char *c2)
EUC -> SJIS.
Definition tools.cpp:2687

References euc2sjis().

Referenced by kanji_convert().

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

◆ kanji_convert_sjis2euc()

void kanji_convert_sjis2euc ( unsigned char * mesg)

void kanji_convert_sjis2euc(unsigned char* mesg)

SJISをEUCに変換する.

Parameters
[in,out]mesg変換する文字列を持つ unsigned char*型データ.内容が書き換えられる.

Definition at line 2664 of file tools.cpp.

2665{
2666 int i = 0;
2667 while(mesg[i]!='\0' && mesg[i+1]!='\0'){
2668 // if文が変則的なのは,コンパイラで警告が出るため (GCC) 3.3.2 20031218
2669 if ((mesg[i]>=0x81 && mesg[i]<=0x9f) ||
2670 (mesg[i]>=0xe0 && mesg[i]<=0xfe) || mesg[i]==0xff) { // SJIS
2671 sjis2euc(&mesg[i], &mesg[i+1]);
2672 i = i + 2;
2673 }
2674 else i++;
2675 }
2676}
void sjis2euc(unsigned char *c1, unsigned char *c2)
SJIS -> EUC.
Definition tools.cpp:2716

References sjis2euc().

Here is the call graph for this function:

◆ lltostr()

char * lltostr ( long long int n)

char* lltostr(long long int n)

long long int型 nを文字列にして返す.

Parameters
n文字列に変換する値
Returns
変換された文字列.free() してはいけない.

Definition at line 1468 of file tools.cpp.

1469{
1470 memset(_ToSTR, 0, LDATA);
1471 snprintf(_ToSTR, LDATA-1, "%lld", n);
1472 return _ToSTR;
1473}

References _ToSTR, LDATA, and snprintf.

◆ lltostr_ts()

char * lltostr_ts ( long long int n)

char* lltostr_ts(long long int n)

long long int型 nを文字列にして返す.Thread Safe

Parameters
n文字列に変換する値
Returns
変換された文字列.要 free.

Definition at line 1592 of file tools.cpp.

1593{
1594 char* str = NULL;
1595 str = (char*)malloc(LDATA);
1596 if (str==NULL) return NULL;
1597
1598 memset(str, 0, LDATA);
1599 snprintf(str, LDATA-1, "%lld", n);
1600 return str;
1601}

References LDATA, and snprintf.

◆ ltostr()

char * ltostr ( long int n)

char* ltostr(long int n)

long int型 nを文字列にして返す.

Parameters
n文字列に変換する値
Returns
変換された文字列.free() してはいけない.

Definition at line 1436 of file tools.cpp.

1437{
1438 memset(_ToSTR, 0, LDATA);
1439 snprintf(_ToSTR, LDATA-1, "%ld", n);
1440 return _ToSTR;
1441}

References _ToSTR, LDATA, and snprintf.

◆ ltostr_ts()

char * ltostr_ts ( long int n)

char* ltostr_ts(long int n)

long int型 nを文字列にして返す.Thread Safe

Parameters
n文字列に変換する値
Returns
変換された文字列.要 free.

Definition at line 1552 of file tools.cpp.

1553{
1554 char* str = NULL;
1555 str = (char*)malloc(LDATA);
1556 if (str==NULL) return NULL;
1557
1558 memset(str, 0, LDATA);
1559 snprintf(str, LDATA-1, "%ld", n);
1560 return str;
1561}

References LDATA, and snprintf.

◆ make_ringBuffer()

ringBuffer make_ringBuffer ( int sz)

ringBuffer make_ringBuffer(int sz)

バッファ部が存在するリングバッファを作り出す. バッファ部は free()する必要がある.

Parameters
szリングバッファのバッファ部のサイズ
Returns
作成された ringBuffer変数.バッファ部は 要 free

Definition at line 3270 of file tools.cpp.

3271{
3272 ringBuffer rb;
3273
3274 memset(&rb, 0, sizeof(ringBuffer));
3275
3276 if (sz>0) {
3277 rb.buf = (unsigned char*)malloc(sz);
3278 if (rb.buf==NULL) return rb;
3279 memset(rb.buf, 0, sz);
3280 rb.bufsz = sz;
3281 rb.state = JBXL_NORMAL;
3282 }
3283
3284 return rb;
3285}

References ringBuffer::buf, ringBuffer::bufsz, JBXL_NORMAL, and ringBuffer::state.

◆ mkdirp()

int mkdirp ( const char * path,
mode_t mode )

Definition at line 2511 of file tools.cpp.

2512{
2513 if (path==NULL) return JBXL_ARGS_ERROR;
2514
2515 long unsigned int lpath = (long unsigned int)strlen(path);
2516 char* file_name = (char*)malloc(lpath + 1);
2517 memcpy(file_name, path, lpath);
2518 file_name[lpath] = '\0';
2519 //
2520 long unsigned int size = 0;
2521 int mark = 1;
2522#ifdef WIN32
2523 if (file_name[1]==':') mark = 2; // ex.) "D:/abc/xyz"
2524#endif
2525
2526 char* wrk = (char*)malloc(lpath + 1);
2527 while (size < lpath) {
2528 memcpy(wrk, file_name, lpath + 1);
2529 int dirs = 0;
2530 for (long unsigned int ptr=0; ptr<=lpath; ptr++) {
2531 if (wrk[ptr]=='/') dirs++;
2532 if (mark==dirs) {
2533 wrk[ptr] = '\0';
2534 struct stat stbuf;
2535 int ret = stat(wrk, &stbuf);
2536 if (ret>=0) {
2537 if (!(stbuf.st_mode & S_IFDIR)) {
2538 return JBXL_FILE_EXIST_ERROR;
2539 }
2540 break;
2541 }
2542 ret = mkdir(wrk, mode);
2543 if (ret<0) return JBXL_DIR_MAKE_ERROR;
2544 break;
2545 }
2546 size = ptr;
2547 }
2548 mark++;
2549 }
2550 free(wrk);
2551 return JBXL_NORMAL;
2552}
#define mkdir(d, m)
Definition common.h:61
#define JBXL_DIR_MAKE_ERROR
ディレクトリ作成エラー
Definition jbxl_state.h:53

References JBXL_ARGS_ERROR, JBXL_DIR_MAKE_ERROR, JBXL_FILE_EXIST_ERROR, JBXL_NORMAL, and mkdir.

Referenced by extract_tTar().

Here is the caller graph for this function:

◆ new_ringBuffer()

ringBuffer * new_ringBuffer ( int sz)

ringBuffer* new_ringBuffer(int sz)

リングバッファ型変数を生成する.
返されたデータは del_ringBuffer() する必要がある.

Returns
空のリングバッファ変数.要 free
See also
ringBuffer, del_ringBuffer()

Definition at line 3204 of file tools.cpp.

3205{
3206 ringBuffer* rb;
3207
3208 rb = (ringBuffer*)malloc(sizeof(ringBuffer));
3209 if (rb==NULL) return NULL;
3210 memset(rb, 0, sizeof(ringBuffer));
3211 rb->state = JBXL_NORMAL;
3212
3213 if (sz>0) {
3214 rb->buf = (unsigned char*)malloc(sz);
3215 if (rb->buf==NULL) return rb;
3216 memset(rb->buf, 0, sz);
3217 rb->bufsz = sz;
3218 }
3219 return rb;
3220}

References ringBuffer::buf, ringBuffer::bufsz, JBXL_NORMAL, and ringBuffer::state.

◆ ntohull()

unsigned long long int ntohull ( unsigned long long int s)

Definition at line 1824 of file tools.cpp.

1825{
1826 if (is_little_endian()) {
1827 long long int d;
1828 uByte* src = (uByte*)&s;
1829 uByte* dst = (uByte*)&d;
1830 dst[0] = src[7];
1831 dst[1] = src[6];
1832 dst[2] = src[5];
1833 dst[3] = src[4];
1834 dst[4] = src[3];
1835 dst[5] = src[2];
1836 dst[6] = src[1];
1837 dst[7] = src[0];
1838 return d;
1839 }
1840 return s;
1841}

References is_little_endian().

Referenced by llsd_bin_get_date(), and llsd_bin_get_real().

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

◆ numbering_name()

char * numbering_name ( const char * fmt,
int n )

char* numbering_name(const char* fmt, int n)

フォーマット fmtに従って,nを含む文字列を作り出す. 返されたデータは free()する必要がある.

Parameters
fmtフォーマット用文字列.ex. "%d %f\n" see printf()
n文字に変換する整数.
Returns
出力された文字列.要 free
See also
printf()

Definition at line 2598 of file tools.cpp.

2599{
2600 int len;
2601 char fname[LNAME], *fo;
2602
2603 memset(fname, 0, LNAME);
2604 snprintf(fname, LNAME-1, fmt, n);
2605 len = (int)strlen(fname);
2606
2607 fo = (char*)malloc(len+1);
2608 if (fo==NULL) return NULL;
2609
2610 memset(fo, 0, len+1);
2611 strncpy(fo, fname, len);
2612 return fo;
2613}
#define LNAME
Definition common.h:153

References LNAME, and snprintf.

Referenced by jbxl::readGraphicSlices(), and CBVHTool::writeMultiFile().

Here is the caller graph for this function:

◆ open_errfile()

void open_errfile ( void )

void open_errfile(void)

デフォルトのエラーファイルをオープンする

Definition at line 3976 of file tools.cpp.

3977{
3978 if (FP_ErrFile!=NULL) return;
3979
3980 FP_LogFile = fopen(JBXL_ERR_FILE, "a");
3981 return;
3982}
#define JBXL_ERR_FILE
デフォルトのエラーファイル
Definition tools.h:441

References FP_ErrFile, FP_LogFile, and JBXL_ERR_FILE.

◆ open_logfile()

void open_logfile ( void )

void open_logfile(void)

デフォルトのログファイルをオープンする

Definition at line 3901 of file tools.cpp.

3902{
3903 if (FP_LogFile!=NULL) return;
3904
3905 FP_LogFile = fopen(JBXL_LOG_FILE, "a");
3906 return;
3907}
#define JBXL_LOG_FILE
デフォルトのログファイル
Definition tools.h:440

References FP_LogFile, and JBXL_LOG_FILE.

◆ pack_char_len()

char * pack_char_len ( char * mesg,
char cc,
int len )

char* pack_char(char* mesg, char cc)

文字列中及び,先頭のcc(複数),終わりのcc(複数),CR, LF を削除

タブは空白に変換.メッセージ中の連続する cc は 1個に変換. 返されたデータは free()する必要がある.

CR, LF も削除(無視)されるので注意.

Parameters
mesg操作対象の文字列
cc削除する文字
Returns
変換後の文字列.要 free char* pack_char_len(char* mesg, char cc, int len)

文字列の一部の先頭のcc(複数),終わりのcc(複数),CR, LF を削除

タブは空白に変換.メッセージ中の連続する cc は 1個に変換. 返されたデータは free()する必要がある.

CR, LF も削除(無視)されるので注意.

Parameters
mesg操作対象の文字列
cc削除する文字
len操作する文字列の長さ
Returns
変換後の文字列.要 free

Definition at line 1154 of file tools.cpp.

1155{
1156 int i, j;
1157 int sf = OFF; // 連続 cc 用のフラグ
1158 int ff = ON; // 先頭の cc を無視するためのフラグ
1159 char* pp;
1160
1161 if (mesg==NULL) return NULL;
1162
1163 if (len==0) return NULL;
1164 if (len<0) len = (int)strlen(mesg);
1165 pp = (char*)malloc(len+1);
1166 if (pp==NULL) return NULL;
1167 memset(pp, 0, len+1);
1168
1169 i = j = 0;
1170 while(mesg[i]!='\0' && i<len) {
1171 if (mesg[i]==CHAR_TAB) mesg[i] = ' ';
1172 if (mesg[i]!=CHAR_CR && mesg[i]!=CHAR_LF) { // CR LF を読み飛ばす.
1173 if (mesg[i]==cc) {
1174 if (sf==OFF) {
1175 sf = ON;
1176 if (ff==ON) ff = OFF;
1177 else pp[j++] = mesg[i];
1178 }
1179 }
1180 else {
1181 sf = ff = OFF;
1182 pp[j++] = mesg[i];
1183 }
1184 }
1185 i++;
1186 }
1187 pp[j] = '\0';
1188
1189 // 末尾の cc を削除
1190 i = (int)strlen(pp) - 1;
1191 while(i>=0) {
1192 if (pp[i]==cc) i--;
1193 else break;
1194 }
1195 pp[i+1] = '\0';
1196
1197 return pp;
1198}
#define OFF
Definition common.h:231
#define ON
Definition common.h:230
#define CHAR_TAB
タブ
Definition tools.h:80

References CHAR_CR, CHAR_LF, CHAR_TAB, OFF, and ON.

◆ pack_head_tail_char()

char * pack_head_tail_char ( char * mesg,
char cc )

char* pack_head_tail_char(char* mesg, char cc)

文字列の先頭のcc(複数),終わりのcc(複数),TAB, CR, LF を削除

文字列の先頭,終わり部分でない場所にある ccは削除されない. 返されたデータは free()する必要がある.

Parameters
mesg操作対象の文字列
cc削除する文字
Returns
変換後の文字列.要 free

Definition at line 1092 of file tools.cpp.

1093{
1094 int sz;
1095 char* ps;
1096 char* pe;
1097 char* pp;
1098
1099 if (mesg==NULL) return NULL;
1100
1101 ps = mesg;
1102 while(*ps==cc || *ps==CHAR_TAB || *ps==CHAR_LF || *ps==CHAR_CR) ps++;
1103 pe = ps;
1104 while(*pe!='\0') pe++;
1105 pe--;
1106 while(*pe==cc || *pe==CHAR_TAB || *pe==CHAR_LF || *pe==CHAR_CR) pe--;
1107
1108 sz = (int)(pe - ps) + 1;
1109 pp = (char*)malloc((size_t)(sz + 1));
1110 memcpy(pp, ps, sz);
1111 pp[sz] = '\0';
1112
1113 return pp;
1114}

References CHAR_CR, CHAR_LF, and CHAR_TAB.

Referenced by FBXData::outputFile(), GLTFData::outputFile(), OBJData::outputFile(), BrepSolidList::outputFile(), ColladaXML::outputFile(), xml_parse_content(), and xml_parse_end_node().

Here is the caller graph for this function:

◆ print_16x()

void print_16x ( FILE * fp,
unsigned char * mesg,
int n )

void print_16x(FILE* fp, unsigned char* mesg, int n)

デバッグ用 16進一行出力.

mesgの nバイトの16進を一行,空白なしで表示する.n<0 の場合は 文字列とみなす.

Parameters
fp出力するファイルへのポインタ.NULLの場合は stderr
mesg表示するデータ.
n表示するバイト数

Definition at line 4227 of file tools.cpp.

4228{
4229 int i, len;
4230
4231 if (fp==NULL) fp = stderr;
4232
4233 if (n<0) len = (int)strlen((const char*)mesg);
4234 else len = n;
4235
4236 for (i=0; i<len; i++) {
4237 fprintf(fp, "%02x", mesg[i]);
4238 }
4239 fprintf(fp, "\n");
4240}

◆ print_errfile()

void print_errfile ( const char * fmt,
... )

void print_errfile(const char* fmt, ...)

デフォルトのエラーファイルにデータを書き込む

Definition at line 4006 of file tools.cpp.

4007{
4008 char* nfmt;
4009 int len;
4010 int slfopn = FALSE;
4011
4012 //
4013 if (FP_ErrFile==NULL) {
4014 FP_ErrFile = fopen(JBXL_ERR_FILE, "a");
4015 if (FP_ErrFile==NULL) return;
4016 slfopn = TRUE;
4017 }
4018
4019 va_list args;
4020 va_start(args, fmt);
4021
4022 len = (int)strlen(fmt);
4023 nfmt = (char*)malloc(len + 2);
4024 if (nfmt==NULL) return;
4025
4026 strncpy(nfmt, fmt, len);
4027 nfmt[len] = '\n';
4028 nfmt[len+1] = '\0';
4029
4030 vfprintf(FP_ErrFile, nfmt, args);
4031 fflush(FP_ErrFile);
4032 free(nfmt);
4033
4034 va_end(args);
4035
4036 //
4037 if (slfopn && FP_ErrFile!=NULL) {
4038 fclose(FP_ErrFile);
4039 FP_ErrFile = NULL;
4040 }
4041
4042 return;
4043}

References FALSE, FP_ErrFile, JBXL_ERR_FILE, and TRUE.

◆ print_escape()

void print_escape ( const char * fmt,
char * mesg )

void print_escape(const char* fmt, const char* mesg)

エスケープ文字を含むメッセージの出力.(stderr)

現在は CR, LF のみ \r, \n に変換する.see change_esc()

Parameters
fmt出力フォーマット.printf() に準拠.
mesgエスケープ文字を含む文字列.
See also
change_esc(), printf()

Definition at line 4124 of file tools.cpp.

4125{
4126 char* pp;
4127
4128 if (fmt==NULL || mesg==NULL) return;
4129
4130 pp = change_esc(mesg);
4131 if (pp==NULL) return;
4132
4133 PRINT_MESG(fmt, pp);
4134 free(pp);
4135}
#define PRINT_MESG(...)
環境依存用の出力関数.MS Windows用は未実装
Definition tools.h:469

References change_esc(), and PRINT_MESG.

Here is the call graph for this function:

◆ print_logfile()

void print_logfile ( const char * fmt,
... )

void print_logfile(const char* fmt, ...)

デフォルトのログファイルにデータを書き込む

Definition at line 3931 of file tools.cpp.

3932{
3933 char* nfmt;
3934 int len;
3935 int slfopn = FALSE;
3936
3937 //
3938 if (FP_LogFile==NULL) {
3939 FP_LogFile = fopen(JBXL_LOG_FILE, "a");
3940 if (FP_LogFile==NULL) return;
3941 slfopn = TRUE;
3942 }
3943
3944 va_list args;
3945 va_start(args, fmt);
3946
3947 len = (int)strlen(fmt);
3948 nfmt = (char*)malloc(len + 2);
3949 if (nfmt==NULL) return;
3950
3951 strncpy(nfmt, fmt, len);
3952 nfmt[len] = '\n';
3953 nfmt[len+1] = '\0';
3954
3955 vfprintf(FP_LogFile, nfmt, args);
3956 fflush(FP_LogFile);
3957 free(nfmt);
3958
3959 va_end(args);
3960
3961 //
3962 if (slfopn && FP_LogFile!=NULL) {
3963 fclose(FP_LogFile);
3964 FP_LogFile = NULL;
3965 }
3966
3967 return;
3968}

References FALSE, FP_LogFile, JBXL_LOG_FILE, and TRUE.

◆ print_message()

void print_message ( const char * fmt,
... )

void print_message(const char* fmt, ...)

バッファリング無しのメッセージ出力(stderr)

Parameters
fmt出力フォーマット.printf() に準拠.
See also
printf()

Definition at line 4054 of file tools.cpp.

4055{
4056 char* nfmt;
4057 int len;
4058
4059 va_list args;
4060 va_start(args, fmt);
4061
4062 len = (int)strlen(fmt);
4063 nfmt = (char*)malloc(len + 1);
4064 if (nfmt==NULL) return;
4065
4066 strncpy(nfmt, fmt, len);
4067 nfmt[len] = '\0';
4068
4069 vfprintf(stderr, nfmt, args);
4070 fflush(stderr);
4071 free(nfmt);
4072
4073 va_end(args);
4074
4075 return;
4076}

Referenced by AffineTrans< T >::printComponents(), and AffineTrans< T >::printMatrix().

Here is the caller graph for this function:

◆ put_mstream()

int put_mstream ( mstream * sb,
unsigned char * mesg )

int put_mstream(mstream* sb, unsigned char* mesg)

メッセージ(文字列)ストリーム sb へメッセージ(の一部)を格納する.
ここで,メッセージとは \r\n, \r または \n で区切られている文字列でのことである.

Parameters
[in]sbメッセージストリームへのポインタ
[out]sbstate JBXL_NORMAL: ストリームは正常状態.JBXL_ERROR: ストリームは異常な状態にある.
mesg格納するメッセージ,またはその一部
Return values
0以上書き込んだバイト数(CRLFを含む)
JBXL_ARGS_ERROR引数にNULLのデータがある.
JBXL_TOOLS_BUF_ERRORバッファ(データ格納)部の領域がない.
JBXL_TOOLS_BUFSZ_ERRORバッファ(データ格納)部の大きさがたりない.

Definition at line 3490 of file tools.cpp.

3491{
3492 int i, n, m, cc, np=0, len;
3493
3494 if (sb==NULL) return JBXL_ARGS_ERROR;
3495 sb->state = JBXL_NORMAL;
3496 if (mesg==NULL) return JBXL_ARGS_ERROR;
3497 if (sb->buf==NULL) return JBXL_TOOLS_BUF_ERROR;
3498
3499 len = (int)strlen((const char*)mesg);
3500 for (i=0, n=0, m=0; i<len; i++) {
3501 if (mesg[i]==CHAR_LF || (mesg[i]==CHAR_CR && mesg[i+1]!=CHAR_LF)) {
3502 if (m==0) m = i;
3503 n++;
3504 }
3505 }
3506 if (sb->datano==0 && n>=1) np = (sb->epoint + m + 1) % sb->bufsz;
3507
3508 cc = put_ringBuffer(sb, mesg, len);
3509 if (cc>=0) {
3510 if (sb->datano==0 && n>=1) sb->npoint = np;
3511 sb->datano += n;
3512 }
3513
3514 if (cc<0) sb->state = JBXL_ERROR;
3515 return cc;
3516}
#define JBXL_TOOLS_BUF_ERROR
バッファ(データ格納)部の領域がない
Definition jbxl_state.h:56
int put_ringBuffer(ringBuffer *rb, unsigned char *pp, int sz)
リングバッファにデータを格納する.
Definition tools.cpp:3341

References CHAR_CR, CHAR_LF, JBXL_ARGS_ERROR, JBXL_ERROR, JBXL_NORMAL, JBXL_TOOLS_BUF_ERROR, and put_ringBuffer().

Referenced by fgets_mstream(), tcp_recv_mstream(), and tcp_recv_mstream_Buffer().

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

◆ put_ringBuffer()

int put_ringBuffer ( ringBuffer * rb,
unsigned char * pp,
int sz )

int put_ringBuffer(ringBuffer* rb, unsigned char* pp, int sz)

リングバッファ rb へデータを szバイト格納する.

Parameters
[in]rbリングバッファへのポインタ
[out]rbstate JBXL_NORMAL: バッファは正常状態.JBXL_ERROR: バッファは異常な状態にある.
pp格納するデータへのポインタ.
sz格納するデータのサイズ(Byte)
Return values
0以上書き込んだバイト数.
JBXL_ARGS_ERROR引数にNULLのデータがある.
JBXL_TOOLS_BUF_ERRORバッファ(データ格納)部の領域がない.
JBXL_TOOLS_BUFSZ_ERRORバッファ(データ格納)部の大きさがたりない.データはputされなかった.

Definition at line 3341 of file tools.cpp.

3342{
3343 if (rb==NULL) return JBXL_ARGS_ERROR;
3344 rb->state = JBXL_NORMAL;
3345
3346 if (pp==NULL) return JBXL_ARGS_ERROR;
3347 if (rb->buf==NULL) return JBXL_TOOLS_BUF_ERROR;
3348 if (rb->datasz+sz>rb->bufsz) {
3349 rb->state = JBXL_ERROR;
3351 }
3352
3353 if (rb->epoint+sz<=rb->bufsz) {
3354 memcpy(&(rb->buf[rb->epoint]), pp, sz);
3355 rb->epoint = rb->epoint + sz;
3356 if (rb->epoint==rb->bufsz) rb->epoint = 0;
3357 }
3358 else {
3359 memcpy(&(rb->buf[rb->epoint]), pp, rb->bufsz-rb->epoint);
3360 memcpy(rb->buf, &(pp[rb->bufsz-rb->epoint]), sz-(rb->bufsz-rb->epoint));
3361 rb->epoint = rb->epoint + sz - rb->bufsz;
3362 }
3363
3364 rb->datasz += sz;
3365 return sz;
3366}
#define JBXL_TOOLS_BUFSZ_ERROR
バッファ(データ格納)部の大きさが足りない
Definition jbxl_state.h:57
int epoint
バッファデータの終点+1 (データの追加点)
Definition tools.h:159

References ringBuffer::buf, ringBuffer::bufsz, ringBuffer::datasz, ringBuffer::epoint, JBXL_ARGS_ERROR, JBXL_ERROR, JBXL_NORMAL, JBXL_TOOLS_BUF_ERROR, JBXL_TOOLS_BUFSZ_ERROR, and ringBuffer::state.

Referenced by put_mstream().

Here is the caller graph for this function:

◆ randbit()

unsigned char * randbit ( int n)

unsigned char* randbit(int n)

ランダムに n bitのバイナリを生成する. 返されたデータは free()する必要がある.

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

Definition at line 1804 of file tools.cpp.

1805{
1806 int i, sz;
1807 unsigned char* bin;
1808
1809 sz = (n+7)/8;
1810 bin = (unsigned char*)malloc(sz);
1811 if (bin==NULL) return NULL;
1812
1813 memset(bin, 0, sz);
1814 for (i=0; i<n; i++) setBit(bin, i, rand()%2);
1815
1816 return bin;
1817}

References setBit.

◆ randstr()

char * randstr ( int n)

char* randstr(int n)

ランダムに A-Za-z0-9 までの文字を n文字生成する. 返されたデータは free()する必要がある.

Parameters
n出力する文字数.
Returns
ランダムに生成された n文字の文字列.要 free

Definition at line 1777 of file tools.cpp.

1778{
1779 char base[]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
1780 char* pass;
1781 int i, sz;
1782
1783 if (n<=0) return NULL;
1784 pass = (char*)malloc(n+1);
1785 if (pass==NULL) return pass;
1786
1787 sz = (int)strlen(base);
1788 for (i=0; i<n; i++) pass[i] = base[rand()%sz];
1789 pass[n] = '\0';
1790
1791 return pass;
1792}

Referenced by temp_filename().

Here is the caller graph for this function:

◆ read_file()

unsigned char * read_file ( const char * fname,
long unsigned int * size )

unsigned char* read_file(const char* fname, long unsigned int* size)

ファイルを読み込んで,データへのポインタを返す.

Parameters
fnameファイル名
size読み込んだデータのサイズを返す.
Returns
読み込んだデータへのポインタ.

Definition at line 2460 of file tools.cpp.

2461{
2462 size_t rs;
2463 UNUSED(rs);
2464
2465 if (size==NULL) return NULL;
2466
2467 *size = file_size(fname);
2468 if (*size<=0) return NULL;
2469
2470 unsigned char* buf = (unsigned char*)malloc(*size);
2471 if (buf==NULL) return NULL;
2472 memset(buf, 0, *size);
2473
2474 FILE* fp = fopen(fname, "rb");
2475 if (fp==NULL) {
2476 free(buf);
2477 return NULL;
2478 }
2479
2480 rs = fread(buf, *size, 1, fp);
2481 fclose(fp);
2482
2483 return buf;
2484}

References file_size(), and UNUSED.

Referenced by read_tiff_file().

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

◆ ref_ringBuffer()

unsigned char * ref_ringBuffer ( ringBuffer * rb,
int pos )

unsigned char* ref_ringBuffer(ringBuffer* rb, int pos)

リングバッファ rb の spoint + pos の位置にあるデータへの参照.

Parameters
rbリングバッファへのポインタ
pos参照するデータの spoint からの位置.
Return values
参照データへのポインタ.

Definition at line 3454 of file tools.cpp.

3455{
3456 unsigned char* pp;
3457
3458 if (rb==NULL) return NULL;
3459 if (rb->buf==NULL) return NULL;
3460 if (pos>rb->datasz) return NULL;
3461
3462 int sz = rb->spoint + pos;
3463 pp = rb->buf + sz;
3464 if (sz >= rb->bufsz) pp -= rb->bufsz;
3465
3466 return pp;
3467}

References ringBuffer::buf, ringBuffer::bufsz, ringBuffer::datasz, and ringBuffer::spoint.

◆ replace_char()

void replace_char ( unsigned char * buf,
int len,
unsigned char frm,
unsigned char toc )

void replace_char(unsigned char* buf, int len, unsigned char frm, unsigned char toc)

buf中の frm (char) を tosで置き換える.

Parameters
buf操作対象のデータ.バイナリも可.
lenbufの領域の大きさ(長さ)'\0'を含む.<= 0 の場合は buf を文字列として扱う.
frm変換するバイトデータ
tos変換後の倍とデータ

Definition at line 1252 of file tools.cpp.

1253{
1254 if (buf==NULL) return;
1255 if (len<=0) len = (int)strlen((char*)buf) + 1;
1256
1257 int i;
1258 for (i=0; i<len; i++) {
1259 if (buf[i]==frm) buf[i] = toc;
1260 }
1261
1262 return;
1263}

Referenced by GLTFData::output_gltf(), OBJData::output_mtl(), and OBJData::output_obj().

Here is the caller graph for this function:

◆ replace_str()

char * replace_str ( char * buf,
int len,
const char * frm,
const char * tos )

char* replace_str(char* buf, int len, const char* frm, const char* tos)

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

bufには十分な領域がなければならない.frmは bufとメモリ領域が重なってはいけない.
失敗した場合は NULLを返し,bufの内容は変化しない.

Parameters
[in]buf操作対象の文字列
[out]buf変換された文字列
lenbuf中の変換対象のbufの領域の大きさ(長さ)
frm変換する文字列
tos変換後の文字列
Returns
buf へのポインタ.失敗した場合は NULL.freeしてはいけない.

Definition at line 1282 of file tools.cpp.

1283{
1284 char* wrk = NULL;
1285 int i, j, k, slen, flen, tlen;
1286
1287 if (buf==NULL || frm==NULL || tos==NULL) return NULL;
1288 if (len<=0) len = (int)strlen(buf) + 1;
1289
1290 wrk = (char*)malloc(len);
1291 if (wrk==NULL) return NULL;
1292 memset(wrk, 0, len);
1293
1294 slen = (int)strlen(buf);
1295 flen = (int)strlen(frm);
1296 tlen = (int)strlen(tos);
1297
1298 i = j = 0;
1299 while (i<slen && j<len) {
1300 if (!strncmp((const char*)(buf+i), frm, flen)){
1301 for (k=0; k<tlen; k++) {
1302 wrk[j+k] = tos[k];
1303 }
1304 i += flen;
1305 j += tlen;
1306 }
1307 else {
1308 wrk[j++] = buf[i++];
1309 }
1310 }
1311
1312 //
1313 if (j>=len) {
1314 free(wrk);
1315 return NULL;
1316 }
1317
1318 wrk[j] = '\0';
1319 for (k=0; k<=j; k++) buf[k] = wrk[k];
1320 free(wrk);
1321
1322 return buf;
1323}

Referenced by bvh_get_seq_data().

Here is the caller graph for this function:

◆ reverse_str()

void reverse_str ( uByte * p,
int s )

void reverse_str(uByte* p, int s)

バイト列を逆順にする.

Parameters
[in,out]pバイトデータへのポインタ.
sバイトデータの長さ.

Definition at line 1952 of file tools.cpp.

1953{
1954 int i;
1955 uByte c;
1956
1957 if (s<=0) s = (int)strlen((const char*)p);
1958
1959 for (i=0; i<s/2; i++) {
1960 c = p[s-1-i];
1961 p[s-1-i] = p[i];
1962 p[i] = c;
1963 }
1964}

Referenced by double_from_big_endian(), double_from_little_endian(), float_from_big_endian(), float_from_little_endian(), int_from_big_endian(), int_from_little_endian(), short_from_big_endian(), short_from_little_endian(), swap_byte(), uint_from_big_endian(), uint_from_little_endian(), ushort_from_big_endian(), and ushort_from_little_endian().

Here is the caller graph for this function:

◆ seek_ringBuffer()

int seek_ringBuffer ( ringBuffer * rb,
int sz )

int seek_ringBuffer(ringBuffer* rb, int sz)

リングバッファ rb の読み取り開始ポインタ spoint を sz 移動させる.

Parameters
rbリングバッファへのポインタ
sz開始ポインタを移動させる量.負数(バック)も可.
Returns
TRUE : 移動に成功.
FALSE : 移動に失敗.
Bug
バッファ長を超える移動はできない.移動させた先にデータが存在しているかは保障されない.

Definition at line 3423 of file tools.cpp.

3424{
3425 if (rb==NULL) return FALSE;
3426 if (rb->buf==NULL) return FALSE;
3427 if (sz>rb->datasz) return FALSE;
3428
3429 if (rb->spoint+sz>=rb->bufsz) {
3430 rb->spoint = rb->spoint + sz - rb->bufsz;
3431 }
3432 else if (rb->spoint+sz<0) {
3433 rb->spoint = rb->bufsz + rb->spoint + sz;
3434 }
3435 else {
3436 rb->spoint = rb->spoint + sz;
3437 }
3438
3439 rb->datasz -= sz;
3440 return TRUE;
3441}

References ringBuffer::buf, ringBuffer::bufsz, ringBuffer::datasz, FALSE, ringBuffer::spoint, and TRUE.

◆ short_from_big_endian()

short short_from_big_endian ( void * ptr)

short short_from_big_endian(void* ptr)

Big Endian形式で格納されている short int型の値を取り出す.

Parameters
ptr変数が格納されているメモリへのポインタ
Returns
取り出した short int型の値

Definition at line 336 of file tools.cpp.

337{
338 short ret = *((short*)ptr);
339
341 if (HostEndian==LITTLE_ENDIAN) reverse_str((uByte*)(&ret), 2);
342 return ret;
343}

References check_endian(), HostEndian, LITTLE_ENDIAN, reverse_str(), and UNKNOWN_ENDIAN.

Here is the call graph for this function:

◆ short_from_little_endian()

short short_from_little_endian ( void * ptr)

short short_from_little_endian(void* ptr)

Little Endian形式で格納されている short int型の値を取り出す.

Parameters
ptr変数が格納されているメモリへのポインタ
Returns
取り出した short int型の値

Definition at line 228 of file tools.cpp.

229{
230 short ret = *((short*)ptr);
231
233 if (HostEndian==BIG_ENDIAN) reverse_str((uByte*)(&ret), 2);
234 return ret;
235}

References BIG_ENDIAN, check_endian(), HostEndian, reverse_str(), and UNKNOWN_ENDIAN.

Here is the call graph for this function:

◆ sjis2euc()

void sjis2euc ( unsigned char * c1,
unsigned char * c2 )

void sjis2euc(unsigned char *c1, unsigned char *c2)

漢字コード変換.SJIS → EUC

Parameters
[in,out]c1変換する文字の第一バイト.内容が書き換えられる.
[in,out]c2変換する文字の第二バイト.内容が書き換えられる.

Definition at line 2716 of file tools.cpp.

2717{
2718 if (*c2<0x9f) {
2719 if (*c1 < 0xa0) {
2720 *c1 -= 0x81;
2721 *c1 *= 2;
2722 *c1 += 0xa1;
2723 }
2724
2725 else {
2726 *c1 -= 0xe0;
2727 *c1 *= 2;
2728 *c1 += 0xdf;
2729 }
2730 if (*c2>0x7f) (*c2)--;
2731 *c2 += 0x61;
2732 }
2733 else {
2734 if (*c1<0xa0) {
2735 *c1 -= 0x81;
2736 *c1 *= 2;
2737 *c1 += 0xa2;
2738 }
2739 else {
2740 *c1 -= 0xe0;
2741 *c1 *= 2;
2742 *c1 += 0xe0;
2743 }
2744 *c2 += 2;
2745 }
2746}

Referenced by kanji_convert_sjis2euc().

Here is the caller graph for this function:

◆ skip_char()

char * skip_char ( char * pp,
char cc )

char* skip_char(char* pp, char cc)

文字列 pp の中で,次の cc までポインタをスキップさせる.
ただし," ", ' ' 内に該当文字があった場合,それらは無視される.

Parameters
pp文字列の先頭ポインタ
ccスキップする文字を格納した文字列.
Returns
check[]の中で最初に見つかった文字へのポインタ.

Definition at line 985 of file tools.cpp.

986{
987 int sqf = 0, dqf = 0;
988
989 while (*pp!='\0') {
990 while (*pp=='\\') pp += 2;
991 //
992 if (*pp!='\0') {
993 if (!sqf && *pp=='\"') dqf = 1 - dqf;
994 else if (!dqf && *pp=='\'') sqf = 1 - sqf;
995 else if (!sqf && !dqf && *pp==cc) return pp;
996 pp++;
997 }
998 }
999
1000 return pp;
1001}

◆ skip_char_pair()

char * skip_char_pair ( char * pp,
char pair,
char end )

char* skip_char_pair(char* pp, char pair, char end)

pair から始まって end で閉じるまで,ポインタをスキップさせる.ただし " " と ' ' 内は完全スキップ
pair と end は対になっている必要がある.
pp は pair の位置を指しているのが望ましい.指していなくても動くけど....
ペアの end がない場合は '\0' へのポインタを返す.

Parameters
pp操作対象の文字列
pairペアとなる最初の文字
endペアとなる最後の文字
Returns
ペアとなった最後の文字へのポインタ
pt = skip_char_pair(pp, '<', '>');
char * skip_char_pair(char *pp, char pair, char end)
pair と end で閉じるまでポインタをスキップさせる.ただし クォーテーション内は完全スキップ
Definition tools.cpp:1022

Definition at line 1022 of file tools.cpp.

1023{
1024 int cnt = 0, sqf = 0, dqf = 0;
1025
1026 if (*pp==pair) {
1027 cnt = 1;
1028 pp++;
1029 }
1030
1031 while (*pp!='\0') {
1032 while (*pp=='\\') pp += 2;
1033 //
1034 if (*pp!='\0') {
1035 if (!sqf && *pp=='\"') dqf = 1 - dqf;
1036 else if (!dqf && *pp=='\'') sqf = 1 - sqf;
1037
1038 else if (!sqf && !dqf) {
1039 if (*pp==end) cnt--;
1040 else if (*pp==pair) cnt++;
1041 if (cnt==0) return pp;
1042 }
1043 pp++;
1044 }
1045 }
1046
1047 return pp;
1048}

Referenced by json_array_parse(), and json_parse_prop().

Here is the caller graph for this function:

◆ skip_chars()

char * skip_chars ( char * pp,
const char * check )

char* skip_chars(char* pp, const char* check)

ppの指す文字列中で,check[]に格納されたいずれかの文字までポインタをスキップさせる.
ただし," ", ' ' 内に該当文字があった場合,それらは無視される.

Parameters
pp文字列の先頭ポインタ
checkスキップする文字を格納した文字列.
Returns
check[]の中で最初に見つかった文字へのポインタ.

Definition at line 948 of file tools.cpp.

949{
950 int n, sqf = 0, dqf = 0;
951
952 n = (int)strlen(check);
953
954 while (*pp!='\0') {
955 while (*pp=='\\') pp += 2;
956 //
957 if (*pp!='\0') {
958 if (!sqf && *pp=='\"') dqf = 1 - dqf;
959 else if (!dqf && *pp=='\'') sqf = 1 - sqf;
960
961 else if (!sqf && !dqf) {
962 int i;
963 for (i=0; i<n; i++) {
964 if (*pp==check[i]) return pp;
965 }
966 }
967 pp++;
968 }
969 }
970
971 return NULL;
972}

Referenced by json_array_parse(), xml_parse_comment_node(), xml_parse_data_node(), xml_parse_end_node(), xml_parse_processing_node(), and xml_parse_start_node().

Here is the caller graph for this function:

◆ skip_string_end()

char * skip_string_end ( char * pp)

char* skip_string_end(char* pp)

文字列の最後までポインタをスキップする.
ppの指す文字列 "〜" または '〜' の最後の クォーテーションへのポインタ

Parameters
pp文字列の先頭の クォーテーションへのポインタ
Returns
文字列の最後の クォーテーションへのポインタ

Definition at line 1060 of file tools.cpp.

1061{
1062 char ch = *pp;
1063
1064 if (*pp=='\"' || *pp=='\'') {
1065 pp++;
1066 //
1067 while (*pp!='\0') {
1068 while (*pp=='\\') pp += 2;
1069 //
1070 if (*pp!='\0') {
1071 if (*pp==ch) return pp;
1072 }
1073 pp++;
1074 }
1075 }
1076 return pp;
1077}

Referenced by json_parse_prop().

Here is the caller graph for this function:

◆ strncaservscmp()

int strncaservscmp ( const char * s1,
const char * s2,
int n )

int strncaservscmp(const char* s1, const char* s2, int n)

文字列 s1と s2を後ろから n文字比較する.

Return values
0一致する
1一致しない
Attention
strncmp()の戻り値の定義とは若干異なるので注意すること.

Definition at line 703 of file tools.cpp.

704{
705 int j1, j2;
706
707 if (s1==NULL || s2==NULL) return 1;
708
709 j1 = (int)strlen(s1) - 1;
710 j2 = (int)strlen(s2) - 1;
711
712 while (n>0 && j1>=0 && j2>=0) {
713 if (toupper(s1[j1--]) != toupper(s2[j2--])) return 1;
714 n--;
715 }
716
717 if (n==0) return 0;
718 else return 1;
719}

Referenced by ex_strncaservscmp().

Here is the caller graph for this function:

◆ strnrvscmp()

int strnrvscmp ( const char * s1,
const char * s2,
int n )

int strnrvscmp(const char* s1, const char* s2, int n)

文字列 s1と s2を後ろから n文字比較する.

Return values
0一致する
1一致しない
Attention
strncmp()の戻り値の定義とは若干異なるので注意すること.

Definition at line 674 of file tools.cpp.

675{
676 int j1, j2;
677
678 if (s1==NULL || s2==NULL) return 1;
679
680 j1 = (int)strlen(s1) - 1;
681 j2 = (int)strlen(s2) - 1;
682
683 while (n>0 && j1>=0 && j2>=0) {
684 if (s1[j1--] != s2[j2--]) return 1;
685 n--;
686 }
687
688 if (n==0) return 0;
689 else return 1;
690}

Referenced by ex_strnrvscmp(), and is_host_in_list().

Here is the caller graph for this function:

◆ strstrcase()

char * strstrcase ( const char * buf,
const char * nd )

char* strstrcase(const char* buf, const char* nd)

文字列 bufの中に部分文字列 ndがあるかどうかをチェックする.大文字小文字を区別しない.

大文字小文字を区別しない点を除けば,strstr() と同じ.
つまり strcasestr() と同じ.標準で strcasestr()が存在しない場合に使用.

Parameters
buf検索対象の文字列
nd検索する部分文字列
Returns
部分文字列の開始を指すポインタ.部分文字列が見つからない場合は NULL
See also
strstr(), strcasestr()

Definition at line 736 of file tools.cpp.

737{
738 char* pp;
739 char* pb;
740 char* pn;
741
742 if (buf==NULL || nd==NULL) return NULL;
743
744 pb = (char*)malloc(strlen(buf)+1);
745 if (pb==NULL) return NULL;
746 memcpy(pb, buf, (int)strlen(buf)+1);
747
748 pn = (char*)malloc(strlen(nd)+1);
749 if (pn==NULL) {
750 free(pb);
751 return NULL;
752 }
753 memcpy(pn, nd, (int)strlen(nd)+1);
754
755 upper_string(pb);
756 upper_string(pn);
757
758 pp = strstr(pb, pn);
759 if (pp!=NULL) {
760 pp = (pp - pb) + (char*)buf;
761 }
762 free(pb);
763 free(pn);
764
765 return pp;
766}
void upper_string(char *str)
Definition tools.cpp:2756

References upper_string().

Referenced by search_protocol_header_partvalue(), strstrcase_back_tList(), and strstrcase_tList().

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

◆ swap_byte()

void swap_byte ( void * p,
int s,
int c )

void swap_byte(void* p, int s, int c)

上位バイトと下位バイトを逆順にする.

pが指す長さ sのデータを cバイトづつ逆順にする.

Parameters
[in,out]pデータへのポインタ.
sデータの長さ.バイト単位.
c逆順にするデータの長さ.バイト単位.

Definition at line 1854 of file tools.cpp.

1855{
1856 int i;
1857 uByte* u = (uByte*)p;
1858 for (i=0; i<s; i+=c) reverse_str(&u[i], c);
1859}

References reverse_str().

Referenced by jbxl::RGB2Word().

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

◆ swapd()

long long int swapd ( unsigned long long int p)

long long int swapd(unsigned long long int p)

int型 64bit pを8bitづつ逆順にする

ntohl(), htonl()の代替関数.Windows用.

Parameters
p入れ替える値
Returns
処理後の値

Definition at line 1923 of file tools.cpp.

1924{
1925 long long int r;
1926 uByte* t;
1927 uByte* f;
1928
1929 t = (uByte*)&r;
1930 f = (uByte*)&p;
1931 t[0] = f[7];
1932 t[1] = f[6];
1933 t[2] = f[5];
1934 t[3] = f[4];
1935 t[4] = f[3];
1936 t[5] = f[2];
1937 t[6] = f[1];
1938 t[7] = f[0];
1939
1940 return r;
1941}

◆ swapl()

int swapl ( unsigned int p)

int swapl(unsigned int p)

int型 32bit pを8bitづつ逆順にする

ntohl(), htonl()の代替関数.Windows用.

Parameters
p入れ替える値
Returns
処理後の値

Definition at line 1896 of file tools.cpp.

1897{
1898 int r;
1899 uByte* t;
1900 uByte* f;
1901
1902 t = (uByte*)&r;
1903 f = (uByte*)&p;
1904 t[0] = f[3];
1905 t[1] = f[2];
1906 t[2] = f[1];
1907 t[3] = f[0];
1908
1909 return r;
1910}

Referenced by get_tiff_ifd(), and get_tiff_uint_field().

Here is the caller graph for this function:

◆ swaps()

short swaps ( unsigned short p)

short swaps(unsigned short p)

short型(16bit)pの上下8bitを入れ替える. ntohs(), htons()の代替関数.Windows用.

Parameters
p入れ替える値
Returns
処理後の値

Definition at line 1872 of file tools.cpp.

1873{
1874 short r;
1875 uByte* t;
1876 uByte* f;
1877
1878 t = (uByte*)&r;
1879 f = (uByte*)&p;
1880 t[0] = f[1];
1881 t[1] = f[0];
1882
1883 return r;
1884}

Referenced by get_tiff_ifd(), and get_tiff_uint_field().

Here is the caller graph for this function:

◆ temp_filename()

char * temp_filename ( const char * dir,
int flen )

char* temp_filename(const char* dir, int flen)

/dev/urandom を利用して作業用ファイルのランダムなファイル名を得る.

/dev/urandom が読めない場合は randstr() を利用する. 返されたデータは free()する必要がある.

Parameters
dir作業ファイルを作るディレクトリ
flen生成するファイル名の長さ
Returns
作業用ファイル名のフルパス.要 free

Definition at line 2397 of file tools.cpp.

2398{
2399 FILE* fp;
2400 int i, dlen=0;
2401 char nostr = '\0';
2402 char* fname;
2403 char* fnbin;
2404 char* fnb64;
2405 size_t rs;
2406 UNUSED(rs);
2407
2408 if (dir==NULL) dir = &nostr;
2409 dlen = (int)strlen(dir);
2410 if (flen<=0) flen = 15;
2411
2412 fname = (char*)malloc(dlen+flen+1);
2413 if (fname==NULL) return NULL;
2414 memset(fname, 0, dlen+flen+1);
2415
2416 fnbin = (char*)malloc(flen);
2417 if (fnbin==NULL) {
2418 free(fname);
2419 return NULL;
2420 }
2421 memset(fnbin, 0, flen);
2422
2423 fnb64 = NULL;
2424 fp = fopen("/dev/urandom", "rb");
2425
2426 do {
2427 if (fp!=NULL) {
2428 rs = fread(fnbin, flen, 1, fp);
2429 fnb64 = (char*)encode_base64((unsigned char*)fnbin, flen);
2430 if (fnb64!=NULL) fnb64[flen] = '\0';
2431 }
2432 if (fnb64==NULL) fnb64 = randstr(flen);
2433
2434 for (i=0; i<flen; i++) {
2435 if (fnb64[i]=='/') fnb64[i] = 'x';
2436 if (fnb64[i]=='+') fnb64[i] = 'X';
2437 }
2438
2439 memset (fname, 0, dlen+flen+1);
2440 strncpy(fname, dir, dlen);
2441 strncat(fname, fnb64, flen);
2442 free(fnb64);
2443 } while(file_exist(fname));
2444
2445 if (fp!=NULL) fclose(fp);
2446 free(fnbin);
2447 return fname;
2448}
char * randstr(int n)
ランダムに A-Za-z0-9 までの文字を n文字生成する.
Definition tools.cpp:1777

References encode_base64(), file_exist(), randstr(), and UNUSED.

Referenced by gz_decode_file_replace(), and save_http_xml().

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

◆ uint_from_big_endian()

unsigned int uint_from_big_endian ( void * ptr)

unsigned int uint_from_big_endian(void* ptr)

Big Endian形式で格納されている unsigned int型の値を取り出す.

Parameters
ptr変数が格納されているメモリへのポインタ
Returns
取り出した unsigned int型の値

Definition at line 318 of file tools.cpp.

319{
320 int ret = *((unsigned int*)ptr);
321
323 if (HostEndian==LITTLE_ENDIAN) reverse_str((uByte*)(&ret), 4);
324 return ret;
325}

References check_endian(), HostEndian, LITTLE_ENDIAN, reverse_str(), and UNKNOWN_ENDIAN.

Here is the call graph for this function:

◆ uint_from_little_endian()

unsigned int uint_from_little_endian ( void * ptr)

unsigned int uint_from_little_endian(void* ptr)

Little Endian形式で格納されている unsigned int型の値を取り出す.

Parameters
ptr変数が格納されているメモリへのポインタ
Returns
取り出した unsigned int型の値

Definition at line 210 of file tools.cpp.

211{
212 unsigned int ret = *((unsigned int*)ptr);
213
215 if (HostEndian==BIG_ENDIAN) reverse_str((uByte*)(&ret), 4);
216 return ret;
217}

References BIG_ENDIAN, check_endian(), HostEndian, reverse_str(), and UNKNOWN_ENDIAN.

Here is the call graph for this function:

◆ ulltostr()

char * ulltostr ( unsigned long long int n)

char* ulltostr(unsigned long long int n)

unsigned long long int型 nを文字列にして返す.

Parameters
n文字列に変換する値
Returns
変換された文字列.free() してはいけない.

Definition at line 1484 of file tools.cpp.

1485{
1486 memset(_ToSTR, 0, LDATA);
1487 snprintf(_ToSTR, LDATA-1, "%llu", n);
1488 return _ToSTR;
1489}

References _ToSTR, LDATA, and snprintf.

◆ ulltostr_ts()

char * ulltostr_ts ( unsigned long long int n)

char* ulltostr_ts(unsigned long long int n)

unsigned long long int型 nを文字列にして返す. Thread Safe

Parameters
n文字列に変換する値
Returns
変換された文字列.要 free.

Definition at line 1612 of file tools.cpp.

1613{
1614 char* str = NULL;
1615 str = (char*)malloc(LDATA);
1616 if (str==NULL) return NULL;
1617
1618 memset(str, 0, LDATA);
1619 snprintf(str, LDATA-1, "%llu", n);
1620 return str;
1621}

References LDATA, and snprintf.

Referenced by llsd_bin_main_parse().

Here is the caller graph for this function:

◆ ultostr()

char * ultostr ( unsigned long int n)

char* ultostr(unsigned long int n)

unsigned long int型 nを文字列にして返す.

Parameters
n文字列に変換する値
Returns
変換された文字列.free() してはいけない.

Definition at line 1452 of file tools.cpp.

1453{
1454 memset(_ToSTR, 0, LDATA);
1455 snprintf(_ToSTR, LDATA-1, "%lu", n);
1456 return _ToSTR;
1457}

References _ToSTR, LDATA, and snprintf.

◆ ultostr_ts()

char * ultostr_ts ( unsigned long int n)

char* ultostr_ts(unsigned long int n)

unsigned long int型 nを文字列にして返す.Thread Safe

Parameters
n文字列に変換する値
Returns
変換された文字列.要 free.

Definition at line 1572 of file tools.cpp.

1573{
1574 char* str = NULL;
1575 str = (char*)malloc(LDATA);
1576 if (str==NULL) return NULL;
1577
1578 memset(str, 0, LDATA);
1579 snprintf(str, LDATA-1, "%lu", n);
1580 return str;
1581}

References LDATA, and snprintf.

◆ upper_string()

void upper_string ( char * str)

void upper_string(char* str)

str中の小文字を大文字に変換する

Parameters
[in,out]str変換する文字列へのポインタ.内容が書き換えられる.

Definition at line 2756 of file tools.cpp.

2757{
2758 int i;
2759 for (i=0; i<(int)strlen((const char*)str); i++) {
2760 if (str[i]>='a' && str[i]<='z') str[i] += 'A' - 'a';
2761 }
2762}

Referenced by strstrcase().

Here is the caller graph for this function:

◆ ushort_from_big_endian()

unsigned short ushort_from_big_endian ( void * ptr)

unsigned short ushort_from_big_endian(void* ptr)

Big Endian形式で格納されている unsigned short int型の値を取り出す.

Parameters
ptr変数が格納されているメモリへのポインタ
Returns
取り出した unsigned short int型の値

Definition at line 354 of file tools.cpp.

355{
356 unsigned short ret = *((unsigned short*)ptr);
357
359 if (HostEndian==LITTLE_ENDIAN) reverse_str((uByte*)(&ret), 2);
360 return ret;
361}

References check_endian(), HostEndian, LITTLE_ENDIAN, reverse_str(), and UNKNOWN_ENDIAN.

Here is the call graph for this function:

◆ ushort_from_little_endian()

unsigned short ushort_from_little_endian ( void * ptr)

unsigned short ushort_from_little_endian(void* ptr)

Little Endian形式で格納されている unsigned short int型の値を取り出す.

Parameters
ptr変数が格納されているメモリへのポインタ
Returns
取り出した unsigned short int型の値

Definition at line 246 of file tools.cpp.

247{
248 unsigned short ret = *((unsigned short*)ptr);
249
251 if (HostEndian==BIG_ENDIAN) reverse_str((uByte*)(&ret), 2);
252 return ret;
253}

References BIG_ENDIAN, check_endian(), HostEndian, reverse_str(), and UNKNOWN_ENDIAN.

Here is the call graph for this function:

◆ uuid2guid()

unsigned char * uuid2guid ( unsigned char * p)

unsigned char* uuid2guid(unsigned char* p)

バイナリの UUID を テキストのGUIDに変換する.要 free()

Parameters
pバイナリの UUID. 128bit
Returns
テキストの GUID. 要 free

Definition at line 3628 of file tools.cpp.

3629{
3630 unsigned char* guid;
3631
3632 if (p==NULL) return NULL;
3633
3634 guid = (unsigned char*)malloc(LGUID); // 40 = 32+4+1(\0) + α
3635 if (guid==NULL) return NULL;
3636 memset(guid, 0, LGUID);
3637
3638 snprintf((char*)guid, 37, "%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x",
3639 p[0],p[1],p[2],p[3],p[4],p[5],p[6],p[7],p[8],p[9],p[10],p[11],p[12],p[13],p[14],p[15]);
3640
3641 return guid;
3642}
#define LGUID
16*2 + 4(-) + 1('\0') = 37 以上の 4の倍数
Definition common.h:159

References LGUID, and snprintf.

Referenced by llsd_bin_main_parse().

Here is the caller graph for this function:

◆ write_file()

long unsigned int write_file ( const char * fname,
unsigned char * buf,
long unsigned int size )

unsigned long int write_file(const char* fname, unsigned char* buf, long unsigned int size)

ファイルにデータを書き込む

Parameters
fnameファイル名.
buf書き込むデータへのポインタ.
size書き込むデータのサイズ.
Returns
実際に書き込んだデータサイズ

Definition at line 2497 of file tools.cpp.

2498{
2499 if (size==0) return 0;
2500
2501 FILE* fp = fopen(fname, "wb");
2502 if (fp==NULL) return 0;
2503
2504 size = (long unsigned int)fwrite(buf, size, 1, fp);
2505 fclose(fp);
2506
2507 return size;
2508}

Referenced by extract_tTar().

Here is the caller graph for this function:

Variable Documentation

◆ _GraphicFileExtension

char _GraphicFileExtension[L_OCT]
static

Definition at line 4248 of file tools.cpp.

Referenced by get_graphic_extension().

◆ _ToSTR

char _ToSTR[LDATA]
static

Definition at line 1410 of file tools.cpp.

Referenced by dtostr(), ftostr(), itostr(), lltostr(), ltostr(), ulltostr(), and ultostr().

◆ DebugMode

int DebugMode = OFF

Definition at line 17 of file tools.cpp.

◆ FP_ErrFile

FILE* FP_ErrFile = NULL

Definition at line 3893 of file tools.cpp.

Referenced by close_errfile(), open_errfile(), and print_errfile().

◆ FP_LogFile

FILE* FP_LogFile = NULL

Definition at line 3892 of file tools.cpp.

Referenced by close_logfile(), open_errfile(), open_logfile(), and print_logfile().

◆ HostEndian

◆ KanjiCode

int KanjiCode = CODE_UTF8

処理用漢字コード.CODE_US, CODE_SJIS, CODE_EDUがある.デフォルトは CODE_US.

Definition at line 20 of file tools.cpp.

Referenced by kanji_convert(), and kanji_convert_Buffer().

◆ LocalIPNum

unsigned char LocalIPNum[4] = {0x7f, 0x00, 0x00, 0x01}

Definition at line 26 of file tools.cpp.

26{0x7f, 0x00, 0x00, 0x01};

◆ LocalIPNum6

unsigned char LocalIPNum6[16] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01}

Definition at line 27 of file tools.cpp.

27{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01};

◆ UnitTestMode

int UnitTestMode = OFF

Definition at line 18 of file tools.cpp.

◆ UsedMemoryBase

unsigned long int UsedMemoryBase = 0

Definition at line 23 of file tools.cpp.