diff options
author | Theo de Raadt <deraadt@cvs.openbsd.org> | 2009-08-13 15:23:14 +0000 |
---|---|---|
committer | Theo de Raadt <deraadt@cvs.openbsd.org> | 2009-08-13 15:23:14 +0000 |
commit | cf6459c8f783ece5445be14e8e2e7201f7cd6632 (patch) | |
tree | a5a86e9615b432c0d3ef13f965013ddf06ea6bff /sys | |
parent | 46faf138ca97f0462a1c22674098875302fe10d0 (diff) |
Replace the error strings that were being passed around with much simpler
errnos. Note that the error strings are being ignored, since we long ago
decided to not spam the console, and there is no other nice way to use the
errors (without changing the ioctls to pass it back)
The errno is now useful, since we can pass b_error from failing IO up, and
the drive can decide how to use that
ok miod
Diffstat (limited to 'sys')
34 files changed, 449 insertions, 539 deletions
diff --git a/sys/arch/alpha/alpha/disksubr.c b/sys/arch/alpha/alpha/disksubr.c index 9d35841482c..7bc00bdafa3 100644 --- a/sys/arch/alpha/alpha/disksubr.c +++ b/sys/arch/alpha/alpha/disksubr.c @@ -1,4 +1,4 @@ -/* $OpenBSD: disksubr.c,v 1.93 2009/06/04 21:13:00 deraadt Exp $ */ +/* $OpenBSD: disksubr.c,v 1.94 2009/08/13 15:23:08 deraadt Exp $ */ /* $NetBSD: disksubr.c,v 1.21 1996/05/03 19:42:03 christos Exp $ */ /* @@ -48,14 +48,14 @@ * * Returns null on success and an error string on failure. */ -char * +int readdisklabel(dev_t dev, void (*strat)(struct buf *), struct disklabel *lp, int spoofonly) { struct buf *bp = NULL; - char *msg; + int error; - if ((msg = initdisklabel(lp))) + if ((error = initdisklabel(lp))) goto done; /* get a buffer and initialize it */ @@ -70,30 +70,29 @@ readdisklabel(dev_t dev, void (*strat)(struct buf *), bp->b_flags = B_BUSY | B_READ | B_RAW; (*strat)(bp); if (biowait(bp)) { - msg = "disk label read error"; + error = bp->b_error; goto done; } - msg = checkdisklabel(bp->b_data + LABELOFFSET, lp, 0, DL_GETDSIZE(lp)); - if (msg == NULL) + error = checkdisklabel(bp->b_data + LABELOFFSET, lp, 0, + DL_GETDSIZE(lp)); + if (error == 0) goto done; doslabel: - msg = readdoslabel(bp, strat, lp, NULL, spoofonly); - if (msg == NULL) + error = readdoslabel(bp, strat, lp, NULL, spoofonly); + if (error == 0) goto done; #if defined(CD9660) - if (iso_disklabelspoof(dev, strat, lp) == 0) { - msg = NULL; + error = iso_disklabelspoof(dev, strat, lp); + if (error == 0) goto done; - } #endif #if defined(UDF) - if (udf_disklabelspoof(dev, strat, lp) == 0) { - msg = NULL; + error = udf_disklabelspoof(dev, strat, lp); + if (error == 0) goto done; - } #endif done: @@ -101,7 +100,7 @@ done: bp->b_flags |= B_INVAL; brelse(bp); } - return (msg); + return (error); } /* diff --git a/sys/arch/amd64/amd64/disksubr.c b/sys/arch/amd64/amd64/disksubr.c index 4315574787f..43cefac1dd2 100644 --- a/sys/arch/amd64/amd64/disksubr.c +++ b/sys/arch/amd64/amd64/disksubr.c @@ -1,4 +1,4 @@ -/* $OpenBSD: disksubr.c,v 1.56 2008/06/12 06:58:33 deraadt Exp $ */ +/* $OpenBSD: disksubr.c,v 1.57 2009/08/13 15:23:10 deraadt Exp $ */ /* $NetBSD: disksubr.c,v 1.21 1996/05/03 19:42:03 christos Exp $ */ /* @@ -61,16 +61,16 @@ */ bios_diskinfo_t *bios_getdiskinfo(dev_t dev); -char * +int readdisklabel(dev_t dev, void (*strat)(struct buf *), struct disklabel *lp, int spoofonly) { bios_diskinfo_t *pdi; struct buf *bp = NULL; dev_t devno; - char *msg; + int error; - if ((msg = initdisklabel(lp))) + if ((error = initdisklabel(lp))) goto done; /* Look for any BIOS geometry information we should honour. */ @@ -96,21 +96,19 @@ readdisklabel(dev_t dev, void (*strat)(struct buf *), bp = geteblk((int)lp->d_secsize); bp->b_dev = dev; - msg = readdoslabel(bp, strat, lp, NULL, spoofonly); - if (msg == NULL) + error = readdoslabel(bp, strat, lp, NULL, spoofonly); + if (error == NULL) goto done; #if defined(CD9660) - if (iso_disklabelspoof(dev, strat, lp) == 0) { - msg = NULL; + error = iso_disklabelspoof(dev, strat, lp); + if (error == 0) goto done; - } #endif #if defined(UDF) - if (udf_disklabelspoof(dev, strat, lp) == 0) { - msg = NULL; + error = udf_disklabelspoof(dev, strat, lp); + if (error == 0) goto done; - } #endif done: @@ -118,7 +116,7 @@ done: bp->b_flags |= B_INVAL; brelse(bp); } - return (msg); + return (error); } /* diff --git a/sys/arch/arm/arm/disksubr.c b/sys/arch/arm/arm/disksubr.c index a8750d9646a..e31ca5cc581 100644 --- a/sys/arch/arm/arm/disksubr.c +++ b/sys/arch/arm/arm/disksubr.c @@ -1,4 +1,4 @@ -/* $OpenBSD: disksubr.c,v 1.51 2008/06/12 06:58:33 deraadt Exp $ */ +/* $OpenBSD: disksubr.c,v 1.52 2009/08/13 15:23:10 deraadt Exp $ */ /* $NetBSD: disksubr.c,v 1.21 1996/05/03 19:42:03 christos Exp $ */ /* @@ -55,35 +55,33 @@ * * Returns null on success and an error string on failure. */ -char * +int readdisklabel(dev_t dev, void (*strat)(struct buf *), struct disklabel *lp, int spoofonly) { struct buf *bp = NULL; - char *msg; + int error; - if ((msg = initdisklabel(lp))) + if ((error = initdisklabel(lp))) goto done; /* get a buffer and initialize it */ bp = geteblk((int)lp->d_secsize); bp->b_dev = dev; - msg = readdoslabel(bp, strat, lp, NULL, spoofonly); - if (msg == NULL) + error = readdoslabel(bp, strat, lp, NULL, spoofonly); + if (error == 0) goto done; #if defined(CD9660) - if (iso_disklabelspoof(dev, strat, lp) == 0) { - msg = NULL; + error = iso_disklabelspoof(dev, strat, lp); + if (error == 0) goto done; - } #endif #if defined(UDF) - if (udf_disklabelspoof(dev, strat, lp) == 0) { - msg = NULL; + error = udf_disklabelspoof(dev, strat, lp); + if (error == 0) goto done; - } #endif done: @@ -91,7 +89,7 @@ done: bp->b_flags |= B_INVAL; brelse(bp); } - return (msg); + return (error); } /* diff --git a/sys/arch/aviion/aviion/disksubr.c b/sys/arch/aviion/aviion/disksubr.c index e9cc38389f5..bed2d9aa78d 100644 --- a/sys/arch/aviion/aviion/disksubr.c +++ b/sys/arch/aviion/aviion/disksubr.c @@ -1,4 +1,4 @@ -/* $OpenBSD: disksubr.c,v 1.44 2008/07/23 16:24:42 beck Exp $ */ +/* $OpenBSD: disksubr.c,v 1.45 2009/08/13 15:23:10 deraadt Exp $ */ /* $NetBSD: disksubr.c,v 1.21 1996/05/03 19:42:03 christos Exp $ */ /* @@ -55,35 +55,33 @@ * * Returns null on success and an error string on failure. */ -char * +int readdisklabel(dev_t dev, void (*strat)(struct buf *), struct disklabel *lp, int spoofonly) { struct buf *bp = NULL; - char *msg; + int error; - if ((msg = initdisklabel(lp))) + if ((error = initdisklabel(lp))) goto done; /* get a buffer and initialize it */ bp = geteblk((int)lp->d_secsize); bp->b_dev = dev; - msg = readdoslabel(bp, strat, lp, NULL, spoofonly); - if (msg == NULL) + error = readdoslabel(bp, strat, lp, NULL, spoofonly); + if (error == 0) goto done; #if defined(CD9660) - if (iso_disklabelspoof(dev, strat, lp) == 0) { - msg = NULL; + error = iso_disklabelspoof(dev, strat, lp); + if (error == 0) goto done; - } #endif #if defined(UDF) - if (udf_disklabelspoof(dev, strat, lp) == 0) { - msg = NULL; + error = udf_disklabelspoof(dev, strat, lp); + if (error == 0) goto done; - } #endif done: @@ -91,7 +89,7 @@ done: bp->b_flags |= B_INVAL; brelse(bp); } - return (msg); + return (error); } /* diff --git a/sys/arch/hp300/hp300/disksubr.c b/sys/arch/hp300/hp300/disksubr.c index 78f47c9fbd9..bee4527ab72 100644 --- a/sys/arch/hp300/hp300/disksubr.c +++ b/sys/arch/hp300/hp300/disksubr.c @@ -1,4 +1,4 @@ -/* $OpenBSD: disksubr.c,v 1.46 2009/07/05 19:18:22 miod Exp $ */ +/* $OpenBSD: disksubr.c,v 1.47 2009/08/13 15:23:10 deraadt Exp $ */ /* $NetBSD: disksubr.c,v 1.9 1997/04/01 03:12:13 scottr Exp $ */ /* @@ -49,14 +49,14 @@ * filled in before calling us. Returns null on success and an error * string on failure. */ -char * +int readdisklabel(dev_t dev, void (*strat)(struct buf *), struct disklabel *lp, int spoofonly) { struct buf *bp = NULL; - char *msg; + int error; - if ((msg = initdisklabel(lp))) + if ((error = initdisklabel(lp))) goto done; bp = geteblk((int)lp->d_secsize); @@ -73,26 +73,24 @@ readdisklabel(dev_t dev, void (*strat)(struct buf *), bp->b_flags = B_BUSY | B_READ | B_RAW; (*strat)(bp); if (biowait(bp)) { - msg = "disk label I/O error"; + error = bp->b_error; goto done; } - msg = checkdisklabel(bp->b_data + LABELOFFSET, lp, + error = checkdisklabel(bp->b_data + LABELOFFSET, lp, DL_GETBSTART(lp), DL_GETDSIZE(lp)); - if (msg == NULL) + if (error == 0) goto done; #if defined(CD9660) - if (iso_disklabelspoof(dev, strat, lp) == 0) { - msg = NULL; + error = iso_disklabelspoof(dev, strat, lp); + if (error == 0) goto done; - } #endif #if defined(UDF) - if (udf_disklabelspoof(dev, strat, lp) == 0) { - msg = NULL; + error = udf_disklabelspoof(dev, strat, lp); + if (error == 0) goto done; - } #endif done: @@ -100,7 +98,7 @@ done: bp->b_flags |= B_INVAL; brelse(bp); } - return (msg); + return (error); } /* diff --git a/sys/arch/hppa/hppa/disksubr.c b/sys/arch/hppa/hppa/disksubr.c index 93ef104997e..1ccee03c232 100644 --- a/sys/arch/hppa/hppa/disksubr.c +++ b/sys/arch/hppa/hppa/disksubr.c @@ -1,4 +1,4 @@ -/* $OpenBSD: disksubr.c,v 1.75 2009/06/17 07:00:43 deraadt Exp $ */ +/* $OpenBSD: disksubr.c,v 1.76 2009/08/13 15:23:10 deraadt Exp $ */ /* * Copyright (c) 1999 Michael Shalayeff @@ -38,8 +38,8 @@ #include <sys/disklabel.h> #include <sys/disk.h> -char *readliflabel(struct buf *, void (*)(struct buf *), - struct disklabel *, int *, int); +int readliflabel(struct buf *, void (*)(struct buf *), + struct disklabel *, int *, int); /* * Attempt to read a disk label from a device @@ -51,39 +51,37 @@ char *readliflabel(struct buf *, void (*)(struct buf *), * * Returns null on success and an error string on failure. */ -char * +int readdisklabel(dev_t dev, void (*strat)(struct buf *), struct disklabel *lp, int spoofonly) { struct buf *bp = NULL; - char *msg; + int error; - if ((msg = initdisklabel(lp))) + if ((error = initdisklabel(lp))) goto done; /* get a buffer and initialize it */ bp = geteblk((int)lp->d_secsize); bp->b_dev = dev; - msg = readliflabel(bp, strat, lp, NULL, spoofonly); - if (msg == NULL) + error = readliflabel(bp, strat, lp, NULL, spoofonly); + if (error == 0) goto done; - msg = readdoslabel(bp, strat, lp, NULL, spoofonly); - if (msg == NULL) + error = readdoslabel(bp, strat, lp, NULL, spoofonly); + if (error == 0) goto done; #if defined(CD9660) - if (iso_disklabelspoof(dev, strat, lp) == 0) { - msg = NULL; + error = iso_disklabelspoof(dev, strat, lp); + if (error == 0) goto done; - } #endif #if defined(UDF) - if (udf_disklabelspoof(dev, strat, lp) == 0) { - msg = NULL; + error = udf_disklabelspoof(dev, strat, lp); + if (error == 0) goto done; - } #endif done: @@ -91,17 +89,17 @@ done: bp->b_flags |= B_INVAL; brelse(bp); } - return (msg); + return (error); } -char * +int readliflabel(struct buf *bp, void (*strat)(struct buf *), struct disklabel *lp, int *partoffp, int spoofonly) { struct buf *dbp = NULL; struct lifdir *p; struct lifvol *lvp; - char *msg = NULL; + int error = 0; int fsoff = 0, openbsdstart = MAXLIFSPACE, i; /* read LIF volume header */ @@ -110,11 +108,13 @@ readliflabel(struct buf *bp, void (*strat)(struct buf *), bp->b_flags = B_BUSY | B_READ | B_RAW; (*strat)(bp); if (biowait(bp)) - return "LIF volume header I/O error"; + return bp->b_error; lvp = (struct lifvol *)bp->b_data; - if (lvp->vol_id != LIF_VOL_ID) - return "no LIF volume header"; + if (lvp->vol_id != LIF_VOL_ID) { + error = EINVAL; /* no LIF volume header */ + goto done; + } dbp = geteblk(LIF_DIRSIZE); dbp->b_dev = bp->b_dev; @@ -124,9 +124,8 @@ readliflabel(struct buf *bp, void (*strat)(struct buf *), dbp->b_bcount = lp->d_secsize; dbp->b_flags = B_BUSY | B_READ | B_RAW; (*strat)(dbp); - if (biowait(dbp)) { - msg = "LIF directory I/O error"; + error = dbp->b_error; goto done; } @@ -159,14 +158,14 @@ readliflabel(struct buf *bp, void (*strat)(struct buf *), (*strat)(dbp); if (biowait(dbp)) { - msg = "HPUX label I/O error"; + error = dbp->b_error; goto done; } hl = (struct hpux_label *)dbp->b_data; if (hl->hl_magic1 != hl->hl_magic2 || hl->hl_magic != HPUX_MAGIC || hl->hl_version != 1) { - msg = "HPUX label magic mismatch"; + error = EINVAL; /* HPUX label magic mismatch */ goto done; } @@ -228,11 +227,11 @@ finished: bp->b_flags = B_BUSY | B_READ | B_RAW; (*strat)(bp); if (biowait(bp)) { - msg = "disk label I/O error"; + error = bp->b_error; goto done; } - return checkdisklabel(bp->b_data + LABELOFFSET, lp, openbsdstart, + error = checkdisklabel(bp->b_data + LABELOFFSET, lp, openbsdstart, DL_GETDSIZE(lp)); /* XXX */ done: @@ -240,7 +239,7 @@ done: dbp->b_flags |= B_INVAL; brelse(dbp); } - return (msg); + return (error); } /* diff --git a/sys/arch/hppa64/hppa64/disksubr.c b/sys/arch/hppa64/hppa64/disksubr.c index 74c4f77be09..8da4e7ae0a5 100644 --- a/sys/arch/hppa64/hppa64/disksubr.c +++ b/sys/arch/hppa64/hppa64/disksubr.c @@ -1,4 +1,4 @@ -/* $OpenBSD: disksubr.c,v 1.59 2009/06/17 07:00:45 deraadt Exp $ */ +/* $OpenBSD: disksubr.c,v 1.60 2009/08/13 15:23:10 deraadt Exp $ */ /* * Copyright (c) 1999 Michael Shalayeff @@ -38,8 +38,8 @@ #include <sys/disklabel.h> #include <sys/disk.h> -char *readliflabel(struct buf *, void (*)(struct buf *), - struct disklabel *, int *, int); +int readliflabel(struct buf *, void (*)(struct buf *), + struct disklabel *, int *, int); /* * Attempt to read a disk label from a device @@ -51,39 +51,37 @@ char *readliflabel(struct buf *, void (*)(struct buf *), * * Returns null on success and an error string on failure. */ -char * +int readdisklabel(dev_t dev, void (*strat)(struct buf *), struct disklabel *lp, int spoofonly) { struct buf *bp = NULL; - char *msg; + int error; - if ((msg = initdisklabel(lp))) + if ((error = initdisklabel(lp))) goto done; /* get a buffer and initialize it */ bp = geteblk((int)lp->d_secsize); bp->b_dev = dev; - msg = readliflabel(bp, strat, lp, NULL, spoofonly); - if (msg == NULL) + error = readliflabel(bp, strat, lp, NULL, spoofonly); + if (error == 0) goto done; - msg = readdoslabel(bp, strat, lp, NULL, spoofonly); - if (msg == NULL) + error = readdoslabel(bp, strat, lp, NULL, spoofonly); + if (error == 0) goto done; #if defined(CD9660) - if (iso_disklabelspoof(dev, strat, lp) == 0) { - msg = NULL; + error = iso_disklabelspoof(dev, strat, lp); + if (error == 0) goto done; - } #endif #if defined(UDF) - if (udf_disklabelspoof(dev, strat, lp) == 0) { - msg = NULL; + error = udf_disklabelspoof(dev, strat, lp); + if (error == 0) goto done; - } #endif done: @@ -91,17 +89,17 @@ done: bp->b_flags |= B_INVAL; brelse(bp); } - return (msg); + return (error); } -char * +int readliflabel(struct buf *bp, void (*strat)(struct buf *), struct disklabel *lp, int *partoffp, int spoofonly) { struct buf *dbp = NULL; struct lifdir *p; struct lifvol *lvp; - char *msg = NULL; + int error = 0; int fsoff = 0, openbsdstart = MAXLIFSPACE, i; /* read LIF volume header */ @@ -110,11 +108,13 @@ readliflabel(struct buf *bp, void (*strat)(struct buf *), bp->b_flags = B_BUSY | B_READ | B_RAW; (*strat)(bp); if (biowait(bp)) - return "LIF volume header I/O error"; + return (bp->b_error); lvp = (struct lifvol *)bp->b_data; - if (lvp->vol_id != LIF_VOL_ID) - return "no LIF volume header"; + if (lvp->vol_id != LIF_VOL_ID) { + error = EINVAL; /* no LIF volume header */ + goto done; + } dbp = geteblk(LIF_DIRSIZE); dbp->b_dev = bp->b_dev; @@ -124,9 +124,8 @@ readliflabel(struct buf *bp, void (*strat)(struct buf *), dbp->b_bcount = lp->d_secsize; dbp->b_flags = B_BUSY | B_READ | B_RAW; (*strat)(dbp); - if (biowait(dbp)) { - msg = "LIF directory I/O error"; + error = dbp->b_error; goto done; } @@ -159,14 +158,14 @@ readliflabel(struct buf *bp, void (*strat)(struct buf *), (*strat)(dbp); if (biowait(dbp)) { - msg = "HPUX label I/O error"; + error = dbp->b_error; goto done; } hl = (struct hpux_label *)dbp->b_data; if (hl->hl_magic1 != hl->hl_magic2 || hl->hl_magic != HPUX_MAGIC || hl->hl_version != 1) { - msg = "HPUX label magic mismatch"; + error = EINVAL; /* HPUX label magic mismatch */ goto done; } @@ -228,11 +227,11 @@ finished: bp->b_flags = B_BUSY | B_READ | B_RAW; (*strat)(bp); if (biowait(bp)) { - msg = "disk label I/O error"; + error = bp->b_error; goto done; } - return checkdisklabel(bp->b_data + LABELOFFSET, lp, openbsdstart, + error = checkdisklabel(bp->b_data + LABELOFFSET, lp, openbsdstart, DL_GETDSIZE(lp)); /* XXX */ done: @@ -240,7 +239,7 @@ done: dbp->b_flags |= B_INVAL; brelse(dbp); } - return (msg); + return (error); } /* diff --git a/sys/arch/i386/i386/disksubr.c b/sys/arch/i386/i386/disksubr.c index ea875b7f36b..ff84bdcf42e 100644 --- a/sys/arch/i386/i386/disksubr.c +++ b/sys/arch/i386/i386/disksubr.c @@ -1,4 +1,4 @@ -/* $OpenBSD: disksubr.c,v 1.98 2008/08/08 23:49:53 krw Exp $ */ +/* $OpenBSD: disksubr.c,v 1.99 2009/08/13 15:23:10 deraadt Exp $ */ /* $NetBSD: disksubr.c,v 1.21 1996/05/03 19:42:03 christos Exp $ */ /* @@ -61,16 +61,16 @@ */ bios_diskinfo_t *bios_getdiskinfo(dev_t dev); -char * +int readdisklabel(dev_t dev, void (*strat)(struct buf *), struct disklabel *lp, int spoofonly) { bios_diskinfo_t *pdi; struct buf *bp = NULL; dev_t devno; - char *msg; + int error; - if ((msg = initdisklabel(lp))) + if ((error = initdisklabel(lp))) goto done; /* Look for any BIOS geometry information we should honour. */ @@ -96,21 +96,19 @@ readdisklabel(dev_t dev, void (*strat)(struct buf *), bp = geteblk((int)lp->d_secsize); bp->b_dev = dev; - msg = readdoslabel(bp, strat, lp, NULL, spoofonly); - if (msg == NULL) + error = readdoslabel(bp, strat, lp, NULL, spoofonly); + if (error == 0) goto done; #if defined(CD9660) - if (iso_disklabelspoof(dev, strat, lp) == 0) { - msg = NULL; + error = iso_disklabelspoof(dev, strat, lp); + if (error == 0) goto done; - } #endif #if defined(UDF) - if (udf_disklabelspoof(dev, strat, lp) == 0) { - msg = NULL; + error = udf_disklabelspoof(dev, strat, lp); + if (error == 0) goto done; - } #endif done: @@ -118,7 +116,7 @@ done: bp->b_flags |= B_INVAL; brelse(bp); } - return (msg); + return (error); } /* diff --git a/sys/arch/landisk/landisk/disksubr.c b/sys/arch/landisk/landisk/disksubr.c index f32086e2306..42a6a10c307 100644 --- a/sys/arch/landisk/landisk/disksubr.c +++ b/sys/arch/landisk/landisk/disksubr.c @@ -1,4 +1,4 @@ -/* $OpenBSD: disksubr.c,v 1.39 2008/06/12 06:58:35 deraadt Exp $ */ +/* $OpenBSD: disksubr.c,v 1.40 2009/08/13 15:23:10 deraadt Exp $ */ /* $NetBSD: disksubr.c,v 1.21 1996/05/03 19:42:03 christos Exp $ */ /* @@ -55,35 +55,33 @@ * * Returns null on success and an error string on failure. */ -char * +int readdisklabel(dev_t dev, void (*strat)(struct buf *), struct disklabel *lp, int spoofonly) { struct buf *bp = NULL; - char *msg; + int error; - if ((msg = initdisklabel(lp))) + if ((error = initdisklabel(lp))) goto done; /* get a buffer and initialize it */ bp = geteblk((int)lp->d_secsize); bp->b_dev = dev; - msg = readdoslabel(bp, strat, lp, NULL, spoofonly); - if (msg == NULL) + error = readdoslabel(bp, strat, lp, NULL, spoofonly); + if (error == 0) goto done; #if defined(CD9660) - if (iso_disklabelspoof(dev, strat, lp) == 0) { - msg = NULL; + error = iso_disklabelspoof(dev, strat, lp); + if (error == 0) goto done; - } #endif #if defined(UDF) - if (udf_disklabelspoof(dev, strat, lp) == 0) { - msg = NULL; + error = udf_disklabelspoof(dev, strat, lp); + if (error == 0) goto done; - } #endif done: @@ -91,7 +89,7 @@ done: bp->b_flags |= B_INVAL; brelse(bp); } - return (msg); + return (error); } /* diff --git a/sys/arch/luna88k/luna88k/disksubr.c b/sys/arch/luna88k/luna88k/disksubr.c index a8a30325008..d5d96e7f50f 100644 --- a/sys/arch/luna88k/luna88k/disksubr.c +++ b/sys/arch/luna88k/luna88k/disksubr.c @@ -1,4 +1,4 @@ -/* $OpenBSD: disksubr.c,v 1.41 2009/06/04 21:13:01 deraadt Exp $ */ +/* $OpenBSD: disksubr.c,v 1.42 2009/08/13 15:23:10 deraadt Exp $ */ /* $NetBSD: disksubr.c,v 1.12 2002/02/19 17:09:44 wiz Exp $ */ /* @@ -103,15 +103,15 @@ int disklabel_bsd_to_om(struct disklabel *, struct sun_disklabel *); * * Returns null on success and an error string on failure. */ -char * +int readdisklabel(dev_t dev, void (*strat)(struct buf *), struct disklabel *lp, int spoofonly) { struct sun_disklabel *slp; struct buf *bp = NULL; - char *msg; + int error; - if ((msg = initdisklabel(lp))) + if ((error = initdisklabel(lp))) goto done; lp->d_flags |= D_VENDOR; @@ -128,31 +128,28 @@ readdisklabel(dev_t dev, void (*strat)(struct buf *), bp->b_flags = B_BUSY | B_READ | B_RAW; (*strat)(bp); if (biowait(bp)) { - msg = "disk label read error"; + error = bp->b_error; goto done; } - slp = (struct sun_disklabel *)bp->b_data; - if (slp->sl_magic == SUN_DKMAGIC) { - msg = disklabel_om_to_bsd(slp, lp); + error = disklabel_om_to_bsd((struct sun_disklabel *)bp->b_data, lp); + if (error == 0) goto done; - } - msg = checkdisklabel(bp->b_data + LABELOFFSET, lp, 0, DL_GETDSIZE(lp)); - if (msg == NULL) + error = checkdisklabel(bp->b_data + LABELOFFSET, lp, 0, + DL_GETDSIZE(lp)); + if (error == 0) goto done; #if defined(CD9660) - if (iso_disklabelspoof(dev, strat, lp) == 0) { - msg = NULL; + error = iso_disklabelspoof(dev, strat, lp); + if (error == 0) goto done; - } #endif #if defined(UDF) - if (udf_disklabelspoof(dev, strat, lp) == 0) { - msg = NULL; + error = udf_disklabelspoof(dev, strat, lp); + if (error == 0) goto done; - } #endif done: @@ -160,7 +157,7 @@ done: bp->b_flags |= B_INVAL; brelse(bp); } - return (msg); + return (error); } /* @@ -230,7 +227,7 @@ sun_fstypes[8] = { * * The BSD label is cleared out before this is called. */ -char * +int disklabel_om_to_bsd(struct sun_disklabel *sl, struct disklabel *lp) { struct partition *npp; @@ -238,13 +235,16 @@ disklabel_om_to_bsd(struct sun_disklabel *sl, struct disklabel *lp) int i, secpercyl; u_short cksum = 0, *sp1, *sp2; + if (sl->sl_magic != SUN_DKMAGIC) + return (EINVAL); + /* Verify the XOR check. */ sp1 = (u_short *)sl; sp2 = (u_short *)(sl + 1); while (sp1 < sp2) cksum ^= *sp1++; if (cksum != 0) - return ("UniOS disk label, bad checksum"); + return (EINVAL); /* UniOS disk label, bad checksum */ memset((caddr_t)lp, 0, sizeof(struct disklabel)); /* Format conversion. */ diff --git a/sys/arch/mac68k/mac68k/disksubr.c b/sys/arch/mac68k/mac68k/disksubr.c index 830fa54a495..021a4fa956b 100644 --- a/sys/arch/mac68k/mac68k/disksubr.c +++ b/sys/arch/mac68k/mac68k/disksubr.c @@ -1,4 +1,4 @@ -/* $OpenBSD: disksubr.c,v 1.58 2009/06/24 20:52:41 miod Exp $ */ +/* $OpenBSD: disksubr.c,v 1.59 2009/08/13 15:23:10 deraadt Exp $ */ /* $NetBSD: disksubr.c,v 1.22 1997/11/26 04:18:20 briggs Exp $ */ /* @@ -98,7 +98,7 @@ int whichType(struct partmapentry *); int fixPartTable(struct partmapentry *, long, char *); void setPart(struct partmapentry *, struct disklabel *, int, int); int getNamedType(struct partmapentry *, int8_t *, int, int, int); -char *read_mac_label(char *, struct disklabel *, int); +int read_mac_label(char *, struct disklabel *, int); /* * Find an entry in the disk label that is unused and return it @@ -244,7 +244,7 @@ getNamedType(struct partmapentry *part, int8_t *parttypes, int num_parts, * NetBSD to live on cluster 0--regardless of the actual order on the * disk. This whole algorithm should probably be changed in the future. */ -char * +int read_mac_label(char *dlbuf, struct disklabel *lp, int spoofonly) { int i, num_parts; @@ -256,7 +256,7 @@ read_mac_label(char *dlbuf, struct disklabel *lp, int spoofonly) pmap = (struct partmapentry *)malloc(NUM_PARTS_PROBED * sizeof(struct partmapentry), M_DEVBUF, M_NOWAIT); if (pmap == NULL) - return ("out of memory"); + return (ENOMEM); bsdend = 0; bsdstart = DL_GETDSIZE(lp); @@ -376,7 +376,7 @@ read_mac_label(char *dlbuf, struct disklabel *lp, int spoofonly) } } - return (NULL); + return (0); } lp->d_npartitions = MAXPARTITIONS; @@ -393,16 +393,16 @@ read_mac_label(char *dlbuf, struct disklabel *lp, int spoofonly) * filled in before calling us. Returns null on success and an error * string on failure. */ -char * +int readdisklabel(dev_t dev, void (*strat)(struct buf *), struct disklabel *lp, int spoofonly) { struct buf *bp = NULL; u_int16_t *sbSigp; int size; - char *msg; + int error; - if ((msg = initdisklabel(lp))) + if ((error = initdisklabel(lp))) goto done; size = roundup((NUM_PARTS_PROBED + 1) << DEV_BSHIFT, lp->d_secsize); @@ -414,14 +414,14 @@ readdisklabel(dev_t dev, void (*strat)(struct buf *), bp->b_flags = B_BUSY | B_READ | B_RAW; (*strat)(bp); if (biowait(bp)) { - msg = "disk label I/O error"; + error = bp->b_error; goto done; } sbSigp = (u_int16_t *)bp->b_data; if (*sbSigp == 0x4552) { - msg = read_mac_label(bp->b_data, lp, spoofonly); - if (msg == NULL) + error = read_mac_label(bp->b_data, lp, spoofonly); + if (error == 0) goto done; } @@ -434,30 +434,29 @@ readdisklabel(dev_t dev, void (*strat)(struct buf *), bp->b_flags = B_BUSY | B_READ | B_RAW; (*strat)(bp); if (biowait(bp)) { - msg = "disk label I/O error"; + error = bp->b_error; goto done; } - msg = checkdisklabel(bp->b_data + LABELOFFSET, lp, 0, DL_GETDSIZE(lp)); - if (msg == NULL) + error = checkdisklabel(bp->b_data + LABELOFFSET, lp, 0, + DL_GETDSIZE(lp)); + if (error == 0) goto done; doslabel: - msg = readdoslabel(bp, strat, lp, NULL, spoofonly); - if (msg == NULL) + error = readdoslabel(bp, strat, lp, NULL, spoofonly); + if (error == 0) goto done; #if defined(CD9660) - if (iso_disklabelspoof(dev, strat, lp) == 0) { - msg = NULL; + error = iso_disklabelspoof(dev, strat, lp); + if (error == 0) goto done; - } #endif #if defined(UDF) - if (udf_disklabelspoof(dev, strat, lp) == 0) { - msg = NULL; + error = udf_disklabelspoof(dev, strat, lp); + if (error == 0) goto done; - } #endif done: @@ -465,7 +464,7 @@ done: bp->b_flags |= B_INVAL; brelse(bp); } - return (msg); + return (error); } /* diff --git a/sys/arch/macppc/macppc/disksubr.c b/sys/arch/macppc/macppc/disksubr.c index 7e04b037c19..7988eae966d 100644 --- a/sys/arch/macppc/macppc/disksubr.c +++ b/sys/arch/macppc/macppc/disksubr.c @@ -1,4 +1,4 @@ -/* $OpenBSD: disksubr.c,v 1.66 2009/06/19 11:47:09 krw Exp $ */ +/* $OpenBSD: disksubr.c,v 1.67 2009/08/13 15:23:10 deraadt Exp $ */ /* $NetBSD: disksubr.c,v 1.21 1996/05/03 19:42:03 christos Exp $ */ /* @@ -37,7 +37,7 @@ #include <sys/disklabel.h> #include <sys/disk.h> -char *readdpmelabel(struct buf *, void (*)(struct buf *), +int readdpmelabel(struct buf *, void (*)(struct buf *), struct disklabel *, int *, int); /* @@ -58,39 +58,37 @@ char *readdpmelabel(struct buf *, void (*)(struct buf *), * * Returns null on success and an error string on failure. */ -char * +int readdisklabel(dev_t dev, void (*strat)(struct buf *), struct disklabel *lp, int spoofonly) { struct buf *bp = NULL; - char *msg; + int error; - if ((msg = initdisklabel(lp))) + if ((error = initdisklabel(lp))) goto done; /* get a buffer and initialize it */ bp = geteblk((int)lp->d_secsize); bp->b_dev = dev; - msg = readdpmelabel(bp, strat, lp, NULL, spoofonly); - if (msg == NULL) + error = readdpmelabel(bp, strat, lp, NULL, spoofonly); + if (error == 0) goto done; - msg = readdoslabel(bp, strat, lp, NULL, spoofonly); - if (msg == NULL) + error = readdoslabel(bp, strat, lp, NULL, spoofonly); + if (error == 0) goto done; #if defined(CD9660) - if (iso_disklabelspoof(dev, strat, lp) == 0) { - msg = NULL; + error = iso_disklabelspoof(dev, strat, lp); + if (error == 0) goto done; - } #endif #if defined(UDF) - if (udf_disklabelspoof(dev, strat, lp) == 0) { - msg = NULL; + error = udf_disklabelspoof(dev, strat, lp); + if (error == 0) goto done; - } #endif done: @@ -98,10 +96,10 @@ done: bp->b_flags |= B_INVAL; brelse(bp); } - return (msg); + return (error); } -char * +int readdpmelabel(struct buf *bp, void (*strat)(struct buf *), struct disklabel *lp, int *partoffp, int spoofonly) { @@ -115,13 +113,13 @@ readdpmelabel(struct buf *bp, void (*strat)(struct buf *), bp->b_flags = B_BUSY | B_READ | B_RAW; (*strat)(bp); if (biowait(bp)) - return ("DPME partition I/O error"); + return (bp->b_error); /* if successful, wander through DPME partition table */ part = (struct part_map_entry *)bp->b_data; /* if first partition is not valid, assume not HFS/DPME partitioned */ if (part->pmSig != PART_ENTRY_MAGIC) - return ("not a DPME partition"); + return (EINVAL); /* not a DPME partition */ part_cnt = part->pmMapBlkCnt; n = 8; for (i = 0; i < part_cnt; i++) { @@ -133,7 +131,7 @@ readdpmelabel(struct buf *bp, void (*strat)(struct buf *), bp->b_flags = B_BUSY | B_READ | B_RAW; (*strat)(bp); if (biowait(bp)) - return ("DPME partition I/O error"); + return (bp->b_error); part = (struct part_map_entry *)bp->b_data; /* toupper the string, in case caps are different... */ @@ -146,7 +144,7 @@ readdpmelabel(struct buf *bp, void (*strat)(struct buf *), hfspartend = hfspartoff + part->pmPartBlkCnt; if (partoffp) { *partoffp = hfspartoff; - return (NULL); + return (0); } else { DL_SETBSTART(lp, hfspartoff); DL_SETBEND(lp, @@ -171,10 +169,10 @@ readdpmelabel(struct buf *bp, void (*strat)(struct buf *), } if (hfspartoff == -1) - return ("no OpenBSD partition inside DPME label"); + return (EINVAL); /* no OpenBSD partition inside DPME label */ if (spoofonly) - return (NULL); + return (0); /* next, dig out disk label */ bp->b_blkno = hfspartoff + LABELSECTOR; @@ -182,7 +180,7 @@ readdpmelabel(struct buf *bp, void (*strat)(struct buf *), bp->b_flags = B_BUSY | B_READ | B_RAW; (*strat)(bp); if (biowait(bp)) - return("disk label I/O error"); + return(bp->b_error); if (hfspartoff == -1) hfspartoff = 0; diff --git a/sys/arch/mvme68k/mvme68k/disksubr.c b/sys/arch/mvme68k/mvme68k/disksubr.c index bb66ddd730e..12e444a4059 100644 --- a/sys/arch/mvme68k/mvme68k/disksubr.c +++ b/sys/arch/mvme68k/mvme68k/disksubr.c @@ -1,4 +1,4 @@ -/* $OpenBSD: disksubr.c,v 1.64 2009/06/04 21:57:56 miod Exp $ */ +/* $OpenBSD: disksubr.c,v 1.65 2009/08/13 15:23:10 deraadt Exp $ */ /* * Copyright (c) 1998 Steve Murphree, Jr. * Copyright (c) 1995 Dale Rahn. @@ -33,8 +33,8 @@ #include <sys/disklabel.h> #include <sys/disk.h> -void bsdtocpulabel(struct disklabel *, struct mvmedisklabel *); -void cputobsdlabel(struct disklabel *, struct mvmedisklabel *); +void bsdtocpulabel(struct disklabel *, struct mvmedisklabel *); +int cputobsdlabel(struct disklabel *, struct mvmedisklabel *); /* * Attempt to read a disk label from a device @@ -45,16 +45,14 @@ void cputobsdlabel(struct disklabel *, struct mvmedisklabel *); * Returns NULL on success and an error string on failure. */ -char * +int readdisklabel(dev_t dev, void (*strat)(struct buf *), struct disklabel *lp, int spoofonly) { struct buf *bp = NULL; - struct mvmedisklabel *mlp; int error; - char *msg; - if ((msg = initdisklabel(lp))) + if ((error = initdisklabel(lp))) goto done; /* get a buffer and initialize it */ @@ -69,34 +67,24 @@ readdisklabel(dev_t dev, void (*strat)(struct buf *), bp->b_bcount = lp->d_secsize; bp->b_flags = B_BUSY | B_READ | B_RAW; (*strat)(bp); - error = biowait(bp); - if (error) { - msg = "disk label read error"; - goto done; - } - - mlp = (struct mvmedisklabel *)bp->b_data; - if (mlp->magic1 != DISKMAGIC || mlp->magic2 != DISKMAGIC) { - msg = "no disk label"; + if (biowait(bp)) { + error = bp->b_error; goto done; } - cputobsdlabel(lp, mlp); - if (dkcksum(lp) == 0) + error = cputobsdlabel(lp, (struct mvmedisklabel *)bp->b_data); + if (error == 0) goto done; - msg = "disk label corrupted"; #if defined(CD9660) - if (iso_disklabelspoof(dev, strat, lp) == 0) { - msg = NULL; + error = iso_disklabelspoof(dev, strat, lp); + if (error == 0) goto done; - } #endif #if defined(UDF) - if (udf_disklabelspoof(dev, strat, lp) == 0) { - msg = NULL; + error = udf_disklabelspoof(dev, strat, lp); + if (error == 0) goto done; - } #endif done: @@ -104,7 +92,7 @@ done: bp->b_flags |= B_INVAL; brelse(bp); } - return (msg); + return (error); } /* @@ -194,11 +182,14 @@ bsdtocpulabel(struct disklabel *lp, struct mvmedisklabel *clp) *mot++ = *id++; } -void +int cputobsdlabel(struct disklabel *lp, struct mvmedisklabel *clp) { int i; + if (clp->magic1 != DISKMAGIC || clp->magic2 != DISKMAGIC) + return (EINVAL); /* no disk label */ + lp->d_magic = clp->magic1; lp->d_type = clp->type; lp->d_subtype = clp->subtype; @@ -246,4 +237,5 @@ cputobsdlabel(struct disklabel *lp, struct mvmedisklabel *clp) lp->d_version = 1; lp->d_checksum = 0; lp->d_checksum = dkcksum(lp); + return (0); } diff --git a/sys/arch/mvme88k/mvme88k/disksubr.c b/sys/arch/mvme88k/mvme88k/disksubr.c index 3f11a1f918b..7e2bf40999b 100644 --- a/sys/arch/mvme88k/mvme88k/disksubr.c +++ b/sys/arch/mvme88k/mvme88k/disksubr.c @@ -1,4 +1,4 @@ -/* $OpenBSD: disksubr.c,v 1.60 2009/06/04 21:57:56 miod Exp $ */ +/* $OpenBSD: disksubr.c,v 1.61 2009/08/13 15:23:10 deraadt Exp $ */ /* * Copyright (c) 1998 Steve Murphree, Jr. * Copyright (c) 1995 Dale Rahn. @@ -33,8 +33,8 @@ #include <sys/disklabel.h> #include <sys/disk.h> -void bsdtocpulabel(struct disklabel *, struct mvmedisklabel *); -void cputobsdlabel(struct disklabel *, struct mvmedisklabel *); +void bsdtocpulabel(struct disklabel *, struct mvmedisklabel *); +int cputobsdlabel(struct disklabel *, struct mvmedisklabel *); /* * Attempt to read a disk label from a device @@ -45,16 +45,14 @@ void cputobsdlabel(struct disklabel *, struct mvmedisklabel *); * Returns NULL on success and an error string on failure. */ -char * +int readdisklabel(dev_t dev, void (*strat)(struct buf *), struct disklabel *lp, int spoofonly) { struct buf *bp = NULL; - struct mvmedisklabel *mlp; int error; - char *msg; - if ((msg = initdisklabel(lp))) + if ((error = initdisklabel(lp))) goto done; /* get a buffer and initialize it */ @@ -69,34 +67,24 @@ readdisklabel(dev_t dev, void (*strat)(struct buf *), bp->b_bcount = lp->d_secsize; bp->b_flags = B_BUSY | B_READ | B_RAW; (*strat)(bp); - error = biowait(bp); - if (error) { - msg = "disk label read error"; - goto done; - } - - mlp = (struct mvmedisklabel *)bp->b_data; - if (mlp->magic1 != DISKMAGIC || mlp->magic2 != DISKMAGIC) { - msg = "no disk label"; + if (biowait(bp)) { + error = bp->b_error; goto done; } - cputobsdlabel(lp, mlp); - if (dkcksum(lp) == 0) + error = cputobsdlabel(lp, (struct mvmedisklabel *)bp->b_data); + if (error == 0) goto done; - msg = "disk label corrupted"; #if defined(CD9660) - if (iso_disklabelspoof(dev, strat, lp) == 0) { - msg = NULL; + error = iso_disklabelspoof(dev, strat, lp); + if (error == 0) goto done; - } #endif #if defined(UDF) - if (udf_disklabelspoof(dev, strat, lp) == 0) { - msg = NULL; + error = udf_disklabelspoof(dev, strat, lp); + if (error == 0) goto done; - } #endif done: @@ -104,7 +92,7 @@ done: bp->b_flags |= B_INVAL; brelse(bp); } - return (msg); + return (error); } /* @@ -195,11 +183,14 @@ bsdtocpulabel(struct disklabel *lp, struct mvmedisklabel *clp) *mot++ = *id++; } -void +int cputobsdlabel(struct disklabel *lp, struct mvmedisklabel *clp) { int i; + if (clp->magic1 != DISKMAGIC || clp->magic2 != DISKMAGIC) + return (EINVAL); /* no disk label */ + lp->d_magic = clp->magic1; lp->d_type = clp->type; lp->d_subtype = clp->subtype; @@ -247,4 +238,5 @@ cputobsdlabel(struct disklabel *lp, struct mvmedisklabel *clp) lp->d_version = 1; lp->d_checksum = 0; lp->d_checksum = dkcksum(lp); + return (0); } diff --git a/sys/arch/mvmeppc/mvmeppc/disksubr.c b/sys/arch/mvmeppc/mvmeppc/disksubr.c index 6db60e52d88..a35f34cf7d3 100644 --- a/sys/arch/mvmeppc/mvmeppc/disksubr.c +++ b/sys/arch/mvmeppc/mvmeppc/disksubr.c @@ -1,4 +1,4 @@ -/* $OpenBSD: disksubr.c,v 1.57 2008/06/12 06:58:36 deraadt Exp $ */ +/* $OpenBSD: disksubr.c,v 1.58 2009/08/13 15:23:11 deraadt Exp $ */ /* $NetBSD: disksubr.c,v 1.21 1996/05/03 19:42:03 christos Exp $ */ /* @@ -55,35 +55,33 @@ * * Returns null on success and an error string on failure. */ -char * +int readdisklabel(dev_t dev, void (*strat)(struct buf *), struct disklabel *lp, int spoofonly) { struct buf *bp = NULL; - char *msg; + int error; - if ((msg = initdisklabel(lp))) + if ((error = initdisklabel(lp))) goto done; /* get a buffer and initialize it */ bp = geteblk((int)lp->d_secsize); bp->b_dev = dev; - msg = readdoslabel(bp, strat, lp, NULL, spoofonly); - if (msg == NULL) + error = readdoslabel(bp, strat, lp, NULL, spoofonly); + if (error == 0) goto done; #if defined(CD9660) - if (iso_disklabelspoof(dev, strat, lp) == 0) { - msg = NULL; + error = iso_disklabelspoof(dev, strat, lp); + if (error == 0) goto done; - } #endif #if defined(UDF) - if (udf_disklabelspoof(dev, strat, lp) == 0) { - msg = NULL; + error = udf_disklabelspoof(dev, strat, lp); + if (error == 0) goto done; - } #endif done: @@ -91,7 +89,7 @@ done: bp->b_flags |= B_INVAL; brelse(bp); } - return (msg); + return (error); } /* diff --git a/sys/arch/sgi/sgi/disksubr.c b/sys/arch/sgi/sgi/disksubr.c index 534a579fced..d0571d2176b 100644 --- a/sys/arch/sgi/sgi/disksubr.c +++ b/sys/arch/sgi/sgi/disksubr.c @@ -1,4 +1,4 @@ -/* $OpenBSD: disksubr.c,v 1.16 2009/06/14 00:09:39 deraadt Exp $ */ +/* $OpenBSD: disksubr.c,v 1.17 2009/08/13 15:23:11 deraadt Exp $ */ /* * Copyright (c) 1999 Michael Shalayeff @@ -40,8 +40,8 @@ #include <sys/syslog.h> #include <sys/disk.h> -char *readsgilabel(struct buf *, void (*)(struct buf *), - struct disklabel *, int *, int); +int readsgilabel(struct buf *, void (*)(struct buf *), + struct disklabel *, int *, int); /* * Attempt to read a disk label from a device @@ -53,14 +53,14 @@ char *readsgilabel(struct buf *, void (*)(struct buf *), * * Returns null on success and an error string on failure. */ -char * +int readdisklabel(dev_t dev, void (*strat)(struct buf *), struct disklabel *lp, int spoofonly) { struct buf *bp = NULL; - char *msg; + int error; - if ((msg = initdisklabel(lp))) + if ((error = initdisklabel(lp))) goto done; lp->d_flags |= D_VENDOR; @@ -68,25 +68,23 @@ readdisklabel(dev_t dev, void (*strat)(struct buf *), bp = geteblk((int)lp->d_secsize); bp->b_dev = dev; - msg = readsgilabel(bp, strat, lp, NULL, spoofonly); - if (msg == NULL) + error = readsgilabel(bp, strat, lp, NULL, spoofonly); + if (error == 0) goto done; - msg = readdoslabel(bp, strat, lp, NULL, spoofonly); - if (msg == NULL) + error = readdoslabel(bp, strat, lp, NULL, spoofonly); + if (error == 0) goto done; #if defined(CD9660) - if (iso_disklabelspoof(dev, strat, lp) == 0) { - msg = NULL; + error = iso_disklabelspoof(dev, strat, lp); + if (error == 0) goto done; - } #endif #if defined(UDF) - if (udf_disklabelspoof(dev, strat, lp) == 0) { - msg = NULL; + error = udf_disklabelspoof(dev, strat, lp); + if (error == 0) goto done; - } #endif done: @@ -94,7 +92,7 @@ done: bp->b_flags |= B_INVAL; brelse(bp); } - return (msg); + return (error); } static struct { @@ -109,12 +107,11 @@ static struct { { 8, FS_BSDFFS} }; -char * +int readsgilabel(struct buf *bp, void (*strat)(struct buf *), struct disklabel *lp, int *partoffp, int spoofonly) { struct sgilabel *dlp; - char *msg = NULL; int i, *p, cs = 0; int fsoffs = 0; u_int fsend; @@ -126,21 +123,18 @@ readsgilabel(struct buf *bp, void (*strat)(struct buf *), (*strat)(bp); /* if successful, locate disk label within block and validate */ - if (biowait(bp)) { - msg = "disk label I/O error"; - goto done; - } + if (biowait(bp)) + return (bp->b_error); dlp = (struct sgilabel *)(bp->b_data + LABELOFFSET); if (dlp->magic != htobe32(SGILABEL_MAGIC)) goto finished; - if (dlp->partitions[0].blocks == 0) { - msg = "no BSD partition"; - goto done; - } + if (dlp->partitions[0].blocks == 0) + return (EINVAL); fsoffs = dlp->partitions[0].first * (dlp->dp.dp_secbytes / DEV_BSIZE); - fsend = fsoffs + dlp->partitions[0].blocks * (dlp->dp.dp_secbytes / DEV_BSIZE); + fsend = fsoffs + dlp->partitions[0].blocks * + (dlp->dp.dp_secbytes / DEV_BSIZE); /* Only came here to find the offset... */ if (partoffp) { @@ -152,10 +146,8 @@ readsgilabel(struct buf *bp, void (*strat)(struct buf *), i = sizeof(struct sgilabel) / sizeof(int); while (i--) cs += *p++; - if (cs != 0) { - msg = "sgilabel checksum error"; - goto done; - } + if (cs != 0) + return (EINVAL); /* sgilabel checksum error */ /* Spoof info from sgi label, in case there is no OpenBSD label. */ DL_SETDSIZE(lp, (DL_GETDSIZE(lp)*lp->d_secsize) / dlp->dp.dp_secbytes); @@ -203,22 +195,18 @@ finished: /* don't read the on-disk label if we are in spoofed-only mode */ if (spoofonly) - goto done; + return (0); - bp->b_blkno = DL_BLKTOSEC(lp, fsoffs + LABELSECTOR) * DL_BLKSPERSEC(lp); + bp->b_blkno = DL_BLKTOSEC(lp, fsoffs + LABELSECTOR) * + DL_BLKSPERSEC(lp); offset = DL_BLKOFFSET(lp, fsoffs + LABELSECTOR) + LABELOFFSET; bp->b_bcount = lp->d_secsize; bp->b_flags = B_BUSY | B_READ | B_RAW; (*strat)(bp); - if (biowait(bp)) { - msg = "disk label I/O error"; - goto done; - } + if (biowait(bp)) + return (bp->b_error); return checkdisklabel(bp->b_data + offset, lp, fsoffs, fsend); - -done: - return (msg); } /* diff --git a/sys/arch/socppc/socppc/disksubr.c b/sys/arch/socppc/socppc/disksubr.c index 6ef5b537cd4..8bfa40dbaa4 100644 --- a/sys/arch/socppc/socppc/disksubr.c +++ b/sys/arch/socppc/socppc/disksubr.c @@ -1,4 +1,4 @@ -/* $OpenBSD: disksubr.c,v 1.9 2009/06/19 11:47:09 krw Exp $ */ +/* $OpenBSD: disksubr.c,v 1.10 2009/08/13 15:23:11 deraadt Exp $ */ /* $NetBSD: disksubr.c,v 1.21 1996/05/03 19:42:03 christos Exp $ */ /* @@ -58,39 +58,37 @@ char *readdpmelabel(struct buf *, void (*)(struct buf *), * * Returns null on success and an error string on failure. */ -char * +int readdisklabel(dev_t dev, void (*strat)(struct buf *), struct disklabel *lp, int spoofonly) { struct buf *bp = NULL; - char *msg; + int error; - if ((msg = initdisklabel(lp))) + if ((error = initdisklabel(lp))) goto done; /* get a buffer and initialize it */ bp = geteblk((int)lp->d_secsize); bp->b_dev = dev; - msg = readdpmelabel(bp, strat, lp, NULL, spoofonly); - if (msg == NULL) + error = readdpmelabel(bp, strat, lp, NULL, spoofonly); + if (error == 0) goto done; - msg = readdoslabel(bp, strat, lp, NULL, spoofonly); - if (msg == NULL) + error = readdoslabel(bp, strat, lp, NULL, spoofonly); + if (error == 0) goto done; #if defined(CD9660) - if (iso_disklabelspoof(dev, strat, lp) == 0) { - msg = NULL; + error = iso_disklabelspoof(dev, strat, lp); + if (error == 0) goto done; - } #endif #if defined(UDF) - if (udf_disklabelspoof(dev, strat, lp) == 0) { - msg = NULL; + error = udf_disklabelspoof(dev, strat, lp); + if (error == 0) goto done; - } #endif done: @@ -98,10 +96,10 @@ done: bp->b_flags |= B_INVAL; brelse(bp); } - return (msg); + return (error); } -char * +int readdpmelabel(struct buf *bp, void (*strat)(struct buf *), struct disklabel *lp, int *partoffp, int spoofonly) { @@ -115,7 +113,7 @@ readdpmelabel(struct buf *bp, void (*strat)(struct buf *), bp->b_flags = B_BUSY | B_READ | B_RAW; (*strat)(bp); if (biowait(bp)) - return ("DPME partition I/O error"); + return (bp->b_error); /* if successful, wander through DPME partition table */ part = (struct part_map_entry *)bp->b_data; @@ -133,7 +131,7 @@ readdpmelabel(struct buf *bp, void (*strat)(struct buf *), bp->b_flags = B_BUSY | B_READ | B_RAW; (*strat)(bp); if (biowait(bp)) - return ("DPME partition I/O error"); + return (bp->b_error); part = (struct part_map_entry *)bp->b_data; /* toupper the string, in case caps are different... */ @@ -146,7 +144,7 @@ readdpmelabel(struct buf *bp, void (*strat)(struct buf *), hfspartend = hfspartoff + part->pmPartBlkCnt; if (partoffp) { *partoffp = hfspartoff; - return (NULL); + return (0); } else { DL_SETBSTART(lp, hfspartoff); DL_SETBEND(lp, @@ -170,10 +168,10 @@ readdpmelabel(struct buf *bp, void (*strat)(struct buf *), } if (hfspartoff == -1) - return ("no OpenBSD partition inside DPME label"); + return (EINVAL); if (spoofonly) - return (NULL); + return (0); /* next, dig out disk label */ bp->b_blkno = hfspartoff + LABELSECTOR; @@ -181,7 +179,7 @@ readdpmelabel(struct buf *bp, void (*strat)(struct buf *), bp->b_flags = B_BUSY | B_READ | B_RAW; (*strat)(bp); if (biowait(bp)) - return("disk label I/O error"); + return (bp->b_error); return checkdisklabel(bp->b_data + LABELOFFSET, lp, hfspartoff, hfspartend); diff --git a/sys/arch/sparc/dev/fd.c b/sys/arch/sparc/dev/fd.c index 9c99fad9d59..070f4c029e1 100644 --- a/sys/arch/sparc/dev/fd.c +++ b/sys/arch/sparc/dev/fd.c @@ -1,4 +1,4 @@ -/* $OpenBSD: fd.c,v 1.65 2009/07/24 08:07:39 blambert Exp $ */ +/* $OpenBSD: fd.c,v 1.66 2009/08/13 15:23:12 deraadt Exp $ */ /* $NetBSD: fd.c,v 1.51 1997/05/24 20:16:19 pk Exp $ */ /*- @@ -237,7 +237,7 @@ struct cfdriver fd_cd = { NULL, "fd", DV_DISK }; -void fdgetdisklabel(dev_t, struct fd_softc *, struct disklabel *, int); +int fdgetdisklabel(dev_t, struct fd_softc *, struct disklabel *, int); int fd_get_parms(struct fd_softc *); void fdstrategy(struct buf *); void fdstart(struct fd_softc *); @@ -1931,12 +1931,10 @@ fdformat(dev, finfo, p) return (rv); } -void +int fdgetdisklabel(dev_t dev, struct fd_softc *fd, struct disklabel *lp, int spoofonly) { - char *errstring; - bzero(lp, sizeof(struct disklabel)); lp->d_type = DTYPE_FLOPPY; @@ -1960,10 +1958,7 @@ fdgetdisklabel(dev_t dev, struct fd_softc *fd, struct disklabel *lp, /* * Call the generic disklabel extraction routine. */ - errstring = readdisklabel(DISKLABELDEV(dev), fdstrategy, lp, spoofonly); - if (errstring) { - /*printf("%s: %s\n", fd->sc_dv.dv_xname, errstring);*/ - } + return readdisklabel(DISKLABELDEV(dev), fdstrategy, lp, spoofonly); } void diff --git a/sys/arch/sparc/dev/xd.c b/sys/arch/sparc/dev/xd.c index 096e3e758d7..dbdb87adbaf 100644 --- a/sys/arch/sparc/dev/xd.c +++ b/sys/arch/sparc/dev/xd.c @@ -1,4 +1,4 @@ -/* $OpenBSD: xd.c,v 1.44 2009/01/04 16:51:05 miod Exp $ */ +/* $OpenBSD: xd.c,v 1.45 2009/08/13 15:23:12 deraadt Exp $ */ /* $NetBSD: xd.c,v 1.37 1997/07/29 09:58:16 fair Exp $ */ /* @@ -296,7 +296,7 @@ xdgetdisklabel(xd, b) { struct disklabel *lp = xd->sc_dk.dk_label; struct sun_disklabel *sl = b; - char *err; + int error; bzero(lp, sizeof(struct disklabel)); /* Required parameters for readdisklabel() */ @@ -311,12 +311,10 @@ xdgetdisklabel(xd, b) /* We already have the label data in `b'; setup for dummy strategy */ xd_labeldata = b; - err = readdisklabel(MAKEDISKDEV(0, xd->sc_dev.dv_unit, RAW_PART), + error = readdisklabel(MAKEDISKDEV(0, xd->sc_dev.dv_unit, RAW_PART), xddummystrat, lp, 0); - if (err) { - /*printf("%s: %s\n", xd->sc_dev.dv_xname, err);*/ - return (XD_ERR_FAIL); - } + if (error) + return (error); /* Ok, we have the label; fill in `pcyl' if there's SunOS magic */ sl = b; @@ -336,7 +334,7 @@ xdgetdisklabel(xd, b) xd->nhead = lp->d_ntracks; xd->nsect = lp->d_nsectors; xd->sectpercyl = lp->d_secpercyl; - return (XD_ERR_AOK); + return (0); } /* diff --git a/sys/arch/sparc/dev/xy.c b/sys/arch/sparc/dev/xy.c index 4a10df3ca32..a4684a70c42 100644 --- a/sys/arch/sparc/dev/xy.c +++ b/sys/arch/sparc/dev/xy.c @@ -1,4 +1,4 @@ -/* $OpenBSD: xy.c,v 1.41 2009/01/04 16:51:05 miod Exp $ */ +/* $OpenBSD: xy.c,v 1.42 2009/08/13 15:23:12 deraadt Exp $ */ /* $NetBSD: xy.c,v 1.26 1997/07/19 21:43:56 pk Exp $ */ /* @@ -236,7 +236,7 @@ xygetdisklabel(xy, b) { struct disklabel *lp = xy->sc_dk.dk_label; struct sun_disklabel *sl = b; - char *err; + int error; bzero(lp, sizeof(struct disklabel)); /* Required parameters for readdisklabel() */ @@ -251,12 +251,10 @@ xygetdisklabel(xy, b) /* We already have the label data in `b'; setup for dummy strategy */ xy_labeldata = b; - err = readdisklabel(MAKEDISKDEV(0, xy->sc_dev.dv_unit, RAW_PART), + error = readdisklabel(MAKEDISKDEV(0, xy->sc_dev.dv_unit, RAW_PART), xydummystrat, lp, 0); - if (err) { - /*printf("%s: %s\n", xy->sc_dev.dv_xname, err);*/ - return (XY_ERR_FAIL); - } + if (error) + return (error); /* Ok, we have the label; fill in `pcyl' if there's SunOS magic */ sl = b; @@ -276,7 +274,7 @@ xygetdisklabel(xy, b) xy->nhead = lp->d_ntracks; xy->nsect = lp->d_nsectors; xy->sectpercyl = lp->d_secpercyl; - return (XY_ERR_AOK); + return (error); } /* @@ -596,7 +594,7 @@ xyattach(parent, self, aux) /* Attach the disk: must be before getdisklabel to malloc label */ disk_attach(&xy->sc_dk); - if (xygetdisklabel(xy, xa->buf) != XY_ERR_AOK) + if (xygetdisklabel(xy, xa->buf) != 0) goto done; /* inform the user of what is up */ diff --git a/sys/arch/sparc/sparc/disksubr.c b/sys/arch/sparc/sparc/disksubr.c index 2e1ee4a9dd1..94aa419edf0 100644 --- a/sys/arch/sparc/sparc/disksubr.c +++ b/sys/arch/sparc/sparc/disksubr.c @@ -1,4 +1,4 @@ -/* $OpenBSD: disksubr.c,v 1.81 2009/06/04 21:13:02 deraadt Exp $ */ +/* $OpenBSD: disksubr.c,v 1.82 2009/08/13 15:23:11 deraadt Exp $ */ /* $NetBSD: disksubr.c,v 1.16 1996/04/28 20:25:59 thorpej Exp $ */ /* @@ -46,7 +46,7 @@ #include "cd.h" -static char *disklabel_sun_to_bsd(struct sun_disklabel *, struct disklabel *); +static int disklabel_sun_to_bsd(struct sun_disklabel *, struct disklabel *); static int disklabel_bsd_to_sun(struct disklabel *, struct sun_disklabel *); static __inline u_int sun_extended_sum(struct sun_disklabel *, void *); @@ -66,15 +66,15 @@ extern void cdstrategy(struct buf *); * * Returns null on success and an error string on failure. */ -char * +int readdisklabel(dev_t dev, void (*strat)(struct buf *), struct disklabel *lp, int spoofonly) { struct sun_disklabel *slp; struct buf *bp = NULL; - char *msg; + int error; - if ((msg = initdisklabel(lp))) + if ((error = initdisklabel(lp))) goto done; lp->d_flags |= D_VENDOR; @@ -87,11 +87,11 @@ readdisklabel(dev_t dev, void (*strat)(struct buf *), #if NCD > 0 if (strat == cdstrategy) { #if defined(CD9660) - if (iso_disklabelspoof(dev, strat, lp) == 0) + if ((error = iso_disklabelspoof(dev, strat, lp)) == 0) goto done; #endif #if defined(UDF) - if (udf_disklabelspoof(dev, strat, lp) == 0) + if ((error = udf_disklabelspoof(dev, strat, lp)) == 0) goto done; #endif } @@ -109,37 +109,35 @@ readdisklabel(dev_t dev, void (*strat)(struct buf *), bp->b_flags = B_BUSY | B_READ | B_RAW; (*strat)(bp); if (biowait(bp)) { - msg = "disk label read error"; + error = bp->b_error; goto done; } slp = (struct sun_disklabel *)bp->b_data; if (slp->sl_magic == SUN_DKMAGIC) { - msg = disklabel_sun_to_bsd(slp, lp); + error = disklabel_sun_to_bsd(slp, lp); goto done; } - msg = checkdisklabel(bp->b_data + LABELOFFSET, lp, 0, DL_GETDSIZE(lp)); - if (msg == NULL) + error = checkdisklabel(bp->b_data + LABELOFFSET, lp, 0, DL_GETDSIZE(lp)); + if (error == 0) goto done; doslabel: - msg = readdoslabel(bp, strat, lp, NULL, spoofonly); - if (msg == NULL) + error = readdoslabel(bp, strat, lp, NULL, spoofonly); + if (error == 0) goto done; /* A CD9660/UDF label may be on a non-CD drive, so recheck */ #if defined(CD9660) - if (iso_disklabelspoof(dev, strat, lp) == 0) { - msg = NULL; + error = iso_disklabelspoof(dev, strat, lp); + if (error == 0) goto done; - } #endif #if defined(UDF) - if (udf_disklabelspoof(dev, strat, lp) == 0) { - msg = NULL; + error = udf_disklabelspoof(dev, strat, lp); + if (error == 0) goto done; - } #endif done: @@ -147,7 +145,7 @@ done: bp->b_flags |= B_INVAL; brelse(bp); } - return (msg); + return (error); } /* @@ -234,7 +232,7 @@ sun_extended_sum(struct sun_disklabel *sl, void *end) * * The BSD label is cleared out before this is called. */ -static char * +static int disklabel_sun_to_bsd(struct sun_disklabel *sl, struct disklabel *lp) { struct sun_preamble *preamble = (struct sun_preamble *)sl; @@ -250,7 +248,7 @@ disklabel_sun_to_bsd(struct sun_disklabel *sl, struct disklabel *lp) while (sp1 < sp2) cksum ^= *sp1++; if (cksum != 0) - return ("SunOS disk label, bad checksum"); + return (EINVAL); /* SunOS disk label, bad checksum */ /* Format conversion. */ lp->d_magic = DISKMAGIC; @@ -461,7 +459,6 @@ disklabel_bsd_to_sun(struct disklabel *lp, struct sun_disklabel *sl) while (sp1 < sp2) cksum ^= *sp1++; sl->sl_cksum = cksum; - return (0); } diff --git a/sys/arch/sparc64/dev/fd.c b/sys/arch/sparc64/dev/fd.c index f7ea60ad2e9..d326a7bfcd2 100644 --- a/sys/arch/sparc64/dev/fd.c +++ b/sys/arch/sparc64/dev/fd.c @@ -1,4 +1,4 @@ -/* $OpenBSD: fd.c,v 1.27 2009/07/24 08:07:39 blambert Exp $ */ +/* $OpenBSD: fd.c,v 1.28 2009/08/13 15:23:12 deraadt Exp $ */ /* $NetBSD: fd.c,v 1.112 2003/08/07 16:29:35 agc Exp $ */ /*- @@ -283,7 +283,7 @@ struct cfdriver fd_cd = { NULL, "fd", DV_DISK }; -void fdgetdisklabel(dev_t, struct fd_softc *, struct disklabel *, int); +int fdgetdisklabel(dev_t, struct fd_softc *, struct disklabel *, int); int fd_get_parms(struct fd_softc *); void fdstrategy(struct buf *); void fdstart(struct fd_softc *); @@ -2007,12 +2007,10 @@ fdformat(dev, finfo, p) return (rv); } -void +int fdgetdisklabel(dev_t dev, struct fd_softc *fd, struct disklabel *lp, int spoofonly) { - char *errstring; - bzero(lp, sizeof(struct disklabel)); lp->d_type = DTYPE_FLOPPY; @@ -2037,10 +2035,7 @@ fdgetdisklabel(dev_t dev, struct fd_softc *fd, struct disklabel *lp, * Call the generic disklabel extraction routine. If there's * not a label there, fake it. */ - errstring = readdisklabel(DISKLABELDEV(dev), fdstrategy, lp, spoofonly); - if (errstring) { - /*printf("%s: %s\n", fd->sc_dv.dv_xname, errstring);*/ - } + return readdisklabel(DISKLABELDEV(dev), fdstrategy, lp, spoofonly); } void diff --git a/sys/arch/sparc64/sparc64/disksubr.c b/sys/arch/sparc64/sparc64/disksubr.c index 5c210d13284..50b1d0508f0 100644 --- a/sys/arch/sparc64/sparc64/disksubr.c +++ b/sys/arch/sparc64/sparc64/disksubr.c @@ -1,4 +1,4 @@ -/* $OpenBSD: disksubr.c,v 1.56 2009/06/04 21:13:02 deraadt Exp $ */ +/* $OpenBSD: disksubr.c,v 1.57 2009/08/13 15:23:11 deraadt Exp $ */ /* $NetBSD: disksubr.c,v 1.13 2000/12/17 22:39:18 pk Exp $ */ /* @@ -39,7 +39,7 @@ #include "cd.h" -static char *disklabel_sun_to_bsd(struct sun_disklabel *, struct disklabel *); +static int disklabel_sun_to_bsd(struct sun_disklabel *, struct disklabel *); static int disklabel_bsd_to_sun(struct disklabel *, struct sun_disklabel *); static __inline u_int sun_extended_sum(struct sun_disklabel *, void *); @@ -59,15 +59,15 @@ extern void cdstrategy(struct buf *); * * Returns null on success and an error string on failure. */ -char * +int readdisklabel(dev_t dev, void (*strat)(struct buf *), struct disklabel *lp, int spoofonly) { struct sun_disklabel *slp; struct buf *bp = NULL; - char *msg; + int error; - if ((msg = initdisklabel(lp))) + if ((error = initdisklabel(lp))) goto done; lp->d_flags |= D_VENDOR; @@ -102,37 +102,35 @@ readdisklabel(dev_t dev, void (*strat)(struct buf *), bp->b_flags = B_BUSY | B_READ | B_RAW; (*strat)(bp); if (biowait(bp)) { - msg = "disk label read error"; + error = bp->b_error; goto done; } slp = (struct sun_disklabel *)bp->b_data; if (slp->sl_magic == SUN_DKMAGIC) { - msg = disklabel_sun_to_bsd(slp, lp); + error = disklabel_sun_to_bsd(slp, lp); goto done; } - msg = checkdisklabel(bp->b_data + LABELOFFSET, lp, 0, DL_GETDSIZE(lp)); - if (msg == NULL) + error = checkdisklabel(bp->b_data + LABELOFFSET, lp, 0, DL_GETDSIZE(lp)); + if (error == 0) goto done; doslabel: - msg = readdoslabel(bp, strat, lp, NULL, spoofonly); - if (msg == NULL) + error = readdoslabel(bp, strat, lp, NULL, spoofonly); + if (error == 0) goto done; /* A CD9660/UDF label may be on a non-CD drive, so recheck */ #if defined(CD9660) - if (iso_disklabelspoof(dev, strat, lp) == 0) { - msg = NULL; + error = iso_disklabelspoof(dev, strat, lp); + if (error == 0) goto done; - } #endif #if defined(UDF) - if (udf_disklabelspoof(dev, strat, lp) == 0) { - msg = NULL; + error = udf_disklabelspoof(dev, strat, lp); + if (error == 0) goto done; - } #endif done: @@ -140,7 +138,7 @@ done: bp->b_flags |= B_INVAL; brelse(bp); } - return (msg); + return (error); } /* @@ -227,7 +225,7 @@ sun_extended_sum(struct sun_disklabel *sl, void *end) * * The BSD label is cleared out before this is called. */ -static char * +static int disklabel_sun_to_bsd(struct sun_disklabel *sl, struct disklabel *lp) { struct sun_preamble *preamble = (struct sun_preamble *)sl; @@ -243,7 +241,7 @@ disklabel_sun_to_bsd(struct sun_disklabel *sl, struct disklabel *lp) while (sp1 < sp2) cksum ^= *sp1++; if (cksum != 0) - return ("SunOS disk label, bad checksum"); + return (EINVAL); /* SunOS disk label, bad checksum */ /* Format conversion. */ lp->d_magic = DISKMAGIC; diff --git a/sys/arch/vax/mscp/mscp_disk.c b/sys/arch/vax/mscp/mscp_disk.c index 257cb20e6d2..4ea13d908b5 100644 --- a/sys/arch/vax/mscp/mscp_disk.c +++ b/sys/arch/vax/mscp/mscp_disk.c @@ -1,4 +1,4 @@ -/* $OpenBSD: mscp_disk.c,v 1.25 2009/06/04 21:38:10 miod Exp $ */ +/* $OpenBSD: mscp_disk.c,v 1.26 2009/08/13 15:23:13 deraadt Exp $ */ /* $NetBSD: mscp_disk.c,v 1.30 2001/11/13 07:38:28 lukem Exp $ */ /* * Copyright (c) 1996 Ludd, University of Lule}, Sweden. @@ -153,7 +153,6 @@ ra_putonline(ra) struct ra_softc *ra; { struct disklabel *dl; - char *msg; if (rx_putonline(ra) != MSCP_DONE) return MSCP_FAILED; @@ -162,9 +161,9 @@ ra_putonline(ra) ra->ra_state = DK_RDLABEL; printf("%s", ra->ra_dev.dv_xname); - if ((msg = readdisklabel(MAKEDISKDEV(RAMAJOR, ra->ra_dev.dv_unit, - RAW_PART), rastrategy, dl, 0)) != NULL) { - /*printf(": %s", msg);*/ + if ((readdisklabel(MAKEDISKDEV(RAMAJOR, ra->ra_dev.dv_unit, + RAW_PART), rastrategy, dl, 0)) != 0) { + /* EIO and others */ } else { ra->ra_havelabel = 1; ra->ra_state = DK_OPEN; diff --git a/sys/arch/vax/vax/disksubr.c b/sys/arch/vax/vax/disksubr.c index 03be0cb3357..d8b174f6da9 100644 --- a/sys/arch/vax/vax/disksubr.c +++ b/sys/arch/vax/vax/disksubr.c @@ -1,4 +1,4 @@ -/* $OpenBSD: disksubr.c,v 1.59 2009/06/04 21:13:02 deraadt Exp $ */ +/* $OpenBSD: disksubr.c,v 1.60 2009/08/13 15:23:11 deraadt Exp $ */ /* $NetBSD: disksubr.c,v 1.21 1999/06/30 18:48:06 ragge Exp $ */ /* @@ -58,14 +58,14 @@ * (e.g., sector size) must be filled in before calling us. * Returns null on success and an error string on failure. */ -char * +int readdisklabel(dev_t dev, void (*strat)(struct buf *), struct disklabel *lp, int spoofonly) { struct buf *bp = NULL; - char *msg; + char error; - if ((msg = initdisklabel(lp))) + if ((error = initdisklabel(lp))) goto done; bp = geteblk((int)lp->d_secsize); @@ -81,25 +81,24 @@ readdisklabel(dev_t dev, void (*strat)(struct buf *), bp->b_flags = B_BUSY | B_READ | B_RAW; (*strat)(bp); if (biowait(bp)) { - msg = "I/O error"; + error = bp->b_error; goto done; } - msg = checkdisklabel(bp->b_data + LABELOFFSET, lp, 16, DL_GETDSIZE(lp)); - if (msg == NULL) + error = checkdisklabel(bp->b_data + LABELOFFSET, lp, + 16, DL_GETDSIZE(lp)); + if (error == 0) goto done; #if defined(CD9660) - if (iso_disklabelspoof(dev, strat, lp) == 0) { - msg = NULL; + error = iso_disklabelspoof(dev, strat, lp); + if (error == 0) goto done; - } #endif #if defined(UDF) - if (udf_disklabelspoof(dev, strat, lp) == 0) { - msg = NULL; + error = udf_disklabelspoof(dev, strat, lp); + if (error == 0) goto done; - } #endif done: @@ -107,7 +106,7 @@ done: bp->b_flags |= B_INVAL; brelse(bp); } - return (msg); + return (error); } /* diff --git a/sys/arch/vax/vsa/hdc9224.c b/sys/arch/vax/vsa/hdc9224.c index edf8a9078b2..10151a5eae3 100644 --- a/sys/arch/vax/vsa/hdc9224.c +++ b/sys/arch/vax/vsa/hdc9224.c @@ -1,4 +1,4 @@ -/* $OpenBSD: hdc9224.c,v 1.23 2009/06/04 21:38:10 miod Exp $ */ +/* $OpenBSD: hdc9224.c,v 1.24 2009/08/13 15:23:13 deraadt Exp $ */ /* $NetBSD: hdc9224.c,v 1.16 2001/07/26 15:05:09 wiz Exp $ */ /* * Copyright (c) 1996 Ludd, University of Lule}, Sweden. @@ -345,7 +345,7 @@ hdattach(struct device *parent, struct device *self, void *aux) struct hdsoftc *hd = (void*)self; struct hdc_attach_args *ha = aux; struct disklabel *dl; - char *msg; + int error; hd->sc_drive = ha->ha_drive; /* @@ -362,14 +362,11 @@ hdattach(struct device *parent, struct device *self, void *aux) disk_printtype(hd->sc_drive, hd->sc_xbn.media_id); dl = hd->sc_disk.dk_label; hdmakelabel(dl, &hd->sc_xbn); - msg = readdisklabel(MAKEDISKDEV(HDMAJOR, hd->sc_dev.dv_unit, RAW_PART), + error = readdisklabel(MAKEDISKDEV(HDMAJOR, hd->sc_dev.dv_unit, RAW_PART), hdstrategy, dl, 0); printf("%s: %luMB, %lu sectors\n", hd->sc_dev.dv_xname, DL_GETDSIZE(dl) / (1048576 / DEV_BSIZE), DL_GETDSIZE(dl)); - if (msg) { - /*printf("%s: %s\n", hd->sc_dev.dv_xname, msg);*/ - } #ifdef HDDEBUG hdc_printgeom(&hd->sc_xbn); #endif diff --git a/sys/dev/ata/wd.c b/sys/dev/ata/wd.c index b70a68ba61e..40558d85d74 100644 --- a/sys/dev/ata/wd.c +++ b/sys/dev/ata/wd.c @@ -1,4 +1,4 @@ -/* $OpenBSD: wd.c,v 1.75 2009/06/17 01:30:30 thib Exp $ */ +/* $OpenBSD: wd.c,v 1.76 2009/08/13 15:23:12 deraadt Exp $ */ /* $NetBSD: wd.c,v 1.193 1999/02/28 17:15:27 explorer Exp $ */ /* @@ -169,7 +169,7 @@ struct cfdriver wd_cd = { }; void wdgetdefaultlabel(struct wd_softc *, struct disklabel *); -void wdgetdisklabel(dev_t dev, struct wd_softc *, struct disklabel *, int); +int wdgetdisklabel(dev_t dev, struct wd_softc *, struct disklabel *, int); void wdstrategy(struct buf *); void wdstart(void *); void __wdstart(struct wd_softc*, struct buf *); @@ -703,7 +703,11 @@ wdopen(dev_t dev, int flag, int fmt, struct proc *p) wd_get_params(wd, AT_WAIT, &wd->sc_params); /* Load the partition info if not already loaded. */ - wdgetdisklabel(dev, wd, wd->sc_dk.dk_label, 0); + if (wdgetdisklabel(dev, wd, + wd->sc_dk.dk_label, 0) == EIO) { + error = EIO; + goto bad; + } } } @@ -816,11 +820,11 @@ wdgetdefaultlabel(struct wd_softc *wd, struct disklabel *lp) /* * Fabricate a default disk label, and try to read the correct one. */ -void +int wdgetdisklabel(dev_t dev, struct wd_softc *wd, struct disklabel *lp, int spoofonly) { - char *errstring; + int error; WDCDEBUG_PRINT(("wdgetdisklabel\n"), DEBUG_FUNCS); @@ -828,13 +832,11 @@ wdgetdisklabel(dev_t dev, struct wd_softc *wd, struct disklabel *lp, if (wd->drvp->state > RECAL) wd->drvp->drive_flags |= DRIVE_RESET; - errstring = readdisklabel(DISKLABELDEV(dev), wdstrategy, lp, + error = readdisklabel(DISKLABELDEV(dev), wdstrategy, lp, spoofonly); if (wd->drvp->state > RECAL) wd->drvp->drive_flags |= DRIVE_RESET; - if (errstring) { - /*printf("%s: %s\n", wd->sc_dev.dv_xname, errstring);*/ - } + return (error); } int diff --git a/sys/dev/ccd.c b/sys/dev/ccd.c index 18169e5efd2..d6c13072962 100644 --- a/sys/dev/ccd.c +++ b/sys/dev/ccd.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ccd.c,v 1.86 2009/06/04 05:57:27 krw Exp $ */ +/* $OpenBSD: ccd.c,v 1.87 2009/08/13 15:23:11 deraadt Exp $ */ /* $NetBSD: ccd.c,v 1.33 1996/05/05 04:21:14 thorpej Exp $ */ /*- @@ -175,7 +175,7 @@ int ccdinit(struct ccddevice *, char **, struct proc *); int ccdlookup(char *, struct proc *p, struct vnode **); long ccdbuffer(struct ccd_softc *, struct buf *, daddr64_t, caddr_t, long, struct ccdbuf **); -void ccdgetdisklabel(dev_t, struct ccd_softc *, struct disklabel *, int); +int ccdgetdisklabel(dev_t, struct ccd_softc *, struct disklabel *, int); INLINE struct ccdbuf *getccdbuf(void); INLINE void putccdbuf(struct ccdbuf *); @@ -1353,12 +1353,11 @@ ccdlookup(char *path, struct proc *p, struct vnode **vpp) * Read the disklabel from the ccd. If one is not present, fake one * up. */ -void +int ccdgetdisklabel(dev_t dev, struct ccd_softc *cs, struct disklabel *lp, int spoofonly) { struct ccdgeom *ccg = &cs->sc_geom; - char *errstring; bzero(lp, sizeof(*lp)); @@ -1384,11 +1383,8 @@ ccdgetdisklabel(dev_t dev, struct ccd_softc *cs, struct disklabel *lp, /* * Call the generic disklabel extraction routine. */ - errstring = readdisklabel(DISKLABELDEV(dev), ccdstrategy, + return readdisklabel(DISKLABELDEV(dev), ccdstrategy, cs->sc_dkdev.dk_label, spoofonly); - /* It's actually extremely common to have unlabeled ccds. */ - if (errstring != NULL) - CCD_DPRINTF(CCDB_LABEL, ("%s: %s\n", cs->sc_xname, errstring)); } #ifdef CCDDEBUG diff --git a/sys/dev/isa/fd.c b/sys/dev/isa/fd.c index 893b73d7e5d..8c51510a216 100644 --- a/sys/dev/isa/fd.c +++ b/sys/dev/isa/fd.c @@ -1,4 +1,4 @@ -/* $OpenBSD: fd.c,v 1.77 2009/08/05 13:45:29 blambert Exp $ */ +/* $OpenBSD: fd.c,v 1.78 2009/08/13 15:23:12 deraadt Exp $ */ /* $NetBSD: fd.c,v 1.90 1996/05/12 23:12:03 mycroft Exp $ */ /*- @@ -139,7 +139,7 @@ struct cfdriver fd_cd = { NULL, "fd", DV_DISK }; -void fdgetdisklabel(dev_t, struct fd_softc *, struct disklabel *, int); +int fdgetdisklabel(dev_t, struct fd_softc *, struct disklabel *, int); int fd_get_parms(struct fd_softc *); void fdstrategy(struct buf *); void fdstart(struct fd_softc *); @@ -156,12 +156,10 @@ static __inline struct fd_type *fd_dev_to_type(struct fd_softc *, dev_t); void fdretry(struct fd_softc *); void fdtimeout(void *); -void +int fdgetdisklabel(dev_t dev, struct fd_softc *fd, struct disklabel *lp, int spoofonly) { - char *errstring; - bzero(lp, sizeof(struct disklabel)); lp->d_type = DTYPE_FLOPPY; @@ -186,10 +184,7 @@ fdgetdisklabel(dev_t dev, struct fd_softc *fd, struct disklabel *lp, * Call the generic disklabel extraction routine. If there's * not a label there, fake it. */ - errstring = readdisklabel(DISKLABELDEV(dev), fdstrategy, lp, spoofonly); - if (errstring) { - /*printf("%s: %s\n", fd->sc_dev.dv_xname, errstring);*/ - } + return readdisklabel(DISKLABELDEV(dev), fdstrategy, lp, spoofonly); } int diff --git a/sys/dev/vnd.c b/sys/dev/vnd.c index 43c78122563..14e94094cf5 100644 --- a/sys/dev/vnd.c +++ b/sys/dev/vnd.c @@ -1,4 +1,4 @@ -/* $OpenBSD: vnd.c,v 1.93 2009/06/17 01:30:30 thib Exp $ */ +/* $OpenBSD: vnd.c,v 1.94 2009/08/13 15:23:11 deraadt Exp $ */ /* $NetBSD: vnd.c,v 1.26 1996/03/30 23:06:11 christos Exp $ */ /* @@ -163,7 +163,7 @@ void vndstart(struct vnd_softc *); int vndsetcred(struct vnd_softc *, struct ucred *); void vndiodone(struct buf *); void vndshutdown(void); -void vndgetdisklabel(dev_t, struct vnd_softc *, struct disklabel *, int); +int vndgetdisklabel(dev_t, struct vnd_softc *, struct disklabel *, int); void vndencrypt(struct vnd_softc *, caddr_t, size_t, daddr64_t, int); size_t vndbdevsize(struct vnode *, struct proc *); @@ -300,12 +300,10 @@ bad: /* * Load the label information on the named device */ -void +int vndgetdisklabel(dev_t dev, struct vnd_softc *sc, struct disklabel *lp, int spoofonly) { - char *errstring = NULL; - bzero(lp, sizeof(struct disklabel)); lp->d_secsize = sc->sc_secsize; @@ -328,12 +326,7 @@ vndgetdisklabel(dev_t dev, struct vnd_softc *sc, struct disklabel *lp, lp->d_checksum = dkcksum(lp); /* Call the generic disklabel extraction routine */ - errstring = readdisklabel(VNDLABELDEV(dev), vndstrategy, lp, spoofonly); - if (errstring) { - DNPRINTF(VDB_IO, "%s: %s\n", sc->sc_dev.dv_xname, - errstring); - return; - } + return readdisklabel(VNDLABELDEV(dev), vndstrategy, lp, spoofonly); } int diff --git a/sys/kern/subr_disk.c b/sys/kern/subr_disk.c index 089167d1f8c..077b0874e77 100644 --- a/sys/kern/subr_disk.c +++ b/sys/kern/subr_disk.c @@ -1,4 +1,4 @@ -/* $OpenBSD: subr_disk.c,v 1.96 2009/08/09 14:06:52 marco Exp $ */ +/* $OpenBSD: subr_disk.c,v 1.97 2009/08/13 15:23:11 deraadt Exp $ */ /* $NetBSD: subr_disk.c,v 1.17 1996/03/16 23:17:08 christos Exp $ */ /* @@ -190,7 +190,7 @@ dkcksum(struct disklabel *lp) return (sum); } -char * +int initdisklabel(struct disklabel *lp) { int i; @@ -201,7 +201,7 @@ initdisklabel(struct disklabel *lp) if (DL_GETDSIZE(lp) == 0) DL_SETDSIZE(lp, MAXDISKSIZE); if (lp->d_secpercyl == 0) - return ("invalid geometry"); + return (ERANGE); lp->d_npartitions = MAXPARTITIONS; for (i = 0; i < RAW_PART; i++) { DL_SETPSIZE(&lp->d_partitions[i], 0); @@ -215,14 +215,14 @@ initdisklabel(struct disklabel *lp) lp->d_version = 1; lp->d_bbsize = 8192; lp->d_sbsize = 64*1024; /* XXX ? */ - return (NULL); + return (0); } /* * Check an incoming block to make sure it is a disklabel, convert it to * a newer version if needed, etc etc. */ -char * +int checkdisklabel(void *rlp, struct disklabel *lp, u_int64_t boundstart, u_int64_t boundend) { @@ -230,28 +230,28 @@ checkdisklabel(void *rlp, struct disklabel *lp, struct __partitionv0 *v0pp; struct partition *pp; daddr64_t disksize; - char *msg = NULL; + int error = 0; int i; if (dlp->d_magic != DISKMAGIC || dlp->d_magic2 != DISKMAGIC) - msg = "no disk label"; + error = ENOENT; /* no disk label */ else if (dlp->d_npartitions > MAXPARTITIONS) - msg = "invalid label, partition count > MAXPARTITIONS"; + error = E2BIG; /* too many partitions */ else if (dlp->d_secpercyl == 0) - msg = "invalid label, d_secpercyl == 0"; + error = EINVAL; /* invalid label */ else if (dlp->d_secsize == 0) - msg = "invalid label, d_secsize == 0"; + error = ENOSPC; /* disk too small */ else if (dkcksum(dlp) != 0) - msg = "invalid label, incorrect checksum"; + error = EINVAL; /* incorrect checksum */ - if (msg) { + if (error) { u_int16_t *start, *end, sum = 0; /* If it is byte-swapped, attempt to convert it */ if (swap32(dlp->d_magic) != DISKMAGIC || swap32(dlp->d_magic2) != DISKMAGIC || swap16(dlp->d_npartitions) > MAXPARTITIONS) - return (msg); + return (error); /* * Need a byte-swap aware dkcksum varient @@ -263,7 +263,7 @@ checkdisklabel(void *rlp, struct disklabel *lp, while (start < end) sum ^= *start++; if (sum != 0) - return (msg); + return (error); dlp->d_magic = swap32(dlp->d_magic); dlp->d_type = swap16(dlp->d_type); @@ -319,13 +319,13 @@ checkdisklabel(void *rlp, struct disklabel *lp, dlp->d_checksum = 0; dlp->d_checksum = dkcksum(dlp); - msg = NULL; + error = 0; } /* XXX should verify lots of other fields and whine a lot */ - if (msg) - return (msg); + if (error) + return (error); /* Initial passed in lp contains the real disk size. */ disksize = DL_GETDSIZE(lp); @@ -366,7 +366,7 @@ checkdisklabel(void *rlp, struct disklabel *lp, lp->d_checksum = 0; lp->d_checksum = dkcksum(lp); - return (msg); + return (0); } /* @@ -378,7 +378,7 @@ checkdisklabel(void *rlp, struct disklabel *lp, * we cannot because it doesn't always exist. So.. we assume the * MBR is valid. */ -char * +int readdoslabel(struct buf *bp, void (*strat)(struct buf *), struct disklabel *lp, int *partoffp, int spoofonly) { @@ -387,11 +387,12 @@ readdoslabel(struct buf *bp, void (*strat)(struct buf *), struct dos_partition dp[NDOSPART], *dp2; daddr64_t part_blkno = DOSBBSECTOR; u_int32_t extoff = 0; + int error; if (lp->d_secpercyl == 0) - return ("invalid label, d_secpercyl == 0"); + return (EINVAL); /* invalid label */ if (lp->d_secsize == 0) - return ("invalid label, d_secsize == 0"); + return (ENOSPC); /* disk too small */ /* do DOS partitions in the process of getting disklabel? */ @@ -411,10 +412,11 @@ readdoslabel(struct buf *bp, void (*strat)(struct buf *), bp->b_bcount = lp->d_secsize; bp->b_flags = B_BUSY | B_READ | B_RAW; (*strat)(bp); - if (biowait(bp)) { + error = biowait(bp); + if (error) { /*wrong*/ if (partoffp) /*wrong*/ *partoffp = -1; - return ("dos partition I/O error"); + return (error); } bcopy(bp->b_data + offset, dp, sizeof(dp)); @@ -587,7 +589,7 @@ notfat: /* don't read the on-disk label if we are in spoofed-only mode */ if (spoofonly) - return (NULL); /* jump to the checkdisklabel below?? */ + return (0); bp->b_blkno = DL_BLKTOSEC(lp, dospartoff + DOS_LABELSECTOR) * DL_BLKSPERSEC(lp); @@ -596,7 +598,7 @@ notfat: bp->b_flags = B_BUSY | B_READ | B_RAW; (*strat)(bp); if (biowait(bp)) - return ("disk label I/O error"); + return (bp->b_error); /* sub-MBR disklabels are always at a LABELOFFSET of 0 */ return checkdisklabel(bp->b_data + offset, lp, dospartoff, dospartend); diff --git a/sys/scsi/cd.c b/sys/scsi/cd.c index 64b8e7adc8a..01feb0726b2 100644 --- a/sys/scsi/cd.c +++ b/sys/scsi/cd.c @@ -1,4 +1,4 @@ -/* $OpenBSD: cd.c,v 1.148 2009/06/17 01:30:30 thib Exp $ */ +/* $OpenBSD: cd.c,v 1.149 2009/08/13 15:23:11 deraadt Exp $ */ /* $NetBSD: cd.c,v 1.100 1997/04/02 02:29:30 mycroft Exp $ */ /* @@ -96,7 +96,7 @@ int cddetach(struct device *, int); void cdstart(void *); void cdrestart(void *); void cdminphys(struct buf *); -void cdgetdisklabel(dev_t, struct cd_softc *, struct disklabel *, int); +int cdgetdisklabel(dev_t, struct cd_softc *, struct disklabel *, int); void cddone(struct scsi_xfer *); void cd_kill_buffers(struct cd_softc *); int cd_setchan(struct cd_softc *, int, int, int, int, int); @@ -1118,12 +1118,11 @@ cdioctl(dev_t dev, u_long cmd, caddr_t addr, int flag, struct proc *p) * EVENTUALLY take information about different * data tracks from the TOC and put it in the disklabel */ -void +int cdgetdisklabel(dev_t dev, struct cd_softc *cd, struct disklabel *lp, int spoofonly) { struct cd_toc *toc; - char *errstring; int tocidx, n, audioonly = 1; bzero(lp, sizeof(struct disklabel)); @@ -1173,12 +1172,9 @@ cdgetdisklabel(dev_t dev, struct cd_softc *cd, struct disklabel *lp, done: free(toc, M_TEMP); - if (!audioonly) { - errstring = readdisklabel(DISKLABELDEV(dev), cdstrategy, lp, - spoofonly); - /*if (errstring) - printf("%s: %s\n", cd->sc_dev.dv_xname, errstring);*/ - } + if (audioonly) + return (0); + return readdisklabel(DISKLABELDEV(dev), cdstrategy, lp, spoofonly); } int diff --git a/sys/scsi/sd.c b/sys/scsi/sd.c index 8f9d44c4e6d..e74777e44f9 100644 --- a/sys/scsi/sd.c +++ b/sys/scsi/sd.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sd.c,v 1.156 2009/06/17 01:30:30 thib Exp $ */ +/* $OpenBSD: sd.c,v 1.157 2009/08/13 15:23:11 deraadt Exp $ */ /* $NetBSD: sd.c,v 1.111 1997/04/02 02:29:41 mycroft Exp $ */ /*- @@ -81,7 +81,7 @@ int sdactivate(struct device *, enum devact); int sddetach(struct device *, int); void sdminphys(struct buf *); -void sdgetdisklabel(dev_t, struct sd_softc *, struct disklabel *, int); +int sdgetdisklabel(dev_t, struct sd_softc *, struct disklabel *, int); void sdstart(void *); void sdrestart(void *); void sddone(struct scsi_xfer *); @@ -398,7 +398,10 @@ sdopen(dev_t dev, int flag, int fmt, struct proc *p) SC_DEBUG(sc_link, SDEV_DB3, ("Params loaded\n")); /* Load the partition info if not already loaded. */ - sdgetdisklabel(dev, sd, sd->sc_dk.dk_label, 0); + if (sdgetdisklabel(dev, sd, sd->sc_dk.dk_label, 0) == EIO) { + error = EIO; + goto bad; + } SC_DEBUG(sc_link, SDEV_DB3, ("Disklabel loaded\n")); } @@ -992,12 +995,12 @@ sd_ioctl_inquiry(struct sd_softc *sd, struct dk_inquiry *di) /* * Load the label information on the named device */ -void +int sdgetdisklabel(dev_t dev, struct sd_softc *sd, struct disklabel *lp, int spoofonly) { size_t len; - char *errstring, packname[sizeof(lp->d_packname) + 1]; + char packname[sizeof(lp->d_packname) + 1]; char product[17], vendor[9]; bzero(lp, sizeof(struct disklabel)); @@ -1057,10 +1060,7 @@ sdgetdisklabel(dev_t dev, struct sd_softc *sd, struct disklabel *lp, /* * Call the generic disklabel extraction routine */ - errstring = readdisklabel(DISKLABELDEV(dev), sdstrategy, lp, spoofonly); - if (errstring) { - /*printf("%s: %s\n", sd->sc_dev.dv_xname, errstring);*/ - } + return readdisklabel(DISKLABELDEV(dev), sdstrategy, lp, spoofonly); } diff --git a/sys/sys/disklabel.h b/sys/sys/disklabel.h index 67909e7840b..40ca7c4ff93 100644 --- a/sys/sys/disklabel.h +++ b/sys/sys/disklabel.h @@ -1,4 +1,4 @@ -/* $OpenBSD: disklabel.h,v 1.45 2009/06/04 21:13:02 deraadt Exp $ */ +/* $OpenBSD: disklabel.h,v 1.46 2009/08/13 15:23:11 deraadt Exp $ */ /* $NetBSD: disklabel.h,v 1.41 1996/05/10 23:07:37 mark Exp $ */ /* @@ -471,13 +471,13 @@ struct dos_mbr { void diskerr(struct buf *, char *, char *, int, int, struct disklabel *); void disksort(struct buf *, struct buf *); u_int dkcksum(struct disklabel *); -char *initdisklabel(struct disklabel *); -char *checkdisklabel(void *, struct disklabel *, u_int64_t, u_int64_t); +int initdisklabel(struct disklabel *); +int checkdisklabel(void *, struct disklabel *, u_int64_t, u_int64_t); int setdisklabel(struct disklabel *, struct disklabel *, u_int); -char *readdisklabel(dev_t, void (*)(struct buf *), struct disklabel *, int); +int readdisklabel(dev_t, void (*)(struct buf *), struct disklabel *, int); int writedisklabel(dev_t, void (*)(struct buf *), struct disklabel *); int bounds_check_with_label(struct buf *, struct disklabel *, int); -char *readdoslabel(struct buf *, void (*)(struct buf *), +int readdoslabel(struct buf *, void (*)(struct buf *), struct disklabel *, int *, int); #ifdef CD9660 int iso_disklabelspoof(dev_t dev, void (*strat)(struct buf *), |