kdbus: Fixup signal subscription
[platform/upstream/glib.git] / gio / gwin32registrykey.h
1 /* GIO - GLib Input, Output and Streaming Library
2  *
3  * Copyright (C) 2014 Руслан Ижбулатов <lrn1986@gmail.com>
4  *
5  * SPDX-License-Identifier: LGPL-2.1-or-later
6  *
7  * This library is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * This library is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General
18  * Public License along with this library; if not, see <http://www.gnu.org/licenses/>.
19  *
20  */
21 #ifndef __G_WIN32_REGISTRY_KEY_H__
22 #define __G_WIN32_REGISTRY_KEY_H__
23
24 #include <gio/gio.h>
25
26 #ifdef G_PLATFORM_WIN32
27
28 G_BEGIN_DECLS
29
30 #define G_TYPE_WIN32_REGISTRY_KEY            (g_win32_registry_key_get_type ())
31 #define G_WIN32_REGISTRY_KEY(o)              (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_WIN32_REGISTRY_KEY, GWin32RegistryKey))
32 #define G_WIN32_REGISTRY_KEY_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), G_TYPE_WIN32_REGISTRY_KEY, GWin32RegistryKeyClass))
33 #define G_IS_WIN32_REGISTRY_KEY(o)           (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_WIN32_REGISTRY_KEY))
34 #define G_IS_WIN32_REGISTRY_KEY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), G_TYPE_WIN32_REGISTRY_KEY))
35 #define G_WIN32_REGISTRY_KEY_GET_CLASS(o)    (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_WIN32_REGISTRY_KEY, GWin32RegistryKeyClass))
36
37 typedef enum {
38   G_WIN32_REGISTRY_VALUE_NONE = 0,
39   G_WIN32_REGISTRY_VALUE_BINARY = 1,
40   G_WIN32_REGISTRY_VALUE_UINT32LE = 2,
41   G_WIN32_REGISTRY_VALUE_UINT32BE = 3,
42 #if G_BYTE_ORDER == G_BIG_ENDIAN
43   G_WIN32_REGISTRY_VALUE_UINT32 = G_WIN32_REGISTRY_VALUE_UINT32BE,
44 #else
45   G_WIN32_REGISTRY_VALUE_UINT32 = G_WIN32_REGISTRY_VALUE_UINT32LE,
46 #endif
47   G_WIN32_REGISTRY_VALUE_EXPAND_STR = 4,
48   G_WIN32_REGISTRY_VALUE_LINK = 5,
49   G_WIN32_REGISTRY_VALUE_MULTI_STR = 6,
50   G_WIN32_REGISTRY_VALUE_UINT64LE = 7,
51 #if G_BYTE_ORDER == G_LITTLE_ENDIAN
52   G_WIN32_REGISTRY_VALUE_UINT64 = G_WIN32_REGISTRY_VALUE_UINT64LE,
53 #endif
54   G_WIN32_REGISTRY_VALUE_STR = 8
55 } GWin32RegistryValueType;
56
57 typedef enum {
58   G_WIN32_REGISTRY_WATCH_NAME = 1 << 0,
59   G_WIN32_REGISTRY_WATCH_ATTRIBUTES = 1 << 1,
60   G_WIN32_REGISTRY_WATCH_VALUES = 1 << 2,
61   G_WIN32_REGISTRY_WATCH_SECURITY = 1 << 3,
62 } GWin32RegistryKeyWatcherFlags;
63
64 typedef struct _GWin32RegistryKey GWin32RegistryKey;
65 typedef struct _GWin32RegistryKeyClass GWin32RegistryKeyClass;
66 typedef struct _GWin32RegistryKeyPrivate GWin32RegistryKeyPrivate;
67 typedef struct _GWin32RegistrySubkeyIter GWin32RegistrySubkeyIter;
68 typedef struct _GWin32RegistryValueIter GWin32RegistryValueIter;
69
70 struct _GWin32RegistryKey {
71   GObject parent_instance;
72
73   /*< private >*/
74   GWin32RegistryKeyPrivate *priv;
75 };
76
77 struct _GWin32RegistryKeyClass {
78   GObjectClass parent_class;
79 };
80
81 /**
82  * GWin32RegistryKeyWatchCallbackFunc:
83  * @key: A #GWin32RegistryKey that was watched.
84  * @user_data: The @user_data #gpointer passed to g_win32_registry_key_watch().
85  *
86  * The type of the callback passed to g_win32_registry_key_watch().
87  *
88  * The callback is invoked after a change matching the watch flags and arguments
89  * occurs. If the children of the key were watched also, there is no way to know
90  * which one of them triggered the callback.
91  *
92  * Since: 2.42
93  */
94 typedef void (*GWin32RegistryKeyWatchCallbackFunc) (GWin32RegistryKey  *key,
95                                                     gpointer            user_data);
96
97 #define G_TYPE_WIN32_REGISTRY_SUBKEY_ITER (g_win32_registry_subkey_iter_get_type ())
98
99 struct _GWin32RegistrySubkeyIter {
100   /*< private >*/
101   GWin32RegistryKey *key;
102   gint               counter;
103   gint               subkey_count;
104
105   gunichar2         *subkey_name;
106   gsize              subkey_name_size;
107   gsize              subkey_name_len;
108
109   gchar             *subkey_name_u8;
110 };
111
112 #define G_TYPE_WIN32_REGISTRY_VALUE_ITER (g_win32_registry_value_iter_get_type ())
113
114 struct _GWin32RegistryValueIter {
115   /*< private >*/
116   GWin32RegistryKey       *key;
117   gint                     counter;
118   gint                     value_count;
119
120   gunichar2               *value_name;
121   gsize                    value_name_size;
122   gsize                    value_name_len;
123   GWin32RegistryValueType  value_type;
124   guint8                  *value_data;
125   gsize                    value_data_size;
126   gsize                    value_actual_data_size;
127   GWin32RegistryValueType  value_expanded_type;
128   gunichar2               *value_data_expanded;
129   gsize                    value_data_expanded_charsize;
130
131   gchar                   *value_name_u8;
132   gsize                    value_name_u8_len;
133   gchar                   *value_data_u8;
134   gsize                    value_data_u8_size;
135   gchar                   *value_data_expanded_u8;
136   gsize                    value_data_expanded_u8_size;
137 };
138
139 GIO_AVAILABLE_IN_2_46
140 GWin32RegistrySubkeyIter *g_win32_registry_subkey_iter_copy     (const GWin32RegistrySubkeyIter *iter);
141 GIO_AVAILABLE_IN_2_46
142 void                      g_win32_registry_subkey_iter_free     (GWin32RegistrySubkeyIter       *iter);
143 GIO_AVAILABLE_IN_2_46
144 void                      g_win32_registry_subkey_iter_assign   (GWin32RegistrySubkeyIter       *iter,
145                                                                  const GWin32RegistrySubkeyIter *other);
146 GIO_AVAILABLE_IN_2_46
147 GType                     g_win32_registry_subkey_iter_get_type (void) G_GNUC_CONST;
148
149
150 GIO_AVAILABLE_IN_2_46
151 GWin32RegistryValueIter  *g_win32_registry_value_iter_copy      (const GWin32RegistryValueIter *iter);
152 GIO_AVAILABLE_IN_2_46
153 void                      g_win32_registry_value_iter_free      (GWin32RegistryValueIter       *iter);
154 GIO_AVAILABLE_IN_2_46
155 void                      g_win32_registry_value_iter_assign    (GWin32RegistryValueIter       *iter,
156                                                                  const GWin32RegistryValueIter *other);
157 GIO_AVAILABLE_IN_2_46
158 GType                     g_win32_registry_value_iter_get_type  (void) G_GNUC_CONST;
159
160
161 GIO_AVAILABLE_IN_2_46
162 GType              g_win32_registry_key_get_type             (void);
163
164 GIO_AVAILABLE_IN_2_46
165 GWin32RegistryKey *g_win32_registry_key_new                  (const gchar                    *path,
166                                                               GError                        **error);
167
168 GIO_AVAILABLE_IN_2_46
169 GWin32RegistryKey *g_win32_registry_key_new_w                (const gunichar2                *path,
170                                                               GError                        **error);
171
172 GIO_AVAILABLE_IN_2_46
173 GWin32RegistryKey *g_win32_registry_key_get_child            (GWin32RegistryKey              *key,
174                                                               const gchar                    *subkey,
175                                                               GError                        **error);
176
177 GIO_AVAILABLE_IN_2_46
178 GWin32RegistryKey *g_win32_registry_key_get_child_w          (GWin32RegistryKey              *key,
179                                                               const gunichar2                *subkey,
180                                                               GError                        **error);
181
182 GIO_AVAILABLE_IN_2_46
183 gboolean         g_win32_registry_subkey_iter_init           (GWin32RegistrySubkeyIter       *iter,
184                                                               GWin32RegistryKey              *key,
185                                                               GError                        **error);
186 GIO_AVAILABLE_IN_2_46
187 void             g_win32_registry_subkey_iter_clear          (GWin32RegistrySubkeyIter       *iter);
188 GIO_AVAILABLE_IN_2_46
189 gsize            g_win32_registry_subkey_iter_n_subkeys      (GWin32RegistrySubkeyIter       *iter);
190 GIO_AVAILABLE_IN_2_46
191 gboolean         g_win32_registry_subkey_iter_next           (GWin32RegistrySubkeyIter       *iter,
192                                                               gboolean                        skip_errors,
193                                                               GError                        **error);
194 GIO_AVAILABLE_IN_2_46
195 gboolean         g_win32_registry_subkey_iter_get_name       (GWin32RegistrySubkeyIter        *iter,
196                                                               const gchar                    **subkey_name,
197                                                               gsize                           *subkey_name_len,
198                                                               GError                         **error);
199 GIO_AVAILABLE_IN_2_46
200 gboolean         g_win32_registry_subkey_iter_get_name_w     (GWin32RegistrySubkeyIter        *iter,
201                                                               const gunichar2                **subkey_name,
202                                                               gsize                           *subkey_name_len,
203                                                               GError                         **error);
204
205 GIO_AVAILABLE_IN_2_46
206 gboolean         g_win32_registry_value_iter_init            (GWin32RegistryValueIter         *iter,
207                                                               GWin32RegistryKey               *key,
208                                                               GError                         **error);
209 GIO_AVAILABLE_IN_2_46
210 void             g_win32_registry_value_iter_clear           (GWin32RegistryValueIter         *iter);
211 GIO_AVAILABLE_IN_2_46
212 gsize            g_win32_registry_value_iter_n_values        (GWin32RegistryValueIter         *iter);
213 GIO_AVAILABLE_IN_2_46
214 gboolean         g_win32_registry_value_iter_next            (GWin32RegistryValueIter         *iter,
215                                                               gboolean                         skip_errors,
216                                                               GError                         **error);
217 GIO_AVAILABLE_IN_2_46
218 gboolean         g_win32_registry_value_iter_get_value_type  (GWin32RegistryValueIter         *iter,
219                                                               GWin32RegistryValueType         *value_type,
220                                                               GError                         **error);
221 GIO_AVAILABLE_IN_2_46
222 gboolean         g_win32_registry_value_iter_get_name        (GWin32RegistryValueIter         *iter,
223                                                               gchar                          **value_name,
224                                                               gsize                           *value_name_len,
225                                                               GError                         **error);
226 GIO_AVAILABLE_IN_2_46
227 gboolean         g_win32_registry_value_iter_get_name_w      (GWin32RegistryValueIter         *iter,
228                                                               gunichar2                      **value_name,
229                                                               gsize                           *value_name_len,
230                                                               GError                         **error);
231 GIO_AVAILABLE_IN_2_46
232 gboolean         g_win32_registry_value_iter_get_data        (GWin32RegistryValueIter         *iter,
233                                                               gboolean                         auto_expand,
234                                                               gpointer                        *value_data,
235                                                               gsize                           *value_data_size,
236                                                               GError                         **error);
237 GIO_AVAILABLE_IN_2_46
238 gboolean         g_win32_registry_value_iter_get_data_w      (GWin32RegistryValueIter         *iter,
239                                                               gboolean                         auto_expand,
240                                                               gpointer                        *value_data,
241                                                               gsize                           *value_data_size,
242                                                               GError                         **error);
243
244 GIO_AVAILABLE_IN_2_66
245 gboolean         g_win32_registry_key_get_value              (GWin32RegistryKey               *key,
246                                                               const gchar * const             *mui_dll_dirs,
247                                                               gboolean                         auto_expand,
248                                                               const gchar                     *value_name,
249                                                               GWin32RegistryValueType         *value_type,
250                                                               gpointer                        *value_data,
251                                                               gsize                           *value_data_size,
252                                                               GError                         **error);
253
254 GIO_AVAILABLE_IN_2_66
255 gboolean         g_win32_registry_key_get_value_w            (GWin32RegistryKey               *key,
256                                                               const gunichar2 * const         *mui_dll_dirs,
257                                                               gboolean                         auto_expand,
258                                                               const gunichar2                 *value_name,
259                                                               GWin32RegistryValueType         *value_type,
260                                                               gpointer                        *value_data,
261                                                               gsize                           *value_data_size,
262                                                               GError                         **error);
263
264 GIO_AVAILABLE_IN_2_46
265 const gchar     *g_win32_registry_key_get_path               (GWin32RegistryKey               *key);
266
267 GIO_AVAILABLE_IN_2_46
268 const gunichar2 *g_win32_registry_key_get_path_w             (GWin32RegistryKey               *key);
269
270 GIO_AVAILABLE_IN_2_46
271 gboolean         g_win32_registry_key_watch                  (GWin32RegistryKey               *key,
272                                                               gboolean                         watch_children,
273                                                               GWin32RegistryKeyWatcherFlags    watch_flags,
274                                                               GWin32RegistryKeyWatchCallbackFunc callback,
275                                                               gpointer                         user_data,
276                                                               GError                         **error);
277 GIO_AVAILABLE_IN_2_46
278 gboolean         g_win32_registry_key_has_changed            (GWin32RegistryKey               *key);
279
280 GIO_AVAILABLE_IN_2_46
281 void             g_win32_registry_key_erase_change_indicator (GWin32RegistryKey               *key);
282
283 GIO_AVAILABLE_IN_2_66
284 const gunichar2 * const *g_win32_registry_get_os_dirs_w (void);
285
286 GIO_AVAILABLE_IN_2_66
287 const gchar * const     *g_win32_registry_get_os_dirs   (void);
288
289 G_END_DECLS
290
291 #endif /* G_PLATFORM_WIN32 */
292
293 #endif /* __G_WIN32_REGISTRY_KEY_H__ */