mirror of
https://github.com/postgres/postgres.git
synced 2025-04-21 12:05:57 +03:00
Avoid failures in cash_out and cash_words for INT_MIN.
Also, 'fourty' -> 'forty'.
This commit is contained in:
parent
cceca2ca26
commit
c30ef871cd
@ -9,7 +9,7 @@
|
|||||||
* workings can be found in the book "Software Solutions in C" by
|
* workings can be found in the book "Software Solutions in C" by
|
||||||
* Dale Schumacher, Academic Press, ISBN: 0-12-632360-7.
|
* Dale Schumacher, Academic Press, ISBN: 0-12-632360-7.
|
||||||
*
|
*
|
||||||
* $Header: /cvsroot/pgsql/src/backend/utils/adt/cash.c,v 1.51 2001/10/25 05:49:43 momjian Exp $
|
* $Header: /cvsroot/pgsql/src/backend/utils/adt/cash.c,v 1.51.2.1 2002/02/19 22:19:42 tgl Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "postgres.h"
|
#include "postgres.h"
|
||||||
@ -287,7 +287,7 @@ cash_out(PG_FUNCTION_ARGS)
|
|||||||
if (value < 0)
|
if (value < 0)
|
||||||
{
|
{
|
||||||
minus = 1;
|
minus = 1;
|
||||||
value *= -1;
|
value = -value;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* allow for trailing negative strings */
|
/* allow for trailing negative strings */
|
||||||
@ -301,8 +301,8 @@ cash_out(PG_FUNCTION_ARGS)
|
|||||||
else if (comma && count % (mon_group + 1) == comma_position)
|
else if (comma && count % (mon_group + 1) == comma_position)
|
||||||
buf[count--] = comma;
|
buf[count--] = comma;
|
||||||
|
|
||||||
buf[count--] = (value % 10) + '0';
|
buf[count--] = ((unsigned int) value % 10) + '0';
|
||||||
value /= 10;
|
value = ((unsigned int) value) / 10;
|
||||||
}
|
}
|
||||||
|
|
||||||
strncpy((buf + count - strlen(csymbol) + 1), csymbol, strlen(csymbol));
|
strncpy((buf + count - strlen(csymbol) + 1), csymbol, strlen(csymbol));
|
||||||
@ -664,6 +664,7 @@ Datum
|
|||||||
cash_words(PG_FUNCTION_ARGS)
|
cash_words(PG_FUNCTION_ARGS)
|
||||||
{
|
{
|
||||||
Cash value = PG_GETARG_CASH(0);
|
Cash value = PG_GETARG_CASH(0);
|
||||||
|
unsigned int val;
|
||||||
char buf[128];
|
char buf[128];
|
||||||
char *p = buf;
|
char *p = buf;
|
||||||
Cash m0;
|
Cash m0;
|
||||||
@ -682,10 +683,13 @@ cash_words(PG_FUNCTION_ARGS)
|
|||||||
else
|
else
|
||||||
buf[0] = '\0';
|
buf[0] = '\0';
|
||||||
|
|
||||||
m0 = value % 100; /* cents */
|
/* Now treat as unsigned, to avoid trouble at INT_MIN */
|
||||||
m1 = (value / 100) % 1000; /* hundreds */
|
val = (unsigned int) value;
|
||||||
m2 = (value / 100000) % 1000; /* thousands */
|
|
||||||
m3 = value / 100000000 % 1000; /* millions */
|
m0 = val % 100; /* cents */
|
||||||
|
m1 = (val / 100) % 1000; /* hundreds */
|
||||||
|
m2 = (val / 100000) % 1000; /* thousands */
|
||||||
|
m3 = val / 100000000 % 1000; /* millions */
|
||||||
|
|
||||||
if (m3)
|
if (m3)
|
||||||
{
|
{
|
||||||
@ -705,7 +709,7 @@ cash_words(PG_FUNCTION_ARGS)
|
|||||||
if (!*p)
|
if (!*p)
|
||||||
strcat(buf, "zero");
|
strcat(buf, "zero");
|
||||||
|
|
||||||
strcat(buf, (int) (value / 100) == 1 ? " dollar and " : " dollars and ");
|
strcat(buf, (val / 100) == 1 ? " dollar and " : " dollars and ");
|
||||||
strcat(buf, num_word(m0));
|
strcat(buf, num_word(m0));
|
||||||
strcat(buf, m0 == 1 ? " cent" : " cents");
|
strcat(buf, m0 == 1 ? " cent" : " cents");
|
||||||
|
|
||||||
@ -733,7 +737,7 @@ num_word(Cash value)
|
|||||||
"zero", "one", "two", "three", "four", "five", "six", "seven",
|
"zero", "one", "two", "three", "four", "five", "six", "seven",
|
||||||
"eight", "nine", "ten", "eleven", "twelve", "thirteen", "fourteen",
|
"eight", "nine", "ten", "eleven", "twelve", "thirteen", "fourteen",
|
||||||
"fifteen", "sixteen", "seventeen", "eighteen", "nineteen", "twenty",
|
"fifteen", "sixteen", "seventeen", "eighteen", "nineteen", "twenty",
|
||||||
"thirty", "fourty", "fifty", "sixty", "seventy", "eighty", "ninety"
|
"thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"
|
||||||
};
|
};
|
||||||
const char **big = small + 18;
|
const char **big = small + 18;
|
||||||
int tu = value % 100;
|
int tu = value % 100;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user