### Eclipse Workspace Patch 1.0 #P platform-launcher Index: library/gtk/eclipseGtk.c =================================================================== RCS file: /cvsroot/eclipse/platform-launcher/library/gtk/eclipseGtk.c,v retrieving revision 1.27 diff -u -r1.27 eclipseGtk.c --- library/gtk/eclipseGtk.c 27 Mar 2006 18:25:42 -0000 1.27 +++ library/gtk/eclipseGtk.c 28 Nov 2006 19:50:03 -0000 @@ -335,3 +335,73 @@ gtk_main_quit(); return FALSE; } + +/* Add the platform to ~/.eclipse/org.eclipse.platform_3.2.0/configuration/org.eclipse.update/platform.xml */ +void addPlatformToTildeDotEclipse() +{ + gchar *platform_xml, *touched; + gchar *config_end_position; + gsize old_length; + gchar *old_contents, *new_contents; + GError *error = NULL; + const gchar *site_element = "\n\n\n\n\0"; + + platform_xml = g_strconcat(g_get_home_dir(), "/.eclipse/org.eclipse.platform_3.2.0/configuration/org.eclipse.update/platform.xml", NULL); + touched = g_strconcat(g_get_home_dir(), "/.eclipse/.homedirmodified-fedora", NULL); + + /* If platform.xml doesn't exist, Eclipse has yet to be started + * so don't worry about doing anything. Also, guard against doing + * this more than once with a dot file. */ + if (!g_file_test(platform_xml, G_FILE_TEST_EXISTS) || \ + g_file_test(touched, G_FILE_TEST_EXISTS)) { + g_free(platform_xml); + g_free(touched); + return; + } + + + if (g_file_get_contents (platform_xml, + &old_contents, &old_length, &error) == FALSE) + { + g_print("Error reading platform.xml in ~/.eclipse.\ + You should remove ~/.eclipse before restarting Eclipse:\0"); + g_print(g_strconcat(error->message, "\n\0", NULL)); + g_free(error); + g_free(platform_xml); + g_free(touched); + return; + } + + config_end_position = g_strrstr_len(old_contents, old_length, ""); + *config_end_position = '\0'; + new_contents = g_strconcat(old_contents, site_element, "\n\0", NULL); + + if (g_file_set_contents(platform_xml, + new_contents, -1, &error) == FALSE) + { + g_print("Error writing platform.xml in ~/.eclipse.\ + You should remove ~/.eclipse before restarting Eclipse:\0"); + g_print(g_strconcat(error->message, "\n\0", NULL)); + g_free(error); + g_free(touched); + g_free(platform_xml); + g_free(new_contents); + g_free(old_contents); + return; + } + + if (g_file_set_contents(touched, "\0", -1, &error) == FALSE) + { + g_print("Error touching ~/.eclipse/.homedirmodified-fedora.\ + You should remove ~/.eclipse before restarting Eclipse:\0"); + g_print(g_strconcat(error->message, "\n\0", NULL)); + g_free(error); + } + + g_free(platform_xml); + g_free(touched); + g_free(new_contents); + g_free(old_contents); + + return; +} Index: library/eclipse.c =================================================================== RCS file: /cvsroot/eclipse/platform-launcher/library/eclipse.c,v retrieving revision 1.71 diff -u -r1.71 eclipse.c --- library/eclipse.c 25 Apr 2006 14:31:50 -0000 1.71 +++ library/eclipse.c 28 Nov 2006 19:50:03 -0000 @@ -512,6 +512,8 @@ /* Get the command to start the Java VM. */ vmCommandArgs = getVMCommand( argc, argv ); + addPlatformToTildeDotEclipse(); + /* While the Java VM should be restarted */ vmCommand = vmCommandArgs; while (vmCommand != NULL)