static void fr_command_zip_extract (FrCommand *comm, const char *from_file, GList *file_list, const char *dest_dir, gboolean overwrite, gboolean skip_older, gboolean junk_paths) { GList *scan; fr_process_set_out_line_func (FR_COMMAND (comm)->process, process_line__common, comm); fr_process_begin_command (comm->process, "unzip"); if (dest_dir != NULL) { fr_process_add_arg (comm->process, "-d"); fr_process_add_arg (comm->process, dest_dir); } if (overwrite) fr_process_add_arg (comm->process, "-o"); else fr_process_add_arg (comm->process, "-n"); if (skip_older) fr_process_add_arg (comm->process, "-u"); if (junk_paths) fr_process_add_arg (comm->process, "-j"); add_password_arg (comm, comm->password); fr_process_add_arg (comm->process, "--"); fr_process_add_arg (comm->process, comm->filename); for (scan = file_list; scan; scan = scan->next) { char *escaped; escaped = escape_str (scan->data, ZIP_SPECIAL_CHARACTERS); fr_process_add_arg (comm->process, escaped); g_free (escaped); } fr_process_end_command (comm->process); }
static void fr_command_unstuff_extract (FrCommand *comm, const char *from_file, GList *file_list, const char *dest_dir, gboolean overwrite, gboolean skip_older, gboolean junk_paths) { #if 0 GList *scan; #endif char *filename; fr_process_begin_command (comm->process, "unstuff"); if (dest_dir != NULL) { char *dest_dir_dots; char *arg; dest_dir_dots = unstuff_is_shit_with_filenames (dest_dir); arg = g_strdup_printf ("-d=%s", dest_dir_dots); fr_process_add_arg (comm->process, arg); FR_COMMAND_UNSTUFF (comm)->target_dir = NULL; g_free (arg); g_free (dest_dir_dots); } fr_process_add_arg (comm->process, "--trace"); /* unstuff doesn't like file paths starting with /, that's so s***e */ filename = unstuff_is_shit_with_filenames (comm->filename); fr_process_add_arg (comm->process, filename); g_free (filename); /* FIXME it is not possible to unpack only some files */ #if 0 for (scan = file_list; scan; scan = scan->next) fr_process_add_arg (comm->process, scan->data); #endif fr_process_end_command (comm->process); }
static void fr_command_arj_extract (FrCommand *comm, const char *from_file, GList *file_list, const char *dest_dir, gboolean overwrite, gboolean skip_older, gboolean junk_paths) { GList *scan; fr_process_begin_command (comm->process, "arj"); if (junk_paths) fr_process_add_arg (comm->process, "e"); else fr_process_add_arg (comm->process, "x"); if (dest_dir != NULL) fr_process_add_arg_concat (comm->process, "-ht/", dest_dir, NULL); if (! overwrite) fr_process_add_arg (comm->process, "-n"); if (skip_older) fr_process_add_arg (comm->process, "-u"); if (comm->password != NULL) fr_process_add_arg_concat (comm->process, "-g/", comm->password, NULL); else fr_process_add_arg (comm->process, "-g/"); fr_process_add_arg (comm->process, "-i"); fr_process_add_arg (comm->process, "-y"); fr_process_add_arg (comm->process, "-"); fr_process_add_arg (comm->process, comm->filename); for (scan = file_list; scan; scan = scan->next) fr_process_add_arg (comm->process, scan->data); fr_process_end_command (comm->process); }
static void fr_command_iso_extract (FrCommand *comm, const char *from_file, GList *file_list, const char *dest_dir, gboolean overwrite, gboolean skip_older, gboolean junk_paths) { GList *scan; for (scan = file_list; scan; scan = scan->next) { char *path = scan->data; const char *filename; char *file_dir; char *temp_dest_dir = NULL; filename = file_name_from_path (path); file_dir = remove_level_from_path (path); if ((file_dir != NULL) && (strcmp (file_dir, "/") != 0)) temp_dest_dir = g_build_filename (dest_dir, file_dir, NULL); else temp_dest_dir = g_strdup (dest_dir); g_free (file_dir); if (temp_dest_dir == NULL) continue; make_directory_tree_from_path (temp_dest_dir, 0700, NULL); fr_process_begin_command (comm->process, "sh"); fr_process_set_working_dir (comm->process, temp_dest_dir); fr_process_add_arg (comm->process, SHDIR "isoinfo.sh"); fr_process_add_arg (comm->process, "-i"); fr_process_add_arg (comm->process, comm->filename); fr_process_add_arg (comm->process, "-x"); fr_process_add_arg (comm->process, path); fr_process_add_arg (comm->process, filename); fr_process_end_command (comm->process); g_free (temp_dest_dir); } }
static void fr_command_arj_delete (FrCommand *comm, const char *from_file, GList *file_list) { GList *scan; fr_process_begin_command (comm->process, "arj"); fr_process_add_arg (comm->process, "d"); fr_process_add_arg (comm->process, "-i"); fr_process_add_arg (comm->process, "-y"); fr_process_add_arg (comm->process, "-"); fr_process_add_arg (comm->process, comm->filename); for (scan = file_list; scan; scan = scan->next) fr_process_add_arg (comm->process, scan->data); fr_process_end_command (comm->process); }
static gboolean fr_command_unarchiver_list (FrCommand *comm) { FrCommandUnarchiver *unar_comm = FR_COMMAND_UNARCHIVER (comm); _g_object_unref (unar_comm->stream); unar_comm->stream = g_memory_input_stream_new (); fr_process_set_out_line_func (comm->process, process_line, comm); fr_process_begin_command (comm->process, "lsar"); fr_process_set_end_func (comm->process, list_command_completed, comm); fr_process_add_arg (comm->process, "-j"); if ((FR_ARCHIVE (comm)->password != NULL) && (FR_ARCHIVE (comm)->password[0] != '\0')) fr_process_add_arg_concat (comm->process, "-password=", FR_ARCHIVE (comm)->password, NULL); fr_process_add_arg (comm->process, comm->filename); fr_process_end_command (comm->process); return TRUE; }
static void fr_command_unarchiver_extract (FrCommand *comm, const char *from_file, GList *file_list, const char *dest_dir, gboolean overwrite, gboolean skip_older, gboolean junk_paths) { FrCommandUnarchiver *unar_comm = FR_COMMAND_UNARCHIVER (comm); GList *scan; unar_comm->n_line = 0; fr_process_use_standard_locale (comm->process, TRUE); fr_process_set_out_line_func (comm->process, process_line__extract, comm); fr_process_begin_command (comm->process, "unar"); if (overwrite) fr_process_add_arg (comm->process, "-f"); else fr_process_add_arg (comm->process, "-s"); fr_process_add_arg (comm->process, "-D"); if ((FR_ARCHIVE (comm)->password != NULL) && (FR_ARCHIVE (comm)->password[0] != '\0')) fr_process_add_arg_concat (comm->process, "-password="******"-output-directory=", dest_dir, NULL); fr_process_add_arg (comm->process, comm->filename); for (scan = file_list; scan; scan = scan->next) fr_process_add_arg (comm->process, scan->data); fr_process_end_command (comm->process); }
static void fr_command_lha_add (FrCommand *comm, const char *from_file, GList *file_list, const char *base_dir, gboolean update, gboolean recursive) { GList *scan; fr_process_begin_command (comm->process, "lha"); if (base_dir != NULL) fr_process_set_working_dir (comm->process, base_dir); if (update) fr_process_add_arg (comm->process, "u"); else fr_process_add_arg (comm->process, "a"); fr_process_add_arg (comm->process, comm->filename); for (scan = file_list; scan; scan = scan->next) fr_process_add_arg (comm->process, scan->data); fr_process_end_command (comm->process); }
static void fr_command_lrzip_extract (FrCommand *comm, const char *from_file, GList *file_list, const char *dest_dir, gboolean overwrite, gboolean skip_older, gboolean junk_paths) { fr_process_begin_command (comm->process, "lrzip"); fr_process_add_arg (comm->process, "-d"); if (dest_dir != NULL) { fr_process_add_arg (comm->process, "-O"); fr_process_add_arg (comm->process, dest_dir); } if (overwrite) fr_process_add_arg (comm->process, "-f"); fr_process_add_arg (comm->process, comm->filename); fr_process_end_command (comm->process); }
static void fr_command_ar_extract (FrCommand *comm, const char *from_file, GList *file_list, const char *dest_dir, gboolean overwrite, gboolean skip_older, gboolean junk_paths) { GList *scan; fr_process_begin_command (comm->process, "ar"); if (dest_dir != NULL) fr_process_set_working_dir (comm->process, dest_dir); fr_process_add_arg (comm->process, "x"); fr_process_add_arg (comm->process, comm->filename); for (scan = file_list; scan; scan = scan->next) fr_process_add_arg (comm->process, scan->data); fr_process_end_command (comm->process); }
static void fr_command_cpio_extract (FrCommand *comm, const char *from_file, GList *file_list, const char *dest_dir, gboolean overwrite, gboolean skip_older, gboolean junk_paths) { GList *scan; GString *cmd; fr_process_begin_command (comm->process, "sh"); if (dest_dir != NULL) fr_process_set_working_dir (comm->process, dest_dir); fr_process_add_arg (comm->process, "-c"); cmd = g_string_new ("cpio -idu --no-absolute-filenames "); for (scan = file_list; scan; scan = scan->next) { char *filepath = scan->data; char *filename; if (filepath[0] == '/') filename = g_shell_quote (filepath + 1); else filename = g_shell_quote (filepath); g_string_append (cmd, filename); g_string_append (cmd, " "); g_free (filename); } g_string_append (cmd, " < "); g_string_append (cmd, comm->e_filename); fr_process_add_arg (comm->process, cmd->str); g_string_free (cmd, TRUE); fr_process_end_command (comm->process); }
static void fr_command_tar_extract (FRCommand *comm, GList *file_list, char *dest_dir, gboolean overwrite, gboolean skip_older, gboolean junk_paths) { GList *scan; fr_process_begin_command (comm->process, "tar"); fr_process_add_arg (comm->process, "-xf"); fr_process_add_arg (comm->process, comm->filename); add_compress_arg (comm); if (dest_dir != NULL) { fr_process_add_arg (comm->process, "-C"); fr_process_add_arg (comm->process, dest_dir); } /* if (! overwrite) fr_process_add_arg (comm->process, "-k"); */ for (scan = file_list; scan; scan = scan->next) { gchar *escaped = escape_path(scan->data); if (escaped) { fr_process_add_arg (comm->process, escaped); g_free(escaped); } } fr_process_end_command (comm->process); }
static void fr_command_lha_extract (FrCommand *comm, const char *from_file, GList *file_list, const char *dest_dir, gboolean overwrite, gboolean skip_older, gboolean junk_paths) { GList *scan; char options[5]; int i = 0; fr_process_begin_command (comm->process, "lha"); if (dest_dir != NULL) fr_process_set_working_dir (comm->process, dest_dir); options[i++] = 'x'; options[i++] = 'f'; /* Always overwrite. * The overwrite option is handled in * fr_archive_extract, * this is because lha asks the user whether he * wants to overwrite a file. */ if (junk_paths) options[i++] = 'i'; options[i++] = 0; fr_process_add_arg (comm->process, options); fr_process_add_arg (comm->process, comm->filename); for (scan = file_list; scan; scan = scan->next) fr_process_add_arg (comm->process, scan->data); fr_process_end_command (comm->process); }
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_jar_add (FrCommand *comm, const char *from_file, GList *file_list, const char *base_dir, gboolean update, gboolean recursive) { FrProcess *proc = comm->process; GList *zip_list = NULL, *jardata_list = NULL, *jar_list = NULL; GList *scan; char *tmp_dir; for (scan = file_list; scan; scan = scan->next) { char *filename = scan->data; char *path = build_uri (base_dir, filename, NULL); char *package = NULL; if (file_extension_is (filename, ".java")) package = get_package_name_from_java_file (path); else if (file_extension_is (filename, ".class")) package = get_package_name_from_class_file (path); if ((package == NULL) || (strlen (package) == 0)) zip_list = g_list_append (zip_list, g_strdup (filename)); else { JarData *newdata = g_new0 (JarData, 1); newdata->package_minus_one_level = remove_level_from_path (package); newdata->link_name = g_strdup (file_name_from_path (package)); newdata->rel_path = remove_level_from_path (filename); newdata->filename = g_strdup (file_name_from_path (filename)); jardata_list = g_list_append (jardata_list, newdata); } g_free (package); g_free (path); } tmp_dir = get_temp_work_dir (NULL); for (scan = jardata_list; scan ; scan = scan->next) { JarData *jdata = scan->data; char *pack_path; char *old_link; char *link_name; int retval; pack_path = build_uri (tmp_dir, jdata->package_minus_one_level, NULL); if (! make_directory_tree_from_path (pack_path, 0755, NULL)) { g_free (pack_path); continue; } old_link = build_uri (base_dir, jdata->rel_path, NULL); link_name = g_build_filename (pack_path, jdata->link_name, NULL); retval = symlink (old_link, link_name); if ((retval != -1) || (errno == EEXIST)) jar_list = g_list_append (jar_list, g_build_filename (jdata->package_minus_one_level, jdata->link_name, jdata->filename, NULL)); g_free (link_name); g_free (old_link); g_free (pack_path); } if (zip_list != NULL) parent_class->add (comm, NULL, zip_list, base_dir, update, FALSE); if (jar_list != NULL) parent_class->add (comm, NULL, jar_list, tmp_dir, update, FALSE); fr_process_begin_command (proc, "rm"); fr_process_set_working_dir (proc, "/"); fr_process_add_arg (proc, "-r"); fr_process_add_arg (proc, "-f"); fr_process_add_arg (proc, tmp_dir); fr_process_end_command (proc); fr_process_set_sticky (proc, TRUE); for (scan = jardata_list; scan ; scan = scan->next) { JarData *jdata = scan->data; g_free (jdata->filename); g_free (jdata->package_minus_one_level); g_free (jdata->link_name); g_free (jdata->rel_path); } path_list_free (jardata_list); path_list_free (jar_list); path_list_free (zip_list); g_free (tmp_dir); }
static gchar* uncompress (FRCommand *comm, gboolean *name_modified) { gchar *new_name; gint l; FRCommandTar *comm_tar = FR_COMMAND_TAR (comm); *name_modified = FALSE; new_name = g_strdup (comm->filename); l = strlen (new_name); switch (comm_tar->compress_prog) { case FR_COMPRESS_PROGRAM_NONE: break; case FR_COMPRESS_PROGRAM_GZIP: if (isfile (comm->filename)) { fr_process_begin_command (comm->process, "gzip"); fr_process_add_arg (comm->process, "-d"); fr_process_add_arg (comm->process, comm->filename); fr_process_end_command (comm->process); } /* X.tgz --> X.tar * X.tar.gz --> X.tar */ if (fileutil_extension_is (comm->filename, ".tgz")) { *name_modified = TRUE; new_name[l - 2] = 'a'; new_name[l - 1] = 'r'; } else if (fileutil_extension_is (comm->filename, ".tar.gz")) new_name[l - 3] = 0; break; case FR_COMPRESS_PROGRAM_BZIP: if (isfile (comm->filename)) { fr_process_begin_command (comm->process, "bzip"); fr_process_add_arg (comm->process, "-d"); fr_process_add_arg (comm->process, comm->filename); fr_process_end_command (comm->process); } /* Remove the .bz extension. */ new_name[l - 3] = 0; break; case FR_COMPRESS_PROGRAM_BZIP2: if (isfile (comm->filename)) { fr_process_begin_command (comm->process, "bzip2"); fr_process_add_arg (comm->process, "-d"); fr_process_add_arg (comm->process, comm->filename); fr_process_end_command (comm->process); } /* Remove the .bz2 extension. */ new_name[l - 4] = 0; break; case FR_COMPRESS_PROGRAM_COMPRESS: if (isfile (comm->filename)) { fr_process_begin_command (comm->process, "uncompress"); fr_process_add_arg (comm->process, "-f"); fr_process_add_arg (comm->process, comm->filename); fr_process_end_command (comm->process); } /* X.taz --> X.tar * X.tar.Z --> X.tar */ if (fileutil_extension_is (comm->filename, ".taz")) { *name_modified = TRUE; new_name[l - 1] = 'r'; } else if (fileutil_extension_is (comm->filename, ".tar.Z")) new_name[l - 2] = 0; break; case FR_COMPRESS_PROGRAM_LZO: if (isfile (comm->filename)) { fr_process_begin_command (comm->process, "lzop"); fr_process_add_arg (comm->process, "-d"); fr_process_add_arg (comm->process, comm->filename); fr_process_end_command (comm->process); } /* X.tzo --> X.tar * X.tar.lzo --> X.tar */ if (fileutil_extension_is (comm->filename, ".tzo")) { *name_modified = TRUE; new_name[l - 2] = 'a'; new_name[l - 1] = 'r'; } else if (fileutil_extension_is (comm->filename, ".tar.lzo")) new_name[l - 4] = 0; break; } return new_name; }
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 void fr_command_tar_recompress (FrCommand *comm) { FrCommandTar *c_tar = FR_COMMAND_TAR (comm); FrArchive *archive = FR_ARCHIVE (comm); char *new_name = NULL; if (can_create_a_compressed_archive (comm)) return; if (_g_mime_type_matches (archive->mime_type, "application/x-compressed-tar")) { fr_process_begin_command (comm->process, "gzip"); fr_process_set_begin_func (comm->process, begin_func__recompress, comm); fr_process_set_continue_func (comm->process, gzip_continue_func, comm); switch (archive->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 (_g_mime_type_matches (archive->mime_type, "application/x-bzip-compressed-tar")) { fr_process_begin_command (comm->process, "bzip2"); fr_process_set_begin_func (comm->process, begin_func__recompress, comm); switch (archive->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 (_g_mime_type_matches (archive->mime_type, "application/x-tarz")) { fr_process_begin_command (comm->process, "compress"); 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 (_g_mime_type_matches (archive->mime_type, "application/x-lrzip-compressed-tar")) { fr_process_begin_command (comm->process, "lrzip"); fr_process_set_begin_func (comm->process, begin_func__recompress, comm); switch (archive->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 (_g_mime_type_matches (archive->mime_type, "application/x-lzip-compressed-tar")) { fr_process_begin_command (comm->process, "lzip"); fr_process_set_begin_func (comm->process, begin_func__recompress, comm); switch (archive->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 (_g_mime_type_matches (archive->mime_type, "application/x-lzma-compressed-tar")) { fr_process_begin_command (comm->process, "lzma"); fr_process_set_begin_func (comm->process, begin_func__recompress, comm); switch (archive->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 (_g_mime_type_matches (archive->mime_type, "application/x-xz-compressed-tar")) { fr_process_begin_command (comm->process, "xz"); fr_process_set_begin_func (comm->process, begin_func__recompress, comm); switch (archive->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 (_g_mime_type_matches (archive->mime_type, "application/x-lzop-compressed-tar")) { fr_process_begin_command (comm->process, "lzop"); fr_process_set_begin_func (comm->process, begin_func__recompress, comm); switch (archive->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 (_g_mime_type_matches (archive->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_begin_func (comm->process, begin_func__recompress, comm); switch (archive->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_add_arg (comm->process, "-f"); fr_process_add_arg (comm->process, "--"); fr_process_add_arg (comm->process, new_name); fr_process_add_arg (comm->process, comm->filename); fr_process_end_command (comm->process); tmp_dir = _g_path_remove_level (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; }