(root)/
coreutils-9.4/
lib/
xprintf.c
       1  /* printf wrappers that fail immediately for non-file-related errors
       2     Copyright (C) 2007, 2009-2023 Free Software Foundation, Inc.
       3  
       4     This program is free software: you can redistribute it and/or modify
       5     it under the terms of the GNU General Public License as published by
       6     the Free Software Foundation, either version 3 of the License, or
       7     (at your option) any later version.
       8  
       9     This program 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 General Public License for more details.
      13  
      14     You should have received a copy of the GNU General Public License
      15     along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
      16  
      17  #include <config.h>
      18  
      19  #include "xprintf.h"
      20  
      21  #include <errno.h>
      22  
      23  #include "error.h"
      24  #include "exitfail.h"
      25  #include "gettext.h"
      26  
      27  /* written by Jim Meyering */
      28  
      29  /* Just like printf, but call error if it fails without setting the
      30     stream's error indicator.  */
      31  int
      32  xprintf (char const *restrict format, ...)
      33  {
      34    va_list args;
      35    int retval;
      36    va_start (args, format);
      37    retval = xvprintf (format, args);
      38    va_end (args);
      39  
      40    return retval;
      41  }
      42  
      43  /* Just like vprintf, but call error if it fails without setting the
      44     stream's error indicator.  */
      45  int
      46  xvprintf (char const *restrict format, va_list args)
      47  {
      48    int retval = vprintf (format, args);
      49    if (retval < 0 && ! ferror (stdout))
      50      error (exit_failure, errno, gettext ("cannot perform formatted output"));
      51  
      52    return retval;
      53  }
      54  
      55  /* Just like fprintf, but call error if it fails without setting the
      56     stream's error indicator.  */
      57  int
      58  xfprintf (FILE *restrict stream, char const *restrict format, ...)
      59  {
      60    va_list args;
      61    int retval;
      62    va_start (args, format);
      63    retval = xvfprintf (stream, format, args);
      64    va_end (args);
      65  
      66    return retval;
      67  }
      68  
      69  /* Just like vfprintf, but call error if it fails without setting the
      70     stream's error indicator.  */
      71  int
      72  xvfprintf (FILE *restrict stream, char const *restrict format, va_list args)
      73  {
      74    int retval = vfprintf (stream, format, args);
      75    if (retval < 0 && ! ferror (stream))
      76      error (exit_failure, errno, gettext ("cannot perform formatted output"));
      77  
      78    return retval;
      79  }