diff --git a/modules/libjar/nsWildCard.cpp b/modules/libjar/nsWildCard.cpp index a3ae5ceb80f..5becd61ae3b 100644 --- a/modules/libjar/nsWildCard.cpp +++ b/modules/libjar/nsWildCard.cpp @@ -48,14 +48,15 @@ */ #include "nsWildCard.h" -#include "plstr.h" -#include "prmem.h" +#include "nsXPCOM.h" +#include "nsCRTGlue.h" +#include "nsCharTraits.h" /* ----------------------------- _valid_subexp ---------------------------- */ - +template static int -_valid_subexp(char *expr, char stop) +_valid_subexp(const T *expr, T stop) { register int x,y,t; int nsc,np,tld; @@ -124,15 +125,26 @@ _valid_subexp(char *expr, char stop) return ((expr[x] == stop) ? x : INVALID_SXP); } -int -NS_WildCardValid(char *expr) -{ - int x; - x = _valid_subexp(expr, '\0'); +template +int +NS_WildCardValid_(const T *expr) +{ + int x = _valid_subexp(expr, T('\0')); return (x < 0 ? x : VALID_SXP); } +int +NS_WildCardValid(const char *expr) +{ + return NS_WildCardValid_(expr); +} + +int +NS_WildCardValid(const PRUnichar *expr) +{ + return NS_WildCardValid_(expr); +} /* ----------------------------- _shexp_match ----------------------------- */ @@ -141,12 +153,14 @@ NS_WildCardValid(char *expr) #define NOMATCH 1 #define ABORTED -1 -static int _shexp_match(char *str, char *expr, PRBool case_insensitive); +template +static int _shexp_match(const T *str, const T *expr, PRBool case_insensitive); +template static int -_handle_union(char *str, char *expr, PRBool case_insensitive) +_handle_union(const T *str, const T *expr, PRBool case_insensitive) { - char *e2 = (char *) PR_Malloc(sizeof(char)*strlen(expr)); + T *e2 = (T *) NS_Alloc(sizeof(T)*nsCharTraits::length(expr)); register int t,p2,p1 = 1; int cp; @@ -161,11 +175,11 @@ _handle_union(char *str, char *expr, PRBool case_insensitive) } for (t=cp+1; ((e2[p2] = expr[t]) != 0); ++t,++p2) {} if(_shexp_match(str,e2, case_insensitive) == MATCH) { - PR_Free(e2); + NS_Free(e2); return MATCH; } if(p1 == cp) { - PR_Free(e2); + NS_Free(e2); return NOMATCH; } else ++p1; @@ -173,8 +187,9 @@ _handle_union(char *str, char *expr, PRBool case_insensitive) } +template static int -_shexp_match(char *str, char *expr, PRBool case_insensitive) +_shexp_match(const T *str, const T *expr, PRBool case_insensitive) { register int x,y; int ret,neg; @@ -273,15 +288,17 @@ _shexp_match(char *str, char *expr, PRBool case_insensitive) return (ret ? ret : (str[x] ? NOMATCH : MATCH)); } + +template int -NS_WildCardMatch(char *str, char *xp, PRBool case_insensitive) { - register int x; - char *expr = PL_strdup(xp); +NS_WildCardMatch_(const T *str, const T *xp, PRBool case_insensitive) +{ + T *expr = NS_strdup(xp); if(!expr) return 1; - for(x=strlen(expr)-1;x;--x) { + for(int x=nsCharTraits::length(expr)-1;x;--x) { if((expr[x] == '~') && (expr[x-1] != '\\')) { expr[x] = '\0'; if(_shexp_match(str,&expr[++x], case_insensitive) == MATCH) @@ -290,11 +307,25 @@ NS_WildCardMatch(char *str, char *xp, PRBool case_insensitive) { } } if(_shexp_match(str,expr, case_insensitive) == MATCH) { - PL_strfree(expr); + NS_Free(expr); return 0; } punt: - PL_strfree(expr); + NS_Free(expr); return 1; } + +int +NS_WildCardMatch(const char *str, const char *xp, + PRBool case_insensitive) +{ + return NS_WildCardMatch_(str, xp, case_insensitive); +} + +int +NS_WildCardMatch(const PRUnichar *str, const PRUnichar *xp, + PRBool case_insensitive) +{ + return NS_WildCardMatch_(str, xp, case_insensitive); +} diff --git a/modules/libjar/nsWildCard.h b/modules/libjar/nsWildCard.h index 1267c826004..404f91db0f3 100644 --- a/modules/libjar/nsWildCard.h +++ b/modules/libjar/nsWildCard.h @@ -53,8 +53,6 @@ #define nsWildCard_h__ #include "prtypes.h" -#include /* isalnum */ -#include /* strlen */ /* --------------------------- Public routines ---------------------------- */ @@ -71,8 +69,9 @@ #define INVALID_SXP -2 #define VALID_SXP 1 -extern int NS_WildCardValid(char *expr); +extern int NS_WildCardValid(const char *expr); +extern int NS_WildCardValid(const PRUnichar *expr); /* return values for the search routines */ #define MATCH 0 @@ -87,6 +86,10 @@ extern int NS_WildCardValid(char *expr); * Returns 0 on match and 1 on non-match. */ -extern int NS_WildCardMatch(char *str, char *expr, PRBool case_insensitive); +extern int NS_WildCardMatch(const char *str, const char *expr, + PRBool case_insensitive); + +extern int NS_WildCardMatch(const PRUnichar *str, const PRUnichar *expr, + PRBool case_insensitive); #endif /* nsWildCard_h__ */ diff --git a/toolkit/components/filepicker/src/nsWildCard.cpp b/toolkit/components/filepicker/src/nsWildCard.cpp index 209b5f2c052..5becd61ae3b 100644 --- a/toolkit/components/filepicker/src/nsWildCard.cpp +++ b/toolkit/components/filepicker/src/nsWildCard.cpp @@ -48,15 +48,15 @@ */ #include "nsWildCard.h" -#include "nsCRT.h" -#include "plstr.h" -#include "prmem.h" +#include "nsXPCOM.h" +#include "nsCRTGlue.h" +#include "nsCharTraits.h" /* ----------------------------- _valid_subexp ---------------------------- */ - +template static int -_valid_subexp(PRUnichar *expr, PRUnichar stop) +_valid_subexp(const T *expr, T stop) { register int x,y,t; int nsc,np,tld; @@ -125,15 +125,26 @@ _valid_subexp(PRUnichar *expr, PRUnichar stop) return ((expr[x] == stop) ? x : INVALID_SXP); } -int -NS_WildCardValid(PRUnichar *expr) -{ - int x; - x = _valid_subexp(expr, '\0'); +template +int +NS_WildCardValid_(const T *expr) +{ + int x = _valid_subexp(expr, T('\0')); return (x < 0 ? x : VALID_SXP); } +int +NS_WildCardValid(const char *expr) +{ + return NS_WildCardValid_(expr); +} + +int +NS_WildCardValid(const PRUnichar *expr) +{ + return NS_WildCardValid_(expr); +} /* ----------------------------- _shexp_match ----------------------------- */ @@ -142,14 +153,14 @@ NS_WildCardValid(PRUnichar *expr) #define NOMATCH 1 #define ABORTED -1 -static int _shexp_match(const PRUnichar *str, const PRUnichar *expr, - PRBool case_insensitive); +template +static int _shexp_match(const T *str, const T *expr, PRBool case_insensitive); +template static int -_handle_union(const PRUnichar *str, const PRUnichar *expr, - PRBool case_insensitive) +_handle_union(const T *str, const T *expr, PRBool case_insensitive) { - PRUnichar *e2 = (PRUnichar *) PR_Malloc(sizeof(PRUnichar)*nsCRT::strlen(expr)); + T *e2 = (T *) NS_Alloc(sizeof(T)*nsCharTraits::length(expr)); register int t,p2,p1 = 1; int cp; @@ -164,11 +175,11 @@ _handle_union(const PRUnichar *str, const PRUnichar *expr, } for (t=cp+1; ((e2[p2] = expr[t]) != 0); ++t,++p2) {} if(_shexp_match(str,e2, case_insensitive) == MATCH) { - PR_Free(e2); + NS_Free(e2); return MATCH; } if(p1 == cp) { - PR_Free(e2); + NS_Free(e2); return NOMATCH; } else ++p1; @@ -176,9 +187,9 @@ _handle_union(const PRUnichar *str, const PRUnichar *expr, } +template static int -_shexp_match(const PRUnichar *str, const PRUnichar *expr, - PRBool case_insensitive) +_shexp_match(const T *str, const T *expr, PRBool case_insensitive) { register int x,y; int ret,neg; @@ -277,16 +288,17 @@ _shexp_match(const PRUnichar *str, const PRUnichar *expr, return (ret ? ret : (str[x] ? NOMATCH : MATCH)); } + +template int -NS_WildCardMatch(const PRUnichar *str, const PRUnichar *xp, - PRBool case_insensitive) { - register int x; - PRUnichar *expr = nsCRT::strdup(xp); +NS_WildCardMatch_(const T *str, const T *xp, PRBool case_insensitive) +{ + T *expr = NS_strdup(xp); if(!expr) return 1; - for(x=nsCRT::strlen(expr)-1;x;--x) { + for(int x=nsCharTraits::length(expr)-1;x;--x) { if((expr[x] == '~') && (expr[x-1] != '\\')) { expr[x] = '\0'; if(_shexp_match(str,&expr[++x], case_insensitive) == MATCH) @@ -295,11 +307,25 @@ NS_WildCardMatch(const PRUnichar *str, const PRUnichar *xp, } } if(_shexp_match(str,expr, case_insensitive) == MATCH) { - PR_Free(expr); + NS_Free(expr); return 0; } punt: - PR_Free(expr); + NS_Free(expr); return 1; } + +int +NS_WildCardMatch(const char *str, const char *xp, + PRBool case_insensitive) +{ + return NS_WildCardMatch_(str, xp, case_insensitive); +} + +int +NS_WildCardMatch(const PRUnichar *str, const PRUnichar *xp, + PRBool case_insensitive) +{ + return NS_WildCardMatch_(str, xp, case_insensitive); +} diff --git a/toolkit/components/filepicker/src/nsWildCard.h b/toolkit/components/filepicker/src/nsWildCard.h index e780c77f4b7..404f91db0f3 100644 --- a/toolkit/components/filepicker/src/nsWildCard.h +++ b/toolkit/components/filepicker/src/nsWildCard.h @@ -53,8 +53,6 @@ #define nsWildCard_h__ #include "prtypes.h" -#include /* isalnum */ -#include /* strlen */ /* --------------------------- Public routines ---------------------------- */ @@ -71,8 +69,9 @@ #define INVALID_SXP -2 #define VALID_SXP 1 -extern int NS_WildCardValid(PRUnichar *expr); +extern int NS_WildCardValid(const char *expr); +extern int NS_WildCardValid(const PRUnichar *expr); /* return values for the search routines */ #define MATCH 0 @@ -87,6 +86,9 @@ extern int NS_WildCardValid(PRUnichar *expr); * Returns 0 on match and 1 on non-match. */ +extern int NS_WildCardMatch(const char *str, const char *expr, + PRBool case_insensitive); + extern int NS_WildCardMatch(const PRUnichar *str, const PRUnichar *expr, PRBool case_insensitive);