From patchwork Wed Sep 18 16:35:38 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Ren=C3=A9_Scharfe?= X-Patchwork-Id: 11150759 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 7F0A01745 for ; Wed, 18 Sep 2019 16:35:46 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 53EF0206C2 for ; Wed, 18 Sep 2019 16:35:46 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=web.de header.i=@web.de header.b="kcPUIH5p" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387609AbfIRQfp (ORCPT ); Wed, 18 Sep 2019 12:35:45 -0400 Received: from mout.web.de ([212.227.15.3]:55109 "EHLO mout.web.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728713AbfIRQfp (ORCPT ); Wed, 18 Sep 2019 12:35:45 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=dbaedf251592; t=1568824540; bh=oKR8d/KdqPj/MV5ajntqehjrAVICAzYwnPIB86WqT1c=; h=X-UI-Sender-Class:To:Cc:From:Subject:Date; b=kcPUIH5pp47mn8V0bL2amv7SvUBCWVzDwRjeQgkU8KOazS4Z8pxCgmaEfzAAG2jDq d2e4jn7ttma+O+RGvpWB+IO+QjdSFsbaOUjfkHa+mqE9hbPf++l3Moi7Fb7ftpT1uD MqJ9wt0joceaLa2OKx+p6B0hE6d/aX+Y4dNvPt3s= X-UI-Sender-Class: c548c8c5-30a9-4db5-a2e7-cb6cb037b8f9 Received: from [192.168.178.26] ([79.203.24.71]) by smtp.web.de (mrweb002 [213.165.67.108]) with ESMTPSA (Nemesis) id 0Lo0M4-1hi8jE39Im-00fxDS; Wed, 18 Sep 2019 18:35:40 +0200 X-Mozilla-News-Host: news://nntp.public-inbox.org:119 To: Git Mailing List Cc: Junio C Hamano From: =?utf-8?q?Ren=C3=A9_Scharfe?= Subject: [PATCH] sha1_name: simplify strbuf handling in interpret_nth_prior_checkout() Message-ID: <582d8659-dd5e-440e-6f00-a59c7017dff6@web.de> Date: Wed, 18 Sep 2019 18:35:38 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.8.0 MIME-Version: 1.0 Content-Language: en-US X-Provags-ID: V03:K1:aSqgxJUsLgjM7RKn1fWVGuXwzZf5LCPyZgUCBrY073/cXgZARBs u8+l4OnbqNyEkRdPPqGvpPEWn9NXM4chK3oiSAtwi9VyUjLie/ArSXN3C9MJ6gI7Zh+7WW7 8ViedUd6HHfqCjGqKhaGIWJQXhy7DVGByECnwS/orN0L18Wt0ooBt83R/tgvvUj1CVxjHJy 1n2aOXy4SA8//9gRjBPQQ== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1;V03:K0:EtfX413FD4o=:Hgosdb4UgXKHgINx4quYm8 irfJ9gcmHIAJWnoerWdyRLM4CBhQRyk01QJdH68b1EDk7p6oCiSe+SPksdlsa6LZOM8GbI8M0 SRJUPCVxMj8c902Ur17+InQW3LG9t+d0RN3FPm2/v0Rfq4YG/aYPBqobqpM1Q+94zeFu1m5eb 6wQqloozC5bO3NfPJ0oC4aRtojkLwCEm2rtTsADtVPP62TmNy7MkycUF3Crlgot1QdwF4SQI0 pgJ9gWcrfgiy3a0g+CoWifS6DaYYm6IKphziwQNHsZZ1sMOFfGNf3fLMM2RMstn4rQU4miLzQ CUs8j2op7/K9iFnBCqq55PKadDGk1MIwRTCyxR1XaDNCquYOjX0OKplbWJ3f1hPZjWLTD16G+ fUF5seruUQlJbnJow2H1Ed05tjACDsV2zm7I5MRnILedEiiNzem4eFFy5X6Uker6FZNMWviSa Fe3xgurmDm/HwZdieud15JnB14NiyHmJmqGy1263t1WLYfUiflkS8Xu4VF2Hg5QLOy8GolGDi B0F9l2VF+VtoKgy7qd+bxXjWVqLKEr8hmucD4zYvjrbWm7dzXhFcjEnfrfZ10/TnuWhyXxr/d lgSsoydDNym/msphZiCc9r3w5kzSoeKMp7PW+zfhSOVDcXOO/YdmvWwXXdoBZCWTr5NNNnyYD qdRHFishzN7b+u6DzsTGveYQ1pIZYbmRr1/KC58RR1RnxPvyImW5k43aaxlrVaydW5ybyMoI9 Cvquj0RZ4p4/GYc22wjrxfxyAaxulfIcMx4qmIxzEWx2ba2eljQvZu78f3/0wEscveGrBcGru KbevygP1c+sRw/zk3NZ5FHX4H6k7hHYZkHkpPKsEVWzemq/i160ls2agigEBt9TJwyDwKZkN4 /8ao60T0ha697UqFQ7XxGnpzPxh8jm8wwu7apMZocMX7YFP7aXYtQwnSw9m07+YxTNgb2pdaP NJCtSDVSe5XDBo7KbUCA1vbPljAMjq76u6eWN6bJEvessNcPEGzq3hh9KJedBlPVkq+B8Ew// QbuBLAw4uzYGYk90MXpNStK332iQuTMkZEUs5tO5/o8gUYj3WIXNe5IVZSuz3eU0h1YT81zpx GuU51TyHvSCS/WXEjqnTZAYhuLLUOQig9skEBHYrn9dG8R2zoHsu0uUxs13oDYBuuMQZHFU02 LQPWMDXwYVqx/0IkA4Bb5drXFUHN9NerhJVxX86tRKuHyOEMe0/NsReRlb3tzxM6riDECeO1i A1yOMRMHXOA3f9sJv9WUldwkyhnIkcscsWc30iA== Sender: git-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Pass the target strbuf to the callback function grab_nth_branch_switch() by reference so that it can add the result string directly instead of having it put the string into a temporary strbuf first. This gets rid of an extra allocation and a string copy. Signed-off-by: René Scharfe --- Patch formatted with --function-context for easier reviewing. sha1-name.c | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) -- 2.23.0 diff --git a/sha1-name.c b/sha1-name.c index c665e3f96d..85196929c7 100644 --- a/sha1-name.c +++ b/sha1-name.c @@ -1286,70 +1286,67 @@ static int get_oid_oneline(struct repository *r, struct grab_nth_branch_switch_cbdata { int remaining; - struct strbuf buf; + struct strbuf *sb; }; static int grab_nth_branch_switch(struct object_id *ooid, struct object_id *noid, const char *email, timestamp_t timestamp, int tz, const char *message, void *cb_data) { struct grab_nth_branch_switch_cbdata *cb = cb_data; const char *match = NULL, *target = NULL; size_t len; if (skip_prefix(message, "checkout: moving from ", &match)) target = strstr(match, " to "); if (!match || !target) return 0; if (--(cb->remaining) == 0) { len = target - match; - strbuf_reset(&cb->buf); - strbuf_add(&cb->buf, match, len); + strbuf_reset(cb->sb); + strbuf_add(cb->sb, match, len); return 1; /* we are done */ } return 0; } /* * Parse @{-N} syntax, return the number of characters parsed * if successful; otherwise signal an error with negative value. */ static int interpret_nth_prior_checkout(struct repository *r, const char *name, int namelen, struct strbuf *buf) { long nth; int retval; struct grab_nth_branch_switch_cbdata cb; const char *brace; char *num_end; if (namelen < 4) return -1; if (name[0] != '@' || name[1] != '{' || name[2] != '-') return -1; brace = memchr(name, '}', namelen); if (!brace) return -1; nth = strtol(name + 3, &num_end, 10); if (num_end != brace) return -1; if (nth <= 0) return -1; cb.remaining = nth; - strbuf_init(&cb.buf, 20); + cb.sb = buf; retval = refs_for_each_reflog_ent_reverse(get_main_ref_store(r), "HEAD", grab_nth_branch_switch, &cb); if (0 < retval) { - strbuf_reset(buf); - strbuf_addbuf(buf, &cb.buf); retval = brace - name + 1; } else retval = 0; - strbuf_release(&cb.buf); return retval; }