1240116Smarcel//
2240116Smarcel// Automated Testing Framework (atf)
3240116Smarcel//
4240116Smarcel// Copyright (c) 2007 The NetBSD Foundation, Inc.
5240116Smarcel// All rights reserved.
6240116Smarcel//
7240116Smarcel// Redistribution and use in source and binary forms, with or without
8240116Smarcel// modification, are permitted provided that the following conditions
9240116Smarcel// are met:
10240116Smarcel// 1. Redistributions of source code must retain the above copyright
11240116Smarcel//    notice, this list of conditions and the following disclaimer.
12240116Smarcel// 2. Redistributions in binary form must reproduce the above copyright
13240116Smarcel//    notice, this list of conditions and the following disclaimer in the
14240116Smarcel//    documentation and/or other materials provided with the distribution.
15240116Smarcel//
16240116Smarcel// THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND
17240116Smarcel// CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
18240116Smarcel// INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
19240116Smarcel// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20240116Smarcel// IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY
21240116Smarcel// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22240116Smarcel// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
23240116Smarcel// GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24240116Smarcel// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
25240116Smarcel// IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
26240116Smarcel// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
27240116Smarcel// IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28240116Smarcel//
29240116Smarcel
30240116Smarcel#if !defined(_ATF_CXX_UTILS_HPP_)
31240116Smarcel#define _ATF_CXX_UTILS_HPP_
32240116Smarcel
33260029Sjmmvextern "C" {
34260029Sjmmv#include <unistd.h>
35260029Sjmmv}
36240116Smarcel
37260029Sjmmv#include <string>
38260029Sjmmv
39240116Smarcelnamespace atf {
40240116Smarcelnamespace utils {
41240116Smarcel
42260029Sjmmvvoid cat_file(const std::string&, const std::string&);
43260029Sjmmvbool compare_file(const std::string&, const std::string&);
44260029Sjmmvvoid copy_file(const std::string&, const std::string&);
45260029Sjmmvvoid create_file(const std::string&, const std::string&);
46260029Sjmmvbool file_exists(const std::string&);
47260029Sjmmvpid_t fork(void);
48260029Sjmmvbool grep_file(const std::string&, const std::string&);
49260029Sjmmvbool grep_string(const std::string&, const std::string&);
50260029Sjmmvvoid redirect(const int, const std::string&);
51260029Sjmmvvoid wait(const pid_t, const int, const std::string&, const std::string&);
52240116Smarcel
53260029Sjmmvtemplate< typename Collection >
54260029Sjmmvbool
55260029Sjmmvgrep_collection(const std::string& regexp, const Collection& collection)
56240116Smarcel{
57260029Sjmmv    for (typename Collection::const_iterator iter = collection.begin();
58260029Sjmmv         iter != collection.end(); ++iter) {
59260029Sjmmv        if (grep_string(regexp, *iter))
60260029Sjmmv            return true;
61240116Smarcel    }
62260029Sjmmv    return false;
63240116Smarcel}
64240116Smarcel
65240116Smarcel} // namespace utils
66240116Smarcel} // namespace atf
67240116Smarcel
68240116Smarcel#endif // !defined(_ATF_CXX_UTILS_HPP_)
69