X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Ftests%2Fmcreate.c;h=13aacec7323f3b3f598fea10cbea9894f9eb1494;hb=9ee6e92bcf4a142e76e27d5b8ac8b34684749002;hp=9056fa1c796c799ac803c2e0c319cc36d919be5a;hpb=0f8dca08a4f68cba82c2c822998ecc309d3b7aaf;p=fs%2Flustre-release.git diff --git a/lustre/tests/mcreate.c b/lustre/tests/mcreate.c index 9056fa1..13aacec 100644 --- a/lustre/tests/mcreate.c +++ b/lustre/tests/mcreate.c @@ -1,6 +1,4 @@ -/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*- - * vim:expandtab:shiftwidth=8:tabstop=8: - * +/* * GPL HEADER START * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. @@ -35,25 +33,81 @@ */ #include +#include #include #include #include #include #include #include +#include + +void usage(const char *prog, int status) +{ + fprintf(status == 0 ? stdout : stderr, + "Usage: %s [OPTION]... FILE\n" + " -d, --device=DEV use device number DEV\n" + " -h, --help dispaly help\n" + " -m, --mode=MODE use mode MODE\n" + " -M, --major=MAJOR use device major MAJOR\n" + " -N, --minor=MINOR use device minor MINOR\n", + prog); + + exit(status); +} int main(int argc, char ** argv) { + struct option opts[] = { + { "device", 1, NULL, 'd' }, + { "help", 0, NULL, 'h' }, + { "mode", 1, NULL, 'm' }, + { "major", 1, NULL, 'M' }, + { "minor", 1, NULL, 'N' }, + { NULL }, + }; + const char *path; + mode_t mode = S_IFREG | 0644; + dev_t dev = 0; int rc; - if (argc < 2) { - printf("Usage %s filename\n", argv[0]); - return 1; + int c; + while ((c = getopt_long(argc, argv, "d:hm:M:N:", opts, NULL)) != -1) { + switch (c) { + case 'd': + dev = strtoul(optarg, NULL, 0); + break; + case 'h': + usage(argv[0], 0); + case 'm': + mode = strtoul(optarg, NULL, 0); + break; + case 'M': + dev = makedev(strtoul(optarg, NULL, 0), minor(dev)); + break; + case 'N': + dev = makedev(major(dev), strtoul(optarg, NULL, 0)); + break; + case '?': + usage(argv[0], 1); + } } - rc = mknod(argv[1], S_IFREG | 0644, 0); - if (rc) { - printf("mknod(%s) error: %s\n", argv[1], strerror(errno)); - } + if (argc - optind != 1) + usage(argv[0], 1); + + path = argv[optind]; + + if ((mode & S_IFMT) == S_IFDIR) + rc = mkdir(path, mode & ~S_IFMT); + else if ((mode & S_IFMT) == S_IFLNK) + rc = symlink("oldpath", path); + else + rc = mknod(path, mode, dev); + + if (rc) + fprintf(stderr, "%s: cannot create `%s' with mode %#o: %s\n", + argv[0], path, mode, strerror(errno)); + return rc; }