[file-roller] always set the current directory when uncompressing



commit 34a29f88588f28b5e36b239adbcb24bc429a9b85
Author: Paolo Bacchilega <paobac src gnome org>
Date:   Wed Aug 17 09:03:44 2016 +0200

    always set the current directory when uncompressing
    
    to make sure the file is uncomrpessed in the right directory

 src/fr-command-cfile.c |    7 +++++++
 src/fr-command-tar.c   |   13 +++++++++++++
 2 files changed, 20 insertions(+), 0 deletions(-)
---
diff --git a/src/fr-command-cfile.c b/src/fr-command-cfile.c
index 1f6cc1a..54388cf 100644
--- a/src/fr-command-cfile.c
+++ b/src/fr-command-cfile.c
@@ -376,6 +376,7 @@ fr_command_cfile_extract (FrCommand  *comm,
 
        if (_g_mime_type_matches (archive->mime_type, "application/x-gzip")) {
                fr_process_begin_command (comm->process, "gzip");
+               fr_process_set_working_dir (comm->process, temp_dir);
                fr_process_add_arg (comm->process, "-f");
                fr_process_add_arg (comm->process, "-d");
                fr_process_add_arg (comm->process, "-n");
@@ -384,6 +385,7 @@ fr_command_cfile_extract (FrCommand  *comm,
        }
        else if (_g_mime_type_matches (archive->mime_type, "application/x-bzip")) {
                fr_process_begin_command (comm->process, "bzip2");
+               fr_process_set_working_dir (comm->process, temp_dir);
                fr_process_add_arg (comm->process, "-f");
                fr_process_add_arg (comm->process, "-d");
                fr_process_add_arg (comm->process, temp_file);
@@ -397,12 +399,14 @@ fr_command_cfile_extract (FrCommand  *comm,
                }
                else
                        fr_process_begin_command (comm->process, "uncompress");
+               fr_process_set_working_dir (comm->process, temp_dir);
                fr_process_add_arg (comm->process, "-f");
                fr_process_add_arg (comm->process, temp_file);
                fr_process_end_command (comm->process);
        }
        else if (_g_mime_type_matches (archive->mime_type, "application/x-lzip")) {
                fr_process_begin_command (comm->process, "lzip");
+               fr_process_set_working_dir (comm->process, temp_dir);
                fr_process_add_arg (comm->process, "-f");
                fr_process_add_arg (comm->process, "-d");
                fr_process_add_arg (comm->process, temp_file);
@@ -410,6 +414,7 @@ fr_command_cfile_extract (FrCommand  *comm,
        }
        else if (_g_mime_type_matches (archive->mime_type, "application/x-lzma")) {
                fr_process_begin_command (comm->process, "lzma");
+               fr_process_set_working_dir (comm->process, temp_dir);
                fr_process_add_arg (comm->process, "-f");
                fr_process_add_arg (comm->process, "-d");
                fr_process_add_arg (comm->process, temp_file);
@@ -417,6 +422,7 @@ fr_command_cfile_extract (FrCommand  *comm,
        }
        else if (_g_mime_type_matches (archive->mime_type, "application/x-xz")) {
                fr_process_begin_command (comm->process, "xz");
+               fr_process_set_working_dir (comm->process, temp_dir);
                fr_process_add_arg (comm->process, "-f");
                fr_process_add_arg (comm->process, "-d");
                fr_process_add_arg (comm->process, temp_file);
@@ -433,6 +439,7 @@ fr_command_cfile_extract (FrCommand  *comm,
        }
        else if (_g_mime_type_matches (archive->mime_type, "application/x-rzip")) {
                fr_process_begin_command (comm->process, "rzip");
+               fr_process_set_working_dir (comm->process, temp_dir);
                fr_process_add_arg (comm->process, "-f");
                fr_process_add_arg (comm->process, "-d");
                fr_process_add_arg (comm->process, temp_file);
diff --git a/src/fr-command-tar.c b/src/fr-command-tar.c
index 5a25d48..4fb250d 100644
--- a/src/fr-command-tar.c
+++ b/src/fr-command-tar.c
@@ -902,6 +902,7 @@ fr_command_tar_uncompress (FrCommand *comm)
        FrCommandTar *c_tar = FR_COMMAND_TAR (comm);
        FrArchive    *archive = FR_ARCHIVE (comm);
        char         *tmp_name;
+       char         *tmp_dir;
        gboolean      archive_exists;
 
        if (can_create_a_compressed_archive (comm))
@@ -928,12 +929,14 @@ fr_command_tar_uncompress (FrCommand *comm)
        }
        else
                tmp_name = g_strdup (comm->filename);
+       tmp_dir = _g_path_remove_level (tmp_name);
 
        c_tar->uncomp_filename = get_uncompressed_name (c_tar, tmp_name);
 
        if (archive_exists) {
                if (_g_mime_type_matches (archive->mime_type, "application/x-compressed-tar")) {
                        fr_process_begin_command (comm->process, "gzip");
+                       fr_process_set_working_dir (comm->process, tmp_dir);
                        fr_process_set_begin_func (comm->process, begin_func__uncompress, comm);
                        fr_process_set_continue_func (comm->process, gzip_continue_func, comm);
                        fr_process_add_arg (comm->process, "-f");
@@ -943,6 +946,7 @@ fr_command_tar_uncompress (FrCommand *comm)
                }
                else if (_g_mime_type_matches (archive->mime_type, "application/x-bzip-compressed-tar")) {
                        fr_process_begin_command (comm->process, "bzip2");
+                       fr_process_set_working_dir (comm->process, tmp_dir);
                        fr_process_set_begin_func (comm->process, begin_func__uncompress, comm);
                        fr_process_add_arg (comm->process, "-f");
                        fr_process_add_arg (comm->process, "-d");
@@ -956,6 +960,7 @@ fr_command_tar_uncompress (FrCommand *comm)
                        }
                        else
                                fr_process_begin_command (comm->process, "uncompress");
+                       fr_process_set_working_dir (comm->process, tmp_dir);
                        fr_process_set_begin_func (comm->process, begin_func__uncompress, comm);
                        fr_process_add_arg (comm->process, "-f");
                        fr_process_add_arg (comm->process, tmp_name);
@@ -963,6 +968,7 @@ fr_command_tar_uncompress (FrCommand *comm)
                }
                else if (_g_mime_type_matches (archive->mime_type, "application/x-lrzip-compressed-tar")) {
                        fr_process_begin_command (comm->process, "lrzip");
+                       fr_process_set_working_dir (comm->process, tmp_dir);
                        fr_process_set_begin_func (comm->process, begin_func__uncompress, comm);
                        fr_process_add_arg (comm->process, "-f");
                        fr_process_add_arg (comm->process, "-d");
@@ -981,6 +987,7 @@ fr_command_tar_uncompress (FrCommand *comm)
                }
                else if (_g_mime_type_matches (archive->mime_type, "application/x-lzip-compressed-tar")) {
                        fr_process_begin_command (comm->process, "lzip");
+                       fr_process_set_working_dir (comm->process, tmp_dir);
                        fr_process_set_begin_func (comm->process, begin_func__uncompress, comm);
                        fr_process_add_arg (comm->process, "-f");
                        fr_process_add_arg (comm->process, "-d");
@@ -989,6 +996,7 @@ fr_command_tar_uncompress (FrCommand *comm)
                }
                else if (_g_mime_type_matches (archive->mime_type, "application/x-lzma-compressed-tar")) {
                        fr_process_begin_command (comm->process, "lzma");
+                       fr_process_set_working_dir (comm->process, tmp_dir);
                        fr_process_set_begin_func (comm->process, begin_func__uncompress, comm);
                        fr_process_add_arg (comm->process, "-f");
                        fr_process_add_arg (comm->process, "-d");
@@ -997,6 +1005,7 @@ fr_command_tar_uncompress (FrCommand *comm)
                }
                else if (_g_mime_type_matches (archive->mime_type, "application/x-xz-compressed-tar")) {
                        fr_process_begin_command (comm->process, "xz");
+                       fr_process_set_working_dir (comm->process, tmp_dir);
                        fr_process_set_begin_func (comm->process, begin_func__uncompress, comm);
                        fr_process_add_arg (comm->process, "-f");
                        fr_process_add_arg (comm->process, "-d");
@@ -1005,6 +1014,7 @@ fr_command_tar_uncompress (FrCommand *comm)
                }
                else if (_g_mime_type_matches (archive->mime_type, "application/x-lzop-compressed-tar")) {
                        fr_process_begin_command (comm->process, "lzop");
+                       fr_process_set_working_dir (comm->process, tmp_dir);
                        fr_process_set_begin_func (comm->process, begin_func__uncompress, comm);
                        fr_process_add_arg (comm->process, "-dfU");
                        fr_process_add_arg (comm->process, "--no-stdin");
@@ -1015,6 +1025,7 @@ fr_command_tar_uncompress (FrCommand *comm)
                        FrCommandTar *comm_tar = (FrCommandTar*) comm;
 
                        fr_process_begin_command (comm->process, comm_tar->compress_command);
+                       fr_process_set_working_dir (comm->process, tmp_dir);
                        fr_process_set_begin_func (comm->process, begin_func__uncompress, comm);
                        fr_process_add_arg (comm->process, "e");
                        fr_process_add_arg (comm->process, "-bd");
@@ -1031,6 +1042,7 @@ fr_command_tar_uncompress (FrCommand *comm)
                }
                else if (_g_mime_type_matches (archive->mime_type, "application/x-rzip-compressed-tar")) {
                        fr_process_begin_command (comm->process, "rzip");
+                       fr_process_set_working_dir (comm->process, tmp_dir);
                        fr_process_set_begin_func (comm->process, begin_func__uncompress, comm);
                        fr_process_add_arg (comm->process, "-df");
                        fr_process_add_arg (comm->process, tmp_name);
@@ -1038,6 +1050,7 @@ fr_command_tar_uncompress (FrCommand *comm)
                }
        }
 
+       g_free (tmp_dir);
        g_free (tmp_name);
 }
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]