summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/scsi/cd.c23
1 files changed, 7 insertions, 16 deletions
diff --git a/sys/scsi/cd.c b/sys/scsi/cd.c
index aa1ccc76b92..96014a8dee3 100644
--- a/sys/scsi/cd.c
+++ b/sys/scsi/cd.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: cd.c,v 1.93 2005/10/10 23:10:38 krw Exp $ */
+/* $OpenBSD: cd.c,v 1.94 2005/10/11 11:31:43 krw Exp $ */
/* $NetBSD: cd.c,v 1.100 1997/04/02 02:29:30 mycroft Exp $ */
/*
@@ -1244,26 +1244,17 @@ cdgetdisklabel(dev, cd, lp, clp, spoofonly)
/* Create the partition table. */
/* Probably should sanity-check the drive's values */
ent = toc + TOC_HEADER_SZ;
- lba = ((cd->sc_link->quirks & ADEV_LITTLETOC) ?
- ent[TOC_ENTRY_MSF_LBA] | ent[TOC_ENTRY_MSF_LBA + 1] << 8 |
- ent[TOC_ENTRY_MSF_LBA + 2] << 16 |
- ent[TOC_ENTRY_MSF_LBA + 3] << 24 :
- ent[TOC_ENTRY_MSF_LBA] << 24 | ent[TOC_ENTRY_MSF_LBA + 1] << 16 |
- ent[TOC_ENTRY_MSF_LBA + 2] << 8 | ent[TOC_ENTRY_MSF_LBA + 3]);
+ lba = _4btol(&ent[TOC_ENTRY_MSF_LBA]);
+ if (cd->sc_link->quirks & ADEV_LITTLETOC)
+ lba = swap32(lba);
i = 0;
for (tocidx = 1; tocidx <= n; tocidx++) {
is_data = ent[TOC_ENTRY_CONTROL_ADDR_TYPE] & 4;
ent += TOC_ENTRY_SZ;
- nlba = ((cd->sc_link->quirks & ADEV_LITTLETOC) ?
- ent[TOC_ENTRY_MSF_LBA] |
- ent[TOC_ENTRY_MSF_LBA + 1] << 8 |
- ent[TOC_ENTRY_MSF_LBA + 2] << 16 |
- ent[TOC_ENTRY_MSF_LBA + 3] << 24 :
- ent[TOC_ENTRY_MSF_LBA] << 24 |
- ent[TOC_ENTRY_MSF_LBA + 1] << 16 |
- ent[TOC_ENTRY_MSF_LBA + 2] << 8 |
- ent[TOC_ENTRY_MSF_LBA + 3]);
+ nlba = _4btol(&ent[TOC_ENTRY_MSF_LBA]);
+ if (cd->sc_link->quirks & ADEV_LITTLETOC)
+ nlba = swap32(nlba);
lp->d_partitions[i].p_fstype =
is_data ? FS_UNUSED : FS_OTHER;