⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 util.c

📁 石器时代8.0服务端完整源代码。可以直接编译
💻 C
📖 第 1 页 / 共 4 页
字号:
{ //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 + -