From a5fcbcecd95980c745d48907370d1a29f89cb2d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89rico=20Rolim?= Date: Wed, 10 Feb 2021 16:52:22 -0300 Subject: [PATCH] Import argp-test.c from glibc 2.33. This change assumes that asprintf is always available. --- argp-test.c | 104 ++++++++++++++++------------------------------------ 1 file changed, 31 insertions(+), 73 deletions(-) diff --git a/argp-test.c b/argp-test.c index d19b548..d9c108d 100644 --- a/argp-test.c +++ b/argp-test.c @@ -1,22 +1,21 @@ /* Test program for argp argument parser - Copyright (C) 1997 Free Software Foundation, Inc. + Copyright (C) 1997-2021 Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Miles Bader . The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public License as - published by the Free Software Foundation; either version 2 of the - License, or (at your option) any later version. + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. + Lesser General Public License for more details. - You should have received a copy of the GNU Library General Public - License along with the GNU C Library; see the file COPYING.LIB. If not, - write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ #ifndef _GNU_SOURCE # define _GNU_SOURCE 1 @@ -29,66 +28,28 @@ #include #include #include -#include - -#include "argp.h" - -#if !HAVE_ASPRINTF -#include - -static int -asprintf (char **result, const char *format, ...) -{ - size_t size; - char *p; - - for (size = 200, p = NULL;; size *= 2) - { - va_list args; - int written; - - p = realloc(p, size + 1); - if (!p) - { - fprintf(stderr, "Virtual memory exhausted.\n"); - abort(); - } - - p[size] = '\0'; - - va_start(args, format); - written = vsnprintf(p, size, format, args); - va_end(args); - - if (written >= 0) - { - *result = p; - return written; - } - } -} -#endif /* !HAVE_ASPRINTF */ +#include const char *argp_program_version = "argp-test 1.0"; struct argp_option sub_options[] = { - {"subopt1", 's', 0, 0, "Nested option 1", 0}, - {"subopt2", 'S', 0, 0, "Nested option 2", 0}, + {"subopt1", 's', 0, 0, "Nested option 1"}, + {"subopt2", 'S', 0, 0, "Nested option 2"}, { 0, 0, 0, 0, "Some more nested options:", 10}, - {"subopt3", 'p', 0, 0, "Nested option 3", 0}, + {"subopt3", 'p', 0, 0, "Nested option 3"}, {"subopt4", 'q', 0, 0, "Nested option 4", 1}, - {0, 0, 0, 0, 0, 0} + {0} }; static const char sub_args_doc[] = "STRING...\n-"; static const char sub_doc[] = "\vThis is the doc string from the sub-arg-parser."; static error_t -sub_parse_opt (int key, char *arg, struct argp_state *state UNUSED) +sub_parse_opt (int key, char *arg, struct argp_state *state) { switch (key) { @@ -110,7 +71,7 @@ sub_parse_opt (int key, char *arg, struct argp_state *state UNUSED) } static char * -sub_help_filter (int key, const char *text, void *input UNUSED) +sub_help_filter (int key, const char *text, void *input) { if (key == ARGP_KEY_HELP_EXTRA) return strdup ("This is some extra text from the sub parser (note that it \ @@ -120,7 +81,7 @@ is preceded by a blank line)."); } static struct argp sub_argp = { - sub_options, sub_parse_opt, sub_args_doc, sub_doc, 0, sub_help_filter, 0 + sub_options, sub_parse_opt, sub_args_doc, sub_doc, 0, sub_help_filter }; /* Structure used to communicate with the parsing functions. */ @@ -135,26 +96,26 @@ struct params struct argp_option options[] = { - {"pid", 'p', "PID", 0, "List the process PID", 0}, - {"pgrp", OPT_PGRP,"PGRP",0, "List processes in the process group PGRP", 0}, - {"no-parent", 'P', 0, 0, "Include processes without parents", 0}, - {0, 'x', 0, OPTION_ALIAS, NULL, 0}, + {"pid", 'p', "PID", 0, "List the process PID"}, + {"pgrp", OPT_PGRP,"PGRP",0, "List processes in the process group PGRP"}, + {"no-parent", 'P', 0, 0, "Include processes without parents"}, + {0, 'x', 0, OPTION_ALIAS}, {"all-fields",'Q', 0, 0, "Don't elide unusable fields (normally" " if there's some reason ps can't" " print a field for any process, it's" - " removed from the output entirely)", 0}, - {"reverse", 'r', 0, 0, "Reverse the order of any sort", 0}, - {"gratuitously-long-reverse-option", 0, 0, OPTION_ALIAS, NULL, 0}, + " removed from the output entirely)" }, + {"reverse", 'r', 0, 0, "Reverse the order of any sort"}, + {"gratuitously-long-reverse-option", 0, 0, OPTION_ALIAS}, {"session", OPT_SESS,"SID", OPTION_ARG_OPTIONAL, "Add the processes from the session" " SID (which defaults to the sid of" - " the current process)", 0}, + " the current process)" }, - {0,0,0,0, "Here are some more options:", 0}, - {"foonly", 'f', "ZOT", OPTION_ARG_OPTIONAL, "Glork a foonly", 0}, - {"zaza", 'z', 0, 0, "Snit a zar", 0}, + {0,0,0,0, "Here are some more options:"}, + {"foonly", 'f', "ZOT", OPTION_ARG_OPTIONAL, "Glork a foonly"}, + {"zaza", 'z', 0, 0, "Snit a zar"}, - {0, 0, 0, 0, 0, 0} + {0} }; static const char args_doc[] = "STRING"; @@ -166,7 +127,7 @@ static const char doc[] = "Test program for argp." static void popt (int key, char *arg) { - char buf[10]; + char buf[12]; if (isprint (key)) sprintf (buf, "%c", key); else @@ -234,12 +195,9 @@ help_filter (int key, const char *text, void *input) return new_text; } -static struct argp_child argp_children[] = { - { &sub_argp, 0, 0, 0 }, { 0, 0, 0, 0 } -}; - +static struct argp_child argp_children[] = { { &sub_argp }, { 0 } }; static struct argp argp = { - options, parse_opt, args_doc, doc, argp_children, help_filter, 0 + options, parse_opt, args_doc, doc, argp_children, help_filter }; int