1// ufs_mount.cpp
2
3#include <errno.h>
4#include <stdio.h>
5#include <string.h>
6#include <unistd.h>
7
8#include <String.h>
9
10const char* kUsage =
11"Usage: ufs_mount <file system> <device> <mount point> [ <parameters> ]\n"
12;
13
14// print_usage
15void
16print_usage(bool error = true)
17{
18	fprintf((error ? stderr : stdout), kUsage);
19}
20
21// main
22int
23main(int argc, char** argv)
24{
25	// check and get the parameters
26	if (argc < 4 || argc > 5) {
27		print_usage();
28		return 1;
29	}
30	const char* fileSystem = argv[1];
31	const char* device = argv[2];
32	const char* mountPoint = argv[3];
33	const char* fsParameters = (argc >= 5 ? argv[4] : NULL);
34	// get prepare the parameters for the mount() call
35	if (strlen(device) == 0)
36		device = NULL;
37	BString parameters(fileSystem);
38	if (fsParameters)
39		parameters << ' ' << fsParameters;
40	// mount
41	ulong flags = 0;
42printf("mount('userlandfs', '%s', '%s', %lu, '%s', %ld)\n", mountPoint, device,
43flags, parameters.String(), parameters.Length() + 1);
44	if (mount("userlandfs", mountPoint, device, flags,
45		(void*)parameters.String(), parameters.Length() + 1) < 0) {
46		fprintf(stderr, "mounting failed: %s\n", strerror(errno));
47		return 1;
48	}
49	return 0;
50}
51