--- cd-discid.c.orig	2013-05-14 11:02:00.000000000 +0200
+++ cd-discid.c	2015-06-10 09:18:49.000000000 +0200
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 1999-2003 Robert Woodcock <rcw@debian.org>
- * Copyright (c) 2009-2012 Timur Birsh <taem@linukz.org>
+ * Copyright (c) 2009-2013 Timur Birsh <taem@linukz.org>
  * This code is hereby licensed for public consumption under either the
  * GNU GPL v2 or greater, or Larry Wall's Artistic license - your choice.
 
@@ -14,6 +14,8 @@
  * OpenBSD: Marcus Daniel <danielm@uni-muenster.de>
  * NetBSD: Chris Gilbert <chris@NetBSD.org>
  * MacOSX: Evan Jones <ejones@uwaterloo.ca> http://www.eng.uwaterloo.ca/~ejones/
+ *         Thomas Klausner <tk@giga.or.at>
+ * DragonFly: Thomas Klausner <tk@giga.or.at>, http://pkgsrc.se/audio/cd-discid
  */
 
 #include <stdio.h>
@@ -46,7 +48,7 @@
 
 /* __FreeBSD_kernel__ is needed for properly compiling on Debian GNU/kFreeBSD
    Look at http://glibc-bsd.alioth.debian.org/porting/PORTING for more info */
-#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
+#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__)
 #include <sys/cdio.h>
 #define CDROM_LBA               CD_LBA_FORMAT    /* first frame is 0 */
 #define CD_MSF_OFFSET           150              /* MSF offset of first frame */
@@ -93,7 +95,7 @@
 #define cdth_trk1               lastTrackNumberInLastSessionLSB
 #define cdrom_tocentry          CDTrackInfo
 #define cdte_track_address      trackStartAddress
-#define DEVICE_NAME             "/dev/disk1"
+#define DEVICE_NAME             "/dev/rdisk1"
 
 #else
 #error "Your OS isn't supported yet."
@@ -130,7 +132,7 @@
 	int drive, i, totaltime;
 	long int cksum = 0;
 	int musicbrainz = 0;
-	unsigned char first = 1, last = 1;
+	unsigned char last = 1;
 	char *devicename = DEVICE_NAME;
 	struct cdrom_tochdr hdr;
 	struct cdrom_tocentry *TocEntry;
@@ -187,7 +189,6 @@
 	}
 #endif
 
-	first = hdr.cdth_trk0;
 	last = hdr.cdth_trk1;
 
 	len = (last + 1) * sizeof(struct cdrom_tocentry);
@@ -236,8 +237,7 @@
 	 * TocEntry[last-1].lastRecordedAddress + 1, so we compute the start
 	 * of leadout from the start+length of the last track instead
 	 */
-	TocEntry[last].cdte_track_address = TocEntry[last - 1].trackSize +
-		TocEntry[last - 1].trackStartAddress;
+	TocEntry[last].cdte_track_address = htonl(ntohl(TocEntry[last-1].trackSize) + ntohl(TocEntry[last-1].trackStartAddress));
 #else   /* FreeBSD, Linux, Solaris */
 	for (i = 0; i < last; i++) {
 		/* tracks start with 1, but I must start with 0 on OpenBSD */
@@ -260,12 +260,12 @@
 	/* release file handle */
 	close(drive);
 
-#if defined(__FreeBSD__)
+#if defined(__FreeBSD__) || defined(__DragonFly__) || defined(__APPLE__)
 	TocEntry[i].cdte_track_address = ntohl(TocEntry[i].cdte_track_address);
 #endif
 
 	for (i = 0; i < last; i++) {
-#if defined(__FreeBSD__)
+#if defined(__FreeBSD__) || defined(__DragonFly__) || defined(__APPLE__)
 		TocEntry[i].cdte_track_address = ntohl(TocEntry[i].cdte_track_address);
 #endif
 		cksum += cddb_sum((TocEntry[i].cdte_track_address + CD_MSF_OFFSET) / CD_FRAMES);