Line data Source code
1 : /* Formatted output to a stream. 2 : Copyright (C) 2004, 2006-2025 Free Software Foundation, Inc. 3 : 4 : This file is free software: you can redistribute it and/or modify 5 : it under the terms of the GNU Lesser General Public License as 6 : published by the Free Software Foundation, either version 3 of the 7 : License, or (at your option) any later version. 8 : 9 : This file is distributed in the hope that it will be useful, 10 : but WITHOUT ANY WARRANTY; without even the implied warranty of 11 : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 : GNU Lesser General Public License for more details. 13 : 14 : You should have received a copy of the GNU Lesser General Public License 15 : along with this program. If not, see <https://www.gnu.org/licenses/>. */ 16 : 17 : #ifdef HAVE_CONFIG_H 18 : # include <config.h> 19 : #endif 20 : 21 : /* Specification. */ 22 : #include <stdio.h> 23 : 24 : #include <errno.h> 25 : #include <limits.h> 26 : #include <stdarg.h> 27 : 28 : #include "fseterr.h" 29 : #include "intprops.h" 30 : 31 : int 32 14391 : fprintf (FILE *fp, const char *format, ...) 33 : { 34 : va_list args; 35 : off64_t ret; 36 : 37 14391 : va_start (args, format); 38 14391 : ret = vfzprintf (fp, format, args); 39 14391 : va_end (args); 40 : 41 14391 : if (TYPE_MAXIMUM (off64_t) > INT_MAX && ret > INT_MAX) 42 : { 43 0 : fseterr (fp); 44 0 : errno = EOVERFLOW; 45 0 : return -1; 46 : } 47 : 48 14391 : return ret; 49 : }