aboutsummaryrefslogtreecommitdiffhomepage
path: root/builtin_printf.cpp
diff options
context:
space:
mode:
authorGravatar Siteshwar Vashisht <siteshwar@gmail.com>2013-03-17 00:20:02 +0530
committerGravatar Siteshwar Vashisht <siteshwar@gmail.com>2013-03-17 00:20:02 +0530
commit359a7cebde1805831e923d414f41f20e0616ed57 (patch)
tree8d823ef3e25ad8577b60343c3941eb68f21c81a9 /builtin_printf.cpp
parent490ead52eb8fa246f882c8993344184904fe1eb0 (diff)
Use wcstoimax and wcstoumax instead of strtoimax and strtoumax in printf builtin
Diffstat (limited to 'builtin_printf.cpp')
-rw-r--r--builtin_printf.cpp34
1 files changed, 11 insertions, 23 deletions
diff --git a/builtin_printf.cpp b/builtin_printf.cpp
index b190b316..099a2f0d 100644
--- a/builtin_printf.cpp
+++ b/builtin_printf.cpp
@@ -46,14 +46,15 @@
David MacKenzie <djm@gnu.ai.mit.edu> */
+/* This file has been imported from source code of printf command in GNU Coreutils version 6.9 */
+
#include <stdio.h>
#include <sys/types.h>
#include <getopt.h>
+#include <inttypes.h>
#include "common.h"
-// This file has been imported from source code of printf command in GNU Coreutils version 6.9
-
/* The official name of this program (e.g., no `g' prefix). */
#define PROGRAM_NAME "printf"
@@ -142,20 +143,7 @@ static bool posixly_correct;
static wchar_t const *const cfcc_msg =
N_(L"warning: %s: character(s) following character constant have been ignored");
-int strtoimax (wchar_t const *ptr, wchar_t **endptr, int base)
-{
- return wcstol (ptr, endptr, base);
-}
-
-int strtoumax (wchar_t const *ptr, wchar_t **endptr, int base)
-{
- return wcstol (ptr, endptr, base);
-}
-
-# define STRTOD wcstod
-
-double
-C_STRTOD (wchar_t const *nptr, wchar_t **endptr)
+double C_STRTOD (wchar_t const *nptr, wchar_t **endptr)
{
double r;
@@ -166,7 +154,7 @@ C_STRTOD (wchar_t const *nptr, wchar_t **endptr)
wsetlocale (LC_NUMERIC, L"C");
}
- r = STRTOD (nptr, endptr);
+ r = wcstod(nptr, endptr);
if (!saved_locale.empty())
{
@@ -225,8 +213,8 @@ FUNC_NAME (wchar_t const *s) \
return val; \
} \
-STRTOX (intmax_t, vstrtoimax, strtoimax (s, &end, 0))
-STRTOX (uintmax_t, vstrtoumax, strtoumax (s, &end, 0))
+STRTOX (intmax_t, vwcstoimax, wcstoimax (s, &end, 0))
+STRTOX (uintmax_t, vwcstoumax, wcstoumax (s, &end, 0))
STRTOX (long double, vstrtold, C_STRTOD(s, &end))
/* Output a single-character \ escape. */
@@ -409,7 +397,7 @@ static void print_direc (const wchar_t *start, size_t length, wchar_t conversion
case L'd':
case L'i':
{
- intmax_t arg = vstrtoimax (argument);
+ intmax_t arg = vwcstoimax (argument);
if (!have_field_width)
{
if (!have_precision)
@@ -432,7 +420,7 @@ static void print_direc (const wchar_t *start, size_t length, wchar_t conversion
case L'x':
case L'X':
{
- uintmax_t arg = vstrtoumax (argument);
+ uintmax_t arg = vwcstoumax (argument);
if (!have_field_width)
{
if (!have_precision)
@@ -578,7 +566,7 @@ static int print_formatted (const wchar_t *format, int argc, wchar_t **argv) {
++direc_length;
if (argc > 0)
{
- intmax_t width = vstrtoimax (*argv);
+ intmax_t width = vwcstoimax (*argv);
if (INT_MIN <= width && width <= INT_MAX)
field_width = width;
else
@@ -611,7 +599,7 @@ static int print_formatted (const wchar_t *format, int argc, wchar_t **argv) {
++direc_length;
if (argc > 0)
{
- intmax_t prec = vstrtoimax (*argv);
+ intmax_t prec = vwcstoimax (*argv);
if (prec < 0)
{
/* A negative precision is taken as if the