summaryrefslogtreecommitdiff
path: root/sbin/pdisk
AgeCommit message (Collapse)Author
2016-01-27We do not support logical_block != physical_block. Remove logical_blockKenneth R Westerback
field and left over code that checks for logical != physical. Removes confusion with dmpe fields lblock_start and lblocks, which have nothing to do with block sizes! lblock_start is the block offset within the partition where the data actually starts. and lblocks is the number of blocks of data within the partition. Both are in units of *physical blocks*, a.k.a. disk sectors.
2016-01-27Two more for the attic.Kenneth R Westerback
2016-01-27Check block 0 signature, physical block size and physical block count whenKenneth R Westerback
reading partition map. Check for unmapped physical blocks and overlapping partitions when reading partition map. No need for duplicate checks in validate_map(), so remove validate.c from build and 'v' command from code and docs.
2016-01-27Nope. Missed a couple of '{}' that could go.Kenneth R Westerback
2016-01-27Nuke another (and I hope final) batch of superfluous '{}' around singleKenneth R Westerback
statements.
2016-01-26Rework and simplify string argument parsing. All string arguments are atKenneth R Westerback
most DPISTRLEN (32) characters so there is no need for fancy dynamic growing strings. Use a DPISTRLEN long buffer and bail if it fills up. Rename get_string() to get_dpistr() and get_string_argument() to get_dpstr_argument() to emphasize they will return strings that fit in DPISTRLEN. Rework & simplify a pair of their consumers - do_rename_partition() and do_change_type() - to be more obviously identitical to each other bar the displayed verbiage.
2016-01-26dpme_name and dpme_type are NUL-terminated in Apple code, so useKenneth R Westerback
strlcpy() to fill them. They are also supposed to be NUL-padded so zap previous contents before copying in possibly shorter new values.
2016-01-26Whitespace, line wrapping fixes. Nuke many superfluous '{}' around singleKenneth R Westerback
statements. 0 -> NULL for pointer checks.
2016-01-26Whitespace, line wrapping fixes.Kenneth R Westerback
2016-01-26Simplify logic of read_partition_map(), junking retries with various sizesKenneth R Westerback
of logical block. Rely on read_dpme() to do the correct thing.
2016-01-25Two more for the attic.Kenneth R Westerback
2016-01-25Use new read/write_block0 and read/write_dpme which handle anyKenneth R Westerback
endian or alignment issues forcefully. Removes need for convert_* functions so unhook convert.c from build. read/write_block become static functions inside file_media.c. Tweak struct block0 to stop trying to handle alignment issues by clever declaration. Rely on the new functions to accurately translate between on-disk and in-memory layouts. Enables pdisk to work on amd64 and likely other architectures if it's ever desirable. Does bring back DEV_BSIZE to pdisk.c since the in-memory structure will *not* be 512 bytes on other archs.
2016-01-25Add read/write_block0 and read/write_dpme functions, not yet used.Kenneth R Westerback
2016-01-25Tweak fields in struct dpme to be more consistent with Apple's info.Kenneth R Westerback
Better comments, make all reserved fields uint8_t arrays, don't claim uint32_t fields are actually pointers.
2016-01-25remove some uneeded includesJonathan Gray
ok krw@
2016-01-24Whitespace.Kenneth R Westerback
2016-01-24Nuke get_align_long() and put_align_long() #define's. They don't doKenneth R Westerback
anything according to gcc & cmp. cmp suggested by & ok stefan@.
2016-01-24Nuke more pointless checks for map NULLness.Kenneth R Westerback
2016-01-24Whitespace fixes.Kenneth R Westerback
2016-01-24Assuming the map is always provided simplifies a bunch of logic, nukesKenneth R Westerback
get_block_n() and removes a whack of pointless static variables.
2016-01-24Delete duplicated line that was setting sbBlkCount to 0; Score oneKenneth R Westerback
for the 'v' command!
2016-01-23Nuke unused kPatchType. Nuke kStringNot and use " not' where needed.Kenneth R Westerback
Nuke kStringEmpty and use "" where needed. Nuke unused static 'g'. Eliminate #include's in *.h files. Some whitespace fixes.
2016-01-23No need for 'default_value' parameter for get_number_argument() since weKenneth R Westerback
always pass kDefault. a.k.a. -1. Nuke kDefault since it is now unused. Nuke unused #define MAXIOSIZE in passing.
2016-01-23No need for get_string_argument() parameter 'reprompt' since weKenneth R Westerback
always pass it '1'.
2016-01-23Pass the disk sector size to open_partition_map(), eliminating it'sKenneth R Westerback
internal need for DEV_BSIZE. Ditto create_partition_map(). malloc((sizeof(struct [block0|dpme])) instead of malloc(DEV_BSIZE). Remove another #include <param.h>.
2016-01-23Add comments to ensure future spelunkers realize that struct block0Kenneth R Westerback
and struct dpme must be 512-bytes long at the moment. Use this fact to avoid using DEV_BSIZE and thus replace #include <param.h> with #include <types.h> in pdisk.c. Constrain media size to UINT32_MAX, the actual limit, instead of LONG_MAX, which could be way more on some theoretical future arch running pdisk. And do the constraint inside open_partition_map().
2016-01-23Avoid double prompt after creating default map on startup.Kenneth R Westerback
2016-01-23Flip read_block() and write_block() back to taking sector addressesKenneth R Westerback
instead of off_t values. Do the DEV_BSIZE multiplication in these two functions. Easier to read code and kills two #include <sys/param.h>. Kill unused label.
2016-01-23map->block0 is always allocated or the map is discarded.Kenneth R Westerback
So stop checking for NULL. Nuke get_block_zero() and just use map->block0.
2016-01-23Nuke sync_device_size() and do it's one-field-update in coerce_block0(),Kenneth R Westerback
right after we read/allocate media->block0. Doing sync *before* media->block0 is allocated is bad. The map->physical_block is initialized correctly and never to the magic number '1'. So just use map-physical_block to initialize sbBlkSize.
2016-01-23Always initialize media_size to provided mediasz in open_partition_map().Kenneth R Westerback
2016-01-23Break annoying long line.Kenneth R Westerback
2016-01-22Change partition map field 'data' to 'dmpe'. Change 'create_data'Kenneth R Westerback
to 'create_dmpe'. Sweep up some 'struct dpme *data' to struct dpme *dpme'.
2016-01-22Of course if you change the parameter name you need to change the uses ofKenneth R Westerback
said parameter to the new name.
2016-01-22Change parameter name 'data' to 'block0'.Kenneth R Westerback
2016-01-22Whitespace fixes.Kenneth R Westerback
2016-01-22Rename map field 'misc' to 'block0' since that's what it is.Kenneth R Westerback
2016-01-22Whitespace fixes.Kenneth R Westerback
2016-01-22Whitespace fixes.Kenneth R Westerback
2016-01-22Lost a fix for one invocation of write_block() in diff juggling. ItKenneth R Westerback
takes an off_t offset, not a disk address, for now.
2016-01-22Merge read_block() and read_file_media() into read_block(). DittoKenneth R Westerback
write_block() and write_file_media(). One layer of read/write wrappers for pread/pwrite should be enough for anyone.
2016-01-22escape punctuation to have it mark up properly;Jason McIntyre
2016-01-22Repair creation of initial partition table on a blank disk, brokenKenneth R Westerback
when hoisting file operations and ioctl to main(). Pass media size to open_partition_map() and create_partition_map() so they can properly initialize a map.
2016-01-22In the "why use two variables when one would do" category, eliminateKenneth R Westerback
the 'written' field and just use the 'changed' field to mediate when it is appropriate to ask whether changes should be discarded.
2016-01-22Nuke 'expert' mode and the enabling, undocumented, '-d' flag byKenneth R Westerback
just making all the commands available all the time. Document the newly available commands. Remove the former 'P' command (list partitions in base address order) and use 'P' from expert mode (show map data structures). Stop accepting uppercase aliases for commands documented as lower case. Bring the 'h' help text and man pages into agreement. ok jasper@ millert@
2016-01-21Hoist all file opening and ioctl calls into main(), passing a pointer toKenneth R Westerback
a valid map to edit(). Should enable pledging a la fdisk at some point. Since edit() always gets a valid map (and maintains its validity even when 'I'nitializing a new one) many checks for (map == NULL) are junked. Remove some dances around block sizes by using DEV_BSIZE everywhere since we don't support non-DEV_BSIZE (a.k.a. 512-byte) sectors. Remove many superfluous #include statements.
2016-01-21Nuke 'writable' field now that it is always in sync with 'rflag'. SinceKenneth R Westerback
(!rflag && writable == 0) can't be true remove those warning blocks and simply leave the not-writable warning when attempting to write the map. Always show 'w' in the help and rely on the check and warning in do_write_partition_map() so the user always gets a message.
2016-01-21Don't try to be cute by silently opening a disk read-only when R/WKenneth R Westerback
access was requested. Just complain when the R/W open fails. Make failure messages consistent.
2016-01-19Simplify the main command switch, eliminating a couple of /* fallKenneth R Westerback
through */ and two variables by simply calling the target functions with the different parameters.
2016-01-19It's pointless to check for 'dflag' inside do_expert(), since you can'tKenneth R Westerback
get there unless dflag is set. Makes switch() statement easier to grasp.