From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Paul Eggert Newsgroups: gmane.emacs.bugs Subject: bug#8254: race condition in dired.c's scmp function Date: Tue, 15 Mar 2011 09:58:38 -0700 Organization: UCLA Computer Science Department Message-ID: <4D7F9ABE.70204@cs.ucla.edu> References: <4D7F043A.5070702@cs.ucla.edu> <4D7F15E7.1020407@cs.ucla.edu> NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Trace: dough.gmane.org 1300208832 8168 80.91.229.12 (15 Mar 2011 17:07:12 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Tue, 15 Mar 2011 17:07:12 +0000 (UTC) Cc: 8254@debbugs.gnu.org To: Juanma Barranquero Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Tue Mar 15 18:07:08 2011 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1PzXi5-0004O0-UD for geb-bug-gnu-emacs@m.gmane.org; Tue, 15 Mar 2011 18:07:06 +0100 Original-Received: from localhost ([127.0.0.1]:55496 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PzXi5-000321-9W for geb-bug-gnu-emacs@m.gmane.org; Tue, 15 Mar 2011 13:07:05 -0400 Original-Received: from [140.186.70.92] (port=57657 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PzXhz-0002zd-Ng for bug-gnu-emacs@gnu.org; Tue, 15 Mar 2011 13:07:00 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1PzXhy-0004Ha-P1 for bug-gnu-emacs@gnu.org; Tue, 15 Mar 2011 13:06:59 -0400 Original-Received: from debbugs.gnu.org ([140.186.70.43]:49181) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1PzXhy-0004HW-MM for bug-gnu-emacs@gnu.org; Tue, 15 Mar 2011 13:06:58 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.69) (envelope-from ) id 1PzXaH-0006Ex-RE; Tue, 15 Mar 2011 12:59:01 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Paul Eggert Original-Sender: debbugs-submit-bounces@debbugs.gnu.org Resent-To: owner@debbugs.gnu.org Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 15 Mar 2011 16:59:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 8254 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: Original-Received: via spool by 8254-submit@debbugs.gnu.org id=B8254.130020832723942 (code B ref 8254); Tue, 15 Mar 2011 16:59:01 +0000 Original-Received: (at 8254) by debbugs.gnu.org; 15 Mar 2011 16:58:47 +0000 Original-Received: from localhost ([127.0.0.1] helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1PzXa2-0006E7-Hr for submit@debbugs.gnu.org; Tue, 15 Mar 2011 12:58:46 -0400 Original-Received: from smtp.cs.ucla.edu ([131.179.128.62]) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1PzXa0-0006Dt-9J for 8254@debbugs.gnu.org; Tue, 15 Mar 2011 12:58:44 -0400 Original-Received: from localhost (localhost.localdomain [127.0.0.1]) by smtp.cs.ucla.edu (Postfix) with ESMTP id CA5FE39E80F7; Tue, 15 Mar 2011 09:58:38 -0700 (PDT) X-Virus-Scanned: amavisd-new at smtp.cs.ucla.edu Original-Received: from smtp.cs.ucla.edu ([127.0.0.1]) by localhost (smtp.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id RzsXfhrciNek; Tue, 15 Mar 2011 09:58:38 -0700 (PDT) Original-Received: from [131.179.64.200] (Penguin.CS.UCLA.EDU [131.179.64.200]) by smtp.cs.ucla.edu (Postfix) with ESMTPSA id 4CFEE39E80E1; Tue, 15 Mar 2011 09:58:38 -0700 (PDT) User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.13) Gecko/20101209 Fedora/3.1.7-0.35.b3pre.fc14 Thunderbird/3.1.7 In-Reply-To: X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.11 Precedence: list Resent-Date: Tue, 15 Mar 2011 12:59:01 -0400 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 3) X-Received-From: 140.186.70.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:45037 Archived-At: On 03/15/2011 04:36 AM, Juanma Barranquero wrote: > On the other hand, DOWNCASE begat UPPERCASEP, who begat LOWERCASEP and > UPCASE (and also ISUPPER in regex.c). Not to mention UPCASE1, which > uses the same variables and begat UPCASE (with LOWERCASEP) and > NOCASEP... Though most of these cases use ?: and&& and not ==, it is > certainly tedious to check every instance of these macros. I agree; and not only is it tedious, it's error-prone. It's better to fix the macros so that there's no need to check, as follows. While we're at it, we should simply get rid of the macros, by replacing every use of UPPERCASEP with uppercasep, etc. === modified file 'src/buffer.h' --- src/buffer.h 2011-03-15 07:04:00 +0000 +++ src/buffer.h 2011-03-15 07:28:00 +0000 @@ -1047,19 +1047,12 @@ /* 1 if CH is upper case. */ -#define UPPERCASEP(CH) (DOWNCASE (CH) != (CH)) - -/* 1 if CH is neither upper nor lower case. */ - -#define NOCASEP(CH) (UPCASE1 (CH) == (CH)) - -/* 1 if CH is lower case. */ - -#define LOWERCASEP(CH) (!UPPERCASEP (CH) && !NOCASEP(CH)) - -/* Upcase a character, or make no change if that cannot be done. */ - -#define UPCASE(CH) (!UPPERCASEP (CH) ? UPCASE1 (CH) : (CH)) +static inline int +uppercasep (int ch) +{ + return downcase (ch) != ch; +} +#define UPPERCASEP(CH) uppercasep (CH) /* Upcase a character known to be not upper case. */ @@ -1070,3 +1063,30 @@ return NATNUMP (up) ? XFASTINT (up) : ch; } #define UPCASE1(CH) upcase1 (CH) + +/* 1 if CH is neither upper nor lower case. */ + +static inline int +nocasep (int ch) +{ + return upcase1 (ch) == ch; +} +#define NOCASEP(CH) nocasep (CH) + +/* 1 if CH is lower case. */ + +static inline int +lowercasep (int ch) +{ + return !uppercasep (ch) && !nocasep (ch); +} +#define LOWERCASEP(CH) lowercasep (CH) + +/* Upcase a character, or make no change if that cannot be done. */ + +static inline EMACS_INT +upcase (int ch) +{ + return uppercasep (ch) ? ch : upcase1 (ch); +} +#define UPCASE(CH) upcase (CH)