Browse Source

MoonchildProductions#1251 - Part 4: Core build system changes, lots of libevent/IPC junk.

This is mostly ifdefs, but as you can see, Solaris is actually a lot like Linux. They're both more SysV than BSD at core, and most of the differences have more to do with Solaris not using glibc than anything else.

I still need to audit a lot of these changes and understand why they're needed and what the alternative approaches are. After this patch, most of the core functionality needed to build Solaris is here.
pull/24/head
athenian200 3 years ago committed by Roy Tam
parent
commit
afb2e3a054
  1. 24
      build/moz.configure/init.configure
  2. 14
      config/external/nspr/pr/moz.build
  3. 2
      config/external/nspr/prcpucfg.h
  4. 4
      dom/media/AudioStream.h
  5. 6
      dom/plugins/ipc/PluginMessageUtils.cpp
  6. 4
      dom/plugins/ipc/PluginModuleChild.cpp
  7. 2
      dom/plugins/ipc/PluginModuleChild.h
  8. 2
      intl/icu/source/common/uposixdefs.h
  9. 3
      ipc/chromium/chromium-config.mozbuild
  10. 11
      ipc/chromium/moz.build
  11. 4
      ipc/chromium/src/base/message_loop.cc
  12. 19
      ipc/chromium/src/base/message_pump_glib.cc
  13. 3
      ipc/chromium/src/base/message_pump_libevent.cc
  14. 2
      ipc/chromium/src/base/platform_thread.h
  15. 4
      ipc/chromium/src/base/platform_thread_posix.cc
  16. 2
      ipc/chromium/src/base/process_util.h
  17. 4
      ipc/chromium/src/base/process_util_posix.cc
  18. 8
      ipc/chromium/src/base/sys_info_posix.cc
  19. 7
      ipc/chromium/src/base/time.h
  20. 29
      ipc/chromium/src/base/time_posix.cc
  21. 4
      ipc/chromium/src/build/build_config.h
  22. 6
      ipc/chromium/src/chrome/common/transport_dib.h
  23. 6
      ipc/chromium/src/third_party/libevent/arc4random.c
  24. 2
      ipc/chromium/src/third_party/libevent/event.c
  25. 2
      ipc/chromium/src/third_party/libevent/evutil_rand.c
  26. 2
      ipc/chromium/src/third_party/libevent/include/event2/util.h
  27. 480
      ipc/chromium/src/third_party/libevent/solaris/event2/event-config.h
  28. 4
      ipc/chromium/src/third_party/libeventcommon.mozbuild
  29. 5
      ipc/chromium/src/third_party/moz.build
  30. 4
      ipc/glue/BrowserProcessSubThread.cpp
  31. 2
      ipc/glue/BrowserProcessSubThread.h
  32. 4
      ipc/glue/GeckoChildProcessHost.cpp
  33. 18
      ipc/glue/MessageLink.cpp
  34. 3
      python/mozbuild/mozbuild/configure/constants.py
  35. 4
      toolkit/components/terminator/nsTerminator.cpp
  36. 9
      widget/GfxInfoX11.cpp
  37. 3
      xpcom/ds/nsMathUtils.h
  38. 2
      xpcom/glue/FileUtils.cpp

24
build/moz.configure/init.configure vendored

@ -336,6 +336,8 @@ def split_triplet(triplet):
canonical_os = canonical_kernel = 'NetBSD'
elif os.startswith('openbsd'):
canonical_os = canonical_kernel = 'OpenBSD'
elif os.startswith('solaris'):
canonical_os = canonical_kernel = 'SunOS'
else:
die('Unknown OS: %s' % os)
@ -569,6 +571,28 @@ def target_is_linux(target):
set_define('XP_LINUX', target_is_linux)
@depends(target)
def target_is_solaris(target):
if target.kernel == 'SunOS':
return True
set_define('XP_SOLARIS', target_is_solaris)
@depends(target)
def target_is_sparc(target):
if target.cpu == 'sparc':
return True
set_define('SPARC', target_is_sparc)
@depends(target)
def target_is_sparc64(target):
if target.cpu == 'sparc64':
return True
set_define('SPARC64', target_is_sparc64)
# The application/project to build
# ==============================================================
option('--enable-application', nargs=1, env='MOZ_BUILD_APP',

14
config/external/nspr/pr/moz.build vendored

@ -51,6 +51,19 @@ elif CONFIG['OS_TARGET'] == 'Darwin':
]
if not CONFIG['MOZ_IOS']:
DEFINES['HAVE_CRT_EXTERNS_H'] = True
elif CONFIG['OS_TARGET'] == 'SunOS':
DEFINES.update(
HAVE_FCNTL_FILE_LOCKING=True,
HAVE_SOCKLEN_T=True,
_PR_HAVE_OFF64_T=True,
_PR_INET6=True,
)
DEFINES['SOLARIS'] = True
SOURCES += ['/nsprpub/pr/src/md/unix/solaris.c']
if CONFIG['CPU_ARCH'] == 'x86_64':
SOURCES += ['/nsprpub/pr/src/md/unix/os_SunOS_x86_64.s']
elif CONFIG['CPU_ARCH'] == 'x86':
SOURCES += ['/nsprpub/pr/src/md/unix/os_SunOS/x86.s']
elif CONFIG['OS_TARGET'] == 'WINNT':
OS_LIBS += [
'advapi32',
@ -224,6 +237,7 @@ EXPORTS.nspr.md += [
'/nsprpub/pr/include/md/_linux.cfg',
'/nsprpub/pr/include/md/_netbsd.cfg',
'/nsprpub/pr/include/md/_openbsd.cfg',
'/nsprpub/pr/include/md/_solaris.cfg',
'/nsprpub/pr/include/md/_win95.cfg',
]

2
config/external/nspr/prcpucfg.h vendored

@ -22,6 +22,8 @@
#include "md/_openbsd.cfg"
#elif defined(__linux__)
#include "md/_linux.cfg"
#elif defined(__sun__)
#include "md/_solaris.cfg"
#else
#error "Unsupported platform!"
#endif

4
dom/media/AudioStream.h

@ -17,6 +17,10 @@
#include "mozilla/UniquePtr.h"
#include "CubebUtils.h"
#include "soundtouch/SoundTouchFactory.h"
#if defined(XP_SOLARIS)
#include "soundtouch/SoundTouch.h"
#endif
namespace mozilla {

6
dom/plugins/ipc/PluginMessageUtils.cpp

@ -82,7 +82,7 @@ MediateRace(const MessageChannel::MessageInfo& parent,
}
}
#if defined(OS_LINUX)
#if defined(OS_LINUX) || defined(OS_SOLARIS)
static string
ReplaceAll(const string& haystack, const string& needle, const string& with)
{
@ -101,7 +101,7 @@ ReplaceAll(const string& haystack, const string& needle, const string& with)
string
MungePluginDsoPath(const string& path)
{
#if defined(OS_LINUX)
#if defined(OS_LINUX) || defined(OS_SOLARIS)
// https://bugzilla.mozilla.org/show_bug.cgi?id=519601
return ReplaceAll(path, "netscape", "netsc@pe");
#else
@ -112,7 +112,7 @@ MungePluginDsoPath(const string& path)
string
UnmungePluginDsoPath(const string& munged)
{
#if defined(OS_LINUX)
#if defined(OS_LINUX) || defined(OS_SOLARIS)
return ReplaceAll(munged, "netsc@pe", "netscape");
#else
return munged;

4
dom/plugins/ipc/PluginModuleChild.cpp

@ -1821,7 +1821,7 @@ PluginModuleChild::AnswerNP_GetEntryPoints(NPError* _retval)
AssertPluginThread();
MOZ_ASSERT(mIsChrome);
#if defined(OS_LINUX) || defined(OS_BSD)
#if defined(OS_LINUX) || defined(OS_BSD) || defined(OS_SOLARIS)
return true;
#elif defined(OS_WIN) || defined(OS_MACOSX)
*_retval = mGetEntryPointsFunc(&mFunctions);
@ -1866,7 +1866,7 @@ PluginModuleChild::DoNP_Initialize(const PluginSettings& aSettings)
#endif
NPError result;
#if defined(OS_LINUX) || defined(OS_BSD)
#if defined(OS_LINUX) || defined(OS_BSD) || defined(OS_SOLARIS)
result = mInitializeFunc(&sBrowserFuncs, &mFunctions);
#elif defined(OS_WIN) || defined(OS_MACOSX)
result = mInitializeFunc(&sBrowserFuncs);

2
dom/plugins/ipc/PluginModuleChild.h

@ -258,7 +258,7 @@ private:
// we get this from the plugin
NP_PLUGINSHUTDOWN mShutdownFunc;
#if defined(OS_LINUX) || defined(OS_BSD)
#if defined(OS_LINUX) || defined(OS_BSD) || defined(OS_SOLARIS)
NP_PLUGINUNIXINIT mInitializeFunc;
#elif defined(OS_WIN) || defined(OS_MACOSX)
NP_PLUGININIT mInitializeFunc;

2
intl/icu/source/common/uposixdefs.h

@ -54,7 +54,7 @@
*
* z/OS needs this definition for timeval and to get usleep.
*/
#if !defined(_XOPEN_SOURCE_EXTENDED)
#if !defined(_XOPEN_SOURCE_EXTENDED) && (U_PLATFORM != U_PF_SOLARIS)
# define _XOPEN_SOURCE_EXTENDED 1
#endif

3
ipc/chromium/chromium-config.mozbuild

@ -41,6 +41,9 @@ else:
if CONFIG['OS_ARCH'] == 'Darwin':
DEFINES['OS_MACOSX'] = 1
elif CONFIG['OS_ARCH'] == 'SunOS':
DEFINES['OS_SOLARIS'] = 1
elif CONFIG['OS_ARCH'] == 'DragonFly':
DEFINES.update({
'OS_DRAGONFLY': 1,

11
ipc/chromium/moz.build

@ -132,12 +132,21 @@ if os_linux:
DEFINES['ANDROID'] = True
DEFINES['_POSIX_MONOTONIC_CLOCK'] = 0
if os_bsd or os_linux:
if os_bsd or os_linux or os_solaris:
if 'gtk' in CONFIG['MOZ_WIDGET_TOOLKIT']:
SOURCES += [
'src/base/message_pump_glib.cc',
]
if os_solaris:
SOURCES += [
'src/base/atomicops_internals_x86_gcc.cc',
'src/base/process_util_linux.cc',
'src/base/time_posix.cc',
]
LOCAL_INCLUDES += ['src/third_party/libevent/linux']
ost = CONFIG['OS_TEST']
if '86' not in ost and 'arm' not in ost and 'aarch64' != ost and 'mips' not in ost:
SOURCES += [

4
ipc/chromium/src/base/message_loop.cc

@ -21,7 +21,7 @@
#if defined(OS_POSIX)
#include "base/message_pump_libevent.h"
#endif
#if defined(OS_LINUX) || defined(OS_BSD)
#if defined(OS_LINUX) || defined(OS_BSD) || defined (OS_SOLARIS)
#if defined(MOZ_WIDGET_GTK)
#include "base/message_pump_glib.h"
#endif
@ -149,7 +149,7 @@ MessageLoop::MessageLoop(Type type, nsIThread* aThread)
if (type_ == TYPE_UI) {
#if defined(OS_MACOSX)
pump_ = base::MessagePumpMac::Create();
#elif defined(OS_LINUX) || defined(OS_BSD)
#elif defined(OS_LINUX) || defined(OS_BSD) || defined(OS_SOLARIS)
pump_ = new base::MessagePumpForUI();
#endif // OS_LINUX
} else if (type_ == TYPE_IO) {

19
ipc/chromium/src/base/message_pump_glib.cc

@ -9,6 +9,9 @@
#include <fcntl.h>
#include <math.h>
#if defined(OS_SOLARIS)
#include <unistd.h>
#endif
#include <gtk/gtk.h>
#include <glib.h>
@ -131,6 +134,12 @@ MessagePumpForUI::MessagePumpForUI()
// Create our wakeup pipe, which is used to flag when work was scheduled.
int fds[2];
CHECK(pipe(fds) == 0);
#if defined(OS_SOLARIS)
int flags = fcntl(fds[0], F_GETFL,0);
if (flags == -1)
flags = 0;
fntl(fds[0], F_SETFL, flags | O_NDELAY);
#endif
wakeup_pipe_read_ = fds[0];
wakeup_pipe_write_ = fds[1];
wakeup_gpollfd_->fd = wakeup_pipe_read_;
@ -238,11 +247,15 @@ bool MessagePumpForUI::HandleCheck() {
// whether there was data, so this read shouldn't block.
if (wakeup_gpollfd_->revents & G_IO_IN) {
pipe_full_ = false;
#ifndef OS_SOLARIS
char msg;
if (HANDLE_EINTR(read(wakeup_pipe_read_, &msg, 1)) != 1 || msg != '!') {
NOTREACHED() << "Error reading from the wakeup pipe.";
}
#else
char buf[32];
while (HANDLE_EINTR(read(wakeup_pipe_read_, &buf, 32)));
#endif
// Since we ate the message, we need to record that we have more work,
// because HandleCheck() may be called without HandleDispatch being called
// afterwards.
@ -311,6 +324,10 @@ void MessagePumpForUI::ScheduleWork() {
// variables as we would then need locks all over. This ensures that if
// we are sleeping in a poll that we will wake up.
char msg = '!';
#if defined(OS_SOLARIS)
char buf[32];
while (HANDLE_EINTR(read(wakeup_pipe_read_, &buf, 32)));
#endif
if (HANDLE_EINTR(write(wakeup_pipe_write_, &msg, 1)) != 1) {
NOTREACHED() << "Could not write to the UI message loop wakeup pipe!";
}

3
ipc/chromium/src/base/message_pump_libevent.cc

@ -8,6 +8,9 @@
#include <errno.h>
#include <fcntl.h>
#if defined(OS_SOLARIS)
#include <sys/stat.h>
#endif
#if defined(ANDROID) || defined(OS_POSIX)
#include <unistd.h>
#endif

2
ipc/chromium/src/base/platform_thread.h

@ -24,7 +24,7 @@ typedef void* PlatformThreadHandle; // HANDLE
#elif defined(OS_POSIX)
#include <pthread.h>
typedef pthread_t PlatformThreadHandle;
#if defined(OS_LINUX) || defined(OS_OPENBSD) || defined(__GLIBC__)
#if defined(OS_LINUX) || defined(OS_OPENBSD) || defined(OS_SOLARIS) || defined(__GLIBC__)
#include <unistd.h>
typedef pid_t PlatformThreadId;
#elif defined(OS_BSD)

4
ipc/chromium/src/base/platform_thread_posix.cc

@ -49,7 +49,7 @@ PlatformThreadId PlatformThread::CurrentId() {
return port;
#elif defined(OS_LINUX)
return syscall(__NR_gettid);
#elif defined(OS_OPENBSD) || defined(__GLIBC__)
#elif defined(OS_OPENBSD) || defined(OS_SOLARIS) || defined(__GLIBC__)
return (intptr_t) (pthread_self());
#elif defined(OS_NETBSD)
return _lwp_self();
@ -103,6 +103,8 @@ void PlatformThread::SetName(const char* name) {
pthread_setname_np(pthread_self(), "%s", (void *)name);
#elif defined(OS_BSD) && !defined(__GLIBC__)
pthread_set_name_np(pthread_self(), name);
#elif defined(OS_SOLARIS)
pthread_setname_np(pthread_self(), name);
#else
#endif
}

2
ipc/chromium/src/base/process_util.h

@ -19,7 +19,7 @@
#ifndef STDOUT_FILENO
#define STDOUT_FILENO 1
#endif
#elif defined(OS_LINUX) || defined(__GLIBC__)
#elif defined(OS_LINUX) || defined(OS_SOLARIS) || defined(__GLIBC__)
#include <dirent.h>
#include <limits.h>
#include <sys/types.h>

4
ipc/chromium/src/base/process_util_posix.cc

@ -117,7 +117,7 @@ void CloseSuperfluousFds(const base::InjectiveMultimap& saved_mapping) {
#if defined(ANDROID)
static const rlim_t kSystemDefaultMaxFds = 1024;
static const char kFDDir[] = "/proc/self/fd";
#elif defined(OS_LINUX)
#elif defined(OS_LINUX) || defined(OS_SOLARIS)
static const rlim_t kSystemDefaultMaxFds = 8192;
static const char kFDDir[] = "/proc/self/fd";
#elif defined(OS_MACOSX)
@ -209,7 +209,7 @@ void CloseSuperfluousFds(const base::InjectiveMultimap& saved_mapping) {
// TODO(agl): Remove this function. It's fundamentally broken for multithreaded
// apps.
void SetAllFDsToCloseOnExec() {
#if defined(OS_LINUX)
#if defined(OS_LINUX) || defined(OS_SOLARIS)
const char fd_dir[] = "/proc/self/fd";
#elif defined(OS_MACOSX) || defined(OS_BSD)
const char fd_dir[] = "/dev/fd";

8
ipc/chromium/src/base/sys_info_posix.cc

@ -121,7 +121,11 @@ std::wstring SysInfo::GetEnvVar(const wchar_t* var) {
// static
std::string SysInfo::OperatingSystemName() {
#if !defined(XP_SOLARIS)
utsname info;
#else
struct utsname info;
#endif
if (uname(&info) < 0) {
NOTREACHED();
return "";
@ -131,7 +135,11 @@ std::string SysInfo::OperatingSystemName() {
// static
std::string SysInfo::CPUArchitecture() {
#if !defined(XP_SOLARIS)
utsname info;
#else
struct utsname info;
#endif
if (uname(&info) < 0) {
NOTREACHED();
return "";

7
ipc/chromium/src/base/time.h

@ -64,6 +64,10 @@ class TimeDelta {
return delta_;
}
#if defined(OS_SOLARIS)
struct timespec ToTimeSpec() const;
#endif
// Returns the time delta in some unit. The F versions return a floating
// point value, the "regular" versions return a rounded-down value.
int InDays() const;
@ -226,6 +230,9 @@ class Time {
static Time FromDoubleT(double dt);
double ToDoubleT() const;
#if defined(OS_SOLARIS)
struct timeval ToTimeVal() const;
#endif
#if defined(OS_WIN)
static Time FromFileTime(FILETIME ft);

29
ipc/chromium/src/base/time_posix.cc

@ -67,11 +67,13 @@ Time Time::FromExploded(bool is_local, const Exploded& exploded) {
timestruct.tm_wday = exploded.day_of_week; // mktime/timegm ignore this
timestruct.tm_yday = 0; // mktime/timegm ignore this
timestruct.tm_isdst = -1; // attempt to figure it out
#ifndef OS_SOLARIS
timestruct.tm_gmtoff = 0; // not a POSIX field, so mktime/timegm ignore
timestruct.tm_zone = NULL; // not a POSIX field, so mktime/timegm ignore
#endif
time_t seconds;
#ifdef ANDROID
#if defined(ANDROID) || defined(OS_SOLARIS)
seconds = mktime(&timestruct);
#else
if (is_local)
@ -175,7 +177,7 @@ TimeTicks TimeTicks::Now() {
// With numer and denom = 1 (the expected case), the 64-bit absolute time
// reported in nanoseconds is enough to last nearly 585 years.
#elif defined(OS_OPENBSD) || defined(OS_POSIX) && \
#elif defined(OS_OPENBSD) || defined(OS_SOLARIS) || defined(OS_POSIX) && \
defined(_POSIX_MONOTONIC_CLOCK) && _POSIX_MONOTONIC_CLOCK >= 0
struct timespec ts;
@ -200,4 +202,27 @@ TimeTicks TimeTicks::HighResNow() {
return Now();
}
#if defined(OS_SOLARIS)
struct timespec TimeDelta::ToTimeSpec() const {
int64_t microseconds = InMicroseconds();
time_t seconds = 0;
if (microseconds >= Time::kMicrosecondsPerSecond) {
seconds = InSeconds();
microseconds -= seconds * Time::kMicrosecondsPerSecond;
}
struct timespec result =
{seconds,
microseconds * Time::kNanosecondsPerMicrosecond};
return result;
}
struct timeval Time::ToTimeVal() const {
struct timeval result;
int64_t us = us_ - kTimeTToMicrosecondsOffset;
result.tv_sec = us / Time::kMicrosecondsPerSecond;
result.tv_usec = us % Time::kMicrosecondsPerSecond;
return result;
}
#endif
} // namespace base

4
ipc/chromium/src/build/build_config.h

@ -32,6 +32,8 @@
#define OS_NETBSD 1
#elif defined(__OpenBSD__)
#define OS_OPENBSD 1
#elif defined(__sun__)
#define OS_SOLARIS 1
#elif defined(_WIN32)
#define OS_WIN 1
#else
@ -47,7 +49,7 @@
// For access to standard POSIX features, use OS_POSIX instead of a more
// specific macro.
#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) || defined(OS_SOLARIS)
#define OS_POSIX 1
#endif

6
ipc/chromium/src/chrome/common/transport_dib.h

@ -68,7 +68,7 @@ class TransportDIB {
typedef base::SharedMemoryHandle Handle;
// On Mac, the inode number of the backing file is used as an id.
typedef base::SharedMemoryId Id;
#elif defined(OS_LINUX)
#elif defined(OS_LINUX) || defined(OS_SOLARIS)
typedef int Handle; // These two ints are SysV IPC shared memory keys
typedef int Id;
#endif
@ -98,7 +98,7 @@ class TransportDIB {
// wire to give this transport DIB to another process.
Handle handle() const;
#if defined(OS_LINUX)
#if defined(OS_LINUX) || defined(OS_SOLARIS)
// Map the shared memory into the X server and return an id for the shared
// segment.
XID MapToX(Display* connection);
@ -109,7 +109,7 @@ class TransportDIB {
#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_BSD)
explicit TransportDIB(base::SharedMemoryHandle dib);
base::SharedMemory shared_memory_;
#elif defined(OS_LINUX)
#elif defined(OS_LINUX) || defined(OS_SOLARIS)
int key_; // SysV shared memory id
void* address_; // mapped address
XID x_shm_; // X id for the shared segment

6
ipc/chromium/src/third_party/libevent/arc4random.c vendored

@ -41,6 +41,10 @@
* RC4 is a registered trademark of RSA Laboratories.
*/
#ifdef XP_SOLARIS
#include "build/build_config.h"
#endif
#ifndef ARC4RANDOM_EXPORT
#define ARC4RANDOM_EXPORT
#endif
@ -477,6 +481,7 @@ arc4random(void)
}
#endif
#if defined(_we_have_arc4random_buf) || !defined(XP_SOLARIS)
ARC4RANDOM_EXPORT void
arc4random_buf(void *_buf, size_t n)
{
@ -490,6 +495,7 @@ arc4random_buf(void *_buf, size_t n)
}
_ARC4_UNLOCK();
}
#endif
#ifndef ARC4RANDOM_NOUNIFORM
/*

2
ipc/chromium/src/third_party/libevent/event.c vendored

@ -2883,8 +2883,10 @@ event_global_setup_locks_(const int enable_locks)
#endif
if (evsig_global_setup_locks_(enable_locks) < 0)
return -1;
#ifndef OS_SOLARIS
if (evutil_secure_rng_global_setup_locks_(enable_locks) < 0)
return -1;
#endif
return 0;
}
#endif

2
ipc/chromium/src/third_party/libevent/evutil_rand.c vendored

@ -139,7 +139,7 @@ evutil_secure_rng_get_bytes(void *buf, size_t n)
ev_arc4random_buf(buf, n);
}
#if !defined(__OpenBSD__) && !defined(ANDROID)
#if !defined(__OpenBSD__) && !defined(ANDROID) && !defined(__sun__)
void
evutil_secure_rng_add_bytes(const char *buf, size_t n)
{

2
ipc/chromium/src/third_party/libevent/include/event2/util.h vendored

@ -672,7 +672,7 @@ void evutil_secure_rng_get_bytes(void *buf, size_t n);
*/
int evutil_secure_rng_init(void);
#if !defined(__OpenBSD__) && !defined(ANDROID)
#if !defined(__OpenBSD__) && !defined(ANDROID) && !defined(__sun__)
/** Seed the random number generator with extra random bytes.
You should almost never need to call this function; it should be

480
ipc/chromium/src/third_party/libevent/solaris/event2/event-config.h vendored

@ -0,0 +1,480 @@
/* event2/event-config.h
*
* This file was generated by autoconf when libevent was built, and post-
* processed by Libevent so that its macros would have a uniform prefix.
*
* DO NOT EDIT THIS FILE.
*
* Do not rely on macros in this file existing in later versions.
*/
#ifndef _EVENT2_EVENT_CONFIG_H_
#define _EVENT2_EVENT_CONFIG_H_
/* config.h. Generated from config.h.in by configure. */
/* config.h.in. Generated from configure.ac by autoheader. */
/* Define if libevent should build without support for a debug mode */
/* #undef _EVENT_DISABLE_DEBUG_MODE */
/* Define if libevent should not allow replacing the mm functions */
/* #undef _EVENT_DISABLE_MM_REPLACEMENT */
/* Define if libevent should not be compiled with thread support */
/* #undef _EVENT_DISABLE_THREAD_SUPPORT */
/* Define to 1 if you have the `arc4random' function. */
#define _EVENT_HAVE_ARC4RANDOM 1
/* Define to 1 if you have the `arc4random_buf' function. */
#define _EVENT_HAVE_ARC4RANDOM_BUF 1
/* Define to 1 if you have the <arpa/inet.h> header file. */
#define _EVENT_HAVE_ARPA_INET_H 1
/* Define to 1 if you have the `clock_gettime' function. */
#define _EVENT_HAVE_CLOCK_GETTIME 1
/* Define to 1 if you have the declaration of `CTL_KERN', and to 0 if you
don't. */
/* #undef _EVENT_HAVE_DECL_CTL_KERN */
/* Define to 1 if you have the declaration of `KERN_ARND', and to 0 if you
don't. */
/* #undef _EVENT_HAVE_DECL_KERN_ARND */
/* Define to 1 if you have the declaration of `KERN_RANDOM', and to 0 if you
don't. */
/* #undef _EVENT_HAVE_DECL_KERN_RANDOM */
/* Define to 1 if you have the declaration of `RANDOM_UUID', and to 0 if you
don't. */
/* #undef _EVENT_HAVE_DECL_RANDOM_UUID */
/* Define if /dev/poll is available */
#define _EVENT_HAVE_DEVPOLL 1
/* Define to 1 if you have the <dlfcn.h> header file. */
#define _EVENT_HAVE_DLFCN_H 1
/* Define if your system supports the epoll system calls */
#undef _EVENT_HAVE_EPOLL
/* Define to 1 if you have the `epoll_ctl' function. */
/* #undef _EVENT_HAVE_EPOLL_CTL */
/* Define to 1 if you have the `eventfd' function. */
/* #undef _EVENT_HAVE_EVENTFD */
/* Define if your system supports event ports */
/*#define _EVENT_HAVE_EVENT_PORTS 1*/
/* Define to 1 if you have the `fcntl' function. */
#define _EVENT_HAVE_FCNTL 1
/* Define to 1 if you have the <fcntl.h> header file. */
#define _EVENT_HAVE_FCNTL_H 1
/* Define to 1 if the system has the type `fd_mask'. */
#define _EVENT_HAVE_FD_MASK 1
/* Do we have getaddrinfo()? */
#define _EVENT_HAVE_GETADDRINFO 1
/* Define to 1 if you have the `getegid' function. */
#define _EVENT_HAVE_GETEGID 1
/* Define to 1 if you have the `geteuid' function. */
#define _EVENT_HAVE_GETEUID 1
/* Define this if you have any gethostbyname_r() */
/* #undef _EVENT_HAVE_GETHOSTBYNAME_R */
/* Define this if gethostbyname_r takes 3 arguments */
/* #undef _EVENT_HAVE_GETHOSTBYNAME_R_3_ARG */
/* Define this if gethostbyname_r takes 5 arguments */
/* #undef _EVENT_HAVE_GETHOSTBYNAME_R_5_ARG */
/* Define this if gethostbyname_r takes 6 arguments */
/* #undef _EVENT_HAVE_GETHOSTBYNAME_R_6_ARG */
/* Define to 1 if you have the `getnameinfo' function. */
#define _EVENT_HAVE_GETNAMEINFO 1
/* Define to 1 if you have the `getprotobynumber' function. */
#define _EVENT_HAVE_GETPROTOBYNUMBER 1
/* Define to 1 if you have the `getservbyname' function. */
/* #undef _EVENT_HAVE_GETSERVBYNAME */
/* Define to 1 if you have the `gettimeofday' function. */
#define _EVENT_HAVE_GETTIMEOFDAY 1
/* Define to 1 if you have the `inet_aton' function. */
#define _EVENT_HAVE_INET_ATON 1
/* Define to 1 if you have the `inet_ntop' function. */
#define _EVENT_HAVE_INET_NTOP 1
/* Define to 1 if you have the `inet_pton' function. */
#define _EVENT_HAVE_INET_PTON 1
/* Define to 1 if you have the <inttypes.h> header file. */
#define _EVENT_HAVE_INTTYPES_H 1
/* Define to 1 if you have the `issetugid' function. */
#define _EVENT_HAVE_ISSETUGID 1
/* Define to 1 if you have the `kqueue' function. */
/* #undef _EVENT_HAVE_KQUEUE */
/* Define if the system has zlib */
#define _EVENT_HAVE_LIBZ 1
/* Define to 1 if you have the <memory.h> header file. */
#define _EVENT_HAVE_MEMORY_H 1
/* Define to 1 if you have the `mmap' function. */
#define _EVENT_HAVE_MMAP 1
/* Define to 1 if you have the <netdb.h> header file. */
#define _EVENT_HAVE_NETDB_H 1
/* Define to 1 if you have the <netinet/in6.h> header file. */
/* #undef _EVENT_HAVE_NETINET_IN6_H */
/* Define to 1 if you have the <netinet/in.h> header file. */
#define _EVENT_HAVE_NETINET_IN_H 1
/* Define if the system has openssl */
#define _EVENT_HAVE_OPENSSL 1
/* Define to 1 if you have the <openssl/bio.h> header file. */
#define _EVENT_HAVE_OPENSSL_BIO_H 1
/* Define to 1 if you have the `pipe' function. */
#define _EVENT_HAVE_PIPE 1
/* Define to 1 if you have the `poll' function. */
#define _EVENT_HAVE_POLL 1
/* Define to 1 if you have the <poll.h> header file. */
#define _EVENT_HAVE_POLL_H 1
/* Define to 1 if you have the `port_create' function. */
#define _EVENT_HAVE_PORT_CREATE 1
/* Define to 1 if you have the <port.h> header file. */
#define _EVENT_HAVE_PORT_H 1
/* Define if you have POSIX threads libraries and header files. */
/* #undef _EVENT_HAVE_PTHREAD */
/* Define if we have pthreads on this system */
#define _EVENT_HAVE_PTHREADS 1
/* Define to 1 if you have the `putenv' function. */
#define _EVENT_HAVE_PUTENV 1
/* Define to 1 if the system has the type `sa_family_t'. */
#define _EVENT_HAVE_SA_FAMILY_T 1
/* Define to 1 if you have the `select' function. */
#define _EVENT_HAVE_SELECT 1
/* Define to 1 if you have the `sendfile' function. */
#define _EVENT_HAVE_SENDFILE 1
/* Define to 1 if you have the `setenv' function. */
#define _EVENT_HAVE_SETENV 1
/* Define if F_SETFD is defined in <fcntl.h> */
#define _EVENT_HAVE_SETFD 1
/* Define to 1 if you have the `sigaction' function. */
#define _EVENT_HAVE_SIGACTION 1
/* Define to 1 if you have the `signal' function. */
#define _EVENT_HAVE_SIGNAL 1
/* Define to 1 if you have the `splice' function. */
/* #undef _EVENT_HAVE_SPLICE */
/* Define to 1 if you have the <stdarg.h> header file. */
#define _EVENT_HAVE_STDARG_H 1
/* Define to 1 if you have the <stddef.h> header file. */
#define _EVENT_HAVE_STDDEF_H 1
/* Define to 1 if you have the <stdint.h> header file. */
#define _EVENT_HAVE_STDINT_H 1
/* Define to 1 if you have the <stdlib.h> header file. */
#define _EVENT_HAVE_STDLIB_H 1
/* Define to 1 if you have the <strings.h> header file. */
#define _EVENT_HAVE_STRINGS_H 1
/* Define to 1 if you have the <string.h> header file. */
#define _EVENT_HAVE_STRING_H 1
/* Define to 1 if you have the `strlcpy' function. */
#define _EVENT_HAVE_STRLCPY 1
/* Define to 1 if you have the `strsep' function. */
#define _EVENT_HAVE_STRSEP 1
/* Define to 1 if you have the `strtok_r' function. */
#define _EVENT_HAVE_STRTOK_R 1
/* Define to 1 if you have the `strtoll' function. */
#define _EVENT_HAVE_STRTOLL 1
/* Define to 1 if the system has the type `struct addrinfo'. */
#define _EVENT_HAVE_STRUCT_ADDRINFO 1
/* Define to 1 if the system has the type `struct in6_addr'. */
#define _EVENT_HAVE_STRUCT_IN6_ADDR 1
/* Define to 1 if `s6_addr16' is a member of `struct in6_addr'. */
/* #undef _EVENT_HAVE_STRUCT_IN6_ADDR_S6_ADDR16 */
/* Define to 1 if `s6_addr32' is a member of `struct in6_addr'. */
/* #undef _EVENT_HAVE_STRUCT_IN6_ADDR_S6_ADDR32 */
/* Define to 1 if the system has the type `struct sockaddr_in6'. */
#define _EVENT_HAVE_STRUCT_SOCKADDR_IN6 1
/* Define to 1 if `sin6_len' is a member of `struct sockaddr_in6'. */
/* #undef _EVENT_HAVE_STRUCT_SOCKADDR_IN6_SIN6_LEN */
/* Define to 1 if `sin_len' is a member of `struct sockaddr_in'. */
/* #undef _EVENT_HAVE_STRUCT_SOCKADDR_IN_SIN_LEN */
/* Define to 1 if the system has the type `struct sockaddr_storage'. */
#define _EVENT_HAVE_STRUCT_SOCKADDR_STORAGE 1
/* Define to 1 if `ss_family' is a member of `struct sockaddr_storage'. */
#define _EVENT_HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY 1
/* Define to 1 if `__ss_family' is a member of `struct sockaddr_storage'. */
/* #undef _EVENT_HAVE_STRUCT_SOCKADDR_STORAGE___SS_FAMILY */
/* Define to 1 if you have the `sysctl' function. */
/* #undef _EVENT_HAVE_SYSCTL */
/* Define to 1 if you have the <sys/devpoll.h> header file. */
#define _EVENT_HAVE_SYS_DEVPOLL_H 1
/* Define to 1 if you have the <sys/epoll.h> header file. */
/* #undef _EVENT_HAVE_SYS_EPOLL_H */
/* Define to 1 if you have the <sys/eventfd.h> header file. */
/* #undef _EVENT_HAVE_SYS_EVENTFD_H */
/* Define to 1 if you have the <sys/event.h> header file. */
/* #undef _EVENT_HAVE_SYS_EVENT_H */
/* Define to 1 if you have the <sys/ioctl.h> header file. */
#define _EVENT_HAVE_SYS_IOCTL_H 1
/* Define to 1 if you have the <sys/mman.h> header file. */
#define _EVENT_HAVE_SYS_MMAN_H 1
/* Define to 1 if you have the <sys/param.h> header file. */
#define _EVENT_HAVE_SYS_PARAM_H 1
/* Define to 1 if you have the <sys/queue.h> header file. */
#define _EVENT_HAVE_SYS_QUEUE_H 1
/* Define to 1 if you have the <sys/select.h> header file. */
#define _EVENT_HAVE_SYS_SELECT_H 1
/* Define to 1 if you have the <sys/sendfile.h> header file. */
#define _EVENT_HAVE_SYS_SENDFILE_H 1
/* Define to 1 if you have the <sys/socket.h> header file. */
#define _EVENT_HAVE_SYS_SOCKET_H 1
/* Define to 1 if you have the <sys/stat.h> header file. */
#define _EVENT_HAVE_SYS_STAT_H 1
/* Define to 1 if you have the <sys/sysctl.h> header file. */
#undef _EVENT_HAVE_SYS_SYSCTL_H
/* Define to 1 if you have the <sys/time.h> header file. */
#define _EVENT_HAVE_SYS_TIME_H 1
/* Define to 1 if you have the <sys/types.h> header file. */
#define _EVENT_HAVE_SYS_TYPES_H 1
/* Define to 1 if you have the <sys/uio.h> header file. */
#define _EVENT_HAVE_SYS_UIO_H 1
/* Define to 1 if you have the <sys/wait.h> header file. */
#define _EVENT_HAVE_SYS_WAIT_H 1
/* Define if TAILQ_FOREACH is defined in <sys/queue.h> */
#define _EVENT_HAVE_TAILQFOREACH 1
/* Define if timeradd is defined in <sys/time.h> */
#define _EVENT_HAVE_TIMERADD 1
/* Define if timerclear is defined in <sys/time.h> */
#define _EVENT_HAVE_TIMERCLEAR 1
/* Define if timercmp is defined in <sys/time.h> */
#define _EVENT_HAVE_TIMERCMP 1
/* Define if timerisset is defined in <sys/time.h> */
#define _EVENT_HAVE_TIMERISSET 1
/* Define to 1 if the system has the type `uint16_t'. */
#define _EVENT_HAVE_UINT16_T 1
/* Define to 1 if the system has the type `uint32_t'. */
#define _EVENT_HAVE_UINT32_T 1
/* Define to 1 if the system has the type `uint64_t'. */
#define _EVENT_HAVE_UINT64_T 1
/* Define to 1 if the system has the type `uint8_t'. */
#define _EVENT_HAVE_UINT8_T 1
/* Define to 1 if the system has the type `uintptr_t'. */
#define _EVENT_HAVE_UINTPTR_T 1
/* Define to 1 if you have the `umask' function. */
#define _EVENT_HAVE_UMASK 1
/* Define to 1 if you have the <unistd.h> header file. */
#define _EVENT_HAVE_UNISTD_H 1
/* Define to 1 if you have the `unsetenv' function. */
#define _EVENT_HAVE_UNSETENV 1
/* Define to 1 if you have the `vasprintf' function. */
#define _EVENT_HAVE_VASPRINTF 1
/* Define if kqueue works correctly with pipes */
/* #undef _EVENT_HAVE_WORKING_KQUEUE */
/* Define to 1 if you have the <zlib.h> header file. */
#define _EVENT_HAVE_ZLIB_H 1
/* Define to the sub-directory in which libtool stores uninstalled libraries.
*/
#define _EVENT_LT_OBJDIR ".libs/"
/* Define to 1 if your C compiler doesn't accept -c and -o together. */
/* #undef _EVENT_NO_MINUS_C_MINUS_O */
/* Numeric representation of the version */
#define _EVENT_NUMERIC_VERSION 0x02001600
/* Name of package */
#define _EVENT_PACKAGE "libevent"
/* Define to the address where bug reports for this package should be sent. */
#define _EVENT_PACKAGE_BUGREPORT ""
/* Define to the full name of this package. */
#define _EVENT_PACKAGE_NAME ""
/* Define to the full name and version of this package. */
#define _EVENT_PACKAGE_STRING ""
/* Define to the one symbol short name of this package. */
#define _EVENT_PACKAGE_TARNAME ""
/* Define to the home page for this package. */
#define _EVENT_PACKAGE_URL ""
/* Define to the version of this package. */
#define _EVENT_PACKAGE_VERSION ""
/* Define to necessary symbol if this constant uses a non-standard name on
your system. */
/* #undef _EVENT_PTHREAD_CREATE_JOINABLE */
/* ------------------------------------------------------------------------ */
/* MOZILLA NOTE: the following constants are hand-modified to be suitable */
/* for both 32-bit and 64-bit platforms. See README.mozilla for details. */
/* ------------------------------------------------------------------------ */
/* The size of `int', as computed by sizeof. */
#define _EVENT_SIZEOF_INT 4
/* The size of `long', as computed by sizeof. */
#ifdef __LP64__
#define _EVENT_SIZEOF_LONG 8
#else
#define _EVENT_SIZEOF_LONG 4
#endif
/* The size of `long long', as computed by sizeof. */
#define _EVENT_SIZEOF_LONG_LONG 8
/* The size of `pthread_t', as computed by sizeof. */
#ifdef __LP64__
#define _EVENT_SIZEOF_PTHREAD_T 8
#else
#define _EVENT_SIZEOF_PTHREAD_T 4
#endif
/* The size of `short', as computed by sizeof. */
#define _EVENT_SIZEOF_SHORT 2
/* The size of `size_t', as computed by sizeof. */
#ifdef __LP64__
#define _EVENT_SIZEOF_SIZE_T 8
#else
#define _EVENT_SIZEOF_SIZE_T 4
#endif
/* The size of `void *', as computed by sizeof. */
#ifdef __LP64__
#define _EVENT_SIZEOF_VOID_P 8
#else
#define _EVENT_SIZEOF_VOID_P 4
#endif
/* ------------------------------------------------------------------------ */
/* END MOZILLA NOTE */
/* ------------------------------------------------------------------------ */
/* Define to 1 if you have the ANSI C header files. */
#define _EVENT_STDC_HEADERS 1
/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
#define _EVENT_TIME_WITH_SYS_TIME 1
/* Version number of package */
#define _EVENT_VERSION "2.0.22-stable"
/* Define to appropriate substitue if compiler doesnt have __func__ */
/* #undef _EVENT___func__ */
/* Define to empty if `const' does not conform to ANSI C. */
/* #undef _EVENT_const */
/* Define to `__inline__' or `__inline' if that's what the C compiler
calls it, or to nothing if 'inline' is not supported under any name. */
#ifndef _EVENT___cplusplus
/* #undef _EVENT_inline */
#endif
/* Define to `int' if <sys/types.h> does not define. */
/* #undef _EVENT_pid_t */
/* Define to `unsigned int' if <sys/types.h> does not define. */
/* #undef _EVENT_size_t */
/* Define to unsigned int if you dont have it */
/* #undef _EVENT_socklen_t */
/* Define to `int' if <sys/types.h> does not define. */
/* #undef _EVENT_ssize_t */
#endif /* event2/event-config.h */

4
ipc/chromium/src/third_party/libeventcommon.mozbuild vendored

@ -9,6 +9,7 @@ os_posix = 0
os_macosx = 0
os_bsd = 0
os_linux = 0
os_solaris = 0
if CONFIG['OS_ARCH'] == 'WINNT':
os_win = 1
@ -21,6 +22,9 @@ else:
'NetBSD', 'OpenBSD']:
os_bsd = 1
libevent_include_suffix = 'bsd'
elif CONFIG['OS_ARCH'] in ['SunOS']:
os_solaris = 1
libevent_include_suffix = 'solaris'
else:
os_linux = 1
if CONFIG['OS_TARGET'] == 'Android':

5
ipc/chromium/src/third_party/moz.build vendored

@ -54,6 +54,11 @@ if os_linux:
'libevent/epoll_sub.c',
]
if os_solaris:
SOURCES += [
'libevent/devpoll.c',
]
# We allow warnings for third-party code that can be updated from upstream.
ALLOW_COMPILER_WARNINGS = True

4
ipc/glue/BrowserProcessSubThread.cpp

@ -23,7 +23,7 @@ static const char* kBrowserThreadNames[BrowserProcessSubThread::ID_COUNT] = {
// "Chrome_FileThread", // FILE
// "Chrome_DBThread", // DB
// "Chrome_HistoryThread", // HISTORY
#if defined(OS_LINUX)
#if defined(OS_LINUX) || defined(OS_SOLARIS)
"Gecko_Background_X11Thread", // BACKGROUND_X11
#endif
};
@ -34,7 +34,7 @@ BrowserProcessSubThread* BrowserProcessSubThread::sBrowserThreads[ID_COUNT] = {
// nullptr, // FILE
// nullptr, // DB
// nullptr, // HISTORY
#if defined(OS_LINUX)
#if defined(OS_LINUX) || defined(OS_SOLARIS)
nullptr, // BACKGROUND_X11
#endif
};

2
ipc/glue/BrowserProcessSubThread.h

@ -25,7 +25,7 @@ public:
//FILE,
//DB,
//HISTORY,
#if defined(OS_LINUX)
#if defined(OS_LINUX) || defined(OS_SOLARIS)
// This thread has a second connection to the X server and is used
// to process UI requests when routing the request to the UI
// thread would risk deadlock.

4
ipc/glue/GeckoChildProcessHost.cpp

@ -599,7 +599,7 @@ GeckoChildProcessHost::PerformAsyncLaunchInternal(std::vector<std::string>& aExt
// and passing wstrings from one config to the other is unsafe. So
// we split the logic here.
#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD) || defined(OS_SOLARIS)
base::environment_map newEnvVars;
ChildPrivileges privs = mPrivileges;
if (privs == base::PRIVILEGES_DEFAULT) {
@ -744,7 +744,7 @@ GeckoChildProcessHost::PerformAsyncLaunchInternal(std::vector<std::string>& aExt
childArgv.push_back(childProcessType);
base::LaunchApp(childArgv, mFileMap,
#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD) || defined(OS_SOLARIS)
newEnvVars, privs,
#endif
false, &process, arch);

18
ipc/glue/MessageLink.cpp

@ -16,6 +16,9 @@
#include "nsDebug.h"
#include "nsISupportsImpl.h"
#include "nsXULAppAPI.h"
#if defined(__sun__) || defined(__sun)
#include <unistd.h>
#endif
using namespace mozilla;
using namespace std;
@ -267,9 +270,19 @@ ProcessLink::OnChannelOpened()
MonitorAutoLock lock(*mChan->mMonitor);
mExistingListener = mTransport->set_listener(this);
// The queue we want here is defined in the namespace 'std' on Solaris, which
// also has another function called queue in a different namespace. Need to
// determine whether queue is defined in 'std' on other supported platforms
// before possibly removing ifdefs.
#ifdef DEBUG
if (mExistingListener) {
#if defined(XP_SOLARIS)
std::queue<Message> pending;
#else
queue<Message> pending;
#endif
mExistingListener->GetQueuedMessages(pending);
MOZ_ASSERT(pending.empty());
}
@ -285,8 +298,11 @@ void
ProcessLink::OnTakeConnectedChannel()
{
AssertIOThread();
#if defined(XP_SOLARIS)
std::queue<Message> pending;
#else
queue<Message> pending;
#endif
{
MonitorAutoLock lock(*mChan->mMonitor);

3
python/mozbuild/mozbuild/configure/constants.py

@ -23,6 +23,7 @@ OS = EnumString.subclass(
'iOS',
'NetBSD',
'OpenBSD',
'SunOS',
'OSX',
'WINNT',
)
@ -35,6 +36,7 @@ Kernel = EnumString.subclass(
'Linux',
'NetBSD',
'OpenBSD',
'SunOS',
'WINNT',
)
@ -97,6 +99,7 @@ kernel_preprocessor_checks = {
'Linux': '__linux__',
'NetBSD': '__NetBSD__',
'OpenBSD': '__OpenBSD__',
'SunOS': '__sun__',
'WINNT': '_WIN32 || __CYGWIN__',
}

4
toolkit/components/terminator/nsTerminator.cpp

@ -385,7 +385,11 @@ nsTerminator::StartWatchdog()
}
UniquePtr<Options> options(new Options());
#if !defined(XP_SOLARIS)
const PRIntervalTime ticksDuration = PR_MillisecondsToInterval(1000);
#else
const PRIntervalTime ticksDuration = 1000;
#endif
options->crashAfterTicks = crashAfterMS / ticksDuration;
DebugOnly<PRThread*> watchdogThread = CreateSystemThread(RunWatchdog,

9
widget/GfxInfoX11.cpp

@ -187,6 +187,15 @@ GfxInfo::GetData()
note.AppendLiteral(" -- texture_from_pixmap");
note.Append('\n');
// illumos/Solaris 10 libc lacks a strcasestr function, but NSPR has
// one. A lot of programs just implement one on the spot or use strstr
// and a buffer as some kind of workaround. They've been implementing
// missing functions lately, though, so this may not be needed much longer.
#if defined(XP_SOLARIS)
#define strcasestr PL_strcasestr
#endif
// determine the major OpenGL version. That's the first integer in the version string.
mGLMajorVersion = strtol(mVersion.get(), 0, 10);

3
xpcom/ds/nsMathUtils.h

@ -11,7 +11,8 @@
#include <cmath>
#include <float.h>
#ifdef XP_SOLARIS
#if defined(XP_SOLARIS)
#include <math.h>
#include <ieeefp.h>
#endif

2
xpcom/glue/FileUtils.cpp

@ -532,7 +532,7 @@ mozilla::ReadAheadFile(mozilla::pathstr_t aFilePath, const size_t aOffset,
if (!aOutFd) {
CloseHandle(fd);
}
#elif defined(LINUX) && !defined(ANDROID) || defined(XP_MACOSX)
#elif defined(LINUX) && !defined(ANDROID) || defined(XP_MACOSX) || defined(XP_SOLARIS)
if (!aFilePath) {
if (aOutFd) {
*aOutFd = -1;

Loading…
Cancel
Save