Commit 1ac5b92c authored by LRN's avatar LRN Committed by Matthias Clasen

Add W32 Registry reading API to gio

https://bugzilla.gnome.org/show_bug.cgi?id=734888
parent 2a71f187
......@@ -302,6 +302,8 @@ gdbus_daemon_sources = \
win32_actual_sources = \
$(gdbus_daemon_sources) \
gwin32registrykey.c \
gwin32registrykey.h \
gcontenttype-win32.c \
gwin32mount.c \
gwin32mount.h \
......
This diff is collapsed.
/* GIO - GLib Input, Output and Streaming Library
*
* Copyright (C) 2014 Руслан Ижбулатов <lrn1986@gmail.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General
* Public License along with this library; if not, see <http://www.gnu.org/licenses/>.
*
*/
#ifndef __G_WIN32_REGISTRY_KEY_H__
#define __G_WIN32_REGISTRY_KEY_H__
#include <gio/gio.h>
#ifdef G_PLATFORM_WIN32
G_BEGIN_DECLS
#define G_TYPE_WIN32_REGISTRY_KEY (g_win32_registry_key_get_type ())
#define G_WIN32_REGISTRY_KEY(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_WIN32_REGISTRY_KEY, GWin32RegistryKey))
#define G_WIN32_REGISTRY_KEY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), G_TYPE_WIN32_REGISTRY_KEY, GWin32RegistryKeyClass))
#define G_IS_WIN32_REGISTRY_KEY(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_WIN32_REGISTRY_KEY))
#define G_IS_WIN32_REGISTRY_KEY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), G_TYPE_WIN32_REGISTRY_KEY))
#define G_WIN32_REGISTRY_KEY_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_WIN32_REGISTRY_KEY, GWin32RegistryKeyClass))
typedef enum {
G_WIN32_REGISTRY_VALUE_NONE = 0,
G_WIN32_REGISTRY_VALUE_BINARY = 1,
G_WIN32_REGISTRY_VALUE_UINT32LE = 2,
G_WIN32_REGISTRY_VALUE_UINT32BE = 3,
#if G_BYTE_ORDER == G_BIG_ENDIAN
G_WIN32_REGISTRY_VALUE_UINT32 = G_WIN32_REGISTRY_VALUE_UINT32BE,
#else
G_WIN32_REGISTRY_VALUE_UINT32 = G_WIN32_REGISTRY_VALUE_UINT32LE,
#endif
G_WIN32_REGISTRY_VALUE_EXPAND_STR = 4,
G_WIN32_REGISTRY_VALUE_LINK = 5,
G_WIN32_REGISTRY_VALUE_MULTI_STR = 6,
G_WIN32_REGISTRY_VALUE_UINT64LE = 7,
#if G_BYTE_ORDER == G_LITTLE_ENDIAN
G_WIN32_REGISTRY_VALUE_UINT64 = G_WIN32_REGISTRY_VALUE_UINT64LE,
#endif
G_WIN32_REGISTRY_VALUE_STR = 8
} GWin32RegistryValueType;
typedef enum {
G_WIN32_REGISTRY_WATCH_NAME = 1 << 0,
G_WIN32_REGISTRY_WATCH_ATTRIBUTES = 1 << 1,
G_WIN32_REGISTRY_WATCH_VALUES = 1 << 2,
G_WIN32_REGISTRY_WATCH_SECURITY = 1 << 3,
} GWin32RegistryKeyWatcherFlags;
typedef struct _GWin32RegistryKey GWin32RegistryKey;
typedef struct _GWin32RegistryKeyClass GWin32RegistryKeyClass;
typedef struct _GWin32RegistryKeyPrivate GWin32RegistryKeyPrivate;
typedef struct _GWin32RegistrySubkeyIter GWin32RegistrySubkeyIter;
typedef struct _GWin32RegistryValueIter GWin32RegistryValueIter;
struct _GWin32RegistryKey {
GObject parent_instance;
/*< private >*/
GWin32RegistryKeyPrivate *priv;
};
struct _GWin32RegistryKeyClass {
GObjectClass parent_class;
};
/**
* GWin32RegistryKeyWatchCallbackFunc:
* @key: A #GWin32RegistryKey that was watched.
* @user_data: The @user_data #gpointer passed to g_win32_registry_key_watch().
*
* The type of the callback passed to g_win32_registry_key_watch().
*
* The callback is invoked after a change matching the watch flags and arguments
* occurs. If the children of the key were watched also, there is no way to know
* which one of them triggered the callback.
*
* Since: 2.42
*/
typedef void (*GWin32RegistryKeyWatchCallbackFunc) (GWin32RegistryKey *key,
gpointer user_data);
#define G_TYPE_WIN32_REGISTRY_SUBKEY_ITER (g_win32_registry_subkey_iter_get_type ())
struct _GWin32RegistrySubkeyIter {
/*< private >*/
GWin32RegistryKey *key;
gint counter;
gint subkey_count;
gunichar2 *subkey_name;
gsize subkey_name_size;
gsize subkey_name_len;
gchar *subkey_name_u8;
};
#define G_TYPE_WIN32_REGISTRY_VALUE_ITER (g_win32_registry_value_iter_get_type ())
struct _GWin32RegistryValueIter {
/*< private >*/
GWin32RegistryKey *key;
gint counter;
gint value_count;
gunichar2 *value_name;
gsize value_name_size;
gsize value_name_len;
GWin32RegistryValueType value_type;
guint8 *value_data;
gsize value_data_size;
gsize value_actual_data_size;
GWin32RegistryValueType value_expanded_type;
gunichar2 *value_data_expanded;
gsize value_data_expanded_charsize;
gchar *value_name_u8;
gsize value_name_u8_len;
gchar *value_data_u8;
gsize value_data_u8_size;
gchar *value_data_expanded_u8;
gsize value_data_expanded_u8_size;
};
GLIB_AVAILABLE_IN_2_42
GWin32RegistrySubkeyIter *g_win32_registry_subkey_iter_copy (const GWin32RegistrySubkeyIter *iter);
GLIB_AVAILABLE_IN_2_42
void g_win32_registry_subkey_iter_free (GWin32RegistrySubkeyIter *iter);
GLIB_AVAILABLE_IN_2_42
void g_win32_registry_subkey_iter_assign (GWin32RegistrySubkeyIter *iter,
const GWin32RegistrySubkeyIter *other);
GLIB_AVAILABLE_IN_2_42
GType g_win32_registry_subkey_iter_get_type (void) G_GNUC_CONST;
GLIB_AVAILABLE_IN_2_42
GWin32RegistryValueIter *g_win32_registry_value_iter_copy (const GWin32RegistryValueIter *iter);
GLIB_AVAILABLE_IN_2_42
void g_win32_registry_value_iter_free (GWin32RegistryValueIter *iter);
GLIB_AVAILABLE_IN_2_42
void g_win32_registry_value_iter_assign (GWin32RegistryValueIter *iter,
const GWin32RegistryValueIter *other);
GLIB_AVAILABLE_IN_2_42
GType g_win32_registry_value_iter_get_type (void) G_GNUC_CONST;
GLIB_AVAILABLE_IN_2_42
GType g_win32_registry_key_get_type (void);
GLIB_AVAILABLE_IN_2_42
GWin32RegistryKey *g_win32_registry_key_new (const gchar *path,
GError **error);
GLIB_AVAILABLE_IN_2_42
GWin32RegistryKey *g_win32_registry_key_new_w (const gunichar2 *path,
GError **error);
GLIB_AVAILABLE_IN_2_42
GWin32RegistryKey *g_win32_registry_key_get_child (GWin32RegistryKey *key,
const gchar *subkey,
GError **error);
GLIB_AVAILABLE_IN_2_42
GWin32RegistryKey *g_win32_registry_key_get_child_w (GWin32RegistryKey *key,
const gunichar2 *subkey,
GError **error);
GLIB_AVAILABLE_IN_2_42
gboolean g_win32_registry_subkey_iter_init (GWin32RegistrySubkeyIter *iter,
GWin32RegistryKey *key,
GError **error);
GLIB_AVAILABLE_IN_2_42
void g_win32_registry_subkey_iter_clear (GWin32RegistrySubkeyIter *iter);
GLIB_AVAILABLE_IN_2_42
gsize g_win32_registry_subkey_iter_n_subkeys (GWin32RegistrySubkeyIter *iter);
GLIB_AVAILABLE_IN_2_42
gboolean g_win32_registry_subkey_iter_next (GWin32RegistrySubkeyIter *iter,
gboolean skip_errors,
GError **error);
GLIB_AVAILABLE_IN_2_42
gboolean g_win32_registry_subkey_iter_get_name (GWin32RegistrySubkeyIter *iter,
gchar **subkey_name,
gsize *subkey_name_len,
GError **error);
GLIB_AVAILABLE_IN_2_42
gboolean g_win32_registry_subkey_iter_get_name_w (GWin32RegistrySubkeyIter *iter,
gunichar2 **subkey_name,
gsize *subkey_name_len,
GError **error);
GLIB_AVAILABLE_IN_2_42
gboolean g_win32_registry_value_iter_init (GWin32RegistryValueIter *iter,
GWin32RegistryKey *key,
GError **error);
GLIB_AVAILABLE_IN_2_42
void g_win32_registry_value_iter_clear (GWin32RegistryValueIter *iter);
GLIB_AVAILABLE_IN_2_42
gsize g_win32_registry_value_iter_n_values (GWin32RegistryValueIter *iter);
GLIB_AVAILABLE_IN_2_42
gboolean g_win32_registry_value_iter_next (GWin32RegistryValueIter *iter,
gboolean skip_errors,
GError **error);
GLIB_AVAILABLE_IN_2_42
gboolean g_win32_registry_value_iter_get_value_type (GWin32RegistryValueIter *iter,
GWin32RegistryValueType *value_type,
GError **error);
GLIB_AVAILABLE_IN_2_42
gboolean g_win32_registry_value_iter_get_name (GWin32RegistryValueIter *iter,
gchar **value_name,
gsize *value_name_len,
GError **error);
GLIB_AVAILABLE_IN_2_42
gboolean g_win32_registry_value_iter_get_name_w (GWin32RegistryValueIter *iter,
gunichar2 **value_name,
gsize *value_name_len,
GError **error);
GLIB_AVAILABLE_IN_2_42
gboolean g_win32_registry_value_iter_get_data (GWin32RegistryValueIter *iter,
gboolean auto_expand,
gpointer *value_data,
gsize *value_data_size,
GError **error);
GLIB_AVAILABLE_IN_2_42
gboolean g_win32_registry_value_iter_get_data_w (GWin32RegistryValueIter *iter,
gboolean auto_expand,
gpointer *value_data,
gsize *value_data_size,
GError **error);
GLIB_AVAILABLE_IN_2_42
gboolean g_win32_registry_key_get_value (GWin32RegistryKey *key,
gboolean auto_expand,
const gchar *value_name,
GWin32RegistryValueType *value_type,
gpointer *value_data,
gsize *value_data_size,
GError **error);
GLIB_AVAILABLE_IN_2_42
gboolean g_win32_registry_key_get_value_w (GWin32RegistryKey *key,
gboolean auto_expand,
const gunichar2 *value_name,
GWin32RegistryValueType *value_type,
gpointer *value_data,
gsize *value_data_size,
GError **error);
GLIB_AVAILABLE_IN_2_42
const gchar *g_win32_registry_key_get_path (GWin32RegistryKey *key);
GLIB_AVAILABLE_IN_2_42
const gunichar2 *g_win32_registry_key_get_path_w (GWin32RegistryKey *key);
GLIB_AVAILABLE_IN_2_42
gboolean g_win32_registry_key_watch (GWin32RegistryKey *key,
gboolean watch_children,
GWin32RegistryKeyWatcherFlags watch_flags,
GWin32RegistryKeyWatchCallbackFunc callback,
gpointer user_data,
GError **error);
GLIB_AVAILABLE_IN_2_42
gboolean g_win32_registry_key_has_changed (GWin32RegistryKey *key);
GLIB_AVAILABLE_IN_2_42
void g_win32_registry_key_erase_change_indicator (GWin32RegistryKey *key);
G_END_DECLS
#endif /* G_PLATFORM_WIN32 */
#endif /* __G_WIN32_REGISTRY_KEY_H__ */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment