--- dao/ScsiIf-osx.cc.orig	2009-02-22 21:47:01.000000000 +1100
+++ dao/ScsiIf-osx.cc	2010-12-09 12:11:48.000000000 +1100
@@ -18,7 +18,7 @@
 /* cdrdao specific includes and prototype */
 #include "ScsiIf.h"
 #include "trackdb/util.h"
-extern void message(int level, const char *fmt, ...);
+#include "log.h"
 #include "decodeSense.cc"
 
 /* Mac OS X specific includes */
@@ -120,7 +120,7 @@ int ScsiIf::init()
 		                          CFSTR(kIOPropertySCSITaskAuthoringDevice));
 		CFDictionarySetValue(dict, CFSTR(kIOPropertyMatchKey), sub);
 		IOServiceGetMatchingServices(kIOMasterPortDefault, dict, &iterator);
-		if (!iterator) message(-2, "init: no iterator");
+		if (!iterator) log_message(-2, "init: no iterator");
 		if (iterator) {
 			i = impl_->num_;
 			do {
@@ -134,16 +134,16 @@ int ScsiIf::init()
 		impl_->object_ = IORegistryEntryFromPath(kIOMasterPortDefault, impl_->path_);
 	}
 	/* Strange if (!x) ... if (x) style so you can #ifdef out the !x part */
-	if (!impl_->object_) message(-2, "init: no object");
+	if (!impl_->object_) log_message(-2, "init: no object");
 	if (impl_->object_) {
 		/* Get intermediate (IOCFPlugIn) plug-in for MMC device */
 		err = IOCreatePlugInInterfaceForService(impl_->object_,
 		       kIOMMCDeviceUserClientTypeID, kIOCFPlugInInterfaceID,
 		       &impl_->plugin_, &score);
 		if (err  != noErr)
-			message(-2, "init: IOCreatePlugInInterfaceForService failed: %d", err);
+			log_message(-2, "init: IOCreatePlugInInterfaceForService failed: %d", err);
 	}
-	if (!impl_->plugin_) message(-2, "init: no plugin");
+	if (!impl_->plugin_) log_message(-2, "init: no plugin");
 	if (impl_->plugin_) {
 		/* Get the MMC interface (MMCDeviceInterface) */
 		herr = (*impl_->plugin_)->QueryInterface(impl_->plugin_,
@@ -154,29 +154,29 @@ int ScsiIf::init()
 			 */
 		        (LPVOID *)&impl_->mmc_);
 		if (herr != S_OK)
-			message(-2, "init: QueryInterface failed: %d", herr);
+			log_message(-2, "init: QueryInterface failed: %d", herr);
 	}
-	if (!impl_->mmc_) message(-2, "init: no mmc");
+	if (!impl_->mmc_) log_message(-2, "init: no mmc");
 	if (impl_->mmc_) {
 		/* Get the SCSI interface */
 		impl_->scsi_ = (*impl_->mmc_)->GetSCSITaskDeviceInterface(impl_->mmc_);
 	}
-	if (!impl_->scsi_) message(-2, "init: no scsi");
+	if (!impl_->scsi_) log_message(-2, "init: no scsi");
 	if (impl_->scsi_) {
 		/* Obtain exclusive access to device */
 		err = (*impl_->scsi_)->ObtainExclusiveAccess(impl_->scsi_);
 		if (err != noErr)
-			message(-2, "init: ObtainExclusiveAccess failed: %d", err);
+			log_message(-2, "init: ObtainExclusiveAccess failed: %d", err);
 		if (err == noErr) {
 			impl_->exclusive_ = 1;
 			/* Send SCSI inquiry command */
 			i = inquiry();
 			if (i != 0)
-				message(-2, "init: inquiry failed: %d", i);
+				log_message(-2, "init: inquiry failed: %d", i);
 			return (i == 0) ? 0 : 2;
 		}
 	}
-	message(-2, "init: failed");
+	log_message(-2, "init: failed");
 	return 1;
 }
 
@@ -311,7 +311,7 @@ void ScsiIf::printError()
 		default:
 			s = "unknown response"; break;
 	}
-	if (s) message(-2, s);
+	if (s) log_message(-2, s);
 }
 
 /*
@@ -334,7 +334,7 @@ int inq(SCSITaskDeviceInterface **scsi,
 
 	task = (*scsi)->CreateSCSITask(scsi);
 	if (!task) {
-		message(-2, "inq: no task");
+		log_message(-2, "inq: no task");
 		return 1;
 	}
 	bzero(cdb, sizeof(cdb));
@@ -342,7 +342,7 @@ int inq(SCSITaskDeviceInterface **scsi,
 	cdb[4] = sizeof(inq_data);
 	ret = (*task)->SetCommandDescriptorBlock(task, cdb, kSCSICDBSize_6Byte);
 	if (ret != kIOReturnSuccess) {
-		message(-2, "inq: SetCommandDescriptorBlock failed: %d", ret);
+		log_message(-2, "inq: SetCommandDescriptorBlock failed: %d", ret);
 		(*task)->Release(task);
 		return 1;
 	}
@@ -351,35 +351,35 @@ int inq(SCSITaskDeviceInterface **scsi,
 	ret = (*task)->SetScatterGatherEntries(task, &range, 1,
 	      sizeof(inq_data), kSCSIDataTransfer_FromTargetToInitiator);
 	if (ret != kIOReturnSuccess) {
-		message(-2, "inq: SetScatterGatherEntries failed: %d", ret);
+		log_message(-2, "inq: SetScatterGatherEntries failed: %d", ret);
 		(*task)->Release(task);
 		return 1;
 	}
 	ret = (*task)->SetTimeoutDuration(task, 1000);
 	if (ret != kIOReturnSuccess) {
-		message(-2, "inq: SetTimeoutDuration failed: %d", ret);
+		log_message(-2, "inq: SetTimeoutDuration failed: %d", ret);
 		(*task)->Release(task);
 		return 1;
 	}
 	ret = (*task)->ExecuteTaskSync(task, sense, status, &len);
 	if (ret != kIOReturnSuccess) {
-		message(-2, "inq: ExecuteTaskSync failed: %d", ret);
+		log_message(-2, "inq: ExecuteTaskSync failed: %d", ret);
 		(*task)->Release(task);
 		return 1;
 	}
 	ret = (*task)->GetSCSIServiceResponse(task, response);
 	if (ret != kIOReturnSuccess) {
-		message(-2, "inq: GetSCSIServiceResponse failed: %d", ret);
+		log_message(-2, "inq: GetSCSIServiceResponse failed: %d", ret);
 		(*task)->Release(task);
 		return 1;
 	}
 	if (*response != kSCSIServiceResponse_TASK_COMPLETE) {
-		message(-2, "inq: response=%d", *response);
+		log_message(-2, "inq: response=%d", *response);
 		(*task)->Release(task);
 		return 1;
 	}
 	if (*status != kSCSITaskStatus_GOOD) {
-		message(-2, "inq: status=%d", *status);
+		log_message(-2, "inq: status=%d", *status);
 		(*task)->Release(task);
 		return 1;
 	}
@@ -437,7 +437,7 @@ ScsiIf::ScanData *ScsiIf::scan(int *len,
 	CFDictionarySetValue(dict, CFSTR(kIOPropertyMatchKey), sub);
 	IOServiceGetMatchingServices(kIOMasterPortDefault, dict, &iterator);
 	if (!iterator) {
-		message(-2, "scan: no iterator");
+		log_message(-2, "scan: no iterator");
 		*len = 0;
 		return NULL;
 	}
@@ -456,32 +456,32 @@ ScsiIf::ScanData *ScsiIf::scan(int *len,
 		       kIOMMCDeviceUserClientTypeID, kIOCFPlugInInterfaceID,
 		       &plugin, &score);
 		if (err != noErr) {
-			message(-2, "scan: IOCreatePlugInInterfaceForService failed: %d", err);
+			log_message(-2, "scan: IOCreatePlugInInterfaceForService failed: %d", err);
 			goto clean;
 		}
 		if (!plugin) {
-			message(-2, "scan: no plugin");
+			log_message(-2, "scan: no plugin");
 			goto clean;
 		}
 		herr = (*plugin)->QueryInterface(plugin,
 		        CFUUIDGetUUIDBytes(kIOMMCDeviceInterfaceID),
 		        (LPVOID *)&mmc);
 		if (herr != S_OK) {
-			message(-2, "scan: QueryInterface failed: %d", herr);
+			log_message(-2, "scan: QueryInterface failed: %d", herr);
 			goto clean;
 		}
 		if (!mmc) {
-			message(-2, "scan: no mmc");
+			log_message(-2, "scan: no mmc");
 			goto clean;
 		}
 		scsi = (*mmc)->GetSCSITaskDeviceInterface(mmc);
 		if (!scsi) {
-			message(-2, "scan: no scsi");
+			log_message(-2, "scan: no scsi");
 			goto clean;
 		}
 		err = (*scsi)->ObtainExclusiveAccess(scsi);
 		if (err != noErr) {
-			message(-2, "scan: ObtainExclusiveAccess failed: %d", err);
+			log_message(-2, "scan: ObtainExclusiveAccess failed: %d", err);
 			goto clean;
 		}
 		ret = inq(scsi, &response, &status, NULL,
@@ -489,7 +489,7 @@ ScsiIf::ScanData *ScsiIf::scan(int *len,
 		          scanData[*len].product,
 		          scanData[*len].revision);
 		if (ret != 0) {
-			message(-2, "scan: inq failed: %d", ret);
+			log_message(-2, "scan: inq failed: %d", ret);
 			goto clean;
 		}
 		(*len)++;