diff options
Diffstat (limited to 'vold/geom_mbr_enc.c')
-rw-r--r-- | vold/geom_mbr_enc.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/vold/geom_mbr_enc.c b/vold/geom_mbr_enc.c index 755fbba..f1f8339 100644 --- a/vold/geom_mbr_enc.c +++ b/vold/geom_mbr_enc.c @@ -44,6 +44,17 @@ le32dec(const void *buf) return ((p[3] << 24) | (p[2] << 16) | (p[1] << 8) | p[0]); } +static __inline void +le32enc(void *pp, uint32_t u) +{ + unsigned char *p = (unsigned char *)pp; + + p[0] = u & 0xff; + p[1] = (u >> 8) & 0xff; + p[2] = (u >> 16) & 0xff; + p[3] = (u >> 24) & 0xff; +} + void dos_partition_dec(void const *pp, struct dos_partition *d) { @@ -60,3 +71,20 @@ dos_partition_dec(void const *pp, struct dos_partition *d) d->dp_start = le32dec(p + 8); d->dp_size = le32dec(p + 12); } + +void +dos_partition_enc(void *pp, struct dos_partition *d) +{ + unsigned char *p = pp; + + p[0] = d->dp_flag; + p[1] = d->dp_shd; + p[2] = d->dp_ssect; + p[3] = d->dp_scyl; + p[4] = d->dp_typ; + p[5] = d->dp_ehd; + p[6] = d->dp_esect; + p[7] = d->dp_ecyl; + le32enc(p + 8, d->dp_start); + le32enc(p + 12, d->dp_size); +} |