diff options
AutoarCreate: Reduce unneeded work
-rw-r--r-- | gnome-autoar/autoar-create.c | 50 |
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"); |