- if (argc < 4 || argc > 5) {
- fprintf(stderr,
- "usage: %s file pages_per_vec count [objid]\n",
- argv[0]);
- return 1;
+ if (argc < 3 || argc > 6)
+ usage(argv[0]);
+
+ count = strtoull(argv[2], &end, 0);
+ if (*end) {
+ fprintf(stderr, "%s: invalid count '%s'\n", argv[0], argv[2]);
+ usage(argv[0]);
+ }
+ if (argc >= 4) {
+ if (strchr(argv[3], 'r')) {
+ cmd = READ;
+ flags = O_RDONLY;
+ }
+ if (strchr(argv[3], 'w')) {
+ cmd |= WRITE;
+ flags = O_RDWR | O_CREAT;
+ }
+ if (strchr(argv[3], 'd')) {
+#ifdef O_DIRECT
+ flags |= O_DIRECT;
+#else
+ fprintf(stderr,
+ "%s: O_DIRECT not supported in this build\n",
+ argv[0]);
+ exit(1);
+#endif
+ }
+ if (!cmd)
+ usage(argv[0]);
+ } else {
+ cmd = READ | WRITE;
+ flags = O_RDWR | O_CREAT;
+#ifdef O_DIRECT
+ flags |= O_DIRECT;
+#else
+ fprintf(stderr, "%s: warning: not setting O_DIRECT\n",
+ argv[0]);
+#endif