亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? snprintf.c

?? 一個Windows下的Linux專用虛擬機
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* * Adapted for coLinux by Dan Aloni <da-x@colinux.org> *  * I had to remove size_t because we can't use it in coLinux's source, * since including the necessary OS-dependent headers for it is quite  * hairy. *  * Originally by Alex Holkner and David Tiktin. */ #include <stdarg.h>#include <colinux/os/current/memory.h>#include <colinux/common/common.h>#include <colinux/common/libc.h>/* Use these directly if you want to avoid overhead of psnprintf * Return value is number of characters printed (or number printed * if there had been enough room). */static int pvsnfmt_char(char **pinsertion, long *nmax, const char fmt, int flags,			int width, int precision, char prefix, va_list *ap);static int pvsnfmt_int(char **pinsertion, long *nmax, char fmt, int flags,		       int width, int precision, char prefix, va_list *ap);static int pvsnfmt_str(char **pinsertion, long *nmax, const char fmt, int flags,		       int width, int precision, char prefix, va_list *ap);#ifdef SNPRINTF_FLOATstatic int pvsnfmt_double(char **pinsertion, long *nmax, const char fmt, int flags,			  int width, int precision, char prefix, va_list *ap);#endif/* These are the flags you need (use logical OR) for the flags parameter of * fmt functions above. */#define FLAG_DEFAULT         0x00#define FLAG_LEFT_ALIGN      0x01 // -#define FLAG_SIGNED          0x02 // +#define FLAG_ZERO_PAD        0x04 // 0#define FLAG_SIGN_PAD        0x08 // ' '#define FLAG_HASH            0x10 // #/* Portable strnlen function (doesn't exist on all systems!) */static long pstrnlen(const char *s, long count);/* Windows stdlib defines fcvt differently <sigh> */#ifdef SNPRINTF_FLOAT#ifdef WIN32# ifndef CYGWIN#  define FCVT _fcvt# else#  define FCVT fcvt# endif#else# define FCVT fcvt#endif#endifint co_snprintf(char *str, long n, const char *format, ...){    va_list args;    int ret;    va_start(args, format);    ret = co_vsnprintf(str, n, format, args);    va_end(args);    return ret;}#define STATE_NONE 0#define STATE_OPERATOR 1 /* Just received % */#define STATE_FLAG 2     /* Just received a flag or prefix or width */#define STATE_WIDTH 3#define STATE_BEFORE_PRECISION 4 /* just got dot */#define STATE_PRECISION 5 /* got at least one number after dot */#define STATE_PREFIX 6   /* just received prefix (h, l or L) */#define UNKNOWN_WIDTH 0#define VARIABLE_WIDTH -2#define UNKNOWN_PRECISION -1#define VARIABLE_PRECISION -2/* Following macros give reusable switch cases, used in combination * depending on current state. Sucks to do these as macros, but should * give the compiler lots of freedom to optimize. */#define CHECK_FLAG \    case '-':  \        flags |= FLAG_LEFT_ALIGN; \        state = STATE_FLAG; \        break; \    case '+': \        flags |= FLAG_SIGNED; \        state = STATE_FLAG; \        break; \    case '0': \        flags |= FLAG_ZERO_PAD; \        state = STATE_FLAG; \        break; \    case ' ': \        flags |= FLAG_SIGN_PAD; \        state = STATE_FLAG; \        break; \    case '#': \        flags |= FLAG_HASH; \        state = STATE_FLAG; \        break;#define CHECK_WIDTH \    case '1': \    case '2': \    case '3': \    case '4': \    case '5': \    case '6': \    case '7': \    case '8': \    case '9': \        width = *pfmt - '0'; /* convert to integer */ \        state = STATE_WIDTH; \        break; \    case '*': \        width = VARIABLE_WIDTH; \        state = STATE_WIDTH; \        break;#define CHECK_PRECISION \    case '.': \        precision = 0; \        state = STATE_BEFORE_PRECISION; \        break;#define CHECK_PREFIX \    case 'h': \    case 'l': \    case 'L': \        prefix = *pfmt; \        state = STATE_PREFIX; \        break;#define GET_VARS \    if (width == VARIABLE_WIDTH) \        width = va_arg(ap, int); \    if (precision == VARIABLE_PRECISION) \        precision = va_arg(ap, int);#ifdef SNPRINTF_FLOAT#define CHECK_DOUBLE_TYPE \    case 'e': \    case 'E': \    case 'f': \    case 'g': \    case 'G': \        GET_VARS \        ncount += pvsnfmt_double(&pinsertion, &nmax, *pfmt, flags, width, precision, prefix, &ap); \        state = STATE_NONE; \        break;#else#define CHECK_DOUBLE_TYPE #endif#define CHECK_TYPE \    case 'd': \    case 'i': \    case 'u': \    case 'o': \    case 'x': \    case 'X': \    case 'p': \        GET_VARS \        ncount += pvsnfmt_int(&pinsertion, &nmax, *pfmt, flags, width, precision, prefix, &ap); \        state = STATE_NONE; \        break; \    CHECK_DOUBLE_TYPE \    case 'c': \        GET_VARS \        ncount += pvsnfmt_char(&pinsertion, &nmax, *pfmt, flags, width, precision, prefix, &ap); \        state = STATE_NONE; \        break; \    case 's': \        GET_VARS \        ncount += pvsnfmt_str(&pinsertion, &nmax, *pfmt, flags, width, precision, prefix, &ap); \        state = STATE_NONE; \        break; \    case 'n': \        *(va_arg(ap, int *)) = ncount; \        state = STATE_NONE; \        break;#define PUTCHAR(ch) \    if (nmax > 1) \    { \        *pinsertion++ = ch;  \        nmax--; \    } \    ncount++;int co_vsnprintf(char *str, long nmax, const char *format, va_list ap){    /* nmax gives total size of buffer including null     * null is ALWAYS added, even if buffer too small for format     * (contrary to C99)     */    char *pinsertion = str;    const char *pfmt = format;    int ncount = 0;     /* number of characters printed so far */    int state = STATE_NONE;    char flags = 0;    int width = 0;    int precision = 0;    char prefix = 0;    while (*pfmt)    {        switch (state)        {        case STATE_NONE:            switch (*pfmt)            {            case '%':                state = STATE_OPERATOR;                flags = FLAG_DEFAULT;                width = UNKNOWN_WIDTH;                precision = UNKNOWN_PRECISION;                prefix = '\0';                break;            default:                PUTCHAR(*pfmt)            }            break;        case STATE_OPERATOR:            switch (*pfmt)            {                CHECK_FLAG                CHECK_WIDTH                CHECK_PRECISION                CHECK_PREFIX                CHECK_TYPE            default:                PUTCHAR(*pfmt) /* Unknown format, just print it (e.g. "%%") */                state = STATE_NONE;            }            break;        case STATE_FLAG:            switch (*pfmt)            {                CHECK_FLAG                CHECK_WIDTH                CHECK_PRECISION                CHECK_PREFIX                CHECK_TYPE            }            break;        case STATE_WIDTH:            if (*pfmt >= '0' && *pfmt <= '9' && width != -1)            {                width = width * 10 + (*pfmt - '0');                break;            }            switch (*pfmt)            {                CHECK_PRECISION                CHECK_PREFIX                CHECK_TYPE            }            break;        case STATE_BEFORE_PRECISION:            if (*pfmt >= '0' && *pfmt <= '9')            {                precision = *pfmt - '0';                state = STATE_PRECISION;            }            else if (*pfmt == '*')            {                precision = VARIABLE_PRECISION;                state = STATE_PRECISION;            }            switch (*pfmt)            {                CHECK_PREFIX                CHECK_TYPE            }            break;        case STATE_PRECISION:            if (*pfmt >= '0' && *pfmt <= '9' && precision != -1)            {                precision = precision * 10 + (*pfmt - '0');                break;            }            switch (*pfmt)            {                CHECK_PREFIX                CHECK_TYPE            }            break;        case STATE_PREFIX:            switch (*pfmt)            {                CHECK_TYPE            }        } /* switch state */        pfmt++;    } /* while *pfmt */    /* Add null if there is room     * NOTE there is always room even if str doesn't fit unless     * nmax initially passed in as 0.  fmt functions take care to     * always leave at least one free byte at end.     */    if (nmax > 0)        *pinsertion = '\0';    return ncount;}static int pvsnfmt_char(char **pinsertion, long *nmax, const char fmt, int flags,                 int width, int precision, char prefix, va_list *ap){    if (*nmax > 1)    {        **pinsertion = (char) va_arg(*ap, int);        *pinsertion += 1;        *nmax -= 1;    }    return 1;}/* strnlen not available on all platforms.. maybe autoconf it? */static long pstrnlen(const char *s, long count){    const char *p = s;    while (count-- > 0 && *p)        p++;    return p - s;}/* Format a string into the buffer.  Parameters: *   *&pinsertion   Reference to pointer to buffer (can be reference to NULL) *   &nmax          Reference to size of buffer.  This is may be modified *   fmt            Format character ('s') *   flags          0 or combination of flags (see .h file for #defines) *   width          Width of string, as defined in printf *   precision      Precision of string, as defined in printf *   ap             Argument list */static int pvsnfmt_str(char **pinsertion, long *nmax, const char fmt, int flags,                int width, int precision, char prefix, va_list *ap){    const char *str = va_arg(*ap, const char *);    int nprinted;    int len;    int pad = 0;    /* Get width magnitude, set aligment flag */    if (width < 0)    {        width = -width;        flags |= FLAG_LEFT_ALIGN;    }    /* Truncate due to precision */    if (precision < 0)        len = co_strlen(str);    else        len = pstrnlen(str, precision);    /* Determine padding length */    if (width > len)        pad = width - len;    /* Exit if just counting (not printing) */    if (*nmax <= 1)        return len + pad;    /* If right-aligned, print pad */    if ( !(flags & FLAG_LEFT_ALIGN) )    {        char padchar;        if (flags & FLAG_ZERO_PAD)            padchar = '0';        else            padchar = ' ';        if ((int) *nmax - 1 < pad)            nprinted = *nmax - 1;        else            nprinted = pad;        memset(*pinsertion, padchar, nprinted);        *pinsertion += nprinted;        *nmax -= nprinted;    }    /* Output string */    if (*nmax <= 1)        nprinted = 0;    else if ((int) *nmax - 1 < len)        nprinted = *nmax - 1;    else        nprinted = len;    memcpy(*pinsertion, str, nprinted);    *pinsertion += nprinted;    *nmax -= nprinted;    /* If left aligned, add pad */    if (flags & FLAG_LEFT_ALIGN)    {        if (*nmax <= 1)            nprinted = 0;        else if ((int)*nmax - 1 < pad)            nprinted = *nmax - 1;        else            nprinted = pad;        memset(*pinsertion, ' ', nprinted);        *pinsertion += nprinted;        *nmax -= nprinted;    }    return len + pad; /* Return total length of pad + string even if some                       * was truncated                       */}/* Format an integer into the buffer.  Parameters: *   *&pinsertion   Reference to pointer to buffer (can be reference to NULL) *   &nmax          Reference to size of buffer.  This is may be modified *   fmt            Format character (one of "diuoxX") *   flags          0 or combination of flags (see .h file for #defines) *   width          Width of integer, as defined in printf *   precision      Precision of integer, as defined in printf *   ap             Argument list */static int pvsnfmt_int(char **pinsertion, long *nmax, char fmt, int flags,                int width, int precision, char prefix, va_list *ap){    long int number = 0;    unsigned long int unumber = 0;    char numbersigned = 1;    char iszero = 0; /* bool */    int base = 0;    int len = 0; /* length of number component (no sign or padding) */    char char10 = 0;    char sign = 0;    int widthpad = 0;    int addprefix = 0; /* optional "0x" = 2 */    int totallen = 0;    /* Stack used to hold digits, which are generated backwards     * and need to be popped off in the correct order     */    char numstack[22];    /* largest 64 bit number has 22 octal digits */    char *stackpos = numstack;#define PUSH(x) \    *stackpos++ = (char)(x)#define POP() \    *(--stackpos)    /* Retrieve value */    switch (prefix)    {    case 'h':        switch (fmt)        {            case 'd':            case 'i':                number = (signed short int) va_arg(*ap, int);                break;            case 'u':            case 'o':            case 'x':            case 'X':                unumber = (unsigned short int) va_arg(*ap, int);                numbersigned = 0;                break;             case 'p':                unumber = (unsigned long) va_arg(*ap, void *);                numbersigned = 0;        }        break;    case 'l':        switch (fmt)        {            case 'd':            case 'i':                number = va_arg(*ap, signed long int);                break;            case 'u':            case 'o':            case 'x':            case 'X':                unumber = va_arg(*ap, unsigned long int);                numbersigned = 0;                break;             case 'p':                unumber = (unsigned long) va_arg(*ap, void *);                numbersigned = numbersigned;        }        break;    default:        switch (fmt)        {            case 'd':            case 'i':                number = va_arg(*ap, signed int);                break;            case 'u':            case 'o':            case 'x':            case 'X':                unumber = va_arg(*ap, unsigned int);                numbersigned = 0;                break;             case 'p':                unumber = (unsigned long) va_arg(*ap, void *);                numbersigned = 0;         }    } /* switch fmt to retrieve number */    if (fmt == 'p')    {        fmt = 'x';        flags |= FLAG_HASH;    }    /* Discover base */    switch (fmt)    {        case 'd':        case 'i':        case 'u':            base = 10;            break;        case 'o':            base = 8;            break;        case 'X':            base = 16;            char10 = 'A';            break;        case 'x':            base = 16;            char10 = 'a';    }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91亚洲精品久久久蜜桃| 欧美三级日本三级少妇99| 又紧又大又爽精品一区二区| 在线播放一区二区三区| 风流少妇一区二区| 午夜精品久久久久| 国产精品传媒视频| 日韩欧美在线一区二区三区| 一本久道久久综合中文字幕| 国模娜娜一区二区三区| 亚洲午夜久久久久中文字幕久| 久久精品亚洲麻豆av一区二区 | 9色porny自拍视频一区二区| 亚洲午夜一区二区三区| 国产精品电影一区二区三区| 久久久久97国产精华液好用吗| 欧美精品丝袜中出| 色呦呦一区二区三区| 成人免费视频caoporn| 久久超碰97中文字幕| 亚洲超丰满肉感bbw| 久久激情综合网| 午夜一区二区三区视频| 亚洲精品一二三区| 中文字幕欧美日本乱码一线二线| 精品国产成人在线影院 | 韩国av一区二区三区| 日韩成人精品在线| 亚洲国产中文字幕在线视频综合| 综合在线观看色| 中文久久乱码一区二区| 久久蜜桃av一区二区天堂| 精品美女一区二区三区| 欧美xxxxxxxxx| 日韩欧美国产午夜精品| 日韩一卡二卡三卡四卡| 在线成人免费观看| 欧美日韩激情一区二区| 欧美午夜精品久久久久久超碰| 91色视频在线| 色综合久久六月婷婷中文字幕| 成人一区二区三区在线观看 | 欧美亚洲高清一区二区三区不卡| 91一区二区三区在线观看| 99久久久久久| 91老司机福利 在线| 日本黄色一区二区| 欧美三日本三级三级在线播放| 精品视频一区二区不卡| 欧美电影在线免费观看| 91精品国产入口| 欧美xxxx在线观看| 久久综合九色综合97_久久久| ww亚洲ww在线观看国产| 久久久精品日韩欧美| 中文一区二区在线观看| 最新成人av在线| 国产99久久久久| 99精品视频在线播放观看| 91国产福利在线| 欧美一二区视频| 久久久91精品国产一区二区三区| 国产精品私房写真福利视频| 亚洲免费看黄网站| 日韩精品电影在线观看| 韩国午夜理伦三级不卡影院| www.成人网.com| 欧美三电影在线| 欧美第一区第二区| 中文字幕成人av| 亚洲成人动漫在线观看| 久久电影国产免费久久电影| 成人午夜大片免费观看| 欧美午夜不卡视频| 欧美zozozo| 亚洲欧美另类久久久精品2019| 亚洲成a人v欧美综合天堂| 国精品**一区二区三区在线蜜桃| 99麻豆久久久国产精品免费| 欧美男女性生活在线直播观看| 精品国产麻豆免费人成网站| 亚洲欧美电影一区二区| 青青草97国产精品免费观看 | 精品午夜一区二区三区在线观看| av亚洲精华国产精华| 欧美日本在线一区| 日本一区二区动态图| 亚洲国产精品人人做人人爽| 欧美久久免费观看| 久久久久久电影| 亚洲国产成人tv| 成人手机在线视频| 91麻豆精品国产91久久久久久| 国产亚洲欧美日韩俺去了| 亚洲福利视频导航| 国产91在线观看| 在线综合+亚洲+欧美中文字幕| 国产精品少妇自拍| 日本一道高清亚洲日美韩| av在线播放不卡| 国产亚洲精品7777| 青青草国产精品97视觉盛宴| 色综合久久六月婷婷中文字幕| 久久久久久久久久久久久女国产乱| 亚洲伊人色欲综合网| 成人免费视频网站在线观看| 精品美女一区二区三区| 午夜精品一区二区三区免费视频| 99精品视频一区二区三区| 久久色.com| 美女一区二区视频| 欧美日韩国产高清一区二区| 亚洲免费高清视频在线| 成人精品小蝌蚪| 久久久国产午夜精品| 美女一区二区三区| 欧美男男青年gay1069videost| 亚洲激情图片一区| 成人免费的视频| 国产女同性恋一区二区| 韩日av一区二区| 欧美成人a∨高清免费观看| 性做久久久久久久免费看| 日本精品一区二区三区四区的功能| 国产麻豆精品久久一二三| 欧美一级一区二区| 婷婷开心激情综合| 欧美日韩在线播放三区| 亚洲一二三级电影| 日本韩国欧美在线| 亚洲精品高清在线| 91久久人澡人人添人人爽欧美| 国产精品精品国产色婷婷| 国产不卡视频一区二区三区| 国产日韩精品一区二区浪潮av| 国产一区在线精品| 2020国产精品自拍| 国产一区二区三区精品视频| 欧美成人一级视频| 激情欧美一区二区| 2020国产精品久久精品美国| 国产乱人伦精品一区二区在线观看 | 国产精品三级在线观看| 国产99久久久国产精品| 国产精品卡一卡二卡三| 99国产欧美久久久精品| 亚洲欧美一区二区三区极速播放| 95精品视频在线| 亚洲在线免费播放| 欧美精品tushy高清| 全部av―极品视觉盛宴亚洲| 精品国产一区二区三区av性色 | 国产精品911| 1区2区3区精品视频| 色噜噜狠狠成人中文综合| 五月天久久比比资源色| 亚洲国产一区二区视频| 欧美日韩国产一级片| 美国毛片一区二区| 中文字幕免费观看一区| 91黄色激情网站| 蜜桃91丨九色丨蝌蚪91桃色| 久久欧美一区二区| av午夜一区麻豆| 午夜免费欧美电影| 26uuu另类欧美亚洲曰本| aaa国产一区| 日韩精品欧美精品| 国产亚洲精品7777| 欧美在线三级电影| 蜜桃91丨九色丨蝌蚪91桃色| 国产精品人人做人人爽人人添| 色婷婷av一区二区三区大白胸| 亚洲电影在线播放| 精品国产乱码久久久久久牛牛| 成人av综合一区| 亚洲成av人片www| 国产日产欧美精品一区二区三区| 91老师片黄在线观看| 奇米色一区二区三区四区| 国产精品久久毛片av大全日韩| 欧美日韩成人综合在线一区二区 | 91麻豆精品秘密| 久久福利资源站| 亚洲一区二区视频| 久久综合久久综合九色| 在线亚洲高清视频| 久久99国产精品免费| 亚洲免费观看高清完整版在线观看熊 | 亚洲欧美日韩久久精品| 日韩精品一区二区三区三区免费| av一区二区三区四区| 麻豆freexxxx性91精品| 亚洲激情中文1区| 久久影院午夜片一区| 欧美日韩视频在线第一区 | 亚洲va国产va欧美va观看| 久久女同互慰一区二区三区| 欧美挠脚心视频网站| 91麻豆福利精品推荐|