00001
00002 #ifndef __JBXL_TOOLS_HEADER_
00003 #define __JBXL_TOOLS_HEADER_
00004
00005
00014 #include "common.h"
00015 #include <sys/types.h>
00016 #include <sys/stat.h>
00017 #include <stdarg.h>
00018 #include <ctype.h>
00019
00020
00021 #ifdef WIN32
00022 #include <winsock2.h>
00023 #ifndef HAVE_TIME_H
00024 #define HAVE_TIME_H
00025 #endif
00026 #else
00027 #include <unistd.h>
00028 #include <sys/sysinfo.h>
00029 #endif
00030
00031
00032 #ifdef HAVE_ARPA_INET_H
00033 #include <arpa/inet.h>
00034 #endif
00035
00036 #ifdef TIME_WITH_SYS_TIME
00037 #include <time.h>
00038 #include <sys/time.h>
00039 #else
00040 #ifdef HAVE_TIME_H
00041 #include <time.h>
00042 #endif
00043 #ifdef HAVE_SYS_TIME_H
00044 #include <sys/time.h>
00045 #endif
00046 #endif
00047
00048 #ifdef HAVE_SYS_PARAM_H
00049 #include <sys/param.h>
00050 #endif
00051
00052 #ifdef HAVE_SYSLOG_H
00053 #include <syslog.h>
00054 #endif
00055
00056 #ifdef HAVE_WAIT_H
00057 #include <wait.h>
00058 #endif
00059 #ifdef HAVE_SYS_WAIT_H
00060 #include <sys/wait.h>
00061 #endif
00062
00063 #ifdef HAVE_SYS_ERRNO_H
00064 #include <sys/errno.h>
00065 #else
00066 #include <errno.h>
00067 #endif
00068 #include <signal.h>
00069
00070
00071 #ifndef HUGE_VALF
00072 #ifdef HUGE_VAL
00073 #define HUGE_VALF ((double)HUGE_VAL)
00074 #endif
00075 #endif
00076
00077
00078
00079
00080
00081 #define CHAR_CR 0x0d
00082 #define CHAR_LF 0x0a
00083 #define CHAR_TAB 0x09
00084
00085 #define CODE_US 0
00086 #define CODE_EN 0
00087 #define CODE_EUC 1 //
00088 #define CODE_SJIS 2 //
00089 #define CODE_UTF8 3 //
00090
00091
00092 #define UNKNOWN_ENDIAN 0
00093
00094 #ifndef LITTLE_ENDIAN
00095 #define LITTLE_ENDIAN 1234
00096 #define BIG_ENDIAN 4321
00097 #define PDP_ENDIAN 3412
00098 #endif
00099
00100
00101
00102 typedef union _union_val {
00103 long long int llint;
00104 unsigned long long int ullint;
00105 long int lint;
00106 unsigned long int ulint;
00107 int nint;
00108 unsigned int uint;
00109 short int sint;
00110 unsigned short int usint;
00111 char nchar;
00112 unsigned char uchar;
00113 double dreal;
00114 float real;
00115 sDWord sdword;
00116 uDWord udword;
00117 sWord sword;
00118 uWord uword;
00119 sByte sbyte;
00120 uByte ubyte;
00121 } unionVal;
00122
00123
00124 typedef union _union_ptr {
00125 long long int* llintp;
00126 unsigned long long int* ullintp;
00127 long int* lintp;
00128 unsigned long int* ulintp;
00129 int* nintp;
00130 unsigned int* uintp;
00131 short int* sintp;
00132 unsigned short int* usintp;
00133 char* ncharp;
00134 unsigned char* ucharp;
00135 double* drealp;
00136 float* realp;
00137 sDWord* sdwordp;
00138 uDWord* udwordp;
00139 sWord* swordp;
00140 uWord* uwordp;
00141 sByte* sbytep;
00142 uByte* ubytep;
00143 } unionPtr;
00144
00145
00146
00147
00148 typedef struct _ringBuffer {
00149 unsigned char* buf;
00150 int bufsz;
00151 int spoint;
00152 int epoint;
00153 int datasz;
00154 int npoint;
00155 int datano;
00156 int state;
00157 } ringBuffer;
00158
00159
00160 #define mstream ringBuffer
00161
00162
00163
00164 typedef struct _rectangle {
00165 int x;
00166 int y;
00167 int xsize;
00168 int ysize;
00169 } rectAngle;
00170
00171
00172
00173
00174
00175 extern int DebugMode;
00176 extern int UnitTestMode;
00177
00178 extern int KanjiCode;
00179 extern int HostEndian;
00180
00181 extern unsigned char LocalIPNum[4];
00182 extern unsigned char LocalIPNum6[16];
00183
00184 #define LOCAL_IPv4 "127.0.0.1"
00185 #define LOCAL_IPv6 "::1"
00186 #define LOCAL_IPADDR LOCAL_IPv4
00187 #define LOCAL_IPADDR6 LOCAL_IPv6
00188
00189
00190
00191 #ifndef CPLUSPLUS
00192 int isNull(void* p);
00193 #define freeNull(p) {if(!isNull((void*)p)) free(p); (p)=NULL;}
00194 #define freenull(p) {if(!isNull((void*)p)) free(p); (p)=NULL;}
00195 #endif
00196
00197 #define free_null(p) freeNull((p))
00198
00199 #define _tochar(a) (char*)(a)
00200
00201
00202
00204
00205
00206 char* get_line(char* buf, int n);
00207 char* get_seq_data(char* buf, int* ptr);
00208 char* awk (char* str, char cc, int n);
00209 char* cawk(char* str, char cc, int n);
00210
00211 char* replace_str(char* buf, int len, const char* frm, const char* tos);
00212 char* cut_str(char* buf, int ls, int le);
00213 char* dup_str(char* buf);
00214 #define dup_string(s) dup_str((s))
00215
00216 char* skip_chars(char* pp, const char* check);
00217 char* skip_char(char* pp, char cc);
00218 char* skip_char_pair(char* pp, char pair, char end);
00219 char* skip_string_end(char* pp);
00220
00221 char* pack_char_len(char* pp, char cc, int len);
00222 char* pack_head_tail_char(char* pp, char cc);
00223 char* change_esc(char* pp);
00224 char* chomp(char* str);
00225 char* double_bs(char* fn);
00226 char* numbering_name(const char* fmt, int n);
00227 #define pack_char(s, c) pack_char_len((s), (c), -1)
00228
00229
00230 char* itostr(int n);
00231 char* ltostr(long int n);
00232 char* ultostr(unsigned long int n);
00233 char* lltostr(long long int n);
00234 char* ulltostr(unsigned long long int n);
00235 char* ftostr(float n);
00236 char* dtostr(double n);
00237
00238
00239 char* itostr_ts(int n);
00240 char* ltostr_ts(long int n);
00241 char* ultostr_ts(unsigned long int n);
00242 char* lltostr_ts(long long int n);
00243 char* ulltostr_ts(unsigned long long int n);
00244 char* ftostr_ts(float n);
00245 char* dtostr_ts(double n);
00246
00247 int count_lines(const char* buf);
00248 int hexstr2i(const char* str);
00249
00250 unsigned long long int ntohull(unsigned long long int s);
00251 #define htonull(s) ntohull((s))
00252
00253 void swap_byte(void* p, int s, int b);
00254 short swaps(unsigned short p);
00255 int swapl(unsigned int p);
00256 void reverse_str(uByte* p, int s);
00257 void upper_string(char* str);
00258 #define int_swap(p, s) {int swap=(p); (p)=(s); (s)=swap;}
00259
00260
00261 int bincmp(unsigned char* b1, unsigned char* b2, int n);
00262 int strnrvscmp(const char* s1, const char* s2, int n);
00263 int strncaservscmp(const char* s1, const char* s2, int n);
00264 char* strstrcase(const char* buf, const char* nd);
00265
00266
00267 int ex_strncmp(const char* s1, const char* s2, int n);
00268 int ex_strncasecmp(const char* s1, const char* s2, int n);
00269 int ex_strnrvscmp(const char* s1, const char* s2, int n);
00270 int ex_strncaservscmp(const char* s1, const char* s2, int n);
00271 #define ex_strcmp(a, b) ex_strncasecmp((a), (b), -1)
00272
00273
00274 int is_little_endian(void);
00275 int is_big_endian(void);
00276 void check_endian(void);
00277
00278 double double_from_little_endian(void* ptr);
00279 float float_from_little_endian(void* ptr);
00280 int int_from_little_endian(void* ptr);
00281 unsigned int uint_from_little_endian(void* ptr);
00282 short short_from_little_endian(void* ptr);
00283 unsigned short ushort_from_little_endian(void* ptr);
00284 double double_from_big_endian(void* ptr);
00285 float float_from_big_endian(void* ptr);
00286 int int_from_big_endian(void* ptr);
00287 unsigned int uint_from_big_endian(void* ptr);
00288 short short_from_big_endian(void* ptr);
00289 unsigned short ushort_from_big_endian(void* ptr);
00290
00291
00292
00293
00294 char* get_local_timestamp(time_t date, const char* format);
00295 char* get_gmt_timestamp(time_t date, const char* format);
00296
00297
00298 void print_escape(const char* format, char* mesg);
00299 void fdump(FILE* fp, unsigned char* mesg, int n);
00300 void print_16x(FILE* fp, unsigned char* mesg, int n);
00301
00302
00303 void kanji_convert(unsigned char* mesg);
00304 void kanji_convert_euc2sjis(unsigned char* mesg);
00305 void kanji_convert_sjis2euc(unsigned char* mesg);
00306 void euc2sjis(unsigned char *c1, unsigned char *c2);
00307 void sjis2euc(unsigned char *c1, unsigned char *c2);
00308
00309
00310 int file_from_to(const char* s, const char* d, const char* mode);
00311 int fp_from_to(FILE* s, FILE* d, long int sz);
00312 char* get_file_name(const char* str);
00313 char* get_file_extension(const char* str);
00314 char* del_file_name(const char* str);
00315 char* del_file_extension(const char* str);
00316
00317
00318 char* get_file_path(const char* str);
00319 char* cut_file_extension(const char* str);
00320
00321 unsigned long file_size(const char* fn);
00322 int file_exist(const char* fn);
00323 FILE* file_chmod_open(const char* fn, const char* fm, mode_t mode);
00324 char* temp_filename(const char*, int);
00325
00326 unsigned char* read_file (const char* fname, unsigned long int* size);
00327 long int write_file(const char* fname, unsigned char* buf, unsigned long int size);
00328
00329
00330 void init_rand(void);
00331 char* randstr(int n);
00332 unsigned char* randbit(int n);
00333 #define random_str(n) temp_filename(NULL, (n))
00334
00335
00336 unsigned char* encode_base64(unsigned char* str, int sz);
00337 unsigned char* decode_base64(unsigned char* str, int* sz);
00338 unsigned char* encode_base64_filename(unsigned char* str, int sz);
00339 unsigned char* decode_base64_filename(unsigned char* str, int* sz);
00340 unsigned char* encode_urlenc(unsigned char* str, int sz);
00341 unsigned char* decode_urlenc(unsigned char* str, int* sz);
00342 unsigned char* encode_quoted_printable(unsigned char* str, int sz);
00343 unsigned char* decode_quoted_printable(unsigned char* str, int* sz);
00344 unsigned char* encode_hex(unsigned char cc);
00345 unsigned char decode_hex(unsigned char c1, unsigned char c2);
00346
00347
00348 ringBuffer* new_ringBuffer(int sz);
00349 ringBuffer init_ringBuffer(void);
00350 ringBuffer make_ringBuffer(int sz);
00351 void del_ringBuffer (ringBuffer** pp);
00352 void free_ringBuffer (ringBuffer* pp);
00353 void clear_ringBuffer(ringBuffer* pp);
00354 int put_ringBuffer(ringBuffer* rb, unsigned char* pp, int sz);
00355 unsigned char* get_ringBuffer(ringBuffer* rb, int sz);
00356 int seek_ringBuffer(ringBuffer* rb, int sz);
00357 unsigned char* ref_ringBuffer(ringBuffer* ring, int pos);
00358
00359
00360
00361 int put_mstream(mstream* sb, unsigned char* pp);
00362 unsigned char* get_mstream(mstream* sb);
00363 unsigned char* fgets_mstream(unsigned char* mesg, mstream* sb);
00364
00365 #define init_mstream() init_ringBuffer()
00366 #define new_mstream(s) new_ringBuffer((s))
00367 #define make_mstream(s) make_ringBuffer((s))
00368 #define free_mstream(s) free_ringBuffer((s))
00369 #define del_mstream(s) del_ringBuffer((s))
00370 #define clear_mstream(s) clear_ringBuffer((s))
00371
00372
00373 unsigned char* uuid2guid(unsigned char* p);
00374 unsigned char* guid2uuid(unsigned char* p);
00375
00376
00377 #ifndef WIN32
00378
00379 unsigned long int get_used_memory(void);
00380 unsigned long int get_free_memory(void);
00381
00382 void set_sigterm_child(void (*handler)(int));
00383 void sigterm_child(int signal);
00384
00385 void ignore_sigterm_child(void);
00386
00387 void set_sigsegv_handler(void (*handler)(int));
00388 void trap_segmentation_falt(int signal);
00389
00390 #define set_sigseg_handler(h) set_sigsegv_handler((h))
00391
00392 #endif
00393
00394
00396
00397
00398 #define copy_file(src, dst) file_from_to((src), (dst), "wb")
00399 #define cat_file(src, dst) file_from_to((src), (dst), "ab")
00400
00401 #define isBigEndian (is_big_endian())
00402 #define isLittleEndian (is_little_endian())
00403
00404 #define ntoh_st(p, s) {if(!isBigEndian) swap_byte((void*)(p),sizeof(*(p)),(s));}
00405 #define hton_st(p, s) {if(!isBigEndian) swap_byte((void*)(p),sizeof(*(p)),(s));}
00406 #define ntoh_ar(p, s) {if(!isBigEndian) swap_byte((void*)(p),(s),sizeof(*(p)));}
00407 #define hton_ar(p, s) {if(!isBigEndian) swap_byte((void*)(p),(s),sizeof(*(p)));}
00408
00409 #define ntoh_data(p, s, c) {if(!isBigEndian) swap_byte((void*)(p),(s),(c));}
00410 #define hton_data(p, s, c) {if(!isBigEndian) swap_byte((void*)(p),(s),(c));}
00411
00412
00414
00415
00416 #ifdef WIN32
00417 #define JBXL_LOG_FILE "\\jbxl.log"
00418 #define JBXL_ERR_FILE "\\jbxl.err"
00419 #else
00420 #define JBXL_LOG_FILE "/var/log/jbxl.log"
00421 #define JBXL_ERR_FILE "/var/log/jbxl.err"
00422 #endif
00423
00424
00425 extern FILE* FP_LogFile;
00426 extern FILE* FP_ErrFile;
00427
00428 void open_logfile (void);
00429 void close_logfile(void);
00430 void print_logfile(const char*, ...);
00431
00432 void open_errfile (void);
00433 void close_errfile(void);
00434 void print_errfile(const char*, ...);
00435
00436
00438
00439
00440 void print_message(const char*, ...);
00441 void fprint_message(FILE*, const char*, ...);
00442
00443
00444
00445 #ifdef WIN32
00446 #define PRINT_MESG(...) {}
00447 #define PRINT_ESC(...) {}
00448 #define PRINT_INFO(...) {}
00449 #define PRINT_WARN(...) {}
00450 #define PRINT_ERROR(...) {}
00451 #else
00452 #define PRINT_MESG print_message
00453 #define PRINT_ESC print_escape
00454 #define PRINT_INFO print_message
00455 #define PRINT_WARN print_message
00456 #define PRINT_ERROR print_message
00457 #endif
00458
00459
00460
00461
00463
00464
00465
00466 #ifdef _DEBUG
00467 #ifndef EBUG
00468 #define EBUG
00469 #endif
00470 #endif
00471
00472 #ifdef EBUG
00473 #ifndef _DEBUG
00474 #define _DEBUG
00475 #endif
00476 #endif
00477
00478
00479
00480 #define DEBUG_MODE if(DebugMode==ON)
00481 #define NO_DEBUG_MODE if(DebugMode==OFF)
00482
00483
00485
00486
00487
00488 #ifdef EBUG // -DEBUG
00489 #define DEBUG_INFO PRINT_INFO
00490 #define DEBUG_WARN PRINT_WARN
00491 #define DEBUG_ERROR PRINT_ERROR
00492 #define DEBUG_MESG PRINT_MESG
00493 #else
00494 #define DEBUG_INFO(...) {}
00495 #define DEBUG_WARN(...) {}
00496 #define DEBUG_ERROR(...) {}
00497 #define DEBUG_MESG(...) {}
00498 #endif
00499
00500
00501 #endif // __JBXL_TOOLS_HEADER_
00502