brasero r675 - in trunk: . src src/plugins/cdrdao src/plugins/cdrtools



Author: philippr
Date: Fri Mar 14 11:01:15 2008
New Revision: 675
URL: http://svn.gnome.org/viewvc/brasero?rev=675&view=rev

Log:
	New function for improved FreeBSD compatibilty which retrieves bus, target, lun from HAL
	Use if when compiled with CAM driver.

	* src/burn-drive.c: (brasero_drive_get_bus_target_lun),
	(brasero_drive_get_bus_target_lun_string),
	(brasero_drive_finalize), (brasero_drive_init_real):
	* src/burn-drive.h:
	* src/burn-job.c: (brasero_job_get_bus_target_lun):
	* src/burn-job.h:
	* src/plugins/cdrdao/burn-cdrdao.c:
	(brasero_cdrdao_set_argv_device), (brasero_cdrdao_set_argv_record),
	(brasero_cdrdao_set_argv_image):
	* src/plugins/cdrtools/burn-cdrecord.c:
	(brasero_cdrecord_stderr_read), (brasero_cdrecord_set_argv):
	* src/plugins/cdrtools/burn-mkisofs.c:
	(brasero_mkisofs_set_argv_image):
	* src/plugins/cdrtools/burn-readcd.c: (brasero_readcd_set_argv):

Modified:
   trunk/ChangeLog
   trunk/src/burn-drive.c
   trunk/src/burn-drive.h
   trunk/src/burn-job.c
   trunk/src/burn-job.h
   trunk/src/plugins/cdrdao/burn-cdrdao.c
   trunk/src/plugins/cdrtools/burn-cdrecord.c
   trunk/src/plugins/cdrtools/burn-mkisofs.c
   trunk/src/plugins/cdrtools/burn-readcd.c

Modified: trunk/src/burn-drive.c
==============================================================================
--- trunk/src/burn-drive.c	(original)
+++ trunk/src/burn-drive.c	Fri Mar 14 11:01:15 2008
@@ -39,6 +39,7 @@
 #include "burn-basics.h"
 #include "burn-medium.h"
 #include "burn-drive.h"
+#include "burn-debug.h"
 
 #include "scsi-mmc1.h"
 
@@ -49,6 +50,10 @@
 	BraseroDriveCaps caps;
 	gchar *path;
 	gchar *udi;
+
+	gint bus;
+	gint target;
+	gint lun;
 };
 
 #define BRASERO_DRIVE_PRIVATE(o)  (G_TYPE_INSTANCE_GET_PRIVATE ((o), BRASERO_TYPE_DRIVE, BraseroDrivePrivate))
@@ -71,6 +76,47 @@
 static LibHalContext *hal_context = NULL;
 
 gboolean
+brasero_drive_get_bus_target_lun (BraseroDrive *self,
+				  guint *bus,
+				  guint *target,
+				  guint *lun)
+{
+	BraseroDrivePrivate *priv;
+
+	priv = BRASERO_DRIVE_PRIVATE (self);
+
+	if (!priv->udi)
+		return FALSE;
+
+	if (!bus || !target || !lun)
+		return FALSE;
+
+	if (priv->bus < 0)
+		return FALSE;
+
+	*bus = priv->bus;
+	*target = priv->target;
+	*lun = priv->lun;
+	return TRUE;
+}
+
+gchar *
+brasero_drive_get_bus_target_lun_string (BraseroDrive *self)
+{
+	BraseroDrivePrivate *priv;
+
+	priv = BRASERO_DRIVE_PRIVATE (self);
+
+	if (!priv->udi)
+		return NULL;
+
+	if (priv->bus < 0)
+		return NULL;
+
+	return g_strdup_printf ("%i,%i,%i", priv->bus, priv->target, priv->lun);
+}
+
+gboolean
 brasero_drive_is_fake (BraseroDrive *self)
 {
 	BraseroDrivePrivate *priv;
@@ -294,7 +340,7 @@
 
 	priv = BRASERO_DRIVE_PRIVATE (object);
 	if (priv->path) {
-		g_free (priv->path);
+		libhal_free_string (priv->path);
 		priv->path = NULL;
 	}
 
@@ -316,6 +362,7 @@
 {
 	BraseroDrivePrivate *priv;
 	LibHalContext *ctx;
+	char *parent;
 
 	priv = BRASERO_DRIVE_PRIVATE (drive);
 
@@ -343,6 +390,34 @@
 		priv->caps |= BRASERO_DRIVE_CAPS_DVDR_PLUS_DL;
 	if (libhal_device_get_property_bool (ctx, priv->udi, "storage.cdrom.dvdplusrwdl", NULL))
 		priv->caps |= BRASERO_DRIVE_CAPS_DVDRW_PLUS_DL;
+
+	/* Also get its parent to retrieve the bus, host, lun values */
+	parent = libhal_device_get_property_string (ctx, priv->udi, "info.parent", NULL);
+	if (!parent) {
+		priv->bus = -1;
+		priv->lun = -1;
+		priv->target = -1;
+		return;
+	}
+
+	/* Check it is a SCSI interface */
+	if (!libhal_device_property_exists (ctx, parent, "scsi.host", NULL)
+	||  !libhal_device_property_exists (ctx, parent, "scsi.lun", NULL)
+	||  !libhal_device_property_exists (ctx, parent, "scsi.target", NULL)) {
+		g_free (parent);
+
+		priv->bus = -1;
+		priv->lun = -1;
+		priv->target = -1;
+		return;
+	}
+
+	priv->bus = libhal_device_get_property_int (ctx, parent, "scsi.host", NULL);
+	priv->lun = libhal_device_get_property_int (ctx, parent, "scsi.lun", NULL);
+	priv->target = libhal_device_get_property_int (ctx, parent, "scsi.target", NULL);
+
+	BRASERO_BURN_LOG ("Drive %s has bus,target,lun = %i %i %i", priv->path, priv->bus, priv->target, priv->lun);
+	libhal_free_string (parent);
 }
 
 static void

Modified: trunk/src/burn-drive.h
==============================================================================
--- trunk/src/burn-drive.h	(original)
+++ trunk/src/burn-drive.h	Fri Mar 14 11:01:15 2008
@@ -89,6 +89,14 @@
 const gchar *
 brasero_drive_get_device (BraseroDrive *drive);
 
+gboolean
+brasero_drive_get_bus_target_lun (BraseroDrive *drive,
+				  guint *bus,
+				  guint *target,
+				  guint *lun);
+gchar *
+brasero_drive_get_bus_target_lun_string (BraseroDrive *drive);
+
 BraseroDriveCaps
 brasero_drive_get_caps (BraseroDrive *drive);
 

Modified: trunk/src/burn-job.c
==============================================================================
--- trunk/src/burn-job.c	(original)
+++ trunk/src/burn-job.c	Fri Mar 14 11:01:15 2008
@@ -1284,6 +1284,26 @@
 }
 
 BraseroBurnResult
+brasero_job_get_bus_target_lun (BraseroJob *self, gchar **BTL)
+{
+	BraseroBurnSession *session;
+	BraseroJobPrivate *priv;
+	BraseroDrive *drive;
+
+	BRASERO_JOB_DEBUG (self);
+
+	g_return_val_if_fail (BTL != NULL, BRASERO_BURN_ERR);
+
+	priv = BRASERO_JOB_PRIVATE (self);
+	session = brasero_task_ctx_get_session (priv->ctx);
+
+	drive = brasero_burn_session_get_burner (session);
+	*BTL = brasero_drive_get_bus_target_lun_string (drive);;
+
+	return BRASERO_BURN_OK;
+}
+
+BraseroBurnResult
 brasero_job_get_device (BraseroJob *self, gchar **device)
 {
 	BraseroBurnSession *session;

Modified: trunk/src/burn-job.h
==============================================================================
--- trunk/src/burn-job.h	(original)
+++ trunk/src/burn-job.h	Fri Mar 14 11:01:15 2008
@@ -148,6 +148,9 @@
 brasero_job_get_device (BraseroJob *job, gchar **device);
 
 BraseroBurnResult
+brasero_job_get_bus_target_lun (BraseroJob *job, gchar **BTL);
+
+BraseroBurnResult
 brasero_job_get_media (BraseroJob *job, BraseroMedia *media);
 
 BraseroBurnResult

Modified: trunk/src/plugins/cdrdao/burn-cdrdao.c
==============================================================================
--- trunk/src/plugins/cdrdao/burn-cdrdao.c	(original)
+++ trunk/src/plugins/cdrdao/burn-cdrdao.c	Fri Mar 14 11:01:15 2008
@@ -227,7 +227,14 @@
 	gchar *device = NULL;
 
 	g_ptr_array_add (argv, g_strdup ("--device"));
+
+#ifdef HAVE_CAM_LIB_H
+	/* FreeBSD like that better */
+	brasero_job_get_bus_target_lun (BRASERO_JOB (cdrdao), &device);
+#else
 	brasero_job_get_device (BRASERO_JOB (cdrdao), &device);
+#endif
+
 	g_ptr_array_add (argv, device);
 }
 
@@ -297,7 +304,14 @@
 
 		brasero_job_get_current_track (BRASERO_JOB (cdrdao), &track);
 		drive = brasero_track_get_drive_source (track);
+
+#ifdef HAVE_CAM_LIB_H
+	/* FreeBSD like that better */
+		g_ptr_array_add (argv, brasero_drive_get_bus_target_lun_string (drive));
+#else
 		g_ptr_array_add (argv, g_strdup (brasero_drive_get_device (drive)));
+#endif
+
 	}
 	else if (type.type == BRASERO_TRACK_TYPE_IMAGE) {
 		gchar *cuepath;
@@ -378,7 +392,13 @@
 
 	brasero_job_get_current_track (BRASERO_JOB (cdrdao), &track);
 	drive = brasero_track_get_drive_source (track);
+
+#ifdef HAVE_CAM_LIB_H
+	/* FreeBSD like that better */
+	g_ptr_array_add (argv, brasero_drive_get_bus_target_lun_string (drive));
+#else
 	g_ptr_array_add (argv, g_strdup (brasero_drive_get_device (drive)));
+#endif
 
 	g_ptr_array_add (argv, g_strdup ("--read-raw"));
 

Modified: trunk/src/plugins/cdrtools/burn-cdrecord.c
==============================================================================
--- trunk/src/plugins/cdrtools/burn-cdrecord.c	(original)
+++ trunk/src/plugins/cdrtools/burn-cdrecord.c	Fri Mar 14 11:01:15 2008
@@ -147,7 +147,8 @@
 						BRASERO_BURN_ERROR_SLOW_DMA,
 						_("The system is too slow to write the CD at this speed. Try a lower speed")));
 	}
-	else if (strstr (line, "Operation not permitted. Cannot send SCSI cmd via ioctl")) {
+	else if (strstr (line, "Operation not permitted. Cannot send SCSI cmd via ioctl")
+	     ||  strstr (line, "Cannot open or use SCSI driver")) {
 		brasero_job_error (BRASERO_JOB (process),
 				   g_error_new (BRASERO_BURN_ERROR,
 						BRASERO_BURN_ERROR_SCSI_IOCTL,
@@ -897,7 +898,13 @@
 	g_ptr_array_add (argv, g_strdup ("cdrecord"));
 	g_ptr_array_add (argv, g_strdup ("-v"));
 
+#ifdef HAVE_CAM_LIB_H
+	/* FreeBSD like that better */
+	brasero_job_get_bus_target_lun (BRASERO_JOB (cdrecord), &device);
+#else
 	brasero_job_get_device (BRASERO_JOB (cdrecord), &device);
+#endif
+
 	dev_str = g_strdup_printf ("dev=%s", device);
 	g_ptr_array_add (argv, dev_str);
 	g_free (device);

Modified: trunk/src/plugins/cdrtools/burn-mkisofs.c
==============================================================================
--- trunk/src/plugins/cdrtools/burn-mkisofs.c	(original)
+++ trunk/src/plugins/cdrtools/burn-mkisofs.c	Fri Mar 14 11:01:15 2008
@@ -348,7 +348,13 @@
 
 			g_ptr_array_add (argv, g_strdup ("-M"));
 
+#ifdef HAVE_CAM_LIB_H
+	/* FreeBSD like that better */
+			brasero_job_get_bus_target_lun (BRASERO_JOB (mkisofs), &device);
+#else
 			brasero_job_get_device (BRASERO_JOB (mkisofs), &device);
+#endif
+
 			g_ptr_array_add (argv, device);
 		}
 	}

Modified: trunk/src/plugins/cdrtools/burn-readcd.c
==============================================================================
--- trunk/src/plugins/cdrtools/burn-readcd.c	(original)
+++ trunk/src/plugins/cdrtools/burn-readcd.c	Fri Mar 14 11:01:15 2008
@@ -241,6 +241,7 @@
 	BraseroMedia media;
 	gchar *outfile_arg;
 	gchar *dev_str;
+	gchar *device;
 
 	readcd = BRASERO_READCD (process);
 
@@ -253,11 +254,20 @@
 
 	brasero_job_get_current_track (BRASERO_JOB (readcd), &track);
 	drive = brasero_track_get_drive_source (track);
-	if (!brasero_drive_get_device (drive))
+
+#ifdef HAVE_CAM_LIB_H
+	/* FreeBSD like that better */
+	device = brasero_drive_get_bus_target_lun_string (drive);
+#else
+	device = g_strdup (brasero_drive_get_device (drive));
+#endif
+
+	if (!device)
 		return BRASERO_BURN_ERR;
 
-	dev_str = g_strdup_printf ("dev=%s", brasero_drive_get_device (drive));
+	dev_str = g_strdup_printf ("dev=%s", device);
 	g_ptr_array_add (argv, dev_str);
+	g_free (device);
 
 	g_ptr_array_add (argv, g_strdup ("-nocorr"));
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]