Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
ruanhaishen
Nodemcu Firmware
Commits
64bbf006
Commit
64bbf006
authored
Sep 04, 2020
by
vsky
Committed by
Nathaniel Wesley Filardo
Sep 09, 2020
Browse files
Adding '+' flag to string.format
parent
4d784798
Changes
1
Show whitespace changes
Inline
Side-by-side
app/libc/stdio.c
View file @
64bbf006
...
@@ -361,7 +361,7 @@ llatob(u_quad_t *vp, char *p, int base)
...
@@ -361,7 +361,7 @@ llatob(u_quad_t *vp, char *p, int base)
* converts value to ascii, result in dst
* converts value to ascii, result in dst
*/
*/
char
*
char
*
btoa
(
char
*
dst
,
u_int
value
,
int
base
)
btoa
(
char
*
dst
,
u_int
value
,
int
base
,
int
plussgn
)
{
{
char
buf
[
34
],
digit
;
char
buf
[
34
],
digit
;
int
i
,
j
,
rem
,
neg
;
int
i
,
j
,
rem
,
neg
;
...
@@ -394,6 +394,8 @@ btoa(char *dst, u_int value, int base)
...
@@ -394,6 +394,8 @@ btoa(char *dst, u_int value, int base)
buf
[
i
]
=
0
;
buf
[
i
]
=
0
;
if
(
neg
)
if
(
neg
)
strcat
(
buf
,
"-"
);
strcat
(
buf
,
"-"
);
else
if
(
plussgn
)
strcat
(
buf
,
"+"
);
/* reverse the string */
/* reverse the string */
for
(
i
=
0
,
j
=
strlen
(
buf
)
-
1
;
j
>=
0
;
i
++
,
j
--
)
for
(
i
=
0
,
j
=
strlen
(
buf
)
-
1
;
j
>=
0
;
i
++
,
j
--
)
...
@@ -407,7 +409,7 @@ btoa(char *dst, u_int value, int base)
...
@@ -407,7 +409,7 @@ btoa(char *dst, u_int value, int base)
* converts value to ascii, result in dst
* converts value to ascii, result in dst
*/
*/
char
*
char
*
llbtoa
(
char
*
dst
,
u_quad_t
value
,
int
base
)
llbtoa
(
char
*
dst
,
u_quad_t
value
,
int
base
,
int
plussgn
)
{
{
char
buf
[
66
],
digit
;
char
buf
[
66
],
digit
;
int
i
,
j
,
rem
,
neg
;
int
i
,
j
,
rem
,
neg
;
...
@@ -440,6 +442,8 @@ llbtoa(char *dst, u_quad_t value, int base)
...
@@ -440,6 +442,8 @@ llbtoa(char *dst, u_quad_t value, int base)
buf
[
i
]
=
0
;
buf
[
i
]
=
0
;
if
(
neg
)
if
(
neg
)
strcat
(
buf
,
"-"
);
strcat
(
buf
,
"-"
);
else
if
(
plussgn
)
strcat
(
buf
,
"+"
);
/* reverse the string */
/* reverse the string */
for
(
i
=
0
,
j
=
strlen
(
buf
)
-
1
;
j
>=
0
;
i
++
,
j
--
)
for
(
i
=
0
,
j
=
strlen
(
buf
)
-
1
;
j
>=
0
;
i
++
,
j
--
)
...
@@ -526,7 +530,7 @@ vsprintf (char *d, const char *s, va_list ap)
...
@@ -526,7 +530,7 @@ vsprintf (char *d, const char *s, va_list ap)
const
char
*
t
;
const
char
*
t
;
char
*
p
,
*
dst
,
tmp
[
40
];
char
*
p
,
*
dst
,
tmp
[
40
];
unsigned
int
n
;
unsigned
int
n
;
int
fmt
,
trunc
,
haddot
,
width
,
base
,
longlong
;
int
fmt
,
trunc
,
haddot
,
width
,
base
,
longlong
,
plussgn
;
#ifdef FLOATINGPT
#ifdef FLOATINGPT
double
dbl
;
double
dbl
;
...
@@ -540,12 +544,14 @@ vsprintf (char *d, const char *s, va_list ap)
...
@@ -540,12 +544,14 @@ vsprintf (char *d, const char *s, va_list ap)
if
(
*
s
==
'%'
)
{
if
(
*
s
==
'%'
)
{
s
++
;
s
++
;
fmt
=
FMT_RJUST
;
fmt
=
FMT_RJUST
;
width
=
trunc
=
haddot
=
longlong
=
0
;
width
=
trunc
=
haddot
=
longlong
=
plussgn
=
0
;
for
(;
*
s
;
s
++
)
{
for
(;
*
s
;
s
++
)
{
if
(
strchr
(
"bcdefgilopPrRsuxX%"
,
*
s
))
if
(
strchr
(
"bcdefgilopPrRsuxX%"
,
*
s
))
break
;
break
;
else
if
(
*
s
==
'-'
)
else
if
(
*
s
==
'-'
)
fmt
=
FMT_LJUST
;
fmt
=
FMT_LJUST
;
else
if
(
*
s
==
'+'
)
plussgn
=
1
;
else
if
(
*
s
==
'0'
)
else
if
(
*
s
==
'0'
)
fmt
=
FMT_RJUST0
;
fmt
=
FMT_RJUST0
;
else
if
(
*
s
==
'~'
)
else
if
(
*
s
==
'~'
)
...
@@ -630,22 +636,22 @@ vsprintf (char *d, const char *s, va_list ap)
...
@@ -630,22 +636,22 @@ vsprintf (char *d, const char *s, va_list ap)
base
=
2
;
base
=
2
;
if
(
longlong
)
if
(
longlong
)
llbtoa
(
d
,
va_arg
(
ap
,
quad_t
),
llbtoa
(
d
,
va_arg
(
ap
,
quad_t
),
base
);
base
,
plussgn
);
else
else
btoa
(
d
,
va_arg
(
ap
,
int
),
base
);
btoa
(
d
,
va_arg
(
ap
,
int
),
base
,
plussgn
);
if
(
*
s
==
'X'
)
if
(
*
s
==
'X'
)
strtoupper
(
d
);
strtoupper
(
d
);
}
}
#ifdef FLOATINGPT
#ifdef FLOATINGPT
else
if
(
strchr
(
"eEfgG"
,
*
s
))
{
else
if
(
strchr
(
"eEfgG"
,
*
s
))
{
//static void dtoa (char *, double, int, int, int);
//static void dtoa (char *, double, int, int,
int,
int);
void
dtoa
(
char
*
dbuf
,
rtype
arg
,
int
fmtch
,
int
width
,
int
prec
);
void
dtoa
(
char
*
dbuf
,
rtype
arg
,
int
fmtch
,
int
width
,
int
prec
,
int
plussgn
);
dbl
=
va_arg
(
ap
,
double
);
dbl
=
va_arg
(
ap
,
double
);
if
(
!
haddot
)
{
if
(
!
haddot
)
{
trunc
=
6
;
trunc
=
6
;
}
}
dtoa
(
d
,
dbl
,
*
s
,
width
,
trunc
);
dtoa
(
d
,
dbl
,
*
s
,
width
,
trunc
,
plussgn
);
trunc
=
0
;
trunc
=
0
;
}
}
#endif
#endif
...
@@ -718,7 +724,7 @@ extern double modf(double, double *);
...
@@ -718,7 +724,7 @@ extern double modf(double, double *);
#define _isNan(arg) ((arg) != (arg))
#define _isNan(arg) ((arg) != (arg))
static
int
cvt
(
rtype
arg
,
int
prec
,
char
*
signp
,
int
fmtch
,
static
int
cvt
(
rtype
arg
,
int
prec
,
char
*
signp
,
int
fmtch
,
char
*
startp
,
char
*
endp
);
char
*
startp
,
char
*
endp
,
int
plussgn
);
static
char
*
c_round
(
double
fract
,
int
*
exp
,
char
*
start
,
char
*
end
,
static
char
*
c_round
(
double
fract
,
int
*
exp
,
char
*
start
,
char
*
end
,
char
ch
,
char
*
signp
);
char
ch
,
char
*
signp
);
static
char
*
exponent
(
char
*
p
,
int
exp
,
int
fmtch
);
static
char
*
exponent
(
char
*
p
,
int
exp
,
int
fmtch
);
...
@@ -750,7 +756,7 @@ static int _finite(rtype d)
...
@@ -750,7 +756,7 @@ static int _finite(rtype d)
}
}
void
dtoa
(
char
*
dbuf
,
rtype
arg
,
int
fmtch
,
int
width
,
int
prec
)
void
dtoa
(
char
*
dbuf
,
rtype
arg
,
int
fmtch
,
int
width
,
int
prec
,
int
plussgn
)
{
{
char
buf
[
MAX_FCONVERSION
+
1
],
*
cp
;
char
buf
[
MAX_FCONVERSION
+
1
],
*
cp
;
char
sign
;
char
sign
;
...
@@ -780,7 +786,7 @@ void dtoa (char *dbuf, rtype arg, int fmtch, int width, int prec)
...
@@ -780,7 +786,7 @@ void dtoa (char *dbuf, rtype arg, int fmtch, int width, int prec)
* no significant digits will be shown.
* no significant digits will be shown.
*/
*/
*
cp
=
'\0'
;
*
cp
=
'\0'
;
size
=
cvt
(
arg
,
prec
,
&
sign
,
fmtch
,
cp
,
buf
+
sizeof
(
buf
));
size
=
cvt
(
arg
,
prec
,
&
sign
,
fmtch
,
cp
,
buf
+
sizeof
(
buf
)
,
plussgn
);
if
(
*
cp
==
'\0'
)
if
(
*
cp
==
'\0'
)
cp
++
;
cp
++
;
...
@@ -793,7 +799,7 @@ void dtoa (char *dbuf, rtype arg, int fmtch, int width, int prec)
...
@@ -793,7 +799,7 @@ void dtoa (char *dbuf, rtype arg, int fmtch, int width, int prec)
static
int
static
int
cvt
(
rtype
number
,
int
prec
,
char
*
signp
,
int
fmtch
,
char
*
startp
,
char
*
endp
)
cvt
(
rtype
number
,
int
prec
,
char
*
signp
,
int
fmtch
,
char
*
startp
,
char
*
endp
,
int
plussgn
)
{
{
register
char
*
p
,
*
t
;
register
char
*
p
,
*
t
;
register
double
fract
;
register
double
fract
;
...
@@ -804,6 +810,8 @@ cvt(rtype number, int prec, char *signp, int fmtch, char *startp, char *endp)
...
@@ -804,6 +810,8 @@ cvt(rtype number, int prec, char *signp, int fmtch, char *startp, char *endp)
if
(
number
<
0
)
{
if
(
number
<
0
)
{
number
=
-
number
;
number
=
-
number
;
*
signp
=
'-'
;
*
signp
=
'-'
;
}
else
if
(
plussgn
)
{
*
signp
=
'+'
;
}
else
}
else
*
signp
=
0
;
*
signp
=
0
;
...
@@ -1008,7 +1016,7 @@ c_round(double fract, int *exp, char *start, char *end, char ch, char *signp)
...
@@ -1008,7 +1016,7 @@ c_round(double fract, int *exp, char *start, char *end, char ch, char *signp)
}
}
}
}
/* ``"%.3f", (double)-0.0004'' gives you a negative 0. */
/* ``"%.3f", (double)-0.0004'' gives you a negative 0. */
else
if
(
*
signp
==
'-'
)
else
if
(
*
signp
==
'-'
||
*
signp
==
'+'
)
for
(;;
--
end
)
{
for
(;;
--
end
)
{
if
(
*
end
==
'.'
)
if
(
*
end
==
'.'
)
--
end
;
--
end
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment