?? util.c
字號:
#include "version.h"#include <sys/types.h>#include <sys/socket.h>#include <sys/time.h>#include <sys/stat.h>#include <netinet/in.h>#include <arpa/inet.h>#include <stdio.h>#include <string.h>#include <stdlib.h>#include <unistd.h>#include <dirent.h>#include <netdb.h>#include <errno.h>#include <string.h>#include <ctype.h>#include "common.h"#include "util.h"#include "configfile.h"#define IS_2BYTEWORD( _a_ ) ( (char)(0x80) <= (_a_) && (_a_) <= (char)(0xFF) )/*----------------------------------------- 仃勾及荼墊毛仇欠允 婁醒“ 手午及 儂 [ 濤 凳今木月冗 windows , macintosh , unix及升及墊手覆殺匹五月[ windows : \r\n macintosh : \n\r unix : \n 分勻兇井卅 macintosh : \r 匹允[ 公木午仇及皿夫弘仿丞分午仃勾及 儂元扎卅仁化手 荼墊壅允仃升中中氏匹允井 -----------------------------------------*/void chompex( char *buf ){ while( *buf ){ if( *buf == '\r' || *buf == '\n' ){ *buf='\0'; } buf++; }}/*---------------------------------------- * 仃勾及1 儂毛潸曰輪仁 * 婁醒 * src 凳允月 儂 ----------------------------------------*/void chop( char* src ){ /* * 兇分兇氏卞 及 儂毛潸曰輪仁 */ int length = strlen( src ); if( length == 0 ) return; src[length-1] = '\0';}/*---------------------------------------- * 仃勾及 儂毛潸月[公及 儂毛 醒隙爛匹五月[ * 婁醒 * src 葭及 儂 * delim 綽輪允月 儂及 [ 反NULL 儂匹蔽勻化中月儀 ----------------------------------------*/void dchop( char* src , char* del){ int dellen, srclen; int i; BOOL delete=FALSE; /* * src及 欠井日譬屯化中仁[1 儂卞勾五 del 允屯化毛伙□皿仄化 * 域譙允木壬壅允[公仄化戚及 儂卞中仁[ */ srclen = strlen( src ); dellen = strlen( del ); if( srclen == 0 || dellen == 0 ) return; for( i = 0 ; i < dellen ; i ++ ){ if( src[srclen-1] == del[i] ){ delete = TRUE; break; } } /* 濠曰潸曰 */ if( delete )src[srclen - 1] = '\0';}/*---------------------------------------- * dchop及菅[ 賡及 儂毛潸月[公及 儂毛 醒隙爛匹五月[ * 婁醒 * src 葭及 儂 * delim 綽輪允月 儂及 [ 反NULL 儂匹蔽勻化中月儀 ----------------------------------------*/void pohcd( char* src , char* del){ int dellen, srclen; int i; BOOL delete=FALSE; /* * src及蟆井日譬屯化中仁[1 儂卞勾五 del 允屯化毛伙□皿仄化 * 域譙允木壬壅允[公仄化戚及 儂卞中仁[ */ srclen = strlen( src ); dellen = strlen( del ); if( srclen == 0 || dellen == 0 ) return; for( i = 0 ; i < dellen ; i ++ ){ if( src[0] == del[i] ){ delete = TRUE; break; } } /* 綽輪 */ if( delete ) /* 仇及戊疋□匹 NULL 儂手戊疋□今木月 */ for( i = 0 ; i < srclen ; i ++ ) src[i] = src[i+1];}/*---------------------------------------- * 儂 卞 儂互殖引木化中月井升丹井譬屯月[ * 婁醒 * src char* 譬屯月 儂 * include char* 殖引木化中月井升丹井及 儂 [ * 忒曰襖 * 岳 賡卞殖引木化中兇src及樺赭 * 撩 -1 ----------------------------------------*/int charInclude( char* src, char* include ){ int i,j; int srclen,includelen; srclen = strlen( src ); includelen = strlen( include ); for( i = 0 ; i < srclen ; i ++ ){ for( j = 0 ; j < includelen ; j ++ ) if( src[i] == include[j] ) return i; } return -1;}/*------------------------------------------------------------ * EUC及2田奶玄 分仃毛戊疋□仄卅中strncpy * freeBSD 及仿奶皮仿伉井日 strncpy 毛潸勻化五化} * 公木毛手午卞荼瞻[*dest++ 午井銀中兇中仃升}瑛寧賜輛卞憤褥互 * 卅中及匹}銀勻化中卅中[井歹曰卞 分仃升}禾奶件正手銀勻化化 * 井卅曰 卅皿夫弘仿丞 * 婁醒 * dest char* 戊疋□燮 * src char* 末□旦 * n size_t 贏今 * 忒曰襖 * dest ------------------------------------------------------------*/char* strncpy2( char* dest, const char* src, size_t n ){ if( n > 0 ){ char* d = dest; const char* s = src; int i; for( i=0; i<n ; i++ ){ if( *(s+i) == 0 ){ /* 戊疋□仄云歹勻兇日 NULL 儂毛 木月 */ *(d+i) = '\0'; return dest; } if( *(s+i) & 0x80 ){ *(d+i) = *(s+i); i++; if( i>=n ){ *(d+i-1)='\0'; break; } *(d+i) = *(s+i); }else *(d+i) = *(s+i); } } return dest;}/*---------------------------------------- * src 井日 dest 卞戊疋□允月[ 戊疋□燮及扔奶術毛譬屯月[ * 婁醒 * dest 戊疋□燮 * n 扔奶術 * src 葭及 儂 ----------------------------------------*/void strcpysafe( char* dest ,size_t n ,const char* src ){ /* * src 井日 dest 尺戊疋□允月. * strcpy, strncpy 匹反 dest 方曰 戊疋□允月洶互 * 五中凜卞裟少午,丟乒伉陸失弁本旦互粟月. * 仇木毛 什啃卞, strncpy 互丐月互 strlen( src ) 互 n 方曰 * 五中凜卞反, dest 及 互 NULL 儂午反卅日卅中. * * 仄兇互勻化 dest 及 五今方曰 src 及幻丹互贏中凜卞反 * n-1 匹 strncpy 毛允月. 凝今中凜反公及引引戊疋□允月 * * n 互 及凜反云井仄仁卅月及匹 及凜反 窒手仄卅中[ * */ // Nuke +1 (08/25): Danger if src=0 if (!src) { *dest = '\0'; return; } if( n <= 0 ) /* 窒手仄卅中 */ return; /* 仇及凜鰾匹} n >= 1 動曉互瑁爛 */ /* NULL 儂毛嗶 仄化 勝允月 */ else if( n < strlen( src ) + 1 ){ /* * 田永白央互簫曰卅中及匹 n - 1(NULL 儂) * 匹 strncpy 毛裟少 */ strncpy2( dest , src , n-1 ); dest[n-1]='\0'; }else strcpy( dest , src );}/*---------------------------------------- * src 井日 length 掏允[ 戊疋□燮及 五今毛譬屯月[ * 婁醒 * dest 戊疋□燮 * n 戊疋□燮及扔奶術 * src 戊疋□葭 * length 窒 儂戊疋□允月井 ----------------------------------------*/void strncpysafe( char* dest , const size_t n , const char* src ,const int length ){ /* * src 井日 dest 卞 length 戊疋□允月 * strcpy, strncpy 匹反 dest 方曰 戊疋□允月洶互 * 五中凜卞裟少午,丟乒伉陸失弁本旦互粟月. * 仇及楮醒匹反}strlen( src ) 午 length 及凝今中幻丹 * ( 端卞戊疋□允月洶) 午 dest 及扔奶術毛 屯化} * strcpysafe 午 元儀毛允月[ */ int Short; Short = min( strlen( src ) , length ); /* NULL 儂 毛嗶 仄兇 勝 */ if( n < Short + 1 ){ /* * 田永白央互簫曰卅中及匹 n - 1(NULL 儂) * 匹 strncpy 毛裟少 */ strncpy2( dest , src , n-1 ); dest[n-1]='\0'; }else if( n <= 0 ){ return; }else{ /* * 田永白央反蝸坌卞丐月及匹 Short 匹strncpy毛裟少 * 卅云 src 卞反 Short 及贏今 卞 NULL 互卅中及匹} * dest 卞反 馨笛仄化云仁[ */ strncpy2( dest , src , Short ); dest[Short]= '\0'; }}/*------------------------------------------------------------ * strcat毛兜蟈卞 蜇允月[贊中及匹} 卅樺寧毛輪中化銀歹卅中儀[ * 婁醒 * src char* 葭卞卅月 儂 * size int src 及扔奶術( 欠卞升木分仃酸勻化中月井匹反 * 卅仁化田永白央蟈 ) * ap char* 尥仃笛尹月 * 忒曰襖 * src ( 木閡迕) ------------------------------------------------------------*/char* strcatsafe( char* src, int size, char* ap ){ strcpysafe( src + strlen( src ) , size - strlen(src), ap ); return src;}/*---------------------------------------- * 儂 及 毛 勝允月[ 元井升丹井仄井 爛仄卅中 by ringo * char *s1 , *s2 : 勝允月 儂 * 忒曰襖 * 0 “ 云卅元 * 1 : 仇午卅月 * 仇木反NPC及 平旦玄荸 卞支仁分勾[ ----------------------------------------*/int strcmptail( char *s1 , char *s2 ){ int i; int len1 = strlen( s1 ); int len2 = strlen( s2 ); for(i=0;;i++){ int ind1 = len1 - 1 - i; int ind2 = len2 - 1 - i; if( ind1 < 0 || ind2 < 0 ) return 0; if( s1[ind1] != s2[ind2] ) return 1; }}/*---------------------------------------- * 儂 及 卞踏井木化中月幫醒毛必永玄允月[ * NPC及 平旦玄荸 卞支仁分勾[ * 兇分仄 卞中日氏 儂互丐月樺寧 骰允月[ * 耨痊互 切卅中失伙打伉術丞卞 凳[ * 婁醒 * hoge char* 荸 允月 儂 * 忒曰襖 * 荸 仄兇幫醒[ * * “ * "ringo ( 吧噗吧噗星人 ) : 100" * 及樺寧反100互井尹月[ * "ringo ( 吧噗吧噗星人 ) : 是100" * 手100卞卅月[幻氏引卞NPC迕卅曰友[ ----------------------------------------*/#define DECIMALCHARNUM 10#define FIGURECHARNUM 3#define SPECIALCHARNUM 2char *UTIL_decimalchar[DECIMALCHARNUM] = {"0","1","2", "3", "4","5", "6","7","8","9"};char *UTIL_figurechar[FIGURECHARNUM] = {"","",""};char *UTIL_specialchar[SPECIALCHARNUM] = {"",""};/* * 儂 井日}醒襖毛 允午 歹木月 坌毛 五請允[燮 及幻丹井日 * 繭仄化 五請允[euc迕[ * * : in "這本書七萬冊300美金嗎?" * out "7萬" * 婁醒 * char *in: 儂 * char *out:請 儂 * int outsiz:請 儂 及田永白央扔奶術 * 忒曰襖 * 醒襖毛 允 坌互丐勻兇日公及 儂 及贏今}卅井勻兇日ㄟ */static int findNumberString( char *in, char *out, int outsiz ){ int len,i,j,k, findflag, numstrflag; char tmp[3]; len = strlen(in); if( len == 0 ) return 0; numstrflag=0; findflag = 0; for( i=0,j=0;in[i]!='\0'&& j<outsiz-2;i++ ){ findflag = 0; if( in[i] & 0x80 ){ /* EUC及樺寧 */ tmp[0] = in[i]; tmp[1] = in[i+1]; tmp[2] = '\0'; }else{ /* ASCII及樺寧 */ tmp[0] = in[i]; tmp[1] = '\0'; } for( k=0;k<DECIMALCHARNUM;k++ ){ if( strstr( UTIL_decimalchar[k], tmp ) ){ numstrflag = 1; findflag = 1; } } for( k=0;k<FIGURECHARNUM;k++ ){ if( strstr( UTIL_figurechar[k], tmp ) ){ numstrflag = 1; findflag = 1; } } for( k=0;k<SPECIALCHARNUM;k++ ){ if( strstr( UTIL_specialchar[k], tmp ) ){ numstrflag = 1; findflag = 1; } } if( findflag ){ if( in[i] & 0x80 ){ out[j] = tmp[0]; out[j+1] = tmp[1]; j+=2; i++; }else{ out[j] = tmp[0]; j+=1; } continue; } if( numstrflag ){ out[j] = '\0'; return j; } } if( findflag ){ out[j] = '\0'; return j; }else{ return 0; }
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -