You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stdcxx.apache.org by fa...@apache.org on 2008/04/11 18:49:17 UTC
svn commit: r647222 - /stdcxx/trunk/tests/src/fnmatch.cpp
Author: faridz
Date: Fri Apr 11 09:49:14 2008
New Revision: 647222
URL: http://svn.apache.org/viewvc?rev=647222&view=rev
Log:
2008-04-11 Farid Zaripov <fa...@epam.com>
* tests/src/fnmatch.cpp (rw_fnmatch): Added checking *next for 0 before incrementing
next in case '?'. Slightly optimized codeand added some _RWSTD_ASSERT's.
Modified:
stdcxx/trunk/tests/src/fnmatch.cpp
Modified: stdcxx/trunk/tests/src/fnmatch.cpp
URL: http://svn.apache.org/viewvc/stdcxx/trunk/tests/src/fnmatch.cpp?rev=647222&r1=647221&r2=647222&view=diff
==============================================================================
--- stdcxx/trunk/tests/src/fnmatch.cpp (original)
+++ stdcxx/trunk/tests/src/fnmatch.cpp Fri Apr 11 09:49:14 2008
@@ -126,32 +126,35 @@
_TEST_EXPORT int
rw_fnmatch (const char *pattern, const char *string, int arg)
{
+ _RWSTD_ASSERT (pattern);
+ _RWSTD_ASSERT (string);
+
const char *next = string;
bool esc = false;
for (const char *pc = pattern; ; ++pc) {
- switch (*pc) {
+ switch (const char c = *pc) {
case '\0':
- return *pc == *next ? 0 : 1;
+ return !!*next;
case '\\':
- if (0 == pc - pattern || !esc)
- esc = true;
- else {
- if (*pc != *next)
+ if (esc) {
+ if (c != *next)
return 1;
esc = false;
++next;
}
+ else
+ esc = true;
break;
case '*':
if (esc) {
- if (*pc != *next)
+ if (c != *next)
return 1;
esc = false;
@@ -174,17 +177,22 @@
break;
case '?':
- if (esc && *pc != *next)
- return 1;
+ if (esc) {
+ if (c != *next)
+ return 1;
- esc = false;
+ esc = false;
+ }
+
+ if ('\0' == *next)
+ return 1;
++next;
break;
case '[':
if (esc) {
- if (*pc != *next)
+ if (c != *next)
return 1;
esc = false;
@@ -202,7 +210,7 @@
break;
default:
- if (*pc != *next)
+ if (c != *next)
return 1;
esc = false;
@@ -216,7 +224,7 @@
// of the pattern in all asterisks
if (!esc)
while ('*' == *++pc);
- return *pc != '\0';
+ return !!*pc;
}
}
Re: svn commit: r647222 - /stdcxx/trunk/tests/src/fnmatch.cpp
Posted by Martin Sebor <se...@roguewave.com>.
faridz@apache.org wrote:
> Author: faridz
> Date: Fri Apr 11 09:49:14 2008
> New Revision: 647222
>
> URL: http://svn.apache.org/viewvc?rev=647222&view=rev
> Log:
> 2008-04-11 Farid Zaripov <fa...@epam.com>
>
> * tests/src/fnmatch.cpp (rw_fnmatch): Added checking *next for 0 before incrementing
> next in case '?'. Slightly optimized codeand added some _RWSTD_ASSERT's.
_RWSTD_ASSERT() is only for the library. We want RW_ASSERT()
in the driver. We might want to think about changing the name
of the macro to something like RW_TEST_ASSERT() to make it
more obvious what it's for.
Martin
>
> Modified:
> stdcxx/trunk/tests/src/fnmatch.cpp
>
> Modified: stdcxx/trunk/tests/src/fnmatch.cpp
> URL: http://svn.apache.org/viewvc/stdcxx/trunk/tests/src/fnmatch.cpp?rev=647222&r1=647221&r2=647222&view=diff
> ==============================================================================
> --- stdcxx/trunk/tests/src/fnmatch.cpp (original)
> +++ stdcxx/trunk/tests/src/fnmatch.cpp Fri Apr 11 09:49:14 2008
> @@ -126,32 +126,35 @@
> _TEST_EXPORT int
> rw_fnmatch (const char *pattern, const char *string, int arg)
> {
> + _RWSTD_ASSERT (pattern);
> + _RWSTD_ASSERT (string);
> +
> const char *next = string;
>
> bool esc = false;
>
> for (const char *pc = pattern; ; ++pc) {
>
> - switch (*pc) {
> + switch (const char c = *pc) {
> case '\0':
> - return *pc == *next ? 0 : 1;
> + return !!*next;
>
> case '\\':
> - if (0 == pc - pattern || !esc)
> - esc = true;
> - else {
> - if (*pc != *next)
> + if (esc) {
> + if (c != *next)
> return 1;
>
> esc = false;
> ++next;
> }
> + else
> + esc = true;
>
> break;
>
> case '*':
> if (esc) {
> - if (*pc != *next)
> + if (c != *next)
> return 1;
>
> esc = false;
> @@ -174,17 +177,22 @@
> break;
>
> case '?':
> - if (esc && *pc != *next)
> - return 1;
> + if (esc) {
> + if (c != *next)
> + return 1;
>
> - esc = false;
> + esc = false;
> + }
> +
> + if ('\0' == *next)
> + return 1;
>
> ++next;
> break;
>
> case '[':
> if (esc) {
> - if (*pc != *next)
> + if (c != *next)
> return 1;
>
> esc = false;
> @@ -202,7 +210,7 @@
> break;
>
> default:
> - if (*pc != *next)
> + if (c != *next)
> return 1;
>
> esc = false;
> @@ -216,7 +224,7 @@
> // of the pattern in all asterisks
> if (!esc)
> while ('*' == *++pc);
> - return *pc != '\0';
> + return !!*pc;
> }
> }
>
>
>