[Xfce4-commits] r26003 - xarchiver/trunk/src

Giuseppe Torelli colossus at xfce.org
Thu Aug 23 13:30:29 CEST 2007


Author: colossus
Date: 2007-08-23 11:30:28 +0000 (Thu, 23 Aug 2007)
New Revision: 26003

Modified:
   xarchiver/trunk/src/7zip.c
   xarchiver/trunk/src/archive.c
   xarchiver/trunk/src/archive.h
   xarchiver/trunk/src/arj.c
   xarchiver/trunk/src/extract_dialog.c
   xarchiver/trunk/src/extract_dialog.h
   xarchiver/trunk/src/rpm.c
   xarchiver/trunk/src/window.c
   xarchiver/trunk/src/window.h
Log:
Fixed seg-fault when using File->Close with RPM archives.
Moved function xa_create_temp_directory and xa_delete_temp_directory to archive.c.


Modified: xarchiver/trunk/src/7zip.c
===================================================================
--- xarchiver/trunk/src/7zip.c	2007-08-22 20:44:55 UTC (rev 26002)
+++ xarchiver/trunk/src/7zip.c	2007-08-23 11:30:28 UTC (rev 26003)
@@ -63,7 +63,6 @@
 	XEntry *entry;
 	gchar *filename;
 	gpointer item[5];
-	unsigned short int i = 0;
 	gint linesize = 0,n = 0,a = 0;
 	gboolean dir = FALSE;
 

Modified: xarchiver/trunk/src/archive.c
===================================================================
--- xarchiver/trunk/src/archive.c	2007-08-22 20:44:55 UTC (rev 26002)
+++ xarchiver/trunk/src/archive.c	2007-08-23 11:30:28 UTC (rev 26003)
@@ -23,6 +23,8 @@
 #include "mime.h"
 #include "support.h"
 #include "window.h"
+#include <sys/types.h>
+#include <dirent.h>
 
 static gboolean xa_process_output (GIOChannel *ioc, GIOCondition cond, gpointer data);
 
@@ -226,6 +228,92 @@
 	g_free (archive);
 }
 
+gboolean xa_delete_temp_directory (gchar *dir_name, gboolean flag)
+{
+	DIR *dirp;
+	struct dirent *dp;
+
+	chdir (dir_name);
+	dirp = opendir(dir_name);
+	if (dirp == NULL)
+		return FALSE;
+
+	while ((dp = readdir(dirp)) != NULL)
+	{
+		if (dp->d_name[0] != '.')
+	    	unlink (dp->d_name);
+	}
+	closedir(dirp);
+	rmdir (dir_name);
+	return TRUE;
+}
+
+gboolean xa_create_temp_directory ( gchar tmp_dir[] )
+{
+	strcpy (tmp_dir,"/tmp/xa-XXXXXX");
+	if ( mkdtemp ( tmp_dir ) == 0)
+	{
+		response = xa_show_message_dialog (GTK_WINDOW (MainWindow),GTK_DIALOG_MODAL,GTK_MESSAGE_ERROR,GTK_BUTTONS_OK,_("Can't create temporary directory in /tmp:"),g_strerror(errno) );
+		gtk_widget_set_sensitive (Stop_button, FALSE);
+		Update_StatusBar (_("Operation failed."));
+		return FALSE;
+	}
+	return TRUE;
+}
+
+gboolean xa_run_command ( gchar *command , gboolean watch_child_flag )
+{
+	gint current_page;
+	gint idx;
+	int status;
+	gboolean waiting = TRUE;
+	int ps;
+
+	current_page = gtk_notebook_get_current_page (notebook);
+	idx = xa_find_archive_index ( current_page );
+
+	archive[idx]->parse_output = 0;
+	xa_spawn_async_process ( archive[idx],command,0);
+	if ( archive[idx]->child_pid == 0 )
+		return FALSE;
+
+	gtk_widget_show (viewport2);
+	while (waiting)
+	{
+		ps = waitpid ( archive[idx]->child_pid, &status, WNOHANG);
+		if (ps < 0)
+			waiting = FALSE;
+		else
+			gtk_main_iteration_do (FALSE);
+	}
+	//TODO:
+	/*if (watch_child_flag)
+	{
+		xa_watch_child (archive[idx]->child_pid, status, archive[idx]);
+		return TRUE;
+	}
+	else
+	{
+		if ( WIFEXITED (status) )
+		{
+			if ( WEXITSTATUS (status) )
+			{
+				gtk_tooltips_disable ( pad_tooltip );
+				gtk_widget_hide ( pad_image );
+				gtk_widget_hide ( viewport2 );
+				response = xa_show_message_dialog (GTK_WINDOW	(MainWindow),GTK_DIALOG_MODAL,GTK_MESSAGE_QUESTION,GTK_BUTTONS_YES_NO,_("An error occurred while accessing the archive."),_("Do you want to view the command line output?") );
+				if (response == GTK_RESPONSE_YES)
+					xa_show_cmd_line_output (NULL);
+				archive[idx]->status = XA_ARCHIVESTATUS_IDLE;
+				gtk_widget_set_sensitive (Stop_button,FALSE);
+				Update_StatusBar ( _("Operation failed."));
+				return FALSE;
+			}
+		}
+	}*/
+	return TRUE;
+}
+
 gint xa_find_archive_index ( gint page_num )
 {
 	GtkWidget *scrollwindow;

Modified: xarchiver/trunk/src/archive.h
===================================================================
--- xarchiver/trunk/src/archive.h	2007-08-22 20:44:55 UTC (rev 26002)
+++ xarchiver/trunk/src/archive.h	2007-08-23 11:30:28 UTC (rev 26003)
@@ -119,6 +119,9 @@
 XArchive *xa_init_archive_structure ();
 void xa_clean_archive_structure ( XArchive *archive);
 gboolean xa_dump_child_error_messages (GIOChannel *ioc, GIOCondition cond, gpointer data);
+gboolean xa_create_temp_directory (gchar tmp_dir[]);
+gboolean xa_delete_temp_directory ( gchar *dir_name, gboolean flag);
+gboolean xa_run_command ( gchar *command , gboolean watch_child_flag );
 gint xa_find_archive_index (gint page_num);
 gint xa_get_new_archive_idx();
 XEntry *xa_alloc_memory_for_each_row ( guint nc,GType column_types[]);

Modified: xarchiver/trunk/src/arj.c
===================================================================
--- xarchiver/trunk/src/arj.c	2007-08-22 20:44:55 UTC (rev 26002)
+++ xarchiver/trunk/src/arj.c	2007-08-23 11:30:28 UTC (rev 26003)
@@ -56,7 +56,6 @@
 	XEntry *entry;
 	gpointer item[8];
 	unsigned int linesize,n,a;
-	gboolean dir = FALSE;
 
 	if (last_line)
 		return;

Modified: xarchiver/trunk/src/extract_dialog.c
===================================================================
--- xarchiver/trunk/src/extract_dialog.c	2007-08-22 20:44:55 UTC (rev 26002)
+++ xarchiver/trunk/src/extract_dialog.c	2007-08-23 11:30:28 UTC (rev 26003)
@@ -889,31 +889,6 @@
 	return result;
 }
 
-gboolean xa_delete_temp_directory ( gchar *dir_name, gboolean flag)
-{
-	gchar *command;
-	gboolean result;
-
-	chdir (dir_name);
-	command = g_strconcat ( "rm -rf ", dir_name , NULL );
-	result = xa_run_command (command , flag );
-	g_free (command);
-	return result;
-}
-
-gboolean xa_create_temp_directory ( gchar tmp_dir[] )
-{
-	strcpy (tmp_dir,"/tmp/xa-XXXXXX");
-	if ( mkdtemp ( tmp_dir ) == 0)
-	{
-		response = xa_show_message_dialog (GTK_WINDOW (MainWindow),GTK_DIALOG_MODAL,GTK_MESSAGE_ERROR,GTK_BUTTONS_OK,_("Can't create temporary directory in /tmp:"),g_strerror(errno) );
-		gtk_widget_set_sensitive (Stop_button, FALSE);
-		Update_StatusBar (_("Operation failed."));
-		return FALSE;
-	}
-	return TRUE;
-}
-
 void xa_choose_extraction_directory (GtkWidget *widget, gpointer data)
 {
 	Extract_dialog_data *dialog_data = data;

Modified: xarchiver/trunk/src/extract_dialog.h
===================================================================
--- xarchiver/trunk/src/extract_dialog.h	2007-08-22 20:44:55 UTC (rev 26002)
+++ xarchiver/trunk/src/extract_dialog.h	2007-08-23 11:30:28 UTC (rev 26003)
@@ -68,9 +68,7 @@
 void update_fresh_toggled_cb (GtkToggleButton *button, Extract_dialog_data *data);
 gchar *xa_parse_extract_dialog_options ( XArchive *archive , Extract_dialog_data *dialog_data, GtkTreeSelection *selection);
 gchar *xa_extract_single_files ( XArchive *archive , GString *files, gchar *path);
-gboolean xa_create_temp_directory (gchar tmp_dir[]);
 gboolean xa_extract_tar_without_directories ( gchar *string, gchar *escaped_path, gboolean overwrite, gboolean tar_touch, gchar *extract_path , gboolean cpio_flag);
-gboolean xa_delete_temp_directory ( gchar *dir_name, gboolean flag);
 void xa_choose_extraction_directory (GtkWidget *widget, gpointer data);
 #endif
 

Modified: xarchiver/trunk/src/rpm.c
===================================================================
--- xarchiver/trunk/src/rpm.c	2007-08-22 20:44:55 UTC (rev 26002)
+++ xarchiver/trunk/src/rpm.c	2007-08-23 11:30:28 UTC (rev 26003)
@@ -172,11 +172,13 @@
 	g_io_add_watch (input_ioc, G_IO_IN|G_IO_OUT|G_IO_PRI|G_IO_ERR|G_IO_HUP|G_IO_NVAL, WriteCPIOInput, NULL );
 	g_io_channel_set_encoding (input_ioc, NULL , NULL);
 
-	ioc_cpio = g_io_channel_new_file ( gzip , "r" , NULL );
+	ioc_cpio = g_io_channel_new_file (gzip , "r" , NULL);
+	g_free (gzip);
 	g_io_channel_set_encoding (ioc_cpio , NULL , NULL);
 	g_io_channel_set_flags ( ioc_cpio , G_IO_FLAG_NONBLOCK , NULL );
 
 	g_child_watch_add ( archive[idx]->child_pid, (GChildWatchFunc) xa_watch_child, archive[idx]);
+
   return NULL;
 }
 

Modified: xarchiver/trunk/src/window.c
===================================================================
--- xarchiver/trunk/src/window.c	2007-08-22 20:44:55 UTC (rev 26002)
+++ xarchiver/trunk/src/window.c	2007-08-23 11:30:28 UTC (rev 26003)
@@ -1637,59 +1637,6 @@
 	g_free (fullname);
 }
 
-gboolean xa_run_command ( gchar *command , gboolean watch_child_flag )
-{
-	gint current_page;
-	gint idx;
-	int status;
-	gboolean waiting = TRUE;
-	int ps;
-
-	current_page = gtk_notebook_get_current_page (notebook);
-	idx = xa_find_archive_index ( current_page );
-
-	archive[idx]->parse_output = 0;
-	xa_spawn_async_process ( archive[idx],command,0);
-	if ( archive[idx]->child_pid == 0 )
-		return FALSE;
-
-	gtk_widget_show (viewport2);
-	while (waiting)
-	{
-		ps = waitpid ( archive[idx]->child_pid, &status, WNOHANG);
-		if (ps < 0)
-			waiting = FALSE;
-		else
-			gtk_main_iteration_do (FALSE);
-	}
-	//TODO:
-	/*if (watch_child_flag)
-	{
-		xa_watch_child (archive[idx]->child_pid, status, archive[idx]);
-		return TRUE;
-	}
-	else
-	{
-		if ( WIFEXITED (status) )
-		{
-			if ( WEXITSTATUS (status) )
-			{
-				gtk_tooltips_disable ( pad_tooltip );
-				gtk_widget_hide ( pad_image );
-				gtk_widget_hide ( viewport2 );
-				response = xa_show_message_dialog (GTK_WINDOW	(MainWindow),GTK_DIALOG_MODAL,GTK_MESSAGE_QUESTION,GTK_BUTTONS_YES_NO,_("An error occurred while accessing the archive."),_("Do you want to view the command line output?") );
-				if (response == GTK_RESPONSE_YES)
-					xa_show_cmd_line_output (NULL);
-				archive[idx]->status = XA_ARCHIVESTATUS_IDLE;
-				gtk_widget_set_sensitive (Stop_button,FALSE);
-				Update_StatusBar ( _("Operation failed."));
-				return FALSE;
-			}
-		}
-	}*/
-	return TRUE;
-}
-
 void Update_StatusBar ( gchar *msg)
 {
     gtk_label_set_text (GTK_LABEL (info_label), msg);

Modified: xarchiver/trunk/src/window.h
===================================================================
--- xarchiver/trunk/src/window.h	2007-08-22 20:44:55 UTC (rev 26002)
+++ xarchiver/trunk/src/window.h	2007-08-23 11:30:28 UTC (rev 26003)
@@ -96,7 +96,6 @@
 void ConcatenateFileNames2 (gchar *filename , GString *data);
 void xa_cat_filenames (GtkTreeModel *model, GtkTreePath *treepath, GtkTreeIter *iter, GString *data);
 void xa_cat_filenames_basename (GtkTreeModel *model, GtkTreePath *treepath, GtkTreeIter *iter, GString *data);
-gboolean xa_run_command ( gchar *command , gboolean watch_child_flag );
 void xa_disable_delete_view_buttons (gboolean value);
 void Update_StatusBar (gchar *msg);
 



More information about the Xfce4-commits mailing list