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
This commit is contained in:
@@ -1883,6 +1883,15 @@ nsInstall::FileOpFileIsDirectory(nsInstallFolder& aTarget, PRBool* aReturn)
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
PRInt32
|
||||
nsInstall::FileOpFileIsWritable(nsInstallFolder& aTarget, PRBool* aReturn)
|
||||
{
|
||||
nsCOMPtr<nsIFile> localFile = aTarget.GetFileSpec();
|
||||
|
||||
localFile->IsWritable(aReturn);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
PRInt32
|
||||
nsInstall::FileOpFileIsFile(nsInstallFolder& aTarget, PRBool* aReturn)
|
||||
{
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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},
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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},
|
||||
|
||||
Reference in New Issue
Block a user