brasero r675 - in trunk: . src src/plugins/cdrdao src/plugins/cdrtools
- From: philippr svn gnome org
- To: svn-commits-list gnome org
- Subject: brasero r675 - in trunk: . src src/plugins/cdrdao src/plugins/cdrtools
- Date: Fri, 14 Mar 2008 11:01:16 +0000 (GMT)
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]