diff options
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | paludis/util/Makefile.am.m4 | 5 | ||||
-rw-r--r-- | paludis/util/output_wrapper.cc | 53 |
3 files changed, 59 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore index 01b70b6a9..25411759d 100644 --- a/.gitignore +++ b/.gitignore @@ -454,6 +454,7 @@ paludis-*.*.*.tar.bz2 /paludis/util/member_iterator_TEST /paludis/util/mutex_TEST /paludis/util/options_TEST +/paludis/util/outputwrapper /paludis/util/pretty_print_TEST /paludis/util/process_TEST /paludis/util/pty_TEST diff --git a/paludis/util/Makefile.am.m4 b/paludis/util/Makefile.am.m4 index 6bf6b8843..f485ae579 100644 --- a/paludis/util/Makefile.am.m4 +++ b/paludis/util/Makefile.am.m4 @@ -88,3 +88,8 @@ util.hh : util.hh.m4 files.m4 libexecpaludisdir = $(libexecdir)/paludis libexecpaludis_SCRIPTS = echo_functions.bash +libexecutilsdir = $(libexecdir)/paludis/utils +libexecutils_PROGRAMS = outputwrapper + +outputwrapper_SOURCES = output_wrapper.cc + diff --git a/paludis/util/output_wrapper.cc b/paludis/util/output_wrapper.cc new file mode 100644 index 000000000..9f2216a23 --- /dev/null +++ b/paludis/util/output_wrapper.cc @@ -0,0 +1,53 @@ +/* vim: set sw=4 sts=4 et foldmethod=syntax : */ + +/* + * Copyright (c) 2007, 2010 Ciaran McCreesh + * + * This file is part of the Paludis package manager. Paludis is free software; + * you can redistribute it and/or modify it under the terms of the GNU General + * Public License version 2, as published by the Free Software Foundation. + * + * Paludis 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 General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., 59 Temple + * Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include <string> +#include <cstring> +#include <iostream> +#include <unistd.h> +#include <errno.h> +#include <stdio.h> +#include <cstdlib> +#include <sys/types.h> + +int +main(int argc, char *argv[]) +{ + int argi(1); + for ( ; argi < argc ; ++argi) + { + std::string s(argv[argi]); + if (s == "--") + { + ++argi; + break; + } + } + + if (argi >= argc) + { + std::cerr << argv[0] << ": no -- found" << std::endl; + return EXIT_FAILURE; + } + + execvp(argv[argi], &argv[argi]); + std::cerr << argv[0] << ": execvp failed: " << std::strerror(errno) << std::endl; + return EXIT_FAILURE; +} + |