diff options
author | marcus <marcus@FreeBSD.org> | 2009-01-10 13:22:13 +0800 |
---|---|---|
committer | marcus <marcus@FreeBSD.org> | 2009-01-10 13:22:13 +0800 |
commit | 6d8ed8f7c7511223163de715a97ffc04bf6fada9 (patch) | |
tree | 40dc015efe383243b0880df377f73ee250da7de7 /sysutils | |
parent | c7f342a8d7b82e85b9625c4403600fc20ce41da6 (diff) | |
download | freebsd-ports-gnome-6d8ed8f7c7511223163de715a97ffc04bf6fada9.tar.gz freebsd-ports-gnome-6d8ed8f7c7511223163de715a97ffc04bf6fada9.tar.zst freebsd-ports-gnome-6d8ed8f7c7511223163de715a97ffc04bf6fada9.zip |
Presenting GNOME 2.24 for FreeBSD.
See http://library.gnome.org/misc/release-notes/2.24/ for the general
release notes. On the FreeBSD front, this release introduces Fuse support
in HAL, adds multi-CPU support to libgtop, WebKit updates, and fixes some
long-standing seahorse and gnome-keyring bugs. The documentation updates
to the website are forthcoming.
This release features commits by adamw, ahze, kwm, mezz, and myself. It would
not have been possible without are contributors and testers:
Alexander Loginov
Craig Butler [1]
Dmitry Marakasov [6]
Eric L. Chen
Joseph S. Atkinson
Kris Moore
Lapo Luchini [7]
Nikos Ntarmos
Pawel Worach
Romain Tartiere
TAOKA Fumiyoshi [3]
Yasuda Keisuke
Zyl
aZ [4]
bf [2] [5]
Florent Thoumie
Peter Wemm
pluknet
PR: 125857 [1]
126993 [2]
130031 [3]
127399 [4]
127661 [5]
124302 [6]
129570 [7]
129936
123790
Diffstat (limited to 'sysutils')
68 files changed, 1187 insertions, 8241 deletions
diff --git a/sysutils/brasero/Makefile b/sysutils/brasero/Makefile index cd09844a6b99..10343c02a55f 100644 --- a/sysutils/brasero/Makefile +++ b/sysutils/brasero/Makefile @@ -3,11 +3,10 @@ # Whom: Michael Johnson <ahze@FreeBSD.org> # # $FreeBSD$ -# $MCom: ports/sysutils/brasero/Makefile,v 1.23 2008/02/06 07:11:46 marcus Exp $ +# $MCom: ports/sysutils/brasero/Makefile,v 1.34 2009/01/09 22:03:01 kwm Exp $ PORTNAME= brasero -PORTVERSION= 0.7.1 -PORTREVISION= 5 +PORTVERSION= 0.8.4 CATEGORIES= sysutils audio multimedia gnome MASTER_SITES= ${MASTER_SITE_GNOME} MASTER_SITE_SUBDIR= sources/${PORTNAME}/${PORTVERSION:C/^([0-9]+\.[0-9]+).*/\1/} @@ -17,7 +16,7 @@ MAINTAINER= gnome@FreeBSD.org COMMENT= CD/DVD mastering tool for the GNOME desktop LIB_DEPENDS= notify.1:${PORTSDIR}/devel/libnotify \ - totem-plparser.10:${PORTSDIR}/multimedia/totem-pl-parser + totem-plparser.12:${PORTSDIR}/multimedia/totem-pl-parser USE_GETTEXT= yes USE_BZIP2= yes @@ -25,9 +24,9 @@ GNU_CONFIGURE= yes USE_GMAKE= yes USE_GNOME= gnomehier nautiluscdburner USE_GSTREAMER= gconf core +INSTALLS_OMF= yes INSTALLS_ICONS= yes -CONFIGURE_ARGS= --disable-inotify \ - --with-cam +CONFIGURE_ARGS= --disable-inotify CONFIGURE_ENV= CPPFLAGS="-I${LOCALBASE}/include" \ LDFLAGS="-L${LOCALBASE}/lib" diff --git a/sysutils/brasero/distinfo b/sysutils/brasero/distinfo index ba88da57f993..c63fa75cf437 100644 --- a/sysutils/brasero/distinfo +++ b/sysutils/brasero/distinfo @@ -1,3 +1,3 @@ -MD5 (gnome2/brasero-0.7.1.tar.bz2) = 2754fca21c31f00016981cc8fe7c48be -SHA256 (gnome2/brasero-0.7.1.tar.bz2) = 0ad851ba9f05c2e4ae0778e61c74aee56bbae3a4181b172009698cde03387f5c -SIZE (gnome2/brasero-0.7.1.tar.bz2) = 1483716 +MD5 (gnome2/brasero-0.8.4.tar.bz2) = 5d0ad796e1f7b68a31f8757f1b3f9aef +SHA256 (gnome2/brasero-0.8.4.tar.bz2) = 6cbe0367e9049f6c93d67f6d9a48b530430e52d3d48ec3ae4b9bc96b79870bba +SIZE (gnome2/brasero-0.8.4.tar.bz2) = 2755878 diff --git a/sysutils/brasero/files/patch-configure b/sysutils/brasero/files/patch-configure deleted file mode 100644 index 3f4958a84b2e..000000000000 --- a/sysutils/brasero/files/patch-configure +++ /dev/null @@ -1,264 +0,0 @@ ---- configure.orig 2008-01-24 16:49:00.000000000 -0500 -+++ configure 2008-01-24 16:49:16.000000000 -0500 -@@ -885,6 +885,8 @@ BRASERO_BASE_CFLAGS - BRASERO_BASE_LIBS - BRASERO_CFLAGS - BRASERO_LIBS -+WITH_CAM_TRUE -+WITH_CAM_FALSE - LIBBURNIA_CFLAGS - LIBBURNIA_LIBS - BRASERO_LIBBURNIA_CFLAGS -@@ -1610,6 +1612,7 @@ Optional Packages: - --with-pic try to use only PIC/non-PIC objects [default=use - both] - --with-tags[=TAGS] include additional configurations [automatic] -+ --with-cam Build with CAM backend instead of Linux SCSI [default = no] - --with-gconf-source=sourceaddress Config database for installing schema files. - --with-gconf-schema-file-dir=dir Directory for installing schema files. - -@@ -4514,7 +4517,7 @@ ia64-*-hpux*) - ;; - *-*-irix6*) - # Find out which ABI we are using. -- echo '#line 4517 "configure"' > conftest.$ac_ext -+ echo '#line 4520 "configure"' > conftest.$ac_ext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? -@@ -7252,11 +7255,11 @@ else - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` -- (eval echo "\"\$as_me:7255: $lt_compile\"" >&5) -+ (eval echo "\"\$as_me:7258: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 -- echo "$as_me:7259: \$? = $ac_status" >&5 -+ echo "$as_me:7262: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. -@@ -7542,11 +7545,11 @@ else - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` -- (eval echo "\"\$as_me:7545: $lt_compile\"" >&5) -+ (eval echo "\"\$as_me:7548: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 -- echo "$as_me:7549: \$? = $ac_status" >&5 -+ echo "$as_me:7552: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. -@@ -7646,11 +7649,11 @@ else - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` -- (eval echo "\"\$as_me:7649: $lt_compile\"" >&5) -+ (eval echo "\"\$as_me:7652: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 -- echo "$as_me:7653: \$? = $ac_status" >&5 -+ echo "$as_me:7656: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized -@@ -9997,7 +10000,7 @@ else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext <<EOF --#line 10000 "configure" -+#line 10003 "configure" - #include "confdefs.h" - - #if HAVE_DLFCN_H -@@ -10097,7 +10100,7 @@ else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext <<EOF --#line 10100 "configure" -+#line 10103 "configure" - #include "confdefs.h" - - #if HAVE_DLFCN_H -@@ -12517,11 +12520,11 @@ else - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` -- (eval echo "\"\$as_me:12520: $lt_compile\"" >&5) -+ (eval echo "\"\$as_me:12523: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 -- echo "$as_me:12524: \$? = $ac_status" >&5 -+ echo "$as_me:12527: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. -@@ -12621,11 +12624,11 @@ else - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` -- (eval echo "\"\$as_me:12624: $lt_compile\"" >&5) -+ (eval echo "\"\$as_me:12627: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 -- echo "$as_me:12628: \$? = $ac_status" >&5 -+ echo "$as_me:12631: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized -@@ -14185,11 +14188,11 @@ else - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` -- (eval echo "\"\$as_me:14188: $lt_compile\"" >&5) -+ (eval echo "\"\$as_me:14191: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 -- echo "$as_me:14192: \$? = $ac_status" >&5 -+ echo "$as_me:14195: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. -@@ -14289,11 +14292,11 @@ else - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` -- (eval echo "\"\$as_me:14292: $lt_compile\"" >&5) -+ (eval echo "\"\$as_me:14295: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 -- echo "$as_me:14296: \$? = $ac_status" >&5 -+ echo "$as_me:14299: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized -@@ -16478,11 +16481,11 @@ else - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` -- (eval echo "\"\$as_me:16481: $lt_compile\"" >&5) -+ (eval echo "\"\$as_me:16484: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 -- echo "$as_me:16485: \$? = $ac_status" >&5 -+ echo "$as_me:16488: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. -@@ -16768,11 +16771,11 @@ else - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` -- (eval echo "\"\$as_me:16771: $lt_compile\"" >&5) -+ (eval echo "\"\$as_me:16774: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 -- echo "$as_me:16775: \$? = $ac_status" >&5 -+ echo "$as_me:16778: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. -@@ -16872,11 +16875,11 @@ else - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` -- (eval echo "\"\$as_me:16875: $lt_compile\"" >&5) -+ (eval echo "\"\$as_me:16878: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 -- echo "$as_me:16879: \$? = $ac_status" >&5 -+ echo "$as_me:16882: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized -@@ -22350,6 +22353,27 @@ BRASERO_LIBS="$BRASERO_BASE_LIBS $BRASER - LIBBURN_REQUIRED=0.4.0 - LIBISOFS_REQUIRED=0.2.8 - -+ -+# Check whether --with-cam was given. -+if test "${with_cam+set}" = set; then -+ withval=$with_cam; -+else -+ with_cam="no" -+fi -+ -+ -+if text x"$with_cam" = "xyes"; then -+ BRASERO_LIBS="$BRASERO_LIBS -lcam" -+fi -+ if test x"$with_cam" = "xyes"; then -+ WITH_CAM_TRUE= -+ WITH_CAM_FALSE='#' -+else -+ WITH_CAM_TRUE='#' -+ WITH_CAM_FALSE= -+fi -+ -+ - # Check whether --enable-libburnia was given. - if test "${enable_libburnia+set}" = set; then - enableval=$enable_libburnia; -@@ -25144,6 +25168,13 @@ echo "$as_me: error: conditional \"am__f - Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } - fi -+if test -z "${WITH_CAM_TRUE}" && test -z "${WITH_CAM_FALSE}"; then -+ { { echo "$as_me:$LINENO: error: conditional \"WITH_CAM\" was never defined. -+Usually this means the macro was only invoked conditionally." >&5 -+echo "$as_me: error: conditional \"WITH_CAM\" was never defined. -+Usually this means the macro was only invoked conditionally." >&2;} -+ { (exit 1); exit 1; }; } -+fi - if test -z "${BUILD_LIBBURNIA_TRUE}" && test -z "${BUILD_LIBBURNIA_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"BUILD_LIBBURNIA\" was never defined. - Usually this means the macro was only invoked conditionally." >&5 -@@ -25945,6 +25976,8 @@ BRASERO_BASE_CFLAGS!$BRASERO_BASE_CFLAGS - BRASERO_BASE_LIBS!$BRASERO_BASE_LIBS$ac_delim - BRASERO_CFLAGS!$BRASERO_CFLAGS$ac_delim - BRASERO_LIBS!$BRASERO_LIBS$ac_delim -+WITH_CAM_TRUE!$WITH_CAM_TRUE$ac_delim -+WITH_CAM_FALSE!$WITH_CAM_FALSE$ac_delim - LIBBURNIA_CFLAGS!$LIBBURNIA_CFLAGS$ac_delim - LIBBURNIA_LIBS!$LIBBURNIA_LIBS$ac_delim - BRASERO_LIBBURNIA_CFLAGS!$BRASERO_LIBBURNIA_CFLAGS$ac_delim -@@ -26019,8 +26052,6 @@ INTLTOOL_UPDATE!$INTLTOOL_UPDATE$ac_deli - INTLTOOL_PERL!$INTLTOOL_PERL$ac_delim - ALL_LINGUAS!$ALL_LINGUAS$ac_delim - SCHEMAS_INSTALL_TRUE!$SCHEMAS_INSTALL_TRUE$ac_delim --SCHEMAS_INSTALL_FALSE!$SCHEMAS_INSTALL_FALSE$ac_delim --GCONFTOOL!$GCONFTOOL$ac_delim - _ACEOF - - if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then -@@ -26062,6 +26093,8 @@ _ACEOF - ac_delim='%!_!# ' - for ac_last_try in false false false false false :; do - cat >conf$$subs.sed <<_ACEOF -+SCHEMAS_INSTALL_FALSE!$SCHEMAS_INSTALL_FALSE$ac_delim -+GCONFTOOL!$GCONFTOOL$ac_delim - GCONF_SCHEMA_CONFIG_SOURCE!$GCONF_SCHEMA_CONFIG_SOURCE$ac_delim - GCONF_SCHEMA_FILE_DIR!$GCONF_SCHEMA_FILE_DIR$ac_delim - GCONF_SCHEMAS_INSTALL_TRUE!$GCONF_SCHEMAS_INSTALL_TRUE$ac_delim -@@ -26070,7 +26103,7 @@ LIBOBJS!$LIBOBJS$ac_delim - LTLIBOBJS!$LTLIBOBJS$ac_delim - _ACEOF - -- if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 6; then -+ if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 8; then - break - elif $ac_last_try; then - { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 diff --git a/sysutils/brasero/files/patch-src_Makefile.in b/sysutils/brasero/files/patch-src_Makefile.in deleted file mode 100644 index c57255769ee6..000000000000 --- a/sysutils/brasero/files/patch-src_Makefile.in +++ /dev/null @@ -1,275 +0,0 @@ ---- src/Makefile.in.orig 2008-01-24 16:49:38.000000000 -0500 -+++ src/Makefile.in 2008-01-24 16:49:47.000000000 -0500 -@@ -45,7 +45,96 @@ CONFIG_CLEAN_FILES = - am__installdirs = "$(DESTDIR)$(bindir)" - binPROGRAMS_INSTALL = $(INSTALL_PROGRAM) - PROGRAMS = $(bin_PROGRAMS) -+am__brasero_SOURCES_DIST = brasero-marshal.h brasero-marshal.c main.c \ -+ brasero-utils.h brasero-utils.c burn-dbus.h burn-dbus.c \ -+ brasero-search-entry.c brasero-search-entry.h \ -+ brasero-search-beagle.c brasero-search-beagle.h \ -+ brasero-mime-filter.c brasero-mime-filter.h brasero-playlist.c \ -+ brasero-playlist.h brasero-player.c brasero-player.h \ -+ brasero-menu.h brasero-burn-dialog.c brasero-burn-dialog.h \ -+ brasero-disc-copy-dialog.c brasero-disc-copy-dialog.h \ -+ brasero-blank-dialog.c brasero-blank-dialog.h inotify.h \ -+ brasero-metadata.c brasero-metadata.h inotify-syscalls.h \ -+ brasero-filtered-window.c brasero-filtered-window.h \ -+ brasero-disc.c brasero-disc.h brasero-data-disc.c \ -+ brasero-data-disc.h brasero-audio-disc.c brasero-audio-disc.h \ -+ brasero-project.c brasero-project.h \ -+ brasero-project-type-chooser.c brasero-project-type-chooser.h \ -+ brasero-player-bacon.c brasero-player-bacon.h \ -+ brasero-progress.c brasero-progress.h \ -+ brasero-song-properties.c brasero-song-properties.h \ -+ brasero-tray.c brasero-tray.h burn.c burn.h burn-job.c \ -+ burn-job.h burn-process.c burn-process.h burn-basics.h \ -+ burn-basics.c burn-caps.c burn-caps.h brasero-session.c \ -+ brasero-session.h brasero-app.h brasero-uri-container.c \ -+ brasero-uri-container.h brasero-project-manager.c \ -+ brasero-project-manager.h brasero-layout.c brasero-layout.h \ -+ brasero-file-chooser.c brasero-file-chooser.h \ -+ brasero-project-size.c brasero-project-size.h burn-session.h \ -+ brasero-sum-dialog.c brasero-sum-dialog.h \ -+ brasero-tool-dialog.c brasero-tool-dialog.h brasero-ncb.h \ -+ brasero-ncb.c burn-task.c burn-task.h brasero-vfs.c \ -+ brasero-vfs.h brasero-async-task-manager.c \ -+ brasero-async-task-manager.h eggtreemultidnd.c \ -+ eggtreemultidnd.h brasero-multi-dnd.c brasero-multi-dnd.h \ -+ brasero-image-option-dialog.c brasero-image-option-dialog.h \ -+ brasero-disc-option-dialog.c brasero-disc-option-dialog.h \ -+ brasero-image-type-chooser.c brasero-image-type-chooser.h \ -+ burn-iso9660.c burn-iso9660.h brasero-layout-object.c \ -+ brasero-layout-object.h burn-volume.c burn-volume.h \ -+ burn-susp.c burn-susp.h burn-iso-field.c burn-iso-field.h \ -+ burn-medium.h cam/cam-cdrom.h cam/freebsd_dvd_rw_utils.h \ -+ scsi/scsi-base.h scsi/scsi-command.h scsi/scsi-error.h \ -+ scsi/scsi-get-configuration.h scsi/scsi-mmc1.h \ -+ scsi/scsi-mmc2.h scsi/scsi-opcodes.h \ -+ scsi/scsi-read-disc-info.h scsi/scsi-read-toc-pma-atip.h \ -+ scsi/scsi-sense-data.h scsi/scsi-sg.h scsi/scsi-utils.h \ -+ scsi/scsi-q-subchannel.h scsi/scsi-read-track-information.h \ -+ scsi/scsi-get-performance.h scsi/scsi-mmc3.h \ -+ scsi/scsi-mode-pages.h scsi/scsi-status-page.h \ -+ scsi/scsi-spc1.h scsi/scsi-read-capacity.h \ -+ scsi/scsi-read-disc-structure.h scsi/scsi-dvd-structures.h \ -+ scsi/scsi-read-format-capacities.h scsi/scsi-command.c \ -+ scsi/scsi-get-configuration.c scsi/scsi-read-disc-info.c \ -+ scsi/scsi-read-toc-pma-atip.c scsi/scsi-sense-data.c \ -+ scsi/scsi-sg.c scsi/scsi-error.c \ -+ scsi/scsi-read-track-information.c scsi/scsi-get-performance.c \ -+ scsi/scsi-mode-sense.c scsi/scsi-read-capacity.c \ -+ scsi/scsi-read-disc-structure.c \ -+ scsi/scsi-read-format-capacities.c burn-medium-scsi.c \ -+ cam/cam-cdrom.c cam/freebsd_dvd_rw_utils.c burn-medium-cam.c \ -+ burn-debug.c burn-debug.h burn-track.h burn-plugin.h \ -+ burn-plugin.c burn-plugin-private.h burn-plugin-manager.c \ -+ burn-plugin-manager.h burn-task-ctx.h burn-task-item.c \ -+ burn-task-item.h burn-task-ctx.c burn-mkisofs-base.c \ -+ burn-mkisofs-base.h brasero-drive-selection.h \ -+ brasero-drive-selection.c brasero-src-selection.h \ -+ brasero-src-selection.c brasero-dest-selection.h \ -+ brasero-dest-selection.c brasero-drive-info.c \ -+ brasero-drive-info.h brasero-drive-properties.h \ -+ brasero-drive-properties.c brasero-image-properties.h \ -+ brasero-image-properties.c brasero-xfer.c brasero-xfer.h \ -+ burn-session.c burn-track.c brasero-plugin-manager-ui.c \ -+ brasero-plugin-manager-ui.h brasero-pref.h brasero-pref.c \ -+ brasero-plugin-option.h brasero-plugin-option.c \ -+ brasero-split-dialog.h brasero-split-dialog.c \ -+ brasero-time-button.h brasero-time-button.c brasero-preview.h \ -+ brasero-preview.c burn-image-format.c burn-image-format.h - am__objects_1 = brasero-marshal.$(OBJEXT) -+am__objects_2 = scsi-command.$(OBJEXT) \ -+ scsi-get-configuration.$(OBJEXT) scsi-read-disc-info.$(OBJEXT) \ -+ scsi-read-toc-pma-atip.$(OBJEXT) scsi-sense-data.$(OBJEXT) \ -+ scsi-sg.$(OBJEXT) scsi-error.$(OBJEXT) \ -+ scsi-read-track-information.$(OBJEXT) \ -+ scsi-get-performance.$(OBJEXT) scsi-mode-sense.$(OBJEXT) \ -+ scsi-read-capacity.$(OBJEXT) \ -+ scsi-read-disc-structure.$(OBJEXT) \ -+ scsi-read-format-capacities.$(OBJEXT) \ -+ burn-medium-scsi.$(OBJEXT) -+am__objects_3 = cam-cdrom.$(OBJEXT) freebsd_dvd_rw_utils.$(OBJEXT) \ -+ burn-medium-cam.$(OBJEXT) -+@WITH_CAM_FALSE@am__objects_4 = $(am__objects_2) -+@WITH_CAM_TRUE@am__objects_4 = $(am__objects_3) - am_brasero_OBJECTS = $(am__objects_1) main.$(OBJEXT) \ - brasero-utils.$(OBJEXT) burn-dbus.$(OBJEXT) \ - brasero-search-entry.$(OBJEXT) brasero-search-beagle.$(OBJEXT) \ -@@ -72,19 +161,11 @@ am_brasero_OBJECTS = $(am__objects_1) ma - brasero-disc-option-dialog.$(OBJEXT) \ - brasero-image-type-chooser.$(OBJEXT) burn-iso9660.$(OBJEXT) \ - brasero-layout-object.$(OBJEXT) burn-volume.$(OBJEXT) \ -- burn-susp.$(OBJEXT) burn-iso-field.$(OBJEXT) \ -- burn-medium.$(OBJEXT) scsi-command.$(OBJEXT) \ -- scsi-get-configuration.$(OBJEXT) scsi-read-disc-info.$(OBJEXT) \ -- scsi-read-toc-pma-atip.$(OBJEXT) scsi-sense-data.$(OBJEXT) \ -- scsi-sg.$(OBJEXT) scsi-error.$(OBJEXT) \ -- scsi-read-track-information.$(OBJEXT) \ -- scsi-get-performance.$(OBJEXT) scsi-mode-sense.$(OBJEXT) \ -- scsi-read-capacity.$(OBJEXT) \ -- scsi-read-disc-structure.$(OBJEXT) \ -- scsi-read-format-capacities.$(OBJEXT) burn-debug.$(OBJEXT) \ -- burn-plugin.$(OBJEXT) burn-plugin-manager.$(OBJEXT) \ -- burn-task-item.$(OBJEXT) burn-task-ctx.$(OBJEXT) \ -- burn-mkisofs-base.$(OBJEXT) brasero-drive-selection.$(OBJEXT) \ -+ burn-susp.$(OBJEXT) burn-iso-field.$(OBJEXT) $(am__objects_4) \ -+ burn-debug.$(OBJEXT) burn-plugin.$(OBJEXT) \ -+ burn-plugin-manager.$(OBJEXT) burn-task-item.$(OBJEXT) \ -+ burn-task-ctx.$(OBJEXT) burn-mkisofs-base.$(OBJEXT) \ -+ brasero-drive-selection.$(OBJEXT) \ - brasero-src-selection.$(OBJEXT) \ - brasero-dest-selection.$(OBJEXT) brasero-drive-info.$(OBJEXT) \ - brasero-drive-properties.$(OBJEXT) \ -@@ -110,7 +191,7 @@ LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLF - --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ - $(LDFLAGS) -o $@ - SOURCES = $(brasero_SOURCES) --DIST_SOURCES = $(brasero_SOURCES) -+DIST_SOURCES = $(am__brasero_SOURCES_DIST) - RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ - html-recursive info-recursive install-data-recursive \ - install-dvi-recursive install-exec-recursive \ -@@ -316,6 +397,7 @@ INCLUDES = \ - -I$(top_srcdir) \ - -I$(top_builddir) \ - -I./scsi \ -+ -I./cam \ - -I./md5 \ - -DBRASERO_LOCALE_DIR=\""$(prefix)/$(DATADIRNAME)/locale"\" \ - -DBRASERO_PREFIX=\"$(prefix)\" \ -@@ -327,9 +409,30 @@ INCLUDES = \ - - CLEANFILES = $(RECMARSHALFILES) - AM_CFLAGS = -g --EXTRA_DIST = cd-content-marshal.list -+CAMFILES = cam/cam-cdrom.c \ -+ cam/freebsd_dvd_rw_utils.c \ -+ burn-medium-cam.c -+ -+SCSIFILES = scsi/scsi-command.c \ -+ scsi/scsi-get-configuration.c \ -+ scsi/scsi-read-disc-info.c \ -+ scsi/scsi-read-toc-pma-atip.c \ -+ scsi/scsi-sense-data.c \ -+ scsi/scsi-sg.c \ -+ scsi/scsi-error.c \ -+ scsi/scsi-read-track-information.c \ -+ scsi/scsi-get-performance.c \ -+ scsi/scsi-mode-sense.c \ -+ scsi/scsi-read-capacity.c \ -+ scsi/scsi-read-disc-structure.c \ -+ scsi/scsi-read-format-capacities.c \ -+ burn-medium-scsi.c -+ -+EXTRA_DIST = cd-content-marshal.list $(CAMFILES) $(SCSIFILES) - GLIB_GENMARSHAL = `pkg-config --variable=glib_genmarshal glib-2.0` - RECMARSHALFILES = brasero-marshal.h brasero-marshal.c -+@WITH_CAM_FALSE@SCSISOURCES = $(SCSIFILES) -+@WITH_CAM_TRUE@SCSISOURCES = $(CAMFILES) - brasero_SOURCES = \ - $(RECMARSHALFILES) \ - main.c \ -@@ -435,43 +538,32 @@ brasero_SOURCES = \ - burn-iso-field.c \ - burn-iso-field.h \ - burn-medium.h \ -- burn-medium.c \ -+ cam/cam-cdrom.h \ -+ cam/freebsd_dvd_rw_utils.h \ - scsi/scsi-base.h \ -- scsi/scsi-command.c \ - scsi/scsi-command.h \ - scsi/scsi-error.h \ -- scsi/scsi-get-configuration.c \ - scsi/scsi-get-configuration.h \ - scsi/scsi-mmc1.h \ - scsi/scsi-mmc2.h \ - scsi/scsi-opcodes.h \ -- scsi/scsi-read-disc-info.c \ - scsi/scsi-read-disc-info.h \ -- scsi/scsi-read-toc-pma-atip.c \ - scsi/scsi-read-toc-pma-atip.h \ -- scsi/scsi-sense-data.c \ - scsi/scsi-sense-data.h \ -- scsi/scsi-sg.c \ - scsi/scsi-sg.h \ - scsi/scsi-utils.h \ - scsi/scsi-q-subchannel.h \ -- scsi/scsi-error.c \ -- scsi/scsi-read-track-information.c \ - scsi/scsi-read-track-information.h \ -- scsi/scsi-get-performance.c \ - scsi/scsi-get-performance.h \ - scsi/scsi-mmc3.h \ - scsi/scsi-mode-pages.h \ -- scsi/scsi-mode-sense.c \ - scsi/scsi-status-page.h \ - scsi/scsi-spc1.h \ -- scsi/scsi-read-capacity.c \ - scsi/scsi-read-capacity.h \ -- scsi/scsi-read-disc-structure.c \ - scsi/scsi-read-disc-structure.h \ - scsi/scsi-dvd-structures.h \ -- scsi/scsi-read-format-capacities.c \ - scsi/scsi-read-format-capacities.h \ -+ $(SCSISOURCES) \ - burn-debug.c \ - burn-debug.h \ - burn-track.h \ -@@ -647,7 +739,8 @@ distclean-compile: - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/burn-iso-field.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/burn-iso9660.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/burn-job.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/burn-medium.Po@am__quote@ -+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/burn-medium-cam.Po@am__quote@ -+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/burn-medium-scsi.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/burn-mkisofs-base.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/burn-plugin-manager.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/burn-plugin.Po@am__quote@ -@@ -660,7 +753,9 @@ distclean-compile: - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/burn-track.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/burn-volume.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/burn.Po@am__quote@ -+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cam-cdrom.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eggtreemultidnd.Po@am__quote@ -+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/freebsd_dvd_rw_utils.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scsi-command.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scsi-error.Po@am__quote@ -@@ -879,6 +974,34 @@ scsi-read-format-capacities.obj: scsi/sc - @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ - @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o scsi-read-format-capacities.obj `if test -f 'scsi/scsi-read-format-capacities.c'; then $(CYGPATH_W) 'scsi/scsi-read-format-capacities.c'; else $(CYGPATH_W) '$(srcdir)/scsi/scsi-read-format-capacities.c'; fi` - -+cam-cdrom.o: cam/cam-cdrom.c -+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cam-cdrom.o -MD -MP -MF $(DEPDIR)/cam-cdrom.Tpo -c -o cam-cdrom.o `test -f 'cam/cam-cdrom.c' || echo '$(srcdir)/'`cam/cam-cdrom.c -+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/cam-cdrom.Tpo $(DEPDIR)/cam-cdrom.Po -+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cam/cam-cdrom.c' object='cam-cdrom.o' libtool=no @AMDEPBACKSLASH@ -+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cam-cdrom.o `test -f 'cam/cam-cdrom.c' || echo '$(srcdir)/'`cam/cam-cdrom.c -+ -+cam-cdrom.obj: cam/cam-cdrom.c -+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cam-cdrom.obj -MD -MP -MF $(DEPDIR)/cam-cdrom.Tpo -c -o cam-cdrom.obj `if test -f 'cam/cam-cdrom.c'; then $(CYGPATH_W) 'cam/cam-cdrom.c'; else $(CYGPATH_W) '$(srcdir)/cam/cam-cdrom.c'; fi` -+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/cam-cdrom.Tpo $(DEPDIR)/cam-cdrom.Po -+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cam/cam-cdrom.c' object='cam-cdrom.obj' libtool=no @AMDEPBACKSLASH@ -+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cam-cdrom.obj `if test -f 'cam/cam-cdrom.c'; then $(CYGPATH_W) 'cam/cam-cdrom.c'; else $(CYGPATH_W) '$(srcdir)/cam/cam-cdrom.c'; fi` -+ -+freebsd_dvd_rw_utils.o: cam/freebsd_dvd_rw_utils.c -+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT freebsd_dvd_rw_utils.o -MD -MP -MF $(DEPDIR)/freebsd_dvd_rw_utils.Tpo -c -o freebsd_dvd_rw_utils.o `test -f 'cam/freebsd_dvd_rw_utils.c' || echo '$(srcdir)/'`cam/freebsd_dvd_rw_utils.c -+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/freebsd_dvd_rw_utils.Tpo $(DEPDIR)/freebsd_dvd_rw_utils.Po -+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cam/freebsd_dvd_rw_utils.c' object='freebsd_dvd_rw_utils.o' libtool=no @AMDEPBACKSLASH@ -+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o freebsd_dvd_rw_utils.o `test -f 'cam/freebsd_dvd_rw_utils.c' || echo '$(srcdir)/'`cam/freebsd_dvd_rw_utils.c -+ -+freebsd_dvd_rw_utils.obj: cam/freebsd_dvd_rw_utils.c -+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT freebsd_dvd_rw_utils.obj -MD -MP -MF $(DEPDIR)/freebsd_dvd_rw_utils.Tpo -c -o freebsd_dvd_rw_utils.obj `if test -f 'cam/freebsd_dvd_rw_utils.c'; then $(CYGPATH_W) 'cam/freebsd_dvd_rw_utils.c'; else $(CYGPATH_W) '$(srcdir)/cam/freebsd_dvd_rw_utils.c'; fi` -+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/freebsd_dvd_rw_utils.Tpo $(DEPDIR)/freebsd_dvd_rw_utils.Po -+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cam/freebsd_dvd_rw_utils.c' object='freebsd_dvd_rw_utils.obj' libtool=no @AMDEPBACKSLASH@ -+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o freebsd_dvd_rw_utils.obj `if test -f 'cam/freebsd_dvd_rw_utils.c'; then $(CYGPATH_W) 'cam/freebsd_dvd_rw_utils.c'; else $(CYGPATH_W) '$(srcdir)/cam/freebsd_dvd_rw_utils.c'; fi` -+ - mostlyclean-libtool: - -rm -f *.lo - diff --git a/sysutils/brasero/files/patch-src_brasero-ncb.h b/sysutils/brasero/files/patch-src_brasero-ncb.h deleted file mode 100644 index bd5106d64789..000000000000 --- a/sysutils/brasero/files/patch-src_brasero-ncb.h +++ /dev/null @@ -1,12 +0,0 @@ ---- src/brasero-ncb.h.orig 2008-01-02 15:01:39.000000000 -0500 -+++ src/brasero-ncb.h 2008-01-02 15:02:15.000000000 -0500 -@@ -42,6 +42,9 @@ nautilus_burn_drive_get_drive_type ((dri - #define NCB_DRIVE_GET_DEVICE(drive) \ - nautilus_burn_drive_get_device (drive) - -+#define NCB_DRIVE_GET_CRECORD_DEVICE(drive) \ -+nautilus_burn_drive_get_cdrecord_device (drive) -+ - #define NCB_DRIVE_GET_LIST(list, recorders, image) \ - { \ - NautilusBurnDriveMonitor *monitor; \ diff --git a/sysutils/brasero/files/patch-src_burn-job.c b/sysutils/brasero/files/patch-src_burn-job.c deleted file mode 100644 index c26d1bb72169..000000000000 --- a/sysutils/brasero/files/patch-src_burn-job.c +++ /dev/null @@ -1,31 +0,0 @@ ---- src/burn-job.c.orig 2008-01-02 15:00:34.000000000 -0500 -+++ src/burn-job.c 2008-01-02 15:01:15.000000000 -0500 -@@ -1300,6 +1300,28 @@ brasero_job_get_device (BraseroJob *self - } - - BraseroBurnResult -+brasero_job_get_cdrecord_device (BraseroJob *self, gchar **device) -+{ -+ BraseroBurnSession *session; -+ NautilusBurnDrive *drive; -+ BraseroJobPrivate *priv; -+ const gchar *path; -+ -+ BRASERO_JOB_DEBUG (self); -+ -+ g_return_val_if_fail (device != NULL, BRASERO_BURN_ERR); -+ -+ priv = BRASERO_JOB_PRIVATE (self); -+ session = brasero_task_ctx_get_session (priv->ctx); -+ -+ drive = brasero_burn_session_get_burner (session); -+ path = NCB_DRIVE_GET_CRECORD_DEVICE (drive); -+ *device = g_strdup (path); -+ -+ return BRASERO_BURN_OK; -+} -+ -+BraseroBurnResult - brasero_job_get_media (BraseroJob *self, BraseroMedia *media) - { - BraseroBurnSession *session; diff --git a/sysutils/brasero/files/patch-src_burn-job.h b/sysutils/brasero/files/patch-src_burn-job.h deleted file mode 100644 index d73d8e6e2d99..000000000000 --- a/sysutils/brasero/files/patch-src_burn-job.h +++ /dev/null @@ -1,12 +0,0 @@ ---- src/burn-job.h.orig 2008-01-02 14:59:55.000000000 -0500 -+++ src/burn-job.h 2008-01-02 15:00:13.000000000 -0500 -@@ -148,6 +148,9 @@ BraseroBurnResult - brasero_job_get_device (BraseroJob *job, gchar **device); - - BraseroBurnResult -+brasero_job_get_cdrecord_device (BraseroJob *job, gchar **device); -+ -+BraseroBurnResult - brasero_job_get_media (BraseroJob *job, BraseroMedia *media); - - BraseroBurnResult diff --git a/sysutils/brasero/files/patch-src_burn-medium-cam.c b/sysutils/brasero/files/patch-src_burn-medium-cam.c deleted file mode 100644 index 2db8d00ca985..000000000000 --- a/sysutils/brasero/files/patch-src_burn-medium-cam.c +++ /dev/null @@ -1,1928 +0,0 @@ ---- src/burn-medium-cam.c.orig 2008-02-06 01:53:39.000000000 -0500 -+++ src/burn-medium-cam.c 2008-02-06 01:56:01.000000000 -0500 -@@ -0,0 +1,1925 @@ -+/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -+/* -+ * brasero -+ * Copyright (C) Philippe Rouquier 2007 <bonfire-app@wanadoo.fr> -+ * Joe Marcus Clarke 2007 <marcus@FreeBSD.org> -+ * -+ * brasero is free software. -+ * -+ * You may redistribute it and/or modify it under the terms of the -+ * GNU General Public License, as published by the Free Software -+ * Foundation; either version 2 of the License, or (at your option) -+ * any later version. -+ * -+ * brasero is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -+ * See the GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with brasero. If not, write to: -+ * The Free Software Foundation, Inc., -+ * 51 Franklin Street, Fifth Floor -+ * Boston, MA 02110-1301, USA. -+ */ -+ -+#ifdef HAVE_CONFIG_H -+# include <config.h> -+#endif -+ -+#include <sys/types.h> -+#include <sys/stat.h> -+#include <stdlib.h> -+#include <fcntl.h> -+#include <errno.h> -+ -+#include <glib.h> -+#include <glib/gi18n-lib.h> -+ -+#include <nautilus-burn-drive.h> -+ -+#include "burn-basics.h" -+#include "burn-debug.h" -+#include "burn-medium.h" -+#include "cam-cdrom.h" -+#include "scsi-read-format-capacities.h" -+#include "scsi-read-toc-pma-atip.h" -+#include "scsi-get-configuration.h" -+#include "scsi-q-subchannel.h" -+#include "scsi-utils.h" -+#include "freebsd_dvd_rw_utils.h" -+#include "burn-volume.h" -+#include "brasero-ncb.h" -+ -+const gchar *icons [] = { "gnome-dev-removable", -+ "gnome-dev-cdrom", -+ "gnome-dev-disc-cdr", -+ "gnome-dev-disc-cdrw", -+ "gnome-dev-disc-dvdrom", -+ "gnome-dev-disc-dvdr", -+ "gnome-dev-disc-dvdrw", -+ "gnome-dev-disc-dvdr-plus", -+ "gnome-dev-disc-dvdram", -+ NULL }; -+const gchar *types [] = { N_("file"), -+ N_("CDROM"), -+ N_("CD-R"), -+ N_("CD-RW"), -+ N_("DVDROM"), -+ N_("DVD-R"), -+ N_("DVD-RW"), -+ N_("DVD+R"), -+ N_("DVD+RW"), -+ N_("DVD+R dual layer"), -+ N_("DVD+RW dual layer"), -+ N_("DVD-R dual layer"), -+ N_("DVD-RAM"), -+ N_("Blu-ray disc"), -+ N_("Writable Blu-ray disc"), -+ N_("Rewritable Blu-ray disc"), -+ NULL }; -+ -+ -+typedef struct _BraseroMediumPrivate BraseroMediumPrivate; -+struct _BraseroMediumPrivate -+{ -+ gint retry_id; -+ -+ GSList * tracks; -+ -+ const gchar *type; -+ const gchar *icon; -+ -+ gint max_rd; -+ gint max_wrt; -+ -+ gint *rd_speeds; -+ gint *wr_speeds; -+ -+ gint64 block_num; -+ gint64 block_size; -+ -+ guint64 next_wr_add; -+ BraseroMedia info; -+ NautilusBurnDrive * drive; -+}; -+ -+#define BRASERO_MEDIUM_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), BRASERO_TYPE_MEDIUM, BraseroMediumPrivate)) -+ -+enum -+{ -+ PROP_0, -+ PROP_DRIVE -+}; -+ -+static GObjectClass* parent_class = NULL; -+ -+const gchar * -+brasero_medium_get_type_string (BraseroMedium *medium) -+{ -+ BraseroMediumPrivate *priv; -+ -+ priv = BRASERO_MEDIUM_PRIVATE (medium); -+ return priv->type; -+} -+ -+const gchar * -+brasero_medium_get_icon (BraseroMedium *medium) -+{ -+ BraseroMediumPrivate *priv; -+ -+ priv = BRASERO_MEDIUM_PRIVATE (medium); -+ return priv->icon; -+} -+ -+BraseroMedia -+brasero_medium_get_status (BraseroMedium *medium) -+{ -+ BraseroMediumPrivate *priv; -+ -+ priv = BRASERO_MEDIUM_PRIVATE (medium); -+ return priv->info; -+} -+ -+GSList * -+brasero_medium_get_tracks (BraseroMedium *medium) -+{ -+ BraseroMediumPrivate *priv; -+ -+ priv = BRASERO_MEDIUM_PRIVATE (medium); -+ return g_slist_copy (priv->tracks); -+} -+ -+gboolean -+brasero_medium_get_last_data_track_address (BraseroMedium *medium, -+ gint64 *byte, -+ gint64 *sector) -+{ -+ GSList *iter; -+ BraseroMediumPrivate *priv; -+ BraseroMediumTrack *track = NULL; -+ -+ priv = BRASERO_MEDIUM_PRIVATE (medium); -+ -+ for (iter = priv->tracks; iter; iter = iter->next) { -+ BraseroMediumTrack *current; -+ -+ current = iter->data; -+ if (current->type & BRASERO_MEDIUM_TRACK_DATA) -+ track = current; -+ } -+ -+ if (!track) { -+ if (byte) -+ *byte = -1; -+ if (sector) -+ *sector = -1; -+ return FALSE; -+ } -+ -+ if (byte) -+ *byte = track->start * priv->block_size; -+ -+ if (sector) -+ *sector = track->start; -+ -+ return TRUE; -+} -+ -+gboolean -+brasero_medium_get_last_data_track_space (BraseroMedium *medium, -+ gint64 *size, -+ gint64 *blocks) -+{ -+ GSList *iter; -+ BraseroMediumPrivate *priv; -+ BraseroMediumTrack *track = NULL; -+ -+ priv = BRASERO_MEDIUM_PRIVATE (medium); -+ -+ for (iter = priv->tracks; iter; iter = iter->next) { -+ BraseroMediumTrack *current; -+ -+ current = iter->data; -+ if (current->type & BRASERO_MEDIUM_TRACK_DATA) -+ track = current; -+ } -+ -+ if (!track) { -+ if (size) -+ *size = -1; -+ if (blocks) -+ *blocks = -1; -+ return FALSE; -+ } -+ -+ if (size) -+ *size = track->blocks_num * priv->block_size; -+ if (blocks) -+ *blocks = track->blocks_num; -+ -+ return TRUE; -+} -+ -+guint -+brasero_medium_get_track_num (BraseroMedium *medium) -+{ -+ guint retval = 0; -+ GSList *iter; -+ BraseroMediumPrivate *priv; -+ -+ priv = BRASERO_MEDIUM_PRIVATE (medium); -+ for (iter = priv->tracks; iter; iter = iter->next) { -+ BraseroMediumTrack *current; -+ -+ current = iter->data; -+ if (current->type & BRASERO_MEDIUM_TRACK_LEADOUT) -+ break; -+ -+ retval ++; -+ } -+ -+ return retval; -+} -+ -+static BraseroMediumTrack * -+brasero_medium_get_track (BraseroMedium *medium, -+ guint num) -+{ -+ guint i = 1; -+ GSList *iter; -+ BraseroMediumPrivate *priv; -+ -+ priv = BRASERO_MEDIUM_PRIVATE (medium); -+ -+ for (iter = priv->tracks; iter; iter = iter->next) { -+ BraseroMediumTrack *current; -+ -+ current = iter->data; -+ if (current->type == BRASERO_MEDIUM_TRACK_LEADOUT) -+ break; -+ -+ if (i == num) -+ return current; -+ -+ i++; -+ } -+ -+ return NULL; -+} -+ -+gboolean -+brasero_medium_get_track_space (BraseroMedium *medium, -+ guint num, -+ gint64 *size, -+ gint64 *blocks) -+{ -+ BraseroMediumPrivate *priv; -+ BraseroMediumTrack *track; -+ -+ priv = BRASERO_MEDIUM_PRIVATE (medium); -+ -+ track = brasero_medium_get_track (medium, num); -+ if (!track) { -+ if (size) -+ *size = -1; -+ if (blocks) -+ *blocks = -1; -+ return FALSE; -+ } -+ -+ if (size) -+ *size = track->blocks_num * priv->block_size; -+ if (blocks) -+ *blocks = track->blocks_num; -+ -+ return TRUE; -+} -+ -+gboolean -+brasero_medium_get_track_address (BraseroMedium *medium, -+ guint num, -+ gint64 *byte, -+ gint64 *sector) -+{ -+ BraseroMediumPrivate *priv; -+ BraseroMediumTrack *track; -+ -+ priv = BRASERO_MEDIUM_PRIVATE (medium); -+ -+ track = brasero_medium_get_track (medium, num); -+ if (!track) { -+ if (byte) -+ *byte = -1; -+ if (sector) -+ *sector = -1; -+ return FALSE; -+ } -+ -+ if (byte) -+ *byte = track->start * priv->block_size; -+ if (sector) -+ *sector = track->start; -+ -+ return TRUE; -+} -+ -+gint64 -+brasero_medium_get_next_writable_address (BraseroMedium *medium) -+{ -+ BraseroMediumPrivate *priv; -+ -+ priv = BRASERO_MEDIUM_PRIVATE (medium); -+ return priv->next_wr_add; -+} -+ -+gint64 -+brasero_medium_get_max_write_speed (BraseroMedium *medium) -+{ -+ BraseroMediumPrivate *priv; -+ -+ priv = BRASERO_MEDIUM_PRIVATE (medium); -+ return priv->max_wrt * 1024; -+} -+ -+/** -+ * NOTEs about the following functions: -+ * for all closed media (including ROM types) capacity == size of data and -+ * should be the size of all data on the disc, free space is 0 -+ * for all blank -R types capacity == free space and size of data == 0 -+ * for all multisession -R types capacity == free space since having the real -+ * capacity of the media would be useless as we can only use this type of media -+ * to append more data -+ * for all -RW types capacity = free space + size of data. Here they can be -+ * appended (use free space) or rewritten (whole capacity). -+ * -+ * Usually: -+ * the free space is the size of the leadout track -+ * the size of data is the sum of track sizes (excluding leadout) -+ * the capacity depends on the media: -+ * for closed discs == sum of track sizes -+ * for multisession discs == free space (leadout size) -+ * for blank discs == (free space) leadout size -+ * for rewritable/blank == use SCSI functions to get capacity (see below) -+ * -+ * In fact we should really need the size of data in DVD+/-RW cases since the -+ * session is always equal to the size of the disc. -+ */ -+ -+void -+brasero_medium_get_data_size (BraseroMedium *medium, -+ gint64 *size, -+ gint64 *blocks) -+{ -+ GSList *iter; -+ BraseroMediumPrivate *priv; -+ BraseroMediumTrack *track = NULL; -+ -+ priv = BRASERO_MEDIUM_PRIVATE (medium); -+ -+ if (!priv->tracks) { -+ /* that's probably because it wasn't possible to retrieve info */ -+ if (size) -+ *size = 0; -+ -+ if (blocks) -+ *blocks = 0; -+ -+ return; -+ } -+ -+ for (iter = priv->tracks; iter; iter = iter->next) { -+ BraseroMediumTrack *tmp; -+ -+ tmp = iter->data; -+ if (tmp->type == BRASERO_MEDIUM_TRACK_LEADOUT) -+ break; -+ -+ track = iter->data; -+ } -+ -+ if (size) -+ *size = track ? (track->start + track->blocks_num) * priv->block_size: 0; -+ -+ if (blocks) -+ *blocks = track ? track->start + track->blocks_num: 0; -+} -+ -+void -+brasero_medium_get_free_space (BraseroMedium *medium, -+ gint64 *size, -+ gint64 *blocks) -+{ -+ GSList *iter; -+ BraseroMediumPrivate *priv; -+ BraseroMediumTrack *track = NULL; -+ -+ priv = BRASERO_MEDIUM_PRIVATE (medium); -+ -+ if (!priv->tracks) { -+ /* that's probably because it wasn't possible to retrieve info. -+ * maybe it also happens with unformatted DVD+RW */ -+ -+ if (priv->info & BRASERO_MEDIUM_CLOSED) { -+ if (size) -+ *size = 0; -+ -+ if (blocks) -+ *blocks = 0; -+ } -+ else { -+ if (size) -+ *size = priv->block_num * priv->block_size; -+ -+ if (blocks) -+ *blocks = priv->block_num; -+ } -+ -+ return; -+ } -+ -+ for (iter = priv->tracks; iter; iter = iter->next) { -+ BraseroMediumTrack *tmp; -+ -+ tmp = iter->data; -+ if (tmp->type == BRASERO_MEDIUM_TRACK_LEADOUT) { -+ track = iter->data; -+ break; -+ } -+ } -+ -+ if (size) { -+ if (!track) { -+ /* No leadout was found so the disc is probably closed: -+ * no free space left. */ -+ *size = 0; -+ } -+ else if (track->blocks_num <= 0) -+ *size = (priv->block_num - track->start) * priv->block_size; -+ else -+ *size = track->blocks_num * priv->block_size; -+ } -+ -+ if (blocks) { -+ if (!track) { -+ /* No leadout was found so the disc is probably closed: -+ * no free space left. */ -+ *blocks = 0; -+ } -+ else if (track->blocks_num <= 0) -+ *blocks = priv->block_num - track->blocks_num; -+ else -+ *blocks = track->blocks_num; -+ } -+} -+ -+void -+brasero_medium_get_capacity (BraseroMedium *medium, -+ gint64 *size, -+ gint64 *blocks) -+{ -+ BraseroMediumPrivate *priv; -+ -+ priv = BRASERO_MEDIUM_PRIVATE (medium); -+ -+ if (priv->info & BRASERO_MEDIUM_REWRITABLE) { -+ if (size) -+ *size = priv->block_num * priv->block_size; -+ -+ if (blocks) -+ *blocks = priv->block_num; -+ } -+ else if (priv->info & BRASERO_MEDIUM_CLOSED) -+ brasero_medium_get_data_size (medium, size, blocks); -+ else -+ brasero_medium_get_free_space (medium, size, blocks); -+} -+ -+/** -+ * Function to retrieve the capacity of a media -+ */ -+ -+static BraseroBurnResult -+brasero_medium_get_capacity_CD_RW (BraseroMedium *self, -+ BRASEROCDROM *cdrom) -+{ -+ unsigned char *atip_data = NULL; -+ unsigned char *desc; -+ BraseroMediumPrivate *priv; -+ int result; -+ int size; -+ -+ priv = BRASERO_MEDIUM_PRIVATE (self); -+ -+ BRASERO_BURN_LOG ("Retrieving capacity from atip"); -+ -+ result = brasero_cdrom_read_atip (cdrom, &atip_data); -+ -+ if (result != 0) { -+ g_free (atip_data); -+ -+ BRASERO_BURN_LOG ("READ ATIP failed (scsi error)"); -+ return BRASERO_BURN_ERR; -+ } -+ -+ size = (atip_data[0] << 8 | atip_data[1]) - 2; -+ -+ /* check the size of the structure: it must be at least 16 bytes long */ -+ if (size < 16) { -+ if (size) -+ g_free (atip_data); -+ -+ BRASERO_BURN_LOG ("READ ATIP failed (wrong size)"); -+ return BRASERO_BURN_ERR; -+ } -+ -+ desc = atip_data + 8; -+ -+ priv->block_num = BRASERO_MSF_TO_LBA (desc[8], desc[9], desc[10]); -+ g_free (atip_data); -+ -+ BRASERO_BURN_LOG ("Format capacity %lli %lli", -+ priv->block_num, -+ priv->block_size); -+ -+ return BRASERO_BURN_OK; -+} -+ -+static BraseroBurnResult -+brasero_medium_get_capacity_DVD_RW (BraseroMedium *self, -+ BRASEROCDROM *cdrom) -+{ -+ unsigned char *hdr = NULL; -+ unsigned char *current; -+ BraseroMediumPrivate *priv; -+ int result; -+ -+ BRASERO_BURN_LOG ("Retrieving format capacity"); -+ -+ priv = BRASERO_MEDIUM_PRIVATE (self); -+ result = brasero_cdrom_read_format_capacities (cdrom, &hdr); -+ if (result != 0) { -+ g_free (hdr); -+ -+ BRASERO_BURN_LOG ("READ FORMAT CAPACITIES failed"); -+ return BRASERO_BURN_ERR; -+ } -+ -+ current = hdr + 5; -+ -+ /* see if the media is already formatted */ -+ if ((current[4] & 3) != BRASERO_SCSI_DESC_FORMATTED) { -+ int i, max; -+ unsigned char *desc; -+ -+ max = (hdr[4] - 8) / 8; -+ -+ desc = hdr + 5; -+ for (i = 0; i < max; i ++, desc += 8) { -+ /* search for the correct descriptor */ -+ if (BRASERO_MEDIUM_IS (priv->info, BRASERO_MEDIUM_DVDRW_PLUS)) { -+ if ((desc[4] >> 2) == BRASERO_SCSI_DVDRW_PLUS) { -+ priv->block_num = (desc[0] << 24 | desc[1] << 16 | desc[2] << 8 | desc[3]); -+ priv->block_size = (desc[5] << 16 | desc[6] << 8 | desc[7]); -+ -+ /* that can happen */ -+ if (!priv->block_size) -+ priv->block_size = 2048; -+ break; -+ } -+ } -+ else if ((desc[4] >> 2) == BRASERO_SCSI_BLOCK_SIZE_DEFAULT_AND_DB) { -+ priv->block_num = (desc[0] << 24 | desc[1] << 16 | desc[2] << 8 | desc[3]); -+ priv->block_size = (desc[5] << 16 | desc[6] << 8 | desc[7]); -+ break; -+ } -+ } -+ } -+ else { -+ priv->block_num = (current[0] << 24 | current[1] << 16 | current[2] << 8 | current[3]); -+ priv->block_size = (current[5] << 16 | current[6] << 8 | current[7]); -+ } -+ -+ BRASERO_BURN_LOG ("Format capacity %lli %lli", -+ priv->block_num, -+ priv->block_size); -+ -+ g_free (hdr); -+ return BRASERO_BURN_OK; -+} -+ -+static BraseroBurnResult -+brasero_medium_get_capacity_by_type (BraseroMedium *self, -+ BRASEROCDROM *cdrom) -+{ -+ BraseroMediumPrivate *priv; -+ -+ priv = BRASERO_MEDIUM_PRIVATE (self); -+ -+ priv->block_size = 2048; -+ -+ if (!(priv->info & BRASERO_MEDIUM_REWRITABLE)) -+ return BRASERO_BURN_OK; -+ -+ if (priv->info & BRASERO_MEDIUM_CD) -+ brasero_medium_get_capacity_CD_RW (self, cdrom); -+ else -+ brasero_medium_get_capacity_DVD_RW (self, cdrom); -+ -+ return BRASERO_BURN_OK; -+} -+ -+/** -+ * Functions to retrieve the speed -+ */ -+ -+static BraseroBurnResult -+brasero_medium_get_speed_mmc3 (BraseroMedium *self, -+ BRASEROCDROM *cdrom) -+{ -+ int size; -+ int num_desc, i; -+ gint max_rd, max_wrt; -+ int result; -+ BraseroMediumPrivate *priv; -+ unsigned char *desc; -+ unsigned char *wrt_perf = NULL; -+ -+ BRASERO_BURN_LOG ("Retrieving speed (Get Performance)"); -+ -+ /* NOTE: this only work if there is RT streaming feature with -+ * wspd bit set to 1. At least an MMC3 drive. */ -+ priv = BRASERO_MEDIUM_PRIVATE (self); -+ result = brasero_cdrom_get_performance_wrt_spd_desc (cdrom, &wrt_perf); -+ -+ if (result != 0) { -+ g_free (wrt_perf); -+ -+ BRASERO_BURN_LOG ("GET PERFORMANCE failed"); -+ return BRASERO_BURN_ERR; -+ } -+ -+ size = 4 + (wrt_perf[0] << 24 | wrt_perf[1] << 16 | wrt_perf[2] << 8 | wrt_perf[3]); -+ -+ num_desc = (size - 8) / 16; -+ -+ if (num_desc <= 0) -+ goto end; -+ -+ priv->rd_speeds = g_new0 (gint, num_desc + 1); -+ priv->wr_speeds = g_new0 (gint, num_desc + 1); -+ -+ max_rd = 0; -+ max_wrt = 0; -+ -+ desc = wrt_perf + 8; -+ for (i = 0; i < num_desc; i ++, desc += 16) { -+ priv->rd_speeds [i] = (desc[8] << 24 | desc[9] << 16 | desc[10] << 8 || desc[11]); -+ priv->wr_speeds [i] = (desc[12] << 24 | desc[13] << 16 | desc[14] << 8 | desc[15]); -+ -+ max_rd = MAX (max_rd, priv->rd_speeds [i]); -+ max_wrt = MAX (max_wrt, priv->wr_speeds [i]); -+ } -+ -+ priv->max_rd = max_rd; -+ priv->max_wrt = max_wrt; -+ -+end: -+ -+ g_free (wrt_perf); -+ -+ /* strangely there are so drives (I know one case) which support this -+ * function but don't report any speed. So if our top speed is 0 then -+ * use the other way to get the speed. It was a Teac */ -+ if (!priv->max_wrt) -+ return BRASERO_BURN_ERR; -+ -+ return BRASERO_BURN_OK; -+} -+ -+static BraseroBurnResult -+brasero_medium_get_page_2A_write_speed_desc (BraseroMedium *self, -+ BRASEROCDROM *cdrom) -+{ -+ BraseroMediumPrivate *priv; -+ int result; -+ char *wspeeds; -+ int rspeed, wspeed; -+ -+ BRASERO_BURN_LOG ("Retrieving speed (2A speeds)"); -+ -+ priv = BRASERO_MEDIUM_PRIVATE (self); -+ result = brasero_cdrom_get_read_write_speed (cdrom, &rspeed, &wspeed, &wspeeds); -+ -+ if (result != 0) { -+ BRASERO_BURN_LOG ("MODE SENSE failed"); -+ return BRASERO_BURN_ERR; -+ } -+ -+ if (wspeeds != NULL) { -+ char **speedv; -+ int i; -+ -+ speedv = g_strsplit_set (wspeeds, ",", 0); -+ g_free (wspeeds); -+ priv->wr_speeds = g_new0 (gint, g_strv_length (speedv) + 1); -+ for (i = 0; speedv[i] != NULL; i++) { -+ if (*(speedv[i])) -+ priv->wr_speeds[i] = atoi (speedv[i]); -+ } -+ g_strfreev (speedv); -+ } -+ -+ priv->max_wrt = wspeed; -+ priv->max_rd = rspeed; -+ -+ return BRASERO_BURN_OK; -+} -+ -+static BraseroBurnResult -+brasero_medium_get_page_2A_max_speed (BraseroMedium *self, -+ BRASEROCDROM *cdrom) -+{ -+ BraseroMediumPrivate *priv; -+ int result; -+ int rspeed, wspeed; -+ char *wspeeds; -+ -+ BRASERO_BURN_LOG ("Retrieving speed (2A max)"); -+ -+ priv = BRASERO_MEDIUM_PRIVATE (self); -+ -+ result = brasero_cdrom_get_read_write_speed (cdrom, &rspeed, &wspeed, &wspeeds); -+ -+ if (result != 0) { -+ BRASERO_BURN_LOG ("MODE SENSE failed"); -+ return BRASERO_BURN_ERR; -+ } -+ -+ priv->max_rd = rspeed; -+ priv->max_wrt = wspeed; -+ -+ g_free (wspeeds); -+ -+ return BRASERO_BURN_OK; -+} -+ -+static BraseroBurnResult -+brasero_medium_get_medium_type (BraseroMedium *self, -+ BRASEROCDROM *cdrom) -+{ -+ unsigned char *hdr = NULL; -+ unsigned char *confdesc; -+ BraseroMediumPrivate *priv; -+ BraseroBurnResult result; -+ int profile; -+ int res; -+ -+ BRASERO_BURN_LOG ("Retrieving media profile"); -+ -+ priv = BRASERO_MEDIUM_PRIVATE (self); -+ res = brasero_cdrom_get_configuration_feature (cdrom, -+ BRASERO_SCSI_FEAT_REAL_TIME_STREAM, -+ &hdr); -+ if (res != 0) { -+ unsigned char *data = NULL; -+ unsigned char *desc; -+ int size; -+ -+ BRASERO_BURN_LOG ("GET CONFIGURATION failed"); -+ -+ /* This could be a MMC1 drive since this command was -+ * introduced in MMC2 and is supported onward. So it -+ * has to be a CD (R/RW). The rest of the information -+ * will be provided by read_disc_information. */ -+ -+ /* The only thing here left to determine is if that's a WRITABLE -+ * or a REWRITABLE. To determine that information, we need to -+ * read TocPmaAtip. It if fails that's a ROM, if it succeeds. -+ */ -+ res = brasero_cdrom_read_atip (cdrom, &data); -+ if (res != 0) { -+ /* CDROM */ -+ priv->info = BRASERO_MEDIUM_CDROM; -+ priv->type = types [1]; -+ priv->icon = icons [1]; -+ } -+ else { -+ /* check the size of the structure: it must be at least 8 bytes long */ -+ size = (data[0] << 8 | data[1]) - 2; -+ if (size < 8) { -+ if (size) -+ g_free (data); -+ -+ BRASERO_BURN_LOG ("READ ATIP failed (wrong size)"); -+ return BRASERO_BURN_ERR; -+ } -+ -+ desc = data + 4; -+ -+ if ((desc[2] >> 6) & 1) { -+ /* CDRW */ -+ priv->info = BRASERO_MEDIUM_CDRW; -+ priv->type = types [3]; -+ priv->icon = icons [3]; -+ } -+ else { -+ /* CDR */ -+ priv->info = BRASERO_MEDIUM_CDR; -+ priv->type = types [2]; -+ priv->icon = icons [2]; -+ } -+ -+ g_free (data); -+ } -+ -+ /* retrieve the speed */ -+ result = brasero_medium_get_page_2A_max_speed (self, cdrom); -+ return result; -+ } -+ -+ profile = (hdr[6] << 8 | hdr[7]); -+ -+ switch (profile) { -+ case BRASERO_SCSI_PROF_CDROM: -+ priv->info = BRASERO_MEDIUM_CDROM; -+ priv->type = types [1]; -+ priv->icon = icons [1]; -+ break; -+ -+ case BRASERO_SCSI_PROF_CDR: -+ priv->info = BRASERO_MEDIUM_CDR; -+ priv->type = types [2]; -+ priv->icon = icons [2]; -+ break; -+ -+ case BRASERO_SCSI_PROF_CDRW: -+ priv->info = BRASERO_MEDIUM_CDRW; -+ priv->type = types [3]; -+ priv->icon = icons [3]; -+ break; -+ -+ case BRASERO_SCSI_PROF_DVD_ROM: -+ priv->info = BRASERO_MEDIUM_DVD_ROM; -+ priv->type = types [4]; -+ priv->icon = icons [4]; -+ break; -+ -+ case BRASERO_SCSI_PROF_DVD_R: -+ priv->info = BRASERO_MEDIUM_DVDR; -+ priv->type = types [5]; -+ priv->icon = icons [5]; -+ break; -+ -+ case BRASERO_SCSI_PROF_DVD_RW_RESTRICTED: -+ priv->info = BRASERO_MEDIUM_DVDRW_RESTRICTED; -+ priv->type = types [6]; -+ priv->icon = icons [6]; -+ break; -+ -+ case BRASERO_SCSI_PROF_DVD_RW_SEQUENTIAL: -+ priv->info = BRASERO_MEDIUM_DVDRW; -+ priv->type = types [6]; -+ priv->icon = icons [6]; -+ break; -+ -+ case BRASERO_SCSI_PROF_DVD_R_PLUS: -+ priv->info = BRASERO_MEDIUM_DVDR_PLUS; -+ priv->type = types [7]; -+ priv->icon = icons [7]; -+ break; -+ -+ case BRASERO_SCSI_PROF_DVD_RW_PLUS: -+ priv->info = BRASERO_MEDIUM_DVDRW_PLUS; -+ priv->type = types [8]; -+ priv->icon = icons [7]; -+ break; -+ -+ /* WARNING: these types are recognized, no more */ -+ case BRASERO_SCSI_PROF_DVD_R_PLUS_DL: -+ priv->info = BRASERO_MEDIUM_DVDR_PLUS_DL; -+ priv->type = types [9]; -+ priv->icon = icons [7]; -+ break; -+ -+ case BRASERO_SCSI_PROF_DVD_RW_PLUS_DL: -+ priv->info = BRASERO_MEDIUM_DVDRW_PLUS_DL; -+ priv->type = types [10]; -+ priv->icon = icons [7]; -+ break; -+ -+ case BRASERO_SCSI_PROF_DVD_R_DL_SEQUENTIAL: -+ priv->info = BRASERO_MEDIUM_DVDR_DL; -+ priv->type = types [11]; -+ priv->icon = icons [5]; -+ break; -+ -+ case BRASERO_SCSI_PROF_DVD_R_DL_JUMP: -+ priv->info = BRASERO_MEDIUM_DVDR_JUMP_DL; -+ priv->type = types [11]; -+ priv->icon = icons [5]; -+ break; -+ -+ case BRASERO_SCSI_PROF_DVD_RAM: -+ priv->info = BRASERO_MEDIUM_DVD_RAM; -+ priv->type = types [12]; -+ priv->icon = icons [8]; -+ break; -+ -+ case BRASERO_SCSI_PROF_BD_ROM: -+ priv->info = BRASERO_MEDIUM_BD_ROM; -+ priv->type = types [13]; -+ priv->icon = icons [4]; -+ break; -+ -+ case BRASERO_SCSI_PROF_BR_R_SEQUENTIAL: -+ priv->info = BRASERO_MEDIUM_BDR; -+ priv->type = types [14]; -+ priv->icon = icons [5]; -+ break; -+ -+ case BRASERO_SCSI_PROF_BR_R_RANDOM: -+ priv->info = BRASERO_MEDIUM_BDR_RANDOM; -+ priv->type = types [14]; -+ priv->icon = icons [5]; -+ break; -+ -+ case BRASERO_SCSI_PROF_BD_RW: -+ priv->info = BRASERO_MEDIUM_BDRW; -+ priv->type = types [15]; -+ priv->icon = icons [6]; -+ break; -+ -+ case BRASERO_SCSI_PROF_NON_REMOVABLE: -+ case BRASERO_SCSI_PROF_REMOVABLE: -+ case BRASERO_SCSI_PROF_MO_ERASABLE: -+ case BRASERO_SCSI_PROF_MO_WRITE_ONCE: -+ case BRASERO_SCSI_PROF_MO_ADVANCED_STORAGE: -+ case BRASERO_SCSI_PROF_DDCD_ROM: -+ case BRASERO_SCSI_PROF_DDCD_R: -+ case BRASERO_SCSI_PROF_DDCD_RW: -+ case BRASERO_SCSI_PROF_HD_DVD_ROM: -+ case BRASERO_SCSI_PROF_HD_DVD_R: -+ case BRASERO_SCSI_PROF_HD_DVD_RAM: -+ priv->info = BRASERO_MEDIUM_UNSUPPORTED; -+ priv->icon = icons [0]; -+ g_free (hdr); -+ return BRASERO_BURN_NOT_SUPPORTED; -+ } -+ -+ confdesc = hdr + 8; -+ -+ /* try all SCSI functions to get write/read speeds in order */ -+ if (confdesc[4] >= 4) { -+ unsigned char *stream; -+ -+ /* means it's at least an MMC3 drive */ -+ stream = confdesc + 5; -+ if ((stream[0] >> 1) & 1) { -+ result = brasero_medium_get_speed_mmc3 (self, cdrom); -+ if (result == BRASERO_BURN_OK) -+ goto end; -+ } -+ -+ if ((stream[0] >> 2) & 1) { -+ result = brasero_medium_get_page_2A_write_speed_desc (self, cdrom); -+ if (result == BRASERO_BURN_OK) -+ goto end; -+ } -+ } -+ -+ /* fallback for speeds */ -+ result = brasero_medium_get_page_2A_max_speed (self, cdrom); -+ -+end: -+ -+ g_free (hdr); -+ -+ if (result != BRASERO_BURN_OK) -+ return result; -+ -+ return BRASERO_BURN_OK; -+} -+ -+static BraseroBurnResult -+brasero_medium_get_css_feature (BraseroMedium *self, -+ BRASEROCDROM *cdrom) -+{ -+ unsigned char *hdr = NULL; -+ BraseroMediumPrivate *priv; -+ int result; -+ int size; -+ -+ priv = BRASERO_MEDIUM_PRIVATE (self); -+ -+ BRASERO_BURN_LOG ("Testing for Css encrypted media"); -+ result = brasero_cdrom_get_configuration_feature (cdrom, -+ BRASERO_SCSI_FEAT_DVD_CSS, -+ &hdr); -+ if (result != 0) { -+ g_free (hdr); -+ -+ BRASERO_BURN_LOG ("GET CONFIGURATION failed"); -+ return BRASERO_BURN_ERR; -+ } -+ -+ size = 4 + (hdr[0] << 24 | hdr[1] << 16 | hdr[2] << 8 | hdr[3]); -+ -+ if (size < 9 || hdr[12] < 4) { -+ g_free (hdr); -+ return BRASERO_BURN_OK; -+ } -+ -+ /* here we just need to see if this feature is current or not */ -+ if (hdr[11] & 1) { -+ priv->info |= BRASERO_MEDIUM_PROTECTED; -+ BRASERO_BURN_LOG ("media is Css protected"); -+ } -+ -+ g_free (hdr); -+ return BRASERO_BURN_OK; -+} -+ -+/** -+ * Functions to get information about disc contents -+ */ -+ -+static void -+brasero_medium_set_track_type (BraseroMedium *self, -+ BraseroMediumTrack *track, -+ guchar control) -+{ -+ BraseroMediumPrivate *priv; -+ -+ priv = BRASERO_MEDIUM_PRIVATE (self); -+ -+ if (control & BRASERO_SCSI_TRACK_COPY) -+ track->type |= BRASERO_MEDIUM_TRACK_COPY; -+ -+ if (!(control & BRASERO_SCSI_TRACK_DATA)) { -+ track->type |= BRASERO_MEDIUM_TRACK_AUDIO; -+ priv->info |= BRASERO_MEDIUM_HAS_AUDIO; -+ -+ if (control & BRASERO_SCSI_TRACK_PREEMP) -+ track->type |= BRASERO_MEDIUM_TRACK_PREEMP; -+ -+ if (control & BRASERO_SCSI_TRACK_4_CHANNELS) -+ track->type |= BRASERO_MEDIUM_TRACK_4_CHANNELS; -+ } -+ else { -+ track->type |= BRASERO_MEDIUM_TRACK_DATA; -+ priv->info |= BRASERO_MEDIUM_HAS_DATA; -+ -+ if (control & BRASERO_SCSI_TRACK_DATA_INCREMENTAL) -+ track->type |= BRASERO_MEDIUM_TRACK_INCREMENTAL; -+ } -+} -+ -+static BraseroBurnResult -+brasero_medium_track_volume_size (BraseroMedium *self, -+ BraseroMediumTrack *track, -+ BRASEROCDROM *cdrom) -+{ -+ BraseroMediumPrivate *priv; -+ BraseroBurnResult res; -+ GError *error = NULL; -+ gint64 nb_blocks; -+ -+ if (!track) -+ return BRASERO_BURN_ERR; -+ -+ priv = BRASERO_MEDIUM_PRIVATE (self); -+ -+ /* This is a special case. For DVD+RW and DVD-RW in restricted -+ * mode, there is only one session that takes the whole disc size -+ * once formatted. That doesn't necessarily means they have data -+ * Note also that they are reported as complete though you can -+ * still add data (with growisofs). It is nevertheless on the -+ * condition that the fs is valid. -+ * So we check if their first and only volume is valid. -+ * That's also used when the track size is reported a 300 Kio -+ * see below */ -+ res = brasero_volume_get_size_fd (brasero_cdrom_get_fd (cdrom), -+ track->start, -+ &nb_blocks, -+ NULL); -+ if (!res) { -+ BRASERO_BURN_LOG ("Failed to retrieve the volume size: %s", -+ error && error->message ? -+ error->message:"unknown error"); -+ -+ if (error) -+ g_error_free (error); -+ return BRASERO_BURN_ERR; -+ } -+ -+ track->blocks_num = nb_blocks; -+ return BRASERO_BURN_OK; -+} -+ -+static BraseroBurnResult -+brasero_medium_track_get_info (BraseroMedium *self, -+ BraseroMediumTrack *track, -+ int track_num, -+ BRASEROCDROM *cdrom) -+{ -+ unsigned char track_info[48]; -+ BraseroMediumPrivate *priv; -+ int result; -+ int size; -+ int next_wrt; -+ -+ BRASERO_BURN_LOG ("Retrieving track information for %i", track_num); -+ -+ priv = BRASERO_MEDIUM_PRIVATE (self); -+ -+ /* at this point we know the type of the disc that's why we set the -+ * size according to this type. That may help to avoid outrange address -+ * errors. */ -+ if (BRASERO_MEDIUM_IS (priv->info, BRASERO_MEDIUM_DL|BRASERO_MEDIUM_WRITABLE)) -+ size = 48; -+ else if (BRASERO_MEDIUM_IS (priv->info, BRASERO_MEDIUM_PLUS|BRASERO_MEDIUM_WRITABLE)) -+ size = 40; -+ else -+ size = 36; -+ -+ result = brasero_cdrom_read_track_info (cdrom, track_num, track_info, size); -+ -+ if (result != 0) { -+ BRASERO_BURN_LOG ("READ TRACK INFO failed"); -+ return BRASERO_BURN_ERR; -+ } -+ -+ track->blocks_num = (track_info[24] << 24 | track_info[25] << 16 | track_info[26] << 8 | track_info[27]); -+ track->session = (track_info[33] << 8 | track_info[3]); -+ -+ /* Now here is a potential bug: we can write tracks (data or not) -+ * shorter than 300 Kio /2 sec but they will be padded to reach this -+ * floor value. That means that is blocks_num is 300 blocks that may -+ * mean that the data length on the track is actually shorter. -+ * So we read the volume descriptor. If it works, good otherwise -+ * use the old value. -+ * That's important for checksuming to have a perfect account of the -+ * data size. */ -+ if (track->blocks_num <= 300) { -+ BRASERO_BURN_LOG ("300 sectors size. Checking for real size"); -+ brasero_medium_track_volume_size (self, track, cdrom); -+ } -+ -+ next_wrt = (track_info[12] << 24 | track_info[13] << 16 | track_info[14] << 7 | track_info[15]); -+ -+ if (next_wrt); -+ priv->next_wr_add = next_wrt; -+ -+ BRASERO_BURN_LOG ("Track %i (session %i): type = %i start = %llu size = %llu", -+ track_num, -+ track->session, -+ track->type, -+ track->start, -+ track->blocks_num); -+ -+ return BRASERO_BURN_OK; -+} -+ -+/** -+ * return : -+ * 0 when it's not possible to determine (fallback to formatted toc) -+ * -1 for BCD -+ * 1 for HEX */ -+static guint -+brasero_medium_check_BCD_use (BraseroMedium *self, -+ BRASEROCDROM *cdrom, -+ unsigned char *desc, -+ guint num) -+{ -+ guint i; -+ int size; -+ guint leadout = 0; -+ guint track_num = 0; -+ gboolean use_BCD = TRUE; -+ gboolean use_HEX = TRUE; -+ int result; -+ unsigned char *dptr; -+ unsigned char track_info[48]; -+ guint start_BCD, start_LBA, track_start; -+ -+ /* first check if all values are valid BCD numbers in the descriptors */ -+ dptr = desc; -+ for (i = 0; i < num; i++, dptr += 11) { -+ if ((dptr[1] >> 4) == 1 && dptr[3] <= BRASERO_SCSI_Q_SUB_CHANNEL_TRACK_START) { -+ if (!BRASERO_IS_BCD_VALID (dptr[8]) -+ || !BRASERO_IS_BCD_VALID (dptr[9]) -+ || !BRASERO_IS_BCD_VALID (dptr[10])) { -+ use_BCD = FALSE; -+ break; -+ } -+ } -+ else if (dptr[3] == BRASERO_SCSI_Q_SUB_CHANNEL_LEADOUT_START) { -+ if (!BRASERO_IS_BCD_VALID (dptr[8]) -+ || !BRASERO_IS_BCD_VALID (dptr[9]) -+ || !BRASERO_IS_BCD_VALID (dptr[10])) { -+ use_BCD = FALSE; -+ break; -+ } -+ } -+ } -+ -+ /* then check if there are valid Hex values */ -+ dptr = desc; -+ for (i = 0; i < num; i++, dptr += 11) { -+ if ((dptr[i] >> 4) != 1 || dptr[3] > BRASERO_SCSI_Q_SUB_CHANNEL_TRACK_START) -+ continue; -+ -+ if (dptr[8] > 99 -+ || dptr[9] > 59 -+ || dptr[10] > 74) { -+ use_HEX = FALSE; -+ break; -+ } -+ } -+ -+ if (use_BCD != use_HEX) { -+ if (use_BCD) -+ return -1; -+ -+ return 1; -+ } -+ -+ /* To check if the drive uses BCD values or HEX values we ask for the -+ * track information that contains also the start for the track but in -+ * HEX values. If values are the same then it works. */ -+ -+ /* NOTE: there could be another way to do it: get first track, in LBA -+ * and BCD it must be 150. */ -+ -+ /* First find the first track and get track start address in BCD */ -+ BRASERO_BURN_LOG ("Retrieving track information to determine number format"); -+ -+ dptr = desc; -+ for (i = 0; i < num; i++, dptr += 11) { -+ if ((dptr[1] >> 4) == BRASERO_SCSI_Q_SUB_CHANNEL_LEADIN_MODE5 -+ && dptr[3] == BRASERO_SCSI_Q_SUB_CHANNEL_MULTI_NEXT_SESSION) { -+ /* store the leadout number just in case */ -+ leadout = i; -+ continue; -+ } -+ -+ if ((dptr[1] >> 4) != 1 || dptr[3] > BRASERO_SCSI_Q_SUB_CHANNEL_TRACK_START) -+ continue; -+ -+ track_num ++; -+ -+ start_BCD = BRASERO_MSF_TO_LBA (BRASERO_GET_BCD (dptr[8]), -+ BRASERO_GET_BCD (dptr[9]), -+ BRASERO_GET_BCD (dptr[10])); -+ -+ start_LBA = BRASERO_MSF_TO_LBA (dptr[8], dptr[9], dptr[10]); -+ -+ BRASERO_BURN_LOG ("Comparing to track information from READ TRACK INFO for track %i", track_num); -+ -+ size = 36; -+ start_LBA -= 150; -+ start_BCD -= 150; -+ -+ result = brasero_cdrom_read_track_info (cdrom, -+ track_num, -+ track_info, -+ size); -+ -+ if (result != 0) { -+ BRASERO_BURN_LOG ("READ TRACK INFO failed"); -+ /* Fallback to formatted toc */ -+ return 0; -+ } -+ -+ track_start = (track_info[8] << 24 | track_info[9] << 16 | track_info[10] << 8 | track_info[11]); -+ BRASERO_BURN_LOG ("comparing DCB %i and LBA %i to real start address %i", -+ start_BCD, start_LBA, track_start); -+ -+ /* try to find a conclusive match */ -+ if (track_start == start_BCD && track_start != start_LBA) -+ return -1; -+ -+ if (track_start == start_LBA && track_start != start_BCD) -+ return 1; -+ } -+ -+ /* Our last chance, the leadout. -+ * NOTE: no need to remove 150 sectors here. */ -+ dptr = desc + (leadout * 11); -+ start_BCD = BRASERO_MSF_TO_LBA (BRASERO_GET_BCD (dptr[4]), -+ BRASERO_GET_BCD (dptr[5]), -+ BRASERO_GET_BCD (dptr[6])); -+ -+ start_LBA = BRASERO_MSF_TO_LBA (dptr[4], dptr[5], dptr[6]); -+ -+ BRASERO_BURN_LOG ("Comparing to track information from READ TRACK INFO for leadout"); -+ -+ size = 36; -+ -+ /* leadout number is number of tracks + 1 */ -+ result = brasero_cdrom_read_track_info (cdrom, -+ track_num + 1, -+ track_info, -+ size); -+ -+ if (result != 0) { -+ BRASERO_BURN_LOG ("READ TRACK INFO failed for leadout"); -+ /* Fallback to formatted toc */ -+ return 0; -+ } -+ -+ track_start = (track_info[8] << 24 | track_info[9] << 16 | track_info[10] << 8 | track_info[11]); -+ BRASERO_BURN_LOG ("comparing DCB %i and LBA %i to real start address %i", -+ start_BCD, start_LBA, track_start); -+ -+ /* try to find a conclusive match */ -+ if (track_start == start_BCD && track_start != start_LBA) -+ return -1; -+ -+ if (track_start == start_LBA && track_start != start_BCD) -+ return 1; -+ -+ /* fallback to formatted toc */ -+ return 0; -+} -+ -+/** -+ * The reason why we use this perhaps more lengthy method is that with -+ * multisession discs, the first track is reported to be two sectors shorter -+ * than it should. As I don't know why and since the following works we use -+ * this one. */ -+static BraseroBurnResult -+brasero_medium_get_CD_sessions_info (BraseroMedium *self, -+ BRASEROCDROM *cdrom) -+{ -+ gint use_bcd; -+ GSList *iter; -+ int num, i, size, res; -+ gint leadout_start = 0; -+ BraseroMediumPrivate *priv; -+ unsigned char *desc; -+ unsigned char *toc = NULL; -+ -+ BRASERO_BURN_LOG ("Reading Raw Toc"); -+ -+ priv = BRASERO_MEDIUM_PRIVATE (self); -+ -+ res = brasero_cdrom_read_toc_raw (cdrom, 0, &toc); -+ if (res != 0) { -+ BRASERO_BURN_LOG ("READ TOC failed"); -+ return BRASERO_BURN_ERR; -+ } -+ -+ size = (toc[0] << 8 | toc[1]) - 2; -+ num = size / 11; -+ -+ BRASERO_BURN_LOG ("%i track(s) found", num); -+ -+ desc = toc + 4; -+ use_bcd = brasero_medium_check_BCD_use (self, cdrom, desc, num); -+ if (!use_bcd) { -+ g_free (toc); -+ -+ BRASERO_BURN_LOG ("Fallback to formatted toc"); -+ return BRASERO_BURN_ERR; -+ } -+ -+ if (use_bcd > 0) -+ use_bcd = 0; -+ -+ if (use_bcd) { -+ BRASERO_BURN_LOG ("Using BCD format"); -+ } -+ else { -+ BRASERO_BURN_LOG ("Using HEX format"); -+ } -+ -+ for (i = 0; i < num; i++, desc += 11) { -+ BraseroMediumTrack *track; -+ -+ track = NULL; -+ if ((desc[1] >> 4) == 1 && desc[3] <= BRASERO_SCSI_Q_SUB_CHANNEL_TRACK_START) { -+ track = g_new0 (BraseroMediumTrack, 1); -+ track->session = desc[0]; -+ -+ brasero_medium_set_track_type (self, track, (desc[1] & 15)); -+ if (use_bcd) -+ track->start = BRASERO_MSF_TO_LBA (BRASERO_GET_BCD (desc[8]), -+ BRASERO_GET_BCD (desc[9]), -+ BRASERO_GET_BCD (desc[10])); -+ else -+ track->start = BRASERO_MSF_TO_LBA (desc[8], -+ desc[9], -+ desc[10]); -+ -+ track->start -= 150; -+ -+ /* if there are tracks and the last previously added track is in -+ * the same session then set the size */ -+ if (priv->tracks) { -+ BraseroMediumTrack *last_track; -+ -+ last_track = priv->tracks->data; -+ if (last_track->session == track->session) -+ last_track->blocks_num = track->start - last_track->start; -+ } -+ -+ priv->tracks = g_slist_prepend (priv->tracks, track); -+ } -+ else if (desc[3] == BRASERO_SCSI_Q_SUB_CHANNEL_LEADOUT_START) { -+ /* NOTE: the leadout session is first in the list. So if -+ * we have tracks in the list set the last session track -+ * size when we reach a new leadout (and therefore a new -+ * session). */ -+ -+ if (priv->tracks) { -+ BraseroMediumTrack *last_track; -+ -+ last_track = priv->tracks->data; -+ last_track->blocks_num = leadout_start - last_track->start; -+ } -+ -+ if (use_bcd) -+ leadout_start = BRASERO_MSF_TO_LBA (BRASERO_GET_BCD (desc[8]), -+ BRASERO_GET_BCD (desc[9]), -+ BRASERO_GET_BCD (desc[10])); -+ else -+ leadout_start = BRASERO_MSF_TO_LBA (desc[8], -+ desc[9], -+ desc[10]); -+ leadout_start -= 150; -+ } -+ } -+ -+ if (priv->tracks) { -+ BraseroMediumTrack *last_track; -+ -+ /* set the last found track size */ -+ last_track = priv->tracks->data; -+ last_track->blocks_num = leadout_start - last_track->start; -+ } -+ -+ /* Add a leadout */ -+ if (!(priv->info & BRASERO_MEDIUM_CLOSED)) { -+ BraseroMediumTrack *track; -+ -+ /* we shouldn't request info on leadout if the disc is closed */ -+ track = g_new0 (BraseroMediumTrack, 1); -+ priv->tracks = g_slist_prepend (priv->tracks, track); -+ track->start = leadout_start; -+ track->type = BRASERO_MEDIUM_TRACK_LEADOUT; -+ -+ brasero_medium_track_get_info (self, track, g_slist_length (priv->tracks), cdrom); -+ } -+ -+ priv->tracks = g_slist_reverse (priv->tracks); -+ -+ for (iter = priv->tracks; iter; iter = iter->next) { -+ BraseroMediumTrack *track; -+ -+ track = iter->data; -+ -+ /* check for tracks less that 300 sectors */ -+ if (track->blocks_num <= 300 && track->type != BRASERO_MEDIUM_TRACK_LEADOUT) { -+ BRASERO_BURN_LOG ("300 sectors size. Checking for real size"); -+ brasero_medium_track_volume_size (self, track, cdrom); -+ } -+ -+ BRASERO_BURN_LOG ("Track %i: type = %i start = %llu size = %llu", -+ g_slist_index (priv->tracks, track), -+ track->type, -+ track->start, -+ track->blocks_num); -+ } -+ -+ g_free (toc); -+ return BRASERO_BURN_OK; -+} -+ -+/** -+ * NOTE: for DVD-R multisession we lose 28688 blocks for each session -+ * so the capacity is the addition of all session sizes + 28688 for each -+ * For all multisession DVD-/+R and CDR-RW the remaining size is given -+ * in the leadout. One exception though with DVD+/-RW. -+ */ -+ -+static void -+brasero_medium_add_DVD_plus_RW_leadout (BraseroMedium *self, -+ gint32 start) -+{ -+ BraseroMediumTrack *leadout; -+ BraseroMediumPrivate *priv; -+ -+ priv = BRASERO_MEDIUM_PRIVATE (self); -+ -+ leadout = g_new0 (BraseroMediumTrack, 1); -+ priv->tracks = g_slist_append (priv->tracks, leadout); -+ -+ leadout->start = start; -+ leadout->type = BRASERO_MEDIUM_TRACK_LEADOUT; -+ -+ /* we fabricate the leadout here. We don't really need one in -+ * fact since it is always at the last sector whatever the -+ * amount of data written. So we need in fact to read the file -+ * system and get the last sector from it. Hopefully it won't be -+ * buggy */ -+ priv->next_wr_add = 0; -+ -+ leadout->blocks_num = priv->block_num; -+ if (g_slist_length (priv->tracks) > 1) { -+ BraseroMediumTrack *track; -+ -+ track = priv->tracks->data; -+ leadout->blocks_num -= ((track->blocks_num > 300) ? track->blocks_num : 300); -+ } -+ BRASERO_BURN_LOG ("Adding fabricated leadout start = %llu length = %llu", -+ leadout->start, -+ leadout->blocks_num); -+} -+ -+static BraseroBurnResult -+brasero_medium_get_sessions_info (BraseroMedium *self, -+ BRASEROCDROM *cdrom) -+{ -+ int num, i, size, res; -+ gint32 tstart; -+ unsigned char *toc = NULL; -+ unsigned char *desc; -+ BraseroMediumPrivate *priv; -+ -+ BRASERO_BURN_LOG ("Reading Toc"); -+ -+ priv = BRASERO_MEDIUM_PRIVATE (self); -+ res = brasero_cdrom_read_toc_formatted (cdrom, 0, &toc); -+ if (res != 0) { -+ g_free (toc); -+ -+ BRASERO_BURN_LOG ("READ TOC failed"); -+ return BRASERO_BURN_ERR; -+ } -+ -+ size = (toc[0] << 8 | toc[1]) - 2; -+ -+ num = size / 8; /* Each track description is 8 bytes. */ -+ -+ BRASERO_BURN_LOG ("%i track(s) found", num); -+ -+ for (desc = toc + 4, i = 0; i < num; i ++, desc += 8) { -+ BraseroMediumTrack *track; -+ -+ if (desc[2] == BRASERO_SCSI_TRACK_LEADOUT_START) -+ break; -+ -+ tstart = (desc[4] << 24 | desc[5] << 16 | desc[6] << 8 | desc[7]); -+ -+ track = g_new0 (BraseroMediumTrack, 1); -+ priv->tracks = g_slist_prepend (priv->tracks, track); -+ track->start = tstart; -+ -+ /* we shouldn't request info on a track if the disc is closed */ -+ brasero_medium_track_get_info (self, -+ track, -+ g_slist_length (priv->tracks), -+ cdrom); -+ -+ if ((desc[1] & 15) & BRASERO_SCSI_TRACK_COPY) -+ track->type |= BRASERO_MEDIUM_TRACK_COPY; -+ -+ if (!((desc[1] & 15) & BRASERO_SCSI_TRACK_DATA)) { -+ track->type |= BRASERO_MEDIUM_TRACK_AUDIO; -+ priv->info |= BRASERO_MEDIUM_HAS_AUDIO; -+ -+ if ((desc[1] & 15) & BRASERO_SCSI_TRACK_PREEMP) -+ track->type |= BRASERO_MEDIUM_TRACK_PREEMP; -+ -+ if ((desc[1] & 15) & BRASERO_SCSI_TRACK_4_CHANNELS) -+ track->type |= BRASERO_MEDIUM_TRACK_4_CHANNELS; -+ } -+ else if (BRASERO_MEDIUM_IS (priv->info, BRASERO_MEDIUM_DVDRW_PLUS) -+ || BRASERO_MEDIUM_IS (priv->info, BRASERO_MEDIUM_DVDRW_RESTRICTED)) { -+ BraseroBurnResult result; -+ -+ /* a special case for these two kinds of media (DVD+RW) -+ * which have only one track: the first. */ -+ result = brasero_medium_track_volume_size (self, -+ track, -+ cdrom); -+ if (result == BRASERO_BURN_OK) { -+ track->type |= BRASERO_MEDIUM_TRACK_DATA; -+ priv->info |= BRASERO_MEDIUM_HAS_DATA; -+ -+ priv->next_wr_add = 0; -+ -+ if ((desc[1] & 15) & BRASERO_SCSI_TRACK_DATA_INCREMENTAL) -+ track->type |= BRASERO_MEDIUM_TRACK_INCREMENTAL; -+ } -+ else { -+ priv->tracks = g_slist_remove (priv->tracks, track); -+ g_free (track); -+ -+ priv->info |= BRASERO_MEDIUM_BLANK; -+ priv->info &= ~BRASERO_MEDIUM_CLOSED; -+ } -+ } -+ else { -+ track->type |= BRASERO_MEDIUM_TRACK_DATA; -+ priv->info |= BRASERO_MEDIUM_HAS_DATA; -+ -+ if ((desc[1] & 15) & BRASERO_SCSI_TRACK_DATA_INCREMENTAL) -+ track->type |= BRASERO_MEDIUM_TRACK_INCREMENTAL; -+ } -+ } -+ -+ /* put the tracks in the right order */ -+ priv->tracks = g_slist_reverse (priv->tracks); -+ tstart = (desc[4] << 24 | desc[5] << 16 | desc[6] << 8 | desc[7]); -+ -+ if (BRASERO_MEDIUM_IS (priv->info, BRASERO_MEDIUM_DVDRW_PLUS) -+ || BRASERO_MEDIUM_IS (priv->info, BRASERO_MEDIUM_DVDRW_RESTRICTED)) -+ brasero_medium_add_DVD_plus_RW_leadout (self, tstart); -+ else if (!(priv->info & BRASERO_MEDIUM_CLOSED)) { -+ BraseroMediumTrack *track; -+ -+ /* we shouldn't request info on leadout if the disc is closed -+ * (except for DVD+/- (restricted) RW (see above) */ -+ track = g_new0 (BraseroMediumTrack, 1); -+ priv->tracks = g_slist_append (priv->tracks, track); -+ track->start = tstart; -+ track->type = BRASERO_MEDIUM_TRACK_LEADOUT; -+ -+ brasero_medium_track_get_info (self, -+ track, -+ g_slist_length (priv->tracks), -+ cdrom); -+ } -+ -+ g_free (toc); -+ -+ return BRASERO_BURN_OK; -+} -+ -+static BraseroBurnResult -+brasero_medium_get_contents (BraseroMedium *self, -+ BRASEROCDROM *cdrom) -+{ -+ BraseroBurnResult result; -+ int res; -+ BraseroMediumPrivate *priv; -+ unsigned char buf[32]; -+ -+ BRASERO_BURN_LOG ("Retrieving media status"); -+ -+ priv = BRASERO_MEDIUM_PRIVATE (self); -+ -+ res = brasero_cdrom_read_disc_information_std (cdrom, buf); -+ if (res != 0) { -+ BRASERO_BURN_LOG ("READ DISC INFORMATION failed"); -+ return BRASERO_BURN_ERR; -+ } -+ -+ if (buf[2] & 16) /* Erasable */ -+ priv->info |= BRASERO_MEDIUM_REWRITABLE; -+ -+ if ((buf[2] & 3) == 0) { /* Empty disc */ -+ BraseroMediumTrack *track; -+ -+ BRASERO_BURN_LOG ("Empty media"); -+ -+ priv->info |= BRASERO_MEDIUM_BLANK; -+ priv->block_size = 2048; -+ -+ if (BRASERO_MEDIUM_IS (priv->info, BRASERO_MEDIUM_DVDRW_PLUS) -+ || BRASERO_MEDIUM_IS (priv->info, BRASERO_MEDIUM_DVDRW_RESTRICTED)) -+ brasero_medium_add_DVD_plus_RW_leadout (self, 0); -+ else { -+ track = g_new0 (BraseroMediumTrack, 1); -+ track->start = 0; -+ track->type = BRASERO_MEDIUM_TRACK_LEADOUT; -+ priv->tracks = g_slist_prepend (priv->tracks, track); -+ -+ brasero_medium_track_get_info (self, -+ track, -+ 1, -+ cdrom); -+ } -+ goto end; -+ } -+ -+ if (buf[2] & 1) { /* Appendable */ -+ priv->info |= BRASERO_MEDIUM_APPENDABLE; -+ BRASERO_BURN_LOG ("Appendable media"); -+ } -+ else if (buf[2] & 2) { /* Complete */ -+ priv->info |= BRASERO_MEDIUM_CLOSED; -+ BRASERO_BURN_LOG ("Closed media"); -+ } -+ -+ if (priv->info & BRASERO_MEDIUM_CD) { -+ result = brasero_medium_get_CD_sessions_info (self, cdrom); -+ if (result != BRASERO_BURN_OK) -+ result = brasero_medium_get_sessions_info (self, cdrom); -+ } -+ else -+ result = brasero_medium_get_sessions_info (self, cdrom); -+ -+ if (result != BRASERO_BURN_OK) -+ goto end; -+ -+end: -+ -+ return BRASERO_BURN_OK; -+} -+ -+static void -+brasero_medium_init_real (BraseroMedium *object, BRASEROCDROM *cdrom) -+{ -+ gchar *name; -+ BraseroBurnResult result; -+ BraseroMediumPrivate *priv; -+ -+ priv = BRASERO_MEDIUM_PRIVATE (object); -+ -+ name = nautilus_burn_drive_get_name_for_display (priv->drive); -+ BRASERO_BURN_LOG ("Initializing information for medium in %s", name); -+ g_free (name); -+ -+ result = brasero_medium_get_medium_type (object, cdrom); -+ if (result != BRASERO_BURN_OK) -+ return; -+ -+ brasero_medium_get_capacity_by_type (object, cdrom); -+ -+ result = brasero_medium_get_contents (object, cdrom); -+ if (result != BRASERO_BURN_OK) -+ return; -+ -+ /* assume that css feature is only for DVD-ROM which might be wrong but -+ * some drives wrongly reports that css is enabled for blank DVD+R/W */ -+ if (BRASERO_MEDIUM_IS (priv->info, (BRASERO_MEDIUM_DVD|BRASERO_MEDIUM_ROM))) -+ brasero_medium_get_css_feature (object, cdrom); -+ -+ BRASERO_BURN_LOG_DISC_TYPE (priv->info, "media is "); -+} -+ -+static void -+brasero_medium_try_open (BraseroMedium *self) -+{ -+ const gchar *path; -+ BRASEROCDROM *cdrom; -+ BraseroMediumPrivate *priv; -+ -+ priv = BRASERO_MEDIUM_PRIVATE (self); -+ path = nautilus_burn_drive_get_device (priv->drive); -+ -+ BRASERO_BURN_LOG ("Trying to create BRASERCDROM for device %s", path); -+ cdrom = brasero_cdrom_new (path); -+ if (cdrom == NULL) { -+ BRASERO_BURN_LOG ("Creation failed"); -+ return; -+ } -+ -+ BRASERO_BURN_LOG ("Creation succeeded"); -+ brasero_medium_init_real (self, cdrom); -+ brasero_cdrom_free (cdrom); -+} -+ -+static void -+brasero_medium_init (BraseroMedium *object) -+{ -+ BraseroMediumPrivate *priv; -+ -+ priv = BRASERO_MEDIUM_PRIVATE (object); -+ priv->next_wr_add = -1; -+ -+ /* we can't do anything here since properties haven't been set yet */ -+} -+ -+static void -+brasero_medium_finalize (GObject *object) -+{ -+ BraseroMediumPrivate *priv; -+ -+ priv = BRASERO_MEDIUM_PRIVATE (object); -+ -+ if (priv->retry_id) { -+ g_source_remove (priv->retry_id); -+ priv->retry_id = 0; -+ } -+ -+ g_free (priv->rd_speeds); -+ priv->rd_speeds = NULL; -+ -+ g_free (priv->wr_speeds); -+ priv->wr_speeds = NULL; -+ -+ g_slist_foreach (priv->tracks, (GFunc) g_free, NULL); -+ g_slist_free (priv->tracks); -+ priv->tracks = NULL; -+ -+ nautilus_burn_drive_unref (priv->drive); -+ priv->drive = NULL; -+ -+ G_OBJECT_CLASS (parent_class)->finalize (object); -+} -+ -+static void -+brasero_medium_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) -+{ -+ BraseroMediumPrivate *priv; -+ -+ g_return_if_fail (BRASERO_IS_MEDIUM (object)); -+ -+ priv = BRASERO_MEDIUM_PRIVATE (object); -+ -+ switch (prop_id) -+ { -+ case PROP_DRIVE: -+ priv->drive = g_value_get_object (value); -+ nautilus_burn_drive_ref (priv->drive); -+ brasero_medium_try_open (BRASERO_MEDIUM (object)); -+ break; -+ default: -+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); -+ break; -+ } -+} -+ -+static void -+brasero_medium_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) -+{ -+ BraseroMediumPrivate *priv; -+ -+ g_return_if_fail (BRASERO_IS_MEDIUM (object)); -+ -+ priv = BRASERO_MEDIUM_PRIVATE (object); -+ -+ switch (prop_id) -+ { -+ case PROP_DRIVE: -+ nautilus_burn_drive_ref (priv->drive); -+ g_value_set_object (value, priv->drive); -+ break; -+ default: -+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); -+ break; -+ } -+} -+ -+static void -+brasero_medium_class_init (BraseroMediumClass *klass) -+{ -+ GObjectClass* object_class = G_OBJECT_CLASS (klass); -+ parent_class = G_OBJECT_CLASS (g_type_class_peek_parent (klass)); -+ -+ g_type_class_add_private (klass, sizeof (BraseroMediumPrivate)); -+ -+ object_class->finalize = brasero_medium_finalize; -+ object_class->set_property = brasero_medium_set_property; -+ object_class->get_property = brasero_medium_get_property; -+ -+ g_object_class_install_property (object_class, -+ PROP_DRIVE, -+ g_param_spec_object ("drive", -+ "drive", -+ "drive in which medium is inserted", -+ NAUTILUS_BURN_TYPE_DRIVE, -+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); -+} -+ -+GType -+brasero_medium_get_type (void) -+{ -+ static GType our_type = 0; -+ -+ if (our_type == 0) -+ { -+ static const GTypeInfo our_info = -+ { -+ sizeof (BraseroMediumClass), /* class_size */ -+ (GBaseInitFunc) NULL, /* base_init */ -+ (GBaseFinalizeFunc) NULL, /* base_finalize */ -+ (GClassInitFunc) brasero_medium_class_init, /* class_init */ -+ (GClassFinalizeFunc) NULL, /* class_finalize */ -+ NULL /* class_data */, -+ sizeof (BraseroMedium), /* instance_size */ -+ 0, /* n_preallocs */ -+ (GInstanceInitFunc) brasero_medium_init, /* instance_init */ -+ NULL /* value_table */ -+ }; -+ -+ our_type = g_type_register_static (G_TYPE_OBJECT, "BraseroMedium", -+ &our_info, 0); -+ } -+ -+ return our_type; -+} -+ -+BraseroMedium * -+brasero_medium_new (NautilusBurnDrive *drive) -+{ -+ g_return_val_if_fail (drive != NULL, NULL); -+ return BRASERO_MEDIUM (g_object_new (BRASERO_TYPE_MEDIUM, -+ "drive", drive, -+ NULL)); -+} diff --git a/sysutils/brasero/files/patch-src_burn-medium-scsi.c b/sysutils/brasero/files/patch-src_burn-medium-scsi.c deleted file mode 100644 index 974754cdef2b..000000000000 --- a/sysutils/brasero/files/patch-src_burn-medium-scsi.c +++ /dev/null @@ -1,2073 +0,0 @@ ---- src/burn-medium-scsi.c.orig 2008-02-06 01:53:39.000000000 -0500 -+++ src/burn-medium-scsi.c 2008-02-06 01:54:19.000000000 -0500 -@@ -0,0 +1,2070 @@ -+/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -+/* -+ * brasero -+ * Copyright (C) Philippe Rouquier 2007 <bonfire-app@wanadoo.fr> -+ * -+ * brasero is free software. -+ * -+ * You may redistribute it and/or modify it under the terms of the -+ * GNU General Public License, as published by the Free Software -+ * Foundation; either version 2 of the License, or (at your option) -+ * any later version. -+ * -+ * brasero is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -+ * See the GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with brasero. If not, write to: -+ * The Free Software Foundation, Inc., -+ * 51 Franklin Street, Fifth Floor -+ * Boston, MA 02110-1301, USA. -+ */ -+ -+#ifdef HAVE_CONFIG_H -+# include <config.h> -+#endif -+ -+#include <sys/types.h> -+#include <sys/stat.h> -+#include <fcntl.h> -+#include <errno.h> -+ -+#include <glib.h> -+#include <glib/gi18n-lib.h> -+ -+#include <nautilus-burn-drive.h> -+ -+#include "burn-basics.h" -+#include "burn-debug.h" -+#include "burn-medium.h" -+#include "scsi-mmc1.h" -+#include "scsi-mmc2.h" -+#include "scsi-mmc3.h" -+#include "scsi-spc1.h" -+#include "scsi-utils.h" -+#include "scsi-mode-pages.h" -+#include "scsi-status-page.h" -+#include "scsi-q-subchannel.h" -+#include "scsi-dvd-structures.h" -+#include "burn-volume.h" -+#include "brasero-ncb.h" -+ -+const gchar *icons [] = { "gnome-dev-removable", -+ "gnome-dev-cdrom", -+ "gnome-dev-disc-cdr", -+ "gnome-dev-disc-cdrw", -+ "gnome-dev-disc-dvdrom", -+ "gnome-dev-disc-dvdr", -+ "gnome-dev-disc-dvdrw", -+ "gnome-dev-disc-dvdr-plus", -+ "gnome-dev-disc-dvdram", -+ NULL }; -+const gchar *types [] = { N_("file"), -+ N_("CDROM"), -+ N_("CD-R"), -+ N_("CD-RW"), -+ N_("DVDROM"), -+ N_("DVD-R"), -+ N_("DVD-RW"), -+ N_("DVD+R"), -+ N_("DVD+RW"), -+ N_("DVD+R dual layer"), -+ N_("DVD+RW dual layer"), -+ N_("DVD-R dual layer"), -+ N_("DVD-RAM"), -+ N_("Blu-ray disc"), -+ N_("Writable Blu-ray disc"), -+ N_("Rewritable Blu-ray disc"), -+ NULL }; -+ -+ -+typedef struct _BraseroMediumPrivate BraseroMediumPrivate; -+struct _BraseroMediumPrivate -+{ -+ gint retry_id; -+ -+ GSList * tracks; -+ -+ const gchar *type; -+ const gchar *icon; -+ -+ gint max_rd; -+ gint max_wrt; -+ -+ gint *rd_speeds; -+ gint *wr_speeds; -+ -+ gint64 block_num; -+ gint64 block_size; -+ -+ guint64 next_wr_add; -+ BraseroMedia info; -+ NautilusBurnDrive * drive; -+}; -+ -+#define BRASERO_MEDIUM_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), BRASERO_TYPE_MEDIUM, BraseroMediumPrivate)) -+ -+/** -+ * Try to open the drive exclusively but don't block; if drive can't be opened -+ * exclusively then retry every second until we're shut or the drive state -+ * changes to not busy. -+ * No exclusive at the moment since when the medium is mounted we can't use excl -+ */ -+ -+#define OPEN_FLAGS O_RDONLY /*|O_EXCL */|O_NONBLOCK -+#define BUSY_RETRY_TIME 1000 -+ -+enum -+{ -+ PROP_0, -+ PROP_DRIVE -+}; -+ -+static GObjectClass* parent_class = NULL; -+ -+const gchar * -+brasero_medium_get_type_string (BraseroMedium *medium) -+{ -+ BraseroMediumPrivate *priv; -+ -+ priv = BRASERO_MEDIUM_PRIVATE (medium); -+ return priv->type; -+} -+ -+const gchar * -+brasero_medium_get_icon (BraseroMedium *medium) -+{ -+ BraseroMediumPrivate *priv; -+ -+ priv = BRASERO_MEDIUM_PRIVATE (medium); -+ return priv->icon; -+} -+ -+BraseroMedia -+brasero_medium_get_status (BraseroMedium *medium) -+{ -+ BraseroMediumPrivate *priv; -+ -+ priv = BRASERO_MEDIUM_PRIVATE (medium); -+ return priv->info; -+} -+ -+GSList * -+brasero_medium_get_tracks (BraseroMedium *medium) -+{ -+ BraseroMediumPrivate *priv; -+ -+ priv = BRASERO_MEDIUM_PRIVATE (medium); -+ return g_slist_copy (priv->tracks); -+} -+ -+gboolean -+brasero_medium_get_last_data_track_address (BraseroMedium *medium, -+ gint64 *byte, -+ gint64 *sector) -+{ -+ GSList *iter; -+ BraseroMediumPrivate *priv; -+ BraseroMediumTrack *track = NULL; -+ -+ priv = BRASERO_MEDIUM_PRIVATE (medium); -+ -+ for (iter = priv->tracks; iter; iter = iter->next) { -+ BraseroMediumTrack *current; -+ -+ current = iter->data; -+ if (current->type & BRASERO_MEDIUM_TRACK_DATA) -+ track = current; -+ } -+ -+ if (!track) { -+ if (byte) -+ *byte = -1; -+ if (sector) -+ *sector = -1; -+ return FALSE; -+ } -+ -+ if (byte) -+ *byte = track->start * priv->block_size; -+ -+ if (sector) -+ *sector = track->start; -+ -+ return TRUE; -+} -+ -+gboolean -+brasero_medium_get_last_data_track_space (BraseroMedium *medium, -+ gint64 *size, -+ gint64 *blocks) -+{ -+ GSList *iter; -+ BraseroMediumPrivate *priv; -+ BraseroMediumTrack *track = NULL; -+ -+ priv = BRASERO_MEDIUM_PRIVATE (medium); -+ -+ for (iter = priv->tracks; iter; iter = iter->next) { -+ BraseroMediumTrack *current; -+ -+ current = iter->data; -+ if (current->type & BRASERO_MEDIUM_TRACK_DATA) -+ track = current; -+ } -+ -+ if (!track) { -+ if (size) -+ *size = -1; -+ if (blocks) -+ *blocks = -1; -+ return FALSE; -+ } -+ -+ if (size) -+ *size = track->blocks_num * priv->block_size; -+ if (blocks) -+ *blocks = track->blocks_num; -+ -+ return TRUE; -+} -+ -+guint -+brasero_medium_get_track_num (BraseroMedium *medium) -+{ -+ guint retval = 0; -+ GSList *iter; -+ BraseroMediumPrivate *priv; -+ -+ priv = BRASERO_MEDIUM_PRIVATE (medium); -+ for (iter = priv->tracks; iter; iter = iter->next) { -+ BraseroMediumTrack *current; -+ -+ current = iter->data; -+ if (current->type & BRASERO_MEDIUM_TRACK_LEADOUT) -+ break; -+ -+ retval ++; -+ } -+ -+ return retval; -+} -+ -+static BraseroMediumTrack * -+brasero_medium_get_track (BraseroMedium *medium, -+ guint num) -+{ -+ guint i = 1; -+ GSList *iter; -+ BraseroMediumPrivate *priv; -+ -+ priv = BRASERO_MEDIUM_PRIVATE (medium); -+ -+ for (iter = priv->tracks; iter; iter = iter->next) { -+ BraseroMediumTrack *current; -+ -+ current = iter->data; -+ if (current->type == BRASERO_MEDIUM_TRACK_LEADOUT) -+ break; -+ -+ if (i == num) -+ return current; -+ -+ i++; -+ } -+ -+ return NULL; -+} -+ -+gboolean -+brasero_medium_get_track_space (BraseroMedium *medium, -+ guint num, -+ gint64 *size, -+ gint64 *blocks) -+{ -+ BraseroMediumPrivate *priv; -+ BraseroMediumTrack *track; -+ -+ priv = BRASERO_MEDIUM_PRIVATE (medium); -+ -+ track = brasero_medium_get_track (medium, num); -+ if (!track) { -+ if (size) -+ *size = -1; -+ if (blocks) -+ *blocks = -1; -+ return FALSE; -+ } -+ -+ if (size) -+ *size = track->blocks_num * priv->block_size; -+ if (blocks) -+ *blocks = track->blocks_num; -+ -+ return TRUE; -+} -+ -+gboolean -+brasero_medium_get_track_address (BraseroMedium *medium, -+ guint num, -+ gint64 *byte, -+ gint64 *sector) -+{ -+ BraseroMediumPrivate *priv; -+ BraseroMediumTrack *track; -+ -+ priv = BRASERO_MEDIUM_PRIVATE (medium); -+ -+ track = brasero_medium_get_track (medium, num); -+ if (!track) { -+ if (byte) -+ *byte = -1; -+ if (sector) -+ *sector = -1; -+ return FALSE; -+ } -+ -+ if (byte) -+ *byte = track->start * priv->block_size; -+ if (sector) -+ *sector = track->start; -+ -+ return TRUE; -+} -+ -+gint64 -+brasero_medium_get_next_writable_address (BraseroMedium *medium) -+{ -+ BraseroMediumPrivate *priv; -+ -+ priv = BRASERO_MEDIUM_PRIVATE (medium); -+ return priv->next_wr_add; -+} -+ -+gint64 -+brasero_medium_get_max_write_speed (BraseroMedium *medium) -+{ -+ BraseroMediumPrivate *priv; -+ -+ priv = BRASERO_MEDIUM_PRIVATE (medium); -+ return priv->max_wrt * 1024; -+} -+ -+/** -+ * NOTEs about the following functions: -+ * for all closed media (including ROM types) capacity == size of data and -+ * should be the size of all data on the disc, free space is 0 -+ * for all blank -R types capacity == free space and size of data == 0 -+ * for all multisession -R types capacity == free space since having the real -+ * capacity of the media would be useless as we can only use this type of media -+ * to append more data -+ * for all -RW types capacity = free space + size of data. Here they can be -+ * appended (use free space) or rewritten (whole capacity). -+ * -+ * Usually: -+ * the free space is the size of the leadout track -+ * the size of data is the sum of track sizes (excluding leadout) -+ * the capacity depends on the media: -+ * for closed discs == sum of track sizes -+ * for multisession discs == free space (leadout size) -+ * for blank discs == (free space) leadout size -+ * for rewritable/blank == use SCSI functions to get capacity (see below) -+ * -+ * In fact we should really need the size of data in DVD+/-RW cases since the -+ * session is always equal to the size of the disc. -+ */ -+ -+void -+brasero_medium_get_data_size (BraseroMedium *medium, -+ gint64 *size, -+ gint64 *blocks) -+{ -+ GSList *iter; -+ BraseroMediumPrivate *priv; -+ BraseroMediumTrack *track = NULL; -+ -+ priv = BRASERO_MEDIUM_PRIVATE (medium); -+ -+ if (!priv->tracks) { -+ /* that's probably because it wasn't possible to retrieve info */ -+ if (size) -+ *size = 0; -+ -+ if (blocks) -+ *blocks = 0; -+ -+ return; -+ } -+ -+ for (iter = priv->tracks; iter; iter = iter->next) { -+ BraseroMediumTrack *tmp; -+ -+ tmp = iter->data; -+ if (tmp->type == BRASERO_MEDIUM_TRACK_LEADOUT) -+ break; -+ -+ track = iter->data; -+ } -+ -+ if (size) -+ *size = track ? (track->start + track->blocks_num) * priv->block_size: 0; -+ -+ if (blocks) -+ *blocks = track ? track->start + track->blocks_num: 0; -+} -+ -+void -+brasero_medium_get_free_space (BraseroMedium *medium, -+ gint64 *size, -+ gint64 *blocks) -+{ -+ GSList *iter; -+ BraseroMediumPrivate *priv; -+ BraseroMediumTrack *track = NULL; -+ -+ priv = BRASERO_MEDIUM_PRIVATE (medium); -+ -+ if (!priv->tracks) { -+ /* that's probably because it wasn't possible to retrieve info. -+ * maybe it also happens with unformatted DVD+RW */ -+ -+ if (priv->info & BRASERO_MEDIUM_CLOSED) { -+ if (size) -+ *size = 0; -+ -+ if (blocks) -+ *blocks = 0; -+ } -+ else { -+ if (size) -+ *size = priv->block_num * priv->block_size; -+ -+ if (blocks) -+ *blocks = priv->block_num; -+ } -+ -+ return; -+ } -+ -+ for (iter = priv->tracks; iter; iter = iter->next) { -+ BraseroMediumTrack *tmp; -+ -+ tmp = iter->data; -+ if (tmp->type == BRASERO_MEDIUM_TRACK_LEADOUT) { -+ track = iter->data; -+ break; -+ } -+ } -+ -+ if (size) { -+ if (!track) { -+ /* No leadout was found so the disc is probably closed: -+ * no free space left. */ -+ *size = 0; -+ } -+ else if (track->blocks_num <= 0) -+ *size = (priv->block_num - track->start) * priv->block_size; -+ else -+ *size = track->blocks_num * priv->block_size; -+ } -+ -+ if (blocks) { -+ if (!track) { -+ /* No leadout was found so the disc is probably closed: -+ * no free space left. */ -+ *blocks = 0; -+ } -+ else if (track->blocks_num <= 0) -+ *blocks = priv->block_num - track->blocks_num; -+ else -+ *blocks = track->blocks_num; -+ } -+} -+ -+void -+brasero_medium_get_capacity (BraseroMedium *medium, -+ gint64 *size, -+ gint64 *blocks) -+{ -+ BraseroMediumPrivate *priv; -+ -+ priv = BRASERO_MEDIUM_PRIVATE (medium); -+ -+ if (priv->info & BRASERO_MEDIUM_REWRITABLE) { -+ if (size) -+ *size = priv->block_num * priv->block_size; -+ -+ if (blocks) -+ *blocks = priv->block_num; -+ } -+ else if (priv->info & BRASERO_MEDIUM_CLOSED) -+ brasero_medium_get_data_size (medium, size, blocks); -+ else -+ brasero_medium_get_free_space (medium, size, blocks); -+} -+ -+/** -+ * Function to retrieve the capacity of a media -+ */ -+ -+static BraseroBurnResult -+brasero_medium_get_capacity_CD_RW (BraseroMedium *self, -+ int fd, -+ BraseroScsiErrCode *code) -+{ -+ BraseroScsiAtipData *atip_data = NULL; -+ BraseroMediumPrivate *priv; -+ BraseroScsiResult result; -+ int size = 0; -+ -+ priv = BRASERO_MEDIUM_PRIVATE (self); -+ -+ BRASERO_BURN_LOG ("Retrieving capacity from atip"); -+ -+ result = brasero_mmc1_read_atip (fd, -+ &atip_data, -+ &size, -+ NULL); -+ -+ if (result != BRASERO_SCSI_OK) { -+ BRASERO_BURN_LOG ("READ ATIP failed (scsi error)"); -+ return BRASERO_BURN_ERR; -+ } -+ -+ /* check the size of the structure: it must be at least 16 bytes long */ -+ if (size < 16) { -+ if (size) -+ g_free (atip_data); -+ -+ BRASERO_BURN_LOG ("READ ATIP failed (wrong size)"); -+ return BRASERO_BURN_ERR; -+ } -+ -+ priv->block_num = BRASERO_MSF_TO_LBA (atip_data->desc->leadout_mn, -+ atip_data->desc->leadout_sec, -+ atip_data->desc->leadout_frame); -+ g_free (atip_data); -+ -+ BRASERO_BURN_LOG ("Format capacity %lli %lli", -+ priv->block_num, -+ priv->block_size); -+ -+ return BRASERO_BURN_OK; -+} -+ -+static BraseroBurnResult -+brasero_medium_get_capacity_DVD_RW (BraseroMedium *self, -+ int fd, -+ BraseroScsiErrCode *code) -+{ -+ BraseroScsiFormatCapacitiesHdr *hdr = NULL; -+ BraseroScsiMaxCapacityDesc *current; -+ BraseroMediumPrivate *priv; -+ BraseroScsiResult result; -+ gint size; -+ -+ BRASERO_BURN_LOG ("Retrieving format capacity"); -+ -+ priv = BRASERO_MEDIUM_PRIVATE (self); -+ result = brasero_mmc2_read_format_capacities (fd, -+ &hdr, -+ &size, -+ code); -+ if (result != BRASERO_SCSI_OK) { -+ g_free (hdr); -+ -+ BRASERO_BURN_LOG ("READ FORMAT CAPACITIES failed"); -+ return BRASERO_BURN_ERR; -+ } -+ -+ current = hdr->max_caps; -+ -+ /* see if the media is already formatted */ -+ if (current->type != BRASERO_SCSI_DESC_FORMATTED) { -+ int i, max; -+ BraseroScsiFormattableCapacityDesc *desc; -+ -+ max = (hdr->len - -+ sizeof (BraseroScsiMaxCapacityDesc)) / -+ sizeof (BraseroScsiFormattableCapacityDesc); -+ -+ desc = hdr->desc; -+ for (i = 0; i < max; i ++, desc ++) { -+ /* search for the correct descriptor */ -+ if (BRASERO_MEDIUM_IS (priv->info, BRASERO_MEDIUM_DVDRW_PLUS)) { -+ if (desc->format_type == BRASERO_SCSI_DVDRW_PLUS) { -+ priv->block_num = BRASERO_GET_32 (desc->blocks_num); -+ priv->block_size = BRASERO_GET_24 (desc->type_param); -+ -+ /* that can happen */ -+ if (!priv->block_size) -+ priv->block_size = 2048; -+ break; -+ } -+ } -+ else if (desc->format_type == BRASERO_SCSI_BLOCK_SIZE_DEFAULT_AND_DB) { -+ priv->block_num = BRASERO_GET_32 (desc->blocks_num); -+ priv->block_size = BRASERO_GET_24 (desc->type_param); -+ break; -+ } -+ } -+ } -+ else { -+ priv->block_num = BRASERO_GET_32 (current->blocks_num); -+ priv->block_size = BRASERO_GET_24 (current->block_size); -+ } -+ -+ BRASERO_BURN_LOG ("Format capacity %lli %lli", -+ priv->block_num, -+ priv->block_size); -+ -+ g_free (hdr); -+ return BRASERO_BURN_OK; -+} -+ -+static BraseroBurnResult -+brasero_medium_get_capacity_by_type (BraseroMedium *self, -+ int fd, -+ BraseroScsiErrCode *code) -+{ -+ BraseroMediumPrivate *priv; -+ -+ priv = BRASERO_MEDIUM_PRIVATE (self); -+ -+ priv->block_size = 2048; -+ -+ if (!(priv->info & BRASERO_MEDIUM_REWRITABLE)) -+ return BRASERO_BURN_OK; -+ -+ if (priv->info & BRASERO_MEDIUM_CD) -+ brasero_medium_get_capacity_CD_RW (self, fd, code); -+ else -+ brasero_medium_get_capacity_DVD_RW (self, fd, code); -+ -+ return BRASERO_BURN_OK; -+} -+ -+/** -+ * Functions to retrieve the speed -+ */ -+ -+static BraseroBurnResult -+brasero_medium_get_speed_mmc3 (BraseroMedium *self, -+ int fd, -+ BraseroScsiErrCode *code) -+{ -+ int size; -+ int num_desc, i; -+ gint max_rd, max_wrt; -+ BraseroScsiResult result; -+ BraseroMediumPrivate *priv; -+ BraseroScsiWrtSpdDesc *desc; -+ BraseroScsiGetPerfData *wrt_perf = NULL; -+ -+ BRASERO_BURN_LOG ("Retrieving speed (Get Performance)"); -+ -+ /* NOTE: this only work if there is RT streaming feature with -+ * wspd bit set to 1. At least an MMC3 drive. */ -+ priv = BRASERO_MEDIUM_PRIVATE (self); -+ result = brasero_mmc3_get_performance_wrt_spd_desc (fd, -+ &wrt_perf, -+ &size, -+ code); -+ -+ if (result != BRASERO_SCSI_OK) { -+ g_free (wrt_perf); -+ -+ BRASERO_BURN_LOG ("GET PERFORMANCE failed"); -+ return BRASERO_BURN_ERR; -+ } -+ -+ num_desc = (size - sizeof (BraseroScsiGetPerfHdr)) / -+ sizeof (BraseroScsiWrtSpdDesc); -+ -+ if (num_desc <= 0) -+ goto end; -+ -+ priv->rd_speeds = g_new0 (gint, num_desc + 1); -+ priv->wr_speeds = g_new0 (gint, num_desc + 1); -+ -+ max_rd = 0; -+ max_wrt = 0; -+ -+ desc = (BraseroScsiWrtSpdDesc*) &wrt_perf->data; -+ for (i = 0; i < num_desc; i ++, desc ++) { -+ priv->rd_speeds [i] = BRASERO_GET_32 (desc->rd_speed); -+ priv->wr_speeds [i] = BRASERO_GET_32 (desc->wr_speed); -+ -+ max_rd = MAX (max_rd, priv->rd_speeds [i]); -+ max_wrt = MAX (max_wrt, priv->wr_speeds [i]); -+ } -+ -+ priv->max_rd = max_rd; -+ priv->max_wrt = max_wrt; -+ -+end: -+ -+ g_free (wrt_perf); -+ -+ /* strangely there are so drives (I know one case) which support this -+ * function but don't report any speed. So if our top speed is 0 then -+ * use the other way to get the speed. It was a Teac */ -+ if (!priv->max_wrt) -+ return BRASERO_BURN_ERR; -+ -+ return BRASERO_BURN_OK; -+} -+ -+static BraseroBurnResult -+brasero_medium_get_page_2A_write_speed_desc (BraseroMedium *self, -+ int fd, -+ BraseroScsiErrCode *code) -+{ -+ BraseroScsiStatusPage *page_2A = NULL; -+ BraseroScsiStatusWrSpdDesc *desc; -+ BraseroScsiModeData *data = NULL; -+ BraseroMediumPrivate *priv; -+ BraseroScsiResult result; -+ gint desc_num, i; -+ gint max_wrt = 0; -+ gint max_num; -+ int size = 0; -+ -+ BRASERO_BURN_LOG ("Retrieving speed (2A speeds)"); -+ -+ priv = BRASERO_MEDIUM_PRIVATE (self); -+ result = brasero_spc1_mode_sense_get_page (fd, -+ BRASERO_SPC_PAGE_STATUS, -+ &data, -+ &size, -+ code); -+ if (result != BRASERO_SCSI_OK) { -+ g_free (data); -+ -+ BRASERO_BURN_LOG ("MODE SENSE failed"); -+ return BRASERO_BURN_ERR; -+ } -+ -+ page_2A = (BraseroScsiStatusPage *) &data->page; -+ -+ /* FIXME: the following is not necessarily true */ -+ if (size < sizeof (BraseroScsiStatusPage)) { -+ g_free (data); -+ -+ BRASERO_BURN_LOG ("wrong size in page"); -+ return BRASERO_BURN_ERR; -+ } -+ -+ desc_num = BRASERO_GET_16 (page_2A->wr_speed_desc_num); -+ max_num = size - -+ sizeof (BraseroScsiStatusPage) - -+ sizeof (BraseroScsiModeHdr); -+ max_num /= sizeof (BraseroScsiWrtSpdDesc); -+ -+ if (max_num < 0) -+ max_num = 0; -+ -+ if (desc_num > max_num) -+ desc_num = max_num; -+ -+ priv->wr_speeds = g_new0 (gint, desc_num + 1); -+ desc = page_2A->wr_spd_desc; -+ for (i = 0; i < desc_num; i ++, desc ++) { -+ priv->wr_speeds [i] = BRASERO_GET_16 (desc->speed); -+ max_wrt = MAX (max_wrt, priv->wr_speeds [i]); -+ } -+ -+ if (!max_wrt) -+ priv->max_wrt = BRASERO_GET_16 (page_2A->wr_max_speed); -+ else -+ priv->max_wrt = max_wrt; -+ -+ priv->max_rd = BRASERO_GET_16 (page_2A->rd_max_speed); -+ g_free (data); -+ -+ return BRASERO_BURN_OK; -+} -+ -+static BraseroBurnResult -+brasero_medium_get_page_2A_max_speed (BraseroMedium *self, -+ int fd, -+ BraseroScsiErrCode *code) -+{ -+ BraseroScsiStatusPage *page_2A = NULL; -+ BraseroScsiModeData *data = NULL; -+ BraseroMediumPrivate *priv; -+ BraseroScsiResult result; -+ int size = 0; -+ -+ BRASERO_BURN_LOG ("Retrieving speed (2A max)"); -+ -+ priv = BRASERO_MEDIUM_PRIVATE (self); -+ -+ result = brasero_spc1_mode_sense_get_page (fd, -+ BRASERO_SPC_PAGE_STATUS, -+ &data, -+ &size, -+ code); -+ if (result != BRASERO_SCSI_OK) { -+ g_free (data); -+ -+ BRASERO_BURN_LOG ("MODE SENSE failed"); -+ return BRASERO_BURN_ERR; -+ } -+ -+ page_2A = (BraseroScsiStatusPage *) &data->page; -+ -+ if (size < 0x14) { -+ g_free (data); -+ -+ BRASERO_BURN_LOG ("wrong page size"); -+ return BRASERO_BURN_ERR; -+ } -+ -+ priv->max_rd = BRASERO_GET_16 (page_2A->rd_max_speed); -+ priv->max_wrt = BRASERO_GET_16 (page_2A->wr_max_speed); -+ -+ g_free (data); -+ return BRASERO_BURN_OK; -+} -+ -+static BraseroBurnResult -+brasero_medium_get_medium_type (BraseroMedium *self, -+ int fd, -+ BraseroScsiErrCode *code) -+{ -+ BraseroScsiGetConfigHdr *hdr = NULL; -+ BraseroMediumPrivate *priv; -+ BraseroScsiResult result; -+ int size; -+ -+ BRASERO_BURN_LOG ("Retrieving media profile"); -+ -+ priv = BRASERO_MEDIUM_PRIVATE (self); -+ result = brasero_mmc2_get_configuration_feature (fd, -+ BRASERO_SCSI_FEAT_REAL_TIME_STREAM, -+ &hdr, -+ &size, -+ code); -+ if (result != BRASERO_SCSI_OK) { -+ BraseroScsiAtipData *data = NULL; -+ int size = 0; -+ -+ BRASERO_BURN_LOG ("GET CONFIGURATION failed"); -+ -+ /* This could be a MMC1 drive since this command was -+ * introduced in MMC2 and is supported onward. So it -+ * has to be a CD (R/RW). The rest of the information -+ * will be provided by read_disc_information. */ -+ -+ /* The only thing here left to determine is if that's a WRITABLE -+ * or a REWRITABLE. To determine that information, we need to -+ * read TocPmaAtip. It if fails that's a ROM, if it succeeds. -+ * No need to set error code since we consider that it's a ROM -+ * if a failure happens. */ -+ result = brasero_mmc1_read_atip (fd, -+ &data, -+ &size, -+ NULL); -+ if (result != BRASERO_SCSI_OK) { -+ /* CDROM */ -+ priv->info = BRASERO_MEDIUM_CDROM; -+ priv->type = types [1]; -+ priv->icon = icons [1]; -+ } -+ else { -+ /* check the size of the structure: it must be at least 8 bytes long */ -+ if (size < 8) { -+ if (size) -+ g_free (data); -+ -+ BRASERO_BURN_LOG ("READ ATIP failed (wrong size)"); -+ return BRASERO_BURN_ERR; -+ } -+ -+ if (data->desc->erasable) { -+ /* CDRW */ -+ priv->info = BRASERO_MEDIUM_CDRW; -+ priv->type = types [3]; -+ priv->icon = icons [3]; -+ } -+ else { -+ /* CDR */ -+ priv->info = BRASERO_MEDIUM_CDR; -+ priv->type = types [2]; -+ priv->icon = icons [2]; -+ } -+ -+ g_free (data); -+ } -+ -+ /* retrieve the speed */ -+ result = brasero_medium_get_page_2A_max_speed (self, -+ fd, -+ code); -+ return result; -+ } -+ -+ switch (BRASERO_GET_16 (hdr->current_profile)) { -+ case BRASERO_SCSI_PROF_CDROM: -+ priv->info = BRASERO_MEDIUM_CDROM; -+ priv->type = types [1]; -+ priv->icon = icons [1]; -+ break; -+ -+ case BRASERO_SCSI_PROF_CDR: -+ priv->info = BRASERO_MEDIUM_CDR; -+ priv->type = types [2]; -+ priv->icon = icons [2]; -+ break; -+ -+ case BRASERO_SCSI_PROF_CDRW: -+ priv->info = BRASERO_MEDIUM_CDRW; -+ priv->type = types [3]; -+ priv->icon = icons [3]; -+ break; -+ -+ case BRASERO_SCSI_PROF_DVD_ROM: -+ priv->info = BRASERO_MEDIUM_DVD_ROM; -+ priv->type = types [4]; -+ priv->icon = icons [4]; -+ break; -+ -+ case BRASERO_SCSI_PROF_DVD_R: -+ priv->info = BRASERO_MEDIUM_DVDR; -+ priv->type = types [5]; -+ priv->icon = icons [5]; -+ break; -+ -+ case BRASERO_SCSI_PROF_DVD_RW_RESTRICTED: -+ priv->info = BRASERO_MEDIUM_DVDRW_RESTRICTED; -+ priv->type = types [6]; -+ priv->icon = icons [6]; -+ break; -+ -+ case BRASERO_SCSI_PROF_DVD_RW_SEQUENTIAL: -+ priv->info = BRASERO_MEDIUM_DVDRW; -+ priv->type = types [6]; -+ priv->icon = icons [6]; -+ break; -+ -+ case BRASERO_SCSI_PROF_DVD_R_PLUS: -+ priv->info = BRASERO_MEDIUM_DVDR_PLUS; -+ priv->type = types [7]; -+ priv->icon = icons [7]; -+ break; -+ -+ case BRASERO_SCSI_PROF_DVD_RW_PLUS: -+ priv->info = BRASERO_MEDIUM_DVDRW_PLUS; -+ priv->type = types [8]; -+ priv->icon = icons [7]; -+ break; -+ -+ /* WARNING: these types are recognized, no more */ -+ case BRASERO_SCSI_PROF_DVD_R_PLUS_DL: -+ priv->info = BRASERO_MEDIUM_DVDR_PLUS_DL; -+ priv->type = types [9]; -+ priv->icon = icons [7]; -+ break; -+ -+ case BRASERO_SCSI_PROF_DVD_RW_PLUS_DL: -+ priv->info = BRASERO_MEDIUM_DVDRW_PLUS_DL; -+ priv->type = types [10]; -+ priv->icon = icons [7]; -+ break; -+ -+ case BRASERO_SCSI_PROF_DVD_R_DL_SEQUENTIAL: -+ priv->info = BRASERO_MEDIUM_DVDR_DL; -+ priv->type = types [11]; -+ priv->icon = icons [5]; -+ break; -+ -+ case BRASERO_SCSI_PROF_DVD_R_DL_JUMP: -+ priv->info = BRASERO_MEDIUM_DVDR_JUMP_DL; -+ priv->type = types [11]; -+ priv->icon = icons [5]; -+ break; -+ -+ case BRASERO_SCSI_PROF_DVD_RAM: -+ priv->info = BRASERO_MEDIUM_DVD_RAM; -+ priv->type = types [12]; -+ priv->icon = icons [8]; -+ break; -+ -+ case BRASERO_SCSI_PROF_BD_ROM: -+ priv->info = BRASERO_MEDIUM_BD_ROM; -+ priv->type = types [13]; -+ priv->icon = icons [4]; -+ break; -+ -+ case BRASERO_SCSI_PROF_BR_R_SEQUENTIAL: -+ priv->info = BRASERO_MEDIUM_BDR; -+ priv->type = types [14]; -+ priv->icon = icons [5]; -+ break; -+ -+ case BRASERO_SCSI_PROF_BR_R_RANDOM: -+ priv->info = BRASERO_MEDIUM_BDR_RANDOM; -+ priv->type = types [14]; -+ priv->icon = icons [5]; -+ break; -+ -+ case BRASERO_SCSI_PROF_BD_RW: -+ priv->info = BRASERO_MEDIUM_BDRW; -+ priv->type = types [15]; -+ priv->icon = icons [6]; -+ break; -+ -+ case BRASERO_SCSI_PROF_NON_REMOVABLE: -+ case BRASERO_SCSI_PROF_REMOVABLE: -+ case BRASERO_SCSI_PROF_MO_ERASABLE: -+ case BRASERO_SCSI_PROF_MO_WRITE_ONCE: -+ case BRASERO_SCSI_PROF_MO_ADVANCED_STORAGE: -+ case BRASERO_SCSI_PROF_DDCD_ROM: -+ case BRASERO_SCSI_PROF_DDCD_R: -+ case BRASERO_SCSI_PROF_DDCD_RW: -+ case BRASERO_SCSI_PROF_HD_DVD_ROM: -+ case BRASERO_SCSI_PROF_HD_DVD_R: -+ case BRASERO_SCSI_PROF_HD_DVD_RAM: -+ priv->info = BRASERO_MEDIUM_UNSUPPORTED; -+ priv->icon = icons [0]; -+ g_free (hdr); -+ return BRASERO_BURN_NOT_SUPPORTED; -+ } -+ -+ /* try all SCSI functions to get write/read speeds in order */ -+ if (hdr->desc->add_len >= sizeof (BraseroScsiRTStreamDesc)) { -+ BraseroScsiRTStreamDesc *stream; -+ -+ /* means it's at least an MMC3 drive */ -+ stream = (BraseroScsiRTStreamDesc *) hdr->desc->data; -+ if (stream->wrt_spd) { -+ result = brasero_medium_get_speed_mmc3 (self, fd, code); -+ if (result == BRASERO_BURN_OK) -+ goto end; -+ } -+ -+ if (stream->mp2a) { -+ result = brasero_medium_get_page_2A_write_speed_desc (self, fd, code); -+ if (result == BRASERO_BURN_OK) -+ goto end; -+ } -+ } -+ -+ /* fallback for speeds */ -+ result = brasero_medium_get_page_2A_max_speed (self, fd, code); -+ -+end: -+ -+ g_free (hdr); -+ -+ if (result != BRASERO_BURN_OK) -+ return result; -+ -+ return BRASERO_BURN_OK; -+} -+ -+static BraseroBurnResult -+brasero_medium_get_css_feature (BraseroMedium *self, -+ int fd, -+ BraseroScsiErrCode *code) -+{ -+ BraseroScsiGetConfigHdr *hdr = NULL; -+ BraseroMediumPrivate *priv; -+ BraseroScsiResult result; -+ int size; -+ -+ priv = BRASERO_MEDIUM_PRIVATE (self); -+ -+ BRASERO_BURN_LOG ("Testing for Css encrypted media"); -+ result = brasero_mmc2_get_configuration_feature (fd, -+ BRASERO_SCSI_FEAT_DVD_CSS, -+ &hdr, -+ &size, -+ code); -+ if (result != BRASERO_SCSI_OK) { -+ g_free (hdr); -+ -+ BRASERO_BURN_LOG ("GET CONFIGURATION failed"); -+ return BRASERO_BURN_ERR; -+ } -+ -+ if (hdr->desc->add_len < sizeof (BraseroScsiDVDCssDesc)) { -+ g_free (hdr); -+ return BRASERO_BURN_OK; -+ } -+ -+ /* here we just need to see if this feature is current or not */ -+ if (hdr->desc->current) { -+ priv->info |= BRASERO_MEDIUM_PROTECTED; -+ BRASERO_BURN_LOG ("media is Css protected"); -+ } -+ -+ g_free (hdr); -+ return BRASERO_BURN_OK; -+} -+ -+/** -+ * Functions to get information about disc contents -+ */ -+ -+static void -+brasero_medium_set_track_type (BraseroMedium *self, -+ BraseroMediumTrack *track, -+ guchar control) -+{ -+ BraseroMediumPrivate *priv; -+ -+ priv = BRASERO_MEDIUM_PRIVATE (self); -+ -+ if (control & BRASERO_SCSI_TRACK_COPY) -+ track->type |= BRASERO_MEDIUM_TRACK_COPY; -+ -+ if (!(control & BRASERO_SCSI_TRACK_DATA)) { -+ track->type |= BRASERO_MEDIUM_TRACK_AUDIO; -+ priv->info |= BRASERO_MEDIUM_HAS_AUDIO; -+ -+ if (control & BRASERO_SCSI_TRACK_PREEMP) -+ track->type |= BRASERO_MEDIUM_TRACK_PREEMP; -+ -+ if (control & BRASERO_SCSI_TRACK_4_CHANNELS) -+ track->type |= BRASERO_MEDIUM_TRACK_4_CHANNELS; -+ } -+ else { -+ track->type |= BRASERO_MEDIUM_TRACK_DATA; -+ priv->info |= BRASERO_MEDIUM_HAS_DATA; -+ -+ if (control & BRASERO_SCSI_TRACK_DATA_INCREMENTAL) -+ track->type |= BRASERO_MEDIUM_TRACK_INCREMENTAL; -+ } -+} -+ -+static BraseroBurnResult -+brasero_medium_track_volume_size (BraseroMedium *self, -+ BraseroMediumTrack *track, -+ int fd) -+{ -+ BraseroMediumPrivate *priv; -+ BraseroBurnResult res; -+ GError *error = NULL; -+ gint64 nb_blocks; -+ -+ if (!track) -+ return BRASERO_BURN_ERR; -+ -+ priv = BRASERO_MEDIUM_PRIVATE (self); -+ -+ /* This is a special case. For DVD+RW and DVD-RW in restricted -+ * mode, there is only one session that takes the whole disc size -+ * once formatted. That doesn't necessarily means they have data -+ * Note also that they are reported as complete though you can -+ * still add data (with growisofs). It is nevertheless on the -+ * condition that the fs is valid. -+ * So we check if their first and only volume is valid. -+ * That's also used when the track size is reported a 300 Kio -+ * see below */ -+ res = brasero_volume_get_size_fd (fd, -+ track->start, -+ &nb_blocks, -+ NULL); -+ if (!res) { -+ BRASERO_BURN_LOG ("Failed to retrieve the volume size: %s", -+ error && error->message ? -+ error->message:"unknown error"); -+ -+ if (error) -+ g_error_free (error); -+ return BRASERO_BURN_ERR; -+ } -+ -+ track->blocks_num = nb_blocks; -+ return BRASERO_BURN_OK; -+} -+ -+static BraseroBurnResult -+brasero_medium_track_get_info (BraseroMedium *self, -+ BraseroMediumTrack *track, -+ int track_num, -+ int fd, -+ BraseroScsiErrCode *code) -+{ -+ BraseroScsiTrackInfo track_info; -+ BraseroMediumPrivate *priv; -+ BraseroScsiResult result; -+ int size; -+ -+ BRASERO_BURN_LOG ("Retrieving track information for %i", track_num); -+ -+ priv = BRASERO_MEDIUM_PRIVATE (self); -+ -+ /* at this point we know the type of the disc that's why we set the -+ * size according to this type. That may help to avoid outrange address -+ * errors. */ -+ if (BRASERO_MEDIUM_IS (priv->info, BRASERO_MEDIUM_DL|BRASERO_MEDIUM_WRITABLE)) -+ size = 48; -+ else if (BRASERO_MEDIUM_IS (priv->info, BRASERO_MEDIUM_PLUS|BRASERO_MEDIUM_WRITABLE)) -+ size = 40; -+ else -+ size = 36; -+ -+ result = brasero_mmc1_read_track_info (fd, -+ track_num, -+ &track_info, -+ &size, -+ code); -+ -+ if (result != BRASERO_SCSI_OK) { -+ BRASERO_BURN_LOG ("READ TRACK INFO failed"); -+ return BRASERO_BURN_ERR; -+ } -+ -+ track->blocks_num = BRASERO_GET_32 (track_info.track_size); -+ track->session = BRASERO_SCSI_SESSION_NUM (track_info); -+ -+ /* Now here is a potential bug: we can write tracks (data or not) -+ * shorter than 300 Kio /2 sec but they will be padded to reach this -+ * floor value. That means that is blocks_num is 300 blocks that may -+ * mean that the data length on the track is actually shorter. -+ * So we read the volume descriptor. If it works, good otherwise -+ * use the old value. -+ * That's important for checksuming to have a perfect account of the -+ * data size. */ -+ if (track->blocks_num <= 300) { -+ BRASERO_BURN_LOG ("300 sectors size. Checking for real size"); -+ brasero_medium_track_volume_size (self, track, fd); -+ } -+ -+ if (track_info.next_wrt_address_valid) -+ priv->next_wr_add = BRASERO_GET_32 (track_info.next_wrt_address); -+ -+ BRASERO_BURN_LOG ("Track %i (session %i): type = %i start = %llu size = %llu", -+ track_num, -+ track->session, -+ track->type, -+ track->start, -+ track->blocks_num); -+ -+ return BRASERO_BURN_OK; -+} -+ -+/** -+ * return : -+ * 0 when it's not possible to determine (fallback to formatted toc) -+ * -1 for BCD -+ * 1 for HEX */ -+static guint -+brasero_medium_check_BCD_use (BraseroMedium *self, -+ int fd, -+ BraseroScsiRawTocDesc *desc, -+ guint num, -+ BraseroScsiErrCode *code) -+{ -+ guint i; -+ int size; -+ guint leadout = 0; -+ guint track_num = 0; -+ gboolean use_BCD = TRUE; -+ gboolean use_HEX = TRUE; -+ BraseroScsiResult result; -+ BraseroScsiTrackInfo track_info; -+ guint start_BCD, start_LBA, track_start; -+ -+ /* first check if all values are valid BCD numbers in the descriptors */ -+ for (i = 0; i < num; i++) { -+ if (desc [i].adr == 1 && desc [i].point <= BRASERO_SCSI_Q_SUB_CHANNEL_TRACK_START) { -+ if (!BRASERO_IS_BCD_VALID (desc [i].p_min) -+ || !BRASERO_IS_BCD_VALID (desc [i].p_sec) -+ || !BRASERO_IS_BCD_VALID (desc [i].p_frame)) { -+ use_BCD = FALSE; -+ break; -+ } -+ } -+ else if (desc [i].point == BRASERO_SCSI_Q_SUB_CHANNEL_LEADOUT_START) { -+ if (!BRASERO_IS_BCD_VALID (desc [i].p_min) -+ || !BRASERO_IS_BCD_VALID (desc [i].p_sec) -+ || !BRASERO_IS_BCD_VALID (desc [i].p_frame)) { -+ use_BCD = FALSE; -+ break; -+ } -+ } -+ } -+ -+ /* then check if there are valid Hex values */ -+ for (i = 0; i < num; i++) { -+ if (desc [i].adr != 1 || desc [i].point > BRASERO_SCSI_Q_SUB_CHANNEL_TRACK_START) -+ continue; -+ -+ if (desc [i].p_min > 99 -+ || desc [i].p_sec > 59 -+ || desc [i].p_frame > 74) { -+ use_HEX = FALSE; -+ break; -+ } -+ } -+ -+ if (use_BCD != use_HEX) { -+ if (use_BCD) -+ return -1; -+ -+ return 1; -+ } -+ -+ /* To check if the drive uses BCD values or HEX values we ask for the -+ * track information that contains also the start for the track but in -+ * HEX values. If values are the same then it works. */ -+ -+ /* NOTE: there could be another way to do it: get first track, in LBA -+ * and BCD it must be 150. */ -+ -+ /* First find the first track and get track start address in BCD */ -+ BRASERO_BURN_LOG ("Retrieving track information to determine number format"); -+ -+ for (i = 0; i < num; i++) { -+ if (desc [i].adr == BRASERO_SCSI_Q_SUB_CHANNEL_LEADIN_MODE5 -+ && desc [i].point == BRASERO_SCSI_Q_SUB_CHANNEL_MULTI_NEXT_SESSION) { -+ /* store the leadout number just in case */ -+ leadout = i; -+ continue; -+ } -+ -+ if (desc [i].adr != 1 || desc [i].point > BRASERO_SCSI_Q_SUB_CHANNEL_TRACK_START) -+ continue; -+ -+ track_num ++; -+ -+ start_BCD = BRASERO_MSF_TO_LBA (BRASERO_GET_BCD (desc [i].p_min), -+ BRASERO_GET_BCD (desc [i].p_sec), -+ BRASERO_GET_BCD (desc [i].p_frame)); -+ -+ start_LBA = BRASERO_MSF_TO_LBA (desc [i].p_min, -+ desc [i].p_sec, -+ desc [i].p_frame); -+ -+ BRASERO_BURN_LOG ("Comparing to track information from READ TRACK INFO for track %i", track_num); -+ -+ size = 36; -+ start_LBA -= 150; -+ start_BCD -= 150; -+ -+ result = brasero_mmc1_read_track_info (fd, -+ track_num, -+ &track_info, -+ &size, -+ code); -+ -+ if (result != BRASERO_SCSI_OK) { -+ BRASERO_BURN_LOG ("READ TRACK INFO failed"); -+ /* Fallback to formatted toc */ -+ return 0; -+ } -+ -+ track_start = BRASERO_GET_32 (track_info.start_lba); -+ BRASERO_BURN_LOG ("comparing DCB %i and LBA %i to real start address %i", -+ start_BCD, start_LBA, track_start); -+ -+ /* try to find a conclusive match */ -+ if (track_start == start_BCD && track_start != start_LBA) -+ return -1; -+ -+ if (track_start == start_LBA && track_start != start_BCD) -+ return 1; -+ } -+ -+ /* Our last chance, the leadout. -+ * NOTE: no need to remove 150 sectors here. */ -+ start_BCD = BRASERO_MSF_TO_LBA (BRASERO_GET_BCD (desc [leadout].min), -+ BRASERO_GET_BCD (desc [leadout].sec), -+ BRASERO_GET_BCD (desc [leadout].frame)); -+ -+ start_LBA = BRASERO_MSF_TO_LBA (desc [leadout].min, -+ desc [leadout].sec, -+ desc [leadout].frame); -+ -+ BRASERO_BURN_LOG ("Comparing to track information from READ TRACK INFO for leadout"); -+ -+ size = 36; -+ -+ /* leadout number is number of tracks + 1 */ -+ result = brasero_mmc1_read_track_info (fd, -+ track_num + 1, -+ &track_info, -+ &size, -+ code); -+ -+ if (result != BRASERO_SCSI_OK) { -+ BRASERO_BURN_LOG ("READ TRACK INFO failed for leadout"); -+ /* Fallback to formatted toc */ -+ return 0; -+ } -+ -+ track_start = BRASERO_GET_32 (track_info.start_lba); -+ BRASERO_BURN_LOG ("comparing DCB %i and LBA %i to real start address %i", -+ start_BCD, start_LBA, track_start); -+ -+ /* try to find a conclusive match */ -+ if (track_start == start_BCD && track_start != start_LBA) -+ return -1; -+ -+ if (track_start == start_LBA && track_start != start_BCD) -+ return 1; -+ -+ /* fallback to formatted toc */ -+ return 0; -+} -+ -+/** -+ * The reason why we use this perhaps more lengthy method is that with -+ * multisession discs, the first track is reported to be two sectors shorter -+ * than it should. As I don't know why and since the following works we use -+ * this one. */ -+static BraseroBurnResult -+brasero_medium_get_CD_sessions_info (BraseroMedium *self, -+ int fd, -+ BraseroScsiErrCode *code) -+{ -+ gint use_bcd; -+ GSList *iter; -+ int num, i, size; -+ gint leadout_start = 0; -+ BraseroScsiResult result; -+ BraseroMediumPrivate *priv; -+ BraseroScsiRawTocDesc *desc; -+ BraseroScsiRawTocData *toc = NULL; -+ -+ BRASERO_BURN_LOG ("Reading Raw Toc"); -+ -+ priv = BRASERO_MEDIUM_PRIVATE (self); -+ -+ size = 0; -+ result = brasero_mmc1_read_toc_raw (fd, -+ 0, -+ &toc, -+ &size, -+ code); -+ if (result != BRASERO_SCSI_OK) { -+ BRASERO_BURN_LOG ("READ TOC failed"); -+ return BRASERO_BURN_ERR; -+ } -+ -+ num = (size - sizeof (BraseroScsiRawTocData)) / -+ sizeof (BraseroScsiRawTocDesc); -+ -+ BRASERO_BURN_LOG ("%i track(s) found", num); -+ -+ desc = toc->desc; -+ use_bcd = brasero_medium_check_BCD_use (self, fd, desc, num, code); -+ if (!use_bcd) { -+ g_free (toc); -+ -+ BRASERO_BURN_LOG ("Fallback to formatted toc"); -+ return BRASERO_BURN_ERR; -+ } -+ -+ if (use_bcd > 0) -+ use_bcd = 0; -+ -+ if (use_bcd) { -+ BRASERO_BURN_LOG ("Using BCD format"); -+ } -+ else { -+ BRASERO_BURN_LOG ("Using HEX format"); -+ } -+ -+ for (i = 0; i < num; i++, desc ++) { -+ BraseroMediumTrack *track; -+ -+ track = NULL; -+ if (desc->adr == 1 && desc->point <= BRASERO_SCSI_Q_SUB_CHANNEL_TRACK_START) { -+ track = g_new0 (BraseroMediumTrack, 1); -+ track->session = desc->session_num; -+ -+ brasero_medium_set_track_type (self, track, desc->control); -+ if (use_bcd) -+ track->start = BRASERO_MSF_TO_LBA (BRASERO_GET_BCD (desc->p_min), -+ BRASERO_GET_BCD (desc->p_sec), -+ BRASERO_GET_BCD (desc->p_frame)); -+ else -+ track->start = BRASERO_MSF_TO_LBA (desc->p_min, -+ desc->p_sec, -+ desc->p_frame); -+ -+ track->start -= 150; -+ -+ /* if there are tracks and the last previously added track is in -+ * the same session then set the size */ -+ if (priv->tracks) { -+ BraseroMediumTrack *last_track; -+ -+ last_track = priv->tracks->data; -+ if (last_track->session == track->session) -+ last_track->blocks_num = track->start - last_track->start; -+ } -+ -+ priv->tracks = g_slist_prepend (priv->tracks, track); -+ } -+ else if (desc->point == BRASERO_SCSI_Q_SUB_CHANNEL_LEADOUT_START) { -+ /* NOTE: the leadout session is first in the list. So if -+ * we have tracks in the list set the last session track -+ * size when we reach a new leadout (and therefore a new -+ * session). */ -+ -+ if (priv->tracks) { -+ BraseroMediumTrack *last_track; -+ -+ last_track = priv->tracks->data; -+ last_track->blocks_num = leadout_start - last_track->start; -+ } -+ -+ if (use_bcd) -+ leadout_start = BRASERO_MSF_TO_LBA (BRASERO_GET_BCD (desc->p_min), -+ BRASERO_GET_BCD (desc->p_sec), -+ BRASERO_GET_BCD (desc->p_frame)); -+ else -+ leadout_start = BRASERO_MSF_TO_LBA (desc->p_min, -+ desc->p_sec, -+ desc->p_frame); -+ leadout_start -= 150; -+ } -+ } -+ -+ if (priv->tracks) { -+ BraseroMediumTrack *last_track; -+ -+ /* set the last found track size */ -+ last_track = priv->tracks->data; -+ last_track->blocks_num = leadout_start - last_track->start; -+ } -+ -+ /* Add a leadout */ -+ if (!(priv->info & BRASERO_MEDIUM_CLOSED)) { -+ BraseroMediumTrack *track; -+ -+ /* we shouldn't request info on leadout if the disc is closed */ -+ track = g_new0 (BraseroMediumTrack, 1); -+ priv->tracks = g_slist_prepend (priv->tracks, track); -+ track->start = leadout_start; -+ track->type = BRASERO_MEDIUM_TRACK_LEADOUT; -+ -+ brasero_medium_track_get_info (self, track, g_slist_length (priv->tracks), fd, code); -+ } -+ -+ priv->tracks = g_slist_reverse (priv->tracks); -+ -+ for (iter = priv->tracks; iter; iter = iter->next) { -+ BraseroMediumTrack *track; -+ -+ track = iter->data; -+ -+ /* check for tracks less that 300 sectors */ -+ if (track->blocks_num <= 300 && track->type != BRASERO_MEDIUM_TRACK_LEADOUT) { -+ BRASERO_BURN_LOG ("300 sectors size. Checking for real size"); -+ brasero_medium_track_volume_size (self, track, fd); -+ } -+ -+ BRASERO_BURN_LOG ("Track %i: type = %i start = %llu size = %llu", -+ g_slist_index (priv->tracks, track), -+ track->type, -+ track->start, -+ track->blocks_num); -+ } -+ -+ g_free (toc); -+ return BRASERO_BURN_OK; -+} -+ -+/** -+ * NOTE: for DVD-R multisession we lose 28688 blocks for each session -+ * so the capacity is the addition of all session sizes + 28688 for each -+ * For all multisession DVD-/+R and CDR-RW the remaining size is given -+ * in the leadout. One exception though with DVD+/-RW. -+ */ -+ -+static void -+brasero_medium_add_DVD_plus_RW_leadout (BraseroMedium *self, -+ gint32 start) -+{ -+ BraseroMediumTrack *leadout; -+ BraseroMediumPrivate *priv; -+ -+ priv = BRASERO_MEDIUM_PRIVATE (self); -+ -+ leadout = g_new0 (BraseroMediumTrack, 1); -+ priv->tracks = g_slist_append (priv->tracks, leadout); -+ -+ leadout->start = start; -+ leadout->type = BRASERO_MEDIUM_TRACK_LEADOUT; -+ -+ /* we fabricate the leadout here. We don't really need one in -+ * fact since it is always at the last sector whatever the -+ * amount of data written. So we need in fact to read the file -+ * system and get the last sector from it. Hopefully it won't be -+ * buggy */ -+ priv->next_wr_add = 0; -+ -+ leadout->blocks_num = priv->block_num; -+ if (g_slist_length (priv->tracks) > 1) { -+ BraseroMediumTrack *track; -+ -+ track = priv->tracks->data; -+ leadout->blocks_num -= ((track->blocks_num > 300) ? track->blocks_num : 300); -+ } -+ BRASERO_BURN_LOG ("Adding fabricated leadout start = %llu length = %llu", -+ leadout->start, -+ leadout->blocks_num); -+} -+ -+static BraseroBurnResult -+brasero_medium_get_sessions_info (BraseroMedium *self, -+ int fd, -+ BraseroScsiErrCode *code) -+{ -+ int num, i, size; -+ BraseroScsiResult result; -+ BraseroScsiTocDesc *desc; -+ BraseroMediumPrivate *priv; -+ BraseroScsiFormattedTocData *toc = NULL; -+ -+ BRASERO_BURN_LOG ("Reading Toc"); -+ -+ priv = BRASERO_MEDIUM_PRIVATE (self); -+ result = brasero_mmc1_read_toc_formatted (fd, -+ 0, -+ &toc, -+ &size, -+ code); -+ if (result != BRASERO_SCSI_OK) { -+ g_free (toc); -+ -+ BRASERO_BURN_LOG ("READ TOC failed"); -+ return BRASERO_BURN_ERR; -+ } -+ -+ num = (size - sizeof (BraseroScsiFormattedTocData)) / -+ sizeof (BraseroScsiTocDesc); -+ -+ BRASERO_BURN_LOG ("%i track(s) found", num); -+ -+ desc = toc->desc; -+ for (i = 0; i < num; i ++, desc ++) { -+ BraseroMediumTrack *track; -+ -+ if (desc->track_num == BRASERO_SCSI_TRACK_LEADOUT_START) -+ break; -+ -+ track = g_new0 (BraseroMediumTrack, 1); -+ priv->tracks = g_slist_prepend (priv->tracks, track); -+ track->start = BRASERO_GET_32 (desc->track_start); -+ -+ /* we shouldn't request info on a track if the disc is closed */ -+ brasero_medium_track_get_info (self, -+ track, -+ g_slist_length (priv->tracks), -+ fd, -+ code); -+ -+ if (desc->control & BRASERO_SCSI_TRACK_COPY) -+ track->type |= BRASERO_MEDIUM_TRACK_COPY; -+ -+ if (!(desc->control & BRASERO_SCSI_TRACK_DATA)) { -+ track->type |= BRASERO_MEDIUM_TRACK_AUDIO; -+ priv->info |= BRASERO_MEDIUM_HAS_AUDIO; -+ -+ if (desc->control & BRASERO_SCSI_TRACK_PREEMP) -+ track->type |= BRASERO_MEDIUM_TRACK_PREEMP; -+ -+ if (desc->control & BRASERO_SCSI_TRACK_4_CHANNELS) -+ track->type |= BRASERO_MEDIUM_TRACK_4_CHANNELS; -+ } -+ else if (BRASERO_MEDIUM_IS (priv->info, BRASERO_MEDIUM_DVDRW_PLUS) -+ || BRASERO_MEDIUM_IS (priv->info, BRASERO_MEDIUM_DVDRW_RESTRICTED)) { -+ BraseroBurnResult result; -+ -+ /* a special case for these two kinds of media (DVD+RW) -+ * which have only one track: the first. */ -+ result = brasero_medium_track_volume_size (self, -+ track, -+ fd); -+ if (result == BRASERO_BURN_OK) { -+ track->type |= BRASERO_MEDIUM_TRACK_DATA; -+ priv->info |= BRASERO_MEDIUM_HAS_DATA; -+ -+ priv->next_wr_add = 0; -+ -+ if (desc->control & BRASERO_SCSI_TRACK_DATA_INCREMENTAL) -+ track->type |= BRASERO_MEDIUM_TRACK_INCREMENTAL; -+ } -+ else { -+ priv->tracks = g_slist_remove (priv->tracks, track); -+ g_free (track); -+ -+ priv->info |= BRASERO_MEDIUM_BLANK; -+ priv->info &= ~BRASERO_MEDIUM_CLOSED; -+ } -+ } -+ else { -+ track->type |= BRASERO_MEDIUM_TRACK_DATA; -+ priv->info |= BRASERO_MEDIUM_HAS_DATA; -+ -+ if (desc->control & BRASERO_SCSI_TRACK_DATA_INCREMENTAL) -+ track->type |= BRASERO_MEDIUM_TRACK_INCREMENTAL; -+ } -+ } -+ -+ /* put the tracks in the right order */ -+ priv->tracks = g_slist_reverse (priv->tracks); -+ -+ if (BRASERO_MEDIUM_IS (priv->info, BRASERO_MEDIUM_DVDRW_PLUS) -+ || BRASERO_MEDIUM_IS (priv->info, BRASERO_MEDIUM_DVDRW_RESTRICTED)) -+ brasero_medium_add_DVD_plus_RW_leadout (self, BRASERO_GET_32 (desc->track_start)); -+ else if (!(priv->info & BRASERO_MEDIUM_CLOSED)) { -+ BraseroMediumTrack *track; -+ -+ /* we shouldn't request info on leadout if the disc is closed -+ * (except for DVD+/- (restricted) RW (see above) */ -+ track = g_new0 (BraseroMediumTrack, 1); -+ priv->tracks = g_slist_append (priv->tracks, track); -+ track->start = BRASERO_GET_32 (desc->track_start); -+ track->type = BRASERO_MEDIUM_TRACK_LEADOUT; -+ -+ brasero_medium_track_get_info (self, -+ track, -+ g_slist_length (priv->tracks), -+ fd, -+ code); -+ } -+ -+ g_free (toc); -+ -+ return BRASERO_BURN_OK; -+} -+ -+static BraseroBurnResult -+brasero_medium_get_contents (BraseroMedium *self, -+ int fd, -+ BraseroScsiErrCode *code) -+{ -+ int size; -+ BraseroScsiResult result; -+ BraseroMediumPrivate *priv; -+ BraseroScsiDiscInfoStd *info = NULL; -+ -+ BRASERO_BURN_LOG ("Retrieving media status"); -+ -+ priv = BRASERO_MEDIUM_PRIVATE (self); -+ -+ result = brasero_mmc1_read_disc_information_std (fd, -+ &info, -+ &size, -+ code); -+ if (result != BRASERO_SCSI_OK) { -+ g_free (info); -+ -+ BRASERO_BURN_LOG ("READ DISC INFORMATION failed"); -+ return BRASERO_BURN_ERR; -+ } -+ -+ if (info->erasable) -+ priv->info |= BRASERO_MEDIUM_REWRITABLE; -+ -+ if (info->status == BRASERO_SCSI_DISC_EMPTY) { -+ BraseroMediumTrack *track; -+ -+ BRASERO_BURN_LOG ("Empty media"); -+ -+ priv->info |= BRASERO_MEDIUM_BLANK; -+ priv->block_size = 2048; -+ -+ if (BRASERO_MEDIUM_IS (priv->info, BRASERO_MEDIUM_DVDRW_PLUS) -+ || BRASERO_MEDIUM_IS (priv->info, BRASERO_MEDIUM_DVDRW_RESTRICTED)) -+ brasero_medium_add_DVD_plus_RW_leadout (self, 0); -+ else { -+ track = g_new0 (BraseroMediumTrack, 1); -+ track->start = 0; -+ track->type = BRASERO_MEDIUM_TRACK_LEADOUT; -+ priv->tracks = g_slist_prepend (priv->tracks, track); -+ -+ brasero_medium_track_get_info (self, -+ track, -+ 1, -+ fd, -+ code); -+ } -+ goto end; -+ } -+ -+ if (info->status == BRASERO_SCSI_DISC_INCOMPLETE) { -+ priv->info |= BRASERO_MEDIUM_APPENDABLE; -+ BRASERO_BURN_LOG ("Appendable media"); -+ } -+ else if (info->status == BRASERO_SCSI_DISC_FINALIZED) { -+ priv->info |= BRASERO_MEDIUM_CLOSED; -+ BRASERO_BURN_LOG ("Closed media"); -+ } -+ -+ if (priv->info & BRASERO_MEDIUM_CD) { -+ result = brasero_medium_get_CD_sessions_info (self, fd, code); -+ if (result != BRASERO_BURN_OK) -+ result = brasero_medium_get_sessions_info (self, fd, code); -+ } -+ else -+ result = brasero_medium_get_sessions_info (self, fd, code); -+ -+ if (result != BRASERO_BURN_OK) -+ goto end; -+ -+end: -+ -+ g_free (info); -+ return BRASERO_BURN_OK; -+} -+ -+static void -+brasero_medium_init_real (BraseroMedium *object, int fd) -+{ -+ gchar *name; -+ BraseroBurnResult result; -+ BraseroMediumPrivate *priv; -+ BraseroScsiErrCode code = 0; -+ -+ priv = BRASERO_MEDIUM_PRIVATE (object); -+ -+ name = nautilus_burn_drive_get_name_for_display (priv->drive); -+ BRASERO_BURN_LOG ("Initializing information for medium in %s", name); -+ g_free (name); -+ -+ result = brasero_medium_get_medium_type (object, fd, &code); -+ if (result != BRASERO_BURN_OK) -+ return; -+ -+ brasero_medium_get_capacity_by_type (object, fd, &code); -+ -+ result = brasero_medium_get_contents (object, fd, &code); -+ if (result != BRASERO_BURN_OK) -+ return; -+ -+ /* assume that css feature is only for DVD-ROM which might be wrong but -+ * some drives wrongly reports that css is enabled for blank DVD+R/W */ -+ if (BRASERO_MEDIUM_IS (priv->info, (BRASERO_MEDIUM_DVD|BRASERO_MEDIUM_ROM))) -+ brasero_medium_get_css_feature (object, fd, &code); -+ -+ BRASERO_BURN_LOG_DISC_TYPE (priv->info, "media is "); -+} -+ -+static gboolean -+brasero_medium_retry_open (gpointer object) -+{ -+ int fd; -+ const gchar *path; -+ BraseroMedium *self; -+ BraseroMediumPrivate *priv; -+ -+ self = BRASERO_MEDIUM (object); -+ priv = BRASERO_MEDIUM_PRIVATE (object); -+ path = nautilus_burn_drive_get_device (priv->drive); -+ -+ BRASERO_BURN_LOG ("Retrying to open device %s", path); -+ fd = open (path, OPEN_FLAGS); -+ if (fd < 0) { -+ if (errno == EBUSY -+ || errno == EAGAIN -+ || errno == EWOULDBLOCK) { -+ BRASERO_BURN_LOG ("Device busy"); -+ /* we'll retry in a second */ -+ return TRUE; -+ } -+ -+ BRASERO_BURN_LOG ("Open () failed"); -+ priv->info = BRASERO_MEDIUM_UNSUPPORTED; -+ priv->retry_id = 0; -+ return FALSE; -+ } -+ -+ BRASERO_BURN_LOG ("Open () succeeded\n"); -+ priv->info = BRASERO_MEDIUM_NONE; -+ priv->icon = icons [0]; -+ -+ priv->retry_id = 0; -+ -+ brasero_medium_init_real (self, fd); -+ close (fd); -+ -+ return FALSE; -+} -+ -+static void -+brasero_medium_try_open (BraseroMedium *self) -+{ -+ int fd; -+ const gchar *path; -+ BraseroMediumPrivate *priv; -+ -+ priv = BRASERO_MEDIUM_PRIVATE (self); -+ path = nautilus_burn_drive_get_device (priv->drive); -+ -+ /* the drive might be busy (a burning is going on) so we don't block -+ * but we re-try to open it every second */ -+ BRASERO_BURN_LOG ("Trying to open device %s", path); -+ fd = open (path, OPEN_FLAGS); -+ if (fd < 0) { -+ if (errno == EAGAIN -+ || errno == EWOULDBLOCK -+ || errno == EBUSY) { -+ BRASERO_BURN_LOG ("Device busy"); -+ priv->info = BRASERO_MEDIUM_BUSY; -+ priv->icon = icons [0]; -+ -+ priv->retry_id = g_timeout_add (BUSY_RETRY_TIME, -+ brasero_medium_retry_open, -+ self); -+ } -+ -+ BRASERO_BURN_LOG ("Open () failed"); -+ return; -+ } -+ -+ BRASERO_BURN_LOG ("Open () succeeded"); -+ brasero_medium_init_real (self, fd); -+ close (fd); -+} -+ -+static void -+brasero_medium_init (BraseroMedium *object) -+{ -+ BraseroMediumPrivate *priv; -+ -+ priv = BRASERO_MEDIUM_PRIVATE (object); -+ priv->next_wr_add = -1; -+ -+ /* we can't do anything here since properties haven't been set yet */ -+} -+ -+static void -+brasero_medium_finalize (GObject *object) -+{ -+ BraseroMediumPrivate *priv; -+ -+ priv = BRASERO_MEDIUM_PRIVATE (object); -+ -+ if (priv->retry_id) { -+ g_source_remove (priv->retry_id); -+ priv->retry_id = 0; -+ } -+ -+ g_free (priv->rd_speeds); -+ priv->rd_speeds = NULL; -+ -+ g_free (priv->wr_speeds); -+ priv->wr_speeds = NULL; -+ -+ g_slist_foreach (priv->tracks, (GFunc) g_free, NULL); -+ g_slist_free (priv->tracks); -+ priv->tracks = NULL; -+ -+ nautilus_burn_drive_unref (priv->drive); -+ priv->drive = NULL; -+ -+ G_OBJECT_CLASS (parent_class)->finalize (object); -+} -+ -+static void -+brasero_medium_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) -+{ -+ BraseroMediumPrivate *priv; -+ -+ g_return_if_fail (BRASERO_IS_MEDIUM (object)); -+ -+ priv = BRASERO_MEDIUM_PRIVATE (object); -+ -+ switch (prop_id) -+ { -+ case PROP_DRIVE: -+ priv->drive = g_value_get_object (value); -+ nautilus_burn_drive_ref (priv->drive); -+ brasero_medium_try_open (BRASERO_MEDIUM (object)); -+ break; -+ default: -+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); -+ break; -+ } -+} -+ -+static void -+brasero_medium_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) -+{ -+ BraseroMediumPrivate *priv; -+ -+ g_return_if_fail (BRASERO_IS_MEDIUM (object)); -+ -+ priv = BRASERO_MEDIUM_PRIVATE (object); -+ -+ switch (prop_id) -+ { -+ case PROP_DRIVE: -+ nautilus_burn_drive_ref (priv->drive); -+ g_value_set_object (value, priv->drive); -+ break; -+ default: -+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); -+ break; -+ } -+} -+ -+static void -+brasero_medium_class_init (BraseroMediumClass *klass) -+{ -+ GObjectClass* object_class = G_OBJECT_CLASS (klass); -+ parent_class = G_OBJECT_CLASS (g_type_class_peek_parent (klass)); -+ -+ g_type_class_add_private (klass, sizeof (BraseroMediumPrivate)); -+ -+ object_class->finalize = brasero_medium_finalize; -+ object_class->set_property = brasero_medium_set_property; -+ object_class->get_property = brasero_medium_get_property; -+ -+ g_object_class_install_property (object_class, -+ PROP_DRIVE, -+ g_param_spec_object ("drive", -+ "drive", -+ "drive in which medium is inserted", -+ NAUTILUS_BURN_TYPE_DRIVE, -+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); -+} -+ -+GType -+brasero_medium_get_type (void) -+{ -+ static GType our_type = 0; -+ -+ if (our_type == 0) -+ { -+ static const GTypeInfo our_info = -+ { -+ sizeof (BraseroMediumClass), /* class_size */ -+ (GBaseInitFunc) NULL, /* base_init */ -+ (GBaseFinalizeFunc) NULL, /* base_finalize */ -+ (GClassInitFunc) brasero_medium_class_init, /* class_init */ -+ (GClassFinalizeFunc) NULL, /* class_finalize */ -+ NULL /* class_data */, -+ sizeof (BraseroMedium), /* instance_size */ -+ 0, /* n_preallocs */ -+ (GInstanceInitFunc) brasero_medium_init, /* instance_init */ -+ NULL /* value_table */ -+ }; -+ -+ our_type = g_type_register_static (G_TYPE_OBJECT, "BraseroMedium", -+ &our_info, 0); -+ } -+ -+ return our_type; -+} -+ -+BraseroMedium * -+brasero_medium_new (NautilusBurnDrive *drive) -+{ -+ g_return_val_if_fail (drive != NULL, NULL); -+ return BRASERO_MEDIUM (g_object_new (BRASERO_TYPE_MEDIUM, -+ "drive", drive, -+ NULL)); -+} diff --git a/sysutils/brasero/files/patch-src_burn-medium.c b/sysutils/brasero/files/patch-src_burn-medium.c deleted file mode 100644 index accb659e2516..000000000000 --- a/sysutils/brasero/files/patch-src_burn-medium.c +++ /dev/null @@ -1,2073 +0,0 @@ ---- src/burn-medium.c.orig 2008-01-27 10:25:14.000000000 -0500 -+++ src/burn-medium.c 2008-02-06 01:55:21.000000000 -0500 -@@ -1,2070 +0,0 @@ --/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ --/* -- * brasero -- * Copyright (C) Philippe Rouquier 2007 <bonfire-app@wanadoo.fr> -- * -- * brasero is free software. -- * -- * You may redistribute it and/or modify it under the terms of the -- * GNU General Public License, as published by the Free Software -- * Foundation; either version 2 of the License, or (at your option) -- * any later version. -- * -- * brasero is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -- * See the GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with brasero. If not, write to: -- * The Free Software Foundation, Inc., -- * 51 Franklin Street, Fifth Floor -- * Boston, MA 02110-1301, USA. -- */ -- --#ifdef HAVE_CONFIG_H --# include <config.h> --#endif -- --#include <sys/types.h> --#include <sys/stat.h> --#include <fcntl.h> --#include <errno.h> -- --#include <glib.h> --#include <glib/gi18n-lib.h> -- --#include <nautilus-burn-drive.h> -- --#include "burn-basics.h" --#include "burn-debug.h" --#include "burn-medium.h" --#include "scsi-mmc1.h" --#include "scsi-mmc2.h" --#include "scsi-mmc3.h" --#include "scsi-spc1.h" --#include "scsi-utils.h" --#include "scsi-mode-pages.h" --#include "scsi-status-page.h" --#include "scsi-q-subchannel.h" --#include "scsi-dvd-structures.h" --#include "burn-volume.h" --#include "brasero-ncb.h" -- --const gchar *icons [] = { "gnome-dev-removable", -- "gnome-dev-cdrom", -- "gnome-dev-disc-cdr", -- "gnome-dev-disc-cdrw", -- "gnome-dev-disc-dvdrom", -- "gnome-dev-disc-dvdr", -- "gnome-dev-disc-dvdrw", -- "gnome-dev-disc-dvdr-plus", -- "gnome-dev-disc-dvdram", -- NULL }; --const gchar *types [] = { N_("file"), -- N_("CDROM"), -- N_("CD-R"), -- N_("CD-RW"), -- N_("DVDROM"), -- N_("DVD-R"), -- N_("DVD-RW"), -- N_("DVD+R"), -- N_("DVD+RW"), -- N_("DVD+R dual layer"), -- N_("DVD+RW dual layer"), -- N_("DVD-R dual layer"), -- N_("DVD-RAM"), -- N_("Blu-ray disc"), -- N_("Writable Blu-ray disc"), -- N_("Rewritable Blu-ray disc"), -- NULL }; -- -- --typedef struct _BraseroMediumPrivate BraseroMediumPrivate; --struct _BraseroMediumPrivate --{ -- gint retry_id; -- -- GSList * tracks; -- -- const gchar *type; -- const gchar *icon; -- -- gint max_rd; -- gint max_wrt; -- -- gint *rd_speeds; -- gint *wr_speeds; -- -- gint64 block_num; -- gint64 block_size; -- -- guint64 next_wr_add; -- BraseroMedia info; -- NautilusBurnDrive * drive; --}; -- --#define BRASERO_MEDIUM_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), BRASERO_TYPE_MEDIUM, BraseroMediumPrivate)) -- --/** -- * Try to open the drive exclusively but don't block; if drive can't be opened -- * exclusively then retry every second until we're shut or the drive state -- * changes to not busy. -- * No exclusive at the moment since when the medium is mounted we can't use excl -- */ -- --#define OPEN_FLAGS O_RDONLY /*|O_EXCL */|O_NONBLOCK --#define BUSY_RETRY_TIME 1000 -- --enum --{ -- PROP_0, -- PROP_DRIVE --}; -- --static GObjectClass* parent_class = NULL; -- --const gchar * --brasero_medium_get_type_string (BraseroMedium *medium) --{ -- BraseroMediumPrivate *priv; -- -- priv = BRASERO_MEDIUM_PRIVATE (medium); -- return priv->type; --} -- --const gchar * --brasero_medium_get_icon (BraseroMedium *medium) --{ -- BraseroMediumPrivate *priv; -- -- priv = BRASERO_MEDIUM_PRIVATE (medium); -- return priv->icon; --} -- --BraseroMedia --brasero_medium_get_status (BraseroMedium *medium) --{ -- BraseroMediumPrivate *priv; -- -- priv = BRASERO_MEDIUM_PRIVATE (medium); -- return priv->info; --} -- --GSList * --brasero_medium_get_tracks (BraseroMedium *medium) --{ -- BraseroMediumPrivate *priv; -- -- priv = BRASERO_MEDIUM_PRIVATE (medium); -- return g_slist_copy (priv->tracks); --} -- --gboolean --brasero_medium_get_last_data_track_address (BraseroMedium *medium, -- gint64 *byte, -- gint64 *sector) --{ -- GSList *iter; -- BraseroMediumPrivate *priv; -- BraseroMediumTrack *track = NULL; -- -- priv = BRASERO_MEDIUM_PRIVATE (medium); -- -- for (iter = priv->tracks; iter; iter = iter->next) { -- BraseroMediumTrack *current; -- -- current = iter->data; -- if (current->type & BRASERO_MEDIUM_TRACK_DATA) -- track = current; -- } -- -- if (!track) { -- if (byte) -- *byte = -1; -- if (sector) -- *sector = -1; -- return FALSE; -- } -- -- if (byte) -- *byte = track->start * priv->block_size; -- -- if (sector) -- *sector = track->start; -- -- return TRUE; --} -- --gboolean --brasero_medium_get_last_data_track_space (BraseroMedium *medium, -- gint64 *size, -- gint64 *blocks) --{ -- GSList *iter; -- BraseroMediumPrivate *priv; -- BraseroMediumTrack *track = NULL; -- -- priv = BRASERO_MEDIUM_PRIVATE (medium); -- -- for (iter = priv->tracks; iter; iter = iter->next) { -- BraseroMediumTrack *current; -- -- current = iter->data; -- if (current->type & BRASERO_MEDIUM_TRACK_DATA) -- track = current; -- } -- -- if (!track) { -- if (size) -- *size = -1; -- if (blocks) -- *blocks = -1; -- return FALSE; -- } -- -- if (size) -- *size = track->blocks_num * priv->block_size; -- if (blocks) -- *blocks = track->blocks_num; -- -- return TRUE; --} -- --guint --brasero_medium_get_track_num (BraseroMedium *medium) --{ -- guint retval = 0; -- GSList *iter; -- BraseroMediumPrivate *priv; -- -- priv = BRASERO_MEDIUM_PRIVATE (medium); -- for (iter = priv->tracks; iter; iter = iter->next) { -- BraseroMediumTrack *current; -- -- current = iter->data; -- if (current->type & BRASERO_MEDIUM_TRACK_LEADOUT) -- break; -- -- retval ++; -- } -- -- return retval; --} -- --static BraseroMediumTrack * --brasero_medium_get_track (BraseroMedium *medium, -- guint num) --{ -- guint i = 1; -- GSList *iter; -- BraseroMediumPrivate *priv; -- -- priv = BRASERO_MEDIUM_PRIVATE (medium); -- -- for (iter = priv->tracks; iter; iter = iter->next) { -- BraseroMediumTrack *current; -- -- current = iter->data; -- if (current->type == BRASERO_MEDIUM_TRACK_LEADOUT) -- break; -- -- if (i == num) -- return current; -- -- i++; -- } -- -- return NULL; --} -- --gboolean --brasero_medium_get_track_space (BraseroMedium *medium, -- guint num, -- gint64 *size, -- gint64 *blocks) --{ -- BraseroMediumPrivate *priv; -- BraseroMediumTrack *track; -- -- priv = BRASERO_MEDIUM_PRIVATE (medium); -- -- track = brasero_medium_get_track (medium, num); -- if (!track) { -- if (size) -- *size = -1; -- if (blocks) -- *blocks = -1; -- return FALSE; -- } -- -- if (size) -- *size = track->blocks_num * priv->block_size; -- if (blocks) -- *blocks = track->blocks_num; -- -- return TRUE; --} -- --gboolean --brasero_medium_get_track_address (BraseroMedium *medium, -- guint num, -- gint64 *byte, -- gint64 *sector) --{ -- BraseroMediumPrivate *priv; -- BraseroMediumTrack *track; -- -- priv = BRASERO_MEDIUM_PRIVATE (medium); -- -- track = brasero_medium_get_track (medium, num); -- if (!track) { -- if (byte) -- *byte = -1; -- if (sector) -- *sector = -1; -- return FALSE; -- } -- -- if (byte) -- *byte = track->start * priv->block_size; -- if (sector) -- *sector = track->start; -- -- return TRUE; --} -- --gint64 --brasero_medium_get_next_writable_address (BraseroMedium *medium) --{ -- BraseroMediumPrivate *priv; -- -- priv = BRASERO_MEDIUM_PRIVATE (medium); -- return priv->next_wr_add; --} -- --gint64 --brasero_medium_get_max_write_speed (BraseroMedium *medium) --{ -- BraseroMediumPrivate *priv; -- -- priv = BRASERO_MEDIUM_PRIVATE (medium); -- return priv->max_wrt * 1024; --} -- --/** -- * NOTEs about the following functions: -- * for all closed media (including ROM types) capacity == size of data and -- * should be the size of all data on the disc, free space is 0 -- * for all blank -R types capacity == free space and size of data == 0 -- * for all multisession -R types capacity == free space since having the real -- * capacity of the media would be useless as we can only use this type of media -- * to append more data -- * for all -RW types capacity = free space + size of data. Here they can be -- * appended (use free space) or rewritten (whole capacity). -- * -- * Usually: -- * the free space is the size of the leadout track -- * the size of data is the sum of track sizes (excluding leadout) -- * the capacity depends on the media: -- * for closed discs == sum of track sizes -- * for multisession discs == free space (leadout size) -- * for blank discs == (free space) leadout size -- * for rewritable/blank == use SCSI functions to get capacity (see below) -- * -- * In fact we should really need the size of data in DVD+/-RW cases since the -- * session is always equal to the size of the disc. -- */ -- --void --brasero_medium_get_data_size (BraseroMedium *medium, -- gint64 *size, -- gint64 *blocks) --{ -- GSList *iter; -- BraseroMediumPrivate *priv; -- BraseroMediumTrack *track = NULL; -- -- priv = BRASERO_MEDIUM_PRIVATE (medium); -- -- if (!priv->tracks) { -- /* that's probably because it wasn't possible to retrieve info */ -- if (size) -- *size = 0; -- -- if (blocks) -- *blocks = 0; -- -- return; -- } -- -- for (iter = priv->tracks; iter; iter = iter->next) { -- BraseroMediumTrack *tmp; -- -- tmp = iter->data; -- if (tmp->type == BRASERO_MEDIUM_TRACK_LEADOUT) -- break; -- -- track = iter->data; -- } -- -- if (size) -- *size = track ? (track->start + track->blocks_num) * priv->block_size: 0; -- -- if (blocks) -- *blocks = track ? track->start + track->blocks_num: 0; --} -- --void --brasero_medium_get_free_space (BraseroMedium *medium, -- gint64 *size, -- gint64 *blocks) --{ -- GSList *iter; -- BraseroMediumPrivate *priv; -- BraseroMediumTrack *track = NULL; -- -- priv = BRASERO_MEDIUM_PRIVATE (medium); -- -- if (!priv->tracks) { -- /* that's probably because it wasn't possible to retrieve info. -- * maybe it also happens with unformatted DVD+RW */ -- -- if (priv->info & BRASERO_MEDIUM_CLOSED) { -- if (size) -- *size = 0; -- -- if (blocks) -- *blocks = 0; -- } -- else { -- if (size) -- *size = priv->block_num * priv->block_size; -- -- if (blocks) -- *blocks = priv->block_num; -- } -- -- return; -- } -- -- for (iter = priv->tracks; iter; iter = iter->next) { -- BraseroMediumTrack *tmp; -- -- tmp = iter->data; -- if (tmp->type == BRASERO_MEDIUM_TRACK_LEADOUT) { -- track = iter->data; -- break; -- } -- } -- -- if (size) { -- if (!track) { -- /* No leadout was found so the disc is probably closed: -- * no free space left. */ -- *size = 0; -- } -- else if (track->blocks_num <= 0) -- *size = (priv->block_num - track->start) * priv->block_size; -- else -- *size = track->blocks_num * priv->block_size; -- } -- -- if (blocks) { -- if (!track) { -- /* No leadout was found so the disc is probably closed: -- * no free space left. */ -- *blocks = 0; -- } -- else if (track->blocks_num <= 0) -- *blocks = priv->block_num - track->blocks_num; -- else -- *blocks = track->blocks_num; -- } --} -- --void --brasero_medium_get_capacity (BraseroMedium *medium, -- gint64 *size, -- gint64 *blocks) --{ -- BraseroMediumPrivate *priv; -- -- priv = BRASERO_MEDIUM_PRIVATE (medium); -- -- if (priv->info & BRASERO_MEDIUM_REWRITABLE) { -- if (size) -- *size = priv->block_num * priv->block_size; -- -- if (blocks) -- *blocks = priv->block_num; -- } -- else if (priv->info & BRASERO_MEDIUM_CLOSED) -- brasero_medium_get_data_size (medium, size, blocks); -- else -- brasero_medium_get_free_space (medium, size, blocks); --} -- --/** -- * Function to retrieve the capacity of a media -- */ -- --static BraseroBurnResult --brasero_medium_get_capacity_CD_RW (BraseroMedium *self, -- int fd, -- BraseroScsiErrCode *code) --{ -- BraseroScsiAtipData *atip_data = NULL; -- BraseroMediumPrivate *priv; -- BraseroScsiResult result; -- int size = 0; -- -- priv = BRASERO_MEDIUM_PRIVATE (self); -- -- BRASERO_BURN_LOG ("Retrieving capacity from atip"); -- -- result = brasero_mmc1_read_atip (fd, -- &atip_data, -- &size, -- NULL); -- -- if (result != BRASERO_SCSI_OK) { -- BRASERO_BURN_LOG ("READ ATIP failed (scsi error)"); -- return BRASERO_BURN_ERR; -- } -- -- /* check the size of the structure: it must be at least 16 bytes long */ -- if (size < 16) { -- if (size) -- g_free (atip_data); -- -- BRASERO_BURN_LOG ("READ ATIP failed (wrong size)"); -- return BRASERO_BURN_ERR; -- } -- -- priv->block_num = BRASERO_MSF_TO_LBA (atip_data->desc->leadout_mn, -- atip_data->desc->leadout_sec, -- atip_data->desc->leadout_frame); -- g_free (atip_data); -- -- BRASERO_BURN_LOG ("Format capacity %lli %lli", -- priv->block_num, -- priv->block_size); -- -- return BRASERO_BURN_OK; --} -- --static BraseroBurnResult --brasero_medium_get_capacity_DVD_RW (BraseroMedium *self, -- int fd, -- BraseroScsiErrCode *code) --{ -- BraseroScsiFormatCapacitiesHdr *hdr = NULL; -- BraseroScsiMaxCapacityDesc *current; -- BraseroMediumPrivate *priv; -- BraseroScsiResult result; -- gint size; -- -- BRASERO_BURN_LOG ("Retrieving format capacity"); -- -- priv = BRASERO_MEDIUM_PRIVATE (self); -- result = brasero_mmc2_read_format_capacities (fd, -- &hdr, -- &size, -- code); -- if (result != BRASERO_SCSI_OK) { -- g_free (hdr); -- -- BRASERO_BURN_LOG ("READ FORMAT CAPACITIES failed"); -- return BRASERO_BURN_ERR; -- } -- -- current = hdr->max_caps; -- -- /* see if the media is already formatted */ -- if (current->type != BRASERO_SCSI_DESC_FORMATTED) { -- int i, max; -- BraseroScsiFormattableCapacityDesc *desc; -- -- max = (hdr->len - -- sizeof (BraseroScsiMaxCapacityDesc)) / -- sizeof (BraseroScsiFormattableCapacityDesc); -- -- desc = hdr->desc; -- for (i = 0; i < max; i ++, desc ++) { -- /* search for the correct descriptor */ -- if (BRASERO_MEDIUM_IS (priv->info, BRASERO_MEDIUM_DVDRW_PLUS)) { -- if (desc->format_type == BRASERO_SCSI_DVDRW_PLUS) { -- priv->block_num = BRASERO_GET_32 (desc->blocks_num); -- priv->block_size = BRASERO_GET_24 (desc->type_param); -- -- /* that can happen */ -- if (!priv->block_size) -- priv->block_size = 2048; -- break; -- } -- } -- else if (desc->format_type == BRASERO_SCSI_BLOCK_SIZE_DEFAULT_AND_DB) { -- priv->block_num = BRASERO_GET_32 (desc->blocks_num); -- priv->block_size = BRASERO_GET_24 (desc->type_param); -- break; -- } -- } -- } -- else { -- priv->block_num = BRASERO_GET_32 (current->blocks_num); -- priv->block_size = BRASERO_GET_24 (current->block_size); -- } -- -- BRASERO_BURN_LOG ("Format capacity %lli %lli", -- priv->block_num, -- priv->block_size); -- -- g_free (hdr); -- return BRASERO_BURN_OK; --} -- --static BraseroBurnResult --brasero_medium_get_capacity_by_type (BraseroMedium *self, -- int fd, -- BraseroScsiErrCode *code) --{ -- BraseroMediumPrivate *priv; -- -- priv = BRASERO_MEDIUM_PRIVATE (self); -- -- priv->block_size = 2048; -- -- if (!(priv->info & BRASERO_MEDIUM_REWRITABLE)) -- return BRASERO_BURN_OK; -- -- if (priv->info & BRASERO_MEDIUM_CD) -- brasero_medium_get_capacity_CD_RW (self, fd, code); -- else -- brasero_medium_get_capacity_DVD_RW (self, fd, code); -- -- return BRASERO_BURN_OK; --} -- --/** -- * Functions to retrieve the speed -- */ -- --static BraseroBurnResult --brasero_medium_get_speed_mmc3 (BraseroMedium *self, -- int fd, -- BraseroScsiErrCode *code) --{ -- int size; -- int num_desc, i; -- gint max_rd, max_wrt; -- BraseroScsiResult result; -- BraseroMediumPrivate *priv; -- BraseroScsiWrtSpdDesc *desc; -- BraseroScsiGetPerfData *wrt_perf = NULL; -- -- BRASERO_BURN_LOG ("Retrieving speed (Get Performance)"); -- -- /* NOTE: this only work if there is RT streaming feature with -- * wspd bit set to 1. At least an MMC3 drive. */ -- priv = BRASERO_MEDIUM_PRIVATE (self); -- result = brasero_mmc3_get_performance_wrt_spd_desc (fd, -- &wrt_perf, -- &size, -- code); -- -- if (result != BRASERO_SCSI_OK) { -- g_free (wrt_perf); -- -- BRASERO_BURN_LOG ("GET PERFORMANCE failed"); -- return BRASERO_BURN_ERR; -- } -- -- num_desc = (size - sizeof (BraseroScsiGetPerfHdr)) / -- sizeof (BraseroScsiWrtSpdDesc); -- -- if (num_desc <= 0) -- goto end; -- -- priv->rd_speeds = g_new0 (gint, num_desc + 1); -- priv->wr_speeds = g_new0 (gint, num_desc + 1); -- -- max_rd = 0; -- max_wrt = 0; -- -- desc = (BraseroScsiWrtSpdDesc*) &wrt_perf->data; -- for (i = 0; i < num_desc; i ++, desc ++) { -- priv->rd_speeds [i] = BRASERO_GET_32 (desc->rd_speed); -- priv->wr_speeds [i] = BRASERO_GET_32 (desc->wr_speed); -- -- max_rd = MAX (max_rd, priv->rd_speeds [i]); -- max_wrt = MAX (max_wrt, priv->wr_speeds [i]); -- } -- -- priv->max_rd = max_rd; -- priv->max_wrt = max_wrt; -- --end: -- -- g_free (wrt_perf); -- -- /* strangely there are so drives (I know one case) which support this -- * function but don't report any speed. So if our top speed is 0 then -- * use the other way to get the speed. It was a Teac */ -- if (!priv->max_wrt) -- return BRASERO_BURN_ERR; -- -- return BRASERO_BURN_OK; --} -- --static BraseroBurnResult --brasero_medium_get_page_2A_write_speed_desc (BraseroMedium *self, -- int fd, -- BraseroScsiErrCode *code) --{ -- BraseroScsiStatusPage *page_2A = NULL; -- BraseroScsiStatusWrSpdDesc *desc; -- BraseroScsiModeData *data = NULL; -- BraseroMediumPrivate *priv; -- BraseroScsiResult result; -- gint desc_num, i; -- gint max_wrt = 0; -- gint max_num; -- int size = 0; -- -- BRASERO_BURN_LOG ("Retrieving speed (2A speeds)"); -- -- priv = BRASERO_MEDIUM_PRIVATE (self); -- result = brasero_spc1_mode_sense_get_page (fd, -- BRASERO_SPC_PAGE_STATUS, -- &data, -- &size, -- code); -- if (result != BRASERO_SCSI_OK) { -- g_free (data); -- -- BRASERO_BURN_LOG ("MODE SENSE failed"); -- return BRASERO_BURN_ERR; -- } -- -- page_2A = (BraseroScsiStatusPage *) &data->page; -- -- /* FIXME: the following is not necessarily true */ -- if (size < sizeof (BraseroScsiStatusPage)) { -- g_free (data); -- -- BRASERO_BURN_LOG ("wrong size in page"); -- return BRASERO_BURN_ERR; -- } -- -- desc_num = BRASERO_GET_16 (page_2A->wr_speed_desc_num); -- max_num = size - -- sizeof (BraseroScsiStatusPage) - -- sizeof (BraseroScsiModeHdr); -- max_num /= sizeof (BraseroScsiWrtSpdDesc); -- -- if (max_num < 0) -- max_num = 0; -- -- if (desc_num > max_num) -- desc_num = max_num; -- -- priv->wr_speeds = g_new0 (gint, desc_num + 1); -- desc = page_2A->wr_spd_desc; -- for (i = 0; i < desc_num; i ++, desc ++) { -- priv->wr_speeds [i] = BRASERO_GET_16 (desc->speed); -- max_wrt = MAX (max_wrt, priv->wr_speeds [i]); -- } -- -- if (!max_wrt) -- priv->max_wrt = BRASERO_GET_16 (page_2A->wr_max_speed); -- else -- priv->max_wrt = max_wrt; -- -- priv->max_rd = BRASERO_GET_16 (page_2A->rd_max_speed); -- g_free (data); -- -- return BRASERO_BURN_OK; --} -- --static BraseroBurnResult --brasero_medium_get_page_2A_max_speed (BraseroMedium *self, -- int fd, -- BraseroScsiErrCode *code) --{ -- BraseroScsiStatusPage *page_2A = NULL; -- BraseroScsiModeData *data = NULL; -- BraseroMediumPrivate *priv; -- BraseroScsiResult result; -- int size = 0; -- -- BRASERO_BURN_LOG ("Retrieving speed (2A max)"); -- -- priv = BRASERO_MEDIUM_PRIVATE (self); -- -- result = brasero_spc1_mode_sense_get_page (fd, -- BRASERO_SPC_PAGE_STATUS, -- &data, -- &size, -- code); -- if (result != BRASERO_SCSI_OK) { -- g_free (data); -- -- BRASERO_BURN_LOG ("MODE SENSE failed"); -- return BRASERO_BURN_ERR; -- } -- -- page_2A = (BraseroScsiStatusPage *) &data->page; -- -- if (size < 0x14) { -- g_free (data); -- -- BRASERO_BURN_LOG ("wrong page size"); -- return BRASERO_BURN_ERR; -- } -- -- priv->max_rd = BRASERO_GET_16 (page_2A->rd_max_speed); -- priv->max_wrt = BRASERO_GET_16 (page_2A->wr_max_speed); -- -- g_free (data); -- return BRASERO_BURN_OK; --} -- --static BraseroBurnResult --brasero_medium_get_medium_type (BraseroMedium *self, -- int fd, -- BraseroScsiErrCode *code) --{ -- BraseroScsiGetConfigHdr *hdr = NULL; -- BraseroMediumPrivate *priv; -- BraseroScsiResult result; -- int size; -- -- BRASERO_BURN_LOG ("Retrieving media profile"); -- -- priv = BRASERO_MEDIUM_PRIVATE (self); -- result = brasero_mmc2_get_configuration_feature (fd, -- BRASERO_SCSI_FEAT_REAL_TIME_STREAM, -- &hdr, -- &size, -- code); -- if (result != BRASERO_SCSI_OK) { -- BraseroScsiAtipData *data = NULL; -- int size = 0; -- -- BRASERO_BURN_LOG ("GET CONFIGURATION failed"); -- -- /* This could be a MMC1 drive since this command was -- * introduced in MMC2 and is supported onward. So it -- * has to be a CD (R/RW). The rest of the information -- * will be provided by read_disc_information. */ -- -- /* The only thing here left to determine is if that's a WRITABLE -- * or a REWRITABLE. To determine that information, we need to -- * read TocPmaAtip. It if fails that's a ROM, if it succeeds. -- * No need to set error code since we consider that it's a ROM -- * if a failure happens. */ -- result = brasero_mmc1_read_atip (fd, -- &data, -- &size, -- NULL); -- if (result != BRASERO_SCSI_OK) { -- /* CDROM */ -- priv->info = BRASERO_MEDIUM_CDROM; -- priv->type = types [1]; -- priv->icon = icons [1]; -- } -- else { -- /* check the size of the structure: it must be at least 8 bytes long */ -- if (size < 8) { -- if (size) -- g_free (data); -- -- BRASERO_BURN_LOG ("READ ATIP failed (wrong size)"); -- return BRASERO_BURN_ERR; -- } -- -- if (data->desc->erasable) { -- /* CDRW */ -- priv->info = BRASERO_MEDIUM_CDRW; -- priv->type = types [3]; -- priv->icon = icons [3]; -- } -- else { -- /* CDR */ -- priv->info = BRASERO_MEDIUM_CDR; -- priv->type = types [2]; -- priv->icon = icons [2]; -- } -- -- g_free (data); -- } -- -- /* retrieve the speed */ -- result = brasero_medium_get_page_2A_max_speed (self, -- fd, -- code); -- return result; -- } -- -- switch (BRASERO_GET_16 (hdr->current_profile)) { -- case BRASERO_SCSI_PROF_CDROM: -- priv->info = BRASERO_MEDIUM_CDROM; -- priv->type = types [1]; -- priv->icon = icons [1]; -- break; -- -- case BRASERO_SCSI_PROF_CDR: -- priv->info = BRASERO_MEDIUM_CDR; -- priv->type = types [2]; -- priv->icon = icons [2]; -- break; -- -- case BRASERO_SCSI_PROF_CDRW: -- priv->info = BRASERO_MEDIUM_CDRW; -- priv->type = types [3]; -- priv->icon = icons [3]; -- break; -- -- case BRASERO_SCSI_PROF_DVD_ROM: -- priv->info = BRASERO_MEDIUM_DVD_ROM; -- priv->type = types [4]; -- priv->icon = icons [4]; -- break; -- -- case BRASERO_SCSI_PROF_DVD_R: -- priv->info = BRASERO_MEDIUM_DVDR; -- priv->type = types [5]; -- priv->icon = icons [5]; -- break; -- -- case BRASERO_SCSI_PROF_DVD_RW_RESTRICTED: -- priv->info = BRASERO_MEDIUM_DVDRW_RESTRICTED; -- priv->type = types [6]; -- priv->icon = icons [6]; -- break; -- -- case BRASERO_SCSI_PROF_DVD_RW_SEQUENTIAL: -- priv->info = BRASERO_MEDIUM_DVDRW; -- priv->type = types [6]; -- priv->icon = icons [6]; -- break; -- -- case BRASERO_SCSI_PROF_DVD_R_PLUS: -- priv->info = BRASERO_MEDIUM_DVDR_PLUS; -- priv->type = types [7]; -- priv->icon = icons [7]; -- break; -- -- case BRASERO_SCSI_PROF_DVD_RW_PLUS: -- priv->info = BRASERO_MEDIUM_DVDRW_PLUS; -- priv->type = types [8]; -- priv->icon = icons [7]; -- break; -- -- /* WARNING: these types are recognized, no more */ -- case BRASERO_SCSI_PROF_DVD_R_PLUS_DL: -- priv->info = BRASERO_MEDIUM_DVDR_PLUS_DL; -- priv->type = types [9]; -- priv->icon = icons [7]; -- break; -- -- case BRASERO_SCSI_PROF_DVD_RW_PLUS_DL: -- priv->info = BRASERO_MEDIUM_DVDRW_PLUS_DL; -- priv->type = types [10]; -- priv->icon = icons [7]; -- break; -- -- case BRASERO_SCSI_PROF_DVD_R_DL_SEQUENTIAL: -- priv->info = BRASERO_MEDIUM_DVDR_DL; -- priv->type = types [11]; -- priv->icon = icons [5]; -- break; -- -- case BRASERO_SCSI_PROF_DVD_R_DL_JUMP: -- priv->info = BRASERO_MEDIUM_DVDR_JUMP_DL; -- priv->type = types [11]; -- priv->icon = icons [5]; -- break; -- -- case BRASERO_SCSI_PROF_DVD_RAM: -- priv->info = BRASERO_MEDIUM_DVD_RAM; -- priv->type = types [12]; -- priv->icon = icons [8]; -- break; -- -- case BRASERO_SCSI_PROF_BD_ROM: -- priv->info = BRASERO_MEDIUM_BD_ROM; -- priv->type = types [13]; -- priv->icon = icons [4]; -- break; -- -- case BRASERO_SCSI_PROF_BR_R_SEQUENTIAL: -- priv->info = BRASERO_MEDIUM_BDR; -- priv->type = types [14]; -- priv->icon = icons [5]; -- break; -- -- case BRASERO_SCSI_PROF_BR_R_RANDOM: -- priv->info = BRASERO_MEDIUM_BDR_RANDOM; -- priv->type = types [14]; -- priv->icon = icons [5]; -- break; -- -- case BRASERO_SCSI_PROF_BD_RW: -- priv->info = BRASERO_MEDIUM_BDRW; -- priv->type = types [15]; -- priv->icon = icons [6]; -- break; -- -- case BRASERO_SCSI_PROF_NON_REMOVABLE: -- case BRASERO_SCSI_PROF_REMOVABLE: -- case BRASERO_SCSI_PROF_MO_ERASABLE: -- case BRASERO_SCSI_PROF_MO_WRITE_ONCE: -- case BRASERO_SCSI_PROF_MO_ADVANCED_STORAGE: -- case BRASERO_SCSI_PROF_DDCD_ROM: -- case BRASERO_SCSI_PROF_DDCD_R: -- case BRASERO_SCSI_PROF_DDCD_RW: -- case BRASERO_SCSI_PROF_HD_DVD_ROM: -- case BRASERO_SCSI_PROF_HD_DVD_R: -- case BRASERO_SCSI_PROF_HD_DVD_RAM: -- priv->info = BRASERO_MEDIUM_UNSUPPORTED; -- priv->icon = icons [0]; -- g_free (hdr); -- return BRASERO_BURN_NOT_SUPPORTED; -- } -- -- /* try all SCSI functions to get write/read speeds in order */ -- if (hdr->desc->add_len >= sizeof (BraseroScsiRTStreamDesc)) { -- BraseroScsiRTStreamDesc *stream; -- -- /* means it's at least an MMC3 drive */ -- stream = (BraseroScsiRTStreamDesc *) hdr->desc->data; -- if (stream->wrt_spd) { -- result = brasero_medium_get_speed_mmc3 (self, fd, code); -- if (result == BRASERO_BURN_OK) -- goto end; -- } -- -- if (stream->mp2a) { -- result = brasero_medium_get_page_2A_write_speed_desc (self, fd, code); -- if (result == BRASERO_BURN_OK) -- goto end; -- } -- } -- -- /* fallback for speeds */ -- result = brasero_medium_get_page_2A_max_speed (self, fd, code); -- --end: -- -- g_free (hdr); -- -- if (result != BRASERO_BURN_OK) -- return result; -- -- return BRASERO_BURN_OK; --} -- --static BraseroBurnResult --brasero_medium_get_css_feature (BraseroMedium *self, -- int fd, -- BraseroScsiErrCode *code) --{ -- BraseroScsiGetConfigHdr *hdr = NULL; -- BraseroMediumPrivate *priv; -- BraseroScsiResult result; -- int size; -- -- priv = BRASERO_MEDIUM_PRIVATE (self); -- -- BRASERO_BURN_LOG ("Testing for Css encrypted media"); -- result = brasero_mmc2_get_configuration_feature (fd, -- BRASERO_SCSI_FEAT_DVD_CSS, -- &hdr, -- &size, -- code); -- if (result != BRASERO_SCSI_OK) { -- g_free (hdr); -- -- BRASERO_BURN_LOG ("GET CONFIGURATION failed"); -- return BRASERO_BURN_ERR; -- } -- -- if (hdr->desc->add_len < sizeof (BraseroScsiDVDCssDesc)) { -- g_free (hdr); -- return BRASERO_BURN_OK; -- } -- -- /* here we just need to see if this feature is current or not */ -- if (hdr->desc->current) { -- priv->info |= BRASERO_MEDIUM_PROTECTED; -- BRASERO_BURN_LOG ("media is Css protected"); -- } -- -- g_free (hdr); -- return BRASERO_BURN_OK; --} -- --/** -- * Functions to get information about disc contents -- */ -- --static void --brasero_medium_set_track_type (BraseroMedium *self, -- BraseroMediumTrack *track, -- guchar control) --{ -- BraseroMediumPrivate *priv; -- -- priv = BRASERO_MEDIUM_PRIVATE (self); -- -- if (control & BRASERO_SCSI_TRACK_COPY) -- track->type |= BRASERO_MEDIUM_TRACK_COPY; -- -- if (!(control & BRASERO_SCSI_TRACK_DATA)) { -- track->type |= BRASERO_MEDIUM_TRACK_AUDIO; -- priv->info |= BRASERO_MEDIUM_HAS_AUDIO; -- -- if (control & BRASERO_SCSI_TRACK_PREEMP) -- track->type |= BRASERO_MEDIUM_TRACK_PREEMP; -- -- if (control & BRASERO_SCSI_TRACK_4_CHANNELS) -- track->type |= BRASERO_MEDIUM_TRACK_4_CHANNELS; -- } -- else { -- track->type |= BRASERO_MEDIUM_TRACK_DATA; -- priv->info |= BRASERO_MEDIUM_HAS_DATA; -- -- if (control & BRASERO_SCSI_TRACK_DATA_INCREMENTAL) -- track->type |= BRASERO_MEDIUM_TRACK_INCREMENTAL; -- } --} -- --static BraseroBurnResult --brasero_medium_track_volume_size (BraseroMedium *self, -- BraseroMediumTrack *track, -- int fd) --{ -- BraseroMediumPrivate *priv; -- BraseroBurnResult res; -- GError *error = NULL; -- gint64 nb_blocks; -- -- if (!track) -- return BRASERO_BURN_ERR; -- -- priv = BRASERO_MEDIUM_PRIVATE (self); -- -- /* This is a special case. For DVD+RW and DVD-RW in restricted -- * mode, there is only one session that takes the whole disc size -- * once formatted. That doesn't necessarily means they have data -- * Note also that they are reported as complete though you can -- * still add data (with growisofs). It is nevertheless on the -- * condition that the fs is valid. -- * So we check if their first and only volume is valid. -- * That's also used when the track size is reported a 300 Kio -- * see below */ -- res = brasero_volume_get_size_fd (fd, -- track->start, -- &nb_blocks, -- NULL); -- if (!res) { -- BRASERO_BURN_LOG ("Failed to retrieve the volume size: %s", -- error && error->message ? -- error->message:"unknown error"); -- -- if (error) -- g_error_free (error); -- return BRASERO_BURN_ERR; -- } -- -- track->blocks_num = nb_blocks; -- return BRASERO_BURN_OK; --} -- --static BraseroBurnResult --brasero_medium_track_get_info (BraseroMedium *self, -- BraseroMediumTrack *track, -- int track_num, -- int fd, -- BraseroScsiErrCode *code) --{ -- BraseroScsiTrackInfo track_info; -- BraseroMediumPrivate *priv; -- BraseroScsiResult result; -- int size; -- -- BRASERO_BURN_LOG ("Retrieving track information for %i", track_num); -- -- priv = BRASERO_MEDIUM_PRIVATE (self); -- -- /* at this point we know the type of the disc that's why we set the -- * size according to this type. That may help to avoid outrange address -- * errors. */ -- if (BRASERO_MEDIUM_IS (priv->info, BRASERO_MEDIUM_DL|BRASERO_MEDIUM_WRITABLE)) -- size = 48; -- else if (BRASERO_MEDIUM_IS (priv->info, BRASERO_MEDIUM_PLUS|BRASERO_MEDIUM_WRITABLE)) -- size = 40; -- else -- size = 36; -- -- result = brasero_mmc1_read_track_info (fd, -- track_num, -- &track_info, -- &size, -- code); -- -- if (result != BRASERO_SCSI_OK) { -- BRASERO_BURN_LOG ("READ TRACK INFO failed"); -- return BRASERO_BURN_ERR; -- } -- -- track->blocks_num = BRASERO_GET_32 (track_info.track_size); -- track->session = BRASERO_SCSI_SESSION_NUM (track_info); -- -- /* Now here is a potential bug: we can write tracks (data or not) -- * shorter than 300 Kio /2 sec but they will be padded to reach this -- * floor value. That means that is blocks_num is 300 blocks that may -- * mean that the data length on the track is actually shorter. -- * So we read the volume descriptor. If it works, good otherwise -- * use the old value. -- * That's important for checksuming to have a perfect account of the -- * data size. */ -- if (track->blocks_num <= 300) { -- BRASERO_BURN_LOG ("300 sectors size. Checking for real size"); -- brasero_medium_track_volume_size (self, track, fd); -- } -- -- if (track_info.next_wrt_address_valid) -- priv->next_wr_add = BRASERO_GET_32 (track_info.next_wrt_address); -- -- BRASERO_BURN_LOG ("Track %i (session %i): type = %i start = %llu size = %llu", -- track_num, -- track->session, -- track->type, -- track->start, -- track->blocks_num); -- -- return BRASERO_BURN_OK; --} -- --/** -- * return : -- * 0 when it's not possible to determine (fallback to formatted toc) -- * -1 for BCD -- * 1 for HEX */ --static guint --brasero_medium_check_BCD_use (BraseroMedium *self, -- int fd, -- BraseroScsiRawTocDesc *desc, -- guint num, -- BraseroScsiErrCode *code) --{ -- guint i; -- int size; -- guint leadout = 0; -- guint track_num = 0; -- gboolean use_BCD = TRUE; -- gboolean use_HEX = TRUE; -- BraseroScsiResult result; -- BraseroScsiTrackInfo track_info; -- guint start_BCD, start_LBA, track_start; -- -- /* first check if all values are valid BCD numbers in the descriptors */ -- for (i = 0; i < num; i++) { -- if (desc [i].adr == 1 && desc [i].point <= BRASERO_SCSI_Q_SUB_CHANNEL_TRACK_START) { -- if (!BRASERO_IS_BCD_VALID (desc [i].p_min) -- || !BRASERO_IS_BCD_VALID (desc [i].p_sec) -- || !BRASERO_IS_BCD_VALID (desc [i].p_frame)) { -- use_BCD = FALSE; -- break; -- } -- } -- else if (desc [i].point == BRASERO_SCSI_Q_SUB_CHANNEL_LEADOUT_START) { -- if (!BRASERO_IS_BCD_VALID (desc [i].p_min) -- || !BRASERO_IS_BCD_VALID (desc [i].p_sec) -- || !BRASERO_IS_BCD_VALID (desc [i].p_frame)) { -- use_BCD = FALSE; -- break; -- } -- } -- } -- -- /* then check if there are valid Hex values */ -- for (i = 0; i < num; i++) { -- if (desc [i].adr != 1 || desc [i].point > BRASERO_SCSI_Q_SUB_CHANNEL_TRACK_START) -- continue; -- -- if (desc [i].p_min > 99 -- || desc [i].p_sec > 59 -- || desc [i].p_frame > 74) { -- use_HEX = FALSE; -- break; -- } -- } -- -- if (use_BCD != use_HEX) { -- if (use_BCD) -- return -1; -- -- return 1; -- } -- -- /* To check if the drive uses BCD values or HEX values we ask for the -- * track information that contains also the start for the track but in -- * HEX values. If values are the same then it works. */ -- -- /* NOTE: there could be another way to do it: get first track, in LBA -- * and BCD it must be 150. */ -- -- /* First find the first track and get track start address in BCD */ -- BRASERO_BURN_LOG ("Retrieving track information to determine number format"); -- -- for (i = 0; i < num; i++) { -- if (desc [i].adr == BRASERO_SCSI_Q_SUB_CHANNEL_LEADIN_MODE5 -- && desc [i].point == BRASERO_SCSI_Q_SUB_CHANNEL_MULTI_NEXT_SESSION) { -- /* store the leadout number just in case */ -- leadout = i; -- continue; -- } -- -- if (desc [i].adr != 1 || desc [i].point > BRASERO_SCSI_Q_SUB_CHANNEL_TRACK_START) -- continue; -- -- track_num ++; -- -- start_BCD = BRASERO_MSF_TO_LBA (BRASERO_GET_BCD (desc [i].p_min), -- BRASERO_GET_BCD (desc [i].p_sec), -- BRASERO_GET_BCD (desc [i].p_frame)); -- -- start_LBA = BRASERO_MSF_TO_LBA (desc [i].p_min, -- desc [i].p_sec, -- desc [i].p_frame); -- -- BRASERO_BURN_LOG ("Comparing to track information from READ TRACK INFO for track %i", track_num); -- -- size = 36; -- start_LBA -= 150; -- start_BCD -= 150; -- -- result = brasero_mmc1_read_track_info (fd, -- track_num, -- &track_info, -- &size, -- code); -- -- if (result != BRASERO_SCSI_OK) { -- BRASERO_BURN_LOG ("READ TRACK INFO failed"); -- /* Fallback to formatted toc */ -- return 0; -- } -- -- track_start = BRASERO_GET_32 (track_info.start_lba); -- BRASERO_BURN_LOG ("comparing DCB %i and LBA %i to real start address %i", -- start_BCD, start_LBA, track_start); -- -- /* try to find a conclusive match */ -- if (track_start == start_BCD && track_start != start_LBA) -- return -1; -- -- if (track_start == start_LBA && track_start != start_BCD) -- return 1; -- } -- -- /* Our last chance, the leadout. -- * NOTE: no need to remove 150 sectors here. */ -- start_BCD = BRASERO_MSF_TO_LBA (BRASERO_GET_BCD (desc [leadout].min), -- BRASERO_GET_BCD (desc [leadout].sec), -- BRASERO_GET_BCD (desc [leadout].frame)); -- -- start_LBA = BRASERO_MSF_TO_LBA (desc [leadout].min, -- desc [leadout].sec, -- desc [leadout].frame); -- -- BRASERO_BURN_LOG ("Comparing to track information from READ TRACK INFO for leadout"); -- -- size = 36; -- -- /* leadout number is number of tracks + 1 */ -- result = brasero_mmc1_read_track_info (fd, -- track_num + 1, -- &track_info, -- &size, -- code); -- -- if (result != BRASERO_SCSI_OK) { -- BRASERO_BURN_LOG ("READ TRACK INFO failed for leadout"); -- /* Fallback to formatted toc */ -- return 0; -- } -- -- track_start = BRASERO_GET_32 (track_info.start_lba); -- BRASERO_BURN_LOG ("comparing DCB %i and LBA %i to real start address %i", -- start_BCD, start_LBA, track_start); -- -- /* try to find a conclusive match */ -- if (track_start == start_BCD && track_start != start_LBA) -- return -1; -- -- if (track_start == start_LBA && track_start != start_BCD) -- return 1; -- -- /* fallback to formatted toc */ -- return 0; --} -- --/** -- * The reason why we use this perhaps more lengthy method is that with -- * multisession discs, the first track is reported to be two sectors shorter -- * than it should. As I don't know why and since the following works we use -- * this one. */ --static BraseroBurnResult --brasero_medium_get_CD_sessions_info (BraseroMedium *self, -- int fd, -- BraseroScsiErrCode *code) --{ -- gint use_bcd; -- GSList *iter; -- int num, i, size; -- gint leadout_start = 0; -- BraseroScsiResult result; -- BraseroMediumPrivate *priv; -- BraseroScsiRawTocDesc *desc; -- BraseroScsiRawTocData *toc = NULL; -- -- BRASERO_BURN_LOG ("Reading Raw Toc"); -- -- priv = BRASERO_MEDIUM_PRIVATE (self); -- -- size = 0; -- result = brasero_mmc1_read_toc_raw (fd, -- 0, -- &toc, -- &size, -- code); -- if (result != BRASERO_SCSI_OK) { -- BRASERO_BURN_LOG ("READ TOC failed"); -- return BRASERO_BURN_ERR; -- } -- -- num = (size - sizeof (BraseroScsiRawTocData)) / -- sizeof (BraseroScsiRawTocDesc); -- -- BRASERO_BURN_LOG ("%i track(s) found", num); -- -- desc = toc->desc; -- use_bcd = brasero_medium_check_BCD_use (self, fd, desc, num, code); -- if (!use_bcd) { -- g_free (toc); -- -- BRASERO_BURN_LOG ("Fallback to formatted toc"); -- return BRASERO_BURN_ERR; -- } -- -- if (use_bcd > 0) -- use_bcd = 0; -- -- if (use_bcd) { -- BRASERO_BURN_LOG ("Using BCD format"); -- } -- else { -- BRASERO_BURN_LOG ("Using HEX format"); -- } -- -- for (i = 0; i < num; i++, desc ++) { -- BraseroMediumTrack *track; -- -- track = NULL; -- if (desc->adr == 1 && desc->point <= BRASERO_SCSI_Q_SUB_CHANNEL_TRACK_START) { -- track = g_new0 (BraseroMediumTrack, 1); -- track->session = desc->session_num; -- -- brasero_medium_set_track_type (self, track, desc->control); -- if (use_bcd) -- track->start = BRASERO_MSF_TO_LBA (BRASERO_GET_BCD (desc->p_min), -- BRASERO_GET_BCD (desc->p_sec), -- BRASERO_GET_BCD (desc->p_frame)); -- else -- track->start = BRASERO_MSF_TO_LBA (desc->p_min, -- desc->p_sec, -- desc->p_frame); -- -- track->start -= 150; -- -- /* if there are tracks and the last previously added track is in -- * the same session then set the size */ -- if (priv->tracks) { -- BraseroMediumTrack *last_track; -- -- last_track = priv->tracks->data; -- if (last_track->session == track->session) -- last_track->blocks_num = track->start - last_track->start; -- } -- -- priv->tracks = g_slist_prepend (priv->tracks, track); -- } -- else if (desc->point == BRASERO_SCSI_Q_SUB_CHANNEL_LEADOUT_START) { -- /* NOTE: the leadout session is first in the list. So if -- * we have tracks in the list set the last session track -- * size when we reach a new leadout (and therefore a new -- * session). */ -- -- if (priv->tracks) { -- BraseroMediumTrack *last_track; -- -- last_track = priv->tracks->data; -- last_track->blocks_num = leadout_start - last_track->start; -- } -- -- if (use_bcd) -- leadout_start = BRASERO_MSF_TO_LBA (BRASERO_GET_BCD (desc->p_min), -- BRASERO_GET_BCD (desc->p_sec), -- BRASERO_GET_BCD (desc->p_frame)); -- else -- leadout_start = BRASERO_MSF_TO_LBA (desc->p_min, -- desc->p_sec, -- desc->p_frame); -- leadout_start -= 150; -- } -- } -- -- if (priv->tracks) { -- BraseroMediumTrack *last_track; -- -- /* set the last found track size */ -- last_track = priv->tracks->data; -- last_track->blocks_num = leadout_start - last_track->start; -- } -- -- /* Add a leadout */ -- if (!(priv->info & BRASERO_MEDIUM_CLOSED)) { -- BraseroMediumTrack *track; -- -- /* we shouldn't request info on leadout if the disc is closed */ -- track = g_new0 (BraseroMediumTrack, 1); -- priv->tracks = g_slist_prepend (priv->tracks, track); -- track->start = leadout_start; -- track->type = BRASERO_MEDIUM_TRACK_LEADOUT; -- -- brasero_medium_track_get_info (self, track, g_slist_length (priv->tracks), fd, code); -- } -- -- priv->tracks = g_slist_reverse (priv->tracks); -- -- for (iter = priv->tracks; iter; iter = iter->next) { -- BraseroMediumTrack *track; -- -- track = iter->data; -- -- /* check for tracks less that 300 sectors */ -- if (track->blocks_num <= 300 && track->type != BRASERO_MEDIUM_TRACK_LEADOUT) { -- BRASERO_BURN_LOG ("300 sectors size. Checking for real size"); -- brasero_medium_track_volume_size (self, track, fd); -- } -- -- BRASERO_BURN_LOG ("Track %i: type = %i start = %llu size = %llu", -- g_slist_index (priv->tracks, track), -- track->type, -- track->start, -- track->blocks_num); -- } -- -- g_free (toc); -- return BRASERO_BURN_OK; --} -- --/** -- * NOTE: for DVD-R multisession we lose 28688 blocks for each session -- * so the capacity is the addition of all session sizes + 28688 for each -- * For all multisession DVD-/+R and CDR-RW the remaining size is given -- * in the leadout. One exception though with DVD+/-RW. -- */ -- --static void --brasero_medium_add_DVD_plus_RW_leadout (BraseroMedium *self, -- gint32 start) --{ -- BraseroMediumTrack *leadout; -- BraseroMediumPrivate *priv; -- -- priv = BRASERO_MEDIUM_PRIVATE (self); -- -- leadout = g_new0 (BraseroMediumTrack, 1); -- priv->tracks = g_slist_append (priv->tracks, leadout); -- -- leadout->start = start; -- leadout->type = BRASERO_MEDIUM_TRACK_LEADOUT; -- -- /* we fabricate the leadout here. We don't really need one in -- * fact since it is always at the last sector whatever the -- * amount of data written. So we need in fact to read the file -- * system and get the last sector from it. Hopefully it won't be -- * buggy */ -- priv->next_wr_add = 0; -- -- leadout->blocks_num = priv->block_num; -- if (g_slist_length (priv->tracks) > 1) { -- BraseroMediumTrack *track; -- -- track = priv->tracks->data; -- leadout->blocks_num -= ((track->blocks_num > 300) ? track->blocks_num : 300); -- } -- BRASERO_BURN_LOG ("Adding fabricated leadout start = %llu length = %llu", -- leadout->start, -- leadout->blocks_num); --} -- --static BraseroBurnResult --brasero_medium_get_sessions_info (BraseroMedium *self, -- int fd, -- BraseroScsiErrCode *code) --{ -- int num, i, size; -- BraseroScsiResult result; -- BraseroScsiTocDesc *desc; -- BraseroMediumPrivate *priv; -- BraseroScsiFormattedTocData *toc = NULL; -- -- BRASERO_BURN_LOG ("Reading Toc"); -- -- priv = BRASERO_MEDIUM_PRIVATE (self); -- result = brasero_mmc1_read_toc_formatted (fd, -- 0, -- &toc, -- &size, -- code); -- if (result != BRASERO_SCSI_OK) { -- g_free (toc); -- -- BRASERO_BURN_LOG ("READ TOC failed"); -- return BRASERO_BURN_ERR; -- } -- -- num = (size - sizeof (BraseroScsiFormattedTocData)) / -- sizeof (BraseroScsiTocDesc); -- -- BRASERO_BURN_LOG ("%i track(s) found", num); -- -- desc = toc->desc; -- for (i = 0; i < num; i ++, desc ++) { -- BraseroMediumTrack *track; -- -- if (desc->track_num == BRASERO_SCSI_TRACK_LEADOUT_START) -- break; -- -- track = g_new0 (BraseroMediumTrack, 1); -- priv->tracks = g_slist_prepend (priv->tracks, track); -- track->start = BRASERO_GET_32 (desc->track_start); -- -- /* we shouldn't request info on a track if the disc is closed */ -- brasero_medium_track_get_info (self, -- track, -- g_slist_length (priv->tracks), -- fd, -- code); -- -- if (desc->control & BRASERO_SCSI_TRACK_COPY) -- track->type |= BRASERO_MEDIUM_TRACK_COPY; -- -- if (!(desc->control & BRASERO_SCSI_TRACK_DATA)) { -- track->type |= BRASERO_MEDIUM_TRACK_AUDIO; -- priv->info |= BRASERO_MEDIUM_HAS_AUDIO; -- -- if (desc->control & BRASERO_SCSI_TRACK_PREEMP) -- track->type |= BRASERO_MEDIUM_TRACK_PREEMP; -- -- if (desc->control & BRASERO_SCSI_TRACK_4_CHANNELS) -- track->type |= BRASERO_MEDIUM_TRACK_4_CHANNELS; -- } -- else if (BRASERO_MEDIUM_IS (priv->info, BRASERO_MEDIUM_DVDRW_PLUS) -- || BRASERO_MEDIUM_IS (priv->info, BRASERO_MEDIUM_DVDRW_RESTRICTED)) { -- BraseroBurnResult result; -- -- /* a special case for these two kinds of media (DVD+RW) -- * which have only one track: the first. */ -- result = brasero_medium_track_volume_size (self, -- track, -- fd); -- if (result == BRASERO_BURN_OK) { -- track->type |= BRASERO_MEDIUM_TRACK_DATA; -- priv->info |= BRASERO_MEDIUM_HAS_DATA; -- -- priv->next_wr_add = 0; -- -- if (desc->control & BRASERO_SCSI_TRACK_DATA_INCREMENTAL) -- track->type |= BRASERO_MEDIUM_TRACK_INCREMENTAL; -- } -- else { -- priv->tracks = g_slist_remove (priv->tracks, track); -- g_free (track); -- -- priv->info |= BRASERO_MEDIUM_BLANK; -- priv->info &= ~BRASERO_MEDIUM_CLOSED; -- } -- } -- else { -- track->type |= BRASERO_MEDIUM_TRACK_DATA; -- priv->info |= BRASERO_MEDIUM_HAS_DATA; -- -- if (desc->control & BRASERO_SCSI_TRACK_DATA_INCREMENTAL) -- track->type |= BRASERO_MEDIUM_TRACK_INCREMENTAL; -- } -- } -- -- /* put the tracks in the right order */ -- priv->tracks = g_slist_reverse (priv->tracks); -- -- if (BRASERO_MEDIUM_IS (priv->info, BRASERO_MEDIUM_DVDRW_PLUS) -- || BRASERO_MEDIUM_IS (priv->info, BRASERO_MEDIUM_DVDRW_RESTRICTED)) -- brasero_medium_add_DVD_plus_RW_leadout (self, BRASERO_GET_32 (desc->track_start)); -- else if (!(priv->info & BRASERO_MEDIUM_CLOSED)) { -- BraseroMediumTrack *track; -- -- /* we shouldn't request info on leadout if the disc is closed -- * (except for DVD+/- (restricted) RW (see above) */ -- track = g_new0 (BraseroMediumTrack, 1); -- priv->tracks = g_slist_append (priv->tracks, track); -- track->start = BRASERO_GET_32 (desc->track_start); -- track->type = BRASERO_MEDIUM_TRACK_LEADOUT; -- -- brasero_medium_track_get_info (self, -- track, -- g_slist_length (priv->tracks), -- fd, -- code); -- } -- -- g_free (toc); -- -- return BRASERO_BURN_OK; --} -- --static BraseroBurnResult --brasero_medium_get_contents (BraseroMedium *self, -- int fd, -- BraseroScsiErrCode *code) --{ -- int size; -- BraseroScsiResult result; -- BraseroMediumPrivate *priv; -- BraseroScsiDiscInfoStd *info = NULL; -- -- BRASERO_BURN_LOG ("Retrieving media status"); -- -- priv = BRASERO_MEDIUM_PRIVATE (self); -- -- result = brasero_mmc1_read_disc_information_std (fd, -- &info, -- &size, -- code); -- if (result != BRASERO_SCSI_OK) { -- g_free (info); -- -- BRASERO_BURN_LOG ("READ DISC INFORMATION failed"); -- return BRASERO_BURN_ERR; -- } -- -- if (info->erasable) -- priv->info |= BRASERO_MEDIUM_REWRITABLE; -- -- if (info->status == BRASERO_SCSI_DISC_EMPTY) { -- BraseroMediumTrack *track; -- -- BRASERO_BURN_LOG ("Empty media"); -- -- priv->info |= BRASERO_MEDIUM_BLANK; -- priv->block_size = 2048; -- -- if (BRASERO_MEDIUM_IS (priv->info, BRASERO_MEDIUM_DVDRW_PLUS) -- || BRASERO_MEDIUM_IS (priv->info, BRASERO_MEDIUM_DVDRW_RESTRICTED)) -- brasero_medium_add_DVD_plus_RW_leadout (self, 0); -- else { -- track = g_new0 (BraseroMediumTrack, 1); -- track->start = 0; -- track->type = BRASERO_MEDIUM_TRACK_LEADOUT; -- priv->tracks = g_slist_prepend (priv->tracks, track); -- -- brasero_medium_track_get_info (self, -- track, -- 1, -- fd, -- code); -- } -- goto end; -- } -- -- if (info->status == BRASERO_SCSI_DISC_INCOMPLETE) { -- priv->info |= BRASERO_MEDIUM_APPENDABLE; -- BRASERO_BURN_LOG ("Appendable media"); -- } -- else if (info->status == BRASERO_SCSI_DISC_FINALIZED) { -- priv->info |= BRASERO_MEDIUM_CLOSED; -- BRASERO_BURN_LOG ("Closed media"); -- } -- -- if (priv->info & BRASERO_MEDIUM_CD) { -- result = brasero_medium_get_CD_sessions_info (self, fd, code); -- if (result != BRASERO_BURN_OK) -- result = brasero_medium_get_sessions_info (self, fd, code); -- } -- else -- result = brasero_medium_get_sessions_info (self, fd, code); -- -- if (result != BRASERO_BURN_OK) -- goto end; -- --end: -- -- g_free (info); -- return BRASERO_BURN_OK; --} -- --static void --brasero_medium_init_real (BraseroMedium *object, int fd) --{ -- gchar *name; -- BraseroBurnResult result; -- BraseroMediumPrivate *priv; -- BraseroScsiErrCode code = 0; -- -- priv = BRASERO_MEDIUM_PRIVATE (object); -- -- name = nautilus_burn_drive_get_name_for_display (priv->drive); -- BRASERO_BURN_LOG ("Initializing information for medium in %s", name); -- g_free (name); -- -- result = brasero_medium_get_medium_type (object, fd, &code); -- if (result != BRASERO_BURN_OK) -- return; -- -- brasero_medium_get_capacity_by_type (object, fd, &code); -- -- result = brasero_medium_get_contents (object, fd, &code); -- if (result != BRASERO_BURN_OK) -- return; -- -- /* assume that css feature is only for DVD-ROM which might be wrong but -- * some drives wrongly reports that css is enabled for blank DVD+R/W */ -- if (BRASERO_MEDIUM_IS (priv->info, (BRASERO_MEDIUM_DVD|BRASERO_MEDIUM_ROM))) -- brasero_medium_get_css_feature (object, fd, &code); -- -- BRASERO_BURN_LOG_DISC_TYPE (priv->info, "media is "); --} -- --static gboolean --brasero_medium_retry_open (gpointer object) --{ -- int fd; -- const gchar *path; -- BraseroMedium *self; -- BraseroMediumPrivate *priv; -- -- self = BRASERO_MEDIUM (object); -- priv = BRASERO_MEDIUM_PRIVATE (object); -- path = nautilus_burn_drive_get_device (priv->drive); -- -- BRASERO_BURN_LOG ("Retrying to open device %s", path); -- fd = open (path, OPEN_FLAGS); -- if (fd < 0) { -- if (errno == EBUSY -- || errno == EAGAIN -- || errno == EWOULDBLOCK) { -- BRASERO_BURN_LOG ("Device busy"); -- /* we'll retry in a second */ -- return TRUE; -- } -- -- BRASERO_BURN_LOG ("Open () failed"); -- priv->info = BRASERO_MEDIUM_UNSUPPORTED; -- priv->retry_id = 0; -- return FALSE; -- } -- -- BRASERO_BURN_LOG ("Open () succeeded\n"); -- priv->info = BRASERO_MEDIUM_NONE; -- priv->icon = icons [0]; -- -- priv->retry_id = 0; -- -- brasero_medium_init_real (self, fd); -- close (fd); -- -- return FALSE; --} -- --static void --brasero_medium_try_open (BraseroMedium *self) --{ -- int fd; -- const gchar *path; -- BraseroMediumPrivate *priv; -- -- priv = BRASERO_MEDIUM_PRIVATE (self); -- path = nautilus_burn_drive_get_device (priv->drive); -- -- /* the drive might be busy (a burning is going on) so we don't block -- * but we re-try to open it every second */ -- BRASERO_BURN_LOG ("Trying to open device %s", path); -- fd = open (path, OPEN_FLAGS); -- if (fd < 0) { -- if (errno == EAGAIN -- || errno == EWOULDBLOCK -- || errno == EBUSY) { -- BRASERO_BURN_LOG ("Device busy"); -- priv->info = BRASERO_MEDIUM_BUSY; -- priv->icon = icons [0]; -- -- priv->retry_id = g_timeout_add (BUSY_RETRY_TIME, -- brasero_medium_retry_open, -- self); -- } -- -- BRASERO_BURN_LOG ("Open () failed"); -- return; -- } -- -- BRASERO_BURN_LOG ("Open () succeeded"); -- brasero_medium_init_real (self, fd); -- close (fd); --} -- --static void --brasero_medium_init (BraseroMedium *object) --{ -- BraseroMediumPrivate *priv; -- -- priv = BRASERO_MEDIUM_PRIVATE (object); -- priv->next_wr_add = -1; -- -- /* we can't do anything here since properties haven't been set yet */ --} -- --static void --brasero_medium_finalize (GObject *object) --{ -- BraseroMediumPrivate *priv; -- -- priv = BRASERO_MEDIUM_PRIVATE (object); -- -- if (priv->retry_id) { -- g_source_remove (priv->retry_id); -- priv->retry_id = 0; -- } -- -- g_free (priv->rd_speeds); -- priv->rd_speeds = NULL; -- -- g_free (priv->wr_speeds); -- priv->wr_speeds = NULL; -- -- g_slist_foreach (priv->tracks, (GFunc) g_free, NULL); -- g_slist_free (priv->tracks); -- priv->tracks = NULL; -- -- nautilus_burn_drive_unref (priv->drive); -- priv->drive = NULL; -- -- G_OBJECT_CLASS (parent_class)->finalize (object); --} -- --static void --brasero_medium_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) --{ -- BraseroMediumPrivate *priv; -- -- g_return_if_fail (BRASERO_IS_MEDIUM (object)); -- -- priv = BRASERO_MEDIUM_PRIVATE (object); -- -- switch (prop_id) -- { -- case PROP_DRIVE: -- priv->drive = g_value_get_object (value); -- nautilus_burn_drive_ref (priv->drive); -- brasero_medium_try_open (BRASERO_MEDIUM (object)); -- break; -- default: -- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); -- break; -- } --} -- --static void --brasero_medium_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) --{ -- BraseroMediumPrivate *priv; -- -- g_return_if_fail (BRASERO_IS_MEDIUM (object)); -- -- priv = BRASERO_MEDIUM_PRIVATE (object); -- -- switch (prop_id) -- { -- case PROP_DRIVE: -- nautilus_burn_drive_ref (priv->drive); -- g_value_set_object (value, priv->drive); -- break; -- default: -- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); -- break; -- } --} -- --static void --brasero_medium_class_init (BraseroMediumClass *klass) --{ -- GObjectClass* object_class = G_OBJECT_CLASS (klass); -- parent_class = G_OBJECT_CLASS (g_type_class_peek_parent (klass)); -- -- g_type_class_add_private (klass, sizeof (BraseroMediumPrivate)); -- -- object_class->finalize = brasero_medium_finalize; -- object_class->set_property = brasero_medium_set_property; -- object_class->get_property = brasero_medium_get_property; -- -- g_object_class_install_property (object_class, -- PROP_DRIVE, -- g_param_spec_object ("drive", -- "drive", -- "drive in which medium is inserted", -- NAUTILUS_BURN_TYPE_DRIVE, -- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); --} -- --GType --brasero_medium_get_type (void) --{ -- static GType our_type = 0; -- -- if (our_type == 0) -- { -- static const GTypeInfo our_info = -- { -- sizeof (BraseroMediumClass), /* class_size */ -- (GBaseInitFunc) NULL, /* base_init */ -- (GBaseFinalizeFunc) NULL, /* base_finalize */ -- (GClassInitFunc) brasero_medium_class_init, /* class_init */ -- (GClassFinalizeFunc) NULL, /* class_finalize */ -- NULL /* class_data */, -- sizeof (BraseroMedium), /* instance_size */ -- 0, /* n_preallocs */ -- (GInstanceInitFunc) brasero_medium_init, /* instance_init */ -- NULL /* value_table */ -- }; -- -- our_type = g_type_register_static (G_TYPE_OBJECT, "BraseroMedium", -- &our_info, 0); -- } -- -- return our_type; --} -- --BraseroMedium * --brasero_medium_new (NautilusBurnDrive *drive) --{ -- g_return_val_if_fail (drive != NULL, NULL); -- return BRASERO_MEDIUM (g_object_new (BRASERO_TYPE_MEDIUM, -- "drive", drive, -- NULL)); --} diff --git a/sysutils/brasero/files/patch-src_cam b/sysutils/brasero/files/patch-src_cam deleted file mode 100644 index beeeb7033de1..000000000000 --- a/sysutils/brasero/files/patch-src_cam +++ /dev/null @@ -1,1361 +0,0 @@ -diff -rupN cam.orig/freebsd_dvd_rw_utils.h cam/freebsd_dvd_rw_utils.h ---- /dev/null 1969-12-31 19:00:00.000000000 -0500 -+++ src/cam/freebsd_dvd_rw_utils.h 2008-01-24 16:52:25.000000000 -0500 -@@ -0,0 +1,49 @@ -+// -+// This is part of dvd+rw-tools by Andy Polyakov <appro@fy.chalmers.se> -+// -+// Use-it-on-your-own-risk, GPL bless... -+// -+// For further details see http://fy.chalmers.se/~appro/linux/DVD+RW/ -+// -+ -+#ifndef FREEBSD_DVD_RW_UTILS_H -+#define FREEBSD_DVD_RW_UTILS_H -+ -+#ifdef HAVE_CONFIG_H -+# include <config.h> -+#endif -+ -+#include <glib.h> -+ -+#include "cam-cdrom.h" -+ -+#define DRIVE_CDROM_CAPS_DVDRW 1 -+#define DRIVE_CDROM_CAPS_DVDPLUSR 2 -+#define DRIVE_CDROM_CAPS_DVDPLUSRW 4 -+#define DRIVE_CDROM_CAPS_DVDPLUSRWDL 8 -+#define DRIVE_CDROM_CAPS_DVDPLUSRDL 16 -+#define DRIVE_CDROM_CAPS_BDROM 32 -+#define DRIVE_CDROM_CAPS_BDR 64 -+#define DRIVE_CDROM_CAPS_BDRE 128 -+#define DRIVE_CDROM_CAPS_HDDVDROM 256 -+#define DRIVE_CDROM_CAPS_HDDVDR 512 -+#define DRIVE_CDROM_CAPS_HDDVDRW 1024 -+ -+int brasero_cdrom_get_dvd_r_rw_profile (BRASEROCDROM *cdrom); -+int brasero_cdrom_get_read_write_speed (BRASEROCDROM *cdrom, int *read_speed, int *write_speed, char **write_speeds); -+int brasero_cdrom_get_disc_capacity_for_type (BRASEROCDROM *cdrom, int type, guint64 *capacity); -+int brasero_cdrom_get_disc_type (BRASEROCDROM *cdrom); -+int brasero_cdrom_read_disc_information_std (BRASEROCDROM *cdrom, unsigned char *buf); -+int brasero_cdrom_disc_is_appendable (BRASEROCDROM *cdrom); -+int brasero_cdrom_disc_is_rewritable (BRASEROCDROM *cdrom); -+int brasero_cdrom_read_atip (BRASEROCDROM *cdrom, unsigned char **buf); -+int brasero_cdrom_read_format_capacities (BRASEROCDROM *cdrom, unsigned char **buf); -+int brasero_cdrom_get_performance_wrt_spd_desc (BRASEROCDROM *cdrom, unsigned char **buf); -+int brasero_cdrom_get_configuration_feature (BRASEROCDROM *cdrom, int feature, unsigned char **buf); -+int brasero_cdrom_read_track_info (BRASEROCDROM *cdrom, int track_num, unsigned char *buf, int size); -+int brasero_cdrom_read_toc_raw (BRASEROCDROM *cdrom, int track_num, unsigned char **buf); -+int brasero_cdrom_read_toc_formatted (BRASEROCDROM *cdrom, int track_num, unsigned char **buf); -+int brasero_read_disc_information_std (BRASEROCDROM *cdrom, unsigned char *buf); -+int brasero_cdrom_read_format_capacities (BRASEROCDROM *cdrom, unsigned char **buf); -+ -+#endif /* FREEBSD_DVD_RW_UTILS_H */ ---- /dev/null 2008-02-03 02:26:39.000000000 -0500 -+++ src/cam/cam-cdrom.h 2008-02-03 11:32:23.000000000 -0500 -@@ -0,0 +1,68 @@ -+/*************************************************************************** -+ * CVSID: $Id$ -+ * -+ * hfp-cdrom.h : SCSI CD-ROM abstraction layer -+ * -+ * Copyright (C) 2006 Jean-Yves Lefort <jylefort@FreeBSD.org> -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -+ * -+ **************************************************************************/ -+ -+#ifndef _BRASERO_CDROM_H -+#define _BRASERO_CDROM_H -+ -+#ifdef HAVE_CONFIG_H -+# include <config.h> -+#endif -+ -+#include <glib.h> -+ -+#include <sys/types.h> -+ -+typedef struct _BRASEROCDROM BRASEROCDROM; -+ -+typedef enum -+{ -+ BRASERO_CDROM_DIRECTION_NONE, -+ BRASERO_CDROM_DIRECTION_IN, -+ BRASERO_CDROM_DIRECTION_OUT -+} BRASEROCDROMDirection; -+ -+/* ATAPI/SCSI commands */ -+enum -+{ -+ BRASERO_CDROM_TEST_UNIT_READY = 0x00, -+ BRASERO_CDROM_GET_EVENT_STATUS_NOTIFICATION = 0x4a, -+ BRASERO_CDROM_MODE_SENSE_BIG = 0x5a -+}; -+ -+BRASEROCDROM *brasero_cdrom_new (const char *path); -+ -+gboolean brasero_cdrom_send_ccb (BRASEROCDROM *cdrom, -+ const char *ccb, -+ int ccb_len, -+ BRASEROCDROMDirection direction, -+ void *data, -+ int len, -+ char **err); -+ -+gboolean brasero_cdrom_test_unit_ready (BRASEROCDROM *cdrom); -+ -+int brasero_cdrom_get_fd (BRASEROCDROM *cdrom); -+ -+void brasero_cdrom_free (BRASEROCDROM *cdrom); -+ -+#endif /* _BRASERO_CDROM_H */ ---- /dev/null 2008-02-03 13:11:45.000000000 -0500 -+++ src/cam/cam-cdrom.c 2008-02-03 13:24:53.000000000 -0500 -@@ -0,0 +1,156 @@ -+/*************************************************************************** -+ * CVSID: $Id$ -+ * -+ * cam-cdrom.c : SCSI CD-ROM abstraction layer -+ * -+ * Copyright (C) 2006 Jean-Yves Lefort <jylefort@FreeBSD.org> -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -+ * -+ **************************************************************************/ -+ -+#ifdef HAVE_CONFIG_H -+# include <config.h> -+#endif -+ -+#include <string.h> -+#include <errno.h> -+#include <fcntl.h> -+#include <unistd.h> -+#include <sys/ioctl.h> -+#include <sys/types.h> -+#include <sys/ata.h> -+#include <stdio.h> -+#include <camlib.h> -+#include <cam/scsi/scsi_message.h> -+#include <glib.h> -+ -+#include "cam-cdrom.h" -+ -+struct _BRASEROCDROM -+{ -+ struct cam_device *cam; /* for SCSI drives */ -+ int fd; -+}; -+ -+BRASEROCDROM * -+brasero_cdrom_new (const char *path) -+{ -+ BRASEROCDROM *cdrom = NULL; -+ struct cam_device *cam; -+ int fd; -+ -+ g_assert(path != NULL); -+ -+ /* brasero_open_device() fails unless we use O_RDWR */ -+ cam = cam_open_device(path, O_RDWR); -+ fd = open(path, O_RDONLY | O_NONBLOCK); -+ if (cam && fd > -1) -+ { -+ cdrom = g_new0(BRASEROCDROM, 1); -+ cdrom->cam = cam; -+ cdrom->fd = fd; -+ } -+ -+ return cdrom; -+} -+ -+gboolean -+brasero_cdrom_send_ccb (BRASEROCDROM *cdrom, -+ const char *ccb, -+ int ccb_len, -+ BRASEROCDROMDirection direction, -+ void *data, -+ int len, -+ char **err) -+{ -+ int timeout; -+ -+ g_assert(cdrom != NULL); -+ g_assert(ccb != NULL); -+ g_assert(direction == BRASERO_CDROM_DIRECTION_NONE -+ || direction == BRASERO_CDROM_DIRECTION_IN -+ || direction == BRASERO_CDROM_DIRECTION_OUT); -+ g_assert(direction == BRASERO_CDROM_DIRECTION_NONE || data != NULL); -+ -+ timeout = 10; -+ -+ union ccb cam_ccb; -+ static int scsi_direction[] = { CAM_DIR_NONE, CAM_DIR_IN, CAM_DIR_OUT }; -+ -+ memset(&cam_ccb, 0, sizeof(cam_ccb)); -+ -+ cam_ccb.ccb_h.path_id = cdrom->cam->path_id; -+ cam_ccb.ccb_h.target_id = cdrom->cam->target_id; -+ cam_ccb.ccb_h.target_lun = cdrom->cam->target_lun; -+ -+ cam_fill_csio(&cam_ccb.csio, -+ 1, -+ NULL, -+ scsi_direction[direction], -+ MSG_SIMPLE_Q_TAG, -+ data, -+ len, -+ sizeof(cam_ccb.csio.sense_data), -+ ccb_len, -+ timeout * 1000); -+ -+ memcpy(cam_ccb.csio.cdb_io.cdb_bytes, ccb, 16); -+ -+ if (cam_send_ccb(cdrom->cam, &cam_ccb) == -1) -+ { -+ if (err) -+ *err = g_strdup_printf("cam_send_ccb() failure: %s", g_strerror(errno)); -+ } -+ if ((cam_ccb.ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP) -+ { -+ if (err) -+ *err = g_strdup_printf("CCB request failed with status %i", cam_ccb.ccb_h.status & CAM_STATUS_MASK); -+ return FALSE; -+ } -+ -+ return TRUE; -+} -+ -+gboolean -+brasero_cdrom_test_unit_ready (BRASEROCDROM *cdrom) -+{ -+ static char ccb[16] = { BRASERO_CDROM_TEST_UNIT_READY }; -+ -+ g_assert(cdrom != NULL); -+ -+ return brasero_cdrom_send_ccb(cdrom, ccb, 6, BRASERO_CDROM_DIRECTION_NONE, NULL, 0, NULL); -+} -+ -+int -+brasero_cdrom_get_fd (BRASEROCDROM *cdrom) -+{ -+ g_assert(cdrom != NULL); -+ -+ return (cdrom->fd); -+} -+ -+void -+brasero_cdrom_free (BRASEROCDROM *cdrom) -+{ -+ g_assert(cdrom != NULL); -+ -+ if (cdrom->cam) -+ cam_close_device(cdrom->cam); -+ -+ close(cdrom->fd); -+ -+ g_free(cdrom); -+} ---- /dev/null 2008-02-03 13:11:45.000000000 -0500 -+++ src/cam/freebsd_dvd_rw_utils.c 2008-02-03 13:30:36.000000000 -0500 -@@ -0,0 +1,1075 @@ -+/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- -+ * -+ * This is part of dvd+rw-tools by Andy Polyakov <appro@fy.chalmers.se> -+ * -+ * Use-it-on-your-own-risk, GPL bless... -+ * -+ * For further details see http://fy.chalmers.se/~appro/linux/DVD+RW/ -+*/ -+ -+#include <stdio.h> -+#include <string.h> -+#include <stdlib.h> -+#include <sys/types.h> -+ -+#include <glib.h> -+ -+#include "freebsd_dvd_rw_utils.h" -+ -+typedef enum { -+ NONE = BRASERO_CDROM_DIRECTION_NONE, -+ READ = BRASERO_CDROM_DIRECTION_IN, -+ WRITE = BRASERO_CDROM_DIRECTION_OUT -+} Direction; -+ -+typedef struct ScsiCommand ScsiCommand; -+ -+struct ScsiCommand { -+ BRASEROCDROM *cdrom; -+ char ccb[16]; -+ int len; -+}; -+ -+static ScsiCommand * -+scsi_command_new_from_cdrom (BRASEROCDROM *cdrom) -+{ -+ ScsiCommand *cmd; -+ -+ cmd = g_new0 (ScsiCommand, 1); -+ cmd->cdrom = cdrom; -+ -+ return cmd; -+} -+ -+static void -+scsi_command_free (ScsiCommand * cmd) -+{ -+ free (cmd); -+} -+ -+static void -+scsi_command_init (ScsiCommand * cmd, size_t i, int arg) -+{ -+ cmd->ccb[i] = arg; -+ if (i == 0 || i >= cmd->len) -+ cmd->len = i + 1; -+} -+ -+static int -+scsi_command_transport (ScsiCommand * cmd, Direction dir, void *buf, -+ size_t sz) -+{ -+ if (brasero_cdrom_send_ccb(cmd->cdrom, cmd->ccb, cmd->len, dir, buf, sz, NULL)) -+ return 0; -+ else -+ return -1; -+} -+ -+int -+brasero_cdrom_get_dvd_r_rw_profile (BRASEROCDROM *cdrom) -+{ -+ ScsiCommand *cmd; -+ int retval = 0; -+ unsigned char page[20]; -+ unsigned char *list; -+ int i, len; -+ -+ g_return_val_if_fail (cdrom != NULL, -1); -+ -+ cmd = scsi_command_new_from_cdrom (cdrom); -+ -+ scsi_command_init (cmd, 0, 0x46); -+ scsi_command_init (cmd, 1, 2); -+ scsi_command_init (cmd, 8, 8); -+ scsi_command_init (cmd, 9, 0); -+ if (scsi_command_transport (cmd, READ, page, 8)) { -+ /* GET CONFIGURATION failed */ -+ scsi_command_free (cmd); -+ return -1; -+ } -+ -+ /* See if it's 2 gen drive by checking if DVD+R profile is an option */ -+ len = 4 + (page[0] << 24 | page[1] << 16 | page[2] << 8 | page[3]); -+ if (len > 264) { -+ scsi_command_free (cmd); -+ /* insane profile list length */ -+ return -1; -+ } -+ -+ list = g_new (unsigned char, len); -+ -+ scsi_command_init (cmd, 0, 0x46); -+ scsi_command_init (cmd, 1, 2); -+ scsi_command_init (cmd, 7, len >> 8); -+ scsi_command_init (cmd, 8, len); -+ scsi_command_init (cmd, 9, 0); -+ if (scsi_command_transport (cmd, READ, list, len)) { -+ /* GET CONFIGURATION failed */ -+ scsi_command_free (cmd); -+ free (list); -+ return -1; -+ } -+ -+ for (i = 12; i < list[11]; i += 4) { -+ int profile = (list[i] << 8 | list[i + 1]); -+ /* 0x13: DVD-RW Restricted Overwrite -+ * 0x14: DVD-RW Sequential -+ * 0x1B: DVD+R -+ * 0x1A: DVD+RW -+ * 0x2A: DVD+RW DL -+ * 0x2B: DVD+R DL -+ * 0x40: BD-ROM -+ * 0x41: BD-R SRM -+ * 0x42: BD-R RRM -+ * 0x43: BD-RE -+ * 0x50: HD DVD-ROM -+ * 0x51: HD DVD-R -+ * 0x52: HD DVD-Rewritable -+ */ -+ -+ switch (profile) { -+ case 0x13: -+ case 0x14: -+ retval |= DRIVE_CDROM_CAPS_DVDRW; -+ break; -+ case 0x1B: -+ retval |= DRIVE_CDROM_CAPS_DVDPLUSR; -+ break; -+ case 0x1A: -+ retval |= DRIVE_CDROM_CAPS_DVDPLUSRW; -+ break; -+ case 0x2A: -+ retval |= DRIVE_CDROM_CAPS_DVDPLUSRWDL; -+ break; -+ case 0x2B: -+ retval |= DRIVE_CDROM_CAPS_DVDPLUSRDL; -+ break; -+ case 0x40: -+ retval |= DRIVE_CDROM_CAPS_BDROM; -+ break; -+ case 0x41: -+ case 0x42: -+ retval |= DRIVE_CDROM_CAPS_BDR; -+ break; -+ case 0x43: -+ retval |= DRIVE_CDROM_CAPS_BDRE; -+ break; -+ case 0x50: -+ retval |= DRIVE_CDROM_CAPS_HDDVDROM; -+ break; -+ case 0x51: -+ retval |= DRIVE_CDROM_CAPS_HDDVDR; -+ break; -+ case 0x52: -+ retval |= DRIVE_CDROM_CAPS_HDDVDRW; -+ break; -+ default: -+ break; -+ } -+ } -+ -+ scsi_command_free (cmd); -+ free (list); -+ -+ return retval; -+ -+} -+ -+static unsigned char * -+pull_page2a_from_cdrom (BRASEROCDROM *cdrom) -+{ -+ ScsiCommand *cmd; -+ unsigned char header[12], *page2A; -+ unsigned int len, bdlen; -+ -+ g_return_val_if_fail (cdrom != NULL, NULL); -+ -+ cmd = scsi_command_new_from_cdrom (cdrom); -+ -+ scsi_command_init (cmd, 0, 0x5A); /* MODE SENSE */ -+ scsi_command_init (cmd, 1, 0x08); /* Disable Block Descriptors */ -+ scsi_command_init (cmd, 2, 0x2A); /* Capabilities and Mechanical Status */ -+ scsi_command_init (cmd, 8, sizeof (header)); /* header only to start with */ -+ scsi_command_init (cmd, 9, 0); -+ -+ if (scsi_command_transport (cmd, READ, header, sizeof (header))) { -+ /* MODE SENSE failed */ -+ scsi_command_free (cmd); -+ return NULL; -+ } -+ -+ len = (header[0] << 8 | header[1]) + 2; -+ bdlen = header[6] << 8 | header[7]; -+ -+ /* should never happen as we set "DBD" above */ -+ if (bdlen) { -+ if (len < (8 + bdlen + 30)) { -+ /* LUN impossible to bear with */ -+ scsi_command_free (cmd); -+ return NULL; -+ } -+ } else if (len < (8 + 2 + (unsigned int) header[9])) { -+ /* SANYO does this. */ -+ len = 8 + 2 + header[9]; -+ } -+ -+ page2A = g_new (unsigned char, len); -+ if (page2A == NULL) { -+ /* ENOMEM */ -+ scsi_command_free (cmd); -+ return NULL; -+ } -+ -+ scsi_command_init (cmd, 0, 0x5A); /* MODE SENSE */ -+ scsi_command_init (cmd, 1, 0x08); /* Disable Block Descriptors */ -+ scsi_command_init (cmd, 2, 0x2A); /* Capabilities and Mechanical Status */ -+ scsi_command_init (cmd, 7, len >> 8); -+ scsi_command_init (cmd, 8, len); /* Real length */ -+ scsi_command_init (cmd, 9, 0); -+ if (scsi_command_transport (cmd, READ, page2A, len)) { -+ /* MODE SENSE failed */ -+ scsi_command_free (cmd); -+ free (page2A); -+ return NULL; -+ } -+ -+ scsi_command_free (cmd); -+ -+ len -= 2; -+ /* paranoia */ -+ if (len < ((unsigned int) page2A[0] << 8 | page2A[1])) { -+ page2A[0] = len >> 8; -+ page2A[1] = len; -+ } -+ -+ return page2A; -+} -+ -+static int -+int_compare (const void *a, const void *b) -+{ -+ /* descending order */ -+ return *((int *) b) - *((int *) a); -+} -+ -+/* gets the list of supported write speeds. in the event -+ * that anything goes wrong, returns NULL. -+ */ -+static char * -+get_write_speeds (const unsigned char *p, int length, int max_speed) -+{ -+ char *result, *str; -+ int nr_records; -+ int *tmpspeeds; -+ int i, j; -+ -+ result = NULL; -+ -+ /* paranoia */ -+ if (length < 32) -+ return NULL; -+ -+ nr_records = p[30] << 8 | p[31]; -+ -+ /* paranoia */ -+ if (length < 32 + 4 * nr_records) -+ return NULL; -+ -+ tmpspeeds = g_new (int, nr_records); -+ -+ for (i = 0; i < nr_records; i++) -+ { -+ tmpspeeds[i] = p[4*i + 34] << 8 | p[4*i + 35]; -+ -+ /* i'm not sure how likely this is to show up, but it's -+ * definitely wrong. if we see it, abort. -+ */ -+ if (tmpspeeds[i] == 0) -+ goto free_tmpspeeds; -+ } -+ -+ /* sort */ -+ qsort (tmpspeeds, nr_records, sizeof (int), int_compare); -+ -+ /* uniq */ -+ for (i = j = 0; i < nr_records; i++) -+ { -+ tmpspeeds[j] = tmpspeeds[i]; -+ -+ /* make sure we don't look past the end of the array */ -+ if (i >= (nr_records - 1) || tmpspeeds[i+1] != tmpspeeds[i]) -+ j++; -+ } -+ -+ /* j is now the number of unique entries in the array */ -+ if (j == 0) -+ /* no entries? this isn't right. */ -+ goto free_tmpspeeds; -+ -+ /* sanity check: the first item in the descending order -+ * list ought to be the highest speed as detected through -+ * other means -+ */ -+ if (tmpspeeds[0] != max_speed) -+ /* sanity check failed. */ -+ goto free_tmpspeeds; -+ -+ /* our values are 16-bit. 8 bytes per value -+ * is more than enough including space for -+ * ',' and '\0'. we know j is not zero. -+ */ -+ result = str = g_new (char, 8 * j); -+ -+ for (i = 0; i < j; i++) -+ { -+ if (i > 0) -+ *(str++) = ','; -+ -+ str += sprintf (str, "%d", tmpspeeds[i]); -+ } -+ -+free_tmpspeeds: -+ free (tmpspeeds); -+ -+ return result; -+} -+ -+int -+brasero_cdrom_get_read_write_speed (BRASEROCDROM *cdrom, int *read_speed, int *write_speed, char **write_speeds) -+{ -+ unsigned char *page2A; -+ int len, hlen; -+ unsigned char *p; -+ -+ g_return_val_if_fail (cdrom != NULL, -1); -+ -+ *read_speed = 0; -+ *write_speed = 0; -+ *write_speeds = NULL; -+ -+ page2A = pull_page2a_from_cdrom (cdrom); -+ if (page2A == NULL) { -+ printf ("Failed to get Page 2A\n"); -+ /* Failed to get Page 2A */ -+ return -1; -+ } -+ -+ len = (page2A[0] << 8 | page2A[1]) + 2; -+ hlen = 8 + (page2A[6] << 8 | page2A[7]); -+ p = page2A + hlen; -+ -+ /* Values guessed from the cd_mode_page_2A struct -+ * in cdrecord's libscg/scg/scsireg.h */ -+ if (len < (hlen + 30) || p[1] < (30 - 2)) { -+ /* no MMC-3 "Current Write Speed" present, -+ * try to use the MMC-2 one */ -+ if (len < (hlen + 20) || p[1] < (20 - 2)) -+ *write_speed = 0; -+ else -+ *write_speed = p[18] << 8 | p[19]; -+ } else { -+ *write_speed = p[28] << 8 | p[29]; -+ } -+ -+ if (len >= hlen+9) -+ *read_speed = p[8] << 8 | p[9]; -+ else -+ *read_speed = 0; -+ -+ *write_speeds = get_write_speeds (p, len, *write_speed); -+ -+ free (page2A); -+ -+ return 0; -+} -+ -+ -+static int -+get_disc_capacity_cd (BRASEROCDROM *cdrom, guint64 *size) -+{ -+ ScsiCommand *cmd; -+ int retval; -+ guint64 block_size; -+ guint64 num_blocks; -+ unsigned char header [8]; -+ -+ g_return_val_if_fail (cdrom != NULL, -1); -+ -+ retval = -1; -+ -+ cmd = scsi_command_new_from_cdrom (cdrom); -+ scsi_command_init (cmd, 0, 0x25); -+ scsi_command_init (cmd, 9, 0); -+ if (scsi_command_transport (cmd, READ, header, 8)) { -+ /* READ CDROM CAPACITY failed */ -+ goto done; -+ } -+ -+ num_blocks = (header [0] << 24) | (header [1] << 16) | (header [2] << 8) | header [3]; -+ num_blocks++; -+ block_size = header [4] << 24 | header [5] << 16 | header [6] << 8 | header [7]; -+ -+ if (size) { -+ *size = num_blocks * block_size; -+ } -+ retval = 0; -+ -+ done: -+ scsi_command_free (cmd); -+ -+ return retval; -+} -+ -+static int -+get_disc_capacity_cdr (BRASEROCDROM *cdrom, guint64 *size) -+{ -+ ScsiCommand *cmd; -+ int retval; -+ guint64 secs; -+ unsigned char toc [8]; -+ unsigned char *atip; -+ int len; -+ -+ g_return_val_if_fail (cdrom != NULL, -1); -+ -+ retval = -1; -+ -+ cmd = scsi_command_new_from_cdrom (cdrom); -+ /* READ_TOC */ -+ scsi_command_init (cmd, 0, 0x43); -+ /* FMT_ATIP */ -+ scsi_command_init (cmd, 2, 4 & 0x0F); -+ scsi_command_init (cmd, 6, 0); -+ scsi_command_init (cmd, 8, 4); -+ scsi_command_init (cmd, 9, 0); -+ -+ if (scsi_command_transport (cmd, READ, toc, 4)) { -+ /* READ TOC failed */ -+ goto done; -+ } -+ -+ len = 2 + (toc [0] << 8 | toc [1]); -+ -+ atip = g_new (unsigned char, len); -+ -+ scsi_command_init (cmd, 0, 0x43); -+ scsi_command_init (cmd, 2, 4 & 0x0F); -+ scsi_command_init (cmd, 6, 0); -+ scsi_command_init (cmd, 7, len >> 8); -+ scsi_command_init (cmd, 8, len); -+ scsi_command_init (cmd, 9, 0); -+ -+ if (scsi_command_transport (cmd, READ, atip, len)) { -+ /* READ TOC failed */ -+ free (atip); -+ goto done; -+ } -+ -+ secs = atip [12] * 60 + atip [13] + (atip [14] / 75 + 1); -+ -+ if (size) { -+ *size = (1 + secs * 7 / 48) * 1024 * 1024; -+ } -+ retval = 0; -+ -+ free (atip); -+ done: -+ scsi_command_free (cmd); -+ -+ return retval; -+} -+ -+static int -+get_disc_capacity_dvdr_from_type (BRASEROCDROM *cdrom, int type, guint64 *size) -+{ -+ ScsiCommand *cmd; -+ unsigned char formats [260]; -+ unsigned char buf [32]; -+ guint64 blocks; -+ guint64 nwa; -+ int i; -+ int len; -+ int obligatory; -+ int retval; -+ int next_track; -+ -+ g_return_val_if_fail (cdrom != NULL, -1); -+ -+ retval = -1; -+ blocks = 0; -+ next_track = 1; -+ -+ cmd = scsi_command_new_from_cdrom (cdrom); -+ -+ retry: -+ if (type == 0x1A || type == 0x14 || type == 0x13 || type == 0x12) { -+ -+ /* READ FORMAT CAPACITIES */ -+ scsi_command_init (cmd, 0, 0x23); -+ scsi_command_init (cmd, 8, 12); -+ scsi_command_init (cmd, 9, 0); -+ if (scsi_command_transport (cmd, READ, formats, 12)) { -+ /* READ FORMAT CAPACITIES failed */ -+ goto done; -+ } -+ -+ len = formats [3]; -+ if (len & 7 || len < 16) { -+ /* Length isn't sane */ -+ goto done; -+ } -+ -+ scsi_command_init (cmd, 0, 0x23); -+ scsi_command_init (cmd, 7, (4 + len) >> 8); -+ scsi_command_init (cmd, 8, (4 + len) & 0xFF); -+ scsi_command_init (cmd, 9, 0); -+ if (scsi_command_transport (cmd, READ, formats, 4 + len)) { -+ /* READ FORMAT CAPACITIES failed */ -+ goto done; -+ } -+ -+ if (len != formats [3]) { -+ /* Parameter length inconsistency */ -+ goto done; -+ } -+ } -+ -+ obligatory = 0x00; -+ -+ switch (type) { -+ case 0x1A: /* DVD+RW */ -+ obligatory = 0x26; -+ case 0x13: /* DVD-RW Restricted Overwrite */ -+ case 0x14: /* DVD-RW Sequential */ -+ for (i = 8, len = formats [3]; i < len; i += 8) { -+ if ((formats [4 + i + 4] >> 2) == obligatory) { -+ break; -+ } -+ } -+ -+ if (i == len) { -+ /* Can't find obligatory format descriptor */ -+ goto done; -+ } -+ -+ blocks = formats [4 + i + 0] << 24; -+ blocks |= formats [4 + i + 1] << 16; -+ blocks |= formats [4 + i + 2] << 8; -+ blocks |= formats [4 + i + 3]; -+ nwa = formats [4 + 5] << 16 | formats [4 + 6] << 8 | formats [4 + 7]; -+ if (nwa > 2048) { -+ blocks *= nwa / 2048; -+ } else if (nwa < 2048) { -+ blocks /= 2048 / nwa; -+ } -+ -+ retval = 0; -+ break; -+ -+ case 0x12: /* DVD-RAM */ -+ -+ blocks = formats [4 + 0] << 24; -+ blocks |= formats [4 + 1] << 16; -+ blocks |= formats [4 + 2] << 8; -+ blocks |= formats [4 + 3]; -+ nwa = formats [4 + 5] << 16 | formats [4 + 6] << 8 | formats [4 + 7]; -+ if (nwa > 2048) { -+ blocks *= nwa / 2048; -+ } else if (nwa < 2048) { -+ blocks /= 2048 / nwa; -+ } -+ -+ retval = 0; -+ break; -+ -+ case 0x11: /* DVD-R */ -+ case 0x1B: /* DVD+R */ -+ case 0x2B: /* DVD+R Double Layer */ -+ case 0x41: /* BD-R SRM */ -+ -+ /* READ TRACK INFORMATION */ -+ scsi_command_init (cmd, 0, 0x52); -+ scsi_command_init (cmd, 1, 1); -+ scsi_command_init (cmd, 4, next_track >> 8); -+ scsi_command_init (cmd, 5, next_track & 0xFF); -+ scsi_command_init (cmd, 8, sizeof (buf)); -+ scsi_command_init (cmd, 9, 0); -+ if (scsi_command_transport (cmd, READ, buf, sizeof (buf))) { -+ /* READ TRACK INFORMATION failed */ -+ if (next_track > 0) { -+ goto done; -+ } else { -+ next_track = 1; -+ goto retry; -+ } -+ } -+ -+ blocks = buf [24] << 24; -+ blocks |= buf [25] << 16; -+ blocks |= buf [26] << 8; -+ blocks |= buf [27]; -+ -+ retval = 0; -+ break; -+ case 0x43: /* DB-RE */ -+ /* Pull the formatted capacity */ -+ blocks = formats [4 + 0] << 24; -+ blocks |= formats [4 + 1] << 16; -+ blocks |= formats [4 + 2] << 8; -+ blocks |= formats [4 + 3]; -+ break; -+ default: -+ blocks = 0; -+ break; -+ } -+ -+ done: -+ scsi_command_free (cmd); -+ -+ if (size) { -+ *size = blocks * 2048; -+ } -+ -+ return retval; -+} -+ -+int -+brasero_cdrom_get_disc_capacity_for_type (BRASEROCDROM *cdrom, int type, guint64 *size) -+{ -+ int retval; -+ -+ g_return_val_if_fail (cdrom != NULL, -1); -+ -+ retval = -1; -+ -+ switch (type) { -+ case 0x8: -+ retval = get_disc_capacity_cd (cdrom, size); -+ break; -+ case 0x9: -+ case 0xa: -+ retval = get_disc_capacity_cdr (cdrom, size); -+ break; -+ case 0x10: -+ retval = get_disc_capacity_cd (cdrom, size); -+ break; -+ case 0x11: -+ case 0x13: -+ case 0x14: -+ case 0x1B: -+ case 0x2B: -+ case 0x1A: -+ case 0x12: -+ case 0x41: -+ case 0x43: -+ retval = get_disc_capacity_dvdr_from_type (cdrom, type, size); -+ break; -+ default: -+ retval = -1; -+ } -+ -+ return retval; -+} -+ -+int -+brasero_cdrom_get_disc_type (BRASEROCDROM *cdrom) -+{ -+ ScsiCommand *cmd; -+ int retval = -1; -+ unsigned char header[8]; -+ -+ g_return_val_if_fail (cdrom != NULL, -1); -+ -+ cmd = scsi_command_new_from_cdrom (cdrom); -+ -+ scsi_command_init (cmd, 0, 0x46); -+ scsi_command_init (cmd, 1, 1); -+ scsi_command_init (cmd, 8, 8); -+ scsi_command_init (cmd, 9, 0); -+ if (scsi_command_transport (cmd, READ, header, 8)) { -+ /* GET CONFIGURATION failed */ -+ scsi_command_free (cmd); -+ return -1; -+ } -+ -+ retval = (header[6]<<8)|(header[7]); -+ -+ -+ scsi_command_free (cmd); -+ return retval; -+} -+ -+int -+brasero_cdrom_get_configuration_feature (BRASEROCDROM *cdrom, -+ int feature, -+ unsigned char **buf) -+{ -+ ScsiCommand *cmd; -+ int retval = 0; -+ int len; -+ unsigned char header[8]; -+ -+ g_return_val_if_fail (cdrom != NULL, -1); -+ g_return_val_if_fail (buf != NULL, -1); -+ -+ cmd = scsi_command_new_from_cdrom (cdrom); -+ -+ scsi_command_init (cmd, 0, 0x46); -+ scsi_command_init (cmd, 1, 2); -+ scsi_command_init (cmd, 2, feature >> 8); -+ scsi_command_init (cmd, 3, feature); -+ scsi_command_init (cmd, 8, 8); -+ scsi_command_init (cmd, 9, 0); -+ if (scsi_command_transport (cmd, READ, header, 8)) { -+ scsi_command_free (cmd); -+ return -1; -+ } -+ -+ len = 4 + (header[0] << 24 | header[1] << 16 | header[2] << 8 | header[3]); -+ if (len > 264) { -+ scsi_command_free (cmd); -+ return -1; -+ } -+ -+ *buf = g_new (unsigned char, len); -+ -+ scsi_command_init (cmd, 0, 0x46); -+ scsi_command_init (cmd, 1, 2); -+ scsi_command_init (cmd, 2, feature >> 8); -+ scsi_command_init (cmd, 3, feature); -+ scsi_command_init (cmd, 7, len >> 8); -+ scsi_command_init (cmd, 8, len); -+ scsi_command_init (cmd, 9, 0); -+ if (scsi_command_transport (cmd, READ, *buf, len)) { -+ g_free (*buf); -+ *buf = NULL; -+ retval = -1; -+ } -+ -+ scsi_command_free (cmd); -+ -+ return retval; -+} -+ -+int -+brasero_cdrom_read_disc_information_std (BRASEROCDROM *cdrom, -+ unsigned char *buf) -+{ -+ ScsiCommand *cmd; -+ int retval = 0; -+ -+ g_return_val_if_fail (cdrom != NULL, -1); -+ g_return_val_if_fail (buf != NULL, -1); -+ -+ cmd = scsi_command_new_from_cdrom (cdrom); -+ -+ /* see section 5.19 of MMC-3 from http://www.t10.org/drafts.htm#mmc3 */ -+ scsi_command_init (cmd, 0, 0x51); /* READ_DISC_INFORMATION */ -+ scsi_command_init (cmd, 8, 32); -+ scsi_command_init (cmd, 9, 0); -+ if (scsi_command_transport (cmd, READ, buf, 32)) { -+ retval = -1; -+ } -+ -+ scsi_command_free (cmd); -+ return retval; -+} -+ -+int -+brasero_cdrom_read_track_info (BRASEROCDROM *cdrom, -+ int track_num, -+ unsigned char *buf, -+ int size) -+{ -+ ScsiCommand *cmd; -+ int retval = 0; -+ -+ g_return_val_if_fail (cdrom != NULL, -1); -+ g_return_val_if_fail (buf != NULL, -1); -+ -+ cmd = scsi_command_new_from_cdrom (cdrom); -+ -+ scsi_command_init (cmd, 0, 0x52); -+ scsi_command_init (cmd, 1, 1); -+ scsi_command_init (cmd, 4, track_num >> 8); -+ scsi_command_init (cmd, 5, track_num & 0xFF); -+ scsi_command_init (cmd, 8, size); -+ scsi_command_init (cmd, 9, 0); -+ if (scsi_command_transport (cmd, READ, buf, size)) { -+ retval = -1; -+ } -+ -+ scsi_command_free (cmd); -+ return retval; -+} -+ -+int -+brasero_cdrom_read_toc_formatted (BRASEROCDROM *cdrom, -+ int track_num, -+ unsigned char **buf) -+{ -+ ScsiCommand *cmd; -+ int retval = 0; -+ int len; -+ unsigned char header[4]; -+ -+ g_return_val_if_fail (cdrom != NULL, -1); -+ g_return_val_if_fail (buf != NULL, -1); -+ -+ cmd = scsi_command_new_from_cdrom (cdrom); -+ -+ scsi_command_init (cmd, 0, 0x43); -+ scsi_command_init (cmd, 2, 0); -+ scsi_command_init (cmd, 6, track_num); -+ scsi_command_init (cmd, 8, 4); -+ scsi_command_init (cmd, 9, 0); -+ if (scsi_command_transport (cmd, READ, header, 4)) { -+ scsi_command_free (cmd); -+ *buf = NULL; -+ return -1; -+ } -+ -+ len = (header[0] << 8 | header[1]) + 2; -+ -+ *buf = g_malloc0 (len); -+ -+ scsi_command_init (cmd, 8, len); -+ scsi_command_init (cmd, 9, 0); -+ if (scsi_command_transport (cmd, READ, *buf, len)) { -+ g_free (*buf); -+ *buf = NULL; -+ retval = -1; -+ } -+ -+ scsi_command_free (cmd); -+ return retval; -+} -+ -+int -+brasero_cdrom_read_toc_raw (BRASEROCDROM *cdrom, -+ int track_num, -+ unsigned char **buf) -+{ -+ ScsiCommand *cmd; -+ int retval = 0; -+ int len; -+ unsigned char header[4]; -+ -+ g_return_val_if_fail (cdrom != NULL, -1); -+ g_return_val_if_fail (buf != NULL, -1); -+ -+ cmd = scsi_command_new_from_cdrom (cdrom); -+ -+ scsi_command_init (cmd, 0, 0x43); -+ scsi_command_init (cmd, 2, 2); -+ scsi_command_init (cmd, 6, track_num); -+ scsi_command_init (cmd, 8, 4); -+ scsi_command_init (cmd, 9, 0); -+ if (scsi_command_transport (cmd, READ, header, 4)) { -+ scsi_command_free (cmd); -+ *buf = NULL; -+ return -1; -+ } -+ -+ len = (header[0] << 8 | header[1]) + 2; -+ -+ *buf = g_malloc0 (len); -+ -+ scsi_command_init (cmd, 8, len); -+ scsi_command_init (cmd, 9, 0); -+ if (scsi_command_transport (cmd, READ, *buf, len)) { -+ g_free (*buf); -+ *buf = NULL; -+ retval = -1; -+ } -+ -+ scsi_command_free (cmd); -+ return retval; -+} -+ -+int -+brasero_cdrom_read_atip (BRASEROCDROM *cdrom, -+ unsigned char **buf) -+{ -+ ScsiCommand *cmd; -+ int retval = 0; -+ int len; -+ unsigned char header[4]; -+ -+ g_return_val_if_fail (cdrom != NULL, -1); -+ g_return_val_if_fail (buf != NULL, -1); -+ -+ cmd = scsi_command_new_from_cdrom (cdrom); -+ -+ scsi_command_init (cmd, 0, 0x43); -+ scsi_command_init (cmd, 2, 4); -+ scsi_command_init (cmd, 6, 0); -+ scsi_command_init (cmd, 8, 4); -+ scsi_command_init (cmd, 9, 0); -+ if (scsi_command_transport (cmd, READ, header, 4)) { -+ scsi_command_free (cmd); -+ *buf = NULL; -+ return -1; -+ } -+ -+ len = (header[0] << 8 | header[1]) + 2; -+ -+ *buf = g_malloc0 (len); -+ -+ scsi_command_init (cmd, 8, len); -+ scsi_command_init (cmd, 9, 0); -+ if (scsi_command_transport (cmd, READ, *buf, len)) { -+ g_free (*buf); -+ *buf = NULL; -+ retval = -1; -+ } -+ -+ scsi_command_free (cmd); -+ return retval; -+} -+ -+int -+brasero_cdrom_read_format_capacities (BRASEROCDROM *cdrom, -+ unsigned char **buf) -+{ -+ ScsiCommand *cmd; -+ int retval = 0; -+ int len; -+ unsigned char header[12]; -+ -+ g_return_val_if_fail (cdrom != NULL, -1); -+ g_return_val_if_fail (buf != NULL, -1); -+ -+ cmd = scsi_command_new_from_cdrom (cdrom); -+ -+ scsi_command_init (cmd, 0, 0x23); -+ scsi_command_init (cmd, 8, 12); -+ scsi_command_init (cmd, 9, 0); -+ if (scsi_command_transport (cmd, READ, header, 12)) { -+ /* READ FORMAT CAPACITIES failed */ -+ return -1; -+ } -+ -+ len = header [3]; -+ if (len & 7 || len < 16) { -+ /* Length isn't sane */ -+ return -1; -+ } -+ -+ *buf = g_new (unsigned char, len + 4); -+ -+ scsi_command_init (cmd, 0, 0x23); -+ scsi_command_init (cmd, 7, (4 + len) >> 8); -+ scsi_command_init (cmd, 8, (4 + len) & 0xFF); -+ scsi_command_init (cmd, 9, 0); -+ if (scsi_command_transport (cmd, READ, *buf, 4 + len)) { -+ /* READ FORMAT CAPACITIES failed */ -+ g_free (*buf); -+ *buf = NULL; -+ retval = -1; -+ } -+ -+ return retval; -+} -+ -+int -+brasero_cdrom_get_performance_wrt_spd_desc (BRASEROCDROM *cdrom, -+ unsigned char **buf) -+{ -+ ScsiCommand *cmd; -+ int retval = 0; -+ int len; -+ int desc_num; -+ unsigned char header[8]; -+ -+ g_return_val_if_fail (cdrom != NULL, -1); -+ g_return_val_if_fail (buf != NULL, -1); -+ -+ cmd = scsi_command_new_from_cdrom (cdrom); -+ -+ scsi_command_init (cmd, 0, 0xac); -+ scsi_command_init (cmd, 8, 0); -+ scsi_command_init (cmd, 9, 0); -+ scsi_command_init (cmd, 10, 3); -+ scsi_command_init (cmd, 11, 0); -+ if (scsi_command_transport (cmd, READ, header, 8)) { -+ scsi_command_free (cmd); -+ *buf = NULL; -+ return -1; -+ } -+ -+ len = (header[0] << 24 | header[1] << 16 | header[2] << 8 | header[3]) + 4; -+ if (len > 2048) { -+ len = 2048; -+ } -+ -+ desc_num = (len - 8) / 12; -+ -+ *buf = g_malloc0 (len); -+ -+ scsi_command_init (cmd, 8, desc_num >> 8); -+ scsi_command_init (cmd, 9, desc_num); -+ scsi_command_init (cmd, 11, 0); -+ if (scsi_command_transport (cmd, READ, *buf, len)) { -+ g_free (*buf); -+ *buf = NULL; -+ retval = -1; -+ } -+ -+ scsi_command_free (cmd); -+ return retval; -+} -+ -+int -+brasero_cdrom_disc_is_appendable (BRASEROCDROM *cdrom) -+{ -+ ScsiCommand *cmd; -+ int retval = -1; -+ unsigned char header[32]; -+ -+ g_return_val_if_fail (cdrom != NULL, -1); -+ -+ cmd = scsi_command_new_from_cdrom (cdrom); -+ -+ /* see section 5.19 of MMC-3 from http://www.t10.org/drafts.htm#mmc3 */ -+ scsi_command_init (cmd, 0, 0x51); /* READ_DISC_INFORMATION */ -+ scsi_command_init (cmd, 8, 32); -+ scsi_command_init (cmd, 9, 0); -+ if (scsi_command_transport (cmd, READ, header, 32)) { -+ /* READ_DISC_INFORMATION failed */ -+ scsi_command_free (cmd); -+ return 0; -+ } -+ -+ retval = ((header[2]&0x03) == 0x01); -+ -+ scsi_command_free (cmd); -+ return retval; -+} -+ -+int -+brasero_cdrom_disc_is_rewritable (BRASEROCDROM *cdrom) -+{ -+ ScsiCommand *cmd; -+ int retval = -1; -+ unsigned char header[32]; -+ -+ g_return_val_if_fail (cdrom != NULL, -1); -+ -+ cmd = scsi_command_new_from_cdrom (cdrom); -+ -+ /* see section 5.19 of MMC-3 from http://www.t10.org/drafts.htm#mmc3 */ -+ scsi_command_init (cmd, 0, 0x51); /* READ_DISC_INFORMATION */ -+ scsi_command_init (cmd, 8, 32); -+ scsi_command_init (cmd, 9, 0); -+ if (scsi_command_transport (cmd, READ, header, 32)) { -+ /* READ_DISC_INFORMATION failed */ -+ scsi_command_free (cmd); -+ return 0; -+ } -+ -+ retval = ((header[2]&0x10) != 0); -+ -+ scsi_command_free (cmd); -+ return retval; -+} diff --git a/sysutils/brasero/files/patch-src_plugins_cdrtools_burn-cdrecord.c b/sysutils/brasero/files/patch-src_plugins_cdrtools_burn-cdrecord.c deleted file mode 100644 index 583807240735..000000000000 --- a/sysutils/brasero/files/patch-src_plugins_cdrtools_burn-cdrecord.c +++ /dev/null @@ -1,11 +0,0 @@ ---- src/plugins/cdrtools/burn-cdrecord.c.orig 2008-01-02 14:59:18.000000000 -0500 -+++ src/plugins/cdrtools/burn-cdrecord.c 2008-01-02 14:59:27.000000000 -0500 -@@ -899,7 +899,7 @@ brasero_cdrecord_set_argv (BraseroProces - g_ptr_array_add (argv, g_strdup ("cdrecord")); - g_ptr_array_add (argv, g_strdup ("-v")); - -- brasero_job_get_device (BRASERO_JOB (cdrecord), &device); -+ brasero_job_get_cdrecord_device (BRASERO_JOB (cdrecord), &device); - dev_str = g_strdup_printf ("dev=%s", device); - g_ptr_array_add (argv, dev_str); - g_free (device); diff --git a/sysutils/brasero/pkg-plist b/sysutils/brasero/pkg-plist index acbe2314bd1f..5def420562e4 100644 --- a/sysutils/brasero/pkg-plist +++ b/sysutils/brasero/pkg-plist @@ -1,8 +1,16 @@ bin/brasero +lib/brasero/plugins/libbrasero-burn-uri.la +lib/brasero/plugins/libbrasero-burn-uri.so lib/brasero/plugins/libbrasero-cdrdao.la lib/brasero/plugins/libbrasero-cdrdao.so lib/brasero/plugins/libbrasero-cdrecord.la lib/brasero/plugins/libbrasero-cdrecord.so +lib/brasero/plugins/libbrasero-checksum-file.la +lib/brasero/plugins/libbrasero-checksum-file.so +lib/brasero/plugins/libbrasero-checksum.la +lib/brasero/plugins/libbrasero-checksum.so +lib/brasero/plugins/libbrasero-dvdauthor.la +lib/brasero/plugins/libbrasero-dvdauthor.so lib/brasero/plugins/libbrasero-dvdcss.la lib/brasero/plugins/libbrasero-dvdcss.so lib/brasero/plugins/libbrasero-dvdrwformat.la @@ -13,12 +21,10 @@ lib/brasero/plugins/libbrasero-growisofs.la lib/brasero/plugins/libbrasero-growisofs.so lib/brasero/plugins/libbrasero-local-track.la lib/brasero/plugins/libbrasero-local-track.so -lib/brasero/plugins/libbrasero-md5sum-file.la -lib/brasero/plugins/libbrasero-md5sum-file.so -lib/brasero/plugins/libbrasero-md5sum.la -lib/brasero/plugins/libbrasero-md5sum.so lib/brasero/plugins/libbrasero-mkisofs.la lib/brasero/plugins/libbrasero-mkisofs.so +lib/brasero/plugins/libbrasero-normalize.la +lib/brasero/plugins/libbrasero-normalize.so lib/brasero/plugins/libbrasero-readcd.la lib/brasero/plugins/libbrasero-readcd.so lib/brasero/plugins/libbrasero-readom.la @@ -27,9 +33,17 @@ lib/brasero/plugins/libbrasero-toc2cue.la lib/brasero/plugins/libbrasero-toc2cue.so lib/brasero/plugins/libbrasero-transcode.la lib/brasero/plugins/libbrasero-transcode.so +lib/brasero/plugins/libbrasero-vcdimager.la +lib/brasero/plugins/libbrasero-vcdimager.so +lib/brasero/plugins/libbrasero-vob.la +lib/brasero/plugins/libbrasero-vob.so lib/brasero/plugins/libbrasero-wodim.la lib/brasero/plugins/libbrasero-wodim.so share/applications/brasero.desktop +share/applications/brasero-copy-medium.desktop +share/applications/brasero-open-image.desktop +share/applications/brasero-open-playlist.desktop +share/applications/brasero-open-project.desktop %%DATADIR%%/icons/hicolor/16x16/actions/insert-pause.png %%DATADIR%%/icons/hicolor/16x16/actions/iso-image-burn.png %%DATADIR%%/icons/hicolor/16x16/actions/iso-image-new.png @@ -38,6 +52,7 @@ share/applications/brasero.desktop %%DATADIR%%/icons/hicolor/16x16/actions/media-optical-burn.png %%DATADIR%%/icons/hicolor/16x16/actions/media-optical-copy.png %%DATADIR%%/icons/hicolor/16x16/actions/media-optical-data-new.png +%%DATADIR%%/icons/hicolor/16x16/actions/media-optical-video-new.png %%DATADIR%%/icons/hicolor/16x16/actions/transform-crop-and-resize.png %%DATADIR%%/icons/hicolor/16x16/status/brasero-disc-00.png %%DATADIR%%/icons/hicolor/16x16/status/brasero-disc-05.png @@ -68,6 +83,7 @@ share/applications/brasero.desktop %%DATADIR%%/icons/hicolor/22x22/actions/media-optical-burn.png %%DATADIR%%/icons/hicolor/22x22/actions/media-optical-copy.png %%DATADIR%%/icons/hicolor/22x22/actions/media-optical-data-new.png +%%DATADIR%%/icons/hicolor/22x22/actions/media-optical-video-new.png %%DATADIR%%/icons/hicolor/22x22/actions/transform-crop-and-resize.png %%DATADIR%%/icons/hicolor/22x22/status/brasero-disc-00.png %%DATADIR%%/icons/hicolor/22x22/status/brasero-disc-05.png @@ -98,6 +114,7 @@ share/applications/brasero.desktop %%DATADIR%%/icons/hicolor/24x24/actions/media-optical-burn.png %%DATADIR%%/icons/hicolor/24x24/actions/media-optical-copy.png %%DATADIR%%/icons/hicolor/24x24/actions/media-optical-data-new.png +%%DATADIR%%/icons/hicolor/24x24/actions/media-optical-video-new.png %%DATADIR%%/icons/hicolor/24x24/actions/transform-crop-and-resize.png %%DATADIR%%/icons/hicolor/24x24/status/brasero-disc-00.png %%DATADIR%%/icons/hicolor/24x24/status/brasero-disc-05.png @@ -128,6 +145,7 @@ share/applications/brasero.desktop %%DATADIR%%/icons/hicolor/32x32/actions/media-optical-burn.png %%DATADIR%%/icons/hicolor/32x32/actions/media-optical-copy.png %%DATADIR%%/icons/hicolor/32x32/actions/media-optical-data-new.png +%%DATADIR%%/icons/hicolor/32x32/actions/media-optical-video-new.png %%DATADIR%%/icons/hicolor/32x32/status/brasero-disc-00.png %%DATADIR%%/icons/hicolor/32x32/status/brasero-disc-05.png %%DATADIR%%/icons/hicolor/32x32/status/brasero-disc-10.png @@ -149,6 +167,7 @@ share/applications/brasero.desktop %%DATADIR%%/icons/hicolor/32x32/status/brasero-disc-85.png %%DATADIR%%/icons/hicolor/32x32/status/brasero-disc-90.png %%DATADIR%%/icons/hicolor/32x32/status/brasero-disc-95.png +%%DATADIR%%/icons/hicolor/48x48/actions/media-optical-video-new.png %%DATADIR%%/icons/hicolor/scalable/actions/insert-pause.svg %%DATADIR%%/icons/hicolor/scalable/actions/iso-image-burn.svg %%DATADIR%%/icons/hicolor/scalable/actions/iso-image-new.svg @@ -180,6 +199,25 @@ share/applications/brasero.desktop %%DATADIR%%/icons/hicolor/scalable/status/brasero-disc-90.svg %%DATADIR%%/icons/hicolor/scalable/status/brasero-disc-95.svg %%DATADIR%%/logo.png +share/gnome/help/brasero/C/brasero.xml +share/gnome/help/brasero/C/figures/brasero_main.png +share/gnome/help/brasero/C/legal.xml +share/gnome/help/brasero/de/brasero.xml +share/gnome/help/brasero/de/figures/brasero_main.png +share/gnome/help/brasero/el/brasero.xml +share/gnome/help/brasero/el/figures/brasero_main.png +share/gnome/help/brasero/es/brasero.xml +share/gnome/help/brasero/es/figures/brasero_main.png +share/gnome/help/brasero/fr/brasero.xml +share/gnome/help/brasero/fr/figures/brasero_main.png +share/gnome/help/brasero/it/brasero.xml +share/gnome/help/brasero/it/figures/brasero_main.png +share/gnome/help/brasero/pl/brasero.xml +share/gnome/help/brasero/pl/figures/brasero_main.png +share/gnome/help/brasero/ru/brasero.xml +share/gnome/help/brasero/ru/figures/brasero_main.png +share/gnome/help/brasero/sv/brasero.xml +share/gnome/help/brasero/sv/figures/brasero_main.png share/icons/hicolor/16x16/apps/brasero.png share/icons/hicolor/22x22/apps/brasero.png share/icons/hicolor/24x24/apps/brasero.png @@ -189,10 +227,13 @@ share/icons/hicolor/scalable/apps/brasero.svg share/locale/ar/LC_MESSAGES/brasero.mo share/locale/ca/LC_MESSAGES/brasero.mo share/locale/cs/LC_MESSAGES/brasero.mo +share/locale/da/LC_MESSAGES/brasero.mo share/locale/de/LC_MESSAGES/brasero.mo share/locale/dz/LC_MESSAGES/brasero.mo +share/locale/el/LC_MESSAGES/brasero.mo share/locale/en_GB/LC_MESSAGES/brasero.mo share/locale/es/LC_MESSAGES/brasero.mo +share/locale/et/LC_MESSAGES/brasero.mo share/locale/fi/LC_MESSAGES/brasero.mo share/locale/fr/LC_MESSAGES/brasero.mo share/locale/gl/LC_MESSAGES/brasero.mo @@ -203,17 +244,52 @@ share/locale/ja/LC_MESSAGES/brasero.mo share/locale/lt/LC_MESSAGES/brasero.mo share/locale/mk/LC_MESSAGES/brasero.mo share/locale/nb/LC_MESSAGES/brasero.mo +share/locale/nl/LC_MESSAGES/brasero.mo share/locale/oc/LC_MESSAGES/brasero.mo share/locale/pa/LC_MESSAGES/brasero.mo share/locale/pl/LC_MESSAGES/brasero.mo share/locale/pt/LC_MESSAGES/brasero.mo share/locale/pt_BR/LC_MESSAGES/brasero.mo +share/locale/ro/LC_MESSAGES/brasero.mo share/locale/ru/LC_MESSAGES/brasero.mo share/locale/sl/LC_MESSAGES/brasero.mo share/locale/sr/LC_MESSAGES/brasero.mo -share/locale/sr@Latn/LC_MESSAGES/brasero.mo +share/locale/sr@latin/LC_MESSAGES/brasero.mo share/locale/sv/LC_MESSAGES/brasero.mo +share/locale/th/LC_MESSAGES/brasero.mo +share/locale/zh_CN/LC_MESSAGES/brasero.mo +share/locale/zh_HK/LC_MESSAGES/brasero.mo +share/locale/zh_TW/LC_MESSAGES/brasero.mo share/mime/packages/brasero.xml +share/omf/brasero/brasero-C.omf +share/omf/brasero/brasero-de.omf +share/omf/brasero/brasero-el.omf +share/omf/brasero/brasero-es.omf +share/omf/brasero/brasero-fr.omf +share/omf/brasero/brasero-it.omf +share/omf/brasero/brasero-pl.omf +share/omf/brasero/brasero-ru.omf +share/omf/brasero/brasero-sv.omf +@dirrm share/omf/brasero +@dirrm share/gnome/help/brasero/sv/figures +@dirrm share/gnome/help/brasero/sv +@dirrm share/gnome/help/brasero/ru/figures +@dirrm share/gnome/help/brasero/ru +@dirrm share/gnome/help/brasero/pl/figures +@dirrm share/gnome/help/brasero/pl +@dirrm share/gnome/help/brasero/it/figures +@dirrm share/gnome/help/brasero/it +@dirrm share/gnome/help/brasero/fr/figures +@dirrm share/gnome/help/brasero/fr +@dirrm share/gnome/help/brasero/es/figures +@dirrm share/gnome/help/brasero/es +@dirrm share/gnome/help/brasero/el/figures +@dirrm share/gnome/help/brasero/el +@dirrm share/gnome/help/brasero/de/figures +@dirrm share/gnome/help/brasero/de +@dirrm share/gnome/help/brasero/C/figures +@dirrm share/gnome/help/brasero/C +@dirrm share/gnome/help/brasero @dirrm %%DATADIR%%/icons/hicolor/16x16/status @dirrm %%DATADIR%%/icons/hicolor/16x16/actions @dirrm %%DATADIR%%/icons/hicolor/16x16 @@ -226,6 +302,8 @@ share/mime/packages/brasero.xml @dirrm %%DATADIR%%/icons/hicolor/32x32/status @dirrm %%DATADIR%%/icons/hicolor/32x32/actions @dirrm %%DATADIR%%/icons/hicolor/32x32 +@dirrm %%DATADIR%%/icons/hicolor/48x48/actions +@dirrm %%DATADIR%%/icons/hicolor/48x48 @dirrm %%DATADIR%%/icons/hicolor/scalable/status @dirrm %%DATADIR%%/icons/hicolor/scalable/actions @dirrm %%DATADIR%%/icons/hicolor/scalable @@ -239,6 +317,12 @@ share/mime/packages/brasero.xml @unexec %%LOCALBASE%%/bin/update-mime-database %D/share/mime @exec %%LOCALBASE%%/bin/update-desktop-database > /dev/null || /usr/bin/true @unexec %%LOCALBASE%%/bin/update-desktop-database > /dev/null || /usr/bin/true +@dirrmtry share/locale/zh_HK/LC_MESSAGES +@dirrmtry share/locale/zh_HK +@dirrmtry share/locale/ro/LC_MESSAGES +@dirrmtry share/locale/ro +@dirrmtry share/locale/sr@latin/LC_MESSAGES +@dirrmtry share/locale/sr@latin @dirrmtry share/locale/oc/LC_MESSAGES @dirrmtry share/locale/oc @dirrmtry share/locale/dz/LC_MESSAGES diff --git a/sysutils/consolekit/Makefile b/sysutils/consolekit/Makefile index 99380b6056c2..b8f72ae5353d 100644 --- a/sysutils/consolekit/Makefile +++ b/sysutils/consolekit/Makefile @@ -3,10 +3,10 @@ # Whom: Florent Thoumie <flz@FreeBSD.org> # # $FreeBSD$ -# $MCom: ports/sysutils/consolekit/Makefile,v 1.12 2008/02/27 15:13:25 ahze Exp $ +# $MCom: ports/sysutils/consolekit/Makefile,v 1.19 2008/12/24 16:12:03 marcus Exp $ PORTNAME= consolekit -PORTVERSION= 0.2.10 +PORTVERSION= 0.3.0 PORTREVISION= 3 CATEGORIES= sysutils gnome MASTER_SITES= http://people.freedesktop.org/~mccann/dist/ @@ -19,8 +19,9 @@ LIB_DEPENDS= dbus-glib-1.2:${PORTSDIR}/devel/dbus-glib \ polkit.2:${PORTSDIR}/sysutils/policykit WRKSRC= ${WRKDIR}/ConsoleKit-${PORTVERSION} +USE_BZIP2= yes USE_XORG= x11 -USE_GNOME= gnomehack gnometarget +USE_GNOME= gnomehack USE_GMAKE= yes GNU_CONFIGURE= yes USE_LDCONFIG= yes diff --git a/sysutils/consolekit/distinfo b/sysutils/consolekit/distinfo index be86390034c1..ef1243c68ef1 100644 --- a/sysutils/consolekit/distinfo +++ b/sysutils/consolekit/distinfo @@ -1,3 +1,3 @@ -MD5 (ConsoleKit-0.2.10.tar.gz) = b85c2333a8fe31c0d3f29caa14716634 -SHA256 (ConsoleKit-0.2.10.tar.gz) = 02b9510f65256db33a5e079736bb7234cd5599bf02dc77399d81d50cf5183bcb -SIZE (ConsoleKit-0.2.10.tar.gz) = 521473 +MD5 (ConsoleKit-0.3.0.tar.bz2) = 43b02a52212330b54cfb34c4044d9ce0 +SHA256 (ConsoleKit-0.3.0.tar.bz2) = cbcfbb3df2dc76855c99c1cdff04a257ec5270fa62e1d21b0d057b08d88c0fd4 +SIZE (ConsoleKit-0.3.0.tar.bz2) = 393694 diff --git a/sysutils/consolekit/files/patch-data_ConsoleKit.conf b/sysutils/consolekit/files/patch-data_ConsoleKit.conf new file mode 100644 index 000000000000..155e92ec6edd --- /dev/null +++ b/sysutils/consolekit/files/patch-data_ConsoleKit.conf @@ -0,0 +1,11 @@ +--- data/ConsoleKit.conf.orig 2008-12-24 11:06:53.000000000 -0500 ++++ data/ConsoleKit.conf 2008-12-24 11:07:17.000000000 -0500 +@@ -91,6 +91,8 @@ + send_member="GetIdleHint"/> + <allow send_interface="org.freedesktop.ConsoleKit.Session" + send_member="GetIdleSinceHint"/> ++ <allow send_interface="org.freedesktop.ConsoleKit.Session" ++ send_member="SetIdleHint"/> + </policy> + + </busconfig> diff --git a/sysutils/consolekit/pkg-plist b/sysutils/consolekit/pkg-plist index ccd01266314e..01d42a80cbdc 100644 --- a/sysutils/consolekit/pkg-plist +++ b/sysutils/consolekit/pkg-plist @@ -17,7 +17,10 @@ libexec/ck-collect-session-info libexec/ck-get-x11-display-device libexec/ck-get-x11-server-pid sbin/console-kit-daemon -share/PolicyKit/policy/ConsoleKit.policy +share/PolicyKit/policy/org.freedesktop.consolekit.policy +share/dbus-1/interfaces/org.freedesktop.ConsoleKit.Manager.xml +share/dbus-1/interfaces/org.freedesktop.ConsoleKit.Seat.xml +share/dbus-1/interfaces/org.freedesktop.ConsoleKit.Session.xml share/dbus-1/system-services/org.freedesktop.ConsoleKit.service @exec mkdir -p %D/etc/ConsoleKit/run-session.d @exec mkdir -p %D/lib/ConsoleKit/run-session.d diff --git a/sysutils/gconf-editor/Makefile b/sysutils/gconf-editor/Makefile index 74922e2abe50..b70b81a1d423 100644 --- a/sysutils/gconf-editor/Makefile +++ b/sysutils/gconf-editor/Makefile @@ -3,12 +3,11 @@ # Whom: Joe Marcus Clarke <marcus@FreeBSD.org> # # $FreeBSD$ -# $MCom: ports/sysutils/gconf-editor/Makefile,v 1.68 2008/03/11 03:54:37 mezz Exp $ +# $MCom: ports/sysutils/gconf-editor/Makefile,v 1.73 2008/10/20 03:33:50 mezz Exp $ # PORTNAME= gconf-editor -PORTVERSION= 2.22.0 -PORTREVISION= 2 +PORTVERSION= 2.24.1 PORTEPOCH= 1 CATEGORIES= sysutils gnome MASTER_SITES= GNOME diff --git a/sysutils/gconf-editor/distinfo b/sysutils/gconf-editor/distinfo index 45fda8d93de9..be688026ef07 100644 --- a/sysutils/gconf-editor/distinfo +++ b/sysutils/gconf-editor/distinfo @@ -1,3 +1,3 @@ -MD5 (gnome2/gconf-editor-2.22.0.tar.bz2) = 7ca99aec214dd855b5de7dacc8937055 -SHA256 (gnome2/gconf-editor-2.22.0.tar.bz2) = e701134a1f5293070ca7d8d6311468f61e3a9765ebc520fcca6a0a38b214b7dc -SIZE (gnome2/gconf-editor-2.22.0.tar.bz2) = 873868 +MD5 (gnome2/gconf-editor-2.24.1.tar.bz2) = 2fe93cb2ac8ea0d34860cc6d059076d8 +SHA256 (gnome2/gconf-editor-2.24.1.tar.bz2) = 7d63d9f4c23da91b2b06fe264ff4d1c40c20563220525837de7bb2dc442821fb +SIZE (gnome2/gconf-editor-2.24.1.tar.bz2) = 1142041 diff --git a/sysutils/gconf-editor/pkg-plist b/sysutils/gconf-editor/pkg-plist index 817b8e2afc39..0847ce9d5ddd 100644 --- a/sysutils/gconf-editor/pkg-plist +++ b/sysutils/gconf-editor/pkg-plist @@ -1,8 +1,18 @@ bin/gconf-editor share/applications/gconf-editor.desktop +%%DATADIR%%/icons/hicolor/16x16/status/type-boolean.png +%%DATADIR%%/icons/hicolor/16x16/status/type-float.png +%%DATADIR%%/icons/hicolor/16x16/status/type-integer.png +%%DATADIR%%/icons/hicolor/16x16/status/type-list.png +%%DATADIR%%/icons/hicolor/16x16/status/type-pair.png +%%DATADIR%%/icons/hicolor/16x16/status/type-schema.png +%%DATADIR%%/icons/hicolor/16x16/status/type-string.png +%%DATADIR%%/icons/hicolor/16x16/status/type-undefined.png share/gnome/help/gconf-editor/C/figures/gconf_editor_anno_window.png share/gnome/help/gconf-editor/C/gconf-editor.xml share/gnome/help/gconf-editor/C/legal.xml +share/gnome/help/gconf-editor/ca/figures/gconf_editor_anno_window.png +share/gnome/help/gconf-editor/ca/gconf-editor.xml share/gnome/help/gconf-editor/de/figures/gconf_editor_anno_window.png share/gnome/help/gconf-editor/de/gconf-editor.xml share/gnome/help/gconf-editor/es/figures/gconf_editor_anno_window.png @@ -13,8 +23,14 @@ share/gnome/help/gconf-editor/it/figures/gconf_editor_anno_window.png share/gnome/help/gconf-editor/it/gconf-editor.xml share/gnome/help/gconf-editor/oc/figures/gconf_editor_anno_window.png share/gnome/help/gconf-editor/oc/gconf-editor.xml +share/gnome/help/gconf-editor/pt_BR/figures/gconf_editor_anno_window.png +share/gnome/help/gconf-editor/pt_BR/gconf-editor.xml +share/gnome/help/gconf-editor/ru/figures/gconf_editor_anno_window.png +share/gnome/help/gconf-editor/ru/gconf-editor.xml share/gnome/help/gconf-editor/sv/figures/gconf_editor_anno_window.png share/gnome/help/gconf-editor/sv/gconf-editor.xml +share/gnome/help/gconf-editor/th/figures/gconf_editor_anno_window.png +share/gnome/help/gconf-editor/th/gconf-editor.xml share/gnome/help/gconf-editor/uk/figures/gconf_editor_anno_window.png share/gnome/help/gconf-editor/uk/gconf-editor.xml share/icons/hicolor/48x48/apps/gconf-editor.png @@ -85,7 +101,7 @@ share/locale/sk/LC_MESSAGES/gconf-editor.mo share/locale/sl/LC_MESSAGES/gconf-editor.mo share/locale/sq/LC_MESSAGES/gconf-editor.mo share/locale/sr/LC_MESSAGES/gconf-editor.mo -share/locale/sr@Latn/LC_MESSAGES/gconf-editor.mo +share/locale/sr@latin/LC_MESSAGES/gconf-editor.mo share/locale/sv/LC_MESSAGES/gconf-editor.mo share/locale/ta/LC_MESSAGES/gconf-editor.mo share/locale/te/LC_MESSAGES/gconf-editor.mo @@ -99,27 +115,28 @@ share/locale/zh_CN/LC_MESSAGES/gconf-editor.mo share/locale/zh_HK/LC_MESSAGES/gconf-editor.mo share/locale/zh_TW/LC_MESSAGES/gconf-editor.mo share/omf/gconf-editor/gconf-editor-C.omf +share/omf/gconf-editor/gconf-editor-ca.omf share/omf/gconf-editor/gconf-editor-de.omf share/omf/gconf-editor/gconf-editor-es.omf share/omf/gconf-editor/gconf-editor-fr.omf share/omf/gconf-editor/gconf-editor-it.omf share/omf/gconf-editor/gconf-editor-oc.omf +share/omf/gconf-editor/gconf-editor-pt_BR.omf +share/omf/gconf-editor/gconf-editor-ru.omf share/omf/gconf-editor/gconf-editor-sv.omf +share/omf/gconf-editor/gconf-editor-th.omf share/omf/gconf-editor/gconf-editor-uk.omf -share/pixmaps/gconf-editor/entry-blank.png -share/pixmaps/gconf-editor/entry-bool.png -share/pixmaps/gconf-editor/entry-list.png -share/pixmaps/gconf-editor/entry-number.png -share/pixmaps/gconf-editor/entry-schema.png -share/pixmaps/gconf-editor/entry-string.png -share/pixmaps/gconf-editor/folder-closed.png -share/pixmaps/gconf-editor/folder-open.png -@dirrm share/pixmaps/gconf-editor @dirrm share/omf/gconf-editor @dirrm share/gnome/help/gconf-editor/uk/figures @dirrm share/gnome/help/gconf-editor/uk +@dirrm share/gnome/help/gconf-editor/th/figures +@dirrm share/gnome/help/gconf-editor/th @dirrm share/gnome/help/gconf-editor/sv/figures @dirrm share/gnome/help/gconf-editor/sv +@dirrm share/gnome/help/gconf-editor/ru/figures +@dirrm share/gnome/help/gconf-editor/ru +@dirrm share/gnome/help/gconf-editor/pt_BR/figures +@dirrm share/gnome/help/gconf-editor/pt_BR @dirrm share/gnome/help/gconf-editor/oc/figures @dirrm share/gnome/help/gconf-editor/oc @dirrm share/gnome/help/gconf-editor/it/figures @@ -130,9 +147,16 @@ share/pixmaps/gconf-editor/folder-open.png @dirrm share/gnome/help/gconf-editor/es @dirrm share/gnome/help/gconf-editor/de/figures @dirrm share/gnome/help/gconf-editor/de +@dirrm share/gnome/help/gconf-editor/ca/figures +@dirrm share/gnome/help/gconf-editor/ca @dirrm share/gnome/help/gconf-editor/C/figures @dirrm share/gnome/help/gconf-editor/C @dirrm share/gnome/help/gconf-editor +@dirrm %%DATADIR%%/icons/hicolor/16x16/status +@dirrm %%DATADIR%%/icons/hicolor/16x16 +@dirrm %%DATADIR%%/icons/hicolor +@dirrm %%DATADIR%%/icons +@dirrm %%DATADIR%% @dirrmtry share/applications @dirrmtry share/locale/zh_HK/LC_MESSAGES @dirrmtry share/locale/zh_HK @@ -142,6 +166,8 @@ share/pixmaps/gconf-editor/folder-open.png @dirrmtry share/locale/ug @dirrmtry share/locale/te/LC_MESSAGES @dirrmtry share/locale/te +@dirrmtry share/locale/sr@latin/LC_MESSAGES +@dirrmtry share/locale/sr@latin @dirrmtry share/locale/si/LC_MESSAGES @dirrmtry share/locale/si @dirrmtry share/locale/rw/LC_MESSAGES diff --git a/sysutils/gnome-control-center/Makefile b/sysutils/gnome-control-center/Makefile index 6cfb7d37ef66..5c04d9169623 100644 --- a/sysutils/gnome-control-center/Makefile +++ b/sysutils/gnome-control-center/Makefile @@ -3,12 +3,11 @@ # Whom: Joe Marcus Clarke <marcus@FreeBSD.org> # # $FreeBSD$ -# $MCom: ports/sysutils/gnome-control-center/Makefile,v 1.172 2008/03/10 21:50:24 mezz Exp $ +# $MCom: ports/sysutils/gnome-control-center/Makefile,v 1.185 2008/09/24 21:51:29 mezz Exp $ # PORTNAME= gnome-control-center -PORTVERSION= 2.22.2.1 -PORTREVISION= 1 +PORTVERSION= 2.24.0.1 CATEGORIES= sysutils gnome MASTER_SITES= GNOME DIST_SUBDIR= gnome2 @@ -16,7 +15,7 @@ DIST_SUBDIR= gnome2 MAINTAINER= gnome@FreeBSD.org COMMENT= Control center for GNOME 2 project -LIB_DEPENDS= xklavier.12:${PORTSDIR}/x11/libxklavier +LIB_DEPENDS= canberra-gtk.0:${PORTSDIR}/audio/libcanberra BUILD_DEPENDS= ${LOCALBASE}/libexec/gnome-settings-daemon:${PORTSDIR}/sysutils/gnome-settings-daemon RUN_DEPENDS= gnome-eject:${PORTSDIR}/sysutils/gnome-mount \ ${LOCALBASE}/libexec/gnome-settings-daemon:${PORTSDIR}/sysutils/gnome-settings-daemon @@ -38,8 +37,7 @@ CONFIGURE_ARGS= --enable-gstreamer=0.10 CONFIGURE_ENV= CPPFLAGS="-I${LOCALBASE}/include" \ LDFLAGS="-L${LOCALBASE}/lib" -GCONF_SCHEMAS= control-center.schemas \ - fontilus.schemas themus.schemas +GCONF_SCHEMAS= control-center.schemas .if defined(PACKAGE_BUILDING) .undef WITHOUT_GNOME diff --git a/sysutils/gnome-control-center/distinfo b/sysutils/gnome-control-center/distinfo index 576909a4ab58..b44bbd7bb3d9 100644 --- a/sysutils/gnome-control-center/distinfo +++ b/sysutils/gnome-control-center/distinfo @@ -1,3 +1,3 @@ -MD5 (gnome2/gnome-control-center-2.22.2.1.tar.bz2) = f708092437fff488656c01665cbe6ae9 -SHA256 (gnome2/gnome-control-center-2.22.2.1.tar.bz2) = a13eda3ffc0ec353d1b0414238f70e08155179f24cda2f4afba6d905a601e56a -SIZE (gnome2/gnome-control-center-2.22.2.1.tar.bz2) = 2110331 +MD5 (gnome2/gnome-control-center-2.24.0.1.tar.bz2) = dcaf6e91fddbb1d57d045a4de34ec25c +SHA256 (gnome2/gnome-control-center-2.24.0.1.tar.bz2) = fa5d1ba5cb2f88d3c689c8a2bceb57508777a23cff020dcf2de67ad81b0fe57d +SIZE (gnome2/gnome-control-center-2.24.0.1.tar.bz2) = 2113356 diff --git a/sysutils/gnome-control-center/files/patch-capplets_common_gnome-theme-info.c b/sysutils/gnome-control-center/files/patch-capplets_common_gnome-theme-info.c index ac875d14d9b9..d0e21a6c33b9 100644 --- a/sysutils/gnome-control-center/files/patch-capplets_common_gnome-theme-info.c +++ b/sysutils/gnome-control-center/files/patch-capplets_common_gnome-theme-info.c @@ -1,20 +1,20 @@ ---- capplets/common/gnome-theme-info.c.orig 2007-10-30 18:58:26.000000000 -0400 -+++ capplets/common/gnome-theme-info.c 2007-11-01 08:43:25.067405773 -0400 -@@ -661,7 +661,7 @@ - theme_info->thumbnail = gdk_pixbuf_new_from_file (filename, NULL); - g_free (filename); - -- theme_info->path = g_build_filename (GNOMECC_DATA_DIR, builtins[i][0], NULL); -+ theme_info->name = g_build_filename (INSTALL_PREFIX, "share", builtins[i][0], NULL); - theme_info->name = g_strdup (theme_info->path); - - if (!strcmp (theme_info->path, cursor_font)) -@@ -1922,7 +1922,7 @@ - gnome_vfs_uri_unref (top_theme_dir_uri); +--- capplets/common/gnome-theme-info.c.orig 2008-05-17 12:46:59.000000000 -0400 ++++ capplets/common/gnome-theme-info.c 2008-05-20 18:10:50.000000000 -0400 +@@ -1843,7 +1843,7 @@ gnome_theme_init () + g_object_unref (top_theme_dir); /* The weird /usr/share/icons */ -- top_theme_dir_uri = gnome_vfs_uri_new ("/usr/share/icons"); -+ top_theme_dir_uri = gnome_vfs_uri_new ("%%LOCALBASE%%/lib/X11/icons"); - if (!gnome_vfs_uri_exists (top_theme_dir_uri)) - gnome_vfs_make_directory_for_uri (top_theme_dir_uri, 0775); - add_top_icon_theme_dir_monitor (top_theme_dir_uri, &real_monitor_not_added, 2, NULL); +- top_theme_dir = g_file_new_for_path ("/usr/share/icons"); ++ top_theme_dir = g_file_new_for_path ("%%LOCALBASE%%/lib/X11/icons"); + add_top_icon_theme_dir_monitor (top_theme_dir, 2, NULL); + g_object_unref (top_theme_dir); + +@@ -1857,7 +1857,7 @@ gnome_theme_init () + #ifdef XCURSOR_ICONDIR + /* if there's a separate xcursors dir, add that as well */ + if (strcmp (XCURSOR_ICONDIR, top_theme_dir_string) && +- strcmp (XCURSOR_ICONDIR, "/usr/share/icons")) { ++ strcmp (XCURSOR_ICONDIR, "%%LOCALBASE%%/lib/X11/icons")) { + top_theme_dir = g_file_new_for_path (XCURSOR_ICONDIR); + if (g_file_query_exists (top_theme_dir, NULL)) + add_top_icon_theme_dir_monitor (top_theme_dir, 1, NULL); diff --git a/sysutils/gnome-control-center/pkg-descr b/sysutils/gnome-control-center/pkg-descr index 26d4dbe929b2..fba462829c6c 100644 --- a/sysutils/gnome-control-center/pkg-descr +++ b/sysutils/gnome-control-center/pkg-descr @@ -1 +1,3 @@ Configuration tools tightly integrated within the GNOME 2 desktop. + +WWW: http://www.gnome.org diff --git a/sysutils/gnome-control-center/pkg-plist b/sysutils/gnome-control-center/pkg-plist index 78f78520bd9d..84ba2af16290 100644 --- a/sysutils/gnome-control-center/pkg-plist +++ b/sysutils/gnome-control-center/pkg-plist @@ -6,42 +6,25 @@ bin/gnome-at-visual bin/gnome-control-center bin/gnome-default-applications-properties bin/gnome-display-properties -bin/gnome-font-viewer bin/gnome-keybinding-properties bin/gnome-keyboard-properties bin/gnome-mouse-properties bin/gnome-network-preferences bin/gnome-sound-properties -bin/gnome-theme-thumbnailer -bin/gnome-thumbnail-font bin/gnome-typing-monitor bin/gnome-window-properties -bin/themus-theme-applier -etc/gnome-vfs-2.0/modules/font-method.conf -etc/gnome-vfs-2.0/modules/theme-method.conf etc/xdg/autostart/gnome-at-session.desktop etc/xdg/menus/gnomecc.menu include/gnome-window-settings-2.0/gnome-window-manager.h include/gnome-window-settings-2.0/gnome-wm-manager.h -lib/gnome-vfs-2.0/modules/libfont-method.a -lib/gnome-vfs-2.0/modules/libfont-method.la -lib/gnome-vfs-2.0/modules/libfont-method.so -lib/gnome-vfs-2.0/modules/libtheme-method.a -lib/gnome-vfs-2.0/modules/libtheme-method.la -lib/gnome-vfs-2.0/modules/libtheme-method.so lib/libgnome-window-settings.a lib/libgnome-window-settings.la lib/libgnome-window-settings.so lib/libgnome-window-settings.so.1 -lib/nautilus/extensions-2.0/libnautilus-fontilus.a -lib/nautilus/extensions-2.0/libnautilus-fontilus.la -lib/nautilus/extensions-2.0/libnautilus-fontilus.so -lib/nautilus/extensions-2.0/libnautilus-themus.a -lib/nautilus/extensions-2.0/libnautilus-themus.la -lib/nautilus/extensions-2.0/libnautilus-themus.so lib/window-manager-settings/libmetacity.a lib/window-manager-settings/libmetacity.la lib/window-manager-settings/libmetacity.so +libdata/pkgconfig/gnome-default-applications.pc libdata/pkgconfig/gnome-keybindings.pc libdata/pkgconfig/gnome-window-settings-2.0.pc share/applications/at-properties.desktop @@ -49,7 +32,6 @@ share/applications/default-applications.desktop share/applications/display-properties.desktop %%ABOUTME%%share/applications/gnome-about-me.desktop share/applications/gnome-appearance-properties.desktop -share/applications/gnome-font-viewer.desktop share/applications/gnome-network-preferences.desktop share/applications/gnome-settings-mouse.desktop share/applications/gnome-settings-sound.desktop @@ -57,14 +39,12 @@ share/applications/gnome-theme-installer.desktop share/applications/gnomecc.desktop share/applications/keybinding.desktop share/applications/keyboard.desktop -share/applications/themus-theme-applier.desktop share/applications/window-properties.desktop -share/desktop-directories/font-method.directory share/desktop-directories/gnomecc.directory -share/desktop-directories/theme-method.directory +%%DATADIR%%/default-apps/gnome-default-applications.xml %%DATADIR%%/glade/appearance.glade -%%DATADIR%%/glade/apply-font.glade %%DATADIR%%/glade/at-enable-dialog.glade +%%DATADIR%%/glade/display-capplet.glade %%ABOUTME%%%%DATADIR%%/glade/gnome-about-me.glade %%DATADIR%%/glade/gnome-default-applications-properties.glade %%DATADIR%%/glade/gnome-keybinding-properties.glade @@ -73,7 +53,6 @@ share/desktop-directories/theme-method.directory %%DATADIR%%/glade/gnome-network-preferences.glade %%DATADIR%%/glade/gnome-window-properties.glade %%DATADIR%%/glade/sound-properties.glade -%%DATADIR%%/gnome-default-applications.xml %%DATADIR%%/keybindings/00-multimedia-key.xml %%DATADIR%%/keybindings/01-desktop-key.xml %%DATADIR%%/pixmaps/at-startup.png @@ -99,7 +78,6 @@ share/desktop-directories/theme-method.directory %%DATADIR%%/pixmaps/subpixel-vbgr.png %%DATADIR%%/pixmaps/subpixel-vrgb.png %%DATADIR%%/pixmaps/theme-thumbnailing.png -%%DATADIR%%/pixmaps/visual-bell.png %%DATADIR%%/pixmaps/window-theme-thumbnailing.png share/gnome/cursor-fonts/cursor-large-white.pcf share/gnome/cursor-fonts/cursor-large.pcf @@ -137,17 +115,22 @@ share/gnome/help/control-center/vi/control-center.xml share/gnome/help/control-center/zh_CN/control-center.xml share/icons/hicolor/16x16/apps/gnome-display-properties.png share/icons/hicolor/16x16/apps/gnome-network-preferences.png +share/icons/hicolor/16x16/apps/gnome-settings-default-applications.png share/icons/hicolor/16x16/apps/gnome-sound-properties.png share/icons/hicolor/22x22/apps/gnome-display-properties.png share/icons/hicolor/22x22/apps/gnome-network-preferences.png +share/icons/hicolor/22x22/apps/gnome-settings-default-applications.png share/icons/hicolor/22x22/apps/gnome-sound-properties.png share/icons/hicolor/24x24/apps/gnome-display-properties.png share/icons/hicolor/24x24/apps/gnome-network-preferences.png +share/icons/hicolor/24x24/apps/gnome-settings-default-applications.png share/icons/hicolor/24x24/apps/gnome-sound-properties.png share/icons/hicolor/32x32/apps/gnome-display-properties.png share/icons/hicolor/32x32/apps/gnome-network-preferences.png +share/icons/hicolor/32x32/apps/gnome-settings-default-applications.png share/icons/hicolor/32x32/apps/gnome-sound-properties.png share/icons/hicolor/48x48/apps/gnome-network-preferences.png +share/icons/hicolor/48x48/apps/gnome-settings-default-applications.png share/icons/hicolor/48x48/apps/gnome-sound-properties.png share/icons/hicolor/48x48/apps/typing-monitor.png share/icons/hicolor/scalable/apps/gnome-display-properties.svg @@ -223,7 +206,7 @@ share/locale/sk/LC_MESSAGES/gnome-control-center-2.0.mo share/locale/sl/LC_MESSAGES/gnome-control-center-2.0.mo share/locale/sq/LC_MESSAGES/gnome-control-center-2.0.mo share/locale/sr/LC_MESSAGES/gnome-control-center-2.0.mo -share/locale/sr@Latn/LC_MESSAGES/gnome-control-center-2.0.mo +share/locale/sr@latin/LC_MESSAGES/gnome-control-center-2.0.mo share/locale/sv/LC_MESSAGES/gnome-control-center-2.0.mo share/locale/ta/LC_MESSAGES/gnome-control-center-2.0.mo share/locale/te/LC_MESSAGES/gnome-control-center-2.0.mo @@ -278,6 +261,7 @@ share/omf/control-center/control-center-zh_CN.omf @dirrm share/gnome/cursor-fonts @dirrm %%DATADIR%%/pixmaps @dirrm %%DATADIR%%/glade +@dirrm %%DATADIR%%/default-apps @dirrmtry share/desktop-directories @dirrmtry share/applications @dirrm lib/window-manager-settings @@ -295,6 +279,8 @@ share/omf/control-center/control-center-zh_CN.omf @dirrmtry share/locale/xh @dirrmtry share/locale/te/LC_MESSAGES @dirrmtry share/locale/te +@dirrmtry share/locale/sr@latin/LC_MESSAGES +@dirrmtry share/locale/sr@latin @dirrmtry share/locale/si/LC_MESSAGES @dirrmtry share/locale/si @dirrmtry share/locale/rw/LC_MESSAGES diff --git a/sysutils/gnome-power-manager/Makefile b/sysutils/gnome-power-manager/Makefile index d504b852fc0a..0d3f5972d4c3 100644 --- a/sysutils/gnome-power-manager/Makefile +++ b/sysutils/gnome-power-manager/Makefile @@ -3,15 +3,13 @@ # Whom: Joe Marcus Clarke <marcus@FreeBSD.org> # # $FreeBSD$ -# $MCom: ports/sysutils/gnome-power-manager/Makefile,v 1.40 2008/03/10 22:50:08 ahze Exp $ +# $MCom: ports/sysutils/gnome-power-manager/Makefile,v 1.50 2008/11/19 19:49:56 mezz Exp $ # PORTNAME= gnome-power-manager -PORTVERSION= 2.22.1 -PORTREVISION= 2 +PORTVERSION= 2.24.2 CATEGORIES= sysutils gnome -MASTER_SITES= ${MASTER_SITE_GNOME} -MASTER_SITE_SUBDIR= sources/${PORTNAME}/${PORTVERSION:C/^([0-9]+\.[0-9]+).*/\1/} +MASTER_SITES= GNOME DIST_SUBDIR= gnome2 MAINTAINER= gnome@FreeBSD.org @@ -20,7 +18,8 @@ COMMENT= Power management system for the GNOME Desktop BUILD_DEPENDS= docbook2html:${PORTSDIR}/textproc/docbook-utils \ ${LOCALBASE}/share/sgml/docbook/4.1/catalog:${PORTSDIR}/textproc/docbook-410 LIB_DEPENDS= hal.1:${PORTSDIR}/sysutils/hal \ - notify.1:${PORTSDIR}/devel/libnotify + notify.1:${PORTSDIR}/devel/libnotify \ + execinfo:${PORTSDIR}/devel/libexecinfo USE_GETTEXT= yes USE_BZIP2= yes @@ -31,8 +30,7 @@ USE_AUTOTOOLS= libtool:15 USE_GSTREAMER= good USE_GNOME= gnomeprefix gnomehack intlhack libgnomeui libwnck \ gnomedocutils gnomepanel -CONFIGURE_ARGS= --disable-icon-framing \ - --with-doc-dir=${PREFIX}/share/doc \ +CONFIGURE_ARGS= --with-doc-dir=${PREFIX}/share/doc \ --disable-docbook-docs CONFIGURE_ENV= CPPFLAGS="-I${LOCALBASE}/include" \ LDFLAGS="-L${LOCALBASE}/lib" diff --git a/sysutils/gnome-power-manager/distinfo b/sysutils/gnome-power-manager/distinfo index f7a63e0531cc..c732c2195001 100644 --- a/sysutils/gnome-power-manager/distinfo +++ b/sysutils/gnome-power-manager/distinfo @@ -1,3 +1,3 @@ -MD5 (gnome2/gnome-power-manager-2.22.1.tar.bz2) = bfb10f96771dd161ff16171f78a7dc21 -SHA256 (gnome2/gnome-power-manager-2.22.1.tar.bz2) = 967dc61382e85dd6d8a8da74e9847760bbb429a3fdb97ab2f4f69bf574b0c1c4 -SIZE (gnome2/gnome-power-manager-2.22.1.tar.bz2) = 3002440 +MD5 (gnome2/gnome-power-manager-2.24.2.tar.bz2) = c8971e0c4ed060e0182785321f19b961 +SHA256 (gnome2/gnome-power-manager-2.24.2.tar.bz2) = ebf81236c9405ba47e7a21767c2372f2c3abb44cc671bac8662d2aeb3e746dbc +SIZE (gnome2/gnome-power-manager-2.24.2.tar.bz2) = 2997150 diff --git a/sysutils/gnome-power-manager/files/patch-src_Makefile.in b/sysutils/gnome-power-manager/files/patch-src_Makefile.in new file mode 100644 index 000000000000..8bbbfb172700 --- /dev/null +++ b/sysutils/gnome-power-manager/files/patch-src_Makefile.in @@ -0,0 +1,29 @@ +--- src/Makefile.in.orig 2008-09-29 17:30:53.000000000 -0400 ++++ src/Makefile.in 2008-09-29 17:35:03.000000000 -0400 +@@ -471,7 +471,7 @@ gnome_power_statistics_SOURCES = \ + $(NULL) + + gnome_power_statistics_LDADD = $(GLIB_LIBS) $(GNOME_LIBS) $(DBUS_LIBS) \ +- $(LOCAL_LIBDBUS_LIBS) $(LOCAL_LIBUNIQUE_LIBS) $(NULL) \ ++ $(LOCAL_LIBDBUS_LIBS) $(LOCAL_LIBUNIQUE_LIBS) -lexecinfo $(NULL) \ + $(am__append_1) + gnome_power_preferences_SOURCES = \ + egg-debug.h \ +@@ -499,7 +499,7 @@ gnome_power_preferences_SOURCES = \ + gnome_power_preferences_LDADD = $(GLIB_LIBS) $(GNOME_LIBS) $(HAL_LIBS) \ + $(DBUS_LIBS) $(POLKIT_GNOME_LIBS) $(GPM_EXTRA_LIBS) \ + $(LOCAL_LIBHAL_LIBS) $(LOCAL_LIBDBUS_LIBS) \ +- $(LOCAL_LIBUNIQUE_LIBS) $(NULL) $(am__append_2) ++ $(LOCAL_LIBUNIQUE_LIBS) -lexecinfo $(NULL) $(am__append_2) + gnome_power_manager_SOURCES = \ + egg-color.c \ + egg-color.h \ +@@ -588,7 +588,7 @@ gnome_power_manager_SOURCES = \ + gnome_power_manager_LDADD = $(GLIB_LIBS) $(GSTREAMER_LIBS) \ + $(GNOME_LIBS) $(HAL_LIBS) $(POLKIT_LIBS) $(DBUS_LIBS) \ + $(XRANDR_LIBS) $(GPM_EXTRA_LIBS) $(LOCAL_LIBHAL_LIBS) \ +- $(LOCAL_LIBDBUS_LIBS) $(NULL) $(am__append_3) ++ $(LOCAL_LIBDBUS_LIBS) -lexecinfo $(NULL) $(am__append_3) + gnome_power_self_test_SOURCES = \ + egg-color.c \ + egg-color.h \ diff --git a/sysutils/gnome-power-manager/pkg-plist b/sysutils/gnome-power-manager/pkg-plist index 6e72d046a507..9329befef483 100644 --- a/sysutils/gnome-power-manager/pkg-plist +++ b/sysutils/gnome-power-manager/pkg-plist @@ -16,8 +16,6 @@ share/gnome-2.0/ui/GNOME_InhibitApplet.xml %%DATADIR%%/gpm-feedback-widget.glade %%DATADIR%%/gpm-graph.glade %%DATADIR%%/gpm-inhibit-test.glade -%%DATADIR%%/gpm-lid-down.wav -%%DATADIR%%/gpm-lid-up.wav %%DATADIR%%/gpm-prefs.glade %%DATADIR%%/gpm-suspend-failure.wav %%DATADIR%%/gpm-unplugged.wav @@ -440,6 +438,7 @@ share/icons/hicolor/scalable/apps/gnome-power-manager.svg share/icons/hicolor/scalable/apps/gnome-power-statistics.svg share/locale/ar/LC_MESSAGES/gnome-power-manager.mo share/locale/as/LC_MESSAGES/gnome-power-manager.mo +share/locale/ast/LC_MESSAGES/gnome-power-manager.mo share/locale/be@latin/LC_MESSAGES/gnome-power-manager.mo share/locale/bg/LC_MESSAGES/gnome-power-manager.mo share/locale/bn/LC_MESSAGES/gnome-power-manager.mo @@ -466,6 +465,7 @@ share/locale/he/LC_MESSAGES/gnome-power-manager.mo share/locale/hi/LC_MESSAGES/gnome-power-manager.mo share/locale/hu/LC_MESSAGES/gnome-power-manager.mo share/locale/id/LC_MESSAGES/gnome-power-manager.mo +share/locale/is/LC_MESSAGES/gnome-power-manager.mo share/locale/it/LC_MESSAGES/gnome-power-manager.mo share/locale/ja/LC_MESSAGES/gnome-power-manager.mo share/locale/ka/LC_MESSAGES/gnome-power-manager.mo @@ -493,9 +493,10 @@ share/locale/si/LC_MESSAGES/gnome-power-manager.mo share/locale/sk/LC_MESSAGES/gnome-power-manager.mo share/locale/sl/LC_MESSAGES/gnome-power-manager.mo share/locale/sr/LC_MESSAGES/gnome-power-manager.mo -share/locale/sr@Latn/LC_MESSAGES/gnome-power-manager.mo +share/locale/sr@latin/LC_MESSAGES/gnome-power-manager.mo share/locale/sv/LC_MESSAGES/gnome-power-manager.mo share/locale/ta/LC_MESSAGES/gnome-power-manager.mo +share/locale/te/LC_MESSAGES/gnome-power-manager.mo share/locale/th/LC_MESSAGES/gnome-power-manager.mo share/locale/tr/LC_MESSAGES/gnome-power-manager.mo share/locale/uk/LC_MESSAGES/gnome-power-manager.mo @@ -556,6 +557,10 @@ share/omf/gnome-power-manager/gnome-power-manager-sv.omf @dirrmtry share/applications @dirrmtry share/locale/zh_HK/LC_MESSAGES @dirrmtry share/locale/zh_HK +@dirrmtry share/locale/te/LC_MESSAGES +@dirrmtry share/locale/te +@dirrmtry share/locale/sr@latin/LC_MESSAGES +@dirrmtry share/locale/sr@latin @dirrmtry share/locale/si/LC_MESSAGES @dirrmtry share/locale/si @dirrmtry share/locale/oc/LC_MESSAGES @@ -572,5 +577,7 @@ share/omf/gnome-power-manager/gnome-power-manager-sv.omf @dirrmtry share/locale/bn_IN @dirrmtry share/locale/be@latin/LC_MESSAGES @dirrmtry share/locale/be@latin +@dirrmtry share/locale/ast/LC_MESSAGES +@dirrmtry share/locale/ast @dirrmtry share/locale/as/LC_MESSAGES @dirrmtry share/locale/as diff --git a/sysutils/gnome-settings-daemon/Makefile b/sysutils/gnome-settings-daemon/Makefile index b55349a20c0f..78f670a8e3f5 100644 --- a/sysutils/gnome-settings-daemon/Makefile +++ b/sysutils/gnome-settings-daemon/Makefile @@ -3,14 +3,14 @@ # Whom: Koop Mast <kwm@FreeBSD.org> # # $FreeBSD$ -# $MCom: ports/sysutils/gnome-settings-daemon/Makefile,v 1.16 2008/03/14 06:19:50 mezz Exp $ +# $MCom: ports/sysutils/gnome-settings-daemon/Makefile,v 1.31 2008/11/25 16:39:52 marcus Exp $ # PORTNAME= gnome-settings-daemon -PORTVERSION= 2.22.2.1 -PORTREVISION= 1 +PORTVERSION= 2.24.1 CATEGORIES= sysutils gnome MASTER_SITES= GNOME +DIST_SUBDIR= gnome2 MAINTAINER= gnome@FreeBSD.org COMMENT= GNOME 2 settings daemon @@ -22,11 +22,13 @@ USE_GNOME= gnomeprefix intlhack gnomehack gnomedesktop libgnomekbd USE_GETTEXT= yes USE_GSTREAMER= good GNU_CONFIGURE= yes +INSTALLS_ICONS= yes CONFIGURE_ARGS= --enable-gstreamer=0.10 CONFIGURE_ENV= CPPFLAGS="-I${LOCALBASE}/include" \ LDFLAGS="-L${LOCALBASE}/lib" GCONF_SCHEMAS= apps_gnome_settings_daemon_keybindings.schemas \ + apps_gnome_settings_daemon_xrandr.schemas \ apps_gnome_settings_daemon_screensaver.schemas \ desktop_gnome_font_rendering.schemas \ gnome-settings-daemon.schemas diff --git a/sysutils/gnome-settings-daemon/distinfo b/sysutils/gnome-settings-daemon/distinfo index 916b4aeee94b..bdcc78e1d6a5 100644 --- a/sysutils/gnome-settings-daemon/distinfo +++ b/sysutils/gnome-settings-daemon/distinfo @@ -1,3 +1,3 @@ -MD5 (gnome-settings-daemon-2.22.2.1.tar.bz2) = f4dd22b68ffd7cb0b6f6ebd570ad4365 -SHA256 (gnome-settings-daemon-2.22.2.1.tar.bz2) = 72cb9aee096019a2925fb5b99a5e880d01f7d529d4c9e75dfbbea1b1f654d7a9 -SIZE (gnome-settings-daemon-2.22.2.1.tar.bz2) = 1139262 +MD5 (gnome2/gnome-settings-daemon-2.24.1.tar.bz2) = 841447fa690a3a4712e9ddaec2584824 +SHA256 (gnome2/gnome-settings-daemon-2.24.1.tar.bz2) = a2a5132a5b9d0bef52010ea45b14560b6344f591ce3296ed555165332cce9a70 +SIZE (gnome2/gnome-settings-daemon-2.24.1.tar.bz2) = 1131518 diff --git a/sysutils/gnome-settings-daemon/files/patch-plugins_background_gsd-background-manager.c b/sysutils/gnome-settings-daemon/files/patch-plugins_background_gsd-background-manager.c new file mode 100644 index 000000000000..8820c1482a96 --- /dev/null +++ b/sysutils/gnome-settings-daemon/files/patch-plugins_background_gsd-background-manager.c @@ -0,0 +1,21 @@ +--- plugins/background/gsd-background-manager.c.orig 2008-11-03 13:25:29.000000000 -0600 ++++ plugins/background/gsd-background-manager.c 2008-11-03 13:28:16.000000000 -0600 +@@ -160,6 +160,18 @@ + GdkDisplay *display; + int n_screens; + int i; ++ GConfClient *client; ++ gboolean enabled; ++ ++ client = gconf_client_get_default (); ++ ++ enabled = gconf_client_get_bool (client, ++ "/desktop/gnome/background/draw_background", ++ NULL); ++ g_object_unref (client); ++ ++ if (!enabled) ++ return FALSE; + + if (nautilus_is_running ()) { + return; diff --git a/sysutils/gnome-settings-daemon/pkg-descr b/sysutils/gnome-settings-daemon/pkg-descr index 42b586789ffe..9ce205e84f33 100644 --- a/sysutils/gnome-settings-daemon/pkg-descr +++ b/sysutils/gnome-settings-daemon/pkg-descr @@ -1 +1,3 @@ GNOME 2 settings daemon. + +WWW: http://www.gnome.org diff --git a/sysutils/gnome-settings-daemon/pkg-plist b/sysutils/gnome-settings-daemon/pkg-plist index 5b7ee38e5a94..9711a5722e9f 100644 --- a/sysutils/gnome-settings-daemon/pkg-plist +++ b/sysutils/gnome-settings-daemon/pkg-plist @@ -1,9 +1,11 @@ +etc/xdg/autostart/gnome-settings-daemon.desktop include/gnome-settings-daemon-2.0/gnome-settings-daemon/gnome-settings-client.h lib/gnome-settings-daemon-2.0/a11y-keyboard.gnome-settings-plugin lib/gnome-settings-daemon-2.0/background.gnome-settings-plugin lib/gnome-settings-daemon-2.0/clipboard.gnome-settings-plugin lib/gnome-settings-daemon-2.0/dummy.gnome-settings-plugin lib/gnome-settings-daemon-2.0/font.gnome-settings-plugin +lib/gnome-settings-daemon-2.0/housekeeping.gnome-settings-plugin lib/gnome-settings-daemon-2.0/keybindings.gnome-settings-plugin lib/gnome-settings-daemon-2.0/keyboard.gnome-settings-plugin lib/gnome-settings-daemon-2.0/liba11y-keyboard.a @@ -21,6 +23,9 @@ lib/gnome-settings-daemon-2.0/libdummy.so lib/gnome-settings-daemon-2.0/libfont.a lib/gnome-settings-daemon-2.0/libfont.la lib/gnome-settings-daemon-2.0/libfont.so +lib/gnome-settings-daemon-2.0/libhousekeeping.a +lib/gnome-settings-daemon-2.0/libhousekeeping.la +lib/gnome-settings-daemon-2.0/libhousekeeping.so lib/gnome-settings-daemon-2.0/libkeybindings.a lib/gnome-settings-daemon-2.0/libkeybindings.la lib/gnome-settings-daemon-2.0/libkeybindings.so @@ -64,6 +69,7 @@ libexec/gnome-settings-daemon share/dbus-1/services/org.gnome.SettingsDaemon.service %%DATADIR%%/acme-eject.png %%DATADIR%%/acme.glade +%%DATADIR%%/gsd-a11y-preferences-dialog.glade %%DATADIR%%/modmap-dialog.glade %%DATADIR%%/xrdb/Editres.ad %%DATADIR%%/xrdb/Emacs.ad @@ -71,6 +77,11 @@ share/dbus-1/services/org.gnome.SettingsDaemon.service %%DATADIR%%/xrdb/Motif.ad %%DATADIR%%/xrdb/Tk.ad %%DATADIR%%/xrdb/Xaw.ad +share/icons/hicolor/16x16/apps/gsd-xrandr.png +share/icons/hicolor/22x22/apps/gsd-xrandr.png +share/icons/hicolor/24x24/apps/gsd-xrandr.png +share/icons/hicolor/32x32/apps/gsd-xrandr.png +share/icons/hicolor/scalable/apps/gsd-xrandr.svg share/locale/af/LC_MESSAGES/gnome-settings-daemon.mo share/locale/am/LC_MESSAGES/gnome-settings-daemon.mo share/locale/ar/LC_MESSAGES/gnome-settings-daemon.mo @@ -109,6 +120,7 @@ share/locale/is/LC_MESSAGES/gnome-settings-daemon.mo share/locale/it/LC_MESSAGES/gnome-settings-daemon.mo share/locale/ja/LC_MESSAGES/gnome-settings-daemon.mo share/locale/ka/LC_MESSAGES/gnome-settings-daemon.mo +share/locale/kn/LC_MESSAGES/gnome-settings-daemon.mo share/locale/ko/LC_MESSAGES/gnome-settings-daemon.mo share/locale/ku/LC_MESSAGES/gnome-settings-daemon.mo share/locale/lt/LC_MESSAGES/gnome-settings-daemon.mo @@ -138,7 +150,7 @@ share/locale/sk/LC_MESSAGES/gnome-settings-daemon.mo share/locale/sl/LC_MESSAGES/gnome-settings-daemon.mo share/locale/sq/LC_MESSAGES/gnome-settings-daemon.mo share/locale/sr/LC_MESSAGES/gnome-settings-daemon.mo -share/locale/sr@Latn/LC_MESSAGES/gnome-settings-daemon.mo +share/locale/sr@latin/LC_MESSAGES/gnome-settings-daemon.mo share/locale/sv/LC_MESSAGES/gnome-settings-daemon.mo share/locale/ta/LC_MESSAGES/gnome-settings-daemon.mo share/locale/te/LC_MESSAGES/gnome-settings-daemon.mo @@ -157,6 +169,8 @@ share/locale/zu/LC_MESSAGES/gnome-settings-daemon.mo @dirrm lib/gnome-settings-daemon-2.0 @dirrm include/gnome-settings-daemon-2.0/gnome-settings-daemon @dirrm include/gnome-settings-daemon-2.0 +@dirrmtry etc/xdg/autostart +@dirrmtry etc/xdg @dirrmtry share/locale/zu/LC_MESSAGES @dirrmtry share/locale/zu @dirrmtry share/locale/zh_HK/LC_MESSAGES @@ -165,6 +179,8 @@ share/locale/zu/LC_MESSAGES/gnome-settings-daemon.mo @dirrmtry share/locale/xh @dirrmtry share/locale/te/LC_MESSAGES @dirrmtry share/locale/te +@dirrmtry share/locale/sr@latin/LC_MESSAGES +@dirrmtry share/locale/sr@latin @dirrmtry share/locale/si/LC_MESSAGES @dirrmtry share/locale/si @dirrmtry share/locale/rw/LC_MESSAGES diff --git a/sysutils/gnome-system-monitor/Makefile b/sysutils/gnome-system-monitor/Makefile index fe550dfdab62..76c15be1bb66 100644 --- a/sysutils/gnome-system-monitor/Makefile +++ b/sysutils/gnome-system-monitor/Makefile @@ -3,11 +3,11 @@ # Whom: Joe Marcus Clarke <marcus@FreeBSD.org> # # $FreeBSD$ -# $MCom: ports/sysutils/gnome-system-monitor/Makefile,v 1.117 2008/03/10 22:04:22 mezz Exp $ +# $MCom: ports/sysutils/gnome-system-monitor/Makefile,v 1.128 2008/10/21 03:42:01 mezz Exp $ # PORTNAME= gnome-system-monitor -PORTVERSION= 2.22.4 +PORTVERSION= 2.24.1 CATEGORIES= sysutils gnome MASTER_SITES= GNOME DIST_SUBDIR= gnome2 diff --git a/sysutils/gnome-system-monitor/distinfo b/sysutils/gnome-system-monitor/distinfo index 9bf0b07350a3..97f5d884b504 100644 --- a/sysutils/gnome-system-monitor/distinfo +++ b/sysutils/gnome-system-monitor/distinfo @@ -1,3 +1,3 @@ -MD5 (gnome2/gnome-system-monitor-2.22.4.tar.bz2) = ac14b969d88446a88bbadf9d53007b58 -SHA256 (gnome2/gnome-system-monitor-2.22.4.tar.bz2) = 25ae605cc7ac2f54e87103f2d2cf63397695fa5f5cb0768a16339cdd7b4ffdec -SIZE (gnome2/gnome-system-monitor-2.22.4.tar.bz2) = 1921669 +MD5 (gnome2/gnome-system-monitor-2.24.1.tar.bz2) = f28977135e37a78442f5df05b796480c +SHA256 (gnome2/gnome-system-monitor-2.24.1.tar.bz2) = 1ac282e9db2871d1274b2bd72f6d15d7ffc7cd8d9932f0ac4903d383f98cc59c +SIZE (gnome2/gnome-system-monitor-2.24.1.tar.bz2) = 2004578 diff --git a/sysutils/gnome-system-monitor/files/patch-src_openfiles.cpp b/sysutils/gnome-system-monitor/files/patch-src_openfiles.cpp new file mode 100644 index 000000000000..c00526174921 --- /dev/null +++ b/sysutils/gnome-system-monitor/files/patch-src_openfiles.cpp @@ -0,0 +1,14 @@ +--- src/openfiles.cpp.orig 2008-05-27 16:16:46.000000000 -0400 ++++ src/openfiles.cpp 2008-05-27 16:19:53.000000000 -0400 +@@ -66,7 +66,11 @@ friendlier_hostname(const char *addr_str + goto failsafe; + + if (getnameinfo(res->ai_addr, res->ai_addrlen, hostname, ++#ifdef NI_IDN + sizeof hostname, service, sizeof service, NI_IDN)) ++#else ++ sizeof hostname, service, sizeof service, 0)) ++#endif + goto failsafe; + + if (res) freeaddrinfo(res); diff --git a/sysutils/gnome-system-monitor/pkg-plist b/sysutils/gnome-system-monitor/pkg-plist index 4ed8d93f72d6..089a05cb097f 100644 --- a/sysutils/gnome-system-monitor/pkg-plist +++ b/sysutils/gnome-system-monitor/pkg-plist @@ -15,6 +15,20 @@ share/gnome/help/gnome-system-monitor/C/figures/systemMonitor.png share/gnome/help/gnome-system-monitor/C/figures/viewMenu.png share/gnome/help/gnome-system-monitor/C/gnome-system-monitor.xml share/gnome/help/gnome-system-monitor/C/legal.xml +share/gnome/help/gnome-system-monitor/ar/figures/addColumn.png +share/gnome/help/gnome-system-monitor/ar/figures/changePriority.png +share/gnome/help/gnome-system-monitor/ar/figures/colorPanel.png +share/gnome/help/gnome-system-monitor/ar/figures/columnContextMenu.png +share/gnome/help/gnome-system-monitor/ar/figures/gnome-system-monitor_window.png +share/gnome/help/gnome-system-monitor/ar/figures/memoryMaps.png +share/gnome/help/gnome-system-monitor/ar/figures/moreInfo.png +share/gnome/help/gnome-system-monitor/ar/figures/processListing.png +share/gnome/help/gnome-system-monitor/ar/figures/sortButton.png +share/gnome/help/gnome-system-monitor/ar/figures/sortMenu.png +share/gnome/help/gnome-system-monitor/ar/figures/sortMenu2.png +share/gnome/help/gnome-system-monitor/ar/figures/systemMonitor.png +share/gnome/help/gnome-system-monitor/ar/figures/viewMenu.png +share/gnome/help/gnome-system-monitor/ar/gnome-system-monitor.xml share/gnome/help/gnome-system-monitor/bg/figures/addColumn.png share/gnome/help/gnome-system-monitor/bg/figures/changePriority.png share/gnome/help/gnome-system-monitor/bg/figures/colorPanel.png @@ -168,6 +182,7 @@ share/locale/oc/LC_MESSAGES/gnome-system-monitor.mo share/locale/or/LC_MESSAGES/gnome-system-monitor.mo share/locale/pa/LC_MESSAGES/gnome-system-monitor.mo share/locale/pl/LC_MESSAGES/gnome-system-monitor.mo +share/locale/ps/LC_MESSAGES/gnome-system-monitor.mo share/locale/pt/LC_MESSAGES/gnome-system-monitor.mo share/locale/pt_BR/LC_MESSAGES/gnome-system-monitor.mo share/locale/ro/LC_MESSAGES/gnome-system-monitor.mo @@ -178,7 +193,7 @@ share/locale/sk/LC_MESSAGES/gnome-system-monitor.mo share/locale/sl/LC_MESSAGES/gnome-system-monitor.mo share/locale/sq/LC_MESSAGES/gnome-system-monitor.mo share/locale/sr/LC_MESSAGES/gnome-system-monitor.mo -share/locale/sr@Latn/LC_MESSAGES/gnome-system-monitor.mo +share/locale/sr@latin/LC_MESSAGES/gnome-system-monitor.mo share/locale/sv/LC_MESSAGES/gnome-system-monitor.mo share/locale/ta/LC_MESSAGES/gnome-system-monitor.mo share/locale/te/LC_MESSAGES/gnome-system-monitor.mo @@ -191,6 +206,7 @@ share/locale/zh_CN/LC_MESSAGES/gnome-system-monitor.mo share/locale/zh_HK/LC_MESSAGES/gnome-system-monitor.mo share/locale/zh_TW/LC_MESSAGES/gnome-system-monitor.mo share/omf/gnome-system-monitor/gnome-system-monitor-C.omf +share/omf/gnome-system-monitor/gnome-system-monitor-ar.omf share/omf/gnome-system-monitor/gnome-system-monitor-bg.omf share/omf/gnome-system-monitor/gnome-system-monitor-ca.omf share/omf/gnome-system-monitor/gnome-system-monitor-es.omf @@ -217,6 +233,8 @@ share/pixmaps/gnome-system-monitor/upload.svg @dirrm share/gnome/help/gnome-system-monitor/ca @dirrm share/gnome/help/gnome-system-monitor/bg/figures @dirrm share/gnome/help/gnome-system-monitor/bg +@dirrm share/gnome/help/gnome-system-monitor/ar/figures +@dirrm share/gnome/help/gnome-system-monitor/ar @dirrm share/gnome/help/gnome-system-monitor/C/figures @dirrm share/gnome/help/gnome-system-monitor/C @dirrm share/gnome/help/gnome-system-monitor @@ -227,10 +245,14 @@ share/pixmaps/gnome-system-monitor/upload.svg @dirrmtry share/locale/ug @dirrmtry share/locale/te/LC_MESSAGES @dirrmtry share/locale/te +@dirrmtry share/locale/sr@latin/LC_MESSAGES +@dirrmtry share/locale/sr@latin @dirrmtry share/locale/si/LC_MESSAGES @dirrmtry share/locale/si @dirrmtry share/locale/rw/LC_MESSAGES @dirrmtry share/locale/rw +@dirrmtry share/locale/ps/LC_MESSAGES +@dirrmtry share/locale/ps @dirrmtry share/locale/oc/LC_MESSAGES @dirrmtry share/locale/oc @dirrmtry share/locale/mr/LC_MESSAGES diff --git a/sysutils/gnome-system-tools/Makefile b/sysutils/gnome-system-tools/Makefile index f4e2b1010089..1a57b4cb932f 100644 --- a/sysutils/gnome-system-tools/Makefile +++ b/sysutils/gnome-system-tools/Makefile @@ -3,12 +3,11 @@ # Whom: Adam Weinberger <adamw@FreeBSD.org> # # $FreeBSD$ -# $MCom: ports/sysutils/gnome-system-tools/Makefile,v 1.78 2008/03/09 18:58:47 mezz Exp $ +# $MCom: ports/sysutils/gnome-system-tools/Makefile,v 1.81 2008/09/27 01:53:00 mezz Exp $ # PORTNAME= gnome-system-tools -PORTVERSION= 2.22.0 -PORTREVISION= 2 +PORTVERSION= 2.22.1 CATEGORIES= sysutils gnome MASTER_SITES= GNOME DIST_SUBDIR= gnome2 @@ -24,7 +23,7 @@ INSTALLS_ICONS= yes USE_GETTEXT= yes USE_LDCONFIG= yes GNOME_DESKTOP_VERSION=2 -USE_GNOME= gnomehack gnomeprefix gnometarget intlhack nautilus2 +USE_GNOME= gnomehack gnomeprefix intlhack nautilus2 USE_AUTOTOOLS= libtool:15 INSTALLS_OMF= yes CONFIGURE_ARGS= --enable-services diff --git a/sysutils/gnome-system-tools/distinfo b/sysutils/gnome-system-tools/distinfo index c56c52fb6457..956fd3308355 100644 --- a/sysutils/gnome-system-tools/distinfo +++ b/sysutils/gnome-system-tools/distinfo @@ -1,3 +1,3 @@ -MD5 (gnome2/gnome-system-tools-2.22.0.tar.bz2) = 6559bb97fc75bc28b559dc530571d527 -SHA256 (gnome2/gnome-system-tools-2.22.0.tar.bz2) = 57c348458efdf34118bc46102e2389cf32172f22e3429bb959a81a773ade56b9 -SIZE (gnome2/gnome-system-tools-2.22.0.tar.bz2) = 3441541 +MD5 (gnome2/gnome-system-tools-2.22.1.tar.bz2) = 50b2174727ac2e2b7b5621010343b040 +SHA256 (gnome2/gnome-system-tools-2.22.1.tar.bz2) = c3d02612457318b7d879d634219a5126dd37861089650554ad49736a9f5ecf57 +SIZE (gnome2/gnome-system-tools-2.22.1.tar.bz2) = 3963700 diff --git a/sysutils/gnome-system-tools/pkg-plist b/sysutils/gnome-system-tools/pkg-plist index 3d2ede7481a5..1efb263ca661 100644 --- a/sysutils/gnome-system-tools/pkg-plist +++ b/sysutils/gnome-system-tools/pkg-plist @@ -56,12 +56,18 @@ share/gnome/help/shares-admin/C/legal.xml share/gnome/help/shares-admin/C/shares-admin.xml share/gnome/help/shares-admin/ca/figures/shares-tool.png share/gnome/help/shares-admin/ca/shares-admin.xml +share/gnome/help/shares-admin/de/figures/shares-tool.png +share/gnome/help/shares-admin/de/shares-admin.xml +share/gnome/help/shares-admin/el/figures/shares-tool.png +share/gnome/help/shares-admin/el/shares-admin.xml share/gnome/help/shares-admin/es/figures/shares-tool.png share/gnome/help/shares-admin/es/shares-admin.xml share/gnome/help/shares-admin/fr/figures/shares-tool.png share/gnome/help/shares-admin/fr/shares-admin.xml share/gnome/help/shares-admin/oc/figures/shares-tool.png share/gnome/help/shares-admin/oc/shares-admin.xml +share/gnome/help/shares-admin/pt_BR/figures/shares-tool.png +share/gnome/help/shares-admin/pt_BR/shares-admin.xml share/gnome/help/shares-admin/sv/figures/shares-tool.png share/gnome/help/shares-admin/sv/shares-admin.xml share/gnome/help/time-admin/C/figures/time-map.png @@ -75,6 +81,11 @@ share/gnome/help/time-admin/ca/figures/time-servers.png share/gnome/help/time-admin/ca/figures/time-tool-automatic.png share/gnome/help/time-admin/ca/figures/time-tool-manual.png share/gnome/help/time-admin/ca/time-admin.xml +share/gnome/help/time-admin/de/figures/time-map.png +share/gnome/help/time-admin/de/figures/time-servers.png +share/gnome/help/time-admin/de/figures/time-tool-automatic.png +share/gnome/help/time-admin/de/figures/time-tool-manual.png +share/gnome/help/time-admin/de/time-admin.xml share/gnome/help/time-admin/es/figures/time-map.png share/gnome/help/time-admin/es/figures/time-servers.png share/gnome/help/time-admin/es/figures/time-tool-automatic.png @@ -110,6 +121,8 @@ share/gnome/help/users-admin/C/legal.xml share/gnome/help/users-admin/C/users-admin.xml share/gnome/help/users-admin/ca/figures/users-tool.png share/gnome/help/users-admin/ca/users-admin.xml +share/gnome/help/users-admin/de/figures/users-tool.png +share/gnome/help/users-admin/de/users-admin.xml share/gnome/help/users-admin/el/figures/users-tool.png share/gnome/help/users-admin/el/users-admin.xml share/gnome/help/users-admin/es/figures/users-tool.png @@ -118,6 +131,8 @@ share/gnome/help/users-admin/fr/figures/users-tool.png share/gnome/help/users-admin/fr/users-admin.xml share/gnome/help/users-admin/oc/figures/users-tool.png share/gnome/help/users-admin/oc/users-admin.xml +share/gnome/help/users-admin/pt_BR/figures/users-tool.png +share/gnome/help/users-admin/pt_BR/users-admin.xml share/gnome/help/users-admin/ru/figures/users-tool.png share/gnome/help/users-admin/ru/users-admin.xml share/gnome/help/users-admin/sv/figures/users-tool.png @@ -161,9 +176,11 @@ share/locale/hi/LC_MESSAGES/gnome-system-tools.mo share/locale/hr/LC_MESSAGES/gnome-system-tools.mo share/locale/hu/LC_MESSAGES/gnome-system-tools.mo share/locale/id/LC_MESSAGES/gnome-system-tools.mo +share/locale/is/LC_MESSAGES/gnome-system-tools.mo share/locale/it/LC_MESSAGES/gnome-system-tools.mo share/locale/ja/LC_MESSAGES/gnome-system-tools.mo share/locale/ka/LC_MESSAGES/gnome-system-tools.mo +share/locale/kn/LC_MESSAGES/gnome-system-tools.mo share/locale/ko/LC_MESSAGES/gnome-system-tools.mo share/locale/ku/LC_MESSAGES/gnome-system-tools.mo share/locale/lt/LC_MESSAGES/gnome-system-tools.mo @@ -192,9 +209,10 @@ share/locale/sk/LC_MESSAGES/gnome-system-tools.mo share/locale/sl/LC_MESSAGES/gnome-system-tools.mo share/locale/sq/LC_MESSAGES/gnome-system-tools.mo share/locale/sr/LC_MESSAGES/gnome-system-tools.mo -share/locale/sr@Latn/LC_MESSAGES/gnome-system-tools.mo +share/locale/sr@latin/LC_MESSAGES/gnome-system-tools.mo share/locale/sv/LC_MESSAGES/gnome-system-tools.mo share/locale/ta/LC_MESSAGES/gnome-system-tools.mo +share/locale/te/LC_MESSAGES/gnome-system-tools.mo share/locale/th/LC_MESSAGES/gnome-system-tools.mo share/locale/tr/LC_MESSAGES/gnome-system-tools.mo share/locale/uk/LC_MESSAGES/gnome-system-tools.mo @@ -221,12 +239,16 @@ share/omf/services-admin/services-admin-oc.omf share/omf/services-admin/services-admin-sv.omf share/omf/shares-admin/shares-admin-C.omf share/omf/shares-admin/shares-admin-ca.omf +share/omf/shares-admin/shares-admin-de.omf +share/omf/shares-admin/shares-admin-el.omf share/omf/shares-admin/shares-admin-es.omf share/omf/shares-admin/shares-admin-fr.omf share/omf/shares-admin/shares-admin-oc.omf +share/omf/shares-admin/shares-admin-pt_BR.omf share/omf/shares-admin/shares-admin-sv.omf share/omf/time-admin/time-admin-C.omf share/omf/time-admin/time-admin-ca.omf +share/omf/time-admin/time-admin-de.omf share/omf/time-admin/time-admin-es.omf share/omf/time-admin/time-admin-fr.omf share/omf/time-admin/time-admin-oc.omf @@ -234,10 +256,12 @@ share/omf/time-admin/time-admin-ru.omf share/omf/time-admin/time-admin-sv.omf share/omf/users-admin/users-admin-C.omf share/omf/users-admin/users-admin-ca.omf +share/omf/users-admin/users-admin-de.omf share/omf/users-admin/users-admin-el.omf share/omf/users-admin/users-admin-es.omf share/omf/users-admin/users-admin-fr.omf share/omf/users-admin/users-admin-oc.omf +share/omf/users-admin/users-admin-pt_BR.omf share/omf/users-admin/users-admin-ru.omf share/omf/users-admin/users-admin-sv.omf @dirrm share/omf/users-admin @@ -250,6 +274,8 @@ share/omf/users-admin/users-admin-sv.omf @dirrm share/gnome/help/users-admin/sv @dirrm share/gnome/help/users-admin/ru/figures @dirrm share/gnome/help/users-admin/ru +@dirrm share/gnome/help/users-admin/pt_BR/figures +@dirrm share/gnome/help/users-admin/pt_BR @dirrm share/gnome/help/users-admin/oc/figures @dirrm share/gnome/help/users-admin/oc @dirrm share/gnome/help/users-admin/fr/figures @@ -258,6 +284,8 @@ share/omf/users-admin/users-admin-sv.omf @dirrm share/gnome/help/users-admin/es @dirrm share/gnome/help/users-admin/el/figures @dirrm share/gnome/help/users-admin/el +@dirrm share/gnome/help/users-admin/de/figures +@dirrm share/gnome/help/users-admin/de @dirrm share/gnome/help/users-admin/ca/figures @dirrm share/gnome/help/users-admin/ca @dirrm share/gnome/help/users-admin/C/figures @@ -275,6 +303,8 @@ share/omf/users-admin/users-admin-sv.omf @dirrm share/gnome/help/time-admin/fr @dirrm share/gnome/help/time-admin/es/figures @dirrm share/gnome/help/time-admin/es +@dirrm share/gnome/help/time-admin/de/figures +@dirrm share/gnome/help/time-admin/de @dirrm share/gnome/help/time-admin/ca/figures @dirrm share/gnome/help/time-admin/ca @dirrm share/gnome/help/time-admin/C/figures @@ -282,12 +312,18 @@ share/omf/users-admin/users-admin-sv.omf @dirrm share/gnome/help/time-admin @dirrm share/gnome/help/shares-admin/sv/figures @dirrm share/gnome/help/shares-admin/sv +@dirrm share/gnome/help/shares-admin/pt_BR/figures +@dirrm share/gnome/help/shares-admin/pt_BR @dirrm share/gnome/help/shares-admin/oc/figures @dirrm share/gnome/help/shares-admin/oc @dirrm share/gnome/help/shares-admin/fr/figures @dirrm share/gnome/help/shares-admin/fr @dirrm share/gnome/help/shares-admin/es/figures @dirrm share/gnome/help/shares-admin/es +@dirrm share/gnome/help/shares-admin/el/figures +@dirrm share/gnome/help/shares-admin/el +@dirrm share/gnome/help/shares-admin/de/figures +@dirrm share/gnome/help/shares-admin/de @dirrm share/gnome/help/shares-admin/ca/figures @dirrm share/gnome/help/shares-admin/ca @dirrm share/gnome/help/shares-admin/C/figures @@ -331,6 +367,10 @@ share/omf/users-admin/users-admin-sv.omf @dirrmtry share/locale/zh_HK @dirrmtry share/locale/xh/LC_MESSAGES @dirrmtry share/locale/xh +@dirrmtry share/locale/te/LC_MESSAGES +@dirrmtry share/locale/te +@dirrmtry share/locale/sr@latin/LC_MESSAGES +@dirrmtry share/locale/sr@latin @dirrmtry share/locale/si/LC_MESSAGES @dirrmtry share/locale/si @dirrmtry share/locale/rw/LC_MESSAGES diff --git a/sysutils/gnome-volume-manager/Makefile b/sysutils/gnome-volume-manager/Makefile index 96c63e749c9b..e685beacc2be 100644 --- a/sysutils/gnome-volume-manager/Makefile +++ b/sysutils/gnome-volume-manager/Makefile @@ -3,12 +3,11 @@ # Whom: Jean-Yves Lefort <jylefort@FreeBSD.org> # # $FreeBSD$ -# $MCom: ports/sysutils/gnome-volume-manager/Makefile,v 1.24 2008/03/15 16:48:05 marcus Exp $ +# $MCom: ports/sysutils/gnome-volume-manager/Makefile,v 1.26 2008/09/24 03:12:47 mezz Exp $ # PORTNAME= gnome-volume-manager -PORTVERSION= 2.22.5 -PORTREVISION= 1 +PORTVERSION= 2.24.0 CATEGORIES= sysutils gnome MASTER_SITES= GNOME DIST_SUBDIR= gnome2 diff --git a/sysutils/gnome-volume-manager/distinfo b/sysutils/gnome-volume-manager/distinfo index 4eeb3fde9776..d1a0db5edafe 100644 --- a/sysutils/gnome-volume-manager/distinfo +++ b/sysutils/gnome-volume-manager/distinfo @@ -1,3 +1,3 @@ -MD5 (gnome2/gnome-volume-manager-2.22.5.tar.bz2) = e761a5bdc8867419eb278c9e1a6a79ff -SHA256 (gnome2/gnome-volume-manager-2.22.5.tar.bz2) = bb2ebc93327605611849132451304e985912a4724b238b5edabe6f0a4ed54005 -SIZE (gnome2/gnome-volume-manager-2.22.5.tar.bz2) = 405349 +MD5 (gnome2/gnome-volume-manager-2.24.0.tar.bz2) = a8ae620c2633f3ac13444736ef61122a +SHA256 (gnome2/gnome-volume-manager-2.24.0.tar.bz2) = db94ac09ab1527d4e526a9b0268925881c256657a2ab7bd6de8713fd7dab9fd3 +SIZE (gnome2/gnome-volume-manager-2.24.0.tar.bz2) = 400417 diff --git a/sysutils/gnome-volume-manager/pkg-plist b/sysutils/gnome-volume-manager/pkg-plist index d20d4686ee6c..3d44d2a1eaa2 100644 --- a/sysutils/gnome-volume-manager/pkg-plist +++ b/sysutils/gnome-volume-manager/pkg-plist @@ -37,6 +37,7 @@ share/locale/is/LC_MESSAGES/gnome-volume-manager.mo share/locale/it/LC_MESSAGES/gnome-volume-manager.mo share/locale/ja/LC_MESSAGES/gnome-volume-manager.mo share/locale/ka/LC_MESSAGES/gnome-volume-manager.mo +share/locale/kn/LC_MESSAGES/gnome-volume-manager.mo share/locale/ko/LC_MESSAGES/gnome-volume-manager.mo share/locale/ku/LC_MESSAGES/gnome-volume-manager.mo share/locale/lt/LC_MESSAGES/gnome-volume-manager.mo @@ -65,7 +66,7 @@ share/locale/sk/LC_MESSAGES/gnome-volume-manager.mo share/locale/sl/LC_MESSAGES/gnome-volume-manager.mo share/locale/sq/LC_MESSAGES/gnome-volume-manager.mo share/locale/sr/LC_MESSAGES/gnome-volume-manager.mo -share/locale/sr@Latn/LC_MESSAGES/gnome-volume-manager.mo +share/locale/sr@latin/LC_MESSAGES/gnome-volume-manager.mo share/locale/sv/LC_MESSAGES/gnome-volume-manager.mo share/locale/ta/LC_MESSAGES/gnome-volume-manager.mo share/locale/te/LC_MESSAGES/gnome-volume-manager.mo @@ -87,6 +88,8 @@ share/locale/zh_TW/LC_MESSAGES/gnome-volume-manager.mo @dirrmtry share/locale/xh @dirrmtry share/locale/te/LC_MESSAGES @dirrmtry share/locale/te +@dirrmtry share/locale/sr@latin/LC_MESSAGES +@dirrmtry share/locale/sr@latin @dirrmtry share/locale/si/LC_MESSAGES @dirrmtry share/locale/si @dirrmtry share/locale/rw/LC_MESSAGES diff --git a/sysutils/hal/Makefile b/sysutils/hal/Makefile index bccb417b1c3d..07168189bcca 100644 --- a/sysutils/hal/Makefile +++ b/sysutils/hal/Makefile @@ -3,12 +3,12 @@ # Whom: Joe Marcus Clarke <marcus@FreeBSD.org> # # $FreeBSD$ -# $MCom: ports/sysutils/hal/Makefile,v 1.43 2008/03/22 19:31:15 marcus Exp $ +# $MCom: ports/sysutils/hal/Makefile,v 1.54 2008/12/21 06:20:19 marcus Exp $ # PORTNAME= hal DISTVERSION= 0.5.11 -PORTREVISION= 1 +PORTREVISION= 10 CATEGORIES= sysutils MASTER_SITES= http://hal.freedesktop.org/releases/ @@ -22,7 +22,7 @@ RUN_DEPENDS= ${LOCALBASE}/share/pciids/pci.ids:${PORTSDIR}/misc/pciids USE_GETTEXT= yes USE_GMAKE= yes -USE_GNOME= gnomehack gnometarget intlhack ltverhack +USE_GNOME= gnomehack intlhack ltverhack USE_AUTOTOOLS= libtool:15 USE_LDCONFIG= yes USE_PYTHON= yes @@ -43,7 +43,7 @@ CONFIGURE_ARGS= --disable-gtk-doc \ --with-pid-file=/var/run/hald/hald.pid \ --with-deprecated-keys \ --localstatedir=/var -CONFIGURE_ENV= CPPFLAGS="-I${LOCALBASE}/include" \ +CONFIGURE_ENV= CPPFLAGS="-I${LOCALBASE}/include -DHAVE_CK_0_3" \ LDFLAGS="-L${LOCALBASE}/lib" \ GTKDOC="false" @@ -94,6 +94,8 @@ post-patch: ${WRKSRC}/hald/Makefile.in @${REINPLACE_CMD} -e 's|user="0"|group="operator"|g' \ ${WRKSRC}/hal.conf.in + @${SED} -e 's|%%LOCALBASE%%|${LOCALBASE}|' \ + < ${FILESDIR}/README.fuse > ${WRKDIR}/README.fuse post-install: ${MKDIR} ${DATADIR}/dist @@ -101,6 +103,8 @@ post-install: ${MKDIR} ${PREFIX}/share/hal/fdi/policy/10osvendor ${INSTALL_DATA} ${FILESDIR}/10-mouse-sysmouse.fdi \ ${PREFIX}/share/hal/fdi/policy/10osvendor + ${INSTALL_SCRIPT} ${FILESDIR}/mount-fuse \ + ${PREFIX}/share/hal/mount-fuse .if !defined(PACKAGE_BUILDING) @${SETENV} PKG_PREFIX=${PREFIX} \ ${SH} ${PKGINSTALL} ${PKGNAME} POST-INSTALL @@ -112,6 +116,8 @@ post-install: ${MKDIR} ${DOCSDIR} ${INSTALL_DATA} ${WRKSRC}/hald/freebsd/README \ ${DOCSDIR}/README.freebsd + ${INSTALL_DATA} ${WRKDIR}/README.fuse \ + ${DOCSDIR}/README.fuse .endif .include <bsd.port.post.mk> diff --git a/sysutils/hal/files/README.fuse b/sysutils/hal/files/README.fuse new file mode 100644 index 000000000000..75adcab7d589 --- /dev/null +++ b/sysutils/hal/files/README.fuse @@ -0,0 +1,31 @@ +Mounting Fuse File Systems with HAL +----------------------------------- + +$FreeBSD$ + +Hal supports mounting Fuse device-backed file systems (e.g. NTFS). To enable +this feature, copy the included %%LOCALBASE%%/share/hal/mount-fuse script +to /sbin. Make sure this script is executable. Edit the script, and change +the FUSE_HELPER environment variable to the name of the executable which +will actually mount the Fuse volume (e.g. for NTFS, this is ``ntfs-3g''). + +Finally, the script must be renamed to ``mount_FSNAME''. FSNAME is the name +of the file system type (e.g. for NTFS, this is ``ntfs''). If there is +already an executable in /sbin or /usr/sbin with this name, the +existing executable must be renamed or deleted. + +As is stated in the examples above, overriding FreeBSD's existing NTFS +support with Fuse's ntfs-3g is the most common use case for this. The +ntfs-3g Fuse driver uses different mount options than FreeBSD's included +mount_ntfs. GNOME transparently supports switching between ntfs and +ntfs-3g. Simply edit the following GConf key in the GNOME +Configuration Editor (i.e. gconf-editor): + +/system/storage/default_options/ntfs/fstype_override + +Set the value to ``ntfs-3g'', then add your desired ntfs-3g options to the +following GConf key: + +/system/storage/default_options/ntfs-3g/mount_options + +Other desktop systems may have similar options. diff --git a/sysutils/hal/files/hald.in b/sysutils/hal/files/hald.in index 7f8f2c659c86..04e784e6ce6f 100644 --- a/sysutils/hal/files/hald.in +++ b/sysutils/hal/files/hald.in @@ -1,6 +1,7 @@ #!/bin/sh # # $FreeBSD$ +# $MCom: ports/sysutils/hal/files/hald.in,v 1.14 2008/08/21 16:04:48 mezz Exp $ # # PROVIDE: hald # REQUIRE: DAEMON usbd devd dbus diff --git a/sysutils/hal/files/mount-fuse b/sysutils/hal/files/mount-fuse new file mode 100644 index 000000000000..ae906a8140d3 --- /dev/null +++ b/sysutils/hal/files/mount-fuse @@ -0,0 +1,129 @@ +#!/bin/sh +# Wrapper script for FreeBSD and PC-BSD, which takes calls from HAL +# for running mount_ntfs, and performs it with a given FUSE helper. +################################################################### + +## Modify this next variable to point to the correct FUSE helper. +FUSE_HELPER="ntfs-3g" +## DO NOT modify anything below this. + +FUSEDB="/tmp" +if [ -n "${TMPDIR}" ] +then + FUSEDB=${TMPDIR} +fi + +FUSEDB="${FUSEDB}/.fuse-mnts" +MNTSTRING="" +OPTIONS="" +FOUNDOPT="0" +FOUNDU="0" +HWDEV="" +FOUNDDEV="0" + +for i in $@ +do + if [ "$FOUNDOPT" = "1" ] + then + OPTIONS="${OPTIONS} -o ${i}" + elif [ "${FOUNDU}" = "1" ] + then + OPTIONS="${OPTIONS} -o uid=${i}" + else + + if [ "${FOUNDDEV}" = "1" ] + then + # Save the mount-point, will be used later + MNTPOINT="${i}" + FOUNDDEV="2" + fi + + echo ${i}| grep -q "/dev" 2>/dev/null + if [ "$?" = "0" -a "${FOUNDDEV}" = "0" ] + then + FOUNDDEV="1" + # Lets check if we were given a fuse[] device + # or a real device name + echo "${i}" | grep -q "fuse" 2>/dev/null + if [ "$?" = "0" ] + then + # Lets save the old fuse device name we had saved + OLDFUSE="${i}" + + # Lets get the *real* device name for FUSE helper + REALHWDEV="`cat ${FUSEDB} | grep ${i} | cut -d '=' -f 2`" + + # Now lets change the string we will be saving + i="${REALHWDEV}" + else + # We are doing a first time mount of this device + + # Set the real device name for mounting + REALHWDEV="${i}" + fi + fi + + # Add the value to our mount string + if [ "${i}" != "-o" -a "${i}" != "-u" ] + then + MNTSTRING="${MNTSTRING} ${i}" + fi + + fi + + # Check if we are on a -u flag now + if [ "${i}" = "-u" ] + then + FOUNDU="1" + else + FOUNDU="0" + fi + + # Check if we are on a -o option + if [ "${i}" = "-o" ] + then + FOUNDOPT="1" + else + FOUNDOPT="0" + fi +done + +# Save our final string which our FUSE helper will use +FINALSTRING="${MNTSTRING} ${OPTIONS}" + + +# Check that fuse.ko is loaded +kldstat | grep -q fuse 2>/dev/null +if [ "$?" != "0" ] +then + kldload /usr/local/modules/fuse.ko +fi + +# Run the FUSE helper command now, with the options in the right order +${FUSE_HELPER} ${FINALSTRING} + +# If we have an OLDFUSE variable, lets clear it from the list +if [ ! -z "${OLDFUSE}" -a -e ${FUSEDB} ] +then + cat ${FUSEDB} | grep -v "${OLDFUSE}=" > /tmp/.newfuse + mv /tmp/.newfuse ${FUSEDB} +fi + +# Now lets figure out which fuse device was used and save it to DB +NEWFUSE="`mount | tr -s ' ' | grep \" ${MNTPOINT} \" | cut -d ' ' -f 1`" + +# Make sure we don't already have this fuse device listed +if [ -e ${FUSEDB} ] +then + cat ${FUSEDB} | grep -v "${NEWFUSE}=" > /tmp/.newfuse + mv /tmp/.newfuse ${FUSEDB} +else + touch ${FUSEDB} +fi + +# Save the fuse device to our DB +echo "${NEWFUSE}=${REALHWDEV}" >> ${FUSEDB} + + +# Finished! +exit 0 diff --git a/sysutils/hal/files/patch-consolekit03 b/sysutils/hal/files/patch-consolekit03 new file mode 100644 index 000000000000..a948b189b18e --- /dev/null +++ b/sysutils/hal/files/patch-consolekit03 @@ -0,0 +1,87 @@ +diff -p -up hal-0.5.11/configure.in.ck03 hal-0.5.11/configure.in +--- hal-0.5.11/configure.in.ck03 2008-05-07 19:24:31.000000000 -0400 ++++ configure.in 2008-08-11 06:18:07.000000000 -0400 +@@ -485,6 +485,20 @@ if test "x$enable_console_kit" != "xno"; + AM_CONDITIONAL(HAVE_CONKIT, true) + AC_DEFINE(HAVE_CONKIT, [], [Set if we use ConsoleKit]) + msg_conkit=yes ++ # yes this is ugly, but there is no other way to get the version of CK ++ AC_MSG_CHECKING([if ConsoleKit version 0.3.0 or newer]) ++ if $PKG_CONFIG --atleast-version=0.3.0 ck-connector; then ++ AC_MSG_RESULT([yes]) ++ AC_DEFINE(HAVE_CK_0_3, 1, [Define to 1 if ConsoleKit is v0.3.0 or newer]) ++ else ++ if $PKG_CONFIG --max-version=0.2.10 ck-connector; then ++ AC_MSG_RESULT([no]) ++ else ++ #assume we have the latest version ++ AC_MSG_WARN([Couldn't detect ConsoleKit version, install the devel package, assume for now you use >= 0.3.0]) ++ AC_DEFINE(HAVE_CK_0_3, 1, [Define to 1 if ConsoleKit is v0.3.0 or newer]) ++ fi ++ fi + fi + + AC_PATH_PROG(GPERF, [gperf], [no]) +diff -p -up hal-0.5.11/hald/ck-tracker.c.ck03 hal-0.5.11/hald/ck-tracker.c +--- hal-0.5.11/hald/ck-tracker.c.ck03 2008-05-07 19:23:48.000000000 -0400 ++++ hald/ck-tracker.c 2008-08-12 12:34:47.000000000 -0400 +@@ -256,7 +256,11 @@ ck_session_get_info (CKTracker *tracker, + goto error; + } + if (!dbus_message_get_args (reply, NULL, ++#ifdef HAVE_CK_0_3 ++ DBUS_TYPE_UINT32, &(session->user), ++#else + DBUS_TYPE_INT32, &(session->user), ++#endif + DBUS_TYPE_INVALID)) { + HAL_ERROR (("Invalid GetUnixUser reply from CK")); + goto error; +@@ -531,7 +535,11 @@ ck_tracker_process_system_bus_message (C + seat_objpath = dbus_message_get_path (message); + + if (!dbus_message_get_args (message, NULL, ++#ifdef HAVE_CK_0_3 ++ DBUS_TYPE_OBJECT_PATH, &seat_objpath, ++#else + DBUS_TYPE_STRING, &seat_objpath, ++#endif + DBUS_TYPE_INVALID)) { + HAL_ERROR (("Invalid SeatAdded signal from CK")); + goto out; +@@ -558,7 +566,11 @@ ck_tracker_process_system_bus_message (C + seat_objpath = dbus_message_get_path (message); + + if (!dbus_message_get_args (message, NULL, ++#ifdef HAVE_CK_0_3 ++ DBUS_TYPE_OBJECT_PATH, &seat_objpath, ++#else + DBUS_TYPE_STRING, &seat_objpath, ++#endif + DBUS_TYPE_INVALID)) { + HAL_ERROR (("Invalid SeatRemoved signal from CK")); + goto out; +@@ -588,7 +600,11 @@ ck_tracker_process_system_bus_message (C + seat_objpath = dbus_message_get_path (message); + + if (!dbus_message_get_args (message, NULL, ++#ifdef HAVE_CK_0_3 ++ DBUS_TYPE_OBJECT_PATH, &session_objpath, ++#else + DBUS_TYPE_STRING, &session_objpath, ++#endif + DBUS_TYPE_INVALID)) { + HAL_ERROR (("Invalid SessionAdded signal from CK")); + goto out; +@@ -624,7 +640,11 @@ ck_tracker_process_system_bus_message (C + seat_objpath = dbus_message_get_path (message); + + if (!dbus_message_get_args (message, NULL, ++#ifdef HAVE_CK_0_3 ++ DBUS_TYPE_OBJECT_PATH, &session_objpath, ++#else + DBUS_TYPE_STRING, &session_objpath, ++#endif + DBUS_TYPE_INVALID)) { + HAL_ERROR (("Invalid SessionRemoved signal from CK")); + goto out; diff --git a/sysutils/hal/files/patch-hald_freebsd_addons_Makefile.in b/sysutils/hal/files/patch-hald_freebsd_addons_Makefile.in index beb677fa943a..f554c0650f3e 100644 --- a/sysutils/hal/files/patch-hald_freebsd_addons_Makefile.in +++ b/sysutils/hal/files/patch-hald_freebsd_addons_Makefile.in @@ -1,5 +1,5 @@ ---- hald/freebsd/addons/Makefile.in.orig 2008-03-27 00:45:50.000000000 -0400 -+++ hald/freebsd/addons/Makefile.in 2008-03-27 00:48:15.000000000 -0400 +--- hald/freebsd/addons/Makefile.in.orig 2008-12-13 12:08:36.000000000 -0500 ++++ hald/freebsd/addons/Makefile.in 2008-12-20 21:16:41.000000000 -0500 @@ -33,7 +33,8 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @@ -39,19 +39,20 @@ ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -@@ -227,6 +239,11 @@ hald_addon_storage_SOURCES = addon-stora +@@ -229,6 +241,12 @@ hald_addon_storage_SOURCES = addon-stora hald_addon_storage_LDADD = \ $(top_builddir)/hald/freebsd/libprobe/libhald_freebsd_probe.la +hald_addon_mouse_sysmouse_SOURCES = addon-mouse.c +hald_addon_mouse_sysmouse_CFLAGS = $(AM_CPPFLAGS) @GLIB_CFLAGS@ +hald_addon_mouse_sysmouse_LDADD = @GLIB_LIBS@ \ ++ -lutil \ + $(top_builddir)/hald/freebsd/libprobe/libhald_freebsd_probe.la + all: all-am .SUFFIXES: -@@ -288,6 +305,9 @@ clean-libexecPROGRAMS: +@@ -290,6 +308,9 @@ clean-libexecPROGRAMS: echo " rm -f $$p $$f"; \ rm -f $$p $$f ; \ done @@ -61,7 +62,7 @@ hald-addon-storage$(EXEEXT): $(hald_addon_storage_OBJECTS) $(hald_addon_storage_DEPENDENCIES) @rm -f hald-addon-storage$(EXEEXT) $(LINK) $(hald_addon_storage_OBJECTS) $(hald_addon_storage_LDADD) $(LIBS) -@@ -299,6 +319,7 @@ distclean-compile: +@@ -301,6 +322,7 @@ distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/addon-storage.Po@am__quote@ @@ -69,7 +70,7 @@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@@ -321,6 +342,20 @@ distclean-compile: +@@ -323,6 +345,20 @@ distclean-compile: @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< diff --git a/sysutils/hal/files/patch-hald_freebsd_addons_addon-mouse.c b/sysutils/hal/files/patch-hald_freebsd_addons_addon-mouse.c index 21e413123908..70da9b2af8c6 100644 --- a/sysutils/hal/files/patch-hald_freebsd_addons_addon-mouse.c +++ b/sysutils/hal/files/patch-hald_freebsd_addons_addon-mouse.c @@ -1,6 +1,6 @@ ---- hald/freebsd/addons/addon-mouse.c.orig 2008-03-31 04:53:42.000000000 -0400 -+++ hald/freebsd/addons/addon-mouse.c 2008-03-31 05:07:19.000000000 -0400 -@@ -0,0 +1,216 @@ +--- hald/freebsd/addons/addon-mouse.c.orig 2008-12-21 01:15:41.000000000 -0500 ++++ hald/freebsd/addons/addon-mouse.c 2008-12-21 01:17:03.000000000 -0500 +@@ -0,0 +1,336 @@ +/*************************************************************************** + * CVSID: $Id$ + * @@ -28,6 +28,13 @@ +# include <config.h> +#endif + ++#include <sys/param.h> ++#if __FreeBSD_version >= 800058 ++#include <sys/types.h> ++#include <sys/user.h> ++#include <sys/sysctl.h> ++#include <libutil.h> ++#endif +#include <string.h> +#include <stdlib.h> +#include <assert.h> @@ -38,7 +45,9 @@ + +#include "../libprobe/hfp.h" + ++#if __FreeBSD_version < 800058 +#define CMD "/usr/bin/fstat %s" ++#endif + +#define MOUSE_DRIVER "mouse" +#define MOUSED_DEVICE "/dev/sysmouse" @@ -47,11 +56,121 @@ + +static struct +{ -+ const struct timespec update_interval; -+ char *device_file; -+ struct timespec next_update; ++ const struct timespec update_interval; ++ char *device_file; ++ struct timespec next_update; +} addon = { { 2, 0 } }; + ++#if __FreeBSD_version >= 800058 ++static struct kinfo_proc * ++hfp_kinfo_getproc (int *cntp) ++{ ++ int mib[3]; ++ int error; ++ int cnt; ++ size_t len; ++ char *buf, *bp, *eb; ++ struct kinfo_proc *kip, *kp, *ki; ++ ++ *cntp = 0; ++ ++ len = 0; ++ mib[0] = CTL_KERN; ++ mib[1] = KERN_PROC; ++ mib[2] = KERN_PROC_PROC; ++ ++ error = sysctl(mib, 3, NULL, &len, NULL, 0); ++ if (error) ++ return NULL; ++ ++ len = len * 4 / 3; ++ buf = (char *) g_malloc(len); ++ if (buf == NULL) ++ return NULL; ++ ++ error = sysctl(mib, 3, buf, &len, NULL, 0); ++ if (error) ++ { ++ g_free(buf); ++ return NULL; ++ } ++ ++ cnt = 0; ++ bp = buf; ++ eb = buf + len; ++ while (bp < eb) ++ { ++ ki = (struct kinfo_proc *) (uintptr_t) bp; ++ bp += ki->ki_structsize; ++ cnt++; ++ } ++ ++ kip = calloc(cnt, sizeof (*kip)); ++ if (kip == NULL) ++ { ++ g_free(buf); ++ return NULL; ++ } ++ ++ bp = buf; ++ eb = buf + len; ++ kp = kip; ++ while (bp < eb) ++ { ++ ki = (struct kinfo_proc *) (uintptr_t) bp; ++ memcpy(kp, ki, ki->ki_structsize); ++ bp += ki->ki_structsize; ++ kp->ki_structsize = sizeof(*kp); ++ kp++; ++ } ++ ++ g_free(buf); ++ *cntp = cnt; ++ return kip; ++} ++ ++static gboolean ++device_opened_by_proc (const char *device, const char *proc) ++{ ++ struct kinfo_proc *kip, *pfreep; ++ int cnt, i; ++ ++ pfreep = hfp_kinfo_getproc(&cnt); ++ if (pfreep == NULL) ++ return FALSE; ++ ++ for (i = 0; i < cnt; i++) ++ { ++ kip = &pfreep[i]; ++ ++ if (! strcmp(kip->ki_comm, proc)) ++ { ++ struct kinfo_file *kif, *ffreep; ++ int fcnt, j; ++ ++ ffreep = kinfo_getfile(kip->ki_pid, &fcnt); ++ if (ffreep == NULL) ++ continue; ++ for (j = 0; j < fcnt; j++) ++ { ++ kif = &ffreep[j]; ++ ++ if (kif->kf_type == KF_TYPE_VNODE && ++ ! strcmp(kif->kf_path, device)) ++ { ++ g_free(ffreep); ++ g_free(pfreep); ++ return TRUE; ++ } ++ } ++ g_free(ffreep); ++ } ++ } ++ g_free(pfreep); ++ ++ return FALSE; ++} ++#else +static gboolean +device_opened_by_proc (const char *device, const char *proc) +{ @@ -91,16 +210,16 @@ + if (len < 2) + { + g_strfreev(fields); -+ continue; -+ } ++ continue; ++ } + for (j = 1; j < len && fields[j] && *fields[j] == '\0'; j++) + ; + if (j < len && fields[j] && ! strcmp(fields[j], proc)) + { + found = TRUE; + g_strfreev(fields); -+ break; -+ } ++ break; ++ } + g_strfreev(fields); + } + @@ -111,6 +230,7 @@ + + return found; +} ++#endif + +static const char * +get_mouse_device (const char *device) @@ -186,27 +306,27 @@ + { + /* process dbus traffic until update interval has elapsed */ + while (TRUE) -+ { -+ struct timespec now; -+ -+ hfp_clock_gettime(&now); -+ if (hfp_timespeccmp(&now, &addon.next_update, <)) -+ { -+ struct timespec timeout; -+ -+ timeout = addon.next_update; -+ hfp_timespecsub(&timeout, &now); -+ -+ if (timeout.tv_sec < 0) /* current time went backwards */ -+ timeout = addon.update_interval; -+ -+ dbus_connection_read_write_dispatch(connection, timeout.tv_sec * 1000 + timeout.tv_nsec / 1000000); -+ if (! dbus_connection_get_is_connected(connection)) -+ goto end; -+ } -+ else -+ break; -+ } ++ { ++ struct timespec now; ++ ++ hfp_clock_gettime(&now); ++ if (hfp_timespeccmp(&now, &addon.next_update, <)) ++ { ++ struct timespec timeout; ++ ++ timeout = addon.next_update; ++ hfp_timespecsub(&timeout, &now); ++ ++ if (timeout.tv_sec < 0) /* current time went backwards */ ++ timeout = addon.update_interval; ++ ++ dbus_connection_read_write_dispatch(connection, timeout.tv_sec * 1000 + timeout.tv_nsec / 1000000); ++ if (! dbus_connection_get_is_connected(connection)) ++ goto end; ++ } ++ else ++ break; ++ } + + poll_for_moused(); + diff --git a/sysutils/hal/files/patch-hald_freebsd_hf-volume.c b/sysutils/hal/files/patch-hald_freebsd_hf-volume.c new file mode 100644 index 000000000000..039a1a6760f4 --- /dev/null +++ b/sysutils/hal/files/patch-hald_freebsd_hf-volume.c @@ -0,0 +1,102 @@ +--- hald/freebsd/hf-volume.c.orig 2008-05-07 19:24:03.000000000 -0400 ++++ hald/freebsd/hf-volume.c 2008-10-26 15:17:09.000000000 -0400 +@@ -45,6 +45,7 @@ + #include "hf-util.h" + + #define PROBE_VOLUME_TIMEOUT (HAL_HELPER_TIMEOUT * 6) ++#define HF_VOLUME_FUSE_DB "/tmp/.fuse-mnts" + + static void + hf_volume_get_mounts (struct statfs **mounts, int *n_mounts) +@@ -60,6 +61,55 @@ hf_volume_get_mounts (struct statfs **mo + } + } + ++static char * ++hf_volume_resolve_fuse (const char *special) ++{ ++ gchar *contents; ++ gchar **lines; ++ gsize len; ++ int i; ++ ++ g_return_val_if_fail(special != NULL, NULL); ++ ++ if (! g_file_get_contents(HF_VOLUME_FUSE_DB, &contents, &len, NULL)) ++ return g_strdup(special); ++ ++ lines = g_strsplit(contents, "\n", 0); ++ g_free(contents); ++ ++ for (i = 0; lines && lines[i]; i++) ++ { ++ gchar **fields; ++ ++ fields = g_strsplit(lines[i], "=", 2); ++ if (fields && g_strv_length(fields) == 2) ++ { ++ if (strcmp(fields[0], special) == 0) ++ { ++ g_strfreev(fields); ++ g_strfreev(lines); ++ return g_strdup(fields[1]); ++ } ++ } ++ g_strfreev(fields); ++ } ++ ++ g_strfreev(lines); ++ ++ return g_strdup(special); ++} ++ ++static char * ++hf_volume_resolve_special (const char *special) ++{ ++ g_return_val_if_fail(special != NULL, NULL); ++ ++ if (strstr(special, "fuse")) ++ return hf_volume_resolve_fuse(special); ++ ++ return g_strdup(special); ++} ++ + static const struct statfs * + hf_volume_mounts_find (const struct statfs *mounts, + int n_mounts, +@@ -71,8 +121,18 @@ hf_volume_mounts_find (const struct stat + g_return_val_if_fail(special != NULL, NULL); + + for (i = 0; i < n_mounts; i++) +- if (! strcmp(mounts[i].f_mntfromname, special)) +- return &mounts[i]; ++ { ++ char *resolved; ++ ++ resolved = hf_volume_resolve_special(mounts[i].f_mntfromname); ++ if (! strcmp(resolved, special)) ++ { ++ g_free(resolved); ++ return &mounts[i]; ++ } ++ ++ g_free(resolved); ++ } + + return NULL; + } +@@ -92,7 +152,13 @@ hf_volume_device_update_mount_properties + + special = hal_device_property_get_string(device, "block.device"); + if (special) +- mount = hf_volume_mounts_find(mounts, n_mounts, special); ++ { ++ mount = hf_volume_mounts_find(mounts, n_mounts, special); ++ if (mount && strcmp(special, mount->f_mntfromname)) ++ hal_device_property_set_string(device, "volume.freebsd.real_mounted_device", mount->f_mntfromname); ++ else ++ hal_device_property_remove(device, "volume.freebsd.real_mounted_device"); ++ } + } + + hal_device_property_set_bool(device, "volume.is_mounted", mount != NULL); diff --git a/sysutils/hal/files/patch-tools_hal-storage-eject.c b/sysutils/hal/files/patch-tools_hal-storage-eject.c new file mode 100644 index 000000000000..730e2a076d1c --- /dev/null +++ b/sysutils/hal/files/patch-tools_hal-storage-eject.c @@ -0,0 +1,11 @@ +--- tools/hal-storage-eject.c.orig 2008-10-27 13:23:11.000000000 -0400 ++++ tools/hal-storage-eject.c 2008-10-27 13:23:23.000000000 -0400 +@@ -190,7 +190,7 @@ main (int argc, char *argv[]) + unknown_eject_error ("Cannot obtain lock on /media/.hal-mtab"); + } + handle_unmount (hal_ctx, +- udi, volume_to_unmount, drive, ++ volume_udi, volume_to_unmount, drive, + libhal_volume_get_device_file (volume_to_unmount), + invoked_by_uid, invoked_by_syscon_name, + FALSE, FALSE); /* use neither lazy nor force */ diff --git a/sysutils/hal/files/patch-tools_hal-storage-mount.c b/sysutils/hal/files/patch-tools_hal-storage-mount.c index c270893c2b2c..390d35111481 100644 --- a/sysutils/hal/files/patch-tools_hal-storage-mount.c +++ b/sysutils/hal/files/patch-tools_hal-storage-mount.c @@ -1,11 +1,91 @@ ---- tools/hal-storage-mount.c.orig 2008-04-29 20:05:38.000000000 -0400 -+++ tools/hal-storage-mount.c 2008-04-29 20:05:44.000000000 -0400 -@@ -56,7 +56,7 @@ +--- tools/hal-storage-mount.c.orig 2008-05-07 19:24:23.000000000 -0400 ++++ tools/hal-storage-mount.c 2008-10-09 00:54:34.000000000 -0400 +@@ -56,8 +56,9 @@ #ifdef __FreeBSD__ #define MOUNT "/sbin/mount" -#define MOUNT_OPTIONS "noexec,nosuid" +#define MOUNT_OPTIONS "nosuid" #define MOUNT_TYPE_OPT "-t" ++#define FUSE_DB "/tmp/.fuse-mnts" #elif sun #define MOUNT "/sbin/mount" + #define MOUNT_OPTIONS "noexec,nosuid" +@@ -255,6 +256,51 @@ out: + return f; + } + ++#ifdef __FreeBSD__ ++static char * ++resolve_fuse (const char *special) ++{ ++ gchar *contents; ++ gchar **lines; ++ gsize len; ++ int i; ++ ++ if (! g_file_get_contents (FUSE_DB, &contents, &len, NULL)) ++ return g_strdup (special); ++ ++ lines = g_strsplit (contents, "\n", 0); ++ g_free (contents); ++ ++ for (i = 0; lines && lines[i]; i++) { ++ gchar **fields; ++ ++ fields = g_strsplit (lines[i], "=", 2); ++ if (fields && g_strv_length (fields) == 2) { ++ if (strcmp (fields[0], special) == 0) { ++ g_strfreev (fields); ++ g_strfreev (lines); ++ return g_strdup (fields[1]); ++ } ++ } ++ g_strfreev (fields); ++ } ++ ++ g_strfreev (lines); ++ ++ return g_strdup (special); ++} ++#endif ++ ++static char * ++resolve_special (const char *special) ++{ ++#ifdef __FreeBSD__ ++ if (strstr(special, "fuse")) ++ return resolve_fuse (special); ++#endif ++ return g_strdup (special); ++} ++ + static LibHalVolume * + volume_findby (LibHalContext *hal_ctx, const char *property, const char *value) + { +@@ -400,18 +446,20 @@ device_is_mounted (const char *device, c + unknown_error ("Cannot open /etc/mtab or equivalent"); + } + while (((entry = mtab_next (handle, mount_point)) != NULL) && (ret == FALSE)) { +- char *resolved; ++ char *resolved, *rspecial; + + resolved = resolve_symlink (entry); ++ rspecial = resolve_special (resolved); ++ g_free (resolved); + #ifdef DEBUG +- printf ("/proc/mounts: device %s -> %s \n", entry, resolved); ++ printf ("/proc/mounts: device %s -> %s \n", entry, rspecial); + #endif +- if (strcmp (device, resolved) == 0) { +- printf ("%s (-> %s) found in mount list. Not mounting.\n", entry, resolved); ++ if (strcmp (device, rspecial) == 0) { ++ printf ("%s (-> %s) found in mount list. Not mounting.\n", entry, rspecial); + ret = TRUE; + } + +- g_free (resolved); ++ g_free (rspecial); + } + mtab_close (handle); + return ret; diff --git a/sysutils/hal/files/patch-tools_hal-storage-shared.c b/sysutils/hal/files/patch-tools_hal-storage-shared.c new file mode 100644 index 000000000000..1ed7fe907bac --- /dev/null +++ b/sysutils/hal/files/patch-tools_hal-storage-shared.c @@ -0,0 +1,45 @@ +--- tools/hal-storage-shared.c.orig 2008-05-07 19:24:24.000000000 -0400 ++++ tools/hal-storage-shared.c 2008-10-20 14:53:35.000000000 -0400 +@@ -297,6 +297,9 @@ handle_unmount (LibHalContext *hal_ctx, + char *mount_point_to_unmount; + gboolean mounted_by_other_uid; + FILE *hal_mtab_new; ++#ifdef __FreeBSD__ ++ char *rdevice = NULL; ++#endif + + #ifdef DEBUG + printf ("device = %s\n", device); +@@ -473,7 +476,20 @@ line_found: + #endif + if (option_force) + args[na++] = "-f"; +- args[na++] = (char *) device; ++#ifdef __FreeBSD__ ++ dbus_error_init (&error); ++ if (libhal_device_property_exists (hal_ctx, udi, "volume.freebsd.real_mounted_device", NULL)) { ++ rdevice = libhal_device_get_property_string (hal_ctx, udi, "volume.freebsd.real_mounted_device", &error); ++ if (dbus_error_is_set (&error)) { ++ dbus_error_free (&error); ++ unknown_error ("Error while getting volume.freebsd.real_mounted_device"); ++ } ++ } ++ if (rdevice) ++ args[na++] = rdevice; ++ else ++#endif ++ args[na++] = (char *) device; + args[na++] = NULL; + + #ifdef DEBUG +@@ -497,6 +513,10 @@ line_found: + unknown_error ("Cannot spawn " UMOUNT); + } + ++#ifdef __FreeBSD__ ++ g_free (rdevice); ++#endif ++ + /* check if unmount was succesful */ + if (exit_status != 0) { + printf ("%s error %d, stdout='%s', stderr='%s'\n", UMOUNT, exit_status, sout, serr); diff --git a/sysutils/hal/pkg-plist b/sysutils/hal/pkg-plist index 1c75cccbe755..f42809179477 100644 --- a/sysutils/hal/pkg-plist +++ b/sysutils/hal/pkg-plist @@ -72,6 +72,7 @@ libexec/hald-probe-volume libexec/hald-runner sbin/hald %%PORTDOCS%%%%DOCSDIR%%/README.freebsd +%%PORTDOCS%%%%DOCSDIR%%/README.fuse %%DATADIR%%/dist/hal.conf %%DATADIR%%/fdi/fdi.dtd %%DATADIR%%/fdi/information/10freedesktop/01-deprecated-keys.fdi @@ -87,6 +88,7 @@ sbin/hald %%DATADIR%%/fdi/policy/10osvendor/15-storage-luks.fdi %%DATADIR%%/fdi/policy/10osvendor/20-storage-methods.fdi %%DATADIR%%/fdi/policy/10osvendor/30-wol.fdi +%%DATADIR%%/mount-fuse share/PolicyKit/policy/org.freedesktop.hal.dockstation.policy share/PolicyKit/policy/org.freedesktop.hal.killswitch.policy share/PolicyKit/policy/org.freedesktop.hal.policy diff --git a/sysutils/nautilus-cd-burner/Makefile b/sysutils/nautilus-cd-burner/Makefile index 454f6ac094c1..ae80ed4ae28b 100644 --- a/sysutils/nautilus-cd-burner/Makefile +++ b/sysutils/nautilus-cd-burner/Makefile @@ -3,12 +3,11 @@ # Whom: Joe Marcus Clarke <marcus@FreeBSD.org> # # $FreeBSD$ -# $MCom: ports/sysutils/nautilus-cd-burner/Makefile,v 1.141 2008/03/15 19:36:22 ahze Exp $ +# $MCom: ports/sysutils/nautilus-cd-burner/Makefile,v 1.144 2008/09/24 03:36:45 mezz Exp $ # PORTNAME= nautilus-cd-burner -PORTVERSION= 2.22.1 -PORTREVISION= 2 +PORTVERSION= 2.24.0 CATEGORIES= sysutils gnome MASTER_SITES= GNOME DIST_SUBDIR= gnome2 diff --git a/sysutils/nautilus-cd-burner/distinfo b/sysutils/nautilus-cd-burner/distinfo index 86e267e08488..c4bc507dd271 100644 --- a/sysutils/nautilus-cd-burner/distinfo +++ b/sysutils/nautilus-cd-burner/distinfo @@ -1,3 +1,3 @@ -MD5 (gnome2/nautilus-cd-burner-2.22.1.tar.bz2) = 6bf96cb55a11813a26118eabafa69143 -SHA256 (gnome2/nautilus-cd-burner-2.22.1.tar.bz2) = 33cfc61e8f1913350b4796b446010d7f9a9246783b01b93eafdc87ba06cac5ab -SIZE (gnome2/nautilus-cd-burner-2.22.1.tar.bz2) = 735353 +MD5 (gnome2/nautilus-cd-burner-2.24.0.tar.bz2) = eb211dd03d0518263fa4eadccc3caa88 +SHA256 (gnome2/nautilus-cd-burner-2.24.0.tar.bz2) = d4ff952115a2fca28c613ce6a2b46740ce1000b0c213c482bcf3f127ceab99ad +SIZE (gnome2/nautilus-cd-burner-2.24.0.tar.bz2) = 725247 diff --git a/sysutils/nautilus-cd-burner/pkg-plist b/sysutils/nautilus-cd-burner/pkg-plist index 635ccb6e5989..867ac3603427 100644 --- a/sysutils/nautilus-cd-burner/pkg-plist +++ b/sysutils/nautilus-cd-burner/pkg-plist @@ -87,7 +87,7 @@ share/locale/sk/LC_MESSAGES/nautilus-cd-burner.mo share/locale/sl/LC_MESSAGES/nautilus-cd-burner.mo share/locale/sq/LC_MESSAGES/nautilus-cd-burner.mo share/locale/sr/LC_MESSAGES/nautilus-cd-burner.mo -share/locale/sr@Latn/LC_MESSAGES/nautilus-cd-burner.mo +share/locale/sr@latin/LC_MESSAGES/nautilus-cd-burner.mo share/locale/sv/LC_MESSAGES/nautilus-cd-burner.mo share/locale/ta/LC_MESSAGES/nautilus-cd-burner.mo share/locale/te/LC_MESSAGES/nautilus-cd-burner.mo @@ -122,6 +122,8 @@ share/locale/zh_TW/LC_MESSAGES/nautilus-cd-burner.mo @dirrmtry share/locale/ug @dirrmtry share/locale/te/LC_MESSAGES @dirrmtry share/locale/te +@dirrmtry share/locale/sr@latin/LC_MESSAGES +@dirrmtry share/locale/sr@latin @dirrmtry share/locale/si/LC_MESSAGES @dirrmtry share/locale/si @dirrmtry share/locale/rw/LC_MESSAGES diff --git a/sysutils/pessulus/Makefile b/sysutils/pessulus/Makefile index a3dcfe686a48..0f85f57d002e 100644 --- a/sysutils/pessulus/Makefile +++ b/sysutils/pessulus/Makefile @@ -3,12 +3,11 @@ # Whom: FreeBSD GNOME Team # # $FreeBSD$ -# $MCom: ports/sysutils/pessulus/Makefile,v 1.16 2008/03/10 23:41:35 ahze Exp $ +# $MCom: ports/sysutils/pessulus/Makefile,v 1.18 2008/09/22 10:47:05 kwm Exp $ # PORTNAME= pessulus -PORTVERSION= 2.16.4 -PORTREVISION= 2 +PORTVERSION= 2.24.0 CATEGORIES= sysutils gnome MASTER_SITES= ${MASTER_SITE_GNOME} MASTER_SITE_SUBDIR= sources/${PORTNAME}/${PORTVERSION:C/^([0-9]+\.[0-9]+).*/\1/} diff --git a/sysutils/pessulus/distinfo b/sysutils/pessulus/distinfo index f8179e2a9a39..790dd7e20cc7 100644 --- a/sysutils/pessulus/distinfo +++ b/sysutils/pessulus/distinfo @@ -1,3 +1,3 @@ -MD5 (gnome2/pessulus-2.16.4.tar.gz) = 8eabdafd9dda0ea69052234d238dac41 -SHA256 (gnome2/pessulus-2.16.4.tar.gz) = f2af702e2f0699b556206a5a2c9bdb8edbd0183279e618eeef132d1e0476bc9a -SIZE (gnome2/pessulus-2.16.4.tar.gz) = 201497 +MD5 (gnome2/pessulus-2.24.0.tar.gz) = 51cb01f858a6b18faf3cb7715ef3432f +SHA256 (gnome2/pessulus-2.24.0.tar.gz) = e24152ffdc138ade07c47c698d6ee2e1717ed7ed5bd49385bc16346832069442 +SIZE (gnome2/pessulus-2.24.0.tar.gz) = 212787 diff --git a/sysutils/pessulus/files/patch-data_Makefile.in b/sysutils/pessulus/files/patch-data_Makefile.in new file mode 100644 index 000000000000..e6233c448307 --- /dev/null +++ b/sysutils/pessulus/files/patch-data_Makefile.in @@ -0,0 +1,11 @@ +--- data/Makefile.in.orig 2008-09-22 12:27:32.000000000 +0200 ++++ data/Makefile.in 2008-09-22 12:27:59.000000000 +0200 +@@ -422,7 +422,7 @@ uninstall-am: uninstall-desktopDATA unin + @INTLTOOL_DESKTOP_RULE@ + + install-icons: +- for size in 16x16 22x22 24x24 32x32 48x48 scalable; do mkdir --parents $(DESTDIR)/$(datadir)/icons/hicolor/$$size/apps; done ++ for size in 16x16 22x22 24x24 32x32 48x48 scalable; do mkdir -p $(DESTDIR)/$(datadir)/icons/hicolor/$$size/apps; done + + install -m 644 $(srcdir)/pessulus-16.png $(DESTDIR)/$(datadir)/icons/hicolor/16x16/apps/pessulus.png + install -m 644 $(srcdir)/pessulus-22.png $(DESTDIR)/$(datadir)/icons/hicolor/22x22/apps/pessulus.png diff --git a/sysutils/pessulus/pkg-plist b/sysutils/pessulus/pkg-plist index 0d8d984c4cb6..2845c890ac58 100644 --- a/sysutils/pessulus/pkg-plist +++ b/sysutils/pessulus/pkg-plist @@ -39,6 +39,12 @@ bin/pessulus %%PYTHON_SITELIBDIR%%/Pessulus/simpleeditabletreeview.pyc %%PYTHON_SITELIBDIR%%/Pessulus/simpleeditabletreeview.pyo share/applications/pessulus.desktop +share/icons/hicolor/16x16/apps/pessulus.png +share/icons/hicolor/22x22/apps/pessulus.png +share/icons/hicolor/24x24/apps/pessulus.png +share/icons/hicolor/32x32/apps/pessulus.png +share/icons/hicolor/48x48/apps/pessulus.png +share/icons/hicolor/scalable/apps/pessulus.svg %%PORTDOCS%%%%DOCSDIR%%/AUTHORS %%PORTDOCS%%%%DOCSDIR%%/COPYING %%PORTDOCS%%%%DOCSDIR%%/ChangeLog @@ -49,6 +55,7 @@ share/applications/pessulus.desktop %%PORTDOCS%%%%DOCSDIR%%/TODO share/locale/ar/LC_MESSAGES/pessulus.mo share/locale/as/LC_MESSAGES/pessulus.mo +share/locale/bal/LC_MESSAGES/pessulus.mo share/locale/be/LC_MESSAGES/pessulus.mo share/locale/be@latin/LC_MESSAGES/pessulus.mo share/locale/bg/LC_MESSAGES/pessulus.mo @@ -78,6 +85,7 @@ share/locale/it/LC_MESSAGES/pessulus.mo share/locale/ja/LC_MESSAGES/pessulus.mo share/locale/ka/LC_MESSAGES/pessulus.mo share/locale/ko/LC_MESSAGES/pessulus.mo +share/locale/kn/LC_MESSAGES/pessulus.mo share/locale/ku/LC_MESSAGES/pessulus.mo share/locale/lt/LC_MESSAGES/pessulus.mo share/locale/lv/LC_MESSAGES/pessulus.mo @@ -93,14 +101,16 @@ share/locale/oc/LC_MESSAGES/pessulus.mo share/locale/or/LC_MESSAGES/pessulus.mo share/locale/pa/LC_MESSAGES/pessulus.mo share/locale/pl/LC_MESSAGES/pessulus.mo +share/locale/ps/LC_MESSAGES/pessulus.mo share/locale/pt/LC_MESSAGES/pessulus.mo share/locale/pt_BR/LC_MESSAGES/pessulus.mo +share/locale/ro/LC_MESSAGES/pessulus.mo share/locale/ru/LC_MESSAGES/pessulus.mo share/locale/sk/LC_MESSAGES/pessulus.mo share/locale/sl/LC_MESSAGES/pessulus.mo share/locale/sq/LC_MESSAGES/pessulus.mo share/locale/sr/LC_MESSAGES/pessulus.mo -share/locale/sr@Latn/LC_MESSAGES/pessulus.mo +share/locale/sr@latin/LC_MESSAGES/pessulus.mo share/locale/sv/LC_MESSAGES/pessulus.mo share/locale/ta/LC_MESSAGES/pessulus.mo share/locale/te/LC_MESSAGES/pessulus.mo @@ -121,6 +131,10 @@ share/locale/zh_TW/LC_MESSAGES/pessulus.mo @dirrmtry share/locale/zh_HK @dirrmtry share/locale/te/LC_MESSAGES @dirrmtry share/locale/te +@dirrmtry share/locale/sr@latin/LC_MESSAGES +@dirrmtry share/locale/sr@latin +@dirrmtry share/locale/ps/LC_MESSAGES +@dirrmtry share/locale/ps @dirrmtry share/locale/oc/LC_MESSAGES @dirrmtry share/locale/oc @dirrmtry share/locale/mr/LC_MESSAGES @@ -133,5 +147,7 @@ share/locale/zh_TW/LC_MESSAGES/pessulus.mo @dirrmtry share/locale/bn_IN @dirrmtry share/locale/be@latin/LC_MESSAGES @dirrmtry share/locale/be@latin +@dirrmtry share/locale/bal/LC_MESSAGES +@dirrmtry share/locale/bal @dirrmtry share/locale/as/LC_MESSAGES @dirrmtry share/locale/as diff --git a/sysutils/policykit-gnome/Makefile b/sysutils/policykit-gnome/Makefile index aa966f88f1f3..d72b1887b572 100644 --- a/sysutils/policykit-gnome/Makefile +++ b/sysutils/policykit-gnome/Makefile @@ -3,11 +3,11 @@ # Whom: Joe Marcus Clarke <marcus@FreeBSD.org> # # $FreeBSD$ -# $MCom: ports/sysutils/policykit-gnome/Makefile,v 1.4 2008/02/15 16:48:08 mezz Exp $ +# $MCom: ports/sysutils/policykit-gnome/Makefile,v 1.6 2008/10/03 17:19:43 marcus Exp $ # PORTNAME= policykit-gnome -PORTVERSION= 0.9 +PORTVERSION= 0.9.2 CATEGORIES= sysutils gnome MASTER_SITES= http://hal.freedesktop.org/releases/ DISTNAME= PolicyKit-gnome-${PORTVERSION} @@ -15,13 +15,12 @@ DISTNAME= PolicyKit-gnome-${PORTVERSION} MAINTAINER= gnome@FreeBSD.org COMMENT= GNOME frontend to the PolicKit framework -LIB_DEPENDS= polkit.2:${PORTSDIR}/sysutils/policykit \ - sexy.2:${PORTSDIR}/x11-toolkits/libsexy +LIB_DEPENDS= polkit.2:${PORTSDIR}/sysutils/policykit USE_BZIP2= yes USE_GMAKE= yes USE_GETTEXT= yes -USE_GNOME= gnomehack gnometarget gnomevfs2 intlhack gnomedocutils gconf2 +USE_GNOME= gnomehack gnometarget intlhack gnomedocutils gconf2 GNU_CONFIGURE= yes USE_LDCONFIG= yes CONFIGURE_ARGS= --disable-gtk-doc \ diff --git a/sysutils/policykit-gnome/distinfo b/sysutils/policykit-gnome/distinfo index 1da9b6e37114..7acce486d4c9 100644 --- a/sysutils/policykit-gnome/distinfo +++ b/sysutils/policykit-gnome/distinfo @@ -1,3 +1,3 @@ -MD5 (PolicyKit-gnome-0.9.tar.bz2) = 68374b04289ce99d95a9df19d6217344 -SHA256 (PolicyKit-gnome-0.9.tar.bz2) = 272cedf7f29b97cfe0f1b73b3aae8a164e163bd51b10c6b4724d761c8e8f1fe1 -SIZE (PolicyKit-gnome-0.9.tar.bz2) = 1132238 +MD5 (PolicyKit-gnome-0.9.2.tar.bz2) = fc478b168d0c926a9766b0b415ff4bbf +SHA256 (PolicyKit-gnome-0.9.2.tar.bz2) = ecf4ce303a90a4580c54ee7b932ffaf01b7f115f40b17d75634c5bbfba085c8a +SIZE (PolicyKit-gnome-0.9.2.tar.bz2) = 1223691 diff --git a/sysutils/policykit-gnome/pkg-plist b/sysutils/policykit-gnome/pkg-plist index 5108b9fa224a..74cf093fbb0f 100644 --- a/sysutils/policykit-gnome/pkg-plist +++ b/sysutils/policykit-gnome/pkg-plist @@ -16,6 +16,7 @@ share/applications/polkit-gnome-authorization.desktop share/dbus-1/services/gnome-org.freedesktop.PolicyKit.AuthenticationAgent.service share/dbus-1/services/org.gnome.PolicyKit.AuthorizationManager.service share/dbus-1/services/org.gnome.PolicyKit.service +share/locale/ar/LC_MESSAGES/PolicyKit-gnome.mo share/locale/ca/LC_MESSAGES/PolicyKit-gnome.mo share/locale/cs/LC_MESSAGES/PolicyKit-gnome.mo share/locale/da/LC_MESSAGES/PolicyKit-gnome.mo diff --git a/sysutils/policykit/Makefile b/sysutils/policykit/Makefile index 240ac00f5581..bcf4f126560b 100644 --- a/sysutils/policykit/Makefile +++ b/sysutils/policykit/Makefile @@ -3,12 +3,12 @@ # Whom: Joe Marcus Clarke <marcus@FreeBSD.org> # # $FreeBSD$ -# $MCom: ports/sysutils/policykit/Makefile,v 1.19 2008/01/20 04:41:31 marcus Exp $ +# $MCom: ports/sysutils/policykit/Makefile,v 1.22 2008/08/21 21:53:00 mezz Exp $ # PORTNAME= policykit PORTVERSION= 0.9 -PORTREVISION= 1 +PORTREVISION= 2 CATEGORIES= sysutils gnome MASTER_SITES= http://hal.freedesktop.org/releases/ DISTNAME= PolicyKit-${PORTVERSION} @@ -22,7 +22,7 @@ BUILD_DEPENDS= ${LOCALBASE}/share/sgml/docbook/4.1/catalog:${PORTSDIR}/textproc/ LIB_DEPENDS= dbus-glib-1.2:${PORTSDIR}/devel/dbus-glib \ expat.6:${PORTSDIR}/textproc/expat2 -USE_GNOME= gnomehack gnometarget glib20 intlhack +USE_GNOME= gnomehack glib20 intlhack USE_GMAKE= yes GNU_CONFIGURE= yes USE_LDCONFIG= yes diff --git a/sysutils/policykit/files/patch-consolekit03 b/sysutils/policykit/files/patch-consolekit03 new file mode 100644 index 000000000000..21ce5e7b8bbd --- /dev/null +++ b/sysutils/policykit/files/patch-consolekit03 @@ -0,0 +1,83 @@ +diff --git a/src/polkit-dbus/polkit-dbus.c b/src/polkit-dbus/polkit-dbus.c +index f7be03f..cad4a76 100644 +--- a/src/polkit-dbus/polkit-dbus.c ++++ src/polkit-dbus/polkit-dbus.c +@@ -214,11 +214,17 @@ polkit_session_new_from_objpath (DBusConnection *con, const char *objpath, uid_t + dbus_message_unref (reply); + goto out; + } ++ /* GetUnixUser API Changed in CK 0.3.0 */ + if (!dbus_message_get_args (reply, NULL, +- DBUS_TYPE_INT32, &uid, ++ DBUS_TYPE_UINT32, &uid, + DBUS_TYPE_INVALID)) { +- kit_warning ("Invalid GetUnixUser reply from CK"); +- goto out; ++ /* try the older API */ ++ if (!dbus_message_get_args (reply, NULL, ++ DBUS_TYPE_INT32, &uid, ++ DBUS_TYPE_INVALID)) { ++ kit_warning ("Invalid GetUnixUser reply from CK"); ++ goto out; ++ } + } + dbus_message_unref (message); + dbus_message_unref (reply); +@@ -1326,16 +1332,21 @@ polkit_tracker_dbus_func (PolKitTracker *pk_tracker, DBusMessage *message) + + dbus_error_init (&error); + seat_objpath = dbus_message_get_path (message); +- if (!dbus_message_get_args (message, &error, +- DBUS_TYPE_STRING, &session_objpath, ++ /* API fixed in CK 0.3 to match spec */ ++ if (!dbus_message_get_args (message, &error, ++ DBUS_TYPE_OBJECT_PATH, &session_objpath, + DBUS_TYPE_INVALID)) { ++ if (!dbus_message_get_args (message, &error, ++ DBUS_TYPE_STRING, &session_objpath, ++ DBUS_TYPE_INVALID)) { + +- /* TODO: should be _pk_critical */ +- kit_warning ("The SessionAdded signal on the org.freedesktop.ConsoleKit.Seat " +- "interface for object %s has the wrong signature! " +- "Your system is misconfigured.", seat_objpath); ++ /* TODO: should be _pk_critical */ ++ kit_warning ("The SessionAdded signal on the org.freedesktop.ConsoleKit.Seat " ++ "interface for object %s has the wrong signature! " ++ "Your system is misconfigured.", seat_objpath); + +- goto out; ++ goto out; ++ } + } + + /* TODO: add to sessions - see polkit_tracker_is_authorization_relevant() */ +@@ -1353,16 +1364,21 @@ polkit_tracker_dbus_func (PolKitTracker *pk_tracker, DBusMessage *message) + + dbus_error_init (&error); + seat_objpath = dbus_message_get_path (message); +- if (!dbus_message_get_args (message, &error, +- DBUS_TYPE_STRING, &session_objpath, ++ /* API fixed in CK 0.3 to match spec */ ++ if (!dbus_message_get_args (message, &error, ++ DBUS_TYPE_OBJECT_PATH, &session_objpath, + DBUS_TYPE_INVALID)) { ++ if (!dbus_message_get_args (message, &error, ++ DBUS_TYPE_STRING, &session_objpath, ++ DBUS_TYPE_INVALID)) { + +- /* TODO: should be _pk_critical */ +- kit_warning ("The SessionRemoved signal on the org.freedesktop.ConsoleKit.Seat " +- "interface for object %s has the wrong signature! " +- "Your system is misconfigured.", seat_objpath); ++ /* TODO: should be _pk_critical */ ++ kit_warning ("The SessionRemoved signal on the org.freedesktop.ConsoleKit.Seat " ++ "interface for object %s has the wrong signature! " ++ "Your system is misconfigured.", seat_objpath); + +- goto out; ++ goto out; ++ } + } + + _remove_caller_by_session (pk_tracker, session_objpath); |