summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTing-Wei Lan <lantw44@gmail.com>2013-08-23 21:08:06 +0800
committerLAN-TW <lantw44@gmail.com>2013-08-23 21:08:06 +0800
commitdb0d3891b16d9932f4e7234b6db091f65811de5d (patch)
tree11442d414318cfa3859cf0e151a577676ed7f60e
parent811b93368f6ea25e266a47cfd885120847356223 (diff)
downloadgsoc2013-libgnome-autoar-db0d3891b16d9932f4e7234b6db091f65811de5d.tar
gsoc2013-libgnome-autoar-db0d3891b16d9932f4e7234b6db091f65811de5d.tar.gz
gsoc2013-libgnome-autoar-db0d3891b16d9932f4e7234b6db091f65811de5d.tar.bz2
gsoc2013-libgnome-autoar-db0d3891b16d9932f4e7234b6db091f65811de5d.tar.lz
gsoc2013-libgnome-autoar-db0d3891b16d9932f4e7234b6db091f65811de5d.tar.xz
gsoc2013-libgnome-autoar-db0d3891b16d9932f4e7234b6db091f65811de5d.tar.zst
gsoc2013-libgnome-autoar-db0d3891b16d9932f4e7234b6db091f65811de5d.zip
AutoarCreate: Reduce unneeded work
-rw-r--r--gnome-autoar/autoar-create.c50
1 files changed, 25 insertions, 25 deletions
diff --git a/gnome-autoar/autoar-create.c b/gnome-autoar/autoar-create.c
index 41b8069..c94eb7c 100644
--- a/gnome-autoar/autoar-create.c
+++ b/gnome-autoar/autoar-create.c
@@ -570,6 +570,31 @@ autoar_create_do_add_to_archive (AutoarCreate *arcreate,
if (info == NULL)
return;
+ filetype = g_file_info_get_file_type (info);
+ switch (archive_format (priv->a)) {
+ case ARCHIVE_FORMAT_AR:
+ case ARCHIVE_FORMAT_AR_GNU:
+ case ARCHIVE_FORMAT_AR_BSD:
+ if (filetype == G_FILE_TYPE_DIRECTORY ||
+ filetype == G_FILE_TYPE_SYMBOLIC_LINK ||
+ filetype == G_FILE_TYPE_SPECIAL) {
+ /* ar only support regular files, so we abort this operation to
+ * prevent producing a malformed archive. */
+ g_object_unref (info);
+ return;
+ }
+ break;
+
+ case ARCHIVE_FORMAT_ZIP:
+ if (filetype == G_FILE_TYPE_SPECIAL) {
+ /* Add special files to zip archives cause unknown fatal error
+ * in libarchive. */
+ g_object_unref (info);
+ return;
+ }
+ break;
+ }
+
{
char *root_basename;
char *pathname_relative;
@@ -635,31 +660,6 @@ autoar_create_do_add_to_archive (AutoarCreate *arcreate,
archive_entry_set_nlink (priv->entry, g_file_info_get_attribute_uint32 (info, G_FILE_ATTRIBUTE_UNIX_NLINK));
archive_entry_set_rdev (priv->entry, g_file_info_get_attribute_uint32 (info, G_FILE_ATTRIBUTE_UNIX_RDEV));
- filetype = g_file_info_get_file_type (info);
- switch (archive_format (priv->a)) {
- case ARCHIVE_FORMAT_AR:
- case ARCHIVE_FORMAT_AR_GNU:
- case ARCHIVE_FORMAT_AR_BSD:
- if (filetype == G_FILE_TYPE_DIRECTORY ||
- filetype == G_FILE_TYPE_SYMBOLIC_LINK ||
- filetype == G_FILE_TYPE_SPECIAL) {
- /* ar only support regular files, so we abort this operation to
- * prevent producing a malformed archive. */
- g_object_unref (info);
- return;
- }
- break;
-
- case ARCHIVE_FORMAT_ZIP:
- if (filetype == G_FILE_TYPE_SPECIAL) {
- /* Add special files to zip archives cause unknown fatal error
- * in libarchive. */
- g_object_unref (info);
- return;
- }
- break;
- }
-
switch (filetype) {
case G_FILE_TYPE_DIRECTORY:
g_debug ("autoar_create_do_add_to_archive: file type set to DIR");