From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 5011 invoked by alias); 4 Apr 2005 05:33:15 -0000 Mailing-List: contact binutils-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: binutils-owner@sources.redhat.com Received: (qmail 4968 invoked from network); 4 Apr 2005 05:33:10 -0000 Received: from unknown (HELO mail.codesourcery.com) (65.74.133.9) by sourceware.org with SMTP; 4 Apr 2005 05:33:10 -0000 Received: (qmail 29455 invoked from network); 4 Apr 2005 05:33:09 -0000 Received: from localhost (HELO taltos.codesourcery.com) (zack@127.0.0.1) by mail.codesourcery.com with SMTP; 4 Apr 2005 05:33:09 -0000 Received: by taltos.codesourcery.com (sSMTP sendmail emulation); Sun, 3 Apr 2005 22:33:08 -0700 To: binutils@sourceware.org Subject: Re: gas/hash.c: add interface for looking up non-NUL-terminated strings References: <871x9ynrx6.fsf@codesourcery.com> <20050404032129.GH7121@bubble.modra.org> From: Zack Weinberg Date: Mon, 04 Apr 2005 05:33:00 -0000 In-Reply-To: <20050404032129.GH7121@bubble.modra.org> (Alan Modra's message of "Mon, 4 Apr 2005 12:51:29 +0930") Message-ID: <87is33gl7v.fsf@codesourcery.com> User-Agent: Gnus/5.11 (Gnus v5.11) Emacs/21.3.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-SW-Source: 2005-04/txt/msg00056.txt.bz2 Alan Modra writes: > On Tue, Mar 29, 2005 at 12:00:37PM -0800, Zack Weinberg wrote: >> >> The appended patch adds a new interface to gas/hash.c, hash_find_n, >> with exactly the same semantics as hash_find except that the length of >> the key is passed in as an argument, and the key is not assumed to be >> NUL-terminated. This is more convenient when parsing an assembly >> instruction: one does not need to write a NUL into the line buffer so >> that hash_find knows where to stop. > > Hmm, seems to me that writing a NUL into the line buffer isn't that > onerous. I suppose to some extent it's a matter of taste, but having this interface available allows me to make dramatic simplifications in tc-arm.c. I should have something to show y'all sometime this week on that score. > I'd like to see more justification for this patch, particularly > since we have too many hash table implementations already in > binutils. At some stage I'd like to move bfd and gas over to use > libiberty's hashtab.c, and another interface difference will make > that task harder. For what GAS uses hash tables for, I don't think that's a good idea. libiberty's hashtab.c is extremely generic; you'd have to write nontrivial amounts of wrapper code, and you'd take a nasty performance hit. (multiple indirect function calls on every lookup). cpplib's symtab.c might be a better fit (it can be used independently from the rest of cpplib) -- and it already has this interface. :) >> - if (strcmp (p->string, key) == 0) >> + if (p->string[len] == '\0' && strncmp (p->string, key, len) == 0) > > Potential access past the end of p->string. The strncmp must come > first. Good point, will correct in my copy. zw