[PATCH 3/3] compositor: dump command line options
Pekka Paalanen
ppaalanen at gmail.com
Mon Mar 19 05:08:14 PDT 2012
On Mon, 12 Mar 2012 19:06:40 -0300
Tiago Vignatti <tiago.vignatti at intel.com> wrote:
> Use it with --help or -h.
>
> Signed-off-by: Tiago Vignatti <tiago.vignatti at intel.com>
> ---
> shared/config-parser.h | 3 +++
> shared/option-parser.c | 13 +++++++++++++
> src/compositor-drm.c | 7 ++++++-
> src/compositor-openwfd.c | 7 ++++++-
> src/compositor-wayland.c | 8 +++++++-
> src/compositor-x11.c | 8 +++++++-
> src/compositor.c | 8 ++++++++
> 7 files changed, 50 insertions(+), 4 deletions(-)
>
> diff --git a/shared/config-parser.h b/shared/config-parser.h
> index 6403947..4792bcb 100644
> --- a/shared/config-parser.h
> +++ b/shared/config-parser.h
> @@ -67,6 +67,9 @@ struct weston_option {
> void *data;
> };
>
> +void
> +dump_options(const struct weston_option *option, int count);
> +
> int
> parse_options(const struct weston_option *options,
> int count, int argc, char *argv[]);
> diff --git a/shared/option-parser.c b/shared/option-parser.c
> index 8b16b5d..bc977c1 100644
> --- a/shared/option-parser.c
> +++ b/shared/option-parser.c
> @@ -70,6 +70,19 @@ check_uint(const char *value)
> }
> }
>
> +void
> +dump_options(const struct weston_option *option, int count)
> +{
> + int i;
> +
> + for (i = 0; i < count; i++) {
> + fprintf(stderr, "--%s", option[i].name);
> + if (option[i].short_name)
> + fprintf(stderr, ", -%c", option[i].short_name);
> + fprintf(stderr, "\n", option[i].name);
> + }
> +}
> +
> static void
> handle_option(const struct weston_option *option, char *value)
> {
...
> diff --git a/src/compositor-x11.c b/src/compositor-x11.c
> index b6b28de..baa1f40 100644
> --- a/src/compositor-x11.c
> +++ b/src/compositor-x11.c
> @@ -824,16 +824,22 @@ x11_compositor_create(struct wl_display *display,
> WL_EXPORT struct weston_compositor *
> backend_init(struct wl_display *display, int argc, char *argv[])
> {
> - int width = 1024, height = 640, fullscreen = 0, count = 1;
> + int width = 1024, height = 640, fullscreen = 0, count = 1, help = 0;
>
> const struct weston_option x11_options[] = {
> { WESTON_OPTION_UNSIGNED_INTEGER, "width", 0, &width },
> { WESTON_OPTION_UNSIGNED_INTEGER, "height", 0, &height },
> { WESTON_OPTION_BOOLEAN, "fullscreen", 0, &fullscreen },
> { WESTON_OPTION_UNSIGNED_INTEGER, "output-count", 0, &count },
> + { WESTON_OPTION_BOOLEAN, "help", 'h', &help },
> };
>
> parse_options(x11_options, ARRAY_LENGTH(x11_options), argc, argv);
> + if (help) {
> + dump_options(x11_options, ARRAY_LENGTH(x11_options) - 1);
> + exit (EXIT_SUCCESS);
> + }
> +
>
> return x11_compositor_create(display,
> width, height, count, fullscreen);
> diff --git a/src/compositor.c b/src/compositor.c
> index a832d3f..c50fa3d 100644
> --- a/src/compositor.c
> +++ b/src/compositor.c
> @@ -2467,6 +2467,7 @@ int main(int argc, char *argv[])
> char *shell = NULL;
> int32_t idle_time = 300;
> int32_t xserver;
> + int32_t help = 0;
> char *socket_name = NULL;
>
> const struct weston_option core_options[] = {
> @@ -2475,6 +2476,7 @@ int main(int argc, char *argv[])
> { WESTON_OPTION_UNSIGNED_INTEGER, "idle-time", 'i', &idle_time },
> { WESTON_OPTION_STRING, "shell", 's', &shell },
> { WESTON_OPTION_BOOLEAN, "xserver", 0, &xserver },
> + { WESTON_OPTION_BOOLEAN, "help", 'h', &help },
> };
>
> argc = parse_options(core_options,
> @@ -2499,6 +2501,12 @@ int main(int argc, char *argv[])
> sigemptyset(&segv_action.sa_mask);
> sigaction(SIGSEGV, &segv_action, NULL);
>
> + if (help) {
> + dump_options(core_options, ARRAY_LENGTH(core_options));
> + argv[argc] = strdup("--help");
> + argc++;
How do you know there is space in argv[] to add that?
Also, doesn't strdup() leak here?
Hm, so if there was a --help originally, there must be space to add it
back... I wonder if it made sense to handle --help specially in option
parser, and let it indicate "help encountered" with an error code
return. We are going to need the error code return anyway.
> + }
> +
> if (!backend) {
> if (getenv("WAYLAND_DISPLAY"))
> backend = "wayland-backend.so";
Thanks,
pq
More information about the wayland-devel
mailing list