Revision: 3652 http://geany.svn.sourceforge.net/geany/?rev=3652&view=rev Author: eht16 Date: 2009-03-25 19:00:34 +0000 (Wed, 25 Mar 2009)
Log Message: ----------- Check whether skipping the root element of a document's filename succeeded and use the filename itself if not (e.g. on relative filenames, #2702844). Use the locale encoded filename when saving session files.
Modified Paths: -------------- trunk/ChangeLog trunk/src/keyfile.c
Modified: trunk/ChangeLog =================================================================== --- trunk/ChangeLog 2009-03-25 18:52:17 UTC (rev 3651) +++ trunk/ChangeLog 2009-03-25 19:00:34 UTC (rev 3652) @@ -4,6 +4,11 @@ Delete the geany_run_script.sh immediately after execution to prevent leaking old copies when the script was quit unexpectedly (closes #2710482, patch by Martin Olsson, thanks). + * src/keyfile.c: + Check whether skipping the root element of a document's filename + succeeded and use the filename itself if not (e.g. on relative + filenames, #2702844). + Use the locale encoded filename when saving session files.
2009-03-24 Frank Lanitz <frank(at)frank(dot)uvena(dot)de>
Modified: trunk/src/keyfile.c =================================================================== --- trunk/src/keyfile.c 2009-03-25 18:52:17 UTC (rev 3651) +++ trunk/src/keyfile.c 2009-03-25 19:00:34 UTC (rev 3652) @@ -230,19 +230,23 @@ static gchar *get_session_file_string(GeanyDocument *doc) { gchar *fname; - gchar *doc_filename; + gchar *locale_filename; + gchar *rootless_filename; GeanyFiletype *ft = doc->file_type;
if (ft == NULL) /* can happen when saving a new file when quitting */ ft = filetypes[GEANY_FILETYPES_NONE];
- doc_filename = g_strdup(doc->file_name); + locale_filename = utils_get_locale_from_utf8(doc->file_name); /* If the filename contains any ';' (semi-colons) we need to escape them otherwise * g_key_file_get_string_list() would fail reading them, so we replace them before * writing with usual colons which must never appear in a filename and replace them * back when we read the file again from the file. * (g_path_skip_root() to skip C:... on Windows) */ - g_strdelimit((gchar *) g_path_skip_root(doc_filename), ";", ':'); + rootless_filename = (gchar *) g_path_skip_root(locale_filename); + if (locale_filename == NULL) + rootless_filename = locale_filename; + g_strdelimit(rootless_filename, ";", ':');
fname = g_strdup_printf("%d;%s;%d;%d;%d;%d;%d;%s;%d", sci_get_current_position(doc->editor->sci), @@ -252,9 +256,9 @@ doc->editor->indent_type, doc->editor->auto_indent, doc->editor->line_wrapping, - doc_filename, + locale_filename, doc->editor->line_breaking); - g_free(doc_filename); + g_free(locale_filename); return fname; }
@@ -890,6 +894,7 @@ guint pos; const gchar *ft_name; gchar *locale_filename; + gchar *rootless_filename; gint enc_idx, indent_type; gboolean ro, auto_indent, line_wrapping; /** TODO when we have a global pref for line breaking, use its value */ @@ -906,7 +911,11 @@ /* try to get the locale equivalent for the filename */ locale_filename = utils_get_locale_from_utf8(tmp[7]); /* replace ':' back with ';' (see get_session_file_string for details) */ - g_strdelimit((gchar *) g_path_skip_root(locale_filename), ":", ';'); + rootless_filename = (gchar *) g_path_skip_root(locale_filename); + if (locale_filename == NULL) + rootless_filename = locale_filename; + g_strdelimit(rootless_filename, ":", ';'); + if (len > 8) line_breaking = atoi(tmp[8]);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.