VirtualBox

Ignore:
Timestamp:
Aug 29, 2019 11:58:21 AM (5 years ago)
Author:
vboxsync
Message:

IPRT/string.h: Added added two more human readable size formatting variants for skipping the 'i' in 'KiB' and such. Made the human readable size formatting use the space format flag to specify a space between the value and the unit.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/common/string/strformatrt.cpp

    r76553 r80496  
    989989#endif /* IN_RING3 */
    990990
     991                    /*
     992                     * Human readable sizes.
     993                     */
    991994                    case 'c':
    992995                    case 'u':
     
    9971000                        uint64_t    uFraction = 0;
    9981001                        const char *pszPrefix = NULL;
    999                         unsigned    cchFixedPart;
    10001002                        char        ch2 = *(*ppszFormat)++;
    1001                         AssertMsgReturn(ch2 == 'b' || ch2 == 'i', ("invalid type '%.10s'!\n", pszFormatOrg), 0);
     1003                        AssertMsgReturn(ch2 == 'b' || ch2 == 'B' || ch2 == 'i', ("invalid type '%.10s'!\n", pszFormatOrg), 0);
    10021004                        uValue = va_arg(*pArgs, uint64_t);
    10031005
    10041006                        if (!(fFlags & RTSTR_F_PRECISION))
    1005                             cchPrecision = 1;
     1007                            cchPrecision = 1; /** @todo default to flexible decimal point. */
    10061008                        else if (cchPrecision > 3)
    10071009                            cchPrecision = 3;
     
    10091011                            cchPrecision = 0;
    10101012
    1011                         cchFixedPart = cchPrecision + (cchPrecision != 0) + (ch == 'c');
    1012 
    1013                         if (ch2 == 'b')
     1013                        if (ch2 == 'b' || ch2 == 'B')
    10141014                        {
    10151015                            static const struct
     
    10401040                                    uValue  >>= s_aUnits[i].cShift;
    10411041                                    pszPrefix = s_aUnits[i].pszPrefix;
    1042                                     cchFixedPart += 2;
    10431042                                    break;
    10441043                                }
     
    10751074                                    }
    10761075                                    pszPrefix = s_aUnits[i].pszPrefix;
    1077                                     cchFixedPart += 1;
    10781076                                    break;
    10791077                                }
     
    10891087                                                         RTSTR_F_ZEROPAD | RTSTR_F_WIDTH);
    10901088                            }
     1089                            if (fFlags & RTSTR_F_BLANK)
     1090                                szBuf[cchBuf++] = ' ';
    10911091                            szBuf[cchBuf++] = *pszPrefix++;
    1092                             if (*pszPrefix)
     1092                            if (*pszPrefix && ch2 != 'B')
    10931093                                szBuf[cchBuf++] = *pszPrefix;
    10941094                        }
     1095                        else if (fFlags & RTSTR_F_BLANK)
     1096                            szBuf[cchBuf++] = ' ';
    10951097                        if (ch == 'c')
    10961098                            szBuf[cchBuf++] = 'B';
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette