Browse Source

Issue #1905 - Part 4b - Fix issue loading the profile and saving changes to the profile. Based on the following Mozilla bugs: 1659904, 1659905 and 1659077.

pull/28/head
Brian Smith 2 months ago committed by roytam1
parent
commit
7e63a3f440
  1. 8
      dom/system/OSFileConstants.cpp
  2. 15
      js/src/ctypes/CTypes.cpp
  3. 8
      toolkit/components/osfile/modules/osfile_shared_allthreads.jsm
  4. 2
      toolkit/components/osfile/modules/osfile_unix_back.jsm
  5. 4
      toolkit/components/osfile/modules/osfile_unix_front.jsm

8
dom/system/OSFileConstants.cpp

@ -711,10 +711,10 @@ static const dom::ConstantSpec gLibcProperties[] =
// Under MacOSX, to avoid using deprecated functions that do not
// match the constants we define in this object (including
// |sizeof|/|offsetof| stuff, but not only), for a number of
// functions, we need to adapt the name of the symbols we are using,
// whenever macro _DARWIN_FEATURE_64_BIT_INODE is set. We export
// this value to be able to do so from JavaScript.
#if defined(_DARWIN_FEATURE_64_BIT_INODE)
// functions, we need to use functions with a $INODE64 suffix.
// That is true on Intel-based mac when the _DARWIN_FEATURE_64_BIT_INODE
// macro is set. But not on Apple Silicon.
#if defined(_DARWIN_FEATURE_64_BIT_INODE) && !defined(__aarch64__)
{ "_DARWIN_FEATURE_64_BIT_INODE", JS::Int32Value(1) },
#endif // defined(_DARWIN_FEATURE_64_BIT_INODE)

15
js/src/ctypes/CTypes.cpp

@ -6708,12 +6708,15 @@ PrepareCIF(JSContext* cx,
if (!rtype)
return false;
ffi_status status =
ffi_prep_cif(&fninfo->mCIF,
abi,
fninfo->mFFITypes.length(),
rtype,
fninfo->mFFITypes.begin());
ffi_status status;
if (fninfo->mIsVariadic) {
status = ffi_prep_cif_var(&fninfo->mCIF, abi, fninfo->mArgTypes.length(),
fninfo->mFFITypes.length(), rtype,
fninfo->mFFITypes.begin());
} else {
status = ffi_prep_cif(&fninfo->mCIF, abi, fninfo->mFFITypes.length(), rtype,
fninfo->mFFITypes.begin());
}
switch (status) {
case FFI_OK:

8
toolkit/components/osfile/modules/osfile_shared_allthreads.jsm

@ -1130,6 +1130,14 @@ var declareFFI = function declareFFI(lib, symbol, abi,
throw new TypeError("Missing type for argument " + ( i - 3 ) +
" of symbol " + symbol);
}
// Ellipsis for variadic arguments.
if (current == "...") {
if (i != arguments.length - 1) {
throw new TypeError("Variadic ellipsis must be the last argument");
}
signature.push(current);
continue;
}
if (!current.implementation) {
throw new TypeError("Missing implementation for argument " + (i - 3)
+ " of symbol " + symbol

2
toolkit/components/osfile/modules/osfile_unix_back.jsm

@ -435,7 +435,7 @@
/*return*/ Type.negativeone_or_fd,
/*path*/ Type.path,
/*oflags*/ Type.int,
/*mode*/ Type.int);
"...");
if (OS.Constants.Sys.Name == "NetBSD") {
libc.declareLazyFFI(SysFile, "opendir",

4
toolkit/components/osfile/modules/osfile_unix_front.jsm

@ -320,7 +320,7 @@
flags |= Const.O_APPEND;
}
}
return error_or_file(UnixFile.open(path, flags, omode), path);
return error_or_file(UnixFile.open(path, flags, ctypes.int(omode)), path);
};
/**
@ -675,7 +675,7 @@
// If necessary, fail if the destination file exists
if (options.noOverwrite) {
let fd = UnixFile.open(destPath, Const.O_RDONLY, 0);
let fd = UnixFile.open(destPath, Const.O_RDONLY);
if (fd != -1) {
fd.dispose();
// The file exists and we have access

Loading…
Cancel
Save