/* * Copyright 2007-2008, Ingo Weinhold, ingo_weinhold@gmx.de. * Copyright 2019, Les De Ridder, les@lesderid.net * * Distributed under the terms of the MIT License. */ #include "btrfs_disk_system.h" #include "btrfs.h" #include "Volume.h" status_t parse_initialize_parameters(const char* parameterString, initialize_parameters& parameters) { parameters.verbose = false; void *handle = parse_driver_settings_string(parameterString); if (handle == NULL) return B_ERROR; if (get_driver_boolean_parameter(handle, "verbose", false, true)) parameters.verbose = true; const char *ss_string = get_driver_parameter(handle, "sector_size", NULL, NULL); uint32 sectorSize = B_PAGE_SIZE; if (ss_string != NULL) sectorSize = strtoul(ss_string, NULL, 0); const char *bs_string = get_driver_parameter(handle, "block_size", NULL, NULL); uint32 blockSize = max_c(16384, B_PAGE_SIZE); if (bs_string != NULL) blockSize = strtoul(bs_string, NULL, 0); // TODO(lesderid): accept more settings (allocation profiles, uuid, etc.) unload_driver_settings(handle); if ((blockSize != 1024 && blockSize != 2048 && blockSize != 4096 && blockSize != 8192 && blockSize != 16384) || blockSize % sectorSize != 0) { return B_BAD_VALUE; } parameters.sectorSize = sectorSize; parameters.blockSize = blockSize; return B_OK; } status_t check_volume_name(const char* name) { if (name == NULL || strlen(name) >= BTRFS_LABEL_SIZE || strchr(name, '/') != NULL || strchr(name, '\\') != NULL) { return B_BAD_VALUE; } return B_OK; }