blob: b973d3b43359fb9edc0311ded24556433563fdc9 [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
Paul Stewart8ae18742015-06-16 13:13:10 -070020std::string GLib::ConvertErrorToMessage(GError* error) {
Darin Petkov083047b2011-06-23 20:42:48 -070021 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
Paul Stewart8ae18742015-06-16 13:13:10 -070030bool GLib::B64Decode(const string& input, string* output) {
Christopher Wiley5447d2e2013-03-19 17:46:03 -070031 CHECK(output);
32 gsize result_len = 0;
Paul Stewart8ae18742015-06-16 13:13:10 -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
Paul Stewart8ae18742015-06-16 13:13:10 -070045 output->assign(reinterpret_cast<char*>(result), result_len);
Christopher Wiley5447d2e2013-03-19 17:46:03 -070046 Free(result);
47 return true;
48}
49
Paul Stewart8ae18742015-06-16 13:13:10 -070050bool GLib::B64Encode(const string& input, string* output) {
Christopher Wiley5447d2e2013-03-19 17:46:03 -070051 CHECK(output);
Paul Stewart8ae18742015-06-16 13:13:10 -070052 gchar* result = g_base64_encode(
53 reinterpret_cast<const unsigned char*>(input.c_str()), input.length());
Christopher Wiley5447d2e2013-03-19 17:46:03 -070054 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
Paul Stewart8ae18742015-06-16 13:13:10 -070074void GLib::KeyFileFree(GKeyFile* key_file) {
Darin Petkov083047b2011-06-23 20:42:48 -070075 g_key_file_free(key_file);
76}
77
Paul Stewart8ae18742015-06-16 13:13:10 -070078gboolean GLib::KeyFileLoadFromFile(GKeyFile* key_file,
79 const gchar* file,
Darin Petkov083047b2011-06-23 20:42:48 -070080 GKeyFileFlags flags,
Paul Stewart8ae18742015-06-16 13:13:10 -070081 GError** error) {
Darin Petkov083047b2011-06-23 20:42:48 -070082 return g_key_file_load_from_file(key_file, file, flags, error);
83}
84
Paul Stewart8ae18742015-06-16 13:13:10 -070085gboolean GLib::KeyFileGetBoolean(GKeyFile* key_file,
86 const gchar* group_name,
87 const gchar* key,
88 GError** error) {
Darin Petkov083047b2011-06-23 20:42:48 -070089 return g_key_file_get_boolean(key_file, group_name, key, error);
90}
91
Paul Stewart8ae18742015-06-16 13:13:10 -070092gchar** GLib::KeyFileGetGroups(GKeyFile* key_file,
93 gsize* length) {
Darin Petkov083047b2011-06-23 20:42:48 -070094 return g_key_file_get_groups(key_file, length);
95}
96
Paul Stewart8ae18742015-06-16 13:13:10 -070097gint GLib::KeyFileGetInteger(GKeyFile* key_file,
98 const gchar* group_name,
99 const gchar* key,
100 GError** error) {
Darin Petkov083047b2011-06-23 20:42:48 -0700101 return g_key_file_get_integer(key_file, group_name, key, error);
102}
103
Paul Stewart8ae18742015-06-16 13:13:10 -0700104gchar* GLib::KeyFileGetString(GKeyFile* key_file,
105 const gchar* group_name,
106 const gchar* key,
107 GError** error) {
Darin Petkov083047b2011-06-23 20:42:48 -0700108 return g_key_file_get_string(key_file, group_name, key, error);
109}
110
Paul Stewart8ae18742015-06-16 13:13:10 -0700111gchar** GLib::KeyFileGetStringList(GKeyFile* key_file,
112 const gchar* group_name,
113 const gchar* key,
114 gsize* length,
115 GError** error) {
Darin Petkovb2841fd2011-06-30 12:54:12 -0700116 return g_key_file_get_string_list(key_file, group_name, key, length, error);
117}
118
Paul Stewart8ae18742015-06-16 13:13:10 -0700119gboolean GLib::KeyFileHasGroup(GKeyFile* key_file,
120 const gchar* group_name) {
Darin Petkov083047b2011-06-23 20:42:48 -0700121 return g_key_file_has_group(key_file, group_name);
122}
123
Paul Stewart8ae18742015-06-16 13:13:10 -0700124gboolean GLib::KeyFileHasKey(GKeyFile* key_file,
125 const gchar* group_name,
126 const gchar* key,
127 GError** error) {
Paul Stewarta41e38d2011-11-11 07:47:29 -0800128 return g_key_file_has_key(key_file, group_name, key, error);
129}
130
Paul Stewart8ae18742015-06-16 13:13:10 -0700131GKeyFile* GLib::KeyFileNew() {
Darin Petkov083047b2011-06-23 20:42:48 -0700132 return g_key_file_new();
133}
134
Paul Stewart8ae18742015-06-16 13:13:10 -0700135void GLib::KeyFileRemoveGroup(GKeyFile* key_file,
136 const gchar* group_name,
137 GError** error) {
Darin Petkov083047b2011-06-23 20:42:48 -0700138 g_key_file_remove_group(key_file, group_name, error);
139}
140
Paul Stewart8ae18742015-06-16 13:13:10 -0700141void GLib::KeyFileRemoveKey(GKeyFile* key_file,
142 const gchar* group_name,
143 const gchar* key,
144 GError** error) {
Darin Petkov083047b2011-06-23 20:42:48 -0700145 g_key_file_remove_key(key_file, group_name, key, error);
146}
147
Paul Stewart8ae18742015-06-16 13:13:10 -0700148void GLib::KeyFileSetBoolean(GKeyFile* key_file,
149 const gchar* group_name,
150 const gchar* key,
Darin Petkov083047b2011-06-23 20:42:48 -0700151 gboolean value) {
152 g_key_file_set_boolean(key_file, group_name, key, value);
153}
154
Paul Stewart8ae18742015-06-16 13:13:10 -0700155gboolean GLib::KeyFileSetComment(GKeyFile* key_file,
156 const gchar* group_name,
157 const gchar* key,
158 const gchar* comment,
159 GError** error) {
Paul Stewart5dc40aa2011-10-28 19:43:43 -0700160 return g_key_file_set_comment(key_file, group_name, key, comment, error);
161}
162
Paul Stewart8ae18742015-06-16 13:13:10 -0700163void GLib::KeyFileSetInteger(GKeyFile* key_file,
164 const gchar* group_name,
165 const gchar* key,
Darin Petkov083047b2011-06-23 20:42:48 -0700166 gint value) {
167 g_key_file_set_integer(key_file, group_name, key, value);
168}
169
Paul Stewart8ae18742015-06-16 13:13:10 -0700170void GLib::KeyFileSetString(GKeyFile* key_file,
171 const gchar* group_name,
172 const gchar* key,
173 const gchar* value) {
Hristo Stefanoved2c28c2011-11-29 15:37:30 -0800174 g_key_file_set_string(key_file, group_name, key, value);
Darin Petkov083047b2011-06-23 20:42:48 -0700175}
176
Paul Stewart8ae18742015-06-16 13:13:10 -0700177void GLib::KeyFileSetStringList(GKeyFile* key_file,
178 const gchar* group_name,
179 const gchar* key,
180 const gchar* const list[],
Darin Petkovb2841fd2011-06-30 12:54:12 -0700181 gsize length) {
182 g_key_file_set_string_list(key_file, group_name, key, list, length);
183}
184
Paul Stewart8ae18742015-06-16 13:13:10 -0700185gchar* GLib::KeyFileToData(GKeyFile* key_file,
186 gsize* length,
187 GError** error) {
Darin Petkov083047b2011-06-23 20:42:48 -0700188 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
Paul Stewart8ae18742015-06-16 13:13:10 -0700195gboolean GLib::SpawnAsync(const gchar* working_directory,
196 gchar** argv,
197 gchar** envp,
Darin Petkovf7897bc2011-06-08 17:13:36 -0700198 GSpawnFlags flags,
199 GSpawnChildSetupFunc child_setup,
200 gpointer user_data,
Paul Stewart8ae18742015-06-16 13:13:10 -0700201 GPid* child_pid,
202 GError** error) {
Darin Petkovf7897bc2011-06-08 17:13:36 -0700203 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
Paul Stewart8ae18742015-06-16 13:13:10 -0700217gboolean GLib::SpawnSync(const gchar* working_directory,
218 gchar** argv,
219 gchar** envp,
Darin Petkov3c5e4dc2012-04-02 14:44:27 +0200220 GSpawnFlags flags,
221 GSpawnChildSetupFunc child_setup,
222 gpointer user_data,
Paul Stewart8ae18742015-06-16 13:13:10 -0700223 gchar** standard_output,
224 gchar** standard_error,
225 gint* exit_status,
226 GError** error) {
Darin Petkov3c5e4dc2012-04-02 14:44:27 +0200227 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
Paul Stewart8ae18742015-06-16 13:13:10 -0700239void GLib::Strfreev(gchar** str_array) {
Darin Petkov083047b2011-06-23 20:42:48 -0700240 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