Re: pgsql: Fix pg_size_pretty() to avoid overflow for inputs close to INT64

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: pgsql: Fix pg_size_pretty() to avoid overflow for inputs close to INT64
Дата
Msg-id 12933.1304022610@sss.pgh.pa.us
обсуждение исходный текст
Ответ на Re: pgsql: Fix pg_size_pretty() to avoid overflow for inputs close to INT64  (Dave Page <dpage@postgresql.org>)
Ответы Re: pgsql: Fix pg_size_pretty() to avoid overflow for inputs close to INT64  (Dave Page <dpage@postgresql.org>)
Список pgsql-committers
Please see if the attached version works.

            regards, tom lane


Datum
pg_size_pretty(PG_FUNCTION_ARGS)
{
    int64        size = PG_GETARG_INT64(0);
    char        buf[64];
    int64        limit = 10 * 1024;
    int64        limit2 = limit * 2 - 1;

    if (size < limit)
        snprintf(buf, sizeof(buf), INT64_FORMAT " bytes", size);
    else
    {
        size >>= 9;                /* keep one extra bit for rounding */
        if (size < limit2)
            snprintf(buf, sizeof(buf), INT64_FORMAT " kB",
                     (size + 1) / 2);
        else
        {
            size >>= 10;
            if (size < limit2)
                snprintf(buf, sizeof(buf), INT64_FORMAT " MB",
                         (size + 1) / 2);
            else
            {
                size >>= 10;
                if (size < limit2)
                    snprintf(buf, sizeof(buf), INT64_FORMAT " GB",
                             (size + 1) / 2);
                else
                {
                    size >>= 10;
                    snprintf(buf, sizeof(buf), INT64_FORMAT " TB",
                             (size + 1) / 2);
                }
            }
        }
    }

    PG_RETURN_TEXT_P(cstring_to_text(buf));
}

В списке pgsql-committers по дате отправления:

Предыдущее
От: Dave Page
Дата:
Сообщение: Re: pgsql: Fix pg_size_pretty() to avoid overflow for inputs close to INT64
Следующее
От: Andrew Dunstan
Дата:
Сообщение: pgsql: Use non-literal format for possibly non-standard strftime format