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
|
| Список | 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 по дате отправления: