Index: ChangeLog =================================================================== RCS file: /cvs/gnome/gnome-desktop/ChangeLog,v retrieving revision 1.668 diff -u -p -r1.668 ChangeLog --- ChangeLog 31 Oct 2005 12:35:31 -0000 1.668 +++ ChangeLog 4 Nov 2005 08:41:39 -0000 @@ -0,0 +1,4 @@ +2005-11-04 Mark McLoughlin + + * configure.in: require glib >= 2.8.0 for g_listenv() + Index: configure.in =================================================================== RCS file: /cvs/gnome/gnome-desktop/configure.in,v retrieving revision 1.561 diff -u -p -r1.561 configure.in --- configure.in 31 Oct 2005 12:35:31 -0000 1.561 +++ configure.in 4 Nov 2005 08:41:39 -0000 @@ -70,7 +70,7 @@ dnl it too, or it will never make it int GDK_PIXBUF_REQUIRED=2.4.0 GTK_REQUIRED=2.4.0 -GLIB_REQUIRED=2.6.0 +GLIB_REQUIRED=2.8.0 LIBGNOMECANVAS_REQUIRED=2.0.0 LIBGNOMEUI_REQUIRED=2.6.0 GNOME_VFS_REQUIRED=2.0.0 Index: libgnome-desktop/ChangeLog =================================================================== RCS file: /cvs/gnome/gnome-desktop/libgnome-desktop/ChangeLog,v retrieving revision 1.202 diff -u -p -r1.202 ChangeLog --- libgnome-desktop/ChangeLog 24 Oct 2005 09:26:13 -0000 1.202 +++ libgnome-desktop/ChangeLog 4 Nov 2005 08:41:40 -0000 @@ -0,0 +1,9 @@ +2005-11-04 Mark McLoughlin + + Fixes build on Darwin - bug #124277 + + * gnome-desktop-item.c: + (make_spawn_environment_for_sn_context), + (make_environment_for_screen): Use g_listenv() instead + of environ + Index: libgnome-desktop/gnome-desktop-item.c =================================================================== RCS file: /cvs/gnome/gnome-desktop/libgnome-desktop/gnome-desktop-item.c,v retrieving revision 1.144 diff -u -p -r1.144 gnome-desktop-item.c --- libgnome-desktop/gnome-desktop-item.c 25 Jul 2005 17:08:59 -0000 1.144 +++ libgnome-desktop/gnome-desktop-item.c 4 Nov 2005 08:41:41 -0000 @@ -61,8 +61,6 @@ #define sure_string(s) ((s)!=NULL?(s):"") -extern char **environ; - struct _GnomeDesktopItem { int refcount; @@ -1492,23 +1490,32 @@ static char ** make_spawn_environment_for_sn_context (SnLauncherContext *sn_context, char **envp) { - char **retval = NULL; + char **retval; + char **freeme; int i, j; int desktop_startup_id_len; - if (envp == NULL) - envp = environ; - - for (i = 0; envp[i]; i++) - ; + retval = freeme = NULL; + + if (envp == NULL) { + envp = freeme = g_listenv (); + for (i = 0; envp[i]; i++) { + char *name = envp[i]; + + envp[i] = g_strjoin ("=", name, g_getenv (name), NULL); + g_free (name); + } + } else { + for (i = 0; envp[i]; i++) + ; + } retval = g_new (char *, i + 2); desktop_startup_id_len = strlen ("DESKTOP_STARTUP_ID"); for (i = 0, j = 0; envp[i]; i++) { - if (strncmp (envp[i], "DESKTOP_STARTUP_ID", desktop_startup_id_len) != 0) - { + if (strncmp (envp[i], "DESKTOP_STARTUP_ID", desktop_startup_id_len) != 0) { retval[j] = g_strdup (envp[i]); ++j; } @@ -1519,6 +1526,8 @@ make_spawn_environment_for_sn_context (S ++j; retval[j] = NULL; + g_strfreev (freeme); + return retval; } @@ -1666,15 +1675,25 @@ static char ** make_environment_for_screen (GdkScreen *screen, char **envp) { - char **retval = NULL; + char **retval; + char **freeme; char *display_name; int display_index = -1; int i, env_len; g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL); - if (envp == NULL) - envp = environ; + retval = freeme = NULL; + + if (envp == NULL) { + envp = freeme = g_listenv (); + for (i = 0; envp [i]; i++) { + char *name = envp[i]; + + envp[i] = g_strjoin ("=", name, g_getenv (name), NULL); + g_free (name); + } + } for (env_len = 0; envp [env_len]; env_len++) if (strncmp (envp [env_len], "DISPLAY", strlen ("DISPLAY")) == 0) @@ -1694,6 +1713,7 @@ make_environment_for_screen (GdkScreen g_assert (i == env_len); g_free (display_name); + g_free (freeme); return retval; }