From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=0.2 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, T_SCC_BODY_TEXT_LINE autolearn=no autolearn_force=no version=3.4.4 Received: (qmail 23904 invoked from network); 13 Nov 2023 01:44:05 -0000 Received: from bsd.lv (HELO mandoc.bsd.lv) (66.111.2.12) by inbox.vuxu.org with ESMTPUTF8; 13 Nov 2023 01:44:05 -0000 Received: from fantadrom.bsd.lv (localhost [127.0.0.1]) by mandoc.bsd.lv (OpenSMTPD) with ESMTP id 7eb8d72d for ; Mon, 13 Nov 2023 01:44:05 +0000 (UTC) Received: from wout2-smtp.messagingengine.com (wout2-smtp.messagingengine.com [64.147.123.25]) by mandoc.bsd.lv (OpenSMTPD) with ESMTP id b20d7b44 for ; Mon, 13 Nov 2023 01:44:04 +0000 (UTC) Received: from compute2.internal (compute2.nyi.internal [10.202.2.46]) by mailout.west.internal (Postfix) with ESMTP id 1924D320051E; Sun, 12 Nov 2023 20:44:04 -0500 (EST) Received: from mailfrontend1 ([10.202.2.162]) by compute2.internal (MEProxy); Sun, 12 Nov 2023 20:44:04 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=wezm.net; h=cc :cc:content-transfer-encoding:content-type:date:date:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:sender:subject:subject:to:to; s=fm2; t=1699839843; x= 1699926243; bh=ZHl3cd5XncTglGWNC6Vhk0Odhw8b9wQyScoNL/+6Zxw=; b=d 8YiMoTZlpz597LDXAIiOIExzp+EHOztA7u7l1aUi2VlsJJ6rfWL82IPG3dHnPh2v LV/15U7nb/uMkzp8mBNT0ng9BJGEkSCFD4B5foQdZVnWknvtoCiZO48NG/KgN2J8 KVj1lF/i3dVKPlCbcv48eHweFw64aDCasS0N2GY2LIadfNpIvYlgCeYUnAZsLYi/ kDg4231qzS/MCLYNWEFMEZk2JURojZvoahcTnRy+L568sW0bleh3meL8b+bE4noh c8ANAv3Qovr/xOoLN8Q6u0SayRynVA4PnezZWGuuER+AuG+F4JyYhbgyaCT6/SIm RbqQx3RykCpVYKP0Sw6vQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:date:date:feedback-id:feedback-id:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:sender:subject:subject:to:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t=1699839843; x= 1699926243; bh=ZHl3cd5XncTglGWNC6Vhk0Odhw8b9wQyScoNL/+6Zxw=; b=j mJ5D8YhauYMlzI0C9yKtsV4nuGCPls/t0hhzzzT93UHO0lWFchsnI+kPz3vj9URx iFuRmLUG6ZtTUflN7SmrJEQpgOovUdzTQBgl2Ej4SY4hf1eVd1TkRy4AoUG+ZADA uwG4q7JjBBxRFQiec4HTqg4gJyvqKNwKeVEkEFF2dzt8fmmy0yY5QHAr7t1/11jJ i2a2ZN3P8OYTniX07e8wvIYSQV4Z49cIw759q4cSNYGLj9MPEdmAOY7VQRzm5cwv iKYSuyEiwVRFha+aG2u7qL1v2aQ+2H3ynTf5V8yGgONVIMDD4UKU9JmnwpVaVhLr O4uZhdMzAgO2JzIql73uQ== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvkedruddvledgfeejucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucenucfjughrpefhvfevufffkffojghfggfgsedtke ertdertddtnecuhfhrohhmpeghvghslhgvhicuofhoohhrvgcuoeifvghsseifvgiimhdr nhgvtheqnecuggftrfgrthhtvghrnhepueduhfeijeegiefgtdfhtdfhveeftedtheelff ffhfduteeghedugefhgeevledunecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghm pehmrghilhhfrhhomhepfigvshesfigviihmrdhnvght X-ME-Proxy: Feedback-ID: i0dbc4144:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Sun, 12 Nov 2023 20:44:01 -0500 (EST) From: Wesley Moore To: tech@mandoc.bsd.lv Cc: Wesley Moore Subject: [PATCH 3/3] Use ohash for predefined strings Date: Mon, 13 Nov 2023 11:42:45 +1000 Message-ID: <20231113014330.2247710-4-wes@wezm.net> X-Mailer: git-send-email 2.42.1 In-Reply-To: <20231113014330.2247710-1-wes@wezm.net> References: <20231113014330.2247710-1-wes@wezm.net> X-Mailinglist: mandoc-tech Reply-To: tech@mandoc.bsd.lv MIME-Version: 1.0 Content-Transfer-Encoding: 8bit --- roff.c | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/roff.c b/roff.c index 74afaab..ff85a63 100644 --- a/roff.c +++ b/roff.c @@ -113,6 +113,7 @@ struct roff { struct mctx *mstack; /* stack of macro contexts */ int *rstack; /* stack of inverted `ie' values */ struct ohash *reqtab; /* request lookup table */ + struct ohash *pretab; /* predefined strings table */ struct roffreg *regtab; /* number registers */ struct ohash *strtab; /* user-defined strings & macros */ struct ohash *rentab; /* renamed strings & macros */ @@ -241,6 +242,7 @@ static int roff_parse_comment(struct roff *, struct buf *, int, int, char); static int roff_parsetext(struct roff *, struct buf *, int, int *); +static struct ohash *roff_pretab_alloc(void); static int roff_renamed(ROFF_ARGS); static int roff_req_or_macro(ROFF_ARGS); static int roff_return(ROFF_ARGS); @@ -700,6 +702,21 @@ roffhash_find(struct ohash *htab, const char *name, size_t sz) /* --- key-value table ---------------------------------------------------- */ +struct ohash * +roff_pretab_alloc(void) +{ + int i; + struct ohash *htab; + struct predef pre; + + htab = roff_strhash_alloc(); + for (i = 0; i < PREDEFS_MAX; i++) { + pre = predefs[i]; + roff_setentry(htab, pre.name, strlen(pre.name), pre.str, strlen(pre.str), 0); + } + return htab; +} + struct ohash * roff_strhash_alloc(void) { @@ -852,6 +869,7 @@ roff_free(struct roff *r) int i; roff_free1(r); + roff_strhash_free(r->pretab); for (i = 0; i < r->mstacksz; i++) free(r->mstack[i].argv); free(r->mstack); @@ -866,6 +884,7 @@ roff_alloc(int options) r = mandoc_calloc(1, sizeof(struct roff)); r->reqtab = roffhash_alloc(0, ROFF_RENAMED); + r->pretab = roff_pretab_alloc(); r->strtab = roff_strhash_alloc(); r->rentab = roff_strhash_alloc(); r->options = options | MPARSE_COMMENT; @@ -4318,8 +4337,8 @@ static const char * roff_getstrn(struct roff *r, const char *name, size_t len, int *deftype) { - int found, i; const struct roff_entry *entry; + int found; enum roff_tok tok; found = 0; @@ -4341,16 +4360,13 @@ roff_getstrn(struct roff *r, const char *name, size_t len, found = 1; } } - for (i = 0; i < PREDEFS_MAX; i++) { - if (strncmp(name, predefs[i].name, len) != 0 || - predefs[i].name[len] != '\0') - continue; + entry = roff_strhash_find(r->pretab, name, len); + if (entry != NULL) { if (*deftype & ROFFDEF_PRE) { *deftype = ROFFDEF_PRE; - return predefs[i].str; + return entry->val.p; } else { found = 1; - break; } } if (r->man->meta.macroset != MACROSET_MAN) { -- 2.42.1 -- To unsubscribe send an email to tech+unsubscribe@mandoc.bsd.lv