aboutsummaryrefslogtreecommitdiff
path: root/newlib/libc/stdio/fputs.c
AgeCommit message (Collapse)AuthorFilesLines
2023-11-20stdio: drop unnecessary calls to ORIENTCorinna Vinschen1-2/+0
Now that the low-level functions set and test stream orientation, a few calls in API functions are redundant. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2023-11-10newlib: libc: Fix crash on fprintf to a wide-oriented stream.Takashi Yano1-3/+6
Previously, fprintf() on a wide-oriented stream crashes or outputs garbage. This is because a narrow char string which can be odd bytes in length is cast into a wide char string which should be even bytes in length in __sprint_r/__sfputs_r based on the __SWID flag. As a result, if the length is odd bytes, the reading buffer runs over the buffer length, which causes a crash. If the length is even bytes, garbage is printed. With this patch, any output to the stream which is set to different orientation fails with error just like glibc. Note that it behaves differently from other libc implementations such as BSD, musl and Solaris. Reviewed-by: Corinna Vinschen <corinna@vinschen.de> Signed-off-by: Takashi Yano <takashi.yano@nifty.ne.jp>
2020-01-29Use remove-advertising-clause script to edit BSD licensesKeith Packard1-1/+1
This edits licenses held by Berkeley and NetBSD, both of which have removed the advertising requirement from their licenses. Signed-off-by: Keith Packard <keithp@keithp.com>
2018-01-17ansification: remove _DEFUNYaakov Selkowitz1-4/+2
Signed-off-by: Yaakov Selkowitz <yselkowi@redhat.com>
2018-01-17ansification: remove _CONSTYaakov Selkowitz1-3/+3
Signed-off-by: Yaakov Selkowitz <yselkowi@redhat.com>
2018-01-17ansification: remove _ANDYaakov Selkowitz1-3/+3
Signed-off-by: Yaakov Selkowitz <yselkowi@redhat.com>
2017-12-01stdio: remove TRAD_SYNOPSISYaakov Selkowitz1-25/+1
Signed-off-by: Yaakov Selkowitz <yselkowi@redhat.com>
2014-12-18Implement BSD/GNU unlocked stdio extensions.Yaakov Selkowitz1-4/+42
* libc/include/stdio.h (clearerr_unlocked, feof_unlocked, ferror_unlocked, fflush_unlocked, fgetc_unlocked, fgets_unlocked, fileno_unlocked, fputc_unlocked, fputs_unlocked, fread_unlocked, fwrite_unlocked): Declare. * libc/include/wchar.h (fgetwc_unlocked, fgetws_unlocked, fputwc_unlocked, fputws_unlocked, getwc_unlocked, getwchar_unlocked, putwc_unlocked, putwchar_unlocked): Declare. * libc/stdio/Makefile.am (ELIX_4_SOURCES): Add clearerr_u.c, feof_u.c, ferror_u.c, fflush_u.c, fgetc_u.c, fgets_u.c, fgetwc_u.c, fgetws_u.c, fileno_u.c, fputc_u.c, fputs_u.c, fputwc_u.c, fputws_u.c, fread_u.c, fwrite_u.c, getwc_u.c, getwchar_u.c, putwc_u.c, putwchar_u.c. Add necessary dependencies. * libc/stdio/Makefile.in: Regenerate. * libc/stdio/clearerr.c: Document unlocked variant. * libc/stdio/clearerr_u.c: New file. * libc/stdio/feof.c: Document unlocked variant. * libc/stdio/feof_u.c: New file. * libc/stdio/ferror.c: Document unlocked variant. * libc/stdio/ferror_u.c: New file. * libc/stdio/fflush.c: Add __IMPL_UNLOCKED__ overrides. Document unlocked variants. * libc/stdio/fflush_u.c: New file. * libc/stdio/fgetc.c: Document unlocked variants. * libc/stdio/fgetc_u.c: New file. * libc/stdio/fgets.c: Add __IMPL_UNLOCKED__ overrides. Document unlocked variants. * libc/stdio/fgets_u.c: New file. * libc/stdio/fgetwc.c: Document unlocked variants. (__fgetwc): Make non-static. * libc/stdio/fgetwc_u.c: New file. * libc/stdio/fgetws.c: Add __IMPL_UNLOCKED__ overrides. Document unlocked variants. * libc/stdio/fgetws_u.c: New file. * libc/stdio/fileno.c: Document unlocked variant. * libc/stdio/fileno_u.c: New file. * libc/stdio/fputc.c: Document unlocked variants. * libc/stdio/fputc_u.c: New file. * libc/stdio/fputs.c: Add __IMPL_UNLOCKED__ overrides. Document unlocked variants. * libc/stdio/fputs_u.c: New file. * libc/stdio/fputwc.c: Document unlocked variants. (__fputwc): Make non-static. * libc/stdio/fputwc_u.c: New file. * libc/stdio/fputws.c: Add __IMPL_UNLOCKED__ overrides. Document unlocked variants. * libc/stdio/fputws_u.c: New file. * libc/stdio/fread.c: Add __IMPL_UNLOCKED__ overrides. Document unlocked variants. * libc/stdio/fread_u.c: New file. * libc/stdio/fwrite.c: Add __IMPL_UNLOCKED__ overrides. Document unlocked variants. * libc/stdio/fwrite_u.c: New file. * libc/stdio/getwc_u.c: New file. * libc/stdio/getwchar.c: Document unlocked variants. * libc/stdio/getwchar_u.c: New file. * libc/stdio/local.h: Define locking macros as empty ifdef __IMPL_UNLOCKED__. (__fgetwc, __fputwc): Declare. * libc/stdio/putwc_u.c: New file. * libc/stdio/putwchar.c: Document unlocked variants. * libc/stdio/putwchar_u.c: New file.
2013-11-182013-11-18 Sahil Patnayakuni <sahilp@oarcorp.com>Joel Sherrill1-6/+6
* libc/include/stdio.h, libc/machine/powerpc/vfscanf.c, libc/machine/spu/fgetpos.c, libc/machine/spu/fgets.c, libc/machine/spu/fopen.c, libc/machine/spu/fputs.c, libc/machine/spu/fread.c, libc/machine/spu/freopen.c, libc/machine/spu/fwrite.c, libc/machine/spu/setbuf.c, libc/machine/spu/vfprintf.c, libc/machine/spu/vfscanf.c, libc/machine/spu/vsnprintf.c, libc/machine/spu/vsprintf.c, libc/machine/spu/vsscanf.c, libc/stdio/asnprintf.c, libc/stdio/asprintf.c, libc/stdio/dprintf.c, libc/stdio/fgetpos.c, libc/stdio/fgets.c, libc/stdio/fmemopen.c, libc/stdio/fopen.c, libc/stdio/fprintf.c, libc/stdio/fputs.c, libc/stdio/fread.c, libc/stdio/freopen.c, libc/stdio/fscanf.c, libc/stdio/fwrite.c, libc/stdio/printf.c, libc/stdio/scanf.c, libc/stdio/setbuf.c, libc/stdio/snprintf.c, libc/stdio/sprintf.c, libc/stdio/sscanf.c, libc/stdio/vdprintf.c, libc/stdio/vprintf.c, libc/stdio/vscanf.c, libc/stdio/vsnprintf.c, libc/stdio/vsprintf.c, libc/stdio/vsscanf.c: Add restrict keyword.
2013-03-27 * acconfig.h (_FVWRITE_IN_STREAMIO): Undefine.Corinna Vinschen1-0/+24
* newlib.hin (_FVWRITE_IN_STREAMIO): Undefine. * configure.in (--disable-newlib-fvwrite-in-streamio): New option. * configure: Regenerated. * libc/stdio/fputs.c (_fputs_r): Use _FVWRITE_IN_STREAMIO to control __sfvwrite_r. Add alternative implementation. * libc/stdio/fputws.c (_fputws_r): Ditto. * libc/stdio/fwrite.c (_fwrite_r): Ditto. * libc/stdio/puts.c (_puts_r): Ditto. * libc/stdio/vfprintf.c (__ssputs_r, __sfputs_r): New function. (_VFPRINTF_R): Use _FVWRITE_IN_STREAMIO to control vector buffer. (__SPRINT): Use _FVWRITE_IN_STREAMIO to control macro definition. * libc/stdio/vfwprintf.c (_VFWPRINTF_R): Use _FVWRITE_IN_STREAMIO to control vector buffer.
2012-05-30 * libc/stdio/local.h (_newlib_flockfile_start): New macro toCorinna Vinschen1-2/+2
secure stream related critical section against thread cancellation. (_newlib_flockfile_exit): Ditto. (_newlib_sfp_lock_end): Ditto. (_newlib_sfp_lock_start): Ditto for the list of streams. (_newlib_sfp_lock_exit): Ditto. (_newlib_sfp_lock_end): Ditto. Use aforementioned macros in place of _flockfile/_funlockfile and __sfp_lock_acquire/__sfp_lock_release throughout the code. * libc/stdio/fclose.c: Explicitely disable and re-enable thread cancellation. Explain why. * libc/stdio/freopen.c: Ditto. * libc/stdio64/freopen64.c: Ditto.
2008-12-102008-12-10 Corinna Vinschen <corinna@vinschen.de>Jeff Johnston1-0/+1
Implement basic wide char stdio functionality, based on FreeBSD. * libc/include/stdio.h (__SORD): Define. (__SWID): Define. * libc/include/wchar.h: Add declarations for new wide char functions. (getwc): Define as macro. (getwchar): Ditto. (putwc): Ditto. (putwchar): Ditto. * libc/include/sys/reent.h (struct __sFILE): Add _mbstate member. (struct __sFILE64): Ditto. * libc/stdio/Makefile.am (ELIX_4_SOURCES): Add fgetwc.c, fgetws.c, fputwc.c, fputws.c, fwide.c, getwc.c, getwchar.c, putwc.c, putwchar.c and ungetwc.c. (CHEWOUT_FILES): Add fgetwc.def, fgetws.def, fputwc.def, fputws.def, fwide.def, getwc.def, getwchar.def, putwc.def, putwchar.def and ungetwc.def. Add header dependency rules for the new files. * libc/stdio/Makefile.in: Regenerate. * libc/stdio/fgetwc.c: New file, implementing fgetwc and _fgetwc_r. * libc/stdio/fgetws.c: New file, implementing fgetws and _fgetws_r. * libc/stdio/findfp.c (std): Initialize FILE's _mbstate member. (__sfmoreglue): Ditto. * libc/stdio/fputs.c (_fputs_r): Set stream orientation. * libc/stdio/fputwc.c: New file, implementing fputwc and _fputwc_r. * libc/stdio/fputws.c: New file, implementing fputws and _fputws_r. * libc/stdio/fread.c (_fread_r): Set stream orientation. * libc/stdio/freopen.c (_freopen_r): Reset stream orientation. Reset _mbstate. * libc/stdio/fseek.c (_fseek_r): Reset _mbstate. * libc/stdio/fwide.c: New file, implementing fwide and _fwide_r. * libc/stdio/fwrite.c (_fwrite_r): Set stream orientation. * libc/stdio/getwc.c: New file, implementing getwc and _getwc_r. * libc/stdio/getwchar.c: New file, implementing getwchar and _getwchar_r. * libc/stdio/local.h (ORIENT): New macro. * libc/stdio/puts.c (_puts_r): Set stream orientation. * libc/stdio/putwc.c: New file, implementing putwc and _putwc_r. * libc/stdio/putwchar.c: New file, implementing putwchar and _putwchar_r. * libc/stdio/refill.c (__srefill_r): Set stream orientation. * libc/stdio/stdio.tex: Add documentation for new functions. * libc/stdio/ungetc.c (_ungetc_r): Set stream orientation. * libc/stdio/ungetwc.c: New file, implementing ungetwc and _ungetwc_r. * libc/stdio/vfscanf.c (__SVFSCANF_R): Set stream orientation. * libc/stdio/wbuf.c (__swbuf_r): Ditto.
2006-09-262006-09-26 Jeff Johnston <jjohnstn@redhat.com>Jeff Johnston1-1/+1
* libc/include/stdio.h[_REENT_SMALL]: Do not allow macros for clearerr, feof, or fileno. * libc/include/sys/reent.h[_REENT_SMALL](struct _reent): Change the dummy std stream scheme to use pointers to const external fake files, one for each standard stream. * libc/stdio/local.h (CHECK_INIT): Change to take a file pointer argument. For _REENT_SMALL, reset the file pointer if it matches one of the fake std stream pointers. * libc/stdio/clearerr.c: Fix CHECK_INIT macro to add file pointer argument. * libc/stdio/fclose.c: Ditto. * libc/stdio/feof.c: Ditto. * libc/stdio/ferror.c: Ditto. * libc/stdio/fflush.c: Ditto. * libc/stdio/fgetc.c: Ditto. * libc/stdio/fgets.c: Ditto. * libc/stdio/fileno.c: Ditto. * libc/stdio/findfp.c: Ditto. * libc/stdio/fputc.c: Ditto. * libc/stdio/fputs.c: Ditto. * libc/stdio/fread.c: Ditto. * libc/stdio/freopen.c: Ditto. * libc/stdio/fseek.c: Ditto. * libc/stdio/ftell.c: Ditto. * libc/stdio/fwrite.c: Ditto. * libc/stdio/getc.c: Ditto. * libc/stdio/getdelim.c: Ditto. * libc/stdio/putc.c: Ditto. * libc/stdio/refill.c: Ditto. * libc/stdio/setvbuf.c: Ditto. * libc/stdio/ungetc.c: Ditto. * libc/stdio/vfprintf.c: Ditto. * libc/stdio/vfscanf.c: Ditto. * libc/stdio/wbuf.c: Ditto.: Ditto. * libc/stdio/wsetup.c: Ditto. * libc/stdio64/freopen64.c: Ditto. * libc/stdio64/fseeko64.c: Ditto. * libc/stdio64/ftello64.c: Ditto. * libc/machine/powerpc/vfprintf.c: Ditto. * libc/machine/powerpc/vfscanf.c: Ditto.
2006-06-142006-06-14 Jeff Johnston <jjohnstn@redhat.com>Jeff Johnston1-3/+28
* libc/include/stdio.h: Add new reentrant I/O prototypes for read/write functions. Change getc/putc macros to have reentrant underlying macros/functions. This includes __sgetc_raw_r, __sgetc_r, and __sputc_r. * libc/stdio/fgetc.c: Fix and/or add reentrant version to call new reentrant I/O functions/macros for reading/writing. * libc/stdio/fgets.c: Ditto. * libc/stdio/fputc.c: Ditto. * libc/stdio/fputs.c: Ditto. * libc/stdio/fread.c: Ditto. * libc/stdio/fseek.c: Ditto. * libc/stdio64/fseeko64.c: Ditto. * libc/stdio/fwrite.c: Ditto. * libc/stdio/getc.c: Ditto. * libc/stdio/getc_u.c: Ditto. * libc/stdio/getchar.c: Ditto. * libc/stdio/getchar_u.c: Ditto. * libc/stdio/putc.c: Ditto. * libc/stdio/putc_u.c: Ditto. * libc/stdio/putchar.c: Ditto. * libc/stdio/puts.c: Ditto. * libc/stdio/vfprintf.c: Ditto. * libc/stdio/vfscanf.c: Ditto. * libc/stdio/fvwrite.c: Change __sfvwrite into reentrant __sfvwrite_r. Change all previous callers of __sfvwrite. Set errno to EBADF and set error flag on if attempt is made to write to file that does not allow writing. * libc/stdio/fvwrite.h: Fix new reentrant prototypes. * libc/stdio/local.h: Ditto. * libc/stdio/refill.c: Turn __srefill into reentrant __srefill_r. Set errno to EBADF and the error flag on if attempt is made to read unreadable file. Change all previous callers of __srefill. * libc/stdio/rget.c * libc/stdio/wbuf.c: Turn __swbuf into reentrant __swbuf_r. Change all previous callers of __swbuf. * libc/sys/linux/machine/i386/huge_val.h: Ifdef out file contents since huge value macros are already defined correctly for i386 by <math.h>.
2005-02-082005-02-07 Antony King <antony.king@st.com>Jeff Johnston1-0/+4
* libc/stdio/clearerr.c (clearerr): Ensure CHECK_INIT() is called before _flockfile to prevent lock object use before initialisation. _REENT_SMALL_CHECK_INIT() and CHECK_INIT() take a struct _reent * instead of a FILE *. * libc/stdio/fclose.c (_fclose_r): Ditto. * libc/stdio/feof.c (feof): Ditto. * libc/stdio/ferror.c (ferror): Ditto. * libc/stdio/fflush.c (fflush): Ditto. * libc/stdio/fgetc.c (fgetc): Ditto. * libc/stdio/fgets.c (fgets): Ditto. * libc/stdio/fileno.c (fileno): Ditto. * libc/stdio/fputc.c (fputc): Ditto. * libc/stdio/fputs.c (fputs): Ditto. * libc/stdio/fread.c (fread): Ditto. * libc/stdio/freopen.c (_freopen_r): Ditto. * libc/stdio/fseek.c (_fseek_r): Ditto. * libc/stdio/ftell.c (_ftell_r): Ditto. * libc/stdio/fwrite.c (fwrite): Ditto. * libc/stdio/getc.c (getc): Ditto. * libc/stdio/getdelim.c (__getdelim): Ditto. * libc/stdio/putc.c (putc): Ditto. * libc/stdio/setvbuf.c (setvbuf): Ditto. * libc/stdio/ungetc.c (_ungetc_r): Ditto. * libc/stdio/vfprintf.c (_VFPRINTF_R): Ditto. * libc/stdio64/freopen64.c (_freopen64_r): Ditto. * libc/stdio64/fseeko64.c (_fseeko64_r): Ditto. * libc/stdio64/ftello64.c (_ftello64_r): Ditto. * libc/stdio/local.h (CHECK_INIT): Argument is now a struct _reent * instead of a FILE * and so replace incorrect use of _REENT with argument. * libc/sys/arm/syscalls.c (CHECK_INIT): Ditto. * libc/stdio/getchar.c (getchar): _REENT_SMALL_CHECK_INIT() and CHECK_INIT() take a struct _reent * instead of a FILE *. * libc/stdio/iprintf.c (iprintf, _iprintf_r): Ditto. * libc/stdio/iscanf.c (iscanf, _iscanf_r): Ditto. * libc/stdio/perror.c (perror): Ditto. * libc/stdio/printf.c (printf, _printf_r): Ditto. * libc/stdio/putchar.c (putchar): Ditto. * libc/stdio/puts.c (puts): Ditto. * libc/stdio/refill.c (__srefill): Ditto. * libc/stdio/scanf.c (scanf, _scanf_r): Ditto. * libc/stdio/vfscanf.c (VFSCANF, _VFSCANF_R): Ditto. * libc/stdio/viprintf.c (viprintf, _viprintf_r): Ditto. * libc/stdio/viscanf.c (viscanf, _viscanf_r): Ditto. * libc/stdio/vprintf.c (vprintf, _vprintf_r): Ditto. * libc/stdio/vscanf.c (vscanf, _vscanf_r): Ditto. * libc/stdio/wbuf.c (__swbuf): Ditto. * libc/stdio/wsetup.c (__swsetup): Ditto. * libc/stdlib/mallocr.c (malloc_stats): Ditto. * libc/stdlib/mstats.c (_mstats_r): Ditto. * libc/include/sys/reent.h (_REENT_SMALL_CHECK_INIT): Ditto. * libc/machine/powerpc/vfscanf.c (vfscanf): Ditto. * libc/stdio/fgetpos.c (_fgetpos_r): Removed unnecessary calls to _flockfile and _funlockfile; rely on locking in _ftell_r. * libc/stdio64/fgetpos64.c (_fgetpos64_r): Ditto (_ftello64_r). * libc/machine/powerpc/vfprintf.c (__sbprintf): Removed unnecessary initialision of _data field in FILE structure. * libc/machine/powerpc/vfprintf.c (VFPRINTF): Added CHECK_INIT() call.
2004-04-232004-04-23 Artem B. Bityuckiy <abitytsky@softminecorp.com>Jeff Johnston1-5/+6
* libc/stdio/asprintf.c libc/stdio/clearerr.c, libc/stdio/fclose.c libc/stdio/fcloseall.c libc/stdio/fdopen.c, libc/stdio/feof.c libc/stdio/ferror.c libc/stdio/fflush.c, libc/stdio/fgetc.c libc/stdio/fgetpos.c libc/stdio/fgets.c, libc/stdio/fileno.c libc/stdio/findfp.c libc/stdio/fiprintf.c, libc/stdio/flags.c libc/stdio/fopen.c libc/stdio/fprintf.c, libc/stdio/fputc.c libc/stdio/fputs.c libc/stdio/fread.c, libc/stdio/freopen.c libc/stdio/fscanf.c libc/stdio/fseek.c, libc/stdio/fseeko.c libc/stdio/fsetpos.c libc/stdio/ftell.c, libc/stdio/ftello.c libc/stdio/fvwrite.c libc/stdio/fwalk.c, libc/stdio/fwrite.c libc/stdio/getc.c libc/stdio/getc_u.c, libc/stdio/getchar.c libc/stdio/getchar_u.c, libc/stdio/getdelim.c libc/stdio/getline.c libc/stdio/gets.c, libc/stdio/getw.c libc/stdio/iprintf.c libc/stdio/local.h, libc/stdio/makebuf.c libc/stdio/mktemp.c libc/stdio/perror.c, libc/stdio/printf.c libc/stdio/putc.c libc/stdio/putc_u.c, libc/stdio/putchar.c libc/stdio/putchar_u.c libc/stdio/puts.c, libc/stdio/putw.c libc/stdio/refill.c libc/stdio/remove.c, libc/stdio/rename.c libc/stdio/rewind.c libc/stdio/rget.c, libc/stdio/scanf.c libc/stdio/setbuf.c libc/stdio/setbuffer.c, libc/stdio/setlinebuf.c libc/stdio/setvbuf.c, libc/stdio/siprintf.c libc/stdio/snprintf.c, libc/stdio/sprintf.c libc/stdio/sscanf.c libc/stdio/stdio.c, libc/stdio/tmpfile.c libc/stdio/tmpnam.c libc/stdio/ungetc.c, libc/stdio/vasprintf.c libc/stdio/vfieeefp.h, libc/stdio/vfprintf.c libc/stdio/vfscanf.c, libc/stdio/vprintf.c libc/stdio/vscanf.c, libc/stdio/vsnprintf.c libc/stdio/vsprintf.c, libc/stdio/vsscanf.c libc/stdio/wbuf.c, libc/stdio/wsetup.c: Perform minor formatting changes. Move copyright notices to top of file, ensure that <_ansi.h> is included, be consistent with open parentheses, use _DEFUN macro, include "local.h" where needed, and remove various compiler warnings.
2002-05-08 * libc/include/sys/stdio.h: New file.Thomas Fitzsimmons1-1/+5
* libc/sys/linux/sys/stdio.h: New file. * libc/include/stdio.h: Add declarations for flockfile, ftrylockfile, and funlockfile. Include <sys/stdio.h>. * libc/stdio/clearerr.c: Add file locking. * libc/stdio/fclose.c: Likewise. * libc/stdio/feof.c: Likewise. * libc/stdio/ferror.c: Likewise. * libc/stdio/fflush.c: Likewise. * libc/stdio/fgetc.c: Likewise. * libc/stdio/fgetpos.c: Likewise. * libc/stdio/fgets.c: Likewise. * libc/stdio/fileno.c: Likewise. * libc/stdio/fputc.c: Likewise. * libc/stdio/fputs.c: Likewise. * libc/stdio/fread.c: Likewise. * libc/stdio/freopen.c: Likewise. * libc/stdio/fseek.c: Likewise. * libc/stdio/ftell.c: Likewise. * libc/stdio/fwrite.c: Likewise. * libc/stdio/getc.c: Likewise. * libc/stdio/putc.c: Likewise. * libc/stdio/setvbuf.c: Likewise. * libc/stdio/ungetc.c: Likewise. * libc/stdio/vfprintf.c: Likewise.
2000-02-17import newlib-2000-02-17 snapshotChristopher Faylor1-0/+71