From 5f05b369c41c09a9fcd1efbee47cbb2cc15aed35 Mon Sep 17 00:00:00 2001 From: "syd%netscape.com" Date: Sat, 5 May 2001 07:19:22 +0000 Subject: [PATCH] Fix for http://bugzilla.mozilla.org/show_bug.cgi?id=72913 r=sgehani, sr=dveditz git-svn-id: svn://10.0.0.236/trunk@94033 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/xpinstall/src/nsInstall.cpp | 9 +++++ mozilla/xpinstall/src/nsInstall.h | 1 + mozilla/xpinstall/src/nsJSFile.cpp | 47 +++++++++++++++++++++++++++ mozilla/xpinstall/src/nsJSFile.h | 3 ++ mozilla/xpinstall/src/nsJSInstall.cpp | 1 + 5 files changed, 61 insertions(+) diff --git a/mozilla/xpinstall/src/nsInstall.cpp b/mozilla/xpinstall/src/nsInstall.cpp index e73df025e69..e287a38fa99 100644 --- a/mozilla/xpinstall/src/nsInstall.cpp +++ b/mozilla/xpinstall/src/nsInstall.cpp @@ -1883,6 +1883,15 @@ nsInstall::FileOpFileIsDirectory(nsInstallFolder& aTarget, PRBool* aReturn) return NS_OK; } +PRInt32 +nsInstall::FileOpFileIsWritable(nsInstallFolder& aTarget, PRBool* aReturn) +{ + nsCOMPtr localFile = aTarget.GetFileSpec(); + + localFile->IsWritable(aReturn); + return NS_OK; +} + PRInt32 nsInstall::FileOpFileIsFile(nsInstallFolder& aTarget, PRBool* aReturn) { diff --git a/mozilla/xpinstall/src/nsInstall.h b/mozilla/xpinstall/src/nsInstall.h index 84e43debf01..a7c2ffbe4dd 100644 --- a/mozilla/xpinstall/src/nsInstall.h +++ b/mozilla/xpinstall/src/nsInstall.h @@ -252,6 +252,7 @@ class nsInstall PRInt32 FileOpFileGetModDate(nsInstallFolder& aTarget, double* aReturn); PRInt32 FileOpFileGetSize(nsInstallFolder& aTarget, PRInt64* aReturn); PRInt32 FileOpFileIsDirectory(nsInstallFolder& aTarget, PRBool* aReturn); + PRInt32 FileOpFileIsWritable(nsInstallFolder& aTarget, PRBool* aReturn); PRInt32 FileOpFileIsFile(nsInstallFolder& aTarget, PRBool* aReturn); PRInt32 FileOpFileModDateChanged(nsInstallFolder& aTarget, double aOldStamp, PRBool* aReturn); PRInt32 FileOpFileMove(nsInstallFolder& aSrc, nsInstallFolder& aTarget, PRInt32* aReturn); diff --git a/mozilla/xpinstall/src/nsJSFile.cpp b/mozilla/xpinstall/src/nsJSFile.cpp index 6e21dd0edca..fa0bb694311 100644 --- a/mozilla/xpinstall/src/nsJSFile.cpp +++ b/mozilla/xpinstall/src/nsJSFile.cpp @@ -772,6 +772,52 @@ InstallFileOpFileIsDirectory(JSContext *cx, JSObject *obj, uintN argc, jsval *ar return JS_TRUE; } +// +// Native method FileIsWritable +// +JSBool PR_CALLBACK +InstallFileOpFileIsWritable(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) +{ + nsInstall *nativeThis = (nsInstall*)JS_GetPrivate(cx, obj); + PRInt32 nativeRet; + JSObject *jsObj; + nsInstallFolder *folder; + + *rval = BOOLEAN_TO_JSVAL(PR_FALSE); + + // If there's no private data, this must be the prototype, so ignore + if(nsnull == nativeThis) + { + return JS_TRUE; + } + + if (argc == 0 || argv[0] == JSVAL_NULL || !JSVAL_IS_OBJECT(argv[0])) //argv[0] MUST be a jsval + { + *rval = BOOLEAN_TO_JSVAL(PR_FALSE); + return JS_TRUE; + } + + jsObj = JSVAL_TO_OBJECT(argv[0]); + + if (!JS_InstanceOf(cx, jsObj, &FileSpecObjectClass, nsnull)) + { + *rval = BOOLEAN_TO_JSVAL(PR_FALSE); + return JS_TRUE; + } + + folder = (nsInstallFolder*)JS_GetPrivate(cx, jsObj); + + if(!folder || NS_OK != nativeThis->FileOpFileIsWritable(*folder, &nativeRet)) + { + return JS_TRUE; + } + + *rval = BOOLEAN_TO_JSVAL(nativeRet); + + return JS_TRUE; +} + + // // Native method FileIsFile // @@ -1424,6 +1470,7 @@ static JSFunctionSpec FileOpMethods[] = {"modDate", InstallFileOpFileGetModDate, 1}, {"size", InstallFileOpFileGetSize, 1}, {"isDirectory", InstallFileOpFileIsDirectory, 1}, + {"isWritable", InstallFileOpFileIsWritable, 1}, {"isFile", InstallFileOpFileIsFile, 1}, {"modDateChanged", InstallFileOpFileModDateChanged, 2}, {"move", InstallFileOpFileMove, 2}, diff --git a/mozilla/xpinstall/src/nsJSFile.h b/mozilla/xpinstall/src/nsJSFile.h index 84e87b121fb..57799d9b21d 100644 --- a/mozilla/xpinstall/src/nsJSFile.h +++ b/mozilla/xpinstall/src/nsJSFile.h @@ -66,6 +66,9 @@ InstallFileOpFileGetSize(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, JSBool PR_CALLBACK InstallFileOpFileIsDirectory(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval); +JSBool PR_CALLBACK +InstallFileOpFileIsWritable(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval); + JSBool PR_CALLBACK InstallFileOpFileIsFile(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval); diff --git a/mozilla/xpinstall/src/nsJSInstall.cpp b/mozilla/xpinstall/src/nsJSInstall.cpp index 1df3376bd0e..15782b0011d 100644 --- a/mozilla/xpinstall/src/nsJSInstall.cpp +++ b/mozilla/xpinstall/src/nsJSInstall.cpp @@ -1838,6 +1838,7 @@ static JSFunctionSpec InstallMethods[] = {"fileGetModDate", InstallFileOpFileGetModDate, 1}, {"fileGetSize", InstallFileOpFileGetSize, 1}, {"fileIsDirectory", InstallFileOpFileIsDirectory, 1}, + {"fileIsWritable", InstallFileOpFileIsWritable, 1}, {"fileIsFile", InstallFileOpFileIsFile, 1}, {"fileModDateChanged", InstallFileOpFileModDateChanged, 2}, {"fileMove", InstallFileOpFileMove, 2},