You can now specify all important options on the command line.

Now does a sync() after the changes.


git-svn-id: file:///srv/svn/repos/haiku/trunk/current@6382 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Axel Dörfler 2004-01-27 23:10:31 +00:00
parent b41bf79188
commit 9e6ec53a18

View File

@ -11,27 +11,104 @@
#include <string.h>
#include <stdio.h>
#include <unistd.h>
#include <ctype.h>
void
usage(char *programName)
{
fprintf(stderr, "usage: %s [-vn] [-b block-size] device-path volume-name\n"
"Creates a new BFS file system on the specified device (or image)\n"
"\t-b\tblock size (defaults to 1024)\n"
"\t-n\tdisable indices (long option --noindex)\n"
"\t-v\tfor verbose output.\n",
programName);
exit(0);
}
int
main(int argc, char **argv)
{
char *deviceName = "/boot/home/test-device";
uint32 blockSize = 1024;
char *programName = argv[0];
if (strrchr(programName, '/'))
programName = strrchr(programName, '/') + 1;
// ToDo: evaluate arguments!
if (argc < 2)
usage(programName);
uint32 blockSize = 1024;
uint32 flags = 0;
bool verbose = false;
while (*++argv) {
char *arg = *argv;
if (*arg == '-') {
if (arg[1] == '-') {
if (!strcmp(arg, "--noindex"))
flags |= VOLUME_NO_INDICES;
else
usage(programName);
}
while (*++arg && isalpha(*arg)) {
switch (*arg) {
case 'v':
verbose = true;
break;
case 'b':
if (*++argv == NULL || !isdigit(**argv))
usage(programName);
blockSize = atol(*argv);
break;
case 'n':
flags |= VOLUME_NO_INDICES;
break;
}
}
}
else
break;
}
char *deviceName = argv[0];
if (deviceName == NULL) {
fprintf(stderr, "%s: You must at least specify a device where "
"the image is going to be created\n", programName);
return -1;
}
char *volumeName = "Unnamed";
if (argv[1] != NULL)
volumeName = argv[1];
if (blockSize != 1024 && blockSize != 2048 && blockSize != 4096 && blockSize != 8192) {
fprintf(stderr, "%s: valid block sizes are: 1024, 2048, 4096, and 8192\n", programName);
return -1;
}
// set up tiny VFS and initialize the device/image
init_block_cache(4096, 0);
init_vnode_layer();
Volume volume(1);
status_t status = volume.Initialize(deviceName, "New Disk", blockSize, 0);
status_t status = volume.Initialize(deviceName, volumeName, blockSize, flags);
if (status < B_OK) {
fprintf(stderr, "Initializing volume failed: %s\n", strerror(status));
fprintf(stderr, "%s: Initializing volume failed: %s\n", programName, strerror(status));
return -1;
}
if (verbose) {
// ToDo: dump disk info
}
shutdown_block_cache();
sync();
return 0;
}