/* Verify capture output from a subprocess. Copyright (C) 2017-2018 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see . */ #include #include #include #include static void print_context (const char *context, bool *failed) { if (*failed) /* Do not duplicate message. */ return; support_record_failure (); printf ("error: subprocess failed: %s\n", context); } void support_capture_subprocess_check (struct support_capture_subprocess *proc, const char *context, int status, int allowed) { TEST_VERIFY ((allowed & sc_allow_none) || (allowed & sc_allow_stdout) || (allowed & sc_allow_stderr)); TEST_VERIFY (!((allowed & sc_allow_none) && ((allowed & sc_allow_stdout) || (allowed & sc_allow_stderr)))); bool failed = false; if (proc->status != status) { print_context (context, &failed); printf ("error: expected exit status: %d\n", status); printf ("error: actual exit status: %d\n", proc->status); } if (!(allowed & sc_allow_stdout) && proc->out.length != 0) { print_context (context, &failed); printf ("error: unexpected output from subprocess\n"); fwrite (proc->out.buffer, proc->out.length, 1, stdout); puts ("\n"); } if (!(allowed & sc_allow_stderr) && proc->err.length != 0) { print_context (context, &failed); printf ("error: unexpected error output from subprocess\n"); fwrite (proc->err.buffer, proc->err.length, 1, stdout); puts ("\n"); } }