Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:36427 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 23942 invoked from network); 24 Mar 2008 14:05:28 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 24 Mar 2008 14:05:28 -0000 Authentication-Results: pb1.pair.com header.from=dmitry@zend.com; sender-id=pass Authentication-Results: pb1.pair.com smtp.mail=dmitry@zend.com; spf=pass; sender-id=pass Received-SPF: pass (pb1.pair.com: domain zend.com designates 212.25.124.162 as permitted sender) X-PHP-List-Original-Sender: dmitry@zend.com X-Host-Fingerprint: 212.25.124.162 mail.zend.com Linux 2.5 (sometimes 2.4) (4) Received: from [212.25.124.162] ([212.25.124.162:6474] helo=mail.zend.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 81/E3-04656-425B7E74 for ; Mon, 24 Mar 2008 09:05:28 -0500 Received: (qmail 17494 invoked from network); 24 Mar 2008 14:05:21 -0000 Received: from unknown (HELO ?10.1.20.22?) (10.1.20.22) by cvs.zend.com with SMTP; 24 Mar 2008 14:05:21 -0000 Message-ID: <47E7B522.2000903@zend.com> Date: Mon, 24 Mar 2008 17:05:22 +0300 User-Agent: Thunderbird 2.0.0.9 (Windows/20071031) MIME-Version: 1.0 To: Marcus Boerger CC: Gregory Beaver , internals Mailing List , Stanislav Malyshev References: <47E2F8FA.20107@chiaraquartet.net> <47E37C42.10308@zend.com> <47E3E7F1.3060200@chiaraquartet.net> <47E792E1.9070803@zend.com> <47E7AC60.1040705@chiaraquartet.net> <119518366.20080324143952@marcus-boerger.de> <47E7B0ED.90902@chiaraquartet.net> <1866997971.20080324145106@marcus-boerger.de> In-Reply-To: <1866997971.20080324145106@marcus-boerger.de> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [PHP-DEV] REMINDER - stream wrappers in include_path From: dmitry@zend.com (Dmitry Stogov) The direct comparison must be faster than memcmp(). memcmp() might be optimized into the same code but probably won't be. Thanks. Dmitry. Marcus Boerger wrote: > Hello Gregory, > > Monday, March 24, 2008, 2:47:25 PM, you wrote: > >> Marcus Boerger wrote: >>> Hello Gregory, >>> >>> Monday, March 24, 2008, 2:28:00 PM, you wrote: >>> >>> >>>> Index: main/fopen_wrappers.c >>>> =================================================================== >>>> RCS file: /repository/php-src/main/fopen_wrappers.c,v >>>> retrieving revision 1.175.2.3.2.13.2.9 >>>> diff -u -r1.175.2.3.2.13.2.9 fopen_wrappers.c >>>> --- main/fopen_wrappers.c 24 Mar 2008 09:30:41 -0000 1.175.2.3.2.13.2.9 >>>> +++ main/fopen_wrappers.c 24 Mar 2008 13:24:34 -0000 >>>> @@ -473,7 +473,15 @@ >>>> >>>> ptr = path; >>>> while (ptr && *ptr) { >>>> - end = strchr(ptr, DEFAULT_DIR_SEPARATOR); >>>> + /* Check for stream wrapper */ >>>> + int is_stream_wrapper = 0; >>>> + >>>> + for (p = ptr; isalnum((int)*p) || *p == '+' || *p == '-' || *p == '.'; p++); >>>> + if ((*p == ':') && (p - ptr > 1) && (p[1] == '/') && (p[2] == '/')) { >>>> >>> However how about: >>> if ((p > ptr) && !memcmp(p, "://", 3)) { >> this would unfortunately break UNC paths on unix, which start with //. >> We have to verify that the stuff between : and : in the previous thing >> is a valid stream wrapper, which means it can only be >> alphanumeric/+/-/. However, I imagine the memcmp could be applied as if >> ((*p == ':') && (p - ptr > 1) && !memcmp(p, "://", 3)) > > I must be missign something here. First p - ptr > 1 === p > ptr > Second your do all && so I can reorder and get three consecutive char > checks. Hence memcmp is the better option and clearer to read imo. > >> Would that really be faster? >>> I think prefixinf with STREAMS_ would be good. >> OK, updated and attached > >> Greg > > > > Best regards, > Marcus >