blob: 49d5472092e49ad936da8647fe7e504040e073a2 [file] [log] [blame]
Darin Petkov36a3ace2012-03-06 17:22:14 +01001// Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
Darin Petkovf7897bc2011-06-08 17:13:36 -07002// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
Christopher Wiley5447d2e2013-03-19 17:46:03 -07005#include "shill/glib.h"
6
7#include <string>
8
Ben Chana0ddf462014-02-06 11:32:42 -08009#include <base/strings/stringprintf.h>
Darin Petkov083047b2011-06-23 20:42:48 -070010
Christopher Wiley5447d2e2013-03-19 17:46:03 -070011#include "shill/logging.h"
12
13using std::string;
Darin Petkovf7897bc2011-06-08 17:13:36 -070014
15namespace shill {
16
Christopher Wiley0f3eab32013-03-21 11:55:41 -070017GLib::GLib() {}
Darin Petkov3258a812011-06-23 11:28:45 -070018GLib::~GLib() {}
19
Darin Petkov083047b2011-06-23 20:42:48 -070020std::string GLib::ConvertErrorToMessage(GError *error) {
21 if (!error) {
22 return "Unknown GLib error.";
23 }
24 std::string message =
25 base::StringPrintf("GError(%d): %s", error->code, error->message);
26 g_error_free(error);
27 return message;
28}
29
Christopher Wiley5447d2e2013-03-19 17:46:03 -070030bool GLib::B64Decode(const string &input, string *output) {
31 CHECK(output);
32 gsize result_len = 0;
Christopher Wiley0f3eab32013-03-21 11:55:41 -070033 guchar *result = g_base64_decode(input.c_str(), &result_len);
Christopher Wiley5447d2e2013-03-19 17:46:03 -070034 if (!result) {
35 LOG(ERROR) << "Failed in encoding.";
36 return false;
37 }
38
39 if (!result_len) {
40 LOG(ERROR) << "Failed in encoding.";
41 Free(result);
42 return false;
43 }
44
45 output->assign(reinterpret_cast<char *>(result), result_len);
46 Free(result);
47 return true;
48}
49
50bool GLib::B64Encode(const string &input, string *output) {
51 CHECK(output);
Christopher Wiley0f3eab32013-03-21 11:55:41 -070052 gchar *result = g_base64_encode(
Christopher Wiley5447d2e2013-03-19 17:46:03 -070053 reinterpret_cast<const unsigned char *>(input.c_str()), input.length());
54 if (!result) {
55 LOG(ERROR) << "Failed in encoding.";
56 return false;
57 }
58
59 output->assign(result);
60 Free(result);
61 return true;
62}
63
Darin Petkov92c43902011-06-09 20:46:06 -070064guint GLib::ChildWatchAdd(GPid pid,
65 GChildWatchFunc function,
66 gpointer data) {
67 return g_child_watch_add(pid, function, data);
68}
69
Darin Petkov083047b2011-06-23 20:42:48 -070070void GLib::Free(gpointer mem) {
71 g_free(mem);
72}
73
74void GLib::KeyFileFree(GKeyFile *key_file) {
75 g_key_file_free(key_file);
76}
77
78gboolean GLib::KeyFileLoadFromFile(GKeyFile *key_file,
79 const gchar *file,
80 GKeyFileFlags flags,
81 GError **error) {
82 return g_key_file_load_from_file(key_file, file, flags, error);
83}
84
85gboolean GLib::KeyFileGetBoolean(GKeyFile *key_file,
86 const gchar *group_name,
87 const gchar *key,
88 GError **error) {
89 return g_key_file_get_boolean(key_file, group_name, key, error);
90}
91
92gchar **GLib::KeyFileGetGroups(GKeyFile *key_file,
93 gsize *length) {
94 return g_key_file_get_groups(key_file, length);
95}
96
97gint GLib::KeyFileGetInteger(GKeyFile *key_file,
98 const gchar *group_name,
99 const gchar *key,
100 GError **error) {
101 return g_key_file_get_integer(key_file, group_name, key, error);
102}
103
104gchar *GLib::KeyFileGetString(GKeyFile *key_file,
105 const gchar *group_name,
106 const gchar *key,
107 GError **error) {
108 return g_key_file_get_string(key_file, group_name, key, error);
109}
110
Darin Petkovb2841fd2011-06-30 12:54:12 -0700111gchar **GLib::KeyFileGetStringList(GKeyFile *key_file,
112 const gchar *group_name,
113 const gchar *key,
114 gsize *length,
115 GError **error) {
116 return g_key_file_get_string_list(key_file, group_name, key, length, error);
117}
118
Darin Petkov083047b2011-06-23 20:42:48 -0700119gboolean GLib::KeyFileHasGroup(GKeyFile *key_file,
120 const gchar *group_name) {
121 return g_key_file_has_group(key_file, group_name);
122}
123
Paul Stewarta41e38d2011-11-11 07:47:29 -0800124gboolean GLib::KeyFileHasKey(GKeyFile *key_file,
125 const gchar *group_name,
126 const gchar *key,
127 GError **error) {
128 return g_key_file_has_key(key_file, group_name, key, error);
129}
130
Darin Petkov083047b2011-06-23 20:42:48 -0700131GKeyFile *GLib::KeyFileNew() {
132 return g_key_file_new();
133}
134
135void GLib::KeyFileRemoveGroup(GKeyFile *key_file,
136 const gchar *group_name,
137 GError **error) {
138 g_key_file_remove_group(key_file, group_name, error);
139}
140
141void GLib::KeyFileRemoveKey(GKeyFile *key_file,
142 const gchar *group_name,
143 const gchar *key,
144 GError **error) {
145 g_key_file_remove_key(key_file, group_name, key, error);
146}
147
148void GLib::KeyFileSetBoolean(GKeyFile *key_file,
149 const gchar *group_name,
150 const gchar *key,
151 gboolean value) {
152 g_key_file_set_boolean(key_file, group_name, key, value);
153}
154
Paul Stewart5dc40aa2011-10-28 19:43:43 -0700155gboolean GLib::KeyFileSetComment(GKeyFile *key_file,
156 const gchar *group_name,
157 const gchar *key,
158 const gchar *comment,
159 GError **error) {
160 return g_key_file_set_comment(key_file, group_name, key, comment, error);
161}
162
Darin Petkov083047b2011-06-23 20:42:48 -0700163void GLib::KeyFileSetInteger(GKeyFile *key_file,
164 const gchar *group_name,
165 const gchar *key,
166 gint value) {
167 g_key_file_set_integer(key_file, group_name, key, value);
168}
169
170void GLib::KeyFileSetString(GKeyFile *key_file,
171 const gchar *group_name,
172 const gchar *key,
Hristo Stefanoved2c28c2011-11-29 15:37:30 -0800173 const gchar *value) {
174 g_key_file_set_string(key_file, group_name, key, value);
Darin Petkov083047b2011-06-23 20:42:48 -0700175}
176
Darin Petkovb2841fd2011-06-30 12:54:12 -0700177void GLib::KeyFileSetStringList(GKeyFile *key_file,
178 const gchar *group_name,
179 const gchar *key,
180 const gchar * const list[],
181 gsize length) {
182 g_key_file_set_string_list(key_file, group_name, key, list, length);
183}
184
Darin Petkov083047b2011-06-23 20:42:48 -0700185gchar *GLib::KeyFileToData(GKeyFile *key_file,
186 gsize *length,
187 GError **error) {
188 return g_key_file_to_data(key_file, length, error);
189}
190
Darin Petkov92c43902011-06-09 20:46:06 -0700191gboolean GLib::SourceRemove(guint tag) {
192 return g_source_remove(tag);
193}
194
Darin Petkovf7897bc2011-06-08 17:13:36 -0700195gboolean GLib::SpawnAsync(const gchar *working_directory,
196 gchar **argv,
197 gchar **envp,
198 GSpawnFlags flags,
199 GSpawnChildSetupFunc child_setup,
200 gpointer user_data,
201 GPid *child_pid,
202 GError **error) {
203 return g_spawn_async(working_directory,
204 argv,
205 envp,
206 flags,
207 child_setup,
208 user_data,
209 child_pid,
210 error);
211}
212
Darin Petkov92c43902011-06-09 20:46:06 -0700213void GLib::SpawnClosePID(GPid pid) {
214 g_spawn_close_pid(pid);
215}
216
Darin Petkov3c5e4dc2012-04-02 14:44:27 +0200217gboolean GLib::SpawnSync(const gchar *working_directory,
218 gchar **argv,
219 gchar **envp,
220 GSpawnFlags flags,
221 GSpawnChildSetupFunc child_setup,
222 gpointer user_data,
223 gchar **standard_output,
224 gchar **standard_error,
225 gint *exit_status,
226 GError **error) {
227 return g_spawn_sync(working_directory,
228 argv,
229 envp,
230 flags,
231 child_setup,
232 user_data,
233 standard_output,
234 standard_error,
235 exit_status,
236 error);
237}
238
Darin Petkov083047b2011-06-23 20:42:48 -0700239void GLib::Strfreev(gchar **str_array) {
240 g_strfreev(str_array);
241}
242
Darin Petkov887f2982011-07-14 16:10:17 -0700243void GLib::TypeInit() {
244 g_type_init();
245}
246
Darin Petkovf7897bc2011-06-08 17:13:36 -0700247} // namespace shill