diff options
author | 2015-09-21 11:24:49 -0700 | |
---|---|---|
committer | 2015-09-22 18:08:00 -0700 | |
commit | c1bd3b5824027f23b41bbac77c5e28f856c5dc18 (patch) | |
tree | f406ad2f859df99f65c059f8c4019d5a2db1e459 /src/builtin_jobs.cpp | |
parent | fb615843b329b4d3c303b9cebe2af134a52b5bfd (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.cpp | 59 |
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; |