mirror of
https://git.FreeBSD.org/src.git
synced 2025-01-29 16:44:03 +00:00
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
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=304810
@ -125,7 +125,7 @@ getdelim(char ** __restrict linep, size_t * __restrict linecapp, int delim,
|
||||
|
||||
if (fp->_r <= 0 && __srefill(fp)) {
|
||||
/* 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;
|
||||
FUNLOCKFILE(fp);
|
||||
(*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))
|
||||
goto error;
|
||||
if (__srefill(fp)) {
|
||||
if (__sferror(fp))
|
||||
if (!__sfeof(fp))
|
||||
goto error;
|
||||
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 */
|
||||
va_list orgap; /* original argument pointer */
|
||||
char *convbuf; /* wide to multibyte conversion result */
|
||||
int savserr;
|
||||
|
||||
static const char xdigs_lower[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);
|
||||
}
|
||||
|
||||
savserr = fp->_flags & __SERR;
|
||||
fp->_flags &= ~__SERR;
|
||||
|
||||
convbuf = NULL;
|
||||
fmt = (char *)fmt0;
|
||||
argtable = NULL;
|
||||
@ -1031,6 +1035,8 @@ number: if ((dprec = prec) >= 0)
|
||||
free(convbuf);
|
||||
if (__sferror(fp))
|
||||
ret = EOF;
|
||||
else
|
||||
fp->_flags |= savserr;
|
||||
if ((argtable != NULL) && (argtable != statargtable))
|
||||
free (argtable);
|
||||
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 */
|
||||
va_list orgap; /* original argument pointer */
|
||||
wchar_t *convbuf; /* multibyte to wide conversion result */
|
||||
int savserr;
|
||||
|
||||
static const char xdigs_lower[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);
|
||||
}
|
||||
|
||||
savserr = fp->_flags & __SERR;
|
||||
fp->_flags &= ~__SERR;
|
||||
|
||||
convbuf = NULL;
|
||||
fmt = (wchar_t *)fmt0;
|
||||
argtable = NULL;
|
||||
@ -1096,6 +1100,8 @@ number: if ((dprec = prec) >= 0)
|
||||
free(convbuf);
|
||||
if (__sferror(fp))
|
||||
ret = EOF;
|
||||
else
|
||||
fp->_flags |= savserr;
|
||||
if ((argtable != NULL) && (argtable != statargtable))
|
||||
free (argtable);
|
||||
return (ret);
|
||||
|
Loading…
Reference in New Issue
Block a user