From 91276e1763b33970684e93ef6a20cd2134a5be57 Mon Sep 17 00:00:00 2001 From: John Smith Date: Fri, 30 Nov 2012 11:05:35 +0900 Subject: Fix for 430301 : core dump exporting to non existing folder (bzr r11915) --- src/io/sys.cpp | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) (limited to 'src/io/sys.cpp') diff --git a/src/io/sys.cpp b/src/io/sys.cpp index 5f19ee5db..26c1993a7 100644 --- a/src/io/sys.cpp +++ b/src/io/sys.cpp @@ -239,6 +239,40 @@ bool Inkscape::IO::file_is_writable( char const *utf8name) return success; } +/**Checks if directory of file exists, useful + * because inkscape doesn't create directories.*/ +bool Inkscape::IO::file_directory_exists( char const *utf8name ){ + bool exists = true; + + if ( utf8name) { + gchar *filename = NULL; + if (utf8name && !g_utf8_validate(utf8name, -1, NULL)) { + /* FIXME: Trying to guess whether or not a filename is already in utf8 is unreliable. + If any callers pass non-utf8 data (e.g. using g_get_home_dir), then change caller to + use simple g_file_test. Then add g_return_val_if_fail(g_utf_validate(...), false) + to beginning of this function. */ + filename = g_strdup(utf8name); + // Looks like g_get_home_dir isn't safe. + //g_warning("invalid UTF-8 detected internally. HUNT IT DOWN AND KILL IT!!!"); + } else { + filename = g_filename_from_utf8 ( utf8name, -1, NULL, NULL, NULL ); + } + if ( filename ) { + gchar *dirname = g_path_get_dirname(filename); + exists = Inkscape::IO::file_test( dirname, G_FILE_TEST_EXISTS); + g_free(filename); + g_free(dirname); + filename = NULL; + dirname = NULL; + } else { + g_warning( "Unable to convert filename in IO:file_test" ); + } + } + + return exists; + +} + /** Wrapper around g_dir_open, but taking a utf8name as first argument. */ GDir * Inkscape::IO::dir_open(gchar const *const utf8name, guint const flags, GError **const error) -- cgit v1.2.3 From c8a761256b40300761c7ff6a0d642ac75b6f541a Mon Sep 17 00:00:00 2001 From: Alex Valavanis Date: Mon, 11 Feb 2013 23:34:59 +0000 Subject: A couple of forward declarations (bzr r12119) --- src/io/sys.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'src/io/sys.cpp') diff --git a/src/io/sys.cpp b/src/io/sys.cpp index 26c1993a7..60e850c96 100644 --- a/src/io/sys.cpp +++ b/src/io/sys.cpp @@ -15,6 +15,7 @@ # include "config.h" #endif +#include #include #include #include -- cgit v1.2.3 From 3c213cec8c2aab1a53d0d5cb9d87659b584ac876 Mon Sep 17 00:00:00 2001 From: Kris De Gussem Date: Wed, 3 Apr 2013 22:47:48 +0200 Subject: Checking file presence before calling lstat (should fix Bug #785701 Inkscape freezes at opening) (bzr r12263) --- src/io/sys.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'src/io/sys.cpp') diff --git a/src/io/sys.cpp b/src/io/sys.cpp index 60e850c96..94175176a 100644 --- a/src/io/sys.cpp +++ b/src/io/sys.cpp @@ -227,8 +227,10 @@ bool Inkscape::IO::file_is_writable( char const *utf8name) } if ( filename ) { struct stat st; - if(g_lstat (filename, &st) == 0) { - success = ((st.st_mode & S_IWRITE) != 0); + if (g_file_test (filename, G_FILE_TEST_EXISTS)){ + if (g_lstat (filename, &st) == 0) { + success = ((st.st_mode & S_IWRITE) != 0); + } } g_free(filename); filename = NULL; -- cgit v1.2.3