[Top][All Lists]
[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));
! }
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [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,
Alexander Pipelka <address@hidden> <=
- Prev by Date:
[paragui-cvs] CVS: paragui/src/widgets pglayout.cpp,1.2,1.2.6.1
- Next by Date:
[paragui-cvs] CVS: paragui/include paraconfig.h,1.3.6.8,1.3.6.9 paraconfig_macos.h,1.1.2.1,1.1.2.2 paraconfig_win32.h,1.1.1.1.6.2,1.1.1.1.6.3 pgfilearchive.h,1.3.6.1,1.3.6.2 pglayout.h,1.3,1.3.6.1
- Previous by thread:
[paragui-cvs] CVS: paragui/src/widgets pglayout.cpp,1.2,1.2.6.1
- Next by thread:
[paragui-cvs] CVS: paragui/include paraconfig.h,1.3.6.8,1.3.6.9 paraconfig_macos.h,1.1.2.1,1.1.2.2 paraconfig_win32.h,1.1.1.1.6.2,1.1.1.1.6.3 pgfilearchive.h,1.3.6.1,1.3.6.2 pglayout.h,1.3,1.3.6.1
- Index(es):