[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 02/40] ivshmem-server: Fix and clean up command line
From: |
Markus Armbruster |
Subject: |
[Qemu-devel] [PULL 02/40] ivshmem-server: Fix and clean up command line help |
Date: |
Fri, 18 Mar 2016 18:00:49 +0100 |
Burying error messages in ~20 lines of usage help is bad form. Print
a single line pointing to -h instead.
Print -h help to stdout rather than stderr. Fix default of -p. Clean
up the help text a bit.
Signed-off-by: Markus Armbruster <address@hidden>
Reviewed-by: Marc-André Lureau <address@hidden>
Message-Id: <address@hidden>
---
contrib/ivshmem-server/main.c | 84 +++++++++++++++++++++----------------------
1 file changed, 41 insertions(+), 43 deletions(-)
diff --git a/contrib/ivshmem-server/main.c b/contrib/ivshmem-server/main.c
index cca1061..3332a8c 100644
--- a/contrib/ivshmem-server/main.c
+++ b/contrib/ivshmem-server/main.c
@@ -33,31 +33,32 @@ typedef struct IvshmemServerArgs {
unsigned n_vectors;
} IvshmemServerArgs;
-/* show ivshmem_server_usage and exit with given error code */
static void
-ivshmem_server_usage(const char *name, int code)
+ivshmem_server_usage(const char *progname)
{
- fprintf(stderr, "%s [opts]\n", name);
- fprintf(stderr, " -h: show this help\n");
- fprintf(stderr, " -v: verbose mode\n");
- fprintf(stderr, " -F: foreground mode (default is to daemonize)\n");
- fprintf(stderr, " -p <pid_file>: path to the PID file (used in daemon\n"
- " mode only).\n"
- " Default=%s\n", IVSHMEM_SERVER_DEFAULT_SHM_PATH);
- fprintf(stderr, " -S <unix_socket_path>: path to the unix socket\n"
- " to listen to.\n"
- " Default=%s\n",
IVSHMEM_SERVER_DEFAULT_UNIX_SOCK_PATH);
- fprintf(stderr, " -m <shm_path>: path to the shared memory.\n"
- " The path corresponds to a POSIX shm name or a\n"
- " hugetlbfs mount point.\n"
- " default=%s\n", IVSHMEM_SERVER_DEFAULT_SHM_PATH);
- fprintf(stderr, " -l <size>: size of shared memory in bytes. The suffix\n"
- " K, M and G can be used (ex: 1K means 1024).\n"
- " default=%u\n", IVSHMEM_SERVER_DEFAULT_SHM_SIZE);
- fprintf(stderr, " -n <n_vects>: number of vectors.\n"
- " default=%u\n", IVSHMEM_SERVER_DEFAULT_N_VECTORS);
+ printf("Usage: %s [OPTION]...\n"
+ " -h: show this help\n"
+ " -v: verbose mode\n"
+ " -F: foreground mode (default is to daemonize)\n"
+ " -p <pid-file>: path to the PID file (used in daemon mode only)\n"
+ " default " IVSHMEM_SERVER_DEFAULT_PID_FILE "\n"
+ " -S <unix-socket-path>: path to the unix socket to listen to\n"
+ " default " IVSHMEM_SERVER_DEFAULT_UNIX_SOCK_PATH "\n"
+ " -m <shm-path>: POSIX shared memory object name or a hugetlbfs
mount point\n"
+ " default " IVSHMEM_SERVER_DEFAULT_SHM_PATH "\n"
+ " -l <size>: size of shared memory in bytes\n"
+ " suffixes K, M and G can be used, e.g. 1K means 1024\n"
+ " default %u\n"
+ " -n <nvectors>: number of vectors\n"
+ " default %u\n",
+ progname, IVSHMEM_SERVER_DEFAULT_SHM_SIZE,
+ IVSHMEM_SERVER_DEFAULT_N_VECTORS);
+}
- exit(code);
+static void
+ivshmem_server_help(const char *progname)
+{
+ fprintf(stderr, "Try '%s -h' for more information.\n", progname);
}
/* parse the program arguments, exit on error */
@@ -68,20 +69,12 @@ ivshmem_server_parse_args(IvshmemServerArgs *args, int
argc, char *argv[])
unsigned long long v;
Error *err = NULL;
- while ((c = getopt(argc, argv,
- "h" /* help */
- "v" /* verbose */
- "F" /* foreground */
- "p:" /* pid_file */
- "S:" /* unix_socket_path */
- "m:" /* shm_path */
- "l:" /* shm_size */
- "n:" /* n_vectors */
- )) != -1) {
+ while ((c = getopt(argc, argv, "hvFp:S:m:l:n:")) != -1) {
switch (c) {
case 'h': /* help */
- ivshmem_server_usage(argv[0], 0);
+ ivshmem_server_usage(argv[0]);
+ exit(0);
break;
case 'v': /* verbose */
@@ -92,36 +85,39 @@ ivshmem_server_parse_args(IvshmemServerArgs *args, int
argc, char *argv[])
args->foreground = 1;
break;
- case 'p': /* pid_file */
+ case 'p': /* pid file */
args->pid_file = optarg;
break;
- case 'S': /* unix_socket_path */
+ case 'S': /* unix socket path */
args->unix_socket_path = optarg;
break;
- case 'm': /* shm_path */
+ case 'm': /* shm path */
args->shm_path = optarg;
break;
- case 'l': /* shm_size */
+ case 'l': /* shm size */
parse_option_size("shm_size", optarg, &args->shm_size, &err);
if (err) {
error_report_err(err);
- ivshmem_server_usage(argv[0], 1);
+ ivshmem_server_help(argv[0]);
+ exit(1);
}
break;
- case 'n': /* n_vectors */
+ case 'n': /* number of vectors */
if (parse_uint_full(optarg, &v, 0) < 0) {
fprintf(stderr, "cannot parse n_vectors\n");
- ivshmem_server_usage(argv[0], 1);
+ ivshmem_server_help(argv[0]);
+ exit(1);
}
args->n_vectors = v;
break;
default:
- ivshmem_server_usage(argv[0], 1);
+ ivshmem_server_usage(argv[0]);
+ exit(1);
break;
}
}
@@ -129,12 +125,14 @@ ivshmem_server_parse_args(IvshmemServerArgs *args, int
argc, char *argv[])
if (args->n_vectors > IVSHMEM_SERVER_MAX_VECTORS) {
fprintf(stderr, "too many requested vectors (max is %d)\n",
IVSHMEM_SERVER_MAX_VECTORS);
- ivshmem_server_usage(argv[0], 1);
+ ivshmem_server_help(argv[0]);
+ exit(1);
}
if (args->verbose == 1 && args->foreground == 0) {
fprintf(stderr, "cannot use verbose in daemon mode\n");
- ivshmem_server_usage(argv[0], 1);
+ ivshmem_server_help(argv[0]);
+ exit(1);
}
}
--
2.4.3
- [Qemu-devel] [PULL 39/40] ivshmem: Require master to have ID zero, (continued)
- [Qemu-devel] [PULL 39/40] ivshmem: Require master to have ID zero, Markus Armbruster, 2016/03/18
- [Qemu-devel] [PULL 33/40] ivshmem: Inline check_shm_size() into its only caller, Markus Armbruster, 2016/03/18
- [Qemu-devel] [PULL 26/40] ivshmem: Propagate errors through ivshmem_recv_setup(), Markus Armbruster, 2016/03/18
- [Qemu-devel] [PULL 10/40] ivshmem: Rewrite specification document, Markus Armbruster, 2016/03/18
- [Qemu-devel] [PULL 32/40] ivshmem: Simplify memory regions for BAR 2 (shared memory), Markus Armbruster, 2016/03/18
- [Qemu-devel] [PULL 04/40] qemu-doc: Fix ivshmem huge page example, Markus Armbruster, 2016/03/18
- [Qemu-devel] [PULL 29/40] ivshmem: Simplify how we cope with short reads from server, Markus Armbruster, 2016/03/18
- [Qemu-devel] [PULL 19/40] ivshmem: Clean up MSI-X conditions, Markus Armbruster, 2016/03/18
- [Qemu-devel] [PULL 35/40] ivshmem: Replace int role_val by OnOffAuto master, Markus Armbruster, 2016/03/18
- [Qemu-devel] [PULL 13/40] ivshmem: Clean up after commit 9940c32, Markus Armbruster, 2016/03/18
- [Qemu-devel] [PULL 02/40] ivshmem-server: Fix and clean up command line help,
Markus Armbruster <=
- [Qemu-devel] [PULL 23/40] ivshmem: Disentangle ivshmem_read(), Markus Armbruster, 2016/03/18
- [Qemu-devel] [PULL 16/40] ivshmem: Fix harmless misuse of Error, Markus Armbruster, 2016/03/18
- [Qemu-devel] [PULL 17/40] ivshmem: Failed realize() can leave migration blocker behind, Markus Armbruster, 2016/03/18
- [Qemu-devel] [PULL 25/40] ivshmem: Receive shared memory synchronously in realize(), Markus Armbruster, 2016/03/18
- [Qemu-devel] [PULL 30/40] ivshmem: Tighten check of property "size", Markus Armbruster, 2016/03/18
- [Qemu-devel] [PULL 27/40] ivshmem: Rely on server sending the ID right after the version, Markus Armbruster, 2016/03/18
- [Qemu-devel] [PULL 37/40] ivshmem: Clean up after the previous commit, Markus Armbruster, 2016/03/18
- [Qemu-devel] [PULL 28/40] ivshmem: Drop the hackish test for UNIX domain chardev, Markus Armbruster, 2016/03/18
- [Qemu-devel] [PULL 31/40] ivshmem: Implement shm=... with a memory backend, Markus Armbruster, 2016/03/18
- [Qemu-devel] [PULL 21/40] ivshmem: Assert interrupts are set up once, Markus Armbruster, 2016/03/18