projects
/
musl
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
remove useless visibility application from static-linking-only code
[musl]
/
src
/
stdio
/
vfprintf.c
diff --git
a/src/stdio/vfprintf.c
b/src/stdio/vfprintf.c
index
f6e7f38
..
2ecf769
100644
(file)
--- a/
src/stdio/vfprintf.c
+++ b/
src/stdio/vfprintf.c
@@
-13,8
+13,6
@@
#define MAX(a,b) ((a)>(b) ? (a) : (b))
#define MIN(a,b) ((a)<(b) ? (a) : (b))
#define MAX(a,b) ((a)>(b) ? (a) : (b))
#define MIN(a,b) ((a)<(b) ? (a) : (b))
-#define CONCAT2(x,y) x ## y
-#define CONCAT(x,y) CONCAT2(x,y)
/* Convenient bit representation for modifier flags, which all fall
* within 31 codepoints of the space character. */
/* Convenient bit representation for modifier flags, which all fall
* within 31 codepoints of the space character. */
@@
-160,7
+158,7
@@
static void pop_arg(union arg *arg, int type, va_list *ap)
static void out(FILE *f, const char *s, size_t l)
{
static void out(FILE *f, const char *s, size_t l)
{
- __fwritex((void *)s, l, f);
+
if (!(f->flags & F_ERR))
__fwritex((void *)s, l, f);
}
static void pad(FILE *f, char c, int w, int l, int fl)
}
static void pad(FILE *f, char c, int w, int l, int fl)
@@
-227,7
+225,7
@@
static int fmt_fp(FILE *f, long double y, int w, int p, int fl, int t)
if (!isfinite(y)) {
char *s = (t&32)?"inf":"INF";
if (!isfinite(y)) {
char *s = (t&32)?"inf":"INF";
- if (y!=y) s=(t&32)?"nan":"NAN"
, pl=0
;
+ if (y!=y) s=(t&32)?"nan":"NAN";
pad(f, ' ', w, 3+pl, fl&~ZERO_PAD);
out(f, prefix, pl);
out(f, s, 3);
pad(f, ' ', w, 3+pl, fl&~ZERO_PAD);
out(f, prefix, pl);
out(f, s, 3);
@@
-343,7
+341,7
@@
static int fmt_fp(FILE *f, long double y, int w, int p, int fl, int t)
x = *d % i;
/* Are there any significant digits past j? */
if (x || d+1!=z) {
x = *d % i;
/* Are there any significant digits past j? */
if (x || d+1!=z) {
- long double round =
CONCAT(0x1p,LDBL_MANT_DIG)
;
+ long double round =
2/LDBL_EPSILON
;
long double small;
if (*d/i & 1) round += 2;
if (x<i/2) small=0x0.8p0;
long double small;
if (*d/i & 1) round += 2;
if (x<i/2) small=0x0.8p0;
@@
-572,7
+570,7
@@
static int printf_core(FILE *f, const char *fmt, va_list *ap, union arg *nl_arg,
if (0) {
case 'o':
a = fmt_o(arg.i, z);
if (0) {
case 'o':
a = fmt_o(arg.i, z);
- if ((fl&ALT_FORM) &&
arg.i) prefix+=5, pl=
1;
+ if ((fl&ALT_FORM) &&
p<z-a+1) p=z-a+
1;
} if (0) {
case 'd': case 'i':
pl=1;
} if (0) {
case 'd': case 'i':
pl=1;
@@
-658,6
+656,7
@@
int vfprintf(FILE *restrict f, const char *restrict fmt, va_list ap)
int nl_type[NL_ARGMAX+1] = {0};
union arg nl_arg[NL_ARGMAX+1];
unsigned char internal_buf[80], *saved_buf = 0;
int nl_type[NL_ARGMAX+1] = {0};
union arg nl_arg[NL_ARGMAX+1];
unsigned char internal_buf[80], *saved_buf = 0;
+ int olderr;
int ret;
/* the copy allows passing va_list* even if va_list is an array */
int ret;
/* the copy allows passing va_list* even if va_list is an array */
@@
-668,6
+667,8
@@
int vfprintf(FILE *restrict f, const char *restrict fmt, va_list ap)
}
FLOCK(f);
}
FLOCK(f);
+ olderr = f->flags & F_ERR;
+ if (f->mode < 1) f->flags &= ~F_ERR;
if (!f->buf_size) {
saved_buf = f->buf;
f->wpos = f->wbase = f->buf = internal_buf;
if (!f->buf_size) {
saved_buf = f->buf;
f->wpos = f->wbase = f->buf = internal_buf;
@@
-682,6
+683,8
@@
int vfprintf(FILE *restrict f, const char *restrict fmt, va_list ap)
f->buf_size = 0;
f->wpos = f->wbase = f->wend = 0;
}
f->buf_size = 0;
f->wpos = f->wbase = f->wend = 0;
}
+ if (f->flags & F_ERR) ret = -1;
+ f->flags |= olderr;
FUNLOCK(f);
va_end(ap2);
return ret;
FUNLOCK(f);
va_end(ap2);
return ret;