1*ac8e5d02SConrad Meyer /*- 2*ac8e5d02SConrad Meyer * SPDX-License-Identifier: BSD-2-Clause-FreeBSD 3*ac8e5d02SConrad Meyer * 4*ac8e5d02SConrad Meyer * Copyright (c) 2003 Poul-Henning Kamp 5*ac8e5d02SConrad Meyer * All rights reserved. 6*ac8e5d02SConrad Meyer * 7*ac8e5d02SConrad Meyer * Redistribution and use in source and binary forms, with or without 8*ac8e5d02SConrad Meyer * modification, are permitted provided that the following conditions 9*ac8e5d02SConrad Meyer * are met: 10*ac8e5d02SConrad Meyer * 1. Redistributions of source code must retain the above copyright 11*ac8e5d02SConrad Meyer * notice, this list of conditions and the following disclaimer. 12*ac8e5d02SConrad Meyer * 2. Redistributions in binary form must reproduce the above copyright 13*ac8e5d02SConrad Meyer * notice, this list of conditions and the following disclaimer in the 14*ac8e5d02SConrad Meyer * documentation and/or other materials provided with the distribution. 15*ac8e5d02SConrad Meyer * 16*ac8e5d02SConrad Meyer * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 17*ac8e5d02SConrad Meyer * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18*ac8e5d02SConrad Meyer * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19*ac8e5d02SConrad Meyer * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 20*ac8e5d02SConrad Meyer * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21*ac8e5d02SConrad Meyer * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 22*ac8e5d02SConrad Meyer * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23*ac8e5d02SConrad Meyer * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 24*ac8e5d02SConrad Meyer * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 25*ac8e5d02SConrad Meyer * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26*ac8e5d02SConrad Meyer * SUCH DAMAGE. 27*ac8e5d02SConrad Meyer */ 28*ac8e5d02SConrad Meyer 29*ac8e5d02SConrad Meyer /* Functions to encode or decode struct dos_partition into a bytestream 30*ac8e5d02SConrad Meyer * of correct endianness and packing. These functions do no validation 31*ac8e5d02SConrad Meyer * or sanity checking, they only pack/unpack the fields correctly. 32*ac8e5d02SConrad Meyer * 33*ac8e5d02SConrad Meyer * NB! This file must be usable both in kernel and userland. 34*ac8e5d02SConrad Meyer */ 35*ac8e5d02SConrad Meyer 36*ac8e5d02SConrad Meyer #include <sys/cdefs.h> 37*ac8e5d02SConrad Meyer __FBSDID("$FreeBSD$"); 38*ac8e5d02SConrad Meyer 39*ac8e5d02SConrad Meyer #include <sys/types.h> 40*ac8e5d02SConrad Meyer #include <sys/diskmbr.h> 41*ac8e5d02SConrad Meyer #include <sys/endian.h> 42*ac8e5d02SConrad Meyer 43*ac8e5d02SConrad Meyer #include "fdisk_mbr_enc.h" 44*ac8e5d02SConrad Meyer 45*ac8e5d02SConrad Meyer void 46*ac8e5d02SConrad Meyer dos_partition_dec(void const *pp, struct dos_partition *d) 47*ac8e5d02SConrad Meyer { 48*ac8e5d02SConrad Meyer unsigned char const *p = pp; 49*ac8e5d02SConrad Meyer 50*ac8e5d02SConrad Meyer d->dp_flag = p[0]; 51*ac8e5d02SConrad Meyer d->dp_shd = p[1]; 52*ac8e5d02SConrad Meyer d->dp_ssect = p[2]; 53*ac8e5d02SConrad Meyer d->dp_scyl = p[3]; 54*ac8e5d02SConrad Meyer d->dp_typ = p[4]; 55*ac8e5d02SConrad Meyer d->dp_ehd = p[5]; 56*ac8e5d02SConrad Meyer d->dp_esect = p[6]; 57*ac8e5d02SConrad Meyer d->dp_ecyl = p[7]; 58*ac8e5d02SConrad Meyer d->dp_start = le32dec(p + 8); 59*ac8e5d02SConrad Meyer d->dp_size = le32dec(p + 12); 60*ac8e5d02SConrad Meyer } 61*ac8e5d02SConrad Meyer 62*ac8e5d02SConrad Meyer void 63*ac8e5d02SConrad Meyer dos_partition_enc(void *pp, struct dos_partition *d) 64*ac8e5d02SConrad Meyer { 65*ac8e5d02SConrad Meyer unsigned char *p = pp; 66*ac8e5d02SConrad Meyer 67*ac8e5d02SConrad Meyer p[0] = d->dp_flag; 68*ac8e5d02SConrad Meyer p[1] = d->dp_shd; 69*ac8e5d02SConrad Meyer p[2] = d->dp_ssect; 70*ac8e5d02SConrad Meyer p[3] = d->dp_scyl; 71*ac8e5d02SConrad Meyer p[4] = d->dp_typ; 72*ac8e5d02SConrad Meyer p[5] = d->dp_ehd; 73*ac8e5d02SConrad Meyer p[6] = d->dp_esect; 74*ac8e5d02SConrad Meyer p[7] = d->dp_ecyl; 75*ac8e5d02SConrad Meyer le32enc(p + 8, d->dp_start); 76*ac8e5d02SConrad Meyer le32enc(p + 12, d->dp_size); 77*ac8e5d02SConrad Meyer } 78