18
18
#include <limits.h>
19
19
#include <ctype.h>
20
20
21
- /*
22
- * Defining INT64_MIN as -9223372036854775808LL may not work; the compiler's
23
- * tokenizer may see - as a separate token and then be unable to view
24
- * 9223372036854775808 as a number. This is the standard workaround for that
25
- * problem.
26
- */
27
- #ifndef INT64_MIN
28
- #define INT64_MIN (-9223372036854775807LL - 1)
29
- #endif
30
-
31
21
#include "utils/builtins.h"
32
22
33
23
/*
@@ -127,7 +117,7 @@ pg_atoi(char *s, int size, int c)
127
117
void
128
118
pg_itoa (int16 i , char * a )
129
119
{
130
- pg_ltoa ((int32 )i , a );
120
+ pg_ltoa ((int32 ) i , a );
131
121
}
132
122
133
123
/*
@@ -139,14 +129,14 @@ pg_itoa(int16 i, char *a)
139
129
void
140
130
pg_ltoa (int32 value , char * a )
141
131
{
142
- char * start = a ;
143
- bool neg = false;
132
+ char * start = a ;
133
+ bool neg = false;
144
134
145
135
/*
146
136
* Avoid problems with the most negative integer not being representable
147
137
* as a positive integer.
148
138
*/
149
- if (value == INT_MIN )
139
+ if (value == ( -2147483647 - 1 ) )
150
140
{
151
141
memcpy (a , "-2147483648" , 12 );
152
142
return ;
@@ -157,47 +147,50 @@ pg_ltoa(int32 value, char *a)
157
147
neg = true;
158
148
}
159
149
160
- /* Compute the result backwards. */
150
+ /* Compute the result string backwards. */
161
151
do
162
152
{
163
- int32 remainder ;
164
- int32 oldval = value ;
153
+ int32 remainder ;
154
+ int32 oldval = value ;
155
+
165
156
value /= 10 ;
166
157
remainder = oldval - value * 10 ;
167
158
* a ++ = '0' + remainder ;
168
159
} while (value != 0 );
160
+
169
161
if (neg )
170
162
* a ++ = '-' ;
171
163
172
- /* Add trailing NUL byte. */
164
+ /* Add trailing NUL byte, and back up 'a' to the last character . */
173
165
* a -- = '\0' ;
174
166
175
- /* reverse string */
167
+ /* Reverse string. */
176
168
while (start < a )
177
169
{
178
- char swap = * start ;
170
+ char swap = * start ;
171
+
179
172
* start ++ = * a ;
180
173
* a -- = swap ;
181
174
}
182
175
}
183
176
184
177
/*
185
- * pg_lltoa: convert a signed 64bit integer to its string representation
178
+ * pg_lltoa: convert a signed 64-bit integer to its string representation
186
179
*
187
180
* Caller must ensure that 'a' points to enough memory to hold the result
188
181
* (at least MAXINT8LEN+1 bytes, counting a leading sign and trailing NUL).
189
182
*/
190
183
void
191
184
pg_lltoa (int64 value , char * a )
192
185
{
193
- char * start = a ;
194
- bool neg = false;
186
+ char * start = a ;
187
+ bool neg = false;
195
188
196
189
/*
197
190
* Avoid problems with the most negative integer not being representable
198
191
* as a positive integer.
199
192
*/
200
- if (value == INT64_MIN )
193
+ if (value == ( - INT64CONST ( 0x7FFFFFFFFFFFFFFF ) - 1 ) )
201
194
{
202
195
memcpy (a , "-9223372036854775808" , 21 );
203
196
return ;
@@ -208,11 +201,12 @@ pg_lltoa(int64 value, char *a)
208
201
neg = true;
209
202
}
210
203
211
- /* Build the string by computing the wanted string backwards. */
204
+ /* Compute the result string backwards. */
212
205
do
213
206
{
214
- int64 remainder ;
215
- int64 oldval = value ;
207
+ int64 remainder ;
208
+ int64 oldval = value ;
209
+
216
210
value /= 10 ;
217
211
remainder = oldval - value * 10 ;
218
212
* a ++ = '0' + remainder ;
@@ -221,13 +215,14 @@ pg_lltoa(int64 value, char *a)
221
215
if (neg )
222
216
* a ++ = '-' ;
223
217
224
- /* Add trailing NUL byte. */
218
+ /* Add trailing NUL byte, and back up 'a' to the last character . */
225
219
* a -- = '\0' ;
226
220
227
221
/* Reverse string. */
228
222
while (start < a )
229
223
{
230
- char swap = * start ;
224
+ char swap = * start ;
225
+
231
226
* start ++ = * a ;
232
227
* a -- = swap ;
233
228
}
0 commit comments