[at-spi2-core] Don't leak the display string
- From: William Jon McCann <mccann src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [at-spi2-core] Don't leak the display string
- Date: Sat, 15 Sep 2012 10:51:42 +0000 (UTC)
commit 5587b154a1f01f43924e049c33caffbeea26de48
Author: William Jon McCann <jmccann redhat com>
Date: Fri Sep 14 13:17:35 2012 -0400
Don't leak the display string
https://bugzilla.gnome.org/show_bug.cgi?id=684033
atspi/atspi-misc.c | 51 ++++++++++++++++++++++++++++-----------------------
1 files changed, 28 insertions(+), 23 deletions(-)
---
diff --git a/atspi/atspi-misc.c b/atspi/atspi-misc.c
index 7578cb3..0366fc4 100644
--- a/atspi/atspi-misc.c
+++ b/atspi/atspi-misc.c
@@ -778,35 +778,34 @@ static const char *signal_interfaces[] =
*
* TODO: Avoid having duplicate functions for this here and in at-spi2-atk
*/
-static const gchar *
+static gchar *
spi_display_name (void)
{
- static const char *canonical_display_name = NULL;
- if (!canonical_display_name)
+ char *canonical_display_name = NULL;
+ const gchar *display_env = g_getenv ("AT_SPI_DISPLAY");
+
+ if (!display_env)
{
- const gchar *display_env = g_getenv ("AT_SPI_DISPLAY");
- if (!display_env)
+ display_env = g_getenv ("DISPLAY");
+ if (!display_env || !display_env[0])
+ canonical_display_name = g_strdup (":0");
+ else
{
- display_env = g_getenv ("DISPLAY");
- if (!display_env || !display_env[0])
- canonical_display_name = ":0";
- else
+ gchar *display_p, *screen_p;
+ canonical_display_name = g_strdup (display_env);
+ display_p = g_utf8_strrchr (canonical_display_name, -1, ':');
+ screen_p = g_utf8_strrchr (canonical_display_name, -1, '.');
+ if (screen_p && display_p && (screen_p > display_p))
{
- gchar *display_p, *screen_p;
- canonical_display_name = g_strdup (display_env);
- display_p = g_utf8_strrchr (canonical_display_name, -1, ':');
- screen_p = g_utf8_strrchr (canonical_display_name, -1, '.');
- if (screen_p && display_p && (screen_p > display_p))
- {
- *screen_p = '\0';
- }
+ *screen_p = '\0';
}
}
- else
- {
- canonical_display_name = display_env;
- }
}
+ else
+ {
+ canonical_display_name = g_strdup (display_env);
+ }
+
return canonical_display_name;
}
@@ -1350,14 +1349,20 @@ get_accessibility_bus_address_x11 (void)
{
Atom AT_SPI_BUS;
Atom actual_type;
- Display *bridge_display;
+ Display *bridge_display = NULL;
int actual_format;
char *data;
unsigned char *data_x11 = NULL;
unsigned long nitems;
unsigned long leftover;
+ char *display_name;
- bridge_display = XOpenDisplay (spi_display_name ());
+ display_name = spi_display_name ();
+ if (display_name != NULL)
+ {
+ bridge_display = XOpenDisplay (display_name);
+ g_free (display_name);
+ }
if (!bridge_display)
{
g_warning ("Could not open X display");
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]