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