Ignore:
Timestamp:
Mar 26, 2018, 10:25:56 PM (7 years ago)
Author:
bird
Message:

kmkbuiltin: funnel output thru output.c (usually via err.c).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/kmk/output.c

    r3191 r3192  
    373373
    374374/* write/fwrite like function, binary mode. */
    375 void
     375ssize_t
    376376output_write_bin (struct output *out, int is_err, const char *src, size_t len)
    377377{
     378  size_t ret = len;
    378379  if (!out || !out->syncout)
    379380    {
    380381      FILE *f = is_err ? stderr : stdout;
    381382# ifdef KBUILD_OS_WINDOWS
    382       /* On windows we need to disable \n -> \r\n convers that is common on
     383      /* On windows we need to disable \n -> \r\n converts that is common on
    383384         standard output/error.  Also optimize for console output. */
     385      int saved_errno;
    384386      int fd = fileno (f);
    385387      int prev_mode = _setmode (fd, _O_BINARY);
    386388      maybe_con_fwrite (src, len, 1, f);
    387       fflush (f);
     389      if (fflush (f) == EOF)
     390        ret = -1;
     391      saved_errno = errno;
    388392      _setmode (fd, prev_mode);
     393      errno = saved_errno;
    389394# else
    390395      fwrite (src, len, 1, f);
    391       fflush (f);
     396      if (fflush (f) == EOF)
     397        ret = -1;
    392398# endif
    393399    }
     
    410416        }
    411417    }
     418  return ret;
    412419}
    413420
    414421/* write/fwrite like function, text mode. */
    415 void
     422ssize_t
    416423output_write_text (struct output *out, int is_err, const char *src, size_t len)
    417424{
    418425# if defined (KBUILD_OS_WINDOWS) || defined (KBUILD_OS_OS2) || defined (KBUILD_OS_DOS)
    419   if (out && out->syncout)
     426  ssize_t ret = len;
     427  if (!out || !out->syncout)
    420428    {
    421429      /* ASSUME fwrite does the desired conversion. */
    422430      FILE *f = is_err ? stderr : stdout;
    423431# ifdef KBUILD_OS_WINDOWS
    424       maybe_con_fwrite (src, len, 1, f);
     432      if (maybe_con_fwrite (src, len, 1, f) < 0)
     433        ret = -1;
    425434# else
    426435      fwrite (src, len, 1, f);
    427436# endif
    428       fflush (f);
     437      if (fflush (f) == EOF)
     438        ret = -1;
    429439    }
    430440  else
     
    443453        }
    444454    }
     455  return len;
    445456# else
    446   output_write_bin (out, is_err, src, len);
     457  return output_write_bin (out, is_err, src, len);
    447458# endif
    448459}
Note: See TracChangeset for help on using the changeset viewer.