From patchwork Fri Oct 15 05:32:46 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fangrui Song X-Patchwork-Id: 46259 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 354D23857C7A for ; Fri, 15 Oct 2021 05:33:22 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 354D23857C7A DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1634276002; bh=TeAGFkKzCKQm76JNt6PMpnebwVTjq2RaMUlfb4TBANw=; h=Date:Subject:To:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=AO9P9J1mKTR5pIGMZmJ8y3oY0GTpeefXyGZJ64sLGao/1DglvnJakBwhv/5O7X2lb 27uCpLBMyjkFn/Bd+Y0Kaa2o9E+vmgtvA0gyHvJHDnsSwI8DwAaYq+7hzbibvnuTyq ZUSzK4N7oX7ZYpsMf3Dtbyqh8q3h2T3t6OOfdQas= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-yb1-xb4a.google.com (mail-yb1-xb4a.google.com [IPv6:2607:f8b0:4864:20::b4a]) by sourceware.org (Postfix) with ESMTPS id 5D0953858412 for ; Fri, 15 Oct 2021 05:33:00 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 5D0953858412 Received: by mail-yb1-xb4a.google.com with SMTP id z130-20020a256588000000b005b6b4594129so10023133ybb.15 for ; Thu, 14 Oct 2021 22:33:00 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:message-id:mime-version:subject:from:to:cc; bh=TeAGFkKzCKQm76JNt6PMpnebwVTjq2RaMUlfb4TBANw=; b=svl04srfsDOoR6sHEVHCX7Sg2pCB/cmljWD31MMkFm1FWIgHpIWFvOww4h1X00IQ09 WsR5rdORc76GOnA2cf0P7EU4va2hUugpPszIlC1ZIC4cV0gV8FCWFzEl2l6PaWgbzVbD rw3Xr+BHvXVcKV7OpOI9W9M29C8YLlcr19rAtJ2P54UhwcbyqbbX+Q/SQ1IS6Ads6z+b yWAjLXmLjORLs27D4YujXWHz0a9lvZsmHYcdSb6s5ZQKhDFzMD4K0BCEXepQhehQDIHi oIcFt3L5fq/1GMHtfxfHYmwjxP+1S251hjoZ8/c7UaZmibLyF772gHjMq2zJ4WlqCRLH 8ESw== X-Gm-Message-State: AOAM532uWFiDGRxTqAEOSH839ttO9uhFSBK3FJZYIx5Pe+UuQtU0QsHC 1opLgGiJRu/VR1fT8Z30pSHi/DaibWgjH7BNTzmVniRiBZHFV4+R2iaONb+rbRRZagWs21DeRed l2yptzYFXYIqIl+5fu0u5WaieKeWWJqvqHd6dANROAmSiHraaneCUlsir97JbWzs16iUC X-Google-Smtp-Source: ABdhPJxHaEqQWlY07ccF0ZrmVP7Ul+hxTeAkZp8siMhe752rl18BJ/pjbIYzhCvyTBr4ackXJt7/eZfqeZgS X-Received: from maskray1.svl.corp.google.com ([2620:15c:2ce:200:4b19:99f3:3210:dc14]) (user=maskray job=sendgmr) by 2002:a25:77d6:: with SMTP id s205mr10711896ybc.529.1634275979929; Thu, 14 Oct 2021 22:32:59 -0700 (PDT) Date: Thu, 14 Oct 2021 22:32:46 -0700 Message-Id: <20211015053246.363952-1-maskray@google.com> Mime-Version: 1.0 Subject: [PATCH] nss: Unnest nested function add_key To: libc-alpha@sourceware.org X-Spam-Status: No, score=-19.6 required=5.0 tests=BAYES_00, DKIMWL_WL_MED, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) 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: Fangrui Song via Libc-alpha From: Fangrui Song Reply-To: Fangrui Song Errors-To: libc-alpha-bounces+patchwork=sourceware.org@sourceware.org Sender: "Libc-alpha" Add one static variable `db`, but make makedb.c compilable with Clang. --- nss/makedb.c | 78 +++++++++++++++++++++++++++------------------------- 1 file changed, 40 insertions(+), 38 deletions(-) diff --git a/nss/makedb.c b/nss/makedb.c index 30c3d0426e..cc09e822d8 100644 --- a/nss/makedb.c +++ b/nss/makedb.c @@ -618,6 +618,45 @@ next_prime (size_t seed) return seed; } +static struct database *cur_db; +static size_t max_chainlength; +static char *wp; +static size_t nhashentries; +static bool copy_string; + +void add_key(const void *nodep, const VISIT which, const int depth) +{ + if (which != leaf && which != postorder) + return; + + const struct dbentry *dbe = *(const struct dbentry **) nodep; + + ptrdiff_t stridx; + if (copy_string) + { + stridx = wp - cur_db->keystrtab; + wp = stpcpy (wp, dbe->str) + 1; + } + else + stridx = 0; + + size_t hidx = dbe->hashval % nhashentries; + size_t hval2 = 1 + dbe->hashval % (nhashentries - 2); + size_t chainlength = 0; + + while (cur_db->hashtable[hidx] != ~((stridx_t) 0)) + { + ++chainlength; + if ((hidx += hval2) >= nhashentries) + hidx -= nhashentries; + } + + cur_db->hashtable[hidx] = ((cur_db->extra_string ? valstrlen : 0) + + dbe->validx); + cur_db->keyidxtab[hidx] = stridx; + + max_chainlength = MAX (max_chainlength, chainlength); +} static void compute_tables (void) @@ -649,44 +688,7 @@ compute_tables (void) db->keyidxtab = db->hashtable + nhashentries_max; db->keystrtab = (char *) (db->keyidxtab + nhashentries_max); - static size_t max_chainlength; - static char *wp; - static size_t nhashentries; - static bool copy_string; - - void add_key(const void *nodep, const VISIT which, const int depth) - { - if (which != leaf && which != postorder) - return; - - const struct dbentry *dbe = *(const struct dbentry **) nodep; - - ptrdiff_t stridx; - if (copy_string) - { - stridx = wp - db->keystrtab; - wp = stpcpy (wp, dbe->str) + 1; - } - else - stridx = 0; - - size_t hidx = dbe->hashval % nhashentries; - size_t hval2 = 1 + dbe->hashval % (nhashentries - 2); - size_t chainlength = 0; - - while (db->hashtable[hidx] != ~((stridx_t) 0)) - { - ++chainlength; - if ((hidx += hval2) >= nhashentries) - hidx -= nhashentries; - } - - db->hashtable[hidx] = ((db->extra_string ? valstrlen : 0) - + dbe->validx); - db->keyidxtab[hidx] = stridx; - - max_chainlength = MAX (max_chainlength, chainlength); - } + cur_db = db; copy_string = false; nhashentries = nhashentries_min;