paragui-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[paragui-cvs] CVS: paragui/src/core missing.cpp,1.1.2.2,1.1.2.3 pgfilear


From: Alexander Pipelka <address@hidden>
Subject: [paragui-cvs] CVS: paragui/src/core missing.cpp,1.1.2.2,1.1.2.3 pgfilearchive.cpp,1.2.4.3,1.2.4.4
Date: Thu, 06 Jun 2002 18:10:48 -0400

Update of /cvsroot/paragui/paragui/src/core
In directory subversions:/tmp/cvs-serv3107/src/core

Modified Files:
      Tag: devel-1-0
        missing.cpp pgfilearchive.cpp 
Log Message:
- added pattern matching for PG_FileArchive::GetFileList
- added fnmatch replacement
- fix framebuffer console font rendering
- added DECLSPEC to PG_LAyout functions



Index: missing.cpp
===================================================================
RCS file: /cvsroot/paragui/paragui/src/core/Attic/missing.cpp,v
retrieving revision 1.1.2.2
retrieving revision 1.1.2.3
diff -C2 -r1.1.2.2 -r1.1.2.3
*** missing.cpp 31 May 2002 13:25:45 -0000      1.1.2.2
--- missing.cpp 6 Jun 2002 22:10:46 -0000       1.1.2.3
***************
*** 15,16 ****
--- 15,178 ----
  }
  #endif
+ 
+ #ifndef HAVE_FNMATCH
+ #include <errno.h>
+ 
+ /* Match STRING against the filename pattern PATTERN, returning zero
+    if it matches, FNM_NOMATCH if not.  */
+ int fnmatch (const char *pattern, const char *string, int flags) {
+   register const char *p = pattern, *n = string;
+   register char c;
+ 
+   if ((flags & ~__FNM_FLAGS) != 0) {
+       errno = EINVAL;
+       return (-1);
+     }
+ 
+   while ((c = *p++) != '\0')
+     {
+       switch (c)
+       {
+       case '?':
+         if (*n == '\0')
+           return (FNM_NOMATCH);
+         else if ((flags & FNM_PATHNAME) && *n == '/')
+           return (FNM_NOMATCH);
+         else if ((flags & FNM_PERIOD) && *n == '.' &&
+                  (n == string || ((flags & FNM_PATHNAME) && n[-1] == '/')))
+           return (FNM_NOMATCH);
+         break;
+ 
+       case '\\':
+         if (!(flags & FNM_NOESCAPE))
+           c = *p++;
+         if (*n != c)
+           return (FNM_NOMATCH);
+         break;
+ 
+       case '*':
+         if ((flags & FNM_PERIOD) && *n == '.' &&
+             (n == string || ((flags & FNM_PATHNAME) && n[-1] == '/')))
+           return (FNM_NOMATCH);
+ 
+         for (c = *p++; c == '?' || c == '*'; c = *p++, ++n)
+           if (((flags & FNM_PATHNAME) && *n == '/') ||
+               (c == '?' && *n == '\0'))
+             return (FNM_NOMATCH);
+ 
+         if (c == '\0')
+           return (0);
+ 
+         {
+           char c1 = (!(flags & FNM_NOESCAPE) && c == '\\') ? *p : c;
+           for (--p; *n != '\0'; ++n)
+             if ((c == '[' || *n == c1) &&
+                 fnmatch (p, n, flags & ~FNM_PERIOD) == 0)
+               return (0);
+           return (FNM_NOMATCH);
+         }
+ 
+       case '[':
+         {
+           /* Nonzero if the sense of the character class is
+              inverted.  */
+           register int not;
+ 
+           if (*n == '\0')
+             return (FNM_NOMATCH);
+ 
+           if ((flags & FNM_PERIOD) && *n == '.' &&
+               (n == string || ((flags & FNM_PATHNAME) && n[-1] == '/')))
+             return (FNM_NOMATCH);
+ 
+           /* Make sure there is a closing `]'.  If there isn't,
+              the `[' is just a character to be matched.  */
+           {
+             register const char *np;
+ 
+             for (np = p; np && *np && *np != ']'; np++);
+ 
+             if (np && !*np)
+               {
+                 if (*n != '[')
+                   return (FNM_NOMATCH);
+                 goto next_char;
+               }
+           }
+ 
+           not = (*p == '!' || *p == '^');
+           if (not)
+             ++p;
+ 
+           c = *p++;
+           while (1)
+             {
+               register char cstart = c, cend = c;
+ 
+               if (!(flags & FNM_NOESCAPE) && c == '\\')
+                 cstart = cend = *p++;
+ 
+               if (c == '\0')
+                 /* [ (unterminated) loses.  */
+                 return (FNM_NOMATCH);
+ 
+               c = *p++;
+ 
+               if ((flags & FNM_PATHNAME) && c == '/')
+                 /* [/] can never match.  */
+                 return (FNM_NOMATCH);
+ 
+               if (c == '-' && *p != ']')
+                 {
+                   cend = *p++;
+                   if (!(flags & FNM_NOESCAPE) && cend == '\\')
+                     cend = *p++;
+                   if (cend == '\0')
+                     return (FNM_NOMATCH);
+                   c = *p++;
+                 }
+ 
+               if (*n >= cstart && *n <= cend)
+                 goto matched;
+ 
+               if (c == ']')
+                 break;
+             }
+           if (!not)
+             return (FNM_NOMATCH);
+ 
+         next_char:
+           break;
+ 
+         matched:
+           /* Skip the rest of the [...] that already matched.  */
+           while (c != ']')
+             {
+               if (c == '\0')
+                 /* [... (unterminated) loses.  */
+                 return (FNM_NOMATCH);
+ 
+               c = *p++;
+               if (!(flags & FNM_NOESCAPE) && c == '\\')
+                 /* 1003.2d11 is unclear if this is right.  %%% */
+                 ++p;
+             }
+           if (not)
+             return (FNM_NOMATCH);
+         }
+         break;
+ 
+       default:
+         if (c != *n)
+           return (FNM_NOMATCH);
+       }
+ 
+       ++n;
+     }
+ 
+   if (*n == '\0')
+     return (0);
+ 
+   return (FNM_NOMATCH);
+ }
+ #endif

Index: pgfilearchive.cpp
===================================================================
RCS file: /cvsroot/paragui/paragui/src/core/pgfilearchive.cpp,v
retrieving revision 1.2.4.3
retrieving revision 1.2.4.4
diff -C2 -r1.2.4.3 -r1.2.4.4
*** pgfilearchive.cpp   31 May 2002 12:17:29 -0000      1.2.4.3
--- pgfilearchive.cpp   6 Jun 2002 22:10:46 -0000       1.2.4.4
***************
*** 112,116 ****
  }
  
! PG_FileList* PG_FileArchive::GetFileList(const char *dir) {
        char **tempList = EnumerateFiles(dir);
        
--- 112,116 ----
  }
  
! PG_FileList* PG_FileArchive::GetFileList(const char *dir, const char* 
wildcard) {
        char **tempList = EnumerateFiles(dir);
        
***************
*** 119,133 ****
        }
  
!       PG_FileList* retVal = NULL;
        
!       // Scan through to get the length of the listing to get the proper 
vector size.
!       Uint32 size = 0;
!       for( size = 0; tempList[ size ] != NULL; ++size) {}
!       
!       // Now we're ready to initialize everything.
!       retVal = new std::vector< std::string >;
!       retVal->reserve( size );
!       for( Uint32 i = 0; i < size; ++i ) {
!               retVal->push_back(std::string(tempList[ i ]));
        }
        
--- 119,128 ----
        }
  
!       PG_FileList* retVal = new PG_FileList;
        
!       for( char** i = tempList; *i != NULL; i++) {
!               if(fnmatch(wildcard, *i, FNM_PATHNAME) == 0) {
!                       retVal->push_back(std::string(*i));
!               }
        }
        




reply via email to

[Prev in Thread] Current Thread [Next in Thread]