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