Author: colossus
Date: 2008-10-22 07:22:09 +0000 (Wed, 22 Oct 2008)
New Revision: 28352
Modified:
xarchiver/trunk/TODO
xarchiver/trunk/src/add_dialog.c
xarchiver/trunk/src/bzip2.c
xarchiver/trunk/src/interface.c
xarchiver/trunk/src/main.c
xarchiver/trunk/src/string_utils.c
xarchiver/trunk/src/window.c
Log:
Fixed extraction of lzma/bzip2 compressed files.
Fixed missed deletion of socket file in /tmp when using the switches from
cmd-line.
Fixed crashes with cut/copy/paste operations.
Updated TODO file.
Modified: xarchiver/trunk/TODO
===================================================================
--- xarchiver/trunk/TODO 2008-10-21 21:23:05 UTC (rev 28351)
+++ xarchiver/trunk/TODO 2008-10-22 07:22:09 UTC (rev 28352)
@@ -1,3 +1,2 @@
- reduce the loading time when opening large archives.
- to fix bugs #4299 and #3235.
-- to fix crashes when using cut/copy/paste
Modified: xarchiver/trunk/src/add_dialog.c
===================================================================
--- xarchiver/trunk/src/add_dialog.c 2008-10-21 21:23:05 UTC (rev 28351)
+++ xarchiver/trunk/src/add_dialog.c 2008-10-22 07:22:09 UTC (rev 28352)
@@ -434,7 +434,7 @@
void xa_execute_add_commands (XArchive *archive,GSList *list,gchar
*compression_string)
{
gchar *new_path = NULL;
- gchar *esc,*esc2;
+ gchar *esc,*esc2,*basename;
gboolean result = FALSE;
GString *items;
gchar *command = NULL;
@@ -467,7 +467,9 @@
g_string_append_c(items,' ');
slist = slist->next;
}
- command = g_strconcat ("cp -r ",items->str,"
",new_path,NULL);
+ basename = g_path_get_basename(items->str);
+ command = g_strconcat ("cp -f ",basename,"
",new_path,NULL);
+ g_free(basename);
g_free(new_path);
g_string_free(items,TRUE);
cmd_list = g_slist_append(cmd_list,command);
@@ -479,9 +481,9 @@
if (archive->working_dir != NULL)
{
g_free(archive->working_dir);
- archive->working_dir = NULL;
+ archive->working_dir = g_path_get_dirname(list->data);
}
- archive->working_dir = g_path_get_dirname(list->data);
+
while (list)
{
xa_recurse_local_directory((gchar*)list->data,&dirlist,archive->add_recurse,archive->type);
Modified: xarchiver/trunk/src/bzip2.c
===================================================================
--- xarchiver/trunk/src/bzip2.c 2008-10-21 21:23:05 UTC (rev 28351)
+++ xarchiver/trunk/src/bzip2.c 2008-10-22 07:22:09 UTC (rev 28352)
@@ -33,7 +33,7 @@
gchar *_filename;
gpointer item[2];
gboolean result;
- int len = 0;
+ gint len = 0;
if (g_str_has_suffix(archive->escaped_path,".tar.bz2") ||
g_str_has_suffix (archive->escaped_path,".tar.bz")
|| g_str_has_suffix ( archive->escaped_path , ".tbz") ||
g_str_has_suffix (archive->escaped_path,".tbz2") )
@@ -66,11 +66,13 @@
{
archive->format = "BZIP2";
executable = "bzip2 ";
+ len = 4;
}
else
{
archive->format = "LZMA";
executable = "lzma ";
+ len = 5;
}
archive->can_add = archive->has_test = archive->has_sfx = FALSE;
archive->has_properties = archive->can_extract = TRUE;
@@ -108,10 +110,6 @@
/* and let's get its uncompressed file size */
dot = strrchr(_filename,'.');
- if (strcmp(executable,"lzma") == 0)
- len = 5;
- else
- len = 4;
if (_filename || G_LIKELY(dot))
{
_filename++;
@@ -174,9 +172,20 @@
gboolean lzma_bzip2_extract (XArchive *archive,GSList *dummy)
{
GSList *list = NULL;
- gchar *command = NULL,*filename = NULL, *dot = NULL, *filename_noext =
NULL;
+ gchar *command = NULL,*executable,*filename = NULL, *dot = NULL,
*filename_noext = NULL;
gboolean result = FALSE;
+ gint len = 0;
+ if (archive->type == XARCHIVETYPE_BZIP2)
+ {
+ executable = "bzip2 ";
+ len = 4;
+ }
+ else
+ {
+ executable = "lzma ";
+ len = 5;
+ }
filename = xa_remove_path_from_archive_name(archive->escaped_path);
dot = strrchr(filename,'.');
if (G_LIKELY(dot))
@@ -187,20 +196,9 @@
else
filename_noext = filename;
- if (archive->tmp == NULL)
- result = xa_create_temp_directory(archive);
-
- dot = g_strconcat(archive->tmp,"/",filename_noext,NULL);
+ command = g_strconcat("sh -c \"",executable, "
",archive->escaped_path," -dc >
",archive->extraction_path,"/",filename_noext,"\"",NULL);
g_free(filename_noext);
-
- if (strcmp(archive->tmp,archive->extraction_path) != 0)
- {
- command = g_strconcat("cp -f ",dot,"
",archive->extraction_path,NULL);
- list = g_slist_append(list,command);
- result = xa_run_command (archive,list);
- }
- else
- result = TRUE;
- g_free(dot);
+ list = g_slist_append(list,command);
+ result = xa_run_command (archive,list);
return result;
}
Modified: xarchiver/trunk/src/interface.c
===================================================================
--- xarchiver/trunk/src/interface.c 2008-10-21 21:23:05 UTC (rev 28351)
+++ xarchiver/trunk/src/interface.c 2008-10-22 07:22:09 UTC (rev 28352)
@@ -1470,7 +1470,7 @@
{
GtkTreeModel *model;
GtkTreePath *path;
- static GtkTreePath *lastpath;
+ static GtkTreePath *lastpath;
model = gtk_tree_view_get_model(GTK_TREE_VIEW(widget));
gtk_tree_view_get_dest_row_at_pos (GTK_TREE_VIEW
(widget),x,y,&path,NULL);
Modified: xarchiver/trunk/src/main.c
===================================================================
--- xarchiver/trunk/src/main.c 2008-10-21 21:23:05 UTC (rev 28351)
+++ xarchiver/trunk/src/main.c 2008-10-22 07:22:09 UTC (rev 28352)
@@ -228,6 +228,9 @@
}
if (archive != NULL)
xa_clean_archive_structure (archive);
+ #ifdef HAVE_SOCKET
+ socket_finalize();
+ #endif
}
else
{
Modified: xarchiver/trunk/src/string_utils.c
===================================================================
--- xarchiver/trunk/src/string_utils.c 2008-10-21 21:23:05 UTC (rev 28351)
+++ xarchiver/trunk/src/string_utils.c 2008-10-22 07:22:09 UTC (rev 28352)
@@ -244,6 +244,8 @@
gchar *slash;
int len = 0;
+ if (working_dir == NULL)
+ return filename;
len = strlen(working_dir)+1;
slash = g_strrstr(filename,"/");
if (slash == NULL || ! g_path_is_absolute(filename))
Modified: xarchiver/trunk/src/window.c
===================================================================
--- xarchiver/trunk/src/window.c 2008-10-21 21:23:05 UTC (rev 28351)
+++ xarchiver/trunk/src/window.c 2008-10-22 07:22:09 UTC (rev 28352)
@@ -2334,9 +2334,6 @@
GtkSelectionData *selection;
XAClipboard *paste_data;
GSList *list = NULL;
- gchar *dummy_ex_path = NULL;
- gboolean result = FALSE;
- gboolean overwrite;
current_page = gtk_notebook_get_current_page(notebook);
idx = xa_find_archive_index(current_page);
@@ -2348,39 +2345,10 @@
paste_data =
xa_get_paste_data_from_clipboard_selection((char*)selection->data);
gtk_selection_data_free (selection);
- /* Let's extract the selected files to the archive tmp dir */
- if (paste_data->cut_copy_archive->has_passwd)
- {
- if(xa_create_password_dialog(paste_data->cut_copy_archive) ==
NULL)
- return;
- }
- if (paste_data->cut_copy_archive->extraction_path)
- {
- dummy_ex_path =
g_strdup(paste_data->cut_copy_archive->extraction_path);
- g_free(paste_data->cut_copy_archive->extraction_path);
- }
- xa_create_temp_directory(paste_data->cut_copy_archive);
- paste_data->cut_copy_archive->extraction_path =
g_strdup(paste_data->cut_copy_archive->tmp);
+ /* Let's add the already extracted files in the tmp dir to the current
archive dir */
list = xa_slist_copy(paste_data->files);
- overwrite = paste_data->cut_copy_archive->overwrite;
- paste_data->cut_copy_archive->overwrite = TRUE;
- result = (*paste_data->cut_copy_archive->extract)
(paste_data->cut_copy_archive,list);
- paste_data->cut_copy_archive->overwrite = overwrite;
-
- g_free(paste_data->cut_copy_archive->extraction_path);
- paste_data->cut_copy_archive->extraction_path = NULL;
- if (dummy_ex_path)
- {
- paste_data->cut_copy_archive->extraction_path =
g_strdup(dummy_ex_path);
- g_free(dummy_ex_path);
- }
- if (result == FALSE)
- return;
-
- /* Now let's add the extracted files in the tmp dir to the current
archive dir */
- list = xa_slist_copy(paste_data->files);
chdir (paste_data->cut_copy_archive->tmp);
- //TODO put the above in archive[idx]->tmp
+
xa_execute_add_commands(archive[idx],list,NULL);
if (archive[idx]->status == XA_ARCHIVESTATUS_ERROR)
return;
@@ -2398,6 +2366,9 @@
GtkClipboard *clipboard;
XAClipboard *clipboard_data = NULL;
GSList *files = NULL;
+ gchar *dummy_ex_path = NULL;
+ gboolean result = FALSE;
+ gboolean overwrite;
GtkTreeSelection *selection;
GtkTargetEntry targets[] =
{
@@ -2412,11 +2383,38 @@
if (clipboard_data == NULL)
return;
- clipboard_data->files = files;
+ clipboard_data->files = xa_slist_copy(files);
clipboard_data->mode = mode;
gtk_clipboard_set_with_data (clipboard,targets,G_N_ELEMENTS
(targets),xa_clipboard_get,xa_clipboard_clear,(gpointer)archive);
archive->clipboard_data = clipboard_data;
gtk_widget_set_sensitive(paste,TRUE);
+
+ /* Let's extract the selected files to the archive tmp dir */
+ if (archive->has_passwd)
+ {
+ if(xa_create_password_dialog(archive) == NULL)
+ return;
+ }
+ if (archive->extraction_path)
+ {
+ dummy_ex_path = g_strdup(archive->extraction_path);
+ g_free(archive->extraction_path);
+ }
+ xa_create_temp_directory(archive);
+ archive->extraction_path = g_strdup(archive->tmp);
+ overwrite = archive->overwrite;
+ archive->overwrite = TRUE;
+
+ result = (*archive->extract) (archive,files);
+ archive->overwrite = overwrite;
+ g_free(archive->extraction_path);
+
+ archive->extraction_path = NULL;
+ if (dummy_ex_path)
+ {
+ archive->extraction_path = g_strdup(dummy_ex_path);
+ g_free(dummy_ex_path);
+ }
}
XAClipboard *xa_get_paste_data_from_clipboard_selection(const char *data)
_______________________________________________
Xfce4-commits mailing list
[email protected]
http://foo-projects.org/mailman/listinfo/xfce4-commits