From c8f96624ede2b6a4f28a82c1caaa4a3eca356fda Mon Sep 17 00:00:00 2001 From: "ssu%netscape.com" Date: Tue, 29 Jun 1999 23:15:38 +0000 Subject: [PATCH] fixing bug #8454 and AddDirectory() function --- xpinstall/src/nsInstall.cpp | 22 ++++++++++------------ xpinstall/src/nsInstallFile.cpp | 2 +- 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/xpinstall/src/nsInstall.cpp b/xpinstall/src/nsInstall.cpp index 6fffff9acbdf..36e92e37a7dc 100644 --- a/xpinstall/src/nsInstall.cpp +++ b/xpinstall/src/nsInstall.cpp @@ -41,6 +41,7 @@ #include "nsIPref.h" #include "prmem.h" +#include "plstr.h" #include "VerReg.h" //#include "zipfile.h" // replaced by nsIJAR.h @@ -1787,8 +1788,8 @@ nsInstall::ExtractDirEntries(const nsString& directory, nsVector *paths) if ( paths ) { nsString pattern(directory); - pattern += "/?*"; - PRInt32 prefix_length = directory.Length(); + pattern += "/*"; + PRInt32 prefix_length = directory.Length()+1; // account for slash nsresult rv = mJarFileData->Find( nsAutoCString(pattern), &jarEnum ); if (NS_FAILED(rv) || !jarEnum) @@ -1796,10 +1797,7 @@ nsInstall::ExtractDirEntries(const nsString& directory, nsVector *paths) PRBool bMore; rv = jarEnum->HasMoreElements(&bMore); - if (NS_FAILED(rv)) - goto handle_err; - - while (bMore) + while (bMore && NS_SUCCEEDED(rv)) { rv = jarEnum->GetNext( (nsISupports**) &currJARItem ); if (currJARItem) @@ -1810,19 +1808,19 @@ nsInstall::ExtractDirEntries(const nsString& directory, nsVector *paths) goto handle_err; if (buf) { - if ( prefix_length >= sizeof(buf)-1 ) + PRInt32 namelen = PL_strlen(buf); + NS_ASSERTION( prefix_length <= namelen, "Match must be longer than pattern!" ); + + if ( buf[namelen-1] != '/' ) { - PR_FREEIF( buf ); - goto handle_err; + paths->Add( new nsString(buf+prefix_length) ); // XXX manipulation should be in caller } - paths->Add( new nsString(buf+prefix_length) ); // XXX manipulation should be in caller + PR_FREEIF( buf ); } NS_IF_RELEASE(currJARItem); } rv = jarEnum->HasMoreElements(&bMore); - if (NS_FAILED(rv)) - goto handle_err; } } diff --git a/xpinstall/src/nsInstallFile.cpp b/xpinstall/src/nsInstallFile.cpp index 4e2b83fc253b..a5e1433567af 100644 --- a/xpinstall/src/nsInstallFile.cpp +++ b/xpinstall/src/nsInstallFile.cpp @@ -105,7 +105,7 @@ nsInstallFile::nsInstallFile(nsInstall* inInstall, } } - delete qualifiedRegNameString; + delete [] qualifiedRegNameString; mFinalFile = new nsFileSpec(folderSpec);