return xopen3(pathname, flags, 0666);
}
+/* Die if we can't open an existing file readonly with O_NONBLOCK
+ * and return the fd.
+ * Note that for ioctl O_RDONLY is sufficient.
+ */
+int FAST_FUNC xopen_nonblocking(const char *pathname)
+{
+ return xopen(pathname, O_RDONLY | O_NONBLOCK);
+}
+
// Warn if we can't open a file and return a fd.
int FAST_FUNC open3_or_warn(const char *pathname, int flags, int mode)
{
die_if_ferror(stdout, bb_msg_standard_output);
}
-// Die with an error message if we have trouble flushing stdout.
-void FAST_FUNC xfflush_stdout(void)
+int FAST_FUNC fflush_all(void)
{
- if (fflush(stdout)) {
- bb_perror_msg_and_die(bb_msg_standard_output);
- }
+ return fflush(NULL);
}
* then close that file. */
void FAST_FUNC xprint_and_close_file(FILE *file)
{
- fflush(stdout);
+ fflush_all();
// copyfd outputs error messages for us.
- if (bb_copyfd_eof(fileno(file), 1) == -1)
+ if (bb_copyfd_eof(fileno(file), STDOUT_FILENO) == -1)
xfunc_die();
fclose(file);