r23284 - gnucash/trunk/src/app-utils - Gnc-Prefs: fix crash in migration script on Win32

Geert Janssens gjanssens at code.gnucash.org
Tue Oct 8 12:31:42 EDT 2013


Author: gjanssens
Date: 2013-10-08 12:31:41 -0400 (Tue, 08 Oct 2013)
New Revision: 23284
Trac: http://svn.gnucash.org/trac/changeset/23284

Modified:
   gnucash/trunk/src/app-utils/gnc-gsettings.c
   gnucash/trunk/src/app-utils/make-prefs-migration-script.xsl
   gnucash/trunk/src/app-utils/migrate-prefs.scm
Log:
Gnc-Prefs: fix crash in migration script on Win32

Modified: gnucash/trunk/src/app-utils/gnc-gsettings.c
===================================================================
--- gnucash/trunk/src/app-utils/gnc-gsettings.c	2013-10-07 21:55:56 UTC (rev 23283)
+++ gnucash/trunk/src/app-utils/gnc-gsettings.c	2013-10-08 16:31:41 UTC (rev 23284)
@@ -618,10 +618,9 @@
 
 void gnc_gsettings_migrate_from_gconf (void)
 {
-    gchar *pkgdatadir, *stylesheet, *input, *output;
-    gchar *migr_dir;
-    SCM migr_script;
-    SCM result;
+    gchar *pkgdatadir, *stylesheet, *input, *output, *command;
+    gchar *base_dir, *iter;
+    SCM migr_script, result;
     xsltStylesheetPtr stylesheetptr = NULL;
     xmlDocPtr inputxml, transformedxml;
     FILE *outfile;
@@ -632,16 +631,27 @@
 
     if ((!g_file_test (stylesheet, G_FILE_TEST_IS_REGULAR)) ||
         (!g_file_test (input, G_FILE_TEST_IS_REGULAR)))
-   {
+    {
         /* Critical files not found, abort migration */
         g_free (stylesheet);
         g_free (input);
         return;
-   }
-    result = scm_c_eval_string ("(use-modules (migrate-prefs))(migration-prepare)");
+    }
 
-    migr_dir   = g_build_filename(g_getenv ("HOME"), ".gnc-migration-tmp", NULL);
-    output     = g_build_filename(migr_dir, "migrate-prefs-user.scm", NULL);
+    base_dir = g_strdup (g_get_home_dir ());
+    for (iter = base_dir; *iter != 0; iter++)
+    {
+        if ( *iter == '\\')
+            *iter = '/';
+    }
+
+    command = g_strconcat ("(use-modules (migrate-prefs))(migration-prepare \"",
+                             base_dir, "\")", NULL);
+    DEBUG ("command = %s", command);
+    result = scm_c_eval_string (command);
+    g_free (command);
+
+    output     = g_build_filename(base_dir, ".gnc-migration-tmp", "migrate-prefs-user.scm", NULL);
     xmlSubstituteEntitiesDefault(1);
     xmlLoadExtDtdDefaultValue = 1;
     defaultEntityLoader = xmlGetExternalEntityLoader();
@@ -665,12 +675,16 @@
     xsltCleanupGlobals();
     xmlCleanupParser();
 
-    result = scm_c_eval_string ("(use-modules (migrate-prefs))(migration-cleanup)");
+    command = g_strconcat ("(use-modules (migrate-prefs))(migration-cleanup \"",
+                             base_dir, "\")", NULL);
+    DEBUG ("command = %s", command);
+    result = scm_c_eval_string (command);
+    g_free (command);
 
     g_free (pkgdatadir);
     g_free (stylesheet);
     g_free (input);
     g_free (output);
-    g_free (migr_dir);
+    g_free (base_dir);
 
 }

Modified: gnucash/trunk/src/app-utils/make-prefs-migration-script.xsl
===================================================================
--- gnucash/trunk/src/app-utils/make-prefs-migration-script.xsl	2013-10-07 21:55:56 UTC (rev 23283)
+++ gnucash/trunk/src/app-utils/make-prefs-migration-script.xsl	2013-10-08 16:31:41 UTC (rev 23284)
@@ -157,7 +157,7 @@
     ; preference name
     "<xsl:value-of select="$curr-pref/gschemaname"/>"
     ; preference value
-    "<xsl:value-of select="./stringvalue"/>"
+    "<xsl:value-of select="translate(./stringvalue, $win, $mingw)"/>"
 )
    </xsl:if></xsl:when>
 
@@ -181,7 +181,10 @@
  <xsl:value-of select="key('datefmt-lookup', $curr-entry/stringvalue)/df:index"/>
 </xsl:template>
 
+<xsl:variable name="win" select="'\'" />
+<xsl:variable name="mingw" select="'/'" />
 
+
 <df:dateformats>
   <df:dateformat><df:name>us</df:name><df:index>0</df:index></df:dateformat>
   <df:dateformat><df:name>uk</df:name><df:index>1</df:index></df:dateformat>

Modified: gnucash/trunk/src/app-utils/migrate-prefs.scm
===================================================================
--- gnucash/trunk/src/app-utils/migrate-prefs.scm	2013-10-07 21:55:56 UTC (rev 23283)
+++ gnucash/trunk/src/app-utils/migrate-prefs.scm	2013-10-08 16:31:41 UTC (rev 23284)
@@ -10,9 +10,9 @@
 
 (define-module (migrate-prefs))
 
-(define gconf-dir (string-append (getenv "HOME") "/.gconf/apps/gnucash"))
-(define prefix-length (+ (string-length gconf-dir) 1))
-(define migration-dir (string-append (getenv "HOME") "/.gnc-migration-tmp"))
+(define gconf-dir "")
+(define prefix-length 0)
+(define migration-dir "")
 
 (define (copy-one-file filename)
 (let ((stats (stat filename))
@@ -74,7 +74,10 @@
   (apply find copy-one-file (list gconf-dir))
 )
 
-(define (migration-prepare)
+(define (migration-prepare base-dir)
+  (set! gconf-dir (string-append base-dir "/.gconf/apps/gnucash"))
+  (set! prefix-length (+ (string-length gconf-dir) 1))
+  (set! migration-dir (string-append base-dir "/.gnc-migration-tmp"))
   (if (access? gconf-dir R_OK)
     (begin
       (display "*** GnuCash switched to a new preferences system ***\n")
@@ -98,7 +101,8 @@
   (rmtree (list migration-dir))
   (rmdir migration-dir))
 
-(define (migration-cleanup)
+(define (migration-cleanup base-dir)
+  (set! migration-dir (string-append base-dir "/.gnc-migration-tmp"))
   (if (access? migration-dir (logior R_OK W_OK X_OK))
     (begin
       (format #t "Delete tmp dir ~A\n" migration-dir)



More information about the gnucash-changes mailing list