blob: b1f65197a64fffea7f55f72555b4af2d3c170653 [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
5#ifndef SHILL_GLIB_H_
6#define SHILL_GLIB_H_
7
Darin Petkov083047b2011-06-23 20:42:48 -07008#include <string>
9
Darin Petkov887f2982011-07-14 16:10:17 -070010#include <gio/gio.h>
Darin Petkov3258a812011-06-23 11:28:45 -070011#include <glib.h>
Darin Petkovf7897bc2011-06-08 17:13:36 -070012
Ben Chancc67c522014-09-03 07:19:18 -070013#include <base/macros.h>
Christopher Wiley0f3eab32013-03-21 11:55:41 -070014
Darin Petkovf7897bc2011-06-08 17:13:36 -070015namespace shill {
16
Darin Petkov3258a812011-06-23 11:28:45 -070017// A GLib abstraction allowing GLib mocking in tests.
18class GLib {
Darin Petkovf7897bc2011-06-08 17:13:36 -070019 public:
Christopher Wiley0f3eab32013-03-21 11:55:41 -070020 GLib();
Darin Petkov3258a812011-06-23 11:28:45 -070021 virtual ~GLib();
22
Darin Petkov083047b2011-06-23 20:42:48 -070023 // Converts GLib's |error| to a string message and frees the GError object.
24 virtual std::string ConvertErrorToMessage(GError *error);
25
Christopher Wiley5447d2e2013-03-19 17:46:03 -070026 // Thin wrappers around Base64Decode/Encode. Return true on success.
27 virtual bool B64Decode(const std::string &input, std::string *output);
28 virtual bool B64Encode(const std::string &input, std::string *output);
29
Darin Petkov3258a812011-06-23 11:28:45 -070030 // g_child_watch_add
Darin Petkov92c43902011-06-09 20:46:06 -070031 virtual guint ChildWatchAdd(GPid pid,
32 GChildWatchFunc function,
33 gpointer data);
Darin Petkov083047b2011-06-23 20:42:48 -070034 // g_free
35 virtual void Free(gpointer mem);
36 // g_key_file_free
37 virtual void KeyFileFree(GKeyFile *key_file);
38 // g_key_file_get_boolean
39 virtual gboolean KeyFileGetBoolean(GKeyFile *key_file,
40 const gchar *group_name,
41 const gchar *key,
42 GError **error);
43 // g_key_file_get_groups
44 virtual gchar **KeyFileGetGroups(GKeyFile *key_file,
45 gsize *length);
46 // g_key_file_get_integer
47 virtual gint KeyFileGetInteger(GKeyFile *key_file,
48 const gchar *group_name,
49 const gchar *key,
50 GError **error);
51 // g_key_file_get_string
52 virtual gchar *KeyFileGetString(GKeyFile *key_file,
53 const gchar *group_name,
54 const gchar *key,
55 GError **error);
Darin Petkovb2841fd2011-06-30 12:54:12 -070056 // g_key_file_get_string_list
57 virtual gchar **KeyFileGetStringList(GKeyFile *key_file,
58 const gchar *group_name,
59 const gchar *key,
60 gsize *length,
61 GError **error);
Darin Petkov083047b2011-06-23 20:42:48 -070062 // g_key_file_has_group
63 virtual gboolean KeyFileHasGroup(GKeyFile *key_file,
64 const gchar *group_name);
Paul Stewarta41e38d2011-11-11 07:47:29 -080065 // g_key_file_has_key
66 virtual gboolean KeyFileHasKey(GKeyFile *key_file,
67 const gchar *group_name,
68 const gchar *key,
69 GError **error);
Darin Petkov083047b2011-06-23 20:42:48 -070070 // g_key_file_load_from_file
71 virtual gboolean KeyFileLoadFromFile(GKeyFile *key_file,
72 const gchar *file,
73 GKeyFileFlags flags,
74 GError **error);
75 // g_key_file_new
76 virtual GKeyFile *KeyFileNew();
77 // g_key_file_remove_group
78 virtual void KeyFileRemoveGroup(GKeyFile *key_file,
79 const gchar *group_name,
80 GError **error);
81 // g_key_file_remove_key
82 virtual void KeyFileRemoveKey(GKeyFile *key_file,
83 const gchar *group_name,
84 const gchar *key,
85 GError **error);
86 // g_key_file_set_boolean
87 virtual void KeyFileSetBoolean(GKeyFile *key_file,
88 const gchar *group_name,
89 const gchar *key,
90 gboolean value);
Paul Stewart5dc40aa2011-10-28 19:43:43 -070091 // g_key_file_set_comment
92 virtual gboolean KeyFileSetComment(GKeyFile *key_file,
93 const gchar *group_name,
94 const gchar *key,
95 const gchar *comment,
96 GError **error);
Darin Petkov083047b2011-06-23 20:42:48 -070097 // g_key_file_set_integer
98 virtual void KeyFileSetInteger(GKeyFile *key_file,
99 const gchar *group_name,
100 const gchar *key,
101 gint value);
102 // g_key_file_set_string
103 virtual void KeyFileSetString(GKeyFile *key_file,
104 const gchar *group_name,
105 const gchar *key,
Hristo Stefanoved2c28c2011-11-29 15:37:30 -0800106 const gchar *value);
Darin Petkovb2841fd2011-06-30 12:54:12 -0700107 // g_key_file_set_string_list
108 virtual void KeyFileSetStringList(GKeyFile *key_file,
109 const gchar *group_name,
110 const gchar *key,
111 const gchar * const list[],
112 gsize length);
Darin Petkov083047b2011-06-23 20:42:48 -0700113 // g_key_file_to_data
114 virtual gchar *KeyFileToData(GKeyFile *key_file,
115 gsize *length,
116 GError **error);
Darin Petkov3258a812011-06-23 11:28:45 -0700117 // g_source_remove
Darin Petkov92c43902011-06-09 20:46:06 -0700118 virtual gboolean SourceRemove(guint tag);
Darin Petkov3258a812011-06-23 11:28:45 -0700119 // g_spawn_async
Darin Petkovf7897bc2011-06-08 17:13:36 -0700120 virtual gboolean SpawnAsync(const gchar *working_directory,
121 gchar **argv,
122 gchar **envp,
123 GSpawnFlags flags,
124 GSpawnChildSetupFunc child_setup,
125 gpointer user_data,
126 GPid *child_pid,
127 GError **error);
Darin Petkov3258a812011-06-23 11:28:45 -0700128 // g_spawn_close_pid
Darin Petkov92c43902011-06-09 20:46:06 -0700129 virtual void SpawnClosePID(GPid pid);
Darin Petkov3c5e4dc2012-04-02 14:44:27 +0200130 // g_spawn_sync
131 virtual gboolean SpawnSync(const gchar *working_directory,
132 gchar **argv,
133 gchar **envp,
134 GSpawnFlags flags,
135 GSpawnChildSetupFunc child_setup,
136 gpointer user_data,
137 gchar **standard_output,
138 gchar **standard_error,
139 gint *exit_status,
140 GError **error);
Darin Petkov083047b2011-06-23 20:42:48 -0700141 // g_strfreev
142 virtual void Strfreev(gchar **str_array);
Darin Petkov887f2982011-07-14 16:10:17 -0700143 // g_type_init
144 virtual void TypeInit();
Christopher Wiley0f3eab32013-03-21 11:55:41 -0700145
146 private:
147 DISALLOW_COPY_AND_ASSIGN(GLib);
Darin Petkovf7897bc2011-06-08 17:13:36 -0700148};
149
150} // namespace shill
151
152#endif // SHILL_GLIB_H_