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

📄 util.c

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