aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/builtin_jobs.cpp
diff options
context:
space:
mode:
authorGravatar ridiculousfish <corydoras@ridiculousfish.com>2015-09-21 11:24:49 -0700
committerGravatar ridiculousfish <corydoras@ridiculousfish.com>2015-09-22 18:08:00 -0700
commitc1bd3b5824027f23b41bbac77c5e28f856c5dc18 (patch)
treef406ad2f859df99f65c059f8c4019d5a2db1e459 /src/builtin_jobs.cpp
parentfb615843b329b4d3c303b9cebe2af134a52b5bfd (diff)
Eliminate global variables associated with builtin IO
This change eliminates global variables like stdout_buffer. Instead we wrap up the IO information into a new struct io_streams_t, and thread that through every builtin. This makes the intent clearer, gives us a place to hang new IO data, and eliminates the ugly global state management like builtin_push_io.
Diffstat (limited to 'src/builtin_jobs.cpp')
-rw-r--r--src/builtin_jobs.cpp59
1 files changed, 28 insertions, 31 deletions
diff --git a/src/builtin_jobs.cpp b/src/builtin_jobs.cpp
index 32079287..6f4b57a8 100644
--- a/src/builtin_jobs.cpp
+++ b/src/builtin_jobs.cpp
@@ -71,7 +71,7 @@ static int cpu_use(const job_t *j)
/**
Print information about the specified job
*/
-static void builtin_jobs_print(const job_t *j, int mode, int header)
+static void builtin_jobs_print(const job_t *j, int mode, int header, io_streams_t &streams)
{
process_t *p;
switch (mode)
@@ -84,22 +84,22 @@ static void builtin_jobs_print(const job_t *j, int mode, int header)
/*
Print table header before first job
*/
- stdout_buffer.append(_(L"Job\tGroup\t"));
+ streams.out.append(_(L"Job\tGroup\t"));
#ifdef HAVE__PROC_SELF_STAT
- stdout_buffer.append(_(L"CPU\t"));
+ streams.out.append(_(L"CPU\t"));
#endif
- stdout_buffer.append(_(L"State\tCommand\n"));
+ streams.out.append(_(L"State\tCommand\n"));
}
- append_format(stdout_buffer, L"%d\t%d\t", j->job_id, j->pgid);
+ streams.out.append_format( L"%d\t%d\t", j->job_id, j->pgid);
#ifdef HAVE__PROC_SELF_STAT
- append_format(stdout_buffer, L"%d%%\t", cpu_use(j));
+ streams.out.append_format( L"%d%%\t", cpu_use(j));
#endif
- stdout_buffer.append(job_is_stopped(j)?_(L"stopped"):_(L"running"));
- stdout_buffer.append(L"\t");
- stdout_buffer.append(j->command_wcstr());
- stdout_buffer.append(L"\n");
+ streams.out.append(job_is_stopped(j)?_(L"stopped"):_(L"running"));
+ streams.out.append(L"\t");
+ streams.out.append(j->command_wcstr());
+ streams.out.append(L"\n");
break;
}
@@ -110,9 +110,9 @@ static void builtin_jobs_print(const job_t *j, int mode, int header)
/*
Print table header before first job
*/
- stdout_buffer.append(_(L"Group\n"));
+ streams.out.append(_(L"Group\n"));
}
- append_format(stdout_buffer, L"%d\n", j->pgid);
+ streams.out.append_format( L"%d\n", j->pgid);
break;
}
@@ -123,12 +123,12 @@ static void builtin_jobs_print(const job_t *j, int mode, int header)
/*
Print table header before first job
*/
- stdout_buffer.append(_(L"Process\n"));
+ streams.out.append(_(L"Process\n"));
}
for (p=j->first_process; p; p=p->next)
{
- append_format(stdout_buffer, L"%d\n", p->pid);
+ streams.out.append_format( L"%d\n", p->pid);
}
break;
}
@@ -140,12 +140,12 @@ static void builtin_jobs_print(const job_t *j, int mode, int header)
/*
Print table header before first job
*/
- stdout_buffer.append(_(L"Command\n"));
+ streams.out.append(_(L"Command\n"));
}
for (p=j->first_process; p; p=p->next)
{
- append_format(stdout_buffer, L"%ls\n", p->argv0());
+ streams.out.append_format( L"%ls\n", p->argv0());
}
break;
}
@@ -158,7 +158,7 @@ static void builtin_jobs_print(const job_t *j, int mode, int header)
/**
The jobs builtin. Used fopr printing running jobs. Defined in builtin_jobs.c.
*/
-static int builtin_jobs(parser_t &parser, wchar_t **argv)
+static int builtin_jobs(parser_t &parser, io_streams_t &streams, wchar_t **argv)
{
wgetopter_t w;
int argc=0;
@@ -215,12 +215,11 @@ static int builtin_jobs(parser_t &parser, wchar_t **argv)
case 0:
if (long_options[opt_index].flag != 0)
break;
- append_format(stderr_buffer,
- BUILTIN_ERR_UNKNOWN,
+ streams.err.append_format(BUILTIN_ERR_UNKNOWN,
argv[0],
long_options[opt_index].name);
- builtin_print_help(parser, argv[0], stderr_buffer);
+ builtin_print_help(parser, streams, argv[0], streams.err);
return 1;
@@ -245,11 +244,11 @@ static int builtin_jobs(parser_t &parser, wchar_t **argv)
}
case 'h':
- builtin_print_help(parser, argv[0], stdout_buffer);
+ builtin_print_help(parser, streams, argv[0], streams.out);
return 0;
case '?':
- builtin_unknown_option(parser, argv[0], argv[w.woptind-1]);
+ builtin_unknown_option(parser, streams, argv[0], argv[w.woptind-1]);
return 1;
}
@@ -259,7 +258,7 @@ static int builtin_jobs(parser_t &parser, wchar_t **argv)
/*
Do not babble if not interactive
*/
- if (builtin_out_redirect)
+ if (streams.out_is_redirected)
{
found=1;
}
@@ -276,7 +275,7 @@ static int builtin_jobs(parser_t &parser, wchar_t **argv)
if ((j->flags & JOB_CONSTRUCTED) && !job_is_completed(j))
{
- builtin_jobs_print(j, mode, !found);
+ builtin_jobs_print(j, mode, !found, streams);
return 0;
}
}
@@ -298,8 +297,7 @@ static int builtin_jobs(parser_t &parser, wchar_t **argv)
pid=fish_wcstoi(argv[i], &end, 10);
if (errno || *end)
{
- append_format(stderr_buffer,
- _(L"%ls: '%ls' is not a job\n"),
+ streams.err.append_format(_(L"%ls: '%ls' is not a job\n"),
argv[0],
argv[i]);
return 1;
@@ -309,12 +307,11 @@ static int builtin_jobs(parser_t &parser, wchar_t **argv)
if (j && !job_is_completed(j))
{
- builtin_jobs_print(j, mode, !found);
+ builtin_jobs_print(j, mode, !found, streams);
}
else
{
- append_format(stderr_buffer,
- _(L"%ls: No suitable job: %d\n"),
+ streams.err.append_format(_(L"%ls: No suitable job: %d\n"),
argv[0],
pid);
return 1;
@@ -332,7 +329,7 @@ static int builtin_jobs(parser_t &parser, wchar_t **argv)
*/
if ((j->flags & JOB_CONSTRUCTED) && !job_is_completed(j))
{
- builtin_jobs_print(j, mode, !found);
+ builtin_jobs_print(j, mode, !found, streams);
found = 1;
}
}
@@ -341,7 +338,7 @@ static int builtin_jobs(parser_t &parser, wchar_t **argv)
if (!found)
{
- append_format(stdout_buffer,
+ streams.out.append_format(
_(L"%ls: There are no jobs\n"),
argv[0]);
return 1;