Author: colossus
Date: 2008-08-27 12:51:21 +0000 (Wed, 27 Aug 2008)
New Revision: 27597

Modified:
   xarchiver/trunk/src/add_dialog.c
   xarchiver/trunk/src/string_utils.c
   xarchiver/trunk/src/string_utils.h
   xarchiver/trunk/src/tar.c
   xarchiver/trunk/src/window.c
Log:
Fixed bug #4324 and bug 1721416 on sourceforge bug tracking page.


Modified: xarchiver/trunk/src/add_dialog.c
===================================================================
--- xarchiver/trunk/src/add_dialog.c    2008-08-27 11:53:29 UTC (rev 27596)
+++ xarchiver/trunk/src/add_dialog.c    2008-08-27 12:51:21 UTC (rev 27597)
@@ -416,8 +416,12 @@
 
                        if (!archive->full_path)
                        {
-                               gchar *current_dir = 
g_path_get_dirname(list->data);
-                               archive->working_dir = current_dir;
+                               if (archive->working_dir != NULL)
+                               {
+                                       g_free(archive->working_dir);
+                                       archive->working_dir = NULL;
+                               }
+                               archive->working_dir = 
g_path_get_dirname(list->data);
                        }
                        xa_execute_add_commands 
(archive,list,compression_string);
                        if (compression_string != NULL)

Modified: xarchiver/trunk/src/string_utils.c
===================================================================
--- xarchiver/trunk/src/string_utils.c  2008-08-27 11:53:29 UTC (rev 27596)
+++ xarchiver/trunk/src/string_utils.c  2008-08-27 12:51:21 UTC (rev 27597)
@@ -231,24 +231,17 @@
        return xa_escape_common_chars (filename , meta_chars, '\\', 0);
 }
 
-gchar *xa_strip_directories_except_last(gchar *filename)
+gchar *xa_strip_current_working_dir_from_path(gchar *working_dir,gchar 
*filename)
 {
        gchar *basename,*slash;
        int len = 0;
 
-       len = strlen(filename);
+       len = strlen(working_dir)+1;
        slash = g_strrstr(filename,"/");
        if (slash == NULL)
                return g_strdup(filename);
 
-       while (len)
-       {
-               slash--;
-               if (*slash == '/')
-                       break;
-               len--;
-       }
-       basename = g_strdup(++slash);
+       basename = g_strndup(filename+len,strlen(filename) - len);
        return basename;
 }
 
@@ -263,7 +256,7 @@
                {
                        if (archive->full_path == 0)
                        {
-                               basename = 
xa_strip_directories_except_last(slist->data);
+                               basename = 
xa_strip_current_working_dir_from_path(archive->working_dir,slist->data);
                                name = 
g_strconcat(archive->location_entry_path,basename,NULL);
                                g_free(basename);
                                e_filename = 
xa_escape_filename(name,"$'`\"\\!?* ()[]&|:;<>#");
@@ -284,7 +277,7 @@
                {
                        if (archive->full_path == 0)
                        {
-                               basename = 
xa_strip_directories_except_last(slist->data);
+                               basename = 
xa_strip_current_working_dir_from_path(archive->working_dir,slist->data);
                                e_filename = 
xa_escape_filename(basename,"$'`\"\\!?* ()[]&|:;<>#");
                                g_free(basename);
                                g_string_prepend (data,e_filename);
@@ -361,10 +354,11 @@
        gboolean is_dir;
 
        dir = opendir(path);
-
+       is_dir = g_file_test(path,G_FILE_TEST_IS_DIR);
+       if (is_dir)
+               *list = g_slist_prepend(*list,g_strdup(path));
        if (dir == NULL)
        {
-               is_dir = g_file_test(path,G_FILE_TEST_IS_DIR);
                if (is_dir == FALSE)
                {
                        basename = g_path_get_basename(path);
@@ -379,10 +373,11 @@
                        continue;
                fullname = g_strconcat (path,"/",dirlist->d_name,NULL);
                is_dir = g_file_test(fullname,G_FILE_TEST_IS_DIR);
+               *list = g_slist_prepend(*list,fullname);
                if (recurse && is_dir)
                        xa_recurse_local_directory(fullname,list,recurse);
-               else if (! is_dir)
-                       *list = g_slist_prepend(*list,fullname);                
+               /*else if (! is_dir)
+                       *list = g_slist_prepend(*list,fullname);*/
        }
        closedir(dir);
 }

Modified: xarchiver/trunk/src/string_utils.h
===================================================================
--- xarchiver/trunk/src/string_utils.h  2008-08-27 11:53:29 UTC (rev 27596)
+++ xarchiver/trunk/src/string_utils.h  2008-08-27 12:51:21 UTC (rev 27597)
@@ -49,6 +49,6 @@
 GSList *xa_slist_copy(GSList *);
 gchar *itoa(int,int );
 void xa_recurse_local_directory(gchar *,GSList **,gboolean);
-gchar *xa_strip_directories_except_last(gchar *);
+gchar *xa_strip_current_working_dir_from_path(gchar *,gchar *);
 #endif
 

Modified: xarchiver/trunk/src/tar.c
===================================================================
--- xarchiver/trunk/src/tar.c   2008-08-27 11:53:29 UTC (rev 27596)
+++ xarchiver/trunk/src/tar.c   2008-08-27 12:51:21 UTC (rev 27597)
@@ -296,7 +296,6 @@
                }
                else
                {
-                       g_print("%s\n",names->str);
                        xa_extract_tar_without_directories ( "tar -xjvf 
",archive,names->str);
                        command = NULL;
                }

Modified: xarchiver/trunk/src/window.c
===================================================================
--- xarchiver/trunk/src/window.c        2008-08-27 11:53:29 UTC (rev 27596)
+++ xarchiver/trunk/src/window.c        2008-08-27 12:51:21 UTC (rev 27597)
@@ -1952,11 +1952,13 @@
                return;
        }
        _current_dir = g_path_get_dirname (array[0]);
-       current_dir = g_filename_from_uri (_current_dir,NULL,NULL);
-       g_free (_current_dir);
-       chdir (current_dir);
-       g_free (current_dir);
-
+       if (archive[idx]->working_dir != NULL)
+       {
+               g_free(archive[idx]->working_dir);
+               archive[idx]->working_dir = NULL;
+       }
+       archive[idx]->working_dir = g_filename_from_uri 
(_current_dir,NULL,NULL);
+       g_free(_current_dir);
        while (array[len])
        {
                filename = g_filename_from_uri (array[len],NULL,NULL);

_______________________________________________
Xfce4-commits mailing list
Xfce4-commits@xfce.org
http://foo-projects.org/mailman/listinfo/xfce4-commits

Reply via email to