📄 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 + -