ekiga r6122 - trunk/lib/gmconf
- From: jpuydt svn gnome org
- To: svn-commits-list gnome org
- Subject: ekiga r6122 - trunk/lib/gmconf
- Date: Sat, 5 Apr 2008 10:08:57 +0100 (BST)
Author: jpuydt
Date: Sat Apr 5 10:08:57 2008
New Revision: 6122
URL: http://svn.gnome.org/viewvc/ekiga?rev=6122&view=rev
Log:
Better warnings in the gmconf-glib code
Modified:
trunk/lib/gmconf/gmconf-glib.c
Modified: trunk/lib/gmconf/gmconf-glib.c
==============================================================================
--- trunk/lib/gmconf/gmconf-glib.c (original)
+++ trunk/lib/gmconf/gmconf-glib.c Sat Apr 5 10:08:57 2008
@@ -27,7 +27,7 @@
/*
- * gmconf-glib.c - description
+ * gmconf-glib.c - description
* ------------------------------------------
* begin : Mar 2004
* copyright : (C) 2004 by Julien Puydt
@@ -41,7 +41,7 @@
#include <sys/stat.h>
#include "toolbox/toolbox.h"
-#include "gmconf.h"
+#include "gmconf.h"
#ifdef WIN32
#include "platform/winpaths.h"
@@ -63,6 +63,30 @@
* - the implementation of gmconf.h's api.
*/
+#define check_entry_type_return(entry,_type,val) G_STMT_START{ \
+ if (G_LIKELY(entry != NULL && entry->type == _type)) \
+ {} \
+ else { \
+ gchar *msg = NULL; \
+ msg = g_strdup_printf ("gmconf key %s is of type " #_type, entry->key); \
+ g_return_if_fail_warning (G_LOG_DOMAIN, __PRETTY_FUNCTION__, msg); \
+ g_free (msg); \
+ return val; \
+ } \
+}G_STMT_END
+
+#define check_entry_for_key_return(entry,key,val) G_STMT_START{ \
+ if (G_LIKELY(entry != NULL)) \
+ {} \
+ else { \
+ gchar *msg = NULL; \
+ msg = g_strdup_printf ("key %s has no corresponding entry! ", key); \
+ g_return_if_fail_warning (G_LOG_DOMAIN, __PRETTY_FUNCTION__, msg); \
+ g_free (msg); \
+ return val; \
+ } \
+}G_STMT_END
+
/* the data types used in this file */
@@ -82,13 +106,13 @@
typedef struct _Notifier
{
GmConfNotifier func;
- gpointer data;
+ gpointer data;
} Notifier;
/* that implementation uses the GM_CONF_OTHER type of entry (the one that is
* free to use for the specific implementation) to store "redirections", which
* is the scheme that is used to make notifications propagate to parents in the
- * namespace
+ * namespace
*/
struct _GmConfEntry
{
@@ -135,7 +159,7 @@
/* this little structure is needed to get enough data through the
* iterator when destroying a full namespace
*/
-typedef struct _NamespcWrapper
+typedef struct _NamespcWrapper
{
GData **datalist;
const gchar *namespc;
@@ -159,7 +183,7 @@
/* notifier functions */
static Notifier *notifier_new (const GmConfNotifier, const gpointer);
-static void notifier_destroy (Notifier *);
+static void notifier_destroy (Notifier *);
static void notifier_destroy_in_list (gpointer elt, gpointer unused);
static void notifier_call_on_entry (Notifier *, GmConfEntry *);
@@ -170,7 +194,7 @@
static const gchar *entry_get_key (const GmConfEntry *);
static void entry_set_key (GmConfEntry *, const gchar *);
-static const GmConfEntryType entry_get_type (const GmConfEntry *);
+static GmConfEntryType entry_get_type (const GmConfEntry *);
static void entry_set_type (GmConfEntry *, const GmConfEntryType);
static gboolean entry_get_bool (const GmConfEntry *);
@@ -211,7 +235,7 @@
GError **error);
static void sch_parser_characters (GMarkupParseContext *context,
const gchar *text,
- gsize text_len,
+ gsize text_len,
gpointer data,
GError **error);
@@ -233,7 +257,7 @@
gpointer user_data);
static void database_remove_namespace (DataBase *, const gchar *);
static GmConfEntry *database_get_entry_for_key (DataBase *, const gchar *);
-static GmConfEntry *database_get_entry_for_key_create (DataBase *,
+static GmConfEntry *database_get_entry_for_key_create (DataBase *,
const gchar *);
static void database_set_watched (DataBase *, const gboolean);
@@ -259,7 +283,7 @@
return result;
}
-static void
+static void
string_list_deep_destroy (GSList *list)
{
GSList *ptr = NULL;
@@ -439,7 +463,7 @@
item = NULL;
}
-
+
return result;
}
@@ -448,7 +472,7 @@
notifier_new (const GmConfNotifier func, const gpointer data)
{
Notifier *notifier = NULL;
-
+
g_return_val_if_fail (func != NULL, NULL);
notifier = g_new (Notifier, 1);
@@ -531,7 +555,7 @@
entry_get_key (const GmConfEntry *entry)
{
g_return_val_if_fail (entry != NULL, NULL);
-
+
return entry->key;
}
@@ -541,10 +565,12 @@
g_return_if_fail (entry != NULL);
g_return_if_fail (key != NULL);
+ if (entry->key)
+ g_free (entry->key);
entry->key = g_strdup (key);
}
-static const GmConfEntryType
+static GmConfEntryType
entry_get_type (const GmConfEntry *entry)
{
g_return_val_if_fail (entry != NULL, GM_CONF_OTHER);
@@ -563,8 +589,7 @@
static gboolean
entry_get_bool (const GmConfEntry *entry)
{
- g_return_val_if_fail (entry != NULL, FALSE);
- g_return_val_if_fail (entry->type == GM_CONF_BOOL, FALSE);
+ check_entry_type_return (entry, GM_CONF_BOOL, FALSE);
return entry->value.boolean;
}
@@ -581,8 +606,7 @@
static gint
entry_get_int (const GmConfEntry *entry)
{
- g_return_val_if_fail (entry != NULL, 0);
- g_return_val_if_fail (entry->type == GM_CONF_INT, 0);
+ check_entry_type_return (entry, GM_CONF_INT, 0);
return entry->value.integer;
}
@@ -599,8 +623,7 @@
static gfloat
entry_get_float (const GmConfEntry *entry)
{
- g_return_val_if_fail (entry != NULL, 0);
- g_return_val_if_fail (entry->type == GM_CONF_FLOAT, 0);
+ check_entry_type_return (entry, GM_CONF_FLOAT, 0);
return entry->value.floa;
}
@@ -617,8 +640,7 @@
static const gchar *
entry_get_string (const GmConfEntry *entry)
{
- g_return_val_if_fail (entry != NULL, 0);
- g_return_val_if_fail (entry->type == GM_CONF_STRING, 0);
+ check_entry_type_return (entry, GM_CONF_STRING, NULL);
return entry->value.string;
}
@@ -635,8 +657,7 @@
static GSList *
entry_get_list (const GmConfEntry *entry)
{
- g_return_val_if_fail (entry != NULL, 0);
- g_return_val_if_fail (entry->type == GM_CONF_LIST, 0);
+ check_entry_type_return (entry, GM_CONF_LIST, NULL);
return entry->value.list;
}
@@ -650,7 +671,7 @@
entry->value.list = string_list_deep_copy (val);
}
-static void
+static void
entry_set_redirect (GmConfEntry *entry, GmConfEntry *redirect)
{
g_return_if_fail (entry != NULL);
@@ -679,7 +700,7 @@
return FALSE;
}
-static void
+static void
entry_call_notifiers (const GmConfEntry *entry)
{
g_return_if_fail (entry != NULL);
@@ -705,13 +726,13 @@
static void
entry_remove_notifier (GmConfEntry *entry, gpointer identifier)
{
- /* no check, since the only function calling here is
+ /* no check, since the only function calling here is
entry_remove_notifier_in_list */
entry->notifiers = g_slist_remove (entry->notifiers, identifier);
}
-static void
+static void
entry_remove_notifier_in_list (GQuark unused,
gpointer entry,
gpointer identifier)
@@ -744,7 +765,7 @@
return db;
}
-static void
+static void
sch_parser_start_element (GMarkupParseContext *context,
const gchar *element_name,
const gchar **attribute_names,
@@ -768,7 +789,7 @@
parser->state = VALUE;
}
-static void
+static void
sch_parser_end_element (GMarkupParseContext *context,
const gchar *element_name,
gpointer data,
@@ -789,10 +810,10 @@
parser->state = START;
}
-static void
+static void
sch_parser_characters (GMarkupParseContext *context,
const gchar *text,
- gsize text_len,
+ gsize text_len,
gpointer data,
GError **error)
{
@@ -819,7 +840,7 @@
else if (strcmp (text, "string") == 0)
entry_set_type (parser->entry, GM_CONF_STRING);
else if (strcmp (text, "list") == 0)
- entry_set_type (parser->entry, GM_CONF_LIST);
+ entry_set_type (parser->entry, GM_CONF_LIST);
else
entry_set_type (parser->entry, GM_CONF_OTHER);
break;
@@ -860,7 +881,7 @@
g_return_val_if_fail (filename != NULL, FALSE);
io = g_io_channel_new_file (filename, "r", NULL);
- if (!io)
+ if (!io)
return FALSE;
parser = g_new (SchParser, 1);
parser->state = START;
@@ -896,7 +917,7 @@
return TRUE;
}
-static void
+static void
database_save_entry (GQuark quark, gpointer data,
gpointer user_data)
{
@@ -974,7 +995,7 @@
g_io_channel_write_chars (io, "</schema>\n", -1, NULL, NULL);
}
-static gboolean
+static gboolean
database_save_file (DataBase *db, const gchar *filename)
{
GIOChannel *io = NULL;
@@ -1003,7 +1024,7 @@
return TRUE;
}
-static void
+static void
database_add_entry (DataBase *db, GmConfEntry *entry)
{
g_return_if_fail (db != NULL);
@@ -1013,7 +1034,7 @@
entry, entry_destroy);
}
-static void
+static void
database_remove_namespace_in_datalist (GQuark key_id,
gpointer data,
gpointer user_data)
@@ -1021,7 +1042,7 @@
GmConfEntry *entry = NULL;
NamespcWrapper *wrapper = NULL;
const gchar *key = NULL;
-
+
g_return_if_fail (data != NULL);
g_return_if_fail (user_data != NULL);
@@ -1034,18 +1055,18 @@
}
-static void
+static void
database_remove_namespace (DataBase *db, const gchar *namespc)
{
NamespcWrapper *wrapper = NULL;
-
+
g_return_if_fail (db != NULL);
g_return_if_fail (namespc != NULL);
wrapper = g_new (NamespcWrapper, 1);
wrapper->datalist = &db->entries;
wrapper->namespc = namespc;
- g_datalist_foreach (&db->entries,
+ g_datalist_foreach (&db->entries,
database_remove_namespace_in_datalist, wrapper);
g_free (wrapper);
}
@@ -1059,6 +1080,7 @@
g_return_val_if_fail (key != NULL, NULL);
entry = g_datalist_get_data (&db->entries, key);
+
return entry;
}
@@ -1079,7 +1101,7 @@
return entry;
}
-static void
+static void
database_set_watched (DataBase *db, const gboolean bool)
{
g_return_if_fail (db != NULL);
@@ -1087,32 +1109,32 @@
db->is_watched = bool;
}
-static void
+static void
database_notify_on_namespace (DataBase *db, const gchar *namespac)
{
GmConfEntry *parent_entry = NULL, *entry = NULL;
gchar *key = NULL;
-
+
g_return_if_fail (db != NULL);
g_return_if_fail (namespac != NULL);
g_return_if_fail (namespac[0] == '/'); /* that makes the loop work! */
entry = database_get_entry_for_key (db, namespac);
-
- g_return_if_fail (entry != NULL);
-
+
+ g_return_if_fail (entry != NULL);
+
if (db->is_watched == FALSE)
return;
for (key = g_strdup (namespac);
- key[0] != 0;
+ key[0] != 0;
g_strrstr (key, "/")[0] = 0) {
parent_entry = database_get_entry_for_key (db, key);
if (parent_entry != NULL) {
if (entry_get_type (parent_entry) == GM_CONF_OTHER)
entry_set_redirect (parent_entry, entry);
- entry_call_notifiers (parent_entry);
+ entry_call_notifiers (parent_entry);
if (entry_get_type (entry) == GM_CONF_OTHER)
entry_set_redirect (parent_entry, NULL);
}
@@ -1141,6 +1163,12 @@
filename = gm_conf_get_user_conf_filename ();
result = database_load_file (db, filename);
+ if (G_LIKELY (result))
+ {}
+ else
+ g_log (G_LOG_DOMAIN, G_LOG_LEVEL_WARNING,
+ "couldn't read the user configuration in %s", filename);
+
g_free (filename);
return result;
@@ -1158,6 +1186,12 @@
filename = g_build_filename (SYSCONFDIR, "ekiga",
"ekiga.schemas", NULL);
result = database_load_file (db, filename);
+
+ if (G_LIKELY (result))
+ {}
+ else
+ g_log (G_LOG_DOMAIN, G_LOG_LEVEL_WARNING,
+ "couldn't read the system configuration in %s", filename);
g_free (filename);
return result;
@@ -1175,16 +1209,16 @@
database_save_file (db, user_conf);
g_free (user_conf);
-
+
return TRUE;
}
-void
+void
gm_conf_init ()
{
gboolean result = FALSE;
DataBase *db = database_get_default ();
-
+
result = gm_conf_load_sys_conf (db);
result = (gm_conf_load_user_conf (db) || result);
if (!result)
@@ -1198,7 +1232,7 @@
}
-void
+void
gm_conf_save ()
{
DataBase *db = database_get_default ();
@@ -1211,7 +1245,7 @@
g_free (user_conf);
}
-void
+void
gm_conf_watch ()
{
DataBase *db = database_get_default ();
@@ -1219,7 +1253,7 @@
database_set_watched (db, TRUE);
}
-void
+void
gm_conf_unwatch ()
{
DataBase *db = database_get_default ();
@@ -1227,23 +1261,23 @@
database_set_watched (db, FALSE);
}
-gpointer
-gm_conf_notifier_add (const gchar *namespac,
+gpointer
+gm_conf_notifier_add (const gchar *namespac,
GmConfNotifier func,
gpointer user_data)
{
DataBase *db = database_get_default ();
GmConfEntry *entry = NULL;
-
+
g_return_val_if_fail (namespac != NULL, NULL);
g_return_val_if_fail (func != NULL, NULL);
-
+
entry = database_get_entry_for_key_create (db, namespac);
return entry_add_notifier (entry, func, user_data);
}
-void
+void
gm_conf_notifier_remove (gpointer identifier)
{
DataBase *db = database_get_default ();
@@ -1265,7 +1299,7 @@
database_notify_on_namespace (db, namespac);
}
-GmConfEntryType
+GmConfEntryType
gm_conf_entry_get_type (GmConfEntry *entry)
{
g_return_val_if_fail (entry != NULL, GM_CONF_OTHER);
@@ -1281,7 +1315,7 @@
return entry_get_key (entry);
}
-gboolean
+gboolean
gm_conf_entry_get_bool (GmConfEntry *entry)
{
g_return_val_if_fail (entry != NULL, FALSE);
@@ -1289,7 +1323,7 @@
return entry_get_bool (entry);
}
-gint
+gint
gm_conf_entry_get_int (GmConfEntry *entry)
{
g_return_val_if_fail (entry != NULL, 0);
@@ -1313,7 +1347,7 @@
return g_slist_copy (entry_get_list (entry));
}
-void
+void
gm_conf_set_bool (const gchar *key, const gboolean val)
{
DataBase *db = database_get_default ();
@@ -1329,7 +1363,7 @@
database_notify_on_namespace (db, entry_get_key (entry));
}
-gboolean
+gboolean
gm_conf_get_bool (const gchar *key)
{
DataBase *db = database_get_default ();
@@ -1339,12 +1373,12 @@
entry = database_get_entry_for_key (db, key);
- g_return_val_if_fail (entry != NULL, FALSE);
+ check_entry_for_key_return (entry, key, FALSE);
return entry_get_bool (entry);
}
-void
+void
gm_conf_set_int (const gchar *key, const int val)
{
DataBase *db = database_get_default ();
@@ -1360,7 +1394,7 @@
database_notify_on_namespace (db, entry_get_key (entry));
}
-int
+int
gm_conf_get_int (const gchar *key)
{
DataBase *db = database_get_default ();
@@ -1370,12 +1404,12 @@
entry = database_get_entry_for_key (db, key);
- g_return_val_if_fail (entry != NULL, 0);
+ check_entry_for_key_return (entry, key, 0);
return entry_get_int (entry);
}
-void
+void
gm_conf_set_float (const gchar *key, const float val)
{
DataBase *db = database_get_default ();
@@ -1391,7 +1425,7 @@
database_notify_on_namespace (db, entry_get_key (entry));
}
-gfloat
+gfloat
gm_conf_get_float (const gchar *key)
{
DataBase *db = database_get_default ();
@@ -1401,12 +1435,12 @@
entry = database_get_entry_for_key (db, key);
- g_return_val_if_fail (entry != NULL, 0);
+ check_entry_for_key_return (entry, key, 0);
return entry_get_float (entry);
}
-void
+void
gm_conf_set_string (const gchar *key, const gchar *val)
{
DataBase *db = database_get_default ();
@@ -1432,12 +1466,12 @@
entry = database_get_entry_for_key (db, key);
- g_return_val_if_fail (entry != NULL, NULL);
+ check_entry_for_key_return (entry, key, NULL);
return g_strdup (entry_get_string (entry));
}
-void
+void
gm_conf_set_string_list (const gchar *key, GSList *val)
{
DataBase *db = database_get_default ();
@@ -1463,12 +1497,12 @@
entry = database_get_entry_for_key (db, key);
- g_return_val_if_fail (entry != NULL, NULL);
+ check_entry_for_key_return (entry, key, NULL);
return string_list_deep_copy (entry_get_list (entry));
}
-void
+void
gm_conf_destroy (const gchar *namespac)
{
DataBase *db = database_get_default ();
@@ -1478,7 +1512,7 @@
database_remove_namespace (db, namespac);
}
-gboolean
+gboolean
gm_conf_is_key_writable (const gchar *key)
{
g_return_val_if_fail (key != NULL, FALSE);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]