From owner-svn-src-stable@FreeBSD.ORG Fri May 3 16:41:06 2013 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.FreeBSD.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id 772496E9 for ; Fri, 3 May 2013 16:41:06 +0000 (UTC) (envelope-from mailer-daemon@vniz.net) Received: from mail-lb0-f169.google.com (mail-lb0-f169.google.com [209.85.217.169]) by mx1.freebsd.org (Postfix) with ESMTP id F369A1FA6 for ; Fri, 3 May 2013 16:41:05 +0000 (UTC) Received: by mail-lb0-f169.google.com with SMTP id z5so1726041lbh.14 for ; Fri, 03 May 2013 09:40:59 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=x-received:message-id:date:from:user-agent:mime-version:to:cc :subject:references:in-reply-to:openpgp:content-type :content-transfer-encoding:x-gm-message-state; bh=uQq6lalcNh3vFPNzKVi/f16f58rnqlKOhinny5bXaEI=; b=N2ojUVAdTN8OYWOTjhvEEwaI3sEeoRJiQMStcbhK1ObfsvbtvsBq5yliRP/qg1EcAS aDx+R5V5abdosMzsvDum4bQY7aChiRhmNQQK3n6J/cX1NkRHTG0SbSueKD6zTgvg/LU5 EmDSdrEZYhhiNYxc7Z5bYHsMVGeoE7sJyjn/gBhjb+lPbCxC70X5e9cRGtJKGOuh/HrP 6QoFj4VcfJ84lZXyb+itYf5VS8P9HC5UKkXZs0gMjAyQqQbr5PF3PP8CHr2gQ8a/h8fg 8gOrzdjFxYkP0CdszgE67AypUoWZ82SNcuA+ZPNSwl0noRKrr9IpAjbS9UgSiSEnmUiq URag== X-Received: by 10.152.87.116 with SMTP id w20mr4511976laz.0.1367599259311; Fri, 03 May 2013 09:40:59 -0700 (PDT) Received: from [192.168.1.2] ([89.169.163.3]) by mx.google.com with ESMTPSA id sl5sm4436768lbb.10.2013.05.03.09.40.58 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Fri, 03 May 2013 09:40:58 -0700 (PDT) Message-ID: <5183E899.4000503@freebsd.org> Date: Fri, 03 May 2013 20:40:57 +0400 From: Andrey Chernov User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/20130328 Thunderbird/17.0.5 MIME-Version: 1.0 To: Sergey Kandaurov Subject: Re: svn commit: r250215 - stable/9/lib/libc/locale References: <201305031552.r43FqiPN024580@svn.freebsd.org> In-Reply-To: <201305031552.r43FqiPN024580@svn.freebsd.org> OpenPGP: id=964474DD Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Gm-Message-State: ALoCoQlLABm/8FxPIGfFdV2UQZjDNkr2Cez8A9t+F6dGa8bEHvpcEuPn7TuKA0ywSoOyqWvdFfcC Cc: svn-src-stable@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org, svn-src-stable-9@freebsd.org X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 03 May 2013 16:41:06 -0000 I don't think this change is optimal (cause slowdown) since you add unneeded strlen() in the loop for known-sized elements plus one strlen() for tested property, and wctype_l() itself can be called very often, so we definitely don't need slowdown here. Since most of elements have equal sizes, your len1 == len2 condition gains almost nothing for valid calls. On 03.05.2013 19:52, Sergey Kandaurov wrote: > Modified: stable/9/lib/libc/locale/wctype.c > ============================================================================== > --- stable/9/lib/libc/locale/wctype.c Fri May 3 15:28:31 2013 (r250214) > +++ stable/9/lib/libc/locale/wctype.c Fri May 3 15:52:43 2013 (r250215) > @@ -57,35 +57,54 @@ iswctype_l(wint_t wc, wctype_t charclass > wctype_t > wctype_l(const char *property, locale_t locale) > { > - static const struct { > - const char *name; > - wctype_t mask; > - } props[] = { > - { "alnum", _CTYPE_A|_CTYPE_D }, > - { "alpha", _CTYPE_A }, > - { "blank", _CTYPE_B }, > - { "cntrl", _CTYPE_C }, > - { "digit", _CTYPE_D }, > - { "graph", _CTYPE_G }, > - { "lower", _CTYPE_L }, > - { "print", _CTYPE_R }, > - { "punct", _CTYPE_P }, > - { "space", _CTYPE_S }, > - { "upper", _CTYPE_U }, > - { "xdigit", _CTYPE_X }, > - { "ideogram", _CTYPE_I }, /* BSD extension */ > - { "special", _CTYPE_T }, /* BSD extension */ > - { "phonogram", _CTYPE_Q }, /* BSD extension */ > - { "rune", 0xFFFFFF00L }, /* BSD extension */ > - { NULL, 0UL }, /* Default */ > + const char *propnames = > + "alnum\0" > + "alpha\0" > + "blank\0" > + "cntrl\0" > + "digit\0" > + "graph\0" > + "lower\0" > + "print\0" > + "punct\0" > + "space\0" > + "upper\0" > + "xdigit\0" > + "ideogram\0" /* BSD extension */ > + "special\0" /* BSD extension */ > + "phonogram\0" /* BSD extension */ > + "rune\0"; /* BSD extension */ > + static const wctype_t propmasks[] = { > + _CTYPE_A|_CTYPE_D, > + _CTYPE_A, > + _CTYPE_B, > + _CTYPE_C, > + _CTYPE_D, > + _CTYPE_G, > + _CTYPE_L, > + _CTYPE_R, > + _CTYPE_P, > + _CTYPE_S, > + _CTYPE_U, > + _CTYPE_X, > + _CTYPE_I, > + _CTYPE_T, > + _CTYPE_Q, > + 0xFFFFFF00L > }; > - int i; > + size_t len1, len2; > + const char *p; > + const wctype_t *q; > > - i = 0; > - while (props[i].name != NULL && strcmp(props[i].name, property) != 0) > - i++; > + len1 = strlen(property); > + q = propmasks; > + for (p = propnames; (len2 = strlen(p)) != 0; p += len2 + 1) { > + if (len1 == len2 && memcmp(property, p, len1) == 0) > + return (*q); > + q++; > + } > > - return (props[i].mask); > + return (0UL); > } > > wctype_t wctype(const char *property) > -- http://ache.vniz.net/ bitcoin:13fGiNutKNHcVSsgtGQ7bQ5kgUKgEQHn7N