aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Kurtis Rader <krader@skepticism.us>2016-05-01 20:32:40 -0700
committerGravatar Kurtis Rader <krader@skepticism.us>2016-05-01 20:38:19 -0700
commitb19bfc0dd3e9f5a0f8530ebccf207cef0824de7e (patch)
treef12a6ba87d9da1959540bf15ca26f7448ce49ebe /src
parent8b2cf81f17f1da78c2fdc2940dd489a2321c247a (diff)
restyle io module to match project style
Reduces lint errors from 15 to 10 (-33%). Line count from 637 to 489 (-23%). Another step in resolving issue #2902.
Diffstat (limited to 'src')
-rw-r--r--src/io.cpp261
-rw-r--r--src/io.h295
2 files changed, 204 insertions, 352 deletions
diff --git a/src/io.cpp b/src/io.cpp
index ed5afe55..72bae3db 100644
--- a/src/io.cpp
+++ b/src/io.cpp
@@ -1,181 +1,132 @@
-/** \file io.c
-
-Utilities for io redirection.
-*/
-#include <stdio.h>
-#include <errno.h>
+// Utilities for io redirection.
#include <assert.h>
-#include <unistd.h>
+#include <errno.h>
#include <stddef.h>
+#include <stdio.h>
+#include <unistd.h>
-#include "fallback.h" // IWYU pragma: keep
-#include "wutil.h" // IWYU pragma: keep
-#include "exec.h"
#include "common.h"
+#include "exec.h"
+#include "fallback.h" // IWYU pragma: keep
#include "io.h"
+#include "wutil.h" // IWYU pragma: keep
-io_data_t::~io_data_t()
-{
-}
+io_data_t::~io_data_t() {}
-void io_close_t::print() const
-{
- fprintf(stderr, "close %d\n", fd);
-}
+void io_close_t::print() const { fprintf(stderr, "close %d\n", fd); }
-void io_fd_t::print() const
-{
- fprintf(stderr, "FD map %d -> %d\n", old_fd, fd);
-}
+void io_fd_t::print() const { fprintf(stderr, "FD map %d -> %d\n", old_fd, fd); }
-void io_file_t::print() const
-{
- fprintf(stderr, "file (%s)\n", filename_cstr);
-}
+void io_file_t::print() const { fprintf(stderr, "file (%s)\n", filename_cstr); }
-void io_pipe_t::print() const
-{
- fprintf(stderr, "pipe {%d, %d} (input: %s)\n", pipe_fd[0], pipe_fd[1],
- is_input ? "yes" : "no");
+void io_pipe_t::print() const {
+ fprintf(stderr, "pipe {%d, %d} (input: %s)\n", pipe_fd[0], pipe_fd[1], is_input ? "yes" : "no");
}
-void io_buffer_t::print() const
-{
- fprintf(stderr, "buffer %p (input: %s, size %lu)\n", out_buffer_ptr(),
- is_input ? "yes" : "no", (unsigned long) out_buffer_size());
+void io_buffer_t::print() const {
+ fprintf(stderr, "buffer %p (input: %s, size %lu)\n", out_buffer_ptr(), is_input ? "yes" : "no",
+ (unsigned long)out_buffer_size());
}
-void io_buffer_t::read()
-{
+void io_buffer_t::read() {
exec_close(pipe_fd[1]);
- if (io_mode == IO_BUFFER)
- {
- /* if( fcntl( pipe_fd[0], F_SETFL, 0 ) )
- {
- wperror( L"fcntl" );
- return;
- } */
+ if (io_mode == IO_BUFFER) {
+#if 0
+ if (fcntl( pipe_fd[0], F_SETFL, 0)) {
+ wperror( L"fcntl" );
+ return;
+ }
+#endif
debug(4, L"io_buffer_t::read: blocking read on fd %d", pipe_fd[0]);
- while (1)
- {
+ while (1) {
char b[4096];
long l;
- l=read_blocked(pipe_fd[0], b, 4096);
- if (l==0)
- {
+ l = read_blocked(pipe_fd[0], b, 4096);
+ if (l == 0) {
break;
- }
- else if (l<0)
- {
- /*
- exec_read_io_buffer is only called on jobs that have
- exited, and will therefore never block. But a broken
- pipe seems to cause some flags to reset, causing the
- EOF flag to not be set. Therefore, EAGAIN is ignored
- and we exit anyway.
- */
- if (errno != EAGAIN)
- {
- debug(1,
- _(L"An error occured while reading output from code block on file descriptor %d"),
+ } else if (l < 0) {
+ // exec_read_io_buffer is only called on jobs that have exited, and will therefore
+ // never block. But a broken pipe seems to cause some flags to reset, causing the
+ // EOF flag to not be set. Therefore, EAGAIN is ignored and we exit anyway.
+ if (errno != EAGAIN) {
+ debug(1, _(L"An error occured while reading output from code block on file "
+ L"descriptor %d"),
pipe_fd[0]);
wperror(L"io_buffer_t::read");
}
break;
- }
- else
- {
+ } else {
out_buffer_append(b, l);
}
}
}
}
-bool io_buffer_t::avoid_conflicts_with_io_chain(const io_chain_t &ios)
-{
+bool io_buffer_t::avoid_conflicts_with_io_chain(const io_chain_t &ios) {
bool result = pipe_avoid_conflicts_with_io_chain(this->pipe_fd, ios);
- if (! result)
- {
+ if (!result) {
wperror(L"dup");
}
return result;
}
-io_buffer_t *io_buffer_t::create(int fd, const io_chain_t &conflicts)
-{
+io_buffer_t *io_buffer_t::create(int fd, const io_chain_t &conflicts) {
bool success = true;
assert(fd >= 0);
io_buffer_t *buffer_redirect = new io_buffer_t(fd);
- if (exec_pipe(buffer_redirect->pipe_fd) == -1)
- {
+ if (exec_pipe(buffer_redirect->pipe_fd) == -1) {
debug(1, PIPE_ERROR);
wperror(L"pipe");
success = false;
- }
- else if (! buffer_redirect->avoid_conflicts_with_io_chain(conflicts))
- {
- // The above call closes the fds on error
+ } else if (!buffer_redirect->avoid_conflicts_with_io_chain(conflicts)) {
+ // The above call closes the fds on error.
success = false;
- }
- else if (make_fd_nonblocking(buffer_redirect->pipe_fd[0]) != 0)
- {
+ } else if (make_fd_nonblocking(buffer_redirect->pipe_fd[0]) != 0) {
debug(1, PIPE_ERROR);
wperror(L"fcntl");
success = false;
}
- if (! success)
- {
+ if (!success) {
delete buffer_redirect;
buffer_redirect = NULL;
}
return buffer_redirect;
}
-io_buffer_t::~io_buffer_t()
-{
- if (pipe_fd[0] >= 0)
- {
+io_buffer_t::~io_buffer_t() {
+ if (pipe_fd[0] >= 0) {
exec_close(pipe_fd[0]);
}
-
- /*
- Dont free fd for writing. This should already be free'd before
- calling exec_read_io_buffer on the buffer
- */
+ // Dont free fd for writing. This should already be free'd before calling exec_read_io_buffer on
+ // the buffer.
}
-void io_chain_t::remove(const shared_ptr<const io_data_t> &element)
-{
- // See if you can guess why std::find doesn't work here
- for (io_chain_t::iterator iter = this->begin(); iter != this->end(); ++iter)
- {
- if (*iter == element)
- {
+void io_chain_t::remove(const shared_ptr<const io_data_t> &element) {
+ // See if you can guess why std::find doesn't work here.
+ for (io_chain_t::iterator iter = this->begin(); iter != this->end(); ++iter) {
+ if (*iter == element) {
this->erase(iter);
break;
}
}
}
-void io_chain_t::push_back(const shared_ptr<io_data_t> &element)
-{
- // Ensure we never push back NULL
+void io_chain_t::push_back(const shared_ptr<io_data_t> &element) {
+ // Ensure we never push back NULL.
assert(element.get() != NULL);
std::vector<shared_ptr<io_data_t> >::push_back(element);
}
-void io_chain_t::push_front(const shared_ptr<io_data_t> &element)
-{
+void io_chain_t::push_front(const shared_ptr<io_data_t> &element) {
assert(element.get() != NULL);
this->insert(this->begin(), element);
}
-void io_chain_t::append(const io_chain_t &chain)
-{
+void io_chain_t::append(const io_chain_t &chain) {
this->insert(this->end(), chain.begin(), chain.end());
}
@@ -207,33 +158,35 @@ void io_print(const io_chain_t &chain)
}
#endif
-/* If the given fd is used by the io chain, duplicates it repeatedly until an fd not used in the io chain is found, or we run out. If we return a new fd or an error, closes the old one. Any fd created is marked close-on-exec. Returns -1 on failure (in which case the given fd is still closed). */
-static int move_fd_to_unused(int fd, const io_chain_t &io_chain)
-{
+/// If the given fd is used by the io chain, duplicates it repeatedly until an fd not used in the io
+/// chain is found, or we run out. If we return a new fd or an error, closes the old one. Any fd
+/// created is marked close-on-exec. Returns -1 on failure (in which case the given fd is still
+/// closed).
+static int move_fd_to_unused(int fd, const io_chain_t &io_chain) {
int new_fd = fd;
- if (fd >= 0 && io_chain.get_io_for_fd(fd).get() != NULL)
- {
- /* We have fd >= 0, and it's a conflict. dup it and recurse. Note that we recurse before anything is closed; this forces the kernel to give us a new one (or report fd exhaustion). */
+ if (fd >= 0 && io_chain.get_io_for_fd(fd).get() != NULL) {
+ // We have fd >= 0, and it's a conflict. dup it and recurse. Note that we recurse before
+ // anything is closed; this forces the kernel to give us a new one (or report fd
+ // exhaustion).
int tmp_fd;
- do
- {
+ do {
tmp_fd = dup(fd);
} while (tmp_fd < 0 && errno == EINTR);
-
+
assert(tmp_fd != fd);
- if (tmp_fd < 0)
- {
- /* Likely fd exhaustion. */
+ if (tmp_fd < 0) {
+ // Likely fd exhaustion.
new_fd = -1;
- }
- else
- {
- /* Ok, we have a new candidate fd. Recurse. If we get a valid fd, either it's the same as what we gave it, or it's a new fd and what we gave it has been closed. If we get a negative value, the fd also has been closed. */
+ } else {
+ // Ok, we have a new candidate fd. Recurse. If we get a valid fd, either it's the same
+ // as what we gave it, or it's a new fd and what we gave it has been closed. If we get a
+ // negative value, the fd also has been closed.
set_cloexec(tmp_fd);
new_fd = move_fd_to_unused(tmp_fd, io_chain);
}
-
- /* We're either returning a new fd or an error. In both cases, we promise to close the old one. */
+
+ // We're either returning a new fd or an error. In both cases, we promise to close the old
+ // one.
assert(new_fd != fd);
int saved_errno = errno;
exec_close(fd);
@@ -242,27 +195,21 @@ static int move_fd_to_unused(int fd, const io_chain_t &io_chain)
return new_fd;
}
-bool pipe_avoid_conflicts_with_io_chain(int fds[2], const io_chain_t &ios)
-{
+bool pipe_avoid_conflicts_with_io_chain(int fds[2], const io_chain_t &ios) {
bool success = true;
- for (int i=0; i < 2; i++)
- {
+ for (int i = 0; i < 2; i++) {
fds[i] = move_fd_to_unused(fds[i], ios);
- if (fds[i] < 0)
- {
+ if (fds[i] < 0) {
success = false;
break;
}
}
-
- /* If any fd failed, close all valid fds */
- if (! success)
- {
+
+ // If any fd failed, close all valid fds.
+ if (!success) {
int saved_errno = errno;
- for (int i=0; i < 2; i++)
- {
- if (fds[i] >= 0)
- {
+ for (int i = 0; i < 2; i++) {
+ if (fds[i] >= 0) {
exec_close(fds[i]);
fds[i] = -1;
}
@@ -272,53 +219,37 @@ bool pipe_avoid_conflicts_with_io_chain(int fds[2], const io_chain_t &ios)
return success;
}
-/* Return the last IO for the given fd */
-shared_ptr<const io_data_t> io_chain_t::get_io_for_fd(int fd) const
-{
+/// Return the last IO for the given fd.
+shared_ptr<const io_data_t> io_chain_t::get_io_for_fd(int fd) const {
size_t idx = this->size();
- while (idx--)
- {
+ while (idx--) {
const shared_ptr<io_data_t> &data = this->at(idx);
- if (data->fd == fd)
- {
+ if (data->fd == fd) {
return data;
}
}
return shared_ptr<const io_data_t>();
}
-shared_ptr<io_data_t> io_chain_t::get_io_for_fd(int fd)
-{
+shared_ptr<io_data_t> io_chain_t::get_io_for_fd(int fd) {
size_t idx = this->size();
- while (idx--)
- {
+ while (idx--) {
const shared_ptr<io_data_t> &data = this->at(idx);
- if (data->fd == fd)
- {
+ if (data->fd == fd) {
return data;
}
}
return shared_ptr<io_data_t>();
}
-/* The old function returned the last match, so we mimic that. */
-shared_ptr<const io_data_t> io_chain_get(const io_chain_t &src, int fd)
-{
+/// The old function returned the last match, so we mimic that.
+shared_ptr<const io_data_t> io_chain_get(const io_chain_t &src, int fd) {
return src.get_io_for_fd(fd);
}
-shared_ptr<io_data_t> io_chain_get(io_chain_t &src, int fd)
-{
- return src.get_io_for_fd(fd);
-}
-
-io_chain_t::io_chain_t(const shared_ptr<io_data_t> &data) :
- std::vector<shared_ptr<io_data_t> >(1, data)
-{
+shared_ptr<io_data_t> io_chain_get(io_chain_t &src, int fd) { return src.get_io_for_fd(fd); }
-}
-
-io_chain_t::io_chain_t() : std::vector<shared_ptr<io_data_t> >()
-{
-}
+io_chain_t::io_chain_t(const shared_ptr<io_data_t> &data)
+ : std::vector<shared_ptr<io_data_t> >(1, data) {}
+io_chain_t::io_chain_t() : std::vector<shared_ptr<io_data_t> >() {}
diff --git a/src/io.h b/src/io.h
index ed634f19..a105e67f 100644
--- a/src/io.h
+++ b/src/io.h
@@ -1,10 +1,10 @@
#ifndef FISH_IO_H
#define FISH_IO_H
-#include <vector>
+#include <stdarg.h>
#include <stddef.h>
#include <stdlib.h>
-#include <stdarg.h>
+#include <vector>
// Note that we have to include something to get any _LIBCPP_VERSION defined so we can detect libc++
// So it's key that vector go above. If we didn't need vector for other reasons, we might include
// ciso646, which does nothing
@@ -21,180 +21,124 @@ using std::tr1::shared_ptr;
#include "common.h"
-/**
- Describes what type of IO operation an io_data_t represents
-*/
-enum io_mode_t
-{
- IO_FILE, IO_PIPE, IO_FD, IO_BUFFER, IO_CLOSE
-};
+/// Describes what type of IO operation an io_data_t represents.
+enum io_mode_t { IO_FILE, IO_PIPE, IO_FD, IO_BUFFER, IO_CLOSE };
-/** Represents an FD redirection */
-class io_data_t
-{
-private:
- /* No assignment or copying allowed */
+/// Represents an FD redirection.
+class io_data_t {
+ private:
+ // No assignment or copying allowed.
io_data_t(const io_data_t &rhs);
void operator=(const io_data_t &rhs);
-protected:
- io_data_t(io_mode_t m, int f) :
- io_mode(m),
- fd(f)
- {
- }
+ protected:
+ io_data_t(io_mode_t m, int f) : io_mode(m), fd(f) {}
-public:
- /** Type of redirect */
+ public:
+ /// Type of redirect.
const io_mode_t io_mode;
- /** FD to redirect */
+ /// FD to redirect.
const int fd;
virtual void print() const = 0;
virtual ~io_data_t() = 0;
};
-class io_close_t : public io_data_t
-{
-public:
- explicit io_close_t(int f) :
- io_data_t(IO_CLOSE, f)
- {
- }
+class io_close_t : public io_data_t {
+ public:
+ explicit io_close_t(int f) : io_data_t(IO_CLOSE, f) {}
virtual void print() const;
};
-class io_fd_t : public io_data_t
-{
-public:
- /** fd to redirect specified fd to. For example, in 2>&1, old_fd is 1, and io_data_t::fd is 2 */
+class io_fd_t : public io_data_t {
+ public:
+ /// fd to redirect specified fd to. For example, in 2>&1, old_fd is 1, and io_data_t::fd is 2.
const int old_fd;
-
- /** Whether this redirection was supplied by a script. For example, 'cmd <&3' would have user_supplied set to true. But a redirection that comes about through transmogrification would not. */
+
+ /// Whether this redirection was supplied by a script. For example, 'cmd <&3' would have
+ /// user_supplied set to true. But a redirection that comes about through transmogrification
+ /// would not.
const bool user_supplied;
-
+
virtual void print() const;
- io_fd_t(int f, int old, bool us) :
- io_data_t(IO_FD, f),
- old_fd(old),
- user_supplied(us)
- {
- }
+ io_fd_t(int f, int old, bool us) : io_data_t(IO_FD, f), old_fd(old), user_supplied(us) {}
};
-class io_file_t : public io_data_t
-{
-public:
- /** Filename, malloc'd. This needs to be used after fork, so don't use wcstring here. */
- const char * const filename_cstr;
- /** file creation flags to send to open */
+class io_file_t : public io_data_t {
+ public:
+ /// Filename, malloc'd. This needs to be used after fork, so don't use wcstring here.
+ const char *const filename_cstr;
+ /// file creation flags to send to open.
const int flags;
virtual void print() const;
- io_file_t(int f, const wcstring &fname, int fl = 0) :
- io_data_t(IO_FILE, f),
- filename_cstr(wcs2str(fname)),
- flags(fl)
- {
- }
+ io_file_t(int f, const wcstring &fname, int fl = 0)
+ : io_data_t(IO_FILE, f), filename_cstr(wcs2str(fname)), flags(fl) {}
- virtual ~io_file_t()
- {
- free((void *)filename_cstr);
- }
+ virtual ~io_file_t() { free((void *)filename_cstr); }
};
-class io_pipe_t : public io_data_t
-{
-protected:
- io_pipe_t(io_mode_t m, int f, bool i):
- io_data_t(m, f),
- is_input(i)
- {
+class io_pipe_t : public io_data_t {
+ protected:
+ io_pipe_t(io_mode_t m, int f, bool i) : io_data_t(m, f), is_input(i) {
pipe_fd[0] = pipe_fd[1] = -1;
}
-public:
+ public:
int pipe_fd[2];
const bool is_input;
virtual void print() const;
- io_pipe_t(int f, bool i):
- io_data_t(IO_PIPE, f),
- is_input(i)
- {
- pipe_fd[0] = pipe_fd[1] = -1;
- }
+ io_pipe_t(int f, bool i) : io_data_t(IO_PIPE, f), is_input(i) { pipe_fd[0] = pipe_fd[1] = -1; }
};
class io_chain_t;
-class io_buffer_t : public io_pipe_t
-{
-private:
- /** buffer to save output in */
+class io_buffer_t : public io_pipe_t {
+ private:
+ /// Buffer to save output in.
std::vector<char> out_buffer;
- explicit io_buffer_t(int f):
- io_pipe_t(IO_BUFFER, f, false /* not input */),
- out_buffer()
- {
- }
+ explicit io_buffer_t(int f) : io_pipe_t(IO_BUFFER, f, false /* not input */), out_buffer() {}
-public:
+ public:
virtual void print() const;
virtual ~io_buffer_t();
- /** Function to append to the buffer */
- void out_buffer_append(const char *ptr, size_t count)
- {
+ /// Function to append to the buffer.
+ void out_buffer_append(const char *ptr, size_t count) {
out_buffer.insert(out_buffer.end(), ptr, ptr + count);
}
- /** Function to get a pointer to the buffer */
- char *out_buffer_ptr(void)
- {
- return out_buffer.empty() ? NULL : &out_buffer.at(0);
- }
+ /// Function to get a pointer to the buffer.
+ char *out_buffer_ptr(void) { return out_buffer.empty() ? NULL : &out_buffer.at(0); }
- const char *out_buffer_ptr(void) const
- {
- return out_buffer.empty() ? NULL : &out_buffer.at(0);
- }
+ const char *out_buffer_ptr(void) const { return out_buffer.empty() ? NULL : &out_buffer.at(0); }
- /** Function to get the size of the buffer */
- size_t out_buffer_size(void) const
- {
- return out_buffer.size();
- }
-
- /* Ensures that the pipes do not conflict with any fd redirections in the chain */
+ /// Function to get the size of the buffer.
+ size_t out_buffer_size(void) const { return out_buffer.size(); }
+
+ /// Ensures that the pipes do not conflict with any fd redirections in the chain.
bool avoid_conflicts_with_io_chain(const io_chain_t &ios);
- /**
- Close output pipe, and read from input pipe until eof.
- */
+ /// Close output pipe, and read from input pipe until eof.
void read();
- /**
- Create a IO_BUFFER type io redirection, complete with a pipe and a
- vector<char> for output. The default file descriptor used is STDOUT_FILENO
- for buffering.
-
- \param fd the fd that will be mapped in the child process, typically STDOUT_FILENO
- \param conflicts A set of IO redirections. The function ensures that any pipe it makes
- does not conflict with an fd redirection in this list.
- */
+ /// Create a IO_BUFFER type io redirection, complete with a pipe and a vector<char> for output.
+ /// The default file descriptor used is STDOUT_FILENO for buffering.
+ ///
+ /// \param fd the fd that will be mapped in the child process, typically STDOUT_FILENO
+ /// \param conflicts A set of IO redirections. The function ensures that any pipe it makes does
+ /// not conflict with an fd redirection in this list.
static io_buffer_t *create(int fd, const io_chain_t &conflicts);
};
-class io_chain_t : public std::vector<shared_ptr<io_data_t> >
-{
-public:
+class io_chain_t : public std::vector<shared_ptr<io_data_t> > {
+ public:
io_chain_t();
explicit io_chain_t(const shared_ptr<io_data_t> &);
@@ -207,102 +151,79 @@ public:
shared_ptr<io_data_t> get_io_for_fd(int fd);
};
-
-/**
- Return the last io redirection in the chain for the specified file descriptor.
-*/
+/// Return the last io redirection in the chain for the specified file descriptor.
shared_ptr<const io_data_t> io_chain_get(const io_chain_t &src, int fd);
shared_ptr<io_data_t> io_chain_get(io_chain_t &src, int fd);
-/* Given a pair of fds, if an fd is used by the given io chain, duplicate that fd repeatedly until we find one that does not conflict, or we run out of fds. Returns the new fds by reference, closing the old ones. If we get an error, returns false (in which case both fds are closed and set to -1). */
+/// Given a pair of fds, if an fd is used by the given io chain, duplicate that fd repeatedly until
+/// we find one that does not conflict, or we run out of fds. Returns the new fds by reference,
+/// closing the old ones. If we get an error, returns false (in which case both fds are closed and
+/// set to -1).
bool pipe_avoid_conflicts_with_io_chain(int fds[2], const io_chain_t &ios);
-/** Class representing the output that a builtin can generate */
-class output_stream_t
-{
-private:
- // no copying
+/// Class representing the output that a builtin can generate.
+class output_stream_t {
+ private:
+ // No copying.
output_stream_t(const output_stream_t &s);
void operator=(const output_stream_t &s);
-
+
wcstring buffer_;
-
-public:
- output_stream_t()
- {
- }
-
- void append(const wcstring &s)
- {
- this->buffer_.append(s);
- }
-
- void append(const wchar_t *s)
- {
- this->buffer_.append(s);
- }
-
- void append(wchar_t s)
- {
- this->buffer_.push_back(s);
- }
-
- void append(const wchar_t *s, size_t amt)
- {
- this->buffer_.append(s, amt);
- }
-
- void push_back(wchar_t c)
- {
- this->buffer_.push_back(c);
- }
-
- void append_format(const wchar_t *format, ...)
- {
+
+ public:
+ output_stream_t() {}
+
+ void append(const wcstring &s) { this->buffer_.append(s); }
+
+ void append(const wchar_t *s) { this->buffer_.append(s); }
+
+ void append(wchar_t s) { this->buffer_.push_back(s); }
+
+ void append(const wchar_t *s, size_t amt) { this->buffer_.append(s, amt); }
+
+ void push_back(wchar_t c) { this->buffer_.push_back(c); }
+
+ void append_format(const wchar_t *format, ...) {
va_list va;
va_start(va, format);
::append_formatv(this->buffer_, format, va);
va_end(va);
}
-
- void append_formatv(const wchar_t *format, va_list va_orig)
- {
+
+ void append_formatv(const wchar_t *format, va_list va_orig) {
::append_formatv(this->buffer_, format, va_orig);
}
-
- const wcstring &buffer() const
- {
- return this->buffer_;
- }
-
- bool empty() const
- {
- return buffer_.empty();
- }
+
+ const wcstring &buffer() const { return this->buffer_; }
+
+ bool empty() const { return buffer_.empty(); }
};
-struct io_streams_t
-{
+struct io_streams_t {
output_stream_t out;
output_stream_t err;
-
+
// fd representing stdin. This is not closed by the destructor.
int stdin_fd;
-
- // Whether stdin is "directly redirected," meaning it is the recipient of a pipe (foo | cmd) or direct redirection (cmd < foo.txt)
- // An "indirect redirection" would be e.g. begin ; cmd ; end < foo.txt
+
+ // Whether stdin is "directly redirected," meaning it is the recipient of a pipe (foo | cmd) or
+ // direct redirection (cmd < foo.txt). An "indirect redirection" would be e.g. begin ; cmd ; end
+ // < foo.txt
bool stdin_is_directly_redirected;
-
- // Indicates whether stdout and stderr are redirected (e.g. to a file or piped)
+
+ // Indicates whether stdout and stderr are redirected (e.g. to a file or piped).
bool out_is_redirected;
bool err_is_redirected;
-
+
// Actual IO redirections. This is only used by the source builtin. Unowned.
const io_chain_t *io_chain;
-
- io_streams_t() : stdin_fd(-1), stdin_is_directly_redirected(false), out_is_redirected(false), err_is_redirected(false), io_chain(NULL)
- {
- }
+
+ io_streams_t()
+ : stdin_fd(-1),
+ stdin_is_directly_redirected(false),
+ out_is_redirected(false),
+ err_is_redirected(false),
+ io_chain(NULL) {}
};
#if 0