📄 util.c
字号:
{ //ttom this function all change, copy from the second int i; int srclen = 0; int destindex=0; // CoolFish: Fix bug 2001/10/13 if (!src) return NULL; srclen = strlen(src); for( i = 0 ; i < srclen ; i ++ ){ BOOL dirty=FALSE; int j; char escapechar='\0'; if( destindex + 1 >= sizeofdest )break; if( IS_2BYTEWORD( src[i] ) ){ if( destindex + 2 >= sizeofdest )break; dest[destindex] = src[i]; dest[destindex+1] = src[i+1]; destindex += 2; i ++; continue; } for( j = 0; j<sizeof(escapeChar)/sizeof(escapeChar[0]); j++){ if( src[i] == escapeChar[j].escapechar ){ dirty=TRUE; escapechar= escapeChar[j].escapedchar; break; } } if( dirty == TRUE ){ if( destindex + 2 < sizeofdest ){ dest[destindex] = '\\'; dest[destindex+1] = escapechar; destindex+=2; dirty=TRUE; continue; }else{ dest[destindex] = '\0'; return dest; } }else{ dest[destindex] = src[i]; destindex++; } } dest[destindex] = '\0'; return dest;}//this function copy all from the secondchar * ScanOneByte( char *src, char delim ){ // Nuke if (!src) return NULL; // 侬 互卅仁卅月引匹腹绸 for( ;src[0] != '\0'; src ++ ){ // 蝈剩及ㄠ田奶玄 井升丹井毛民尼永弁 if( IS_2BYTEWORD( src[0] ) ){ // 蝈剩分[公及桦宁反ㄠ田奶玄芴坌卞褡引六月[ // 凶分仄ㄠ田奶玄仄井卅中桦宁反公丹仄卅中 if( src[1] != 0 ){ src ++; } continue; } // 剩分匀凶[仇仇匹覆擂及 侬午 胜 if( src[0] == delim ){ return src; } } // 伙□皿 仃凶日苇勾井日卅井匀凶[ return NULL;} /*---------------------------------------- * delim 匹隙烂今木凶 侬 毛嗉濠曰 侬午仄化 * index 及 毛 月[index反1匹反元引月[ * 侬 酷 [ * 娄醒 * src 葭及 侬 * delim 犯伉立正午卅月 侬 [ 反NULL 侬匹蔽匀化中月仪 * index 窒 及 毛潸月井 * buf 瑛绊 侬 毛伞 允月桦赭尺及禾奶件正□ * buflen 瑛绊 侬 毛伞 允月桦赭及扔奶术 * 忒曰袄 * 丐匀凶日 TRUE(1); * 卅井匀凶日 FALSE(0); * ex * getStringFromIndexWithDelim( "aho=hoge","=",1,buf,sizeof(buf) ); * buf ... aho * * getStringFromIndexWithDelim( "aho=hoge","=",2,buf,sizeof(buf) ); * buf ... hoge * 仇木手 户日木月[ * * getStringFromIndexWithDelim( "aho=hoge","=",3,buf,sizeof(buf) ); * 忒曰袄 FALSE ----------------------------------------*/BOOL getStringFromIndexWithDelim_body( char* src ,char* delim ,int index, char* buf , int buflen , char *file, int line ){//ttom this function all change,copy from the second int i; /* 伙□皿 醒 */ int length =0; /* 潸曰请仄凶 侬 及赢今 */ int addlen=0; /* 箫今木月赢今 */ int oneByteMode = 0; /* ㄠ田奶玄乒□玉井" */ if( strlen( delim ) == 1 ){ // 腹绸互ㄠ田奶玄卅日ㄠ田奶玄乒□玉卞允月 oneByteMode = 1;// 公及端ㄡ田奶玄 侬反民尼永弁仄卅中 } for( i = 0 ; i < index ; i ++ ){ char* last; src += addlen;/* 心勾井匀凶赢今毛箫允 */ if( oneByteMode ){ // ㄠ田奶玄乒□玉分匀凶日仇切日匹腹绸 last = ScanOneByte( src, delim[0] ); }else{ last = strstr( src , delim ); /* 苇尥仃月 */ } if( last == NULL ){ /* * 心勾井日卅井匀凶及匹允屯化戊疋□仄化 return[ */ strcpysafe( buf , buflen, src ); if( i == index - 1 ) /*切斤丹升心勾井匀凶*/ return TRUE; /*心勾井日卅井匀凶*/ return FALSE; } /* * 心勾井匀凶赭午 赓及匏 及犒毛菲户月 * 勾引曰嗉濠日木化中月 侬 及赢今 */ length = last - src; /* * 戚及伙□皿及啃卞心勾井匀凶赢今午 delim 及赢今毛箫仄化云仁 */ addlen= length + strlen( delim ); } strncpysafe( buf, buflen , src,length ); return TRUE;}/*------------------------------------------------------------ * 侬 "a,b,c,d" 毛娄醒卞医 允月[犯白巧伙玄反 0 卞允月[ * 井卅曰及 溃楮醒[蜇箕反切斤匀午赞中[ * 娄醒 * src char* 葭及 侬 * int1 int* int及禾奶件正[(a毛医 允月) * int2 int* int及禾奶件正[(b毛医 允月) * int3 int* int及禾奶件正[(c毛医 允月) * int4 int* int及禾奶件正[(d毛医 允月) * 忒曰袄 * 卅仄 ------------------------------------------------------------*/void getFourIntsFromString(char* src,int* int1,int* int2,int* int3, int* int4){ int ret; char string[128]; ret = getStringFromIndexWithDelim( src,"," ,1,string,sizeof(string)); if( ret == FALSE )*int1=0; else *int1 = atoi(string); ret = getStringFromIndexWithDelim( src, ",",2,string,sizeof(string) ); if( ret == FALSE )*int2=0; else *int2 = atoi(string); ret = getStringFromIndexWithDelim( src, ",",3,string,sizeof(string) ); if( ret == FALSE )*int3=0; else *int3 = atoi(string); ret = getStringFromIndexWithDelim( src, ",",4,string,sizeof(string) ); if( ret == FALSE )*int4=0; else *int4 = atoi(string);}/*---------------------------------------------- * src 及 匹dels匹隙烂仄凶 侬互 粮仄化中凶日 * 1勾卞引午户月[ * 田永弁旦仿永扑亘反巨旦弗□皿扑□弗件旦午卅月[ * 仄凶互匀化 粮仄凶田永弁旦仿永扑亘毛壅允仪反匹五卅中[ * 娄醒 * src 祭允月 侬 * dels 壅允 侬( 侬 匹隙烂第) * 忒曰袄 * 卅仄 ---------------------------------------------*/void deleteSequentChar( char* src , char* dels ){ int length; /* src 及赢今 */ int delength; /* dels 及赢今 */ int i,j; /* 伙□皿 醒 */ int index=0; /* 割烂 侬 及 index */ char backchar='\0'; /* 绰轮允月 侬 */ length = strlen( src ); delength = strlen( dels ); /* * 伙□皿允月仍午卞戊疋□允月 */ for( i = 0 ; i < length ; i ++ ){ if( src[i] == BACKSLASH ){ /* * 田永弁旦仿永扑亘分匀凶日 * 雄孺读卞 勾( BACKSLASH愤褥午}戚及 侬 ) * 褡户月 */ src[index++]=src[i++]; if( i >= length ){ print( "*\n"); break; } src[index++]=src[i]; /* 粮互鞅匀凶仪卞允月 */ backchar = '\0'; continue; } if( src[i] == backchar ) /* * 绰轮允月手元分匀凶日窒手仄卅中[勾引曰绰轮卞卅月[ */ continue; /* * 粮及绰轮允月 侬互卅仁卅匀凶及匹 backchar 反 NULL 侬卞允月 * 仇木互井氏元氏 */ backchar = '\0'; for( j = 0 ; j < delength ; j ++ ){ if( src[i] == dels[j] ){ /* * 绰轮允月 侬 分[ 仇仇匹 continue 仄卅中仪卞方曰 * 域 侬反绰轮仄卅中仪互忡据匹五月[ */ backchar=src[i]; break; } } src[index++]=src[i]; } src[index++]='\0';}/*---------------------------------------- * hash袄毛忒允[ 侬 卞及心银丹仇午 * 仇木反 公及引引卅及匹失伙打伉术丞反方丹歹井日氏互 * 中中失伙打伉术丞日仄中[ * 娄醒 * s 侬 * 忒曰袄 * int 甩永扑亘袄 *----------------------------------------*/#define PRIME 211int hashpjw ( char* s ){ char *p; unsigned int h= 0 ,g; for( p = s ; *p ; p ++ ){ h = ( h<< 4 ) + (*p); if( (g = h & 0xf0000000) != 0){ h = h ^ (g>>24); h = h ^ g; } } return h % PRIME;}/*---------------------------------------- * 夫□市伙卞田奶件玉仄凶末弗永玄毛忒允( TCP ) * 娄醒 * port 夫□市伙禾□玄 * 忒曰袄 * -1 巨仿□ * 1. socket扑旦 丞戊□伙及巨仿□ * 2. bind扑旦 丞戊□伙及巨仿□ * 3. listen扑旦 丞戊□伙及巨仿□ ----------------------------------------*/int bindlocalhost( int port ){ struct sockaddr_in sin; /*夫□市伙失玉伊旦迕*/ int sfd; /*末弗永玄犯奴旦弁伉皿正*/ int rc; /*夫□市伙伉正□件戊□玉*/ /*AF_INET皿夫玄戊伙 及 SOCK_STREAM */ sfd = socket( AF_INET, SOCK_STREAM, 0 ); if( sfd == -1 ){ print( "%s\n" , strerror(errno ) ); return -1; } if( getReuseaddr() ) { int sendbuff; /* 夫□市伙失玉伊旦及疯厍迕 */ setsockopt( sfd, SOL_SOCKET, SO_REUSEADDR, (char *)&sendbuff, sizeof( sendbuff)); } /*0弁伉失仄化袄毛医 */ memset( &sin ,0, sizeof( struct sockaddr_in ) ); sin.sin_family=AF_INET; sin.sin_port = htons( port ); sin.sin_addr.s_addr = INADDR_ANY; rc = bind( sfd , (struct sockaddr*)&sin, sizeof(struct sockaddr_in)); if( rc == -1 ){ print( "%s\n" , strerror(errno ) ); return -1; } rc = listen( sfd , 5 ); if( rc == -1 ){ print( "%s\n" , strerror(errno ) ); return -1; } return sfd;}/*---------------------------------------- * 戊生弁玄允月[( TCP ) * 娄醒 * hostname 涛粮允月石旦玄 * (xx.xxx.xxx.xxx匹手中中仄xxx.co.jp午井匹手中中) * port 涛粮允月石旦玄及禾□玄 * 忒曰袄 * 犯奴旦弁伉皿正( -1 及凛反巨仿□ ) ----------------------------------------*/int connectHost( char* hostname , unsigned short port ){ struct sockaddr_in sock; /*connect及凛卞银丹*/ struct hostent* hoste; /*hostname及hostent*/ int fd; /*戊生弁玄仄凶末弗永玄犯奴旦弁伉皿正*/ int lr; /*夫□市伙伉正□件戊□玉*/ memset( &sock , 0 , sizeof( struct sockaddr_in ) ); sock.sin_family = AF_INET; sock.sin_port = htons( port ); /* dot notation 井升丹井毛譬屯月 */ sock.sin_addr.s_addr = inet_addr( hostname ); if( sock.sin_addr.s_addr == -1 ){ /* *巨仿□ dot notation 匹反卅中[仄凶互匀化 骚及 蟆荸瑁互 邰分[ * dns毛夫井卅仃木壬卅日卅中凛反夫五卞中仁及手仇仇匹支匀化仁木月[ */ hoste = gethostbyname( hostname ); if( hoste == NULL ){ print( "获取主机名: %s\n", hostname); return -1; } memcpy((void*)&sock.sin_addr.s_addr , hoste->h_addr , sizeof(struct in_addr) ); } /*末弗永玄毛综月*/ fd = socket( AF_INET, SOCK_STREAM , 0 ); if( fd == -1 ){ print("Cannot Create Socket(%s errno:%d)\n" ,strerror( errno ) ,errno ); return -1; } /*戊生弁玄允月*/ lr = connect(fd,(struct sockaddr*)&sock,sizeof(struct sockaddr_in)); if( lr != 0 ){ print("Cannot connect. (%s errno:%d)\n" ,strerror( errno ) ,errno ); return -1; } return fd;}/*---------------------------------------- * 田永白央及 卞荼垫筏寞互丐月井升丹井[ * 剂仄镀中失伙打伉术丞卞 凳[ * 娄醒 * char* 譬屯月 侬 * 忒曰袄 * 赓卞苇勾井凶荼垫筏寞及匏 失弁本旦仄凶凛卞中中袄[ * 升丹中丹仪井午中丹午} * existsNewLinwCharacter( "aho\nhoge\n" ) * 分午}忒曰袄反 3 卞卅月[仇木卞镗啦允月仪[ * -1 卅井匀凶 * ----------------------------------------*/int existsNewLineCharacter( char* line ){#if 1 char* old = line; do{ if( *line == NEWLINE)return line-old; }while( *(line++) );#else int i; /*伙□皿 醒*/ int length = strlen( line ); /*譬屯月 侬 及赢今*/ for( i = 0 ; i < length ; i ++ ){ if( line[i] == NEWLINE ) return i; }#endif return -1;}/*---------------------------------------- * 侬 卞 侬互 歹木月桦赭毛井尹允[窒 井毛瑁户木月[ * nindex( string , c , 1 ) 午 index( string , c ) 反 equivalent 匹丐月[ * number互 引凶反0及凛反忒曰袄反}string午 元匹丐月[ * * 娄醒 * string char* 譬屯月 侬 * c int 譬屯月 侬 * number int 歹月 寞 * 忒曰袄 * 域谯仄凶 侬及禾奶件正□ * NULL 心勾井日卅井匀凶[ ----------------------------------------*/char* nindex( char* string, int c , int number )
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -