ReactOS 0.4.15-dev-7842-g558ab78
itoa.c File Reference
#include <precomp.h>
Include dependency graph for itoa.c:

Go to the source code of this file.

Functions

char *CDECL _i64toa (__int64 value, char *string, int radix)
 
int CDECL _i64toa_s (__int64 value, char *str, size_t size, int radix)
 
char *CDECL _ui64toa (unsigned __int64 value, char *string, int radix)
 
int CDECL _ui64toa_s (unsigned __int64 value, char *str, size_t size, int radix)
 
int CDECL _itoa_s (int value, char *str, size_t size, int radix)
 
char *CDECL _itoa (int value, char *string, int radix)
 
char *CDECL _ltoa (long value, char *string, int radix)
 
int CDECL _ltoa_s (long value, char *str, size_t size, int radix)
 
char *CDECL _ultoa (unsigned long value, char *string, int radix)
 

Function Documentation

◆ _i64toa()

char *CDECL _i64toa ( __int64  value,
char string,
int  radix 
)

Definition at line 10 of file itoa.c.

11{
13 int negative;
14 char buffer[65];
15 char *pos;
16 int digit;
17
18 if (value < 0 && radix == 10) {
19 negative = 1;
20 val = -value;
21 } else {
22 negative = 0;
23 val = value;
24 } /* if */
25
26 pos = &buffer[64];
27 *pos = '\0';
28
29 do {
30 digit = val % radix;
31 val = val / radix;
32 if (digit < 10) {
33 *--pos = '0' + digit;
34 } else {
35 *--pos = 'a' + digit - 10;
36 } /* if */
37 } while (val != 0L);
38
39 if (negative) {
40 *--pos = '-';
41 } /* if */
42
43 memcpy(string, pos, &buffer[64] - pos + 1);
44 return string;
45}
GLuint buffer
Definition: glext.h:5915
GLuint GLfloat * val
Definition: glext.h:7180
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
char string[160]
Definition: util.h:11
#define L(x)
Definition: ntvdm.h:50
uint64_t ULONGLONG
Definition: typedefs.h:67
Definition: pdh_main.c:94

Referenced by lltoa().

◆ _i64toa_s()

int CDECL _i64toa_s ( __int64  value,
char str,
size_t  size,
int  radix 
)

Definition at line 50 of file itoa.c.

51{
52 unsigned __int64 val;
53 unsigned int digit;
54 int is_negative;
55 char buffer[65], *pos;
56 size_t len;
57
58 if (!MSVCRT_CHECK_PMT(str != NULL) || !MSVCRT_CHECK_PMT(size > 0) ||
59 !MSVCRT_CHECK_PMT(radix >= 2) || !MSVCRT_CHECK_PMT(radix <= 36))
60 {
61 if (str && size)
62 str[0] = '\0';
63#ifndef _LIBCNT_
64 *_errno() = EINVAL;
65#endif
66 return EINVAL;
67 }
68
69 if (value < 0 && radix == 10)
70 {
71 is_negative = 1;
72 val = -value;
73 }
74 else
75 {
76 is_negative = 0;
77 val = value;
78 }
79
80 pos = buffer + 64;
81 *pos = '\0';
82
83 do
84 {
85 digit = val % radix;
86 val /= radix;
87
88 if (digit < 10)
89 *--pos = '0' + digit;
90 else
91 *--pos = 'a' + digit - 10;
92 }
93 while (val != 0);
94
95 if (is_negative)
96 *--pos = '-';
97
98 len = buffer + 65 - pos;
99 if (len > size)
100 {
101 size_t i;
102 char *p = str;
103
104 /* Copy the temporary buffer backwards up to the available number of
105 * characters. Don't copy the negative sign if present. */
106
107 if (is_negative)
108 {
109 p++;
110 size--;
111 }
112
113 for (pos = buffer + 63, i = 0; i < size; i++)
114 *p++ = *pos--;
115
116 str[0] = '\0';
117 MSVCRT_INVALID_PMT("str[size] is too small", ERANGE);
118 return ERANGE;
119 }
120
121 memcpy(str, pos, len);
122 return 0;
123}
#define EINVAL
Definition: acclib.h:90
#define ERANGE
Definition: acclib.h:92
#define __int64
Definition: basetyps.h:16
#define NULL
Definition: types.h:112
GLsizeiptr size
Definition: glext.h:5919
GLfloat GLfloat p
Definition: glext.h:8902
GLenum GLsizei len
Definition: glext.h:6722
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define MSVCRT_INVALID_PMT(x)
Definition: mbstowcs_s.c:25
#define MSVCRT_CHECK_PMT(x)
Definition: mbstowcs_s.c:26
const WCHAR * str
_CRTIMP int *__cdecl _errno(void)
Definition: errno.c:19

◆ _itoa()

char *CDECL _itoa ( int  value,
char string,
int  radix 
)

Definition at line 205 of file itoa.c.

206{
207 return _ltoa(value, string, radix);
208}
char *CDECL _ltoa(long value, char *string, int radix)
Definition: itoa.c:215

◆ _itoa_s()

int CDECL _itoa_s ( int  value,
char str,
size_t  size,
int  radix 
)

Definition at line 195 of file itoa.c.

196{
197 return _ltoa_s(value, str, size, radix);
198}
int CDECL _ltoa_s(long value, char *str, size_t size, int radix)
Definition: itoa.c:255

◆ _ltoa()

char *CDECL _ltoa ( long  value,
char string,
int  radix 
)

Definition at line 215 of file itoa.c.

216{
217 unsigned long val;
218 int negative;
219 char buffer[33];
220 char *pos;
221 int digit;
222
223 if (value < 0 && radix == 10) {
224 negative = 1;
225 val = -value;
226 } else {
227 negative = 0;
228 val = value;
229 } /* if */
230
231 pos = &buffer[32];
232 *pos = '\0';
233
234 do {
235 digit = val % radix;
236 val = val / radix;
237 if (digit < 10) {
238 *--pos = '0' + digit;
239 } else {
240 *--pos = 'a' + digit - 10;
241 } /* if */
242 } while (val != 0L);
243
244 if (negative) {
245 *--pos = '-';
246 } /* if */
247
248 memcpy(string, pos, &buffer[32] - pos + 1);
249 return string;
250}

Referenced by _itoa().

◆ _ltoa_s()

int CDECL _ltoa_s ( long  value,
char str,
size_t  size,
int  radix 
)

Definition at line 255 of file itoa.c.

256{
257 unsigned long val;
258 unsigned int digit;
259 int is_negative;
260 char buffer[33], *pos;
261 size_t len;
262
263 if (!MSVCRT_CHECK_PMT(str != NULL) || !MSVCRT_CHECK_PMT(size > 0) ||
264 !MSVCRT_CHECK_PMT(radix >= 2) || !MSVCRT_CHECK_PMT(radix <= 36))
265 {
266 if (str && size)
267 str[0] = '\0';
268
269#ifndef _LIBCNT_
270 *_errno() = EINVAL;
271#endif
272 return EINVAL;
273 }
274
275 if (value < 0 && radix == 10)
276 {
277 is_negative = 1;
278 val = -value;
279 }
280 else
281 {
282 is_negative = 0;
283 val = value;
284 }
285
286 pos = buffer + 32;
287 *pos = '\0';
288
289 do
290 {
291 digit = val % radix;
292 val /= radix;
293
294 if (digit < 10)
295 *--pos = '0' + digit;
296 else
297 *--pos = 'a' + digit - 10;
298 }
299 while (val != 0);
300
301 if (is_negative)
302 *--pos = '-';
303
304 len = buffer + 33 - pos;
305 if (len > size)
306 {
307 size_t i;
308 char *p = str;
309
310 /* Copy the temporary buffer backwards up to the available number of
311 * characters. Don't copy the negative sign if present. */
312
313 if (is_negative)
314 {
315 p++;
316 size--;
317 }
318
319 for (pos = buffer + 31, i = 0; i < size; i++)
320 *p++ = *pos--;
321
322 str[0] = '\0';
323 MSVCRT_INVALID_PMT("str[size] is too small", ERANGE);
324 return ERANGE;
325 }
326
327 memcpy(str, pos, len);
328 return 0;
329}

Referenced by _itoa_s().

◆ _ui64toa()

char *CDECL _ui64toa ( unsigned __int64  value,
char string,
int  radix 
)

Definition at line 130 of file itoa.c.

131{
132 char buffer[65];
133 char *pos;
134 int digit;
135
136 pos = &buffer[64];
137 *pos = '\0';
138
139 do {
140 digit = value % radix;
141 value = value / radix;
142 if (digit < 10) {
143 *--pos = '0' + digit;
144 } else {
145 *--pos = 'a' + digit - 10;
146 } /* if */
147 } while (value != 0L);
148
149 memcpy(string, pos, &buffer[64] - pos + 1);
150 return string;
151}

Referenced by ulltoa().

◆ _ui64toa_s()

int CDECL _ui64toa_s ( unsigned __int64  value,
char str,
size_t  size,
int  radix 
)

Definition at line 156 of file itoa.c.

158{
159 char buffer[65], *pos;
160 int digit;
161
162 if (!MSVCRT_CHECK_PMT(str != NULL) || !MSVCRT_CHECK_PMT(size > 0) ||
163 !MSVCRT_CHECK_PMT(radix>=2) || !MSVCRT_CHECK_PMT(radix<=36)) {
164#ifndef _LIBCNT_
165 *_errno() = EINVAL;
166#endif
167 return EINVAL;
168 }
169
170 pos = buffer+64;
171 *pos = '\0';
172
173 do {
174 digit = value%radix;
175 value /= radix;
176
177 if(digit < 10)
178 *--pos = '0'+digit;
179 else
180 *--pos = 'a'+digit-10;
181 }while(value != 0);
182
183 if((unsigned)(buffer-pos+65) > size) {
184 MSVCRT_INVALID_PMT("str[size] is too small", EINVAL);
185 return EINVAL;
186 }
187
188 memcpy(str, pos, buffer-pos+65);
189 return 0;
190}

◆ _ultoa()

char *CDECL _ultoa ( unsigned long  value,
char string,
int  radix 
)

Definition at line 336 of file itoa.c.

337{
338 char buffer[33];
339 char *pos;
340 int digit;
341
342 pos = &buffer[32];
343 *pos = '\0';
344
345 do {
346 digit = value % radix;
347 value = value / radix;
348 if (digit < 10) {
349 *--pos = '0' + digit;
350 } else {
351 *--pos = 'a' + digit - 10;
352 } /* if */
353 } while (value != 0L);
354
355 memcpy(string, pos, &buffer[32] - pos + 1);
356
357 return string;
358}