From patchwork Thu Jul 13 12:48:13 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joe Simmons-Talbott X-Patchwork-Id: 72640 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id A48A03858410 for ; Thu, 13 Jul 2023 12:48:46 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org A48A03858410 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1689252526; bh=N9OaE6ShjIfFa6gZmxSiAX/SxiCT0rjsfx/m/+/Z2Ck=; h=To:Cc:Subject:Date:List-Id:List-Unsubscribe:List-Archive: List-Post:List-Help:List-Subscribe:From:Reply-To:From; b=MfzeutZvL/5tZebHhadpwE3YwfoZf+5937s0RvJwCD69jRdoARAGnoj3wRUwPoDek KHB3K1d+TGLwUHMq7khwQzNmLJ4yVcguZdbmV/zAfe5/QHzyluSF8gPaqwc1NSNJTw iYtNXYL7cHtdMtkCxxUJ6Nugo+veM8G5rOzP5POM= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTPS id A70233858CDB for ; Thu, 13 Jul 2023 12:48:21 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org A70233858CDB Received: from mail-qk1-f200.google.com (mail-qk1-f200.google.com [209.85.222.200]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-64-nD-tHl8JMuiSp3bnH1a9iw-1; Thu, 13 Jul 2023 08:48:19 -0400 X-MC-Unique: nD-tHl8JMuiSp3bnH1a9iw-1 Received: by mail-qk1-f200.google.com with SMTP id af79cd13be357-765986c0568so95052585a.1 for ; Thu, 13 Jul 2023 05:48:19 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1689252499; x=1691844499; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=N9OaE6ShjIfFa6gZmxSiAX/SxiCT0rjsfx/m/+/Z2Ck=; b=WM7NPd1paTDubjI3Db01ZT/Q44G9cstr0r1B75YOvb7revoEA5blUqnZaj+HaPL/+Z vdwvgpXkoVh2ZWBPVA3hZu6NYqroxvI1DaijxLMpW7DjSNB2dcww+yA4mrFd2ap6ckx3 xcHnJ611ZaIW41OXu8QwB0FH8WX7pQVguO3XqcR2/8jlDCO59y16GKlHK4aQ+F0FTnJp oAaAN4xDJ2vxr6qfvqInNtzte5fzEvGPOanvjvp7ykKzpWLTxlNk1JTHrbH5xFVRA2Qd IICeitDwJKH+YsiGXVZ8V76y/gKyygkmg3fkX3hAB4U5B5A3YPkjtugpVVurb1lbU9YW wBYg== X-Gm-Message-State: ABy/qLZQiYyYKWsfuVszFyMcqdnDcZmvehpKcU+FgOfdJ2vKiHuHRcMd m7XNApklqcdOoIIiJfrQ+OVb4Qvz5plRraTBiLysv62eIaIhqmZKJ50GQqVbbeM+TBbLjY04s8d jtRUrytfyr1oIwna3XQlxWy89lcDiy9XgMHtDHsrN7I/RE33VZoMRq1lFn8+wWK1piZVWXIFx2L Cl0aU+ X-Received: by 2002:a37:ea1d:0:b0:766:57c:d2b4 with SMTP id t29-20020a37ea1d000000b00766057cd2b4mr1693900qkj.65.1689252498855; Thu, 13 Jul 2023 05:48:18 -0700 (PDT) X-Google-Smtp-Source: APBJJlGzWxn/THyJoEvWjU2V6oCgFNtRkG9TWio6oXcorOO4gwVqTh9vsr9QGv7wvmjNFvAqUvcFQg== X-Received: by 2002:a37:ea1d:0:b0:766:57c:d2b4 with SMTP id t29-20020a37ea1d000000b00766057cd2b4mr1693884qkj.65.1689252498612; Thu, 13 Jul 2023 05:48:18 -0700 (PDT) Received: from oak.redhat.com (c-71-206-142-238.hsd1.va.comcast.net. [71.206.142.238]) by smtp.gmail.com with ESMTPSA id b23-20020a05620a119700b00767e2668536sm2367446qkk.17.2023.07.13.05.48.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 13 Jul 2023 05:48:18 -0700 (PDT) To: libc-alpha@sourceware.org Cc: Joe Simmons-Talbott Subject: [PATCH] argp-parse: Get rid of alloca Date: Thu, 13 Jul 2023 08:48:13 -0400 Message-Id: <20230713124813.216028-1-josimmon@redhat.com> X-Mailer: git-send-email 2.40.1 MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-Spam-Status: No, score=-12.5 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Joe Simmons-Talbott via Libc-alpha From: Joe Simmons-Talbott Reply-To: Joe Simmons-Talbott Errors-To: libc-alpha-bounces+patchwork=sourceware.org@sourceware.org Sender: "Libc-alpha" Even though the alloca usage is relatively small and fixed size the code can be written without using alloca. Convert to local variables. Checked on x86_64-linux-gnu. Reviewed-by: Adhemerval Zanella --- argp/argp-parse.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/argp/argp-parse.c b/argp/argp-parse.c index a44b50f8e4..40a5896d21 100644 --- a/argp/argp-parse.c +++ b/argp/argp-parse.c @@ -884,6 +884,9 @@ __argp_parse (const struct argp *argp, int argc, char **argv, unsigned flags, error_t err; struct parser parser; + struct argp_child child[4]; + struct argp top_argp; + /* If true, then err == EBADKEY is a result of a non-option argument failing to be parsed (which in some cases isn't actually an error). */ int arg_ebadkey = 0; @@ -891,24 +894,23 @@ __argp_parse (const struct argp *argp, int argc, char **argv, unsigned flags, if (! (flags & ARGP_NO_HELP)) /* Add our own options. */ { - struct argp_child *child = alloca (4 * sizeof (struct argp_child)); - struct argp *top_argp = alloca (sizeof (struct argp)); + int child_index = 0; /* TOP_ARGP has no options, it just serves to group the user & default argps. */ - memset (top_argp, 0, sizeof (*top_argp)); - top_argp->children = child; + memset (&top_argp, 0, sizeof (struct argp)); + top_argp.children = child; memset (child, 0, 4 * sizeof (struct argp_child)); if (argp) - (child++)->argp = argp; - (child++)->argp = &argp_default_argp; + child[child_index++].argp = argp; + child[child_index++].argp = &argp_default_argp; if (argp_program_version || argp_program_version_hook) - (child++)->argp = &argp_version_argp; - child->argp = 0; + child[child_index++].argp = &argp_version_argp; + child[child_index].argp = 0; - argp = top_argp; + argp = &top_argp; } /* Construct a parser for these arguments. */