[pango] querymodules: Add --system argument
- From: Colin Walters <walters src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [pango] querymodules: Add --system argument
- Date: Thu, 10 May 2012 15:41:25 +0000 (UTC)
commit aecbe27c1b08f517c0e05f03308d3ac55cef490c
Author: Colin Walters <walters verbum org>
Date: Sun Jan 15 09:43:59 2012 -0500
querymodules: Add --system argument
When run as a system trigger, we really don't want to be consulting
e.g. /root/.pangorc. Also, the OSTree build system can run as
non-root, but we don't in this case want to look at /home/user since
the user may not even exist in the password database inside the
chroot.
https://bugzilla.gnome.org/show_bug.cgi?id=667960
pango/pango-utils.c | 67 +++++++++++++++++++++++++++++++++++++++----------
pango/querymodules.c | 9 ++++++-
2 files changed, 61 insertions(+), 15 deletions(-)
---
diff --git a/pango/pango-utils.c b/pango/pango-utils.c
index 44ec353..8177dab 100644
--- a/pango/pango-utils.c
+++ b/pango/pango-utils.c
@@ -532,6 +532,7 @@ pango_scan_int (const char **pos, int *out)
}
static GHashTable *config_hash = NULL;
+static gboolean did_read_user_config = FALSE;
static void
read_config_file (const char *filename, gboolean enoent_error)
@@ -604,23 +605,41 @@ read_config_file (const char *filename, gboolean enoent_error)
}
static void
-read_config (void)
+ensure_config_hash (void)
{
if (!config_hash)
- {
- char *filename;
- const char *home;
- const char *envvar;
-
- config_hash = g_hash_table_new_full (g_str_hash, g_str_equal,
- (GDestroyNotify)g_free,
- (GDestroyNotify)g_free);
- filename = g_build_filename (pango_get_sysconf_subdirectory (),
- "pangorc",
- NULL);
- read_config_file (filename, FALSE);
- g_free (filename);
+ config_hash = g_hash_table_new_full (g_str_hash, g_str_equal,
+ (GDestroyNotify)g_free,
+ (GDestroyNotify)g_free);
+}
+
+static void
+read_config_system (void)
+{
+ char *filename;
+
+ ensure_config_hash ();
+
+ filename = g_build_filename (pango_get_sysconf_subdirectory (),
+ "pangorc",
+ NULL);
+ read_config_file (filename, FALSE);
+ g_free (filename);
+}
+
+static void
+read_config (void)
+{
+ char *filename;
+ const char *home;
+ const char *envvar;
+ read_config_system ();
+
+ if (!did_read_user_config)
+ {
+ did_read_user_config = TRUE;
+
home = g_get_home_dir ();
if (home && *home)
{
@@ -636,6 +655,26 @@ read_config (void)
}
/**
+ * pango_config_key_get_system:
+ * @key: Key to look up, in the form "SECTION/KEY".
+ *
+ * Looks up a key, consulting only the Pango system config database
+ * in $sysconfdir/pango/pangorc.
+ *
+ * Return value: the value, if found, otherwise %NULL. The value is a
+ * newly-allocated string and must be freed with g_free().
+ **/
+char *
+pango_config_key_get_system (const char *key)
+{
+ g_return_val_if_fail (key != NULL, NULL);
+
+ read_config_system ();
+
+ return g_strdup (g_hash_table_lookup (config_hash, key));
+}
+
+/**
* pango_config_key_get:
* @key: Key to look up, in the form "SECTION/KEY".
*
diff --git a/pango/querymodules.c b/pango/querymodules.c
index ef2d09a..a1eec70 100644
--- a/pango/querymodules.c
+++ b/pango/querymodules.c
@@ -44,6 +44,8 @@
#endif
#define SOEXT_LEN ((int) strlen (SOEXT))
+static gboolean system_mode;
+
static gboolean
string_needs_escape (const char *str)
{
@@ -205,6 +207,8 @@ main (int argc, char **argv)
{
{"version", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, &show_version,
"Show version numbers", NULL},
+ {"system", 0, 0, G_OPTION_ARG_NONE, &system_mode,
+ "Do not load configuration from home directory", NULL},
{NULL}
};
@@ -237,7 +241,10 @@ main (int argc, char **argv)
char **dirs;
int i;
- path = pango_config_key_get ("Pango/ModulesPath");
+ if (system_mode)
+ path = pango_config_key_get_system ("Pango/ModulesPath");
+ else
+ path = pango_config_key_get ("Pango/ModulesPath");
if (!path)
path = g_build_filename (pango_get_lib_subdirectory (),
MODULE_VERSION,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]