xref: /haiku/src/add-ons/kernel/file_systems/btrfs/btrfs_disk_system.cpp (revision af435dd1c9460acc910170b4f82f44bfd3f557c9)
1 /*
2  * Copyright 2007-2008, Ingo Weinhold, ingo_weinhold@gmx.de.
3  * Copyright 2019, Les De Ridder, les@lesderid.net
4  *
5  * Distributed under the terms of the MIT License.
6  */
7 
8 #include "btrfs_disk_system.h"
9 
10 #include "btrfs.h"
11 #include "Volume.h"
12 
13 
14 status_t
parse_initialize_parameters(const char * parameterString,initialize_parameters & parameters)15 parse_initialize_parameters(const char* parameterString,
16 	initialize_parameters& parameters)
17 {
18 	parameters.verbose = false;
19 
20 	void *handle = parse_driver_settings_string(parameterString);
21 	if (handle == NULL)
22 		return B_ERROR;
23 
24 	if (get_driver_boolean_parameter(handle, "verbose", false, true))
25 		parameters.verbose = true;
26 
27 	const char *ss_string = get_driver_parameter(handle, "sector_size",
28 		NULL, NULL);
29 	uint32 sectorSize = B_PAGE_SIZE;
30 	if (ss_string != NULL)
31 		sectorSize = strtoul(ss_string, NULL, 0);
32 
33 	const char *bs_string = get_driver_parameter(handle, "block_size",
34 		NULL, NULL);
35 	uint32 blockSize = max_c(16384, B_PAGE_SIZE);
36 	if (bs_string != NULL)
37 		blockSize = strtoul(bs_string, NULL, 0);
38 
39 	// TODO(lesderid): accept more settings (allocation profiles, uuid, etc.)
40 
41 	unload_driver_settings(handle);
42 
43 	if ((blockSize != 1024 && blockSize != 2048 && blockSize != 4096
44 		&& blockSize != 8192 && blockSize != 16384)
45 		|| blockSize % sectorSize != 0) {
46 		return B_BAD_VALUE;
47 	}
48 
49 	parameters.sectorSize = sectorSize;
50 	parameters.blockSize = blockSize;
51 
52 	return B_OK;
53 }
54 
55 
56 status_t
check_volume_name(const char * name)57 check_volume_name(const char* name)
58 {
59 	if (name == NULL || strlen(name) >= BTRFS_LABEL_SIZE
60 		|| strchr(name, '/') != NULL
61 		|| strchr(name, '\\') != NULL) {
62 		return B_BAD_VALUE;
63 	}
64 
65 	return B_OK;
66 }
67 
68