/usr/include/sbuild/sbuild-keyfile.h is in libsbuild-dev 1.6.8-1ubuntu1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 | /* Copyright © 2005-2007 Roger Leigh <rleigh@debian.org>
*
* schroot is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* schroot 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, see
* <http://www.gnu.org/licenses/>.
*
*********************************************************************/
#ifndef SBUILD_KEYFILE_H
#define SBUILD_KEYFILE_H
#include <sbuild/sbuild-basic-keyfile.h>
namespace sbuild
{
/**
* Traits class for an INI-style configuration file. The format is
* documented in schroot.conf(5).
*/
struct keyfile_traits
{
/// Group name.
typedef std::string group_name_type;
/// Key name.
typedef std::string key_type;
/// Value.
typedef std::string value_type;
/// Comment.
typedef std::string comment_type;
/// Line number.
typedef unsigned int size_type;
};
/**
* Keyfile parser template
*/
template <typename K>
class keyfile_parser : public basic_keyfile_parser<K>
{
public:
// Workaround for GCC bug.
typedef keyfile_base::error error;
// This is the correct form, but is not currently supported by
// GCC. http://gcc.gnu.org/bugzilla/show_bug.cgi?id=14258
// using typename basic_keyfile_parser<K>::error;
using basic_keyfile_parser<K>::group;
using basic_keyfile_parser<K>::group_set;
using basic_keyfile_parser<K>::key;
using basic_keyfile_parser<K>::key_set;
using basic_keyfile_parser<K>::value;
using basic_keyfile_parser<K>::value_set;
using basic_keyfile_parser<K>::comment;
using basic_keyfile_parser<K>::comment_set;
using basic_keyfile_parser<K>::line_number;
keyfile_parser():
basic_keyfile_parser<K>()
{}
virtual ~keyfile_parser()
{}
virtual void
parse_line (std::string const& line)
{
if (comment_set == true)
{
comment.clear();
comment_set = false;
}
if (group_set == true)
{
// The group isn't cleared
group_set = false;
}
if (key_set == true)
{
key.clear();
key_set = false;
}
if (value_set == true)
{
value.clear();
value_set = false;
}
if (line.length() == 0)
{
// Empty line; do nothing.
}
else if (line[0] == '#') // Comment line
{
if (!comment.empty())
comment += '\n';
comment += line.substr(1);
}
else if (line[0] == '[') // Group
{
std::string::size_type fpos = line.find_first_of(']');
std::string::size_type lpos = line.find_last_of(']');
if (fpos == std::string::npos || lpos == std::string::npos ||
fpos != lpos)
throw error(line_number, keyfile_base::INVALID_GROUP, line);
group = line.substr(1, fpos - 1);
if (group.length() == 0)
throw error(line_number, keyfile_base::INVALID_GROUP, line);
comment_set = true;
group_set = true;
}
else // Item
{
std::string::size_type pos = line.find_first_of('=');
if (pos == std::string::npos)
throw error(line_number, keyfile_base::INVALID_LINE, line);
if (pos == 0)
throw error(line_number, keyfile_base::NO_KEY, line);
key = line.substr(0, pos);
if (pos == line.length() - 1)
value = "";
else
value = line.substr(pos + 1);
// No group specified
if (group.empty())
throw error(line_number, keyfile_base::NO_GROUP, line);
comment_set = true;
key_set = true;
value_set = true;
}
basic_keyfile_parser<K>::parse_line(line);
}
};
/**
* Configuration file parser. This class loads an INI-style
* configuration file from a file or stream. The format is
* documented in schroot.conf(5).
*/
typedef basic_keyfile<keyfile_traits, keyfile_parser<keyfile_traits> > keyfile;
}
#endif /* SBUILD_KEYFILE_H */
/*
* Local Variables:
* mode:C++
* End:
*/
|