1163953Srrs// ufs_mount.cpp
2185694Srrs
3235828Stuexen#include <errno.h>
4235828Stuexen#include <stdio.h>
5163953Srrs#include <string.h>
6163953Srrs#include <unistd.h>
7163953Srrs
8163953Srrs#include <String.h>
9163953Srrs
10228653Stuexenconst char* kUsage =
11163953Srrs"Usage: ufs_mount <file system> <device> <mount point> [ <parameters> ]\n"
12163953Srrs;
13163953Srrs
14228653Stuexen// print_usage
15163953Srrsvoid
16163953Srrsprint_usage(bool error = true)
17163953Srrs{
18163953Srrs	fprintf((error ? stderr : stdout), kUsage);
19163953Srrs}
20163953Srrs
21163953Srrs// main
22163953Srrsint
23163953Srrsmain(int argc, char** argv)
24163953Srrs{
25163953Srrs	// check and get the parameters
26163953Srrs	if (argc < 4 || argc > 5) {
27163953Srrs		print_usage();
28163953Srrs		return 1;
29163953Srrs	}
30163953Srrs	const char* fileSystem = argv[1];
31163953Srrs	const char* device = argv[2];
32163953Srrs	const char* mountPoint = argv[3];
33163953Srrs	const char* fsParameters = (argc >= 5 ? argv[4] : NULL);
34163953Srrs	// get prepare the parameters for the mount() call
35163953Srrs	if (strlen(device) == 0)
36163953Srrs		device = NULL;
37163953Srrs	BString parameters(fileSystem);
38163953Srrs	if (fsParameters)
39163953Srrs		parameters << ' ' << fsParameters;
40163953Srrs	// mount
41167598Srrs	ulong flags = 0;
42163953Srrsprintf("mount('userlandfs', '%s', '%s', %lu, '%s', %ld)\n", mountPoint, device,
43163953Srrsflags, parameters.String(), parameters.Length() + 1);
44163953Srrs	if (mount("userlandfs", mountPoint, device, flags,
45163953Srrs		(void*)parameters.String(), parameters.Length() + 1) < 0) {
46163953Srrs		fprintf(stderr, "mounting failed: %s\n", strerror(errno));
47163953Srrs		return 1;
48179783Srrs	}
49179783Srrs	return 0;
50163953Srrs}
51163953Srrs