brasero r608 - in branches/brasero_0_7: . src src/plugins/cdrkit src/plugins/cdrtools src/plugins/growisofs
- From: philippr svn gnome org
- To: svn-commits-list gnome org
- Subject: brasero r608 - in branches/brasero_0_7: . src src/plugins/cdrkit src/plugins/cdrtools src/plugins/growisofs
- Date: Sun, 20 Jan 2008 17:18:41 +0000 (GMT)
Author: philippr
Date: Sun Jan 20 17:18:41 2008
New Revision: 608
URL: http://svn.gnome.org/viewvc/brasero?rev=608&view=rev
Log:
2008-01-20 Philippe Rouquier <philippr svn gnome org>
Fix #506063 â Brasero fails miserably from burning a file > 4GB
We now use iso level 3 and udf when we detect a file > 4GB
That means some OS (MacOS X among a couple) may not work
* src/brasero-data-disc.c: (brasero_data_disc_reset_real),
(brasero_data_disc_restore_unreadable),
(brasero_data_disc_file_free),
(brasero_data_disc_remove_children_async_cb),
(brasero_data_disc_file_new), (brasero_data_disc_symlink_new),
(brasero_data_disc_invalid_utf8_new),
(brasero_data_disc_dir_contents_end),
(brasero_data_disc_delete_row_cb),
(brasero_data_disc_path_remove_user),
(brasero_data_disc_restore_excluded_children_cb),
(brasero_data_disc_new_file),
(brasero_data_disc_set_session_param),
(brasero_data_disc_inotify_create_paths),
(brasero_data_disc_inotify_modify_file_cb),
(brasero_data_disc_start_monitoring_real):
* src/burn-debug.c: (brasero_debug_data_fs_to_string):
* src/burn-track.h:
* src/plugins/cdrkit/burn-genisoimage.c:
(brasero_genisoimage_set_argv_image),
(brasero_genisoimage_export_caps):
* src/plugins/cdrtools/burn-mkisofs.c:
(brasero_mkisofs_set_argv_image), (brasero_mkisofs_export_caps):
* src/plugins/growisofs/burn-growisofs.c:
(brasero_growisofs_set_mkisofs_argv),
(brasero_growisofs_export_caps):
Modified:
branches/brasero_0_7/ChangeLog
branches/brasero_0_7/src/brasero-data-disc.c
branches/brasero_0_7/src/burn-debug.c
branches/brasero_0_7/src/burn-track.h
branches/brasero_0_7/src/plugins/cdrkit/burn-genisoimage.c
branches/brasero_0_7/src/plugins/cdrtools/burn-mkisofs.c
branches/brasero_0_7/src/plugins/growisofs/burn-growisofs.c
Modified: branches/brasero_0_7/src/brasero-data-disc.c
==============================================================================
--- branches/brasero_0_7/src/brasero-data-disc.c (original)
+++ branches/brasero_0_7/src/brasero-data-disc.c Sun Jan 20 17:18:41 2008
@@ -195,6 +195,8 @@
GSList *libnotify;
guint libnotify_id;
+ guint G2_files;
+
gint editing:1;
gint is_loading:1;
gint reject_files:1;
@@ -3244,6 +3246,7 @@
brasero_data_disc_clean (disc);
+ disc->priv->G2_files = 0;
disc->priv->activity_counter = 1;
brasero_data_disc_decrease_activity_counter (disc);
@@ -3574,6 +3577,11 @@
brasero_data_disc_joliet_incompat_add_paths (disc, paths);
}
+ /* update by the number of non grafted file */
+ if (info->type != GNOME_VFS_FILE_TYPE_DIRECTORY
+ && GET_SIZE_IN_SECTORS (info->size) > 1048576)
+ disc->priv->G2_files += g_slist_length (paths);
+
/* now let's see the tree */
for (; paths; paths = g_slist_remove (paths, path)) {
path = paths->data;
@@ -3799,7 +3807,7 @@
{
if (!brasero_data_disc_is_excluded (disc, file->uri, NULL)) {
BraseroFile *parent;
- char *parent_uri;
+ gchar *parent_uri;
parent_uri = g_path_get_dirname (file->uri);
parent = g_hash_table_lookup (disc->priv->dirs, parent_uri);
@@ -3810,9 +3818,13 @@
parent->sectors += file->sectors;
}
- else
+ else {
brasero_data_disc_size_changed (disc, file->sectors * (-1));
+ if (file->sectors > 1048576)
+ disc->priv->G2_files --;
+ }
+
brasero_data_disc_file_object_free (disc, file);
}
@@ -4127,6 +4139,11 @@
/* we update the parent directory */
sectors = GET_SIZE_IN_SECTORS (info->size);
+
+ if (info->type != GNOME_VFS_FILE_TYPE_DIRECTORY
+ && GET_SIZE_IN_SECTORS (info->size) > 1048576)
+ disc->priv->G2_files --;
+
dir->sectors -= sectors;
brasero_data_disc_size_changed (disc, sectors * (-1));
@@ -6026,12 +6043,16 @@
#endif
brasero_data_disc_size_changed (disc, sectors);
}
- else if (brasero_data_disc_is_excluded (disc, file->uri, NULL))
+ else if (brasero_data_disc_is_excluded (disc, file->uri, NULL)) {
brasero_data_disc_size_changed (disc, sectors);
+ }
/* That's mostly when loading a project */
else if (!g_slist_find (disc->priv->loading, parent))
parent->sectors -= sectors;
+ if (sectors > 1048576)
+ disc->priv->G2_files ++;
+
/* because of above we only insert it at the end */
g_hash_table_insert (disc->priv->files, file->uri, file);
brasero_data_disc_obj_new (disc, file);
@@ -6281,6 +6302,8 @@
info->symlink_name,
GET_SIZE_IN_SECTORS (info->size));
+ /* No need to check for 2G files here since we set a graft */
+
end :
uri = entry->uri;
@@ -6476,7 +6499,8 @@
g_strdup (uri),
sectors);
}
-
+
+ /* since we graft here no need to check for 2G files */
brasero_data_disc_graft_new (disc, uri, path);
grafts = g_slist_prepend (grafts, path);
@@ -6586,6 +6610,11 @@
dir_sectors += GET_SIZE_IN_SECTORS (info->size);
}
+ if (info->type != GNOME_VFS_FILE_TYPE_DIRECTORY
+ && GET_SIZE_IN_SECTORS (info->size) > 1048576
+ && !g_hash_table_lookup (disc->priv->files, current))
+ disc->priv->G2_files ++;
+
if (strlen (info->name) > 64) {
GSList *paths;
@@ -6978,6 +7007,10 @@
return;
}
+ if (info->type != GNOME_VFS_FILE_TYPE_DIRECTORY
+ && GET_SIZE_IN_SECTORS (info->size) > 1048576)
+ disc->priv->G2_files --;
+
sectors = GET_SIZE_IN_SECTORS (info->size);
brasero_data_disc_size_changed (disc, sectors * (-1));
parent->sectors -= sectors;
@@ -7087,35 +7120,6 @@
/* make an imported session file re-appear if need be */
brasero_data_disc_is_session_path_deleted (disc, path);
return;
-
-#if 0
- BraseroVolFile *file;
-
- /* could be used the day when a library allows full editing
- * of multisession */
-
- if (uri != BRASERO_IMPORTED_FILE)
- return;
-
- /* get the volfile and add it to the list of excluded session files */
- file = brasero_volume_file_from_path (path,
- disc->priv->session);
- if (!file)
- return;
-
- /* update the size */
- brasero_data_disc_size_changed (disc, (-1) * brasero_volume_file_size (file));
-
- /* since it could a file with a graft point, it could already be
- * in the list. We check that and and eventually add it if it is
- * not in this list */
- if (!g_slist_find (disc->priv->session_file_excluded, file))
- disc->priv->session_file_excluded = g_slist_prepend (disc->priv->session_file_excluded,
- file);
-
- return;
-#endif
-
}
if (!disc->priv->remove_user)
@@ -7423,6 +7427,10 @@
dir = g_hash_table_lookup (disc->priv->dirs, parent);
g_free (parent);
+ if (info->type != GNOME_VFS_FILE_TYPE_DIRECTORY
+ && GET_SIZE_IN_SECTORS (info->size) > 1048576)
+ disc->priv->G2_files ++;
+
dir->sectors += sectors;
brasero_data_disc_size_changed (disc, sectors);
}
@@ -7701,6 +7709,10 @@
parent = g_hash_table_lookup (disc->priv->dirs, parent_uri);
g_free (parent_uri);
+ if (info->type != GNOME_VFS_FILE_TYPE_DIRECTORY
+ && GET_SIZE_IN_SECTORS (info->size) > 1048576)
+ disc->priv->G2_files ++;
+
/* no need to check if parent is dummy. It
* is done in brasero_data_disc_is_excluded */
sectors = GET_SIZE_IN_SECTORS (info->size);
@@ -8895,6 +8907,11 @@
if (!BRASERO_DATA_DISC (disc)->priv->joliet_non_compliant)
fs_type |= BRASERO_IMAGE_FS_JOLIET;
+ /* that's necessary for files > 2Gio. It's supported by all windows,
+ * linux, only BSD (unsure), and MacOS X don't support it. */
+ if (BRASERO_DATA_DISC (disc)->priv->G2_files)
+ fs_type |= BRASERO_IMAGE_ISO_FS_LEVEL_3 | BRASERO_IMAGE_FS_UDF;
+
if (brasero_data_disc_is_video_DVD (BRASERO_DATA_DISC (disc)))
fs_type |= BRASERO_IMAGE_FS_VIDEO;
@@ -11916,6 +11933,9 @@
file = g_hash_table_lookup (disc->priv->dirs, parent);
g_free (parent);
+ if (GET_SIZE_IN_SECTORS (info->size) > 1048576)
+ disc->priv->G2_files ++;
+
sectors = GET_SIZE_IN_SECTORS (info->size);
file->sectors += sectors;
brasero_data_disc_size_changed (disc, sectors);
@@ -12215,6 +12235,13 @@
sectors = GET_SIZE_IN_SECTORS (info->size);
if (sectors != file->sectors) {
+ if (info->type != GNOME_VFS_FILE_TYPE_DIRECTORY) {
+ if (GET_SIZE_IN_SECTORS (info->size) > 1048576 && file->sectors <= 1048576)
+ disc->priv->G2_files ++;
+ else if (GET_SIZE_IN_SECTORS (info->size) <= 1048576 && file->sectors > 1048576)
+ disc->priv->G2_files --;
+ }
+
brasero_data_disc_size_changed (disc, sectors - file->sectors);
file->sectors = sectors;
}
@@ -12907,7 +12934,7 @@
brasero_data_disc_start_monitoring_real (BraseroDataDisc *disc,
BraseroFile *file)
{
- const gchar *path;
+ gchar *path;
gint dev_fd;
uint32_t mask;
Modified: branches/brasero_0_7/src/burn-debug.c
==============================================================================
--- branches/brasero_0_7/src/burn-debug.c (original)
+++ branches/brasero_0_7/src/burn-debug.c Sun Jan 20 17:18:41 2008
@@ -246,6 +246,8 @@
strcat (buffer, "ISO ");
if (fs_type & BRASERO_IMAGE_FS_UDF)
strcat (buffer, "UDF ");
+ if (fs_type & BRASERO_IMAGE_ISO_FS_LEVEL_3)
+ strcat (buffer, "Level 3 ");
if (fs_type & BRASERO_IMAGE_FS_JOLIET)
strcat (buffer, "JOLIET ");
if (fs_type & BRASERO_IMAGE_FS_VIDEO)
Modified: branches/brasero_0_7/src/burn-track.h
==============================================================================
--- branches/brasero_0_7/src/burn-track.h (original)
+++ branches/brasero_0_7/src/burn-track.h Sun Jan 20 17:18:41 2008
@@ -48,9 +48,11 @@
BRASERO_IMAGE_FS_UDF = 1 << 1,
BRASERO_IMAGE_FS_JOLIET = 1 << 2,
BRASERO_IMAGE_FS_VIDEO = 1 << 3,
+ BRASERO_IMAGE_ISO_FS_LEVEL_3 = 1 << 4,
BRASERO_IMAGE_FS_ANY = BRASERO_IMAGE_FS_ISO|
BRASERO_IMAGE_FS_UDF|
BRASERO_IMAGE_FS_JOLIET|
+ BRASERO_IMAGE_ISO_FS_LEVEL_3|
BRASERO_IMAGE_FS_VIDEO
} BraseroImageFS;
Modified: branches/brasero_0_7/src/plugins/cdrkit/burn-genisoimage.c
==============================================================================
--- branches/brasero_0_7/src/plugins/cdrkit/burn-genisoimage.c (original)
+++ branches/brasero_0_7/src/plugins/cdrkit/burn-genisoimage.c Sun Jan 20 17:18:41 2008
@@ -228,10 +228,22 @@
BRASERO_JOB_NOT_READY (genisoimage);
brasero_track_get_type (track, &type);
- if ((type.subtype.fs_type & BRASERO_IMAGE_FS_JOLIET))
+ if (type.subtype.fs_type & BRASERO_IMAGE_FS_JOLIET)
g_ptr_array_add (argv, g_strdup ("-J"));
- if ((type.subtype.fs_type & BRASERO_IMAGE_FS_VIDEO))
+ if ((type.subtype.fs_type & BRASERO_IMAGE_FS_ISO)
+ && (type.subtype.fs_type & BRASERO_IMAGE_ISO_FS_LEVEL_3)) {
+ g_ptr_array_add (argv, g_strdup ("-iso-level"));
+ g_ptr_array_add (argv, g_strdup ("3"));
+
+ /* NOTE the following is specific to genisoimage */
+ /* g_ptr_array_add (argv, g_strdup ("-allow-limited-size")); */
+ }
+
+ if (type.subtype.fs_type & BRASERO_IMAGE_FS_UDF)
+ g_ptr_array_add (argv, g_strdup ("-udf"));
+
+ if (type.subtype.fs_type & BRASERO_IMAGE_FS_VIDEO)
g_ptr_array_add (argv, g_strdup ("-dvd-video"));
g_ptr_array_add (argv, g_strdup ("-graft-points"));
@@ -488,6 +500,8 @@
BRASERO_BURN_FLAG_NONE);
input = brasero_caps_data_new (BRASERO_IMAGE_FS_ISO|
+ BRASERO_IMAGE_FS_UDF|
+ BRASERO_IMAGE_ISO_FS_LEVEL_3|
BRASERO_IMAGE_FS_JOLIET|
BRASERO_IMAGE_FS_VIDEO);
Modified: branches/brasero_0_7/src/plugins/cdrtools/burn-mkisofs.c
==============================================================================
--- branches/brasero_0_7/src/plugins/cdrtools/burn-mkisofs.c (original)
+++ branches/brasero_0_7/src/plugins/cdrtools/burn-mkisofs.c Sun Jan 20 17:18:41 2008
@@ -225,10 +225,19 @@
BRASERO_JOB_NOT_READY (mkisofs);
brasero_track_get_type (track, &type);
- if ((type.subtype.fs_type & BRASERO_IMAGE_FS_JOLIET))
+ if (type.subtype.fs_type & BRASERO_IMAGE_FS_JOLIET)
g_ptr_array_add (argv, g_strdup ("-J"));
- if ((type.subtype.fs_type & BRASERO_IMAGE_FS_VIDEO))
+ if ((type.subtype.fs_type & BRASERO_IMAGE_FS_ISO)
+ && (type.subtype.fs_type & BRASERO_IMAGE_ISO_FS_LEVEL_3)) {
+ g_ptr_array_add (argv, g_strdup ("-iso-level"));
+ g_ptr_array_add (argv, g_strdup ("3"));
+ }
+
+ if (type.subtype.fs_type & BRASERO_IMAGE_FS_UDF)
+ g_ptr_array_add (argv, g_strdup ("-udf"));
+
+ if (type.subtype.fs_type & BRASERO_IMAGE_FS_VIDEO)
g_ptr_array_add (argv, g_strdup ("-dvd-video"));
g_ptr_array_add (argv, g_strdup ("-graft-points"));
@@ -484,6 +493,8 @@
BRASERO_BURN_FLAG_NONE);
input = brasero_caps_data_new (BRASERO_IMAGE_FS_ISO|
+ BRASERO_IMAGE_FS_UDF|
+ BRASERO_IMAGE_ISO_FS_LEVEL_3|
BRASERO_IMAGE_FS_JOLIET|
BRASERO_IMAGE_FS_VIDEO);
Modified: branches/brasero_0_7/src/plugins/growisofs/burn-growisofs.c
==============================================================================
--- branches/brasero_0_7/src/plugins/growisofs/burn-growisofs.c (original)
+++ branches/brasero_0_7/src/plugins/growisofs/burn-growisofs.c Sun Jan 20 17:18:41 2008
@@ -240,6 +240,17 @@
if (input.subtype.fs_type & BRASERO_IMAGE_FS_JOLIET)
g_ptr_array_add (argv, g_strdup ("-J"));
+ if ((input.subtype.fs_type & BRASERO_IMAGE_FS_ISO)
+ && (input.subtype.fs_type & BRASERO_IMAGE_ISO_FS_LEVEL_3)) {
+ /* That's the safest option. A few OS don't support that though,
+ * like MacOSX and freebsd.*/
+ g_ptr_array_add (argv, g_strdup ("-iso-level"));
+ g_ptr_array_add (argv, g_strdup ("3"));
+ }
+
+ if (input.subtype.fs_type & BRASERO_IMAGE_FS_UDF)
+ g_ptr_array_add (argv, g_strdup ("-udf"));
+
if (input.subtype.fs_type & BRASERO_IMAGE_FS_VIDEO)
g_ptr_array_add (argv, g_strdup ("-dvd-video"));
@@ -688,6 +699,8 @@
BRASERO_MEDIUM_HAS_DATA);
input = brasero_caps_data_new (BRASERO_IMAGE_FS_ISO|
+ BRASERO_IMAGE_FS_UDF|
+ BRASERO_IMAGE_ISO_FS_LEVEL_3|
BRASERO_IMAGE_FS_JOLIET|
BRASERO_IMAGE_FS_VIDEO);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]