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

📄 jsprf.c

📁 java script test programing source code
💻 C
📖 第 1 页 / 共 3 页
字号:
          case 'u':                             /* unsigned decimal */            radix = 10;            type |= 1;            goto fetch_and_convert;          case 'x':                             /* unsigned hex */            radix = 16;            type |= 1;            goto fetch_and_convert;          case 'X':                             /* unsigned HEX */            radix = 16;            hexp = HEX;            type |= 1;            goto fetch_and_convert;          fetch_and_convert:            switch (type) {              case TYPE_INT16:                u.l = va_arg(ap, int);                if (u.l < 0) {                    u.l = -u.l;                    flags |= FLAG_NEG;                }                goto do_long;              case TYPE_UINT16:                u.l = va_arg(ap, int) & 0xffff;                goto do_long;              case TYPE_INTN:                u.l = va_arg(ap, int);                if (u.l < 0) {                    u.l = -u.l;                    flags |= FLAG_NEG;                }                goto do_long;              case TYPE_UINTN:                u.l = (long)va_arg(ap, unsigned int);                goto do_long;              case TYPE_INT32:                u.l = va_arg(ap, JSInt32);                if (u.l < 0) {                    u.l = -u.l;                    flags |= FLAG_NEG;                }                goto do_long;              case TYPE_UINT32:                u.l = (long)va_arg(ap, JSUint32);              do_long:                rv = cvt_l(ss, u.l, width, prec, radix, type, flags, hexp);                if (rv < 0) {                    return rv;                }                break;              case TYPE_INT64:                u.ll = va_arg(ap, JSInt64);                if (!JSLL_GE_ZERO(u.ll)) {                    JSLL_NEG(u.ll, u.ll);                    flags |= FLAG_NEG;                }                goto do_longlong;              case TYPE_UINT64:                u.ll = va_arg(ap, JSUint64);              do_longlong:                rv = cvt_ll(ss, u.ll, width, prec, radix, type, flags, hexp);                if (rv < 0) {                    return rv;                }                break;            }            break;          case 'e':          case 'E':          case 'f':          case 'g':            u.d = va_arg(ap, double);            if( nas != NULL ){                i = fmt - dolPt;                if( i < (int)sizeof( pattern ) ){                    pattern[0] = '%';                    memcpy( &pattern[1], dolPt, (size_t)i );                    rv = cvt_f(ss, u.d, pattern, &pattern[i+1] );                }            } else                rv = cvt_f(ss, u.d, fmt0, fmt);            if (rv < 0) {                return rv;            }            break;          case 'c':            if ((flags & FLAG_LEFT) == 0) {                while (width-- > 1) {                    rv = (*ss->stuff)(ss, " ", 1);                    if (rv < 0) {                        return rv;                    }                }            }            switch (type) {              case TYPE_INT16:                /* Treat %hc as %c if JS_C_STRINGS_ARE_UTF8 is undefined. */#ifdef JS_C_STRINGS_ARE_UTF8                u.wch = va_arg(ap, int);                utf8len = js_OneUcs4ToUtf8Char (utf8buf, u.wch);                rv = (*ss->stuff)(ss, utf8buf, utf8len);                break;#endif              case TYPE_INTN:                u.ch = va_arg(ap, int);                rv = (*ss->stuff)(ss, &u.ch, 1);                break;            }            if (rv < 0) {                return rv;            }            if (flags & FLAG_LEFT) {                while (width-- > 1) {                    rv = (*ss->stuff)(ss, " ", 1);                    if (rv < 0) {                        return rv;                    }                }            }            break;          case 'p':            if (sizeof(void *) == sizeof(JSInt32)) {                type = TYPE_UINT32;            } else if (sizeof(void *) == sizeof(JSInt64)) {                type = TYPE_UINT64;            } else if (sizeof(void *) == sizeof(int)) {                type = TYPE_UINTN;            } else {                JS_ASSERT(0);                break;            }            radix = 16;            goto fetch_and_convert;#if 0          case 'C':          case 'S':          case 'E':          case 'G':            /* XXX not supported I suppose */            JS_ASSERT(0);            break;#endif          case 's':            if(type == TYPE_INT16) {                /*                 * This would do a simple string/byte conversion                 * if JS_C_STRINGS_ARE_UTF8 is not defined.                 */                u.ws = va_arg(ap, const jschar*);                rv = cvt_ws(ss, u.ws, width, prec, flags);            } else {                u.s = va_arg(ap, const char*);                rv = cvt_s(ss, u.s, width, prec, flags);            }            if (rv < 0) {                return rv;            }            break;          case 'n':            u.ip = va_arg(ap, int*);            if (u.ip) {                *u.ip = ss->cur - ss->base;            }            break;          default:            /* Not a % token after all... skip it */#if 0            JS_ASSERT(0);#endif            rv = (*ss->stuff)(ss, "%", 1);            if (rv < 0) {                return rv;            }            rv = (*ss->stuff)(ss, fmt - 1, 1);            if (rv < 0) {                return rv;            }        }    }    /* Stuff trailing NUL */    rv = (*ss->stuff)(ss, "\0", 1);    if( nas && ( nas != nasArray ) ){        free( nas );    }    return rv;}/************************************************************************/static int FuncStuff(SprintfState *ss, const char *sp, JSUint32 len){    int rv;    rv = (*ss->func)(ss->arg, sp, len);    if (rv < 0) {        return rv;    }    ss->maxlen += len;    return 0;}JS_PUBLIC_API(JSUint32) JS_sxprintf(JSStuffFunc func, void *arg,                                    const char *fmt, ...){    va_list ap;    int rv;    va_start(ap, fmt);    rv = JS_vsxprintf(func, arg, fmt, ap);    va_end(ap);    return rv;}JS_PUBLIC_API(JSUint32) JS_vsxprintf(JSStuffFunc func, void *arg,                                     const char *fmt, va_list ap){    SprintfState ss;    int rv;    ss.stuff = FuncStuff;    ss.func = func;    ss.arg = arg;    ss.maxlen = 0;    rv = dosprintf(&ss, fmt, ap);    return (rv < 0) ? (JSUint32)-1 : ss.maxlen;}/*** Stuff routine that automatically grows the malloc'd output buffer** before it overflows.*/static int GrowStuff(SprintfState *ss, const char *sp, JSUint32 len){    ptrdiff_t off;    char *newbase;    JSUint32 newlen;    off = ss->cur - ss->base;    if (off + len >= ss->maxlen) {        /* Grow the buffer */        newlen = ss->maxlen + ((len > 32) ? len : 32);        if (ss->base) {            newbase = (char*) realloc(ss->base, newlen);        } else {            newbase = (char*) malloc(newlen);        }        if (!newbase) {            /* Ran out of memory */            return -1;        }        ss->base = newbase;        ss->maxlen = newlen;        ss->cur = ss->base + off;    }    /* Copy data */    while (len) {        --len;        *ss->cur++ = *sp++;    }    JS_ASSERT((JSUint32)(ss->cur - ss->base) <= ss->maxlen);    return 0;}/*** sprintf into a malloc'd buffer*/JS_PUBLIC_API(char *) JS_smprintf(const char *fmt, ...){    va_list ap;    char *rv;    va_start(ap, fmt);    rv = JS_vsmprintf(fmt, ap);    va_end(ap);    return rv;}/*** Free memory allocated, for the caller, by JS_smprintf*/JS_PUBLIC_API(void) JS_smprintf_free(char *mem){        free(mem);}JS_PUBLIC_API(char *) JS_vsmprintf(const char *fmt, va_list ap){    SprintfState ss;    int rv;    ss.stuff = GrowStuff;    ss.base = 0;    ss.cur = 0;    ss.maxlen = 0;    rv = dosprintf(&ss, fmt, ap);    if (rv < 0) {        if (ss.base) {            free(ss.base);        }        return 0;    }    return ss.base;}/*** Stuff routine that discards overflow data*/static int LimitStuff(SprintfState *ss, const char *sp, JSUint32 len){    JSUint32 limit = ss->maxlen - (ss->cur - ss->base);    if (len > limit) {        len = limit;    }    while (len) {        --len;        *ss->cur++ = *sp++;    }    return 0;}/*** sprintf into a fixed size buffer. Make sure there is a NUL at the end** when finished.*/JS_PUBLIC_API(JSUint32) JS_snprintf(char *out, JSUint32 outlen, const char *fmt, ...){    va_list ap;    int rv;    JS_ASSERT((JSInt32)outlen > 0);    if ((JSInt32)outlen <= 0) {        return 0;    }    va_start(ap, fmt);    rv = JS_vsnprintf(out, outlen, fmt, ap);    va_end(ap);    return rv;}JS_PUBLIC_API(JSUint32) JS_vsnprintf(char *out, JSUint32 outlen,const char *fmt,                                  va_list ap){    SprintfState ss;    JSUint32 n;    JS_ASSERT((JSInt32)outlen > 0);    if ((JSInt32)outlen <= 0) {        return 0;    }    ss.stuff = LimitStuff;    ss.base = out;    ss.cur = out;    ss.maxlen = outlen;    (void) dosprintf(&ss, fmt, ap);    /* If we added chars, and we didn't append a null, do it now. */    if( (ss.cur != ss.base) && (ss.cur[-1] != '\0') )        ss.cur[-1] = '\0';    n = ss.cur - ss.base;    return n ? n - 1 : n;}JS_PUBLIC_API(char *) JS_sprintf_append(char *last, const char *fmt, ...){    va_list ap;    char *rv;    va_start(ap, fmt);    rv = JS_vsprintf_append(last, fmt, ap);    va_end(ap);    return rv;}JS_PUBLIC_API(char *) JS_vsprintf_append(char *last, const char *fmt, va_list ap){    SprintfState ss;    int rv;    ss.stuff = GrowStuff;    if (last) {        int lastlen = strlen(last);        ss.base = last;        ss.cur = last + lastlen;        ss.maxlen = lastlen;    } else {        ss.base = 0;        ss.cur = 0;        ss.maxlen = 0;    }    rv = dosprintf(&ss, fmt, ap);    if (rv < 0) {        if (ss.base) {            free(ss.base);        }        return 0;    }    return ss.base;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -