JunkBox_Lib  1.10.2
tools.h
Go to the documentation of this file.
1 #ifndef __JBXL_TOOLS_HEADER_
2 #define __JBXL_TOOLS_HEADER_
3 
11 #include "common.h"
12 #include <sys/types.h>
13 #include <sys/stat.h>
14 #include <stdarg.h>
15 #include <ctype.h>
16 
17 
18 #ifdef WIN32
19  #include <winsock2.h> // for ntohl, ntohs, htonl, htons
20  #ifndef HAVE_TIME_H
21  #define HAVE_TIME_H
22  #endif
23 #else
24  #include <unistd.h>
25  #include <sys/sysinfo.h>
26 #endif
27 
28 
29 #ifdef HAVE_ARPA_INET_H
30  #include <arpa/inet.h>
31 #endif
32 
33 #ifdef TIME_WITH_SYS_TIME
34  #include <time.h>
35  #include <sys/time.h>
36 #else
37  #ifdef HAVE_TIME_H
38  #include <time.h>
39  #endif
40  #ifdef HAVE_SYS_TIME_H
41  #include <sys/time.h>
42  #endif
43 #endif
44 
45 #ifdef HAVE_SYS_PARAM_H
46  #include <sys/param.h>
47 #endif
48 
49 #ifdef HAVE_SYSLOG_H
50  #include <syslog.h>
51 #endif
52 
53 #ifdef HAVE_WAIT_H
54  #include <wait.h>
55 #endif
56 #ifdef HAVE_SYS_WAIT_H
57  #include <sys/wait.h>
58 #endif
59 
60 #ifdef HAVE_SYS_ERRNO_H
61  #include <sys/errno.h>
62 #else
63  #include <errno.h>
64 #endif
65 #include <signal.h>
66 
67 
68 #ifndef HUGE_VALF
69 #ifdef HUGE_VAL
70 #define HUGE_VALF ((double)HUGE_VAL)
71 #endif
72 #endif
73 
74 
75 /*
76 マクロ
77 */
78 #define CHAR_CR 0x0d
79 #define CHAR_LF 0x0a
80 #define CHAR_TAB 0x09
81 
82 #define CODE_US 0
83 #define CODE_EN 0
84 #define CODE_EUC 1 //
85 #define CODE_SJIS 2 //
86 #define CODE_UTF8 3 //
87 
88 #define UNKNOWN_ENDIAN 0
89 
90 #ifndef LITTLE_ENDIAN
91  #define LITTLE_ENDIAN 1234
92  #define BIG_ENDIAN 4321
93  #define PDP_ENDIAN 3412
94 #endif
95 
96 #ifdef WIN32
97  #define CHAR_DELI_DIR '\\'
98  #define STR_DELI_DIR "\\"
99  #define STR_CRNT_DIR ".\\"
100  #define STR_UPST_DIR "..\\"
101 #else
102  #define CHAR_DELI_DIR '/'
103  #define STR_DELI_DIR "/"
104  #define STR_CRNT_DIR "./"
105  #define STR_UPST_DIR "../"
106 #endif
107 
108 
109 typedef union _union_val {
110  long long int llint;
111  long unsigned long int ullint;
112  long int lint;
113  long unsigned int ulint;
114  int nint;
115  unsigned int uint;
116  short int sint;
117  unsigned short int usint;
118  char nchar;
119  unsigned char uchar;
120  double dreal;
121  float real;
128 } unionVal;
129 
130 
131 typedef union _union_ptr {
132  long long int* llintp;
133  long unsigned long int* ullintp;
134  long int* lintp;
135  long unsigned int* ulintp;
136  int* nintp;
137  unsigned int* uintp;
138  short int* sintp;
139  unsigned short int* usintp;
140  char* ncharp;
141  unsigned char* ucharp;
142  double* drealp;
143  float* realp;
150 } unionPtr;
151 
152 
153 
154 // バイト型 リングバッファ
155 typedef struct _ringBuffer {
156  unsigned char* buf;
157  int bufsz;
158  int spoint;
159  int epoint;
160  int datasz;
161  int npoint;
162  int datano;
163  int state;
164 } ringBuffer;
165 
166 
167 #define mstream ringBuffer
168 
169 
170 // 矩形
171 typedef struct _rectangle {
172  int x;
173  int y;
174  int xsize;
175  int ysize;
176 } rectAngle;
177 
178 
179 //
180 // 大域変数
181 //
182 extern int DebugMode;
183 extern int UnitTestMode;
184 
185 extern int KanjiCode;
186 extern int HostEndian;
187 
188 extern unsigned char LocalIPNum[4];
189 extern unsigned char LocalIPNum6[16];
190 
191 #define LOCAL_IPv4 "127.0.0.1"
192 #define LOCAL_IPv6 "::1"
193 #define LOCAL_IPADDR LOCAL_IPv4
194 #define LOCAL_IPADDR6 LOCAL_IPv6
195 
196 extern long unsigned int UsedMemoryBase;
197 
198 // not C++
199 #ifndef CPLUSPLUS
200  int isNull(void* p);
201  #define freeNull(p) {if(!isNull((void*)p)) free(p); (p)=NULL;}
202  #define freenull(p) {if(!isNull((void*)p)) free(p); (p)=NULL;}
203 #endif
204 
205 #define free_null(p) freeNull((p))
206 
207 #define _tochar(a) (char*)(a)
208 
209 
210 
212 
213 // 文字(列)操作
214 char* get_line(char* buf, int n);
215 char* get_seq_data(char* buf, int* ptr);
216 char* awk (char* str, char cc, int n);
217 char* cawk(char* str, char cc, int n);
218 
219 void replace_char(unsigned char* buf, int len, unsigned char frm, unsigned char toc);
220 char* replace_str(char* buf, int len, const char* frm, const char* tos);
221 char* cut_str(char* buf, int ls, int le);
222 char* dup_str(char* buf);
223 #define dup_string(s) dup_str((s))
224 
225 char* skip_chars(char* pp, const char* check);
226 char* skip_char(char* pp, char cc);
227 char* skip_char_pair(char* pp, char pair, char end);
228 char* skip_string_end(char* pp);
229 
230 char* pack_char_len(char* pp, char cc, int len);
231 char* pack_head_tail_char(char* pp, char cc);
232 char* change_esc(char* pp);
233 char* chomp(char* str);
234 char* double_bs(char* fn);
235 char* numbering_name(const char* fmt, int n);
236 #define pack_char(s, c) pack_char_len((s), (c), -1)
237 
238 int is_number(unsigned char*);
239 
240 // thread unsafe
241 char* itostr(int n);
242 char* ltostr(long int n);
243 char* ultostr(long unsigned int n);
244 char* lltostr(long long int n);
245 char* ulltostr(long unsigned long int n);
246 char* ftostr(float n);
247 char* dtostr(double n);
248 
249 // thread safe
250 char* itostr_ts(int n);
251 char* ltostr_ts(long int n);
252 char* ultostr_ts(long unsigned int n);
253 char* lltostr_ts(long long int n);
254 char* ulltostr_ts(long unsigned long int n);
255 char* ftostr_ts(float n);
256 char* dtostr_ts(double n);
257 
258 int count_lines(const char* buf);
259 int hexstr2i(const char* str);
260 
261 long unsigned long int ntohull(long unsigned long int s);
262 #define htonull(s) ntohull((s))
263 
264 void swap_byte(void* p, int s, int b);
265 short swaps(unsigned short p);
266 int swapl(unsigned int p);
267 long long int swapd(long unsigned long int p);
268 void reverse_str(uByte* p, int s);
269 void upper_string(char* str);
270 #define int_swap(p, s) {int swap=(p); (p)=(s); (s)=swap;}
271 
272 // 比較
273 int bincmp(unsigned char* b1, unsigned char* b2, int n);
274 int strnrvscmp(const char* s1, const char* s2, int n);
275 int strncaservscmp(const char* s1, const char* s2, int n);
276 char* strstrcase(const char* buf, const char* nd);
277 
278 // 拡張 len => 1 以上 一致させる長さ. 0 完全一致. -1 dat の長さに合わせる. -2 key の長さに合わせる
279 int ex_strncmp(const char* s1, const char* s2, int n);
280 int ex_strncasecmp(const char* s1, const char* s2, int n);
281 int ex_strnrvscmp(const char* s1, const char* s2, int n);
282 int ex_strncaservscmp(const char* s1, const char* s2, int n);
283 #define ex_strcmp(a, b) ex_strncasecmp((a), (b), -1)
284 
285 // エンディアン (マクロ isBigEndianは ntohs() を使用したもの)
286 int is_little_endian(void);
287 int is_big_endian(void);
288 void check_endian(void);
289 
290 double double_from_little_endian(void* ptr);
291 float float_from_little_endian(void* ptr);
292 int int_from_little_endian(void* ptr);
293 unsigned int uint_from_little_endian(void* ptr);
294 short short_from_little_endian(void* ptr);
295 unsigned short ushort_from_little_endian(void* ptr);
296 double double_from_big_endian(void* ptr);
297 float float_from_big_endian(void* ptr);
298 int int_from_big_endian(void* ptr);
299 unsigned int uint_from_big_endian(void* ptr);
300 short short_from_big_endian(void* ptr);
301 unsigned short ushort_from_big_endian(void* ptr);
302 
303 // 時間
304 //char* get_localtime(char c1, char c2, char c3, char c4); ///< 現時刻の文字列を返す.free() してはいけない.
305 //char* get_localtime_ts(char c1, char c2, char c3, char c4); ///< 現時刻の文字列を返す.必ず free() すること!.
306 char* get_local_timestamp(time_t date, const char* format);
307 char* get_gmt_timestamp(time_t date, const char* format);
308 
309 // 入出力
310 void print_escape(const char* format, char* mesg);
311 void fdump(FILE* fp, unsigned char* mesg, int n);
312 void print_16x(FILE* fp, unsigned char* mesg, int n);
313 #define print_hex(o, m, n) fdump((o), (m), (n))
314 
315 // グラフィック
316 char* get_graphic_extension(uWord tex);
317 
318 // 漢字コード
319 void kanji_convert(unsigned char* mesg);
320 void kanji_convert_euc2sjis(unsigned char* mesg);
321 void kanji_convert_sjis2euc(unsigned char* mesg);
322 void euc2sjis(unsigned char *c1, unsigned char *c2);
323 void sjis2euc(unsigned char *c1, unsigned char *c2);
324 
325 // ファイル
326 int file_from_to(const char* s, const char* d, const char* mode);
327 int fp_from_to(FILE* s, FILE* d, long int sz);
328 char* get_file_name(const char* str);
329 char* get_file_extension(const char* str);
330 char* del_file_name(const char* str);
331 char* del_file_extension(const char* str);
332 
333 //char* make_file_path(const char* str); ///< 使用停止,get_file_path を使え./// フルパスからパスを生成する.strは変化しない.要 free().
334 char* get_file_path(const char* str);
335 char* cut_file_extension(const char* str);
336 
337 long unsigned file_size(const char* fn);
338 int file_exist(const char* fn);
339 FILE* file_chmod_open(const char* fn, const char* fm, mode_t mode);
340 char* temp_filename(const char*, int);
341 
342 unsigned char* read_file (const char* fname, long unsigned int* size);
343 long unsigned int write_file(const char* fname, unsigned char* buf, long unsigned int size);
344 
345 int mkdirp(const char* path, mode_t mode);
346 
347 // 乱数
348 void init_rand(void);
349 char* randstr(int n);
350 unsigned char* randbit(int n);
351 #define random_str(n) temp_filename(NULL, (n))
352 
353 // Base64
354 unsigned char* encode_base64(unsigned char* str, int sz);
355 unsigned char* decode_base64(unsigned char* str, int* sz);
356 unsigned char* encode_base64_filename(unsigned char* str, int sz, unsigned char cc);
357 unsigned char* decode_base64_filename(unsigned char* str, int* sz, unsigned char cc);
358 unsigned char* encode_urlenc(unsigned char* str, int sz);
359 unsigned char* decode_urlenc(unsigned char* str, int* sz);
360 unsigned char* encode_quoted_printable(unsigned char* str, int sz);
361 unsigned char* decode_quoted_printable(unsigned char* str, int* sz);
362 unsigned char* encode_hex(unsigned char cc);
363 unsigned char decode_hex(unsigned char c1, unsigned char c2);
364 
365 // バイト型リングバッファー
366 ringBuffer* new_ringBuffer(int sz);
368 ringBuffer make_ringBuffer(int sz);
369 void del_ringBuffer (ringBuffer** pp);
370 void free_ringBuffer (ringBuffer* pp);
371 void clear_ringBuffer(ringBuffer* pp);
372 int put_ringBuffer(ringBuffer* rb, unsigned char* pp, int sz);
373 unsigned char* get_ringBuffer(ringBuffer* rb, int sz);
374 int seek_ringBuffer(ringBuffer* rb, int sz);
375 unsigned char* ref_ringBuffer(ringBuffer* ring, int pos);
376 
377 
378 // メッセージストリーム
379 int put_mstream(mstream* sb, unsigned char* pp);
380 unsigned char* get_mstream(mstream* sb);
381 unsigned char* fgets_mstream(unsigned char* mesg, mstream* sb);
382 
383 #define init_mstream() init_ringBuffer()
384 #define new_mstream(s) new_ringBuffer((s))
385 #define make_mstream(s) make_ringBuffer((s))
386 #define free_mstream(s) free_ringBuffer((s))
387 #define del_mstream(s) del_ringBuffer((s))
388 #define clear_mstream(s) clear_ringBuffer((s))
389 
390 // UUID
391 unsigned char* uuid2guid(unsigned char* p);
392 unsigned char* guid2uuid(unsigned char* p);
393 
394 
395 #ifndef WIN32
396 // プロセス
397 long unsigned int get_used_memory(void);
398 long unsigned int get_free_memory(void);
399 
400 void memory_check_start(void);
401 long unsigned int memory_check(void);
402 
403 void set_sigterm_child(void (*handler)(int));
404 void sigterm_child(int signal);
405 
406 void ignore_sigterm_child(void);
407 
408 void set_sigsegv_handler(void (*handler)(int));
409 void trap_segmentation_falt(int signal);
410 
411 #define set_sigseg_handler(h) set_sigsegv_handler((h))
412 
413 #endif
414 
415 
417 // マクロ関数
418 
419 #define copy_file(src, dst) file_from_to((src), (dst), "wb")
420 #define cat_file(src, dst) file_from_to((src), (dst), "ab")
421 
422 #define isBigEndian (is_big_endian())
423 #define isLittleEndian (is_little_endian())
424 
425 #define ntoh_st(p, s) {if(!isBigEndian) swap_byte((void*)(p),sizeof(*(p)),(s));}
426 #define hton_st(p, s) {if(!isBigEndian) swap_byte((void*)(p),sizeof(*(p)),(s));}
427 #define ntoh_ar(p, s) {if(!isBigEndian) swap_byte((void*)(p),(s),sizeof(*(p)));}
428 #define hton_ar(p, s) {if(!isBigEndian) swap_byte((void*)(p),(s),sizeof(*(p)));}
429 
430 #define ntoh_data(p, s, c) {if(!isBigEndian) swap_byte((void*)(p),(s),(c));}
431 #define hton_data(p, s, c) {if(!isBigEndian) swap_byte((void*)(p),(s),(c));}
432 
433 
434 
435 
437 // ログファイル
438 
439 #ifdef WIN32
440  #define JBXL_LOG_FILE "\\jbxl.log"
441  #define JBXL_ERR_FILE "\\jbxl.err"
442 #else
443  #define JBXL_LOG_FILE "/var/log/jbxl.log"
444  #define JBXL_ERR_FILE "/var/log/jbxl.err"
445 #endif
446 
447 
448 extern FILE* FP_LogFile;
449 extern FILE* FP_ErrFile;
450 
451 void open_logfile (void);
452 void close_logfile(void);
453 void print_logfile(const char*, ...);
454 
455 void open_errfile (void);
456 void close_errfile(void);
457 void print_errfile(const char*, ...);
458 
459 
461 // メッセージ関数
462 
463 void print_message(const char*, ...);
464 void fprint_message(FILE*, const char*, ...);
465 
466 
467 // 環境依存用の出力関数
468 #ifdef WIN32
469  #define PRINT_MESG(...) {}
470  #define PRINT_ESC(...) {}
471  #define PRINT_INFO(...) {}
472  #define PRINT_WARN(...) {}
473  #define PRINT_ERROR(...) {}
474 #else
475  #define PRINT_MESG print_message
476  #define PRINT_ESC print_escape
477  #define PRINT_INFO print_message
478  #define PRINT_WARN print_message
479  #define PRINT_ERROR print_message
480 #endif
481 
482 
483 
485 // for Debug
486 //
487 
488 #ifdef _DEBUG
489  #ifndef EBUG
490  #define EBUG
491  #endif
492 #endif
493 
494 #ifdef EBUG
495  #ifndef _DEBUG
496  #define _DEBUG
497  #endif
498 #endif
499 
500 
501 //
502 #define DEBUG_MODE if(DebugMode==ON)
503 #define NO_DEBUG_MODE if(DebugMode==OFF)
504 
505 
507 // コンパイル時設定デバッグ用
508 // 不要になった場合(EBUGを指定しない場合),コードは削除される
509 
510 #ifdef EBUG // -DEBUG
511  #define DEBUG_INFO PRINT_INFO
512  #define DEBUG_WARN PRINT_WARN
513  #define DEBUG_ERROR PRINT_ERROR
514  #define DEBUG_MESG PRINT_MESG
515 #else
516  #define DEBUG_INFO(...) {}
517  #define DEBUG_WARN(...) {}
518  #define DEBUG_ERROR(...) {}
519  #define DEBUG_MESG(...) {}
520 #endif
521 
522 
523 #endif // __JBXL_TOOLS_HEADER_
524 
汎用共通ヘッダ
int sDWord
4Byte
Definition: common.h:337
char sByte
1Byte
Definition: common.h:333
unsigned short uWord
2Byte
Definition: common.h:334
unsigned int uDWord
4Byte
Definition: common.h:336
short sWord
2Byte
Definition: common.h:335
unsigned char uByte
1Byte
Definition: common.h:332
unsigned char ** buf
Definition: jpeg_tool.h:96
unsigned char unsigned long * len
Definition: jpeg_tool.h:96
int y
Y 座標
Definition: tools.h:173
int x
X 座標
Definition: tools.h:172
int ysize
高さ
Definition: tools.h:175
int xsize
Definition: tools.h:174
int bufsz
バッファ部のサイズ
Definition: tools.h:157
int datasz
保存されているデータの全体の長さ
Definition: tools.h:160
int datano
格納されているデータの数(メッセージデータ用)
Definition: tools.h:162
int state
リングバッファの状態
Definition: tools.h:163
int npoint
次のメッセージのスタートポイント(メッセージデータ用)
Definition: tools.h:161
unsigned char * buf
バッファ
Definition: tools.h:156
int spoint
バッファデータの開始点
Definition: tools.h:158
int epoint
バッファデータの終点+1 (データの追加点)
Definition: tools.h:159
char * del_file_name(const char *str)
フルパスを書き換えてファイル名部分を削除する.free() してはいけない.
Definition: tools.c:2094
char * ulltostr_ts(long unsigned long int n)
long unsigned long int を文字に変換する.要 free()
unsigned int uint_from_little_endian(void *ptr)
Definition: tools.c:210
int file_from_to(const char *s, const char *d, const char *mode)
modeに従って,ファイル sを dにコピーする.
Definition: tools.c:1985
double double_from_big_endian(void *ptr)
Definition: tools.c:264
unsigned char * encode_base64_filename(unsigned char *str, int sz, unsigned char cc)
バイナリデータ bufを Base64で encodeしてファイル名を作る.ただし '/' は cc として扱う.要 free()
Definition: tools.c:2908
int file_exist(const char *fn)
ファイルの存在を検査する.
Definition: tools.c:2337
void print_errfile(const char *,...)
デフォルトのエラーファイルにデータを書き込む
Definition: tools.c:4007
unsigned char * read_file(const char *fname, long unsigned int *size)
ファイルからデータを読み込む
Definition: tools.c:2460
void trap_segmentation_falt(int signal)
セグメンテーションエラー時にデフォルトで呼び出される関数.
Definition: tools.c:3850
void sjis2euc(unsigned char *c1, unsigned char *c2)
SJIS -> EUC.
Definition: tools.c:2717
unsigned short ushort_from_little_endian(void *ptr)
Definition: tools.c:246
#define mstream
バイト型 メッセージストリーム
Definition: tools.h:167
int strnrvscmp(const char *s1, const char *s2, int n)
文字列 s1と s2を後ろから n文字比較する.一致するなら 0
Definition: tools.c:674
void print_message(const char *,...)
バッファリングなしのメッセージ出力(stderr)
Definition: tools.c:4055
char * randstr(int n)
ランダムに A-Za-z0-9 までの文字を n文字生成する.
Definition: tools.c:1777
char * get_seq_data(char *buf, int *ptr)
文字型データbufのバッファ内の 行データをシーケンシャルに取り出す.
Definition: tools.c:529
char * get_local_timestamp(time_t date, const char *format)
要 free()
Definition: tools.c:440
unsigned char * guid2uuid(unsigned char *p)
guid を uuid に変換する.要 free()
Definition: tools.c:3655
long unsigned int UsedMemoryBase
メモリチェック用
Definition: tools.c:23
char * chomp(char *str)
最初の改行コード以降を無効にする.
Definition: tools.c:921
char * pack_head_tail_char(char *pp, char cc)
文字の先頭のcc(複数),TAB, CR, LF.終わりのcc(複数),TAB, CR, LF を削除.要 free()
Definition: tools.c:1092
char * ultostr(long unsigned int n)
long unsigned int を文字に変換する.free() は不要
unsigned char decode_hex(unsigned char c1, unsigned char c2)
16進コードをキャラクタに変換する.O-9,A-F以外が指定された場合は0とみなす. 内容を書き換える.
Definition: tools.c:3172
char * change_esc(char *pp)
文字列中の CR, LF を \r, \n に変換する.要 free()
Definition: tools.c:1210
char * skip_string_end(char *pp)
次の文字列を一つスキップする.最期のクォーテーションの位置を返す.
Definition: tools.c:1060
int ex_strnrvscmp(const char *s1, const char *s2, int n)
文字列 s1とs2を後ろから拡張比較する.一致するなら TRUE
Definition: tools.c:856
int ex_strncaservscmp(const char *s1, const char *s2, int n)
文字列 s1とs2を後ろから拡張比較する.一致するなら TRUE
Definition: tools.c:892
void free_ringBuffer(ringBuffer *pp)
リングバッファを解放する.make_ringBuffer() と対.
Definition: tools.c:3296
void close_errfile(void)
デフォルトのエラーファイルをクローズする
Definition: tools.c:3991
unsigned char * decode_base64_filename(unsigned char *str, int *sz, unsigned char cc)
bufを Base64で decodeしてバイナリデータを取り出す.ただし cc は '/' として扱う.要 free()
Definition: tools.c:2888
short short_from_big_endian(void *ptr)
Definition: tools.c:336
void open_logfile(void)
デフォルトのログファイルをオープンする
Definition: tools.c:3902
void open_errfile(void)
デフォルトのエラーファイルをオープンする
Definition: tools.c:3977
void sigterm_child(int signal)
child プロセス終了時の処理
Definition: tools.c:3787
char * awk(char *str, char cc, int n)
ccを区切り記号として, strのバッファ内の n番目の項目を返す.要 free()
Definition: tools.c:567
void fprint_message(FILE *, const char *,...)
バッファリングなしのメッセージ出力
Definition: tools.c:4089
int ex_strncmp(const char *s1, const char *s2, int n)
文字列 s1とs2を拡張比較する.一致するなら TRUE
Definition: tools.c:784
char * dtostr(double n)
double を文字に変換する.free() は不要
Definition: tools.c:1516
char * get_file_name(const char *str)
フルパスからファイル名へのポインタを取り出す.free() してはいけない.
Definition: tools.c:2066
int put_mstream(mstream *sb, unsigned char *pp)
メッセージ(文字列)ストリーム sb へメッセージ(の一部)を格納する
Definition: tools.c:3491
long unsigned int get_used_memory(void)
使用中のメモリサイズを得る.
Definition: tools.c:3703
unsigned char LocalIPNum6[16]
::1 のバイナリ
Definition: tools.c:27
char * cut_str(char *buf, int ls, int le)
buf[ls]〜buf[le] を切り出す.要 free()
Definition: tools.c:1338
long unsigned long int ntohull(long unsigned long int s)
Network形式からHost形式へ,64bit long unsigned long int データの変換
int bincmp(unsigned char *b1, unsigned char *b2, int n)
バイナリデータを n Byte比べる.一致するなら 0
Definition: tools.c:650
char * strstrcase(const char *buf, const char *nd)
文字列 bufの中に文字列 ndがあるかどうかをチェックする.大文字小文字は区別しない.
Definition: tools.c:736
void kanji_convert_sjis2euc(unsigned char *mesg)
SJISをEUCに変換する.
Definition: tools.c:2665
long unsigned int get_free_memory(void)
未使用のメモリサイズを得る.
Definition: tools.c:3719
char * itostr(int n)
int を文字に変換する.free() は不要
Definition: tools.c:1420
void ignore_sigterm_child(void)
以後 child プロセスの終了を無視する.
Definition: tools.c:3808
long unsigned int write_file(const char *fname, unsigned char *buf, long unsigned int size)
ファイルにデータを書き込む
Definition: tools.c:2497
ringBuffer init_ringBuffer(void)
リングバッファを初期化する.
Definition: tools.c:3251
char * ftostr(float n)
float を文字に変換する.free() は不要
Definition: tools.c:1500
char * ultostr_ts(long unsigned int n)
long unsigned int を文字に変換する.要 free()
unsigned char * encode_base64(unsigned char *str, int sz)
バイナリデータ bufを base64にエンコードする.要 free()
Definition: tools.c:2849
char * del_file_extension(const char *str)
フルパスを書き換えて拡張子を削除する.free() してはいけない.
Definition: tools.c:2256
char * ltostr(long int n)
long int を文字に変換する.free() は不要
Definition: tools.c:1436
int seek_ringBuffer(ringBuffer *rb, int sz)
リングバッファのデータポインタを seek する.
Definition: tools.c:3424
int UnitTestMode
ユニット単体でのテストを行う場合に使用する.デフォルトは OFF.
Definition: tools.c:18
char * lltostr(long long int n)
long long int を文字に変換する.free() は不要
Definition: tools.c:1468
float float_from_big_endian(void *ptr)
Definition: tools.c:282
void close_logfile(void)
デフォルトのログファイルをクローズする
Definition: tools.c:3916
int fp_from_to(FILE *s, FILE *d, long int sz)
ファイル sを dにコピーする.
Definition: tools.c:2035
void swap_byte(void *p, int s, int b)
sの長さのpのバイト順序をbバイト毎に逆順にする.
Definition: tools.c:1854
int int_from_little_endian(void *ptr)
Definition: tools.c:192
char * double_bs(char *fn)
文字列中の \ を \\に置き換えた文字列を返す.要 free()
Definition: tools.c:2565
int put_ringBuffer(ringBuffer *rb, unsigned char *pp, int sz)
リングバッファにデータを格納する.
Definition: tools.c:3342
void init_rand(void)
/dev/urandom からデータで乱数の系列を初期化する
Definition: tools.c:1747
char * cawk(char *str, char cc, int n)
連続するccを区切り記号として, strのバッファ内の n番目の項目を返す.要 free()
Definition: tools.c:609
unsigned char * get_mstream(mstream *sb)
メッセージ(文字列)ストリーム sb から次のメッセージを取り出す.改行コードは削除される.
Definition: tools.c:3532
ringBuffer make_ringBuffer(int sz)
バッファ部が存在するリングバッファを作り出す.
Definition: tools.c:3271
char * get_file_extension(const char *str)
フルパスからファイル名の拡張子へのポインタを取り出す.free() してはいけない.
Definition: tools.c:2225
void reverse_str(uByte *p, int s)
バイト(octet)列を逆順にする.
Definition: tools.c:1952
char * skip_char(char *pp, char cc)
cc の文字までポインタをスキップさせる.ただし クォーテーション内は完全スキップ
Definition: tools.c:985
char * dup_str(char *buf)
文字列を複製する.要 free()
Definition: tools.c:1368
char * temp_filename(const char *, int)
/dev/urandom を利用して作業用ファイルのランダムなファイル名を得る.
Definition: tools.c:2397
void set_sigsegv_handler(void(*handler)(int))
セグメンテーションエラー時のハンドラを設定
Definition: tools.c:3829
unsigned char * encode_urlenc(unsigned char *str, int sz)
バイナリデータ bufを URLエンコードする.要 free()
Definition: tools.c:2980
char * ftostr_ts(float n)
float を文字に変換する.要 free()
Definition: tools.c:1632
void print_16x(FILE *fp, unsigned char *mesg, int n)
16進ダンプを吐き出す(1行)
Definition: tools.c:4228
long unsigned int memory_check(void)
Definition: tools.c:3735
char * pack_char_len(char *pp, char cc, int len)
文字列の一部の先頭のcc(複数),終わりのcc(複数),CR, LF を削除.要 free()
Definition: tools.c:1154
char * cut_file_extension(const char *str)
拡張子を削除したフパス名を生成する.strは変化しない.要 free().
Definition: tools.c:2282
void del_ringBuffer(ringBuffer **pp)
リングバッファそのものを削除する.new_ringBuffer() と対.
Definition: tools.c:3233
void fdump(FILE *fp, unsigned char *mesg, int n)
16進ダンプを吐き出す
Definition: tools.c:4177
int int_from_big_endian(void *ptr)
Definition: tools.c:300
unsigned char * uuid2guid(unsigned char *p)
uuid を guid に変換する.要 free()
Definition: tools.c:3629
unsigned char * encode_quoted_printable(unsigned char *str, int sz)
バイナリデータ bufを quoted printable にエンコードする.要 free()
Definition: tools.c:3075
void memory_check_start(void)
Definition: tools.c:3729
long long int swapd(long unsigned long int p)
64bit pを8bitづつ逆順にする
int KanjiCode
処理用漢字コード.CODE_US, CODE_SJIS, CODE_EDUがある.デフォルトは CODE_US.
Definition: tools.c:20
void kanji_convert(unsigned char *mesg)
大域変数 KnjiCodeに従って漢字コードを変換する.
Definition: tools.c:2630
int HostEndian
ホストの Endian
Definition: tools.c:21
void upper_string(char *str)
Definition: tools.c:2757
char * get_gmt_timestamp(time_t date, const char *format)
要 free()
Definition: tools.c:454
unsigned char * get_ringBuffer(ringBuffer *rb, int sz)
リングバッファからデータを得る.要 free()
Definition: tools.c:3383
short swaps(unsigned short p)
16bit の上下8bitを入れ替える.
Definition: tools.c:1872
int strncaservscmp(const char *s1, const char *s2, int n)
文字列 s1と s2を後ろから n文字比較する.大文字小文字は区別しない.一致するなら 0
Definition: tools.c:703
unsigned char * ref_ringBuffer(ringBuffer *ring, int pos)
spoint 地点から pos番目のデータへの参照.posは 0から数える.spoint は変化しない.
Definition: tools.c:3455
unsigned char LocalIPNum[4]
127.0.0.1 のバイナリ
Definition: tools.c:26
void euc2sjis(unsigned char *c1, unsigned char *c2)
EUC -> SJIS.
Definition: tools.c:2688
FILE * file_chmod_open(const char *fn, const char *fm, mode_t mode)
ファイルの許可属性をmode へ変更した後,ファイルを fmモードでオープン
Definition: tools.c:2366
int mkdirp(const char *path, mode_t mode)
mkdir -p path 相当.
Definition: tools.c:2511
char * replace_str(char *buf, int len, const char *frm, const char *tos)
文字列 buf中の frmを tosに書き換えたものを返す.free() してはいけない.
Definition: tools.c:1282
char * ltostr_ts(long int n)
long int を文字に変換する.要 free()
Definition: tools.c:1552
void print_escape(const char *format, char *mesg)
エスケープ文字を含むメッセージの出力(stderr)
Definition: tools.c:4125
char * skip_chars(char *pp, const char *check)
check[]中の何れかの文字までポインタをスキップさせる.ただし クォーテーション内は完全スキップ
Definition: tools.c:948
unsigned char * fgets_mstream(unsigned char *mesg, mstream *sb)
メッセージストリームからメッセージを一行だけ取り出す.
Definition: tools.c:3592
FILE * FP_ErrFile
Definition: tools.c:3894
char * itostr_ts(int n)
int を文字に変換する.要 free()
Definition: tools.c:1532
FILE * FP_LogFile
Definition: tools.c:3893
unsigned char * decode_base64(unsigned char *str, int *sz)
bufを base64からデコードする.要 free()
Definition: tools.c:2787
int is_number(unsigned char *)
数字かどうか判定する(簡易版).整数(1) と小数点付き数字(2) のみ.
Definition: tools.c:1394
char * skip_char_pair(char *pp, char pair, char end)
pair と end で閉じるまでポインタをスキップさせる.ただし クォーテーション内は完全スキップ
Definition: tools.c:1022
void print_logfile(const char *,...)
デフォルトのログファイルにデータを書き込む
Definition: tools.c:3932
char * lltostr_ts(long long int n)
long long int を文字に変換する.要 free()
Definition: tools.c:1592
void replace_char(unsigned char *buf, int len, unsigned char frm, unsigned char toc)
データbuf 中のバイトデータ frm を tocに変更する.
Definition: tools.c:1252
void check_endian(void)
システムのエンディアンを判別して,大域変数 HostEndian に設定する
Definition: tools.c:143
int isNull(void *p)
Definition: tools.c:51
int count_lines(const char *buf)
文字列データの行数を数える.行頭が '\0'の場合も1行と数える.
Definition: tools.c:1673
unsigned char * encode_hex(unsigned char cc)
キャラクタを16進コードの文字列に変換する.要 free()
Definition: tools.c:3139
int is_big_endian(void)
エンディアンの動的チェック
Definition: tools.c:114
int ex_strncasecmp(const char *s1, const char *s2, int n)
文字列 s1とs2を拡張比較する.大文字小文字を区別しない.一致するなら TRUE
Definition: tools.c:820
short short_from_little_endian(void *ptr)
Definition: tools.c:228
char * get_line(char *buf, int n)
文字型データbufのバッファ内の n行目を取り出す.改行コードは削除される.要 free()
Definition: tools.c:484
char * ulltostr(long unsigned long int n)
long unsigned long int を文字に変換する.free() は不要
int is_little_endian(void)
エンディアンの動的チェック
Definition: tools.c:80
void clear_ringBuffer(ringBuffer *pp)
リングバッファのデータを削除する.
Definition: tools.c:3313
unsigned int uint_from_big_endian(void *ptr)
Definition: tools.c:318
char * dtostr_ts(double n)
double を文字に変換する.要 free()
Definition: tools.c:1652
unsigned char * decode_quoted_printable(unsigned char *str, int *sz)
buf を quoted printableからデコードする.要 free()
Definition: tools.c:3030
unsigned char * randbit(int n)
ランダムに n bitのバイナリを生成する.
Definition: tools.c:1804
void kanji_convert_euc2sjis(unsigned char *mesg)
EUCをSJISに変換する.
Definition: tools.c:2645
float float_from_little_endian(void *ptr)
Definition: tools.c:174
char * get_file_path(const char *str)
ファイル名を含むパスからパスのみを生成する.strは変化しない.要 free().
Definition: tools.c:2191
int DebugMode
ON の場合 ライブラリ全体がデバックモードであることを示す.デフォルトは OFF.
Definition: tools.c:17
void set_sigterm_child(void(*handler)(int))
child プロセス終了時の処理を設定.
Definition: tools.c:3763
int swapl(unsigned int p)
32bit pを8bitづつ逆順にする
Definition: tools.c:1896
unsigned short ushort_from_big_endian(void *ptr)
Definition: tools.c:354
char * numbering_name(const char *fmt, int n)
フォーマット fmtに従って,nを含む文字列を作り出す.要 free()
Definition: tools.c:2599
char * get_graphic_extension(uWord tex)
Definition: tools.c:4251
long unsigned file_size(const char *fn)
ファイルの大きさを返す.
Definition: tools.c:2309
ringBuffer * new_ringBuffer(int sz)
リングバッファを生成する.
Definition: tools.c:3205
int hexstr2i(const char *str)
16進の文字列を整数に変換する.
Definition: tools.c:1706
double double_from_little_endian(void *ptr)
エンディアンによるデータ変換
Definition: tools.c:156
unsigned char * decode_urlenc(unsigned char *str, int *sz)
buf を URLエンコードからデコードする.要 free()
Definition: tools.c:2933
sWord * swordp
Definition: tools.h:146
long int * lintp
Definition: tools.h:134
long unsigned int * ulintp
Definition: tools.h:135
uWord * uwordp
Definition: tools.h:147
double * drealp
Definition: tools.h:142
int * nintp
Definition: tools.h:136
float * realp
Definition: tools.h:143
short int * sintp
Definition: tools.h:138
char * ncharp
Definition: tools.h:140
sDWord * sdwordp
Definition: tools.h:144
long long int * llintp
Definition: tools.h:132
unsigned char * ucharp
Definition: tools.h:141
unsigned short int * usintp
Definition: tools.h:139
uDWord * udwordp
Definition: tools.h:145
sByte * sbytep
Definition: tools.h:148
long unsigned long int * ullintp
Definition: tools.h:133
uByte * ubytep
Definition: tools.h:149
unsigned int * uintp
Definition: tools.h:137
unsigned int uint
Definition: tools.h:115
float real
Definition: tools.h:121
short int sint
Definition: tools.h:116
uWord uword
Definition: tools.h:125
long unsigned long int ullint
Definition: tools.h:111
sDWord sdword
Definition: tools.h:122
unsigned short int usint
Definition: tools.h:117
char nchar
Definition: tools.h:118
sByte sbyte
Definition: tools.h:126
sWord sword
Definition: tools.h:124
uDWord udword
Definition: tools.h:123
double dreal
Definition: tools.h:120
unsigned char uchar
Definition: tools.h:119
long int lint
Definition: tools.h:112
int nint
Definition: tools.h:114
uByte ubyte
Definition: tools.h:127
long unsigned int ulint
Definition: tools.h:113
long long int llint
Definition: tools.h:110