Don't check for __SERR which may stick from one of any previous stdio
functions. __SERR is for user and the rest of stdio code do not check it for error sensing internally, only set it. In vf(w)printf.c here it is more easy to save __SERR, clear and restore it.
This commit is contained in:
parent
8905590ba9
commit
1bf6c5f18b
@ -125,7 +125,7 @@ getdelim(char ** __restrict linep, size_t * __restrict linecapp, int delim,
|
|||||||
|
|
||||||
if (fp->_r <= 0 && __srefill(fp)) {
|
if (fp->_r <= 0 && __srefill(fp)) {
|
||||||
/* If fp is at EOF already, we just need space for the NUL. */
|
/* If fp is at EOF already, we just need space for the NUL. */
|
||||||
if (__sferror(fp) || expandtofit(linep, 1, linecapp))
|
if (!__sfeof(fp) || expandtofit(linep, 1, linecapp))
|
||||||
goto error;
|
goto error;
|
||||||
FUNLOCKFILE(fp);
|
FUNLOCKFILE(fp);
|
||||||
(*linep)[0] = '\0';
|
(*linep)[0] = '\0';
|
||||||
@ -137,7 +137,7 @@ getdelim(char ** __restrict linep, size_t * __restrict linecapp, int delim,
|
|||||||
if (sappend(linep, &linelen, linecapp, fp->_p, fp->_r))
|
if (sappend(linep, &linelen, linecapp, fp->_p, fp->_r))
|
||||||
goto error;
|
goto error;
|
||||||
if (__srefill(fp)) {
|
if (__srefill(fp)) {
|
||||||
if (__sferror(fp))
|
if (!__sfeof(fp))
|
||||||
goto error;
|
goto error;
|
||||||
goto done; /* hit EOF */
|
goto done; /* hit EOF */
|
||||||
}
|
}
|
||||||
|
@ -364,6 +364,7 @@ __vfprintf(FILE *fp, locale_t locale, const char *fmt0, va_list ap)
|
|||||||
int nextarg; /* 1-based argument index */
|
int nextarg; /* 1-based argument index */
|
||||||
va_list orgap; /* original argument pointer */
|
va_list orgap; /* original argument pointer */
|
||||||
char *convbuf; /* wide to multibyte conversion result */
|
char *convbuf; /* wide to multibyte conversion result */
|
||||||
|
int savserr;
|
||||||
|
|
||||||
static const char xdigs_lower[16] = "0123456789abcdef";
|
static const char xdigs_lower[16] = "0123456789abcdef";
|
||||||
static const char xdigs_upper[16] = "0123456789ABCDEF";
|
static const char xdigs_upper[16] = "0123456789ABCDEF";
|
||||||
@ -460,6 +461,9 @@ __vfprintf(FILE *fp, locale_t locale, const char *fmt0, va_list ap)
|
|||||||
return (EOF);
|
return (EOF);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
savserr = fp->_flags & __SERR;
|
||||||
|
fp->_flags &= ~__SERR;
|
||||||
|
|
||||||
convbuf = NULL;
|
convbuf = NULL;
|
||||||
fmt = (char *)fmt0;
|
fmt = (char *)fmt0;
|
||||||
argtable = NULL;
|
argtable = NULL;
|
||||||
@ -1031,6 +1035,8 @@ error:
|
|||||||
free(convbuf);
|
free(convbuf);
|
||||||
if (__sferror(fp))
|
if (__sferror(fp))
|
||||||
ret = EOF;
|
ret = EOF;
|
||||||
|
else
|
||||||
|
fp->_flags |= savserr;
|
||||||
if ((argtable != NULL) && (argtable != statargtable))
|
if ((argtable != NULL) && (argtable != statargtable))
|
||||||
free (argtable);
|
free (argtable);
|
||||||
return (ret);
|
return (ret);
|
||||||
|
@ -444,6 +444,7 @@ __vfwprintf(FILE *fp, locale_t locale, const wchar_t *fmt0, va_list ap)
|
|||||||
int nextarg; /* 1-based argument index */
|
int nextarg; /* 1-based argument index */
|
||||||
va_list orgap; /* original argument pointer */
|
va_list orgap; /* original argument pointer */
|
||||||
wchar_t *convbuf; /* multibyte to wide conversion result */
|
wchar_t *convbuf; /* multibyte to wide conversion result */
|
||||||
|
int savserr;
|
||||||
|
|
||||||
static const char xdigs_lower[16] = "0123456789abcdef";
|
static const char xdigs_lower[16] = "0123456789abcdef";
|
||||||
static const char xdigs_upper[16] = "0123456789ABCDEF";
|
static const char xdigs_upper[16] = "0123456789ABCDEF";
|
||||||
@ -536,6 +537,9 @@ __vfwprintf(FILE *fp, locale_t locale, const wchar_t *fmt0, va_list ap)
|
|||||||
return (EOF);
|
return (EOF);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
savserr = fp->_flags & __SERR;
|
||||||
|
fp->_flags &= ~__SERR;
|
||||||
|
|
||||||
convbuf = NULL;
|
convbuf = NULL;
|
||||||
fmt = (wchar_t *)fmt0;
|
fmt = (wchar_t *)fmt0;
|
||||||
argtable = NULL;
|
argtable = NULL;
|
||||||
@ -1096,6 +1100,8 @@ error:
|
|||||||
free(convbuf);
|
free(convbuf);
|
||||||
if (__sferror(fp))
|
if (__sferror(fp))
|
||||||
ret = EOF;
|
ret = EOF;
|
||||||
|
else
|
||||||
|
fp->_flags |= savserr;
|
||||||
if ((argtable != NULL) && (argtable != statargtable))
|
if ((argtable != NULL) && (argtable != statargtable))
|
||||||
free (argtable);
|
free (argtable);
|
||||||
return (ret);
|
return (ret);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user