static const char * fr_command_cfile_get_packages (FrCommand *comm, const char *mime_type) { if (is_mime_type (mime_type, "application/x-gzip")) return PACKAGES ("gzip"); else if (is_mime_type (mime_type, "application/x-brotli")) return PACKAGES ("brotli"); else if (is_mime_type (mime_type, "application/x-bzip")) return PACKAGES ("bzip2"); else if (is_mime_type (mime_type, "application/x-compress")) return PACKAGES ("ncompress"); else if (is_mime_type (mime_type, "application/x-lzip")) return PACKAGES ("lzip"); else if (is_mime_type (mime_type, "application/x-lzma")) return PACKAGES ("lzma"); else if (is_mime_type (mime_type, "application/x-xz")) return PACKAGES ("xz"); else if (is_mime_type (mime_type, "application/x-lzop")) return PACKAGES ("lzop"); else if (is_mime_type (mime_type, "application/x-rzip")) return PACKAGES ("rzip"); return NULL; }
static FrCommandCap fr_command_ar_get_capabilities (FrCommand *comm, const char *mime_type, gboolean check_command) { FrCommandCap capabilities; capabilities = FR_COMMAND_CAN_ARCHIVE_MANY_FILES; if (is_program_available ("ar", check_command)) { if (is_mime_type (mime_type, "application/x-deb")) capabilities |= FR_COMMAND_CAN_READ; else if (is_mime_type (mime_type, "application/x-ar")) capabilities |= FR_COMMAND_CAN_READ_WRITE; } return capabilities; }
static FrCommandCap fr_command_cfile_get_capabilities (FrCommand *comm, const char *mime_type, gboolean check_command) { FrCommandCap capabilities; capabilities = FR_COMMAND_CAN_DO_NOTHING; if (is_mime_type (mime_type, "application/x-gzip")) { if (is_program_available ("gzip", check_command)) capabilities |= FR_COMMAND_CAN_READ_WRITE; } else if (is_mime_type (mime_type, "application/x-brotli")) { if (is_program_available ("brotli", check_command)) capabilities |= FR_COMMAND_CAN_READ_WRITE; } else if (is_mime_type (mime_type, "application/x-bzip")) { if (is_program_available ("bzip2", check_command)) capabilities |= FR_COMMAND_CAN_READ_WRITE; } else if (is_mime_type (mime_type, "application/x-compress")) { if (is_program_available ("compress", check_command)) capabilities |= FR_COMMAND_CAN_WRITE; if (is_program_available ("uncompress", check_command) || is_program_available ("gzip", check_command)) capabilities |= FR_COMMAND_CAN_READ; } else if (is_mime_type (mime_type, "application/x-lzip")) { if (is_program_available ("lzip", check_command)) capabilities |= FR_COMMAND_CAN_READ_WRITE; } else if (is_mime_type (mime_type, "application/x-lzma")) { if (is_program_available ("lzma", check_command)) capabilities |= FR_COMMAND_CAN_READ_WRITE; } else if (is_mime_type (mime_type, "application/x-xz")) { if (is_program_available ("xz", check_command)) capabilities |= FR_COMMAND_CAN_READ_WRITE; } else if (is_mime_type (mime_type, "application/x-lzop")) { if (is_program_available ("lzop", check_command)) capabilities |= FR_COMMAND_CAN_READ_WRITE; } else if (is_mime_type (mime_type, "application/x-rzip")) { if (is_program_available ("rzip", check_command)) capabilities |= FR_COMMAND_CAN_READ_WRITE; } return capabilities; }
static void fr_command_cfile_list (FrCommand *comm) { FrCommandCFile *comm_cfile = FR_COMMAND_CFILE (comm); if (is_mime_type (comm->mime_type, "application/x-gzip")) { /* gzip let us known the uncompressed size */ fr_process_set_out_line_func (FR_COMMAND (comm)->process, list__process_line, comm); fr_process_begin_command (comm->process, "gzip"); fr_process_add_arg (comm->process, "-l"); fr_process_add_arg (comm->process, "-q"); fr_process_add_arg (comm->process, comm->filename); fr_process_end_command (comm->process); fr_process_start (comm->process); } else { /* ... other compressors do not support this feature so * simply use the archive size, suboptimal but there is no * alternative. */ FileData *fdata; char *filename; fdata = file_data_new (); filename = remove_extension_from_path (comm->filename); fdata->full_path = g_strconcat ("/", file_name_from_path (filename), NULL); g_free (filename); fdata->original_path = fdata->full_path + 1; fdata->link = NULL; fdata->size = get_file_size_for_path (comm->filename); fdata->modified = get_file_mtime_for_path (comm->filename); fdata->name = g_strdup (file_name_from_path (fdata->full_path)); fdata->path = remove_level_from_path (fdata->full_path); if (*fdata->name == 0) file_data_free (fdata); else fr_command_add_file (comm, fdata); comm_cfile->error.type = FR_PROC_ERROR_NONE; comm_cfile->error.status = 0; g_signal_emit_by_name (G_OBJECT (comm), "done", comm->action, &comm_cfile->error); } }
static char * get_uncompressed_name_from_archive (FrCommand *comm, const char *archive) { GFile *file; GInputStream *stream; char *filename = NULL; if (! is_mime_type (comm->mime_type, "application/x-gzip")) return NULL; file = g_file_new_for_path (archive); stream = (GInputStream *) g_file_read (file, NULL, NULL); if (stream != NULL) { gboolean filename_present = TRUE; char buffer[10]; if (g_input_stream_read (stream, buffer, 10, NULL, NULL) >= 0) { /* Check whether the FLG.FNAME is set */ if (((unsigned char)(buffer[3]) & 0x08) != 0x08) filename_present = FALSE; /* Check whether the FLG.FEXTRA is set */ if (((unsigned char)(buffer[3]) & 0x04) == 0x04) filename_present = FALSE; } if (filename_present) { GString *str = NULL; str = g_string_new (""); while (g_input_stream_read (stream, buffer, 1, NULL, NULL) > 0) { if (buffer[0] == '\0') { filename = g_strdup (file_name_from_path (str->str)); #ifdef DEBUG g_message ("filename is: %s", filename); #endif break; } g_string_append_c (str, buffer[0]); } g_string_free (str, TRUE); } g_object_unref (stream); } g_object_unref (file); return filename; }
static void add_compress_arg (FrCommand *comm) { if (is_mime_type (comm->mime_type, "application/x-compressed-tar")) fr_process_add_arg (comm->process, "-z"); else if (is_mime_type (comm->mime_type, "application/x-bzip-compressed-tar")) fr_process_add_arg (comm->process, "--use-compress-program=bzip2"); else if (is_mime_type (comm->mime_type, "application/x-tarz")) { if (is_program_in_path ("gzip")) fr_process_add_arg (comm->process, "-z"); else fr_process_add_arg (comm->process, "-Z"); } else if (is_mime_type (comm->mime_type, "application/x-lrzip-compressed-tar")) fr_process_add_arg (comm->process, "--use-compress-program=lrzip"); else if (is_mime_type (comm->mime_type, "application/x-lzip-compressed-tar")) fr_process_add_arg (comm->process, "--use-compress-program=lzip"); else if (is_mime_type (comm->mime_type, "application/x-lzma-compressed-tar")) fr_process_add_arg (comm->process, "--use-compress-program=lzma"); else if (is_mime_type (comm->mime_type, "application/x-xz-compressed-tar")) fr_process_add_arg (comm->process, "--use-compress-program=xz"); else if (is_mime_type (comm->mime_type, "application/x-lzop-compressed-tar")) fr_process_add_arg (comm->process, "--use-compress-program=lzop"); else if (is_mime_type (comm->mime_type, "application/x-7z-compressed-tar")) { FrCommandTar *comm_tar = (FrCommandTar*) comm; char *option; option = g_strdup_printf ("--use-compress-program=%s", comm_tar->compress_command); fr_process_add_arg (comm->process, option); g_free (option); } }
static void fr_command_cfile_test (FrCommand *comm) { const char *compress_cmd; if (is_mime_type (comm->mime_type, "application/x-gzip")) { compress_cmd = "gzip"; } else if (is_mime_type (comm->mime_type, "application/x-brotli")) { compress_cmd = "brotli"; } else if (is_mime_type (comm->mime_type, "application/x-bzip")) { compress_cmd = "bzip2"; } else if (is_mime_type (comm->mime_type, "application/x-compress")) { compress_cmd = is_program_in_path ("gzip") ? "gzip" : "uncompress"; } else if (is_mime_type (comm->mime_type, "application/x-lzip")) { compress_cmd = "lzip"; } else if (is_mime_type (comm->mime_type, "application/x-lzma")) { compress_cmd = "lzma"; } else if (is_mime_type (comm->mime_type, "application/x-xz")) { compress_cmd = "xz"; } else if (is_mime_type (comm->mime_type, "application/x-lzop")) { compress_cmd = "lzop"; } else { // i.e. if (is_mime_type (comm->mime_type, "application/x-rzip")) g_warning ("Test integrity is unsupported for %s\n", comm->mime_type); return; } fr_process_begin_command (comm->process, compress_cmd); fr_process_add_arg (comm->process, "-vt"); // verbose and test fr_process_add_arg (comm->process, comm->filename); fr_process_end_command (comm->process); }
static void fr_command_cfile_extract (FrCommand *comm, const char *from_file, GList *file_list, const char *dest_dir, gboolean overwrite, gboolean skip_older, gboolean junk_paths) { char *temp_dir; char *dest_file; char *temp_file; char *uncompr_file; char *compr_file; /* copy file to the temp dir, remove the already existing file first */ temp_dir = get_temp_work_dir (NULL); temp_file = g_strconcat (temp_dir, "/", file_name_from_path (comm->filename), NULL); fr_process_begin_command (comm->process, "cp"); fr_process_add_arg (comm->process, "-f"); fr_process_add_arg (comm->process, comm->filename); fr_process_add_arg (comm->process, temp_file); fr_process_end_command (comm->process); /* uncompress the file */ if (is_mime_type (comm->mime_type, "application/x-gzip")) { fr_process_begin_command (comm->process, "gzip"); fr_process_add_arg (comm->process, "-f"); fr_process_add_arg (comm->process, "-d"); fr_process_add_arg (comm->process, "-n"); fr_process_add_arg (comm->process, temp_file); fr_process_end_command (comm->process); } else if (is_mime_type (comm->mime_type, "application/x-bzip")) { fr_process_begin_command (comm->process, "bzip2"); fr_process_add_arg (comm->process, "-f"); fr_process_add_arg (comm->process, "-d"); fr_process_add_arg (comm->process, temp_file); fr_process_end_command (comm->process); } else if (is_mime_type (comm->mime_type, "application/x-compress")) { if (is_program_in_path ("gzip")) { fr_process_begin_command (comm->process, "gzip"); fr_process_add_arg (comm->process, "-d"); fr_process_add_arg (comm->process, "-n"); } else fr_process_begin_command (comm->process, "uncompress"); fr_process_add_arg (comm->process, "-f"); fr_process_add_arg (comm->process, temp_file); fr_process_end_command (comm->process); } else if (is_mime_type (comm->mime_type, "application/x-lzip")) { fr_process_begin_command (comm->process, "lzip"); fr_process_add_arg (comm->process, "-f"); fr_process_add_arg (comm->process, "-d"); fr_process_add_arg (comm->process, temp_file); fr_process_end_command (comm->process); } else if (is_mime_type (comm->mime_type, "application/x-lzma")) { fr_process_begin_command (comm->process, "lzma"); fr_process_add_arg (comm->process, "-f"); fr_process_add_arg (comm->process, "-d"); fr_process_add_arg (comm->process, temp_file); fr_process_end_command (comm->process); } else if (is_mime_type (comm->mime_type, "application/x-xz")) { fr_process_begin_command (comm->process, "xz"); fr_process_add_arg (comm->process, "-f"); fr_process_add_arg (comm->process, "-d"); fr_process_add_arg (comm->process, temp_file); fr_process_end_command (comm->process); } else if (is_mime_type (comm->mime_type, "application/x-lzop")) { fr_process_begin_command (comm->process, "lzop"); fr_process_set_working_dir (comm->process, temp_dir); fr_process_add_arg (comm->process, "-d"); fr_process_add_arg (comm->process, "-fU"); fr_process_add_arg (comm->process, "--no-stdin"); fr_process_add_arg (comm->process, temp_file); fr_process_end_command (comm->process); } else if (is_mime_type (comm->mime_type, "application/x-rzip")) { fr_process_begin_command (comm->process, "rzip"); fr_process_add_arg (comm->process, "-f"); fr_process_add_arg (comm->process, "-d"); fr_process_add_arg (comm->process, temp_file); fr_process_end_command (comm->process); } /* copy uncompress file to the dest dir */ uncompr_file = remove_extension_from_path (temp_file); compr_file = get_uncompressed_name_from_archive (comm, comm->filename); if (compr_file == NULL) compr_file = remove_extension_from_path (file_name_from_path (comm->filename)); dest_file = g_strconcat (dest_dir, "/", compr_file, NULL); fr_process_begin_command (comm->process, "cp"); fr_process_add_arg (comm->process, "-f"); fr_process_add_arg (comm->process, uncompr_file); fr_process_add_arg (comm->process, dest_file); fr_process_end_command (comm->process); /* remove the temp dir */ fr_process_begin_command (comm->process, "rm"); fr_process_set_sticky (comm->process, TRUE); fr_process_add_arg (comm->process, "-rf"); fr_process_add_arg (comm->process, temp_dir); fr_process_end_command (comm->process); g_free (dest_file); g_free (compr_file); g_free (uncompr_file); g_free (temp_file); g_free (temp_dir); }
static void fr_command_cfile_add (FrCommand *comm, const char *from_file, GList *file_list, const char *base_dir, gboolean update, gboolean recursive) { const char *filename; char *temp_dir; char *temp_file; char *compressed_filename; if ((file_list == NULL) || (file_list->data == NULL)) return; /* copy file to the temp dir */ temp_dir = get_temp_work_dir (NULL); filename = file_list->data; temp_file = g_strconcat (temp_dir, "/", filename, NULL); fr_process_begin_command (comm->process, "cp"); fr_process_set_working_dir (comm->process, base_dir); fr_process_add_arg (comm->process, "-f"); fr_process_add_arg (comm->process, "--"); fr_process_add_arg (comm->process, filename); fr_process_add_arg (comm->process, temp_file); fr_process_end_command (comm->process); /**/ if (is_mime_type (comm->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, "--"); fr_process_add_arg (comm->process, filename); fr_process_end_command (comm->process); compressed_filename = g_strconcat (filename, ".gz", NULL); } else if (is_mime_type (comm->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, "--"); fr_process_add_arg (comm->process, filename); fr_process_end_command (comm->process); compressed_filename = g_strconcat (filename, ".bz2", NULL); } else if (is_mime_type (comm->mime_type, "application/x-compress")) { fr_process_begin_command (comm->process, "compress"); fr_process_set_working_dir (comm->process, temp_dir); fr_process_add_arg (comm->process, "-f"); fr_process_add_arg (comm->process, filename); fr_process_end_command (comm->process); compressed_filename = g_strconcat (filename, ".Z", NULL); } else if (is_mime_type (comm->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, "--"); fr_process_add_arg (comm->process, filename); fr_process_end_command (comm->process); compressed_filename = g_strconcat (filename, ".lz", NULL); } else if (is_mime_type (comm->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, "--"); fr_process_add_arg (comm->process, filename); fr_process_end_command (comm->process); compressed_filename = g_strconcat (filename, ".lzma", NULL); } else if (is_mime_type (comm->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, "--"); fr_process_add_arg (comm->process, filename); fr_process_end_command (comm->process); compressed_filename = g_strconcat (filename, ".xz", NULL); } else if (is_mime_type (comm->mime_type, "application/x-lzop")) { fr_process_begin_command (comm->process, "lzop"); fr_process_set_working_dir (comm->process, temp_dir); fr_process_add_arg (comm->process, "-fU"); fr_process_add_arg (comm->process, "--no-stdin"); fr_process_add_arg (comm->process, "--"); fr_process_add_arg (comm->process, filename); fr_process_end_command (comm->process); compressed_filename = g_strconcat (filename, ".lzo", NULL); } else if (is_mime_type (comm->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, filename); fr_process_end_command (comm->process); compressed_filename = g_strconcat (filename, ".rz", NULL); } /* copy compressed file to the dest dir */ fr_process_begin_command (comm->process, "cp"); fr_process_set_working_dir (comm->process, temp_dir); fr_process_add_arg (comm->process, "-f"); fr_process_add_arg (comm->process, "--"); fr_process_add_arg (comm->process, compressed_filename); fr_process_add_arg (comm->process, comm->filename); fr_process_end_command (comm->process); /* remove the temp dir */ fr_process_begin_command (comm->process, "rm"); fr_process_set_sticky (comm->process, TRUE); fr_process_add_arg (comm->process, "-rf"); fr_process_add_arg (comm->process, "--"); fr_process_add_arg (comm->process, temp_dir); fr_process_end_command (comm->process); g_free (compressed_filename); g_free (temp_file); g_free (temp_dir); }
static char * get_uncompressed_name (FrCommandTar *c_tar, const char *e_filename) { FrCommand *comm = FR_COMMAND (c_tar); char *new_name = g_strdup (e_filename); int l = strlen (new_name); if (is_mime_type (comm->mime_type, "application/x-compressed-tar")) { /* X.tgz --> X.tar * X.tar.gz --> X.tar */ if (file_extension_is (e_filename, ".tgz")) { new_name[l - 2] = 'a'; new_name[l - 1] = 'r'; } else if (file_extension_is (e_filename, ".tar.gz")) new_name[l - 3] = 0; } else if (is_mime_type (comm->mime_type, "application/x-bzip-compressed-tar")) { /* X.tbz2 --> X.tar * X.tar.bz2 --> X.tar */ if (file_extension_is (e_filename, ".tbz2")) { new_name[l - 3] = 'a'; new_name[l - 2] = 'r'; new_name[l - 1] = 0; } else if (file_extension_is (e_filename, ".tar.bz2")) new_name[l - 4] = 0; } else if (is_mime_type (comm->mime_type, "application/x-tarz")) { /* X.taz --> X.tar * X.tar.Z --> X.tar */ if (file_extension_is (e_filename, ".taz")) new_name[l - 1] = 'r'; else if (file_extension_is (e_filename, ".tar.Z")) new_name[l - 2] = 0; } else if (is_mime_type (comm->mime_type, "application/x-lrzip-compressed-tar")) { /* X.tlrz --> X.tar * X.tar.lrz --> X.tar */ if (file_extension_is (e_filename, ".tlrz")) { new_name[l - 3] = 'a'; new_name[l - 2] = 'r'; new_name[l - 1] = 0; } else if (file_extension_is (e_filename, ".tar.lrz")) new_name[l - 4] = 0; } else if (is_mime_type (comm->mime_type, "application/x-lzip-compressed-tar")) { /* X.tlz --> X.tar * X.tar.lz --> X.tar */ if (file_extension_is (e_filename, ".tlz")) { new_name[l - 2] = 'a'; new_name[l - 1] = 'r'; } else if (file_extension_is (e_filename, ".tar.lz")) new_name[l - 3] = 0; } else if (is_mime_type (comm->mime_type, "application/x-lzma-compressed-tar")) { /* X.tar.lzma --> X.tar * (There doesn't seem to be a shorthand suffix) */ if (file_extension_is (e_filename, ".tar.lzma")) new_name[l - 5] = 0; } else if (is_mime_type (comm->mime_type, "application/x-xz-compressed-tar")) { /* X.tar.xz --> X.tar * (There doesn't seem to be a shorthand suffix) */ if (file_extension_is (e_filename, ".tar.xz")) new_name[l - 3] = 0; } else if (is_mime_type (comm->mime_type, "application/x-lzop-compressed-tar")) { /* X.tzo --> X.tar * X.tar.lzo --> X.tar */ if (file_extension_is (e_filename, ".tzo")) { new_name[l - 2] = 'a'; new_name[l - 1] = 'r'; } else if (file_extension_is (e_filename, ".tar.lzo")) new_name[l - 4] = 0; } else if (is_mime_type (comm->mime_type, "application/x-7z-compressed-tar")) { /* X.tar.7z --> X.tar */ if (file_extension_is (e_filename, ".tar.7z")) new_name[l - 3] = 0; } return new_name; }
static void fr_command_tar_recompress (FrCommand *comm) { FrCommandTar *c_tar = FR_COMMAND_TAR (comm); char *new_name = NULL; if (can_create_a_compressed_archive (comm)) return; if (is_mime_type (comm->mime_type, "application/x-compressed-tar")) { fr_process_begin_command (comm->process, "gzip"); fr_process_set_sticky (comm->process, TRUE); fr_process_set_begin_func (comm->process, begin_func__recompress, comm); fr_process_set_continue_func (comm->process, gzip_continue_func, comm); switch (comm->compression) { case FR_COMPRESSION_VERY_FAST: fr_process_add_arg (comm->process, "-1"); break; case FR_COMPRESSION_FAST: fr_process_add_arg (comm->process, "-3"); break; case FR_COMPRESSION_NORMAL: fr_process_add_arg (comm->process, "-6"); break; case FR_COMPRESSION_MAXIMUM: fr_process_add_arg (comm->process, "-9"); break; } fr_process_add_arg (comm->process, "-f"); fr_process_add_arg (comm->process, c_tar->uncomp_filename); fr_process_end_command (comm->process); new_name = g_strconcat (c_tar->uncomp_filename, ".gz", NULL); } else if (is_mime_type (comm->mime_type, "application/x-bzip-compressed-tar")) { fr_process_begin_command (comm->process, "bzip2"); fr_process_set_sticky (comm->process, TRUE); fr_process_set_begin_func (comm->process, begin_func__recompress, comm); switch (comm->compression) { case FR_COMPRESSION_VERY_FAST: fr_process_add_arg (comm->process, "-1"); break; case FR_COMPRESSION_FAST: fr_process_add_arg (comm->process, "-3"); break; case FR_COMPRESSION_NORMAL: fr_process_add_arg (comm->process, "-6"); break; case FR_COMPRESSION_MAXIMUM: fr_process_add_arg (comm->process, "-9"); break; } fr_process_add_arg (comm->process, "-f"); fr_process_add_arg (comm->process, c_tar->uncomp_filename); fr_process_end_command (comm->process); new_name = g_strconcat (c_tar->uncomp_filename, ".bz2", NULL); } else if (is_mime_type (comm->mime_type, "application/x-tarz")) { fr_process_begin_command (comm->process, "compress"); fr_process_set_sticky (comm->process, TRUE); fr_process_set_begin_func (comm->process, begin_func__recompress, comm); fr_process_add_arg (comm->process, "-f"); fr_process_add_arg (comm->process, c_tar->uncomp_filename); fr_process_end_command (comm->process); new_name = g_strconcat (c_tar->uncomp_filename, ".Z", NULL); } else if (is_mime_type (comm->mime_type, "application/x-lrzip-compressed-tar")) { fr_process_begin_command (comm->process, "lrzip"); fr_process_set_sticky (comm->process, TRUE); fr_process_set_begin_func (comm->process, begin_func__recompress, comm); switch (comm->compression) { case FR_COMPRESSION_VERY_FAST: fr_process_add_arg (comm->process, "-l"); break; case FR_COMPRESSION_FAST: fr_process_add_arg (comm->process, "-g"); break; case FR_COMPRESSION_NORMAL: fr_process_add_arg (comm->process, "-b"); break; case FR_COMPRESSION_MAXIMUM: fr_process_add_arg (comm->process, "-z"); break; } fr_process_add_arg (comm->process, "-o"); fr_process_add_arg (comm->process, c_tar->uncomp_filename); fr_process_end_command (comm->process); new_name = g_strconcat (c_tar->uncomp_filename, ".lrz", NULL); } else if (is_mime_type (comm->mime_type, "application/x-lzip-compressed-tar")) { fr_process_begin_command (comm->process, "lzip"); fr_process_set_sticky (comm->process, TRUE); fr_process_set_begin_func (comm->process, begin_func__recompress, comm); switch (comm->compression) { case FR_COMPRESSION_VERY_FAST: fr_process_add_arg (comm->process, "-1"); break; case FR_COMPRESSION_FAST: fr_process_add_arg (comm->process, "-3"); break; case FR_COMPRESSION_NORMAL: fr_process_add_arg (comm->process, "-6"); break; case FR_COMPRESSION_MAXIMUM: fr_process_add_arg (comm->process, "-9"); break; } fr_process_add_arg (comm->process, "-f"); fr_process_add_arg (comm->process, c_tar->uncomp_filename); fr_process_end_command (comm->process); new_name = g_strconcat (c_tar->uncomp_filename, ".lz", NULL); } else if (is_mime_type (comm->mime_type, "application/x-lzma-compressed-tar")) { fr_process_begin_command (comm->process, "lzma"); fr_process_set_sticky (comm->process, TRUE); fr_process_set_begin_func (comm->process, begin_func__recompress, comm); switch (comm->compression) { case FR_COMPRESSION_VERY_FAST: fr_process_add_arg (comm->process, "-1"); break; case FR_COMPRESSION_FAST: fr_process_add_arg (comm->process, "-3"); break; case FR_COMPRESSION_NORMAL: fr_process_add_arg (comm->process, "-6"); break; case FR_COMPRESSION_MAXIMUM: fr_process_add_arg (comm->process, "-9"); break; } fr_process_add_arg (comm->process, "-f"); fr_process_add_arg (comm->process, c_tar->uncomp_filename); fr_process_end_command (comm->process); new_name = g_strconcat (c_tar->uncomp_filename, ".lzma", NULL); } else if (is_mime_type (comm->mime_type, "application/x-xz-compressed-tar")) { fr_process_begin_command (comm->process, "xz"); fr_process_set_sticky (comm->process, TRUE); fr_process_set_begin_func (comm->process, begin_func__recompress, comm); switch (comm->compression) { case FR_COMPRESSION_VERY_FAST: fr_process_add_arg (comm->process, "-1"); break; case FR_COMPRESSION_FAST: fr_process_add_arg (comm->process, "-3"); break; case FR_COMPRESSION_NORMAL: fr_process_add_arg (comm->process, "-6"); break; case FR_COMPRESSION_MAXIMUM: fr_process_add_arg (comm->process, "-9"); break; } fr_process_add_arg (comm->process, "-f"); fr_process_add_arg (comm->process, c_tar->uncomp_filename); fr_process_end_command (comm->process); new_name = g_strconcat (c_tar->uncomp_filename, ".xz", NULL); } else if (is_mime_type (comm->mime_type, "application/x-lzop-compressed-tar")) { fr_process_begin_command (comm->process, "lzop"); fr_process_set_sticky (comm->process, TRUE); fr_process_set_begin_func (comm->process, begin_func__recompress, comm); switch (comm->compression) { case FR_COMPRESSION_VERY_FAST: fr_process_add_arg (comm->process, "-1"); break; case FR_COMPRESSION_FAST: fr_process_add_arg (comm->process, "-3"); break; case FR_COMPRESSION_NORMAL: fr_process_add_arg (comm->process, "-6"); break; case FR_COMPRESSION_MAXIMUM: fr_process_add_arg (comm->process, "-9"); break; } fr_process_add_arg (comm->process, "-fU"); fr_process_add_arg (comm->process, "--no-stdin"); fr_process_add_arg (comm->process, c_tar->uncomp_filename); fr_process_end_command (comm->process); new_name = g_strconcat (c_tar->uncomp_filename, ".lzo", NULL); } else if (is_mime_type (comm->mime_type, "application/x-7z-compressed-tar")) { FrCommandTar *comm_tar = (FrCommandTar*) comm; fr_process_begin_command (comm->process, comm_tar->compress_command); fr_process_set_sticky (comm->process, TRUE); fr_process_set_begin_func (comm->process, begin_func__recompress, comm); switch (comm->compression) { case FR_COMPRESSION_VERY_FAST: fr_process_add_arg (comm->process, "-mx=1"); break; case FR_COMPRESSION_FAST: fr_process_add_arg (comm->process, "-mx=5"); break; case FR_COMPRESSION_NORMAL: fr_process_add_arg (comm->process, "-mx=5"); break; case FR_COMPRESSION_MAXIMUM: fr_process_add_arg (comm->process, "-mx=7"); break; } fr_process_add_arg (comm->process, "a"); fr_process_add_arg (comm->process, "-bd"); fr_process_add_arg (comm->process, "-y"); fr_process_add_arg (comm->process, "-l"); new_name = g_strconcat (c_tar->uncomp_filename, ".7z", NULL); fr_process_add_arg_concat (comm->process, new_name, NULL); fr_process_add_arg (comm->process, c_tar->uncomp_filename); fr_process_end_command (comm->process); /* remove the uncompressed tar */ fr_process_begin_command (comm->process, "rm"); fr_process_add_arg (comm->process, "-f"); fr_process_add_arg (comm->process, c_tar->uncomp_filename); fr_process_end_command (comm->process); } if (c_tar->name_modified) { char *tmp_dir; /* Restore original name. */ fr_process_begin_command (comm->process, "mv"); fr_process_set_sticky (comm->process, TRUE); fr_process_add_arg (comm->process, "-f"); fr_process_add_arg (comm->process, new_name); fr_process_add_arg (comm->process, comm->filename); fr_process_end_command (comm->process); tmp_dir = remove_level_from_path (new_name); fr_process_begin_command (comm->process, "rm"); fr_process_set_sticky (comm->process, TRUE); fr_process_add_arg (comm->process, "-fr"); fr_process_add_arg (comm->process, tmp_dir); fr_process_end_command (comm->process); g_free (tmp_dir); } g_free (new_name); g_free (c_tar->uncomp_filename); c_tar->uncomp_filename = NULL; }
static gboolean can_create_a_compressed_archive (FrCommand *comm) { return comm->creating_archive && ! is_mime_type (comm->mime_type, "application/x-7z-compressed-tar"); }