]> www.fi.muni.cz Git - evince.git/blobdiff - libdocument/ev-file-helpers.c
2.25.90
[evince.git] / libdocument / ev-file-helpers.c
index 34d24f0c4d17eb033dc6727a522e2d39acf68b08..e48ce9d081bc42bc8a95116b7200ac09ebf6a181 100644 (file)
 
 #include "ev-file-helpers.h"
 
-static gchar *dot_dir = NULL;
 static gchar *tmp_dir = NULL;
 static gint   count = 0;
 
-static gboolean
-ensure_dir_exists (const char *dir)
+gboolean
+ev_dir_ensure_exists (const gchar *dir,
+                      int          mode)
 {
-       if (g_file_test (dir, G_FILE_TEST_IS_DIR))
-               return TRUE;
-       
-       if (g_mkdir_with_parents (dir, 488) == 0)
+       if (g_mkdir_with_parents (dir, mode) == 0)
                return TRUE;
 
        if (errno == EEXIST)
                return g_file_test (dir, G_FILE_TEST_IS_DIR);
        
-       g_warning ("Failed to create directory %s: %s", dir, strerror (errno));
+       g_warning ("Failed to create directory %s: %s", dir, g_strerror (errno));
        return FALSE;
 }
 
-const gchar *
-ev_dot_dir (void)
-{
-       if (dot_dir == NULL) {
-               gboolean exists;
-
-               dot_dir = g_build_filename (g_get_home_dir (),
-                                           ".gnome2",
-                                           "evince",
-                                           NULL);
-
-               exists = ensure_dir_exists (dot_dir);
-               if (!exists)
-                       exit (1);
-       }
-
-       return dot_dir;
-}
-
 const gchar *
 ev_tmp_dir (void)
 {
        if (tmp_dir == NULL) {
                gboolean exists;
-               gchar   *dirname;
+               gchar   *dirname, *prgname;
 
-               dirname = g_strdup_printf ("evince-%u", getpid ());
+                prgname = g_get_prgname ();
+               dirname = g_strdup_printf ("%s-%u", prgname ? prgname : "unknown", getpid ());
                tmp_dir = g_build_filename (g_get_tmp_dir (),
                                            dirname,
                                            NULL);
                g_free (dirname);
 
-               exists = ensure_dir_exists (tmp_dir);
+               exists = ev_dir_ensure_exists (tmp_dir, 0700);
                g_assert (exists);
        }
 
@@ -96,20 +75,17 @@ ev_tmp_dir (void)
 }
 
 void
-ev_file_helpers_init (void)
+_ev_file_helpers_init (void)
 {
 }
 
 void
-ev_file_helpers_shutdown (void)
+_ev_file_helpers_shutdown (void)
 {      
        if (tmp_dir != NULL)    
                g_rmdir (tmp_dir);
 
        g_free (tmp_dir);
-       g_free (dot_dir);
-
-       dot_dir = NULL;
        tmp_dir = NULL;
 }
 
@@ -169,17 +145,19 @@ void
 ev_tmp_file_unlink (GFile *file)
 {
        gboolean res;
+       GError  *error = NULL;
 
        if (!file)
                return;
        
-       res = g_file_delete (file, NULL, NULL);
+       res = g_file_delete (file, NULL, &error);
        if (!res) {
                char *uri;
                
                uri = g_file_get_uri (file);
-               g_warning ("Unable to delete temp file %s\n", uri);
+               g_warning ("Unable to delete temp file %s: %s\n", uri, error->message);
                g_free (uri);
+               g_error_free (error);
        }
 }
 
@@ -219,6 +197,9 @@ ev_xfer_uri_simple (const char *from,
        target_file = g_file_new_for_uri (to);
        
        result = g_file_copy (source_file, target_file,
+#if GLIB_CHECK_VERSION(2,19,0)
+                             G_FILE_COPY_TARGET_DEFAULT_PERMS |
+#endif
                              G_FILE_COPY_OVERWRITE,
                              NULL, NULL, NULL, &ioerror);
 
@@ -248,7 +229,8 @@ get_mime_type_from_uri (const gchar *uri, GError **error)
        if (file_info == NULL)
                return NULL;
 
-       mime_type = g_strdup (g_file_info_get_content_type (file_info));
+       mime_type = g_content_type_get_mime_type (
+                       g_file_info_get_content_type (file_info));
        g_object_unref (file_info);
 
        return mime_type;