if (fplace == 20)
if (fplace == sizeof fplace)
fmtfp(    char **sbuffer,    char **buffer,    size_t *currlen,    size_t *maxlen,    LDOUBLE fvalue,    int min,    int max,    int flags){    int signvalue = 0;    LDOUBLE ufvalue;    char iconvert[20];    char fconvert[20];    int iplace = 0;    int fplace = 0;    int padlen = 0;    int zpadlen = 0;    int caps = 0;    long intpart;    long fracpart;    if (max < 0)        max = 6;    ufvalue = abs_val(fvalue);    if (fvalue < 0)        signvalue = '-';    else if (flags & DP_F_PLUS)        signvalue = '+';    else if (flags & DP_F_SPACE)        signvalue = ' ';    intpart = (long)ufvalue;    /* sorry, we only support 9 digits past the decimal because of our       conversion method */    if (max > 9)        max = 9;    /* we "cheat" by converting the fractional part to integer by       multiplying by a factor of 10 */    fracpart = roundv((pow10(max)) * (ufvalue - intpart));    if (fracpart >= pow10(max)) {        intpart++;        fracpart -= (long)pow10(max);    }    /* convert integer part */    do {        iconvert[iplace++] =            (caps ? "0123456789ABCDEF"              : "0123456789abcdef")[intpart % 10];        intpart = (intpart / 10);    } while (intpart && (iplace < 20));    if (iplace == 20)        iplace--;    iconvert[iplace] = 0;    /* convert fractional part */    do {        fconvert[fplace++] =            (caps ? "0123456789ABCDEF"              : "0123456789abcdef")[fracpart % 10];        fracpart = (fracpart / 10);    } while (fplace < max);    if (fplace == 20)        fplace--;    fconvert[fplace] = 0;    /* -1 for decimal point, another -1 if we are printing a sign */    padlen = min - iplace - max - 1 - ((signvalue) ? 1 : 0);    zpadlen = max - fplace;    if (zpadlen < 0)        zpadlen = 0;    if (padlen < 0)        padlen = 0;    if (flags & DP_F_MINUS)        padlen = -padlen;    if ((flags & DP_F_ZERO) && (padlen > 0)) {        if (signvalue) {            doapr_outch(sbuffer, buffer, currlen, maxlen, signvalue);            --padlen;            signvalue = 0;        }        while (padlen > 0) {            doapr_outch(sbuffer, buffer, currlen, maxlen, '0');            --padlen;        }    }    while (padlen > 0) {        doapr_outch(sbuffer, buffer, currlen, maxlen, ' ');        --padlen;    }    if (signvalue)        doapr_outch(sbuffer, buffer, currlen, maxlen, signvalue);    while (iplace > 0)        doapr_outch(sbuffer, buffer, currlen, maxlen, iconvert[--iplace]);    /*     * Decimal point. This should probably use locale to find the correct     * char to print out.     */    if (max > 0) {        doapr_outch(sbuffer, buffer, currlen, maxlen, '.');        while (fplace > 0)            doapr_outch(sbuffer, buffer, currlen, maxlen, fconvert[--fplace]);    }    while (zpadlen > 0) {        doapr_outch(sbuffer, buffer, currlen, maxlen, '0');        --zpadlen;    }    while (padlen < 0) {        doapr_outch(sbuffer, buffer, currlen, maxlen, ' ');        ++padlen;    }}