mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-09 11:25:00 +00:00
Bug 561464 - Add support for XPCOM on Android, patch mostly by vlad, r=bsmedberg
This commit is contained in:
parent
febc60cc0f
commit
a6b9079633
@ -50,6 +50,10 @@
|
||||
#include "prenv.h"
|
||||
#include "pratom.h"
|
||||
|
||||
#ifdef ANDROID
|
||||
#include <android/log.h>
|
||||
#endif
|
||||
|
||||
#if defined(XP_BEOS)
|
||||
/* For DEBUGGER macros */
|
||||
#include <Debug.h>
|
||||
@ -309,6 +313,10 @@ NS_DebugBreak(PRUint32 aSeverity, const char *aStr, const char *aExpr,
|
||||
fprintf(stderr, "\07");
|
||||
#endif
|
||||
|
||||
#ifdef ANDROID
|
||||
__android_log_print(ANDROID_LOG_INFO, "Gecko", "%s", buf.buffer);
|
||||
#endif
|
||||
|
||||
// Write the message to stderr
|
||||
fprintf(stderr, "%s\n", buf.buffer);
|
||||
fflush(stderr);
|
||||
|
@ -76,7 +76,7 @@ nsUUIDGenerator::Init()
|
||||
// We're a service, so we're guaranteed that Init() is not going
|
||||
// to be reentered while we're inside Init().
|
||||
|
||||
#if !defined(XP_WIN) && !defined(XP_MACOSX)
|
||||
#if !defined(XP_WIN) && !defined(XP_MACOSX) && !defined(ANDROID)
|
||||
/* initialize random number generator using NSPR random noise */
|
||||
unsigned int seed;
|
||||
|
||||
@ -171,11 +171,19 @@ nsUUIDGenerator::GenerateUUIDInPlace(nsID* id)
|
||||
* back to it; instead, we use the value returned when we called
|
||||
* initstate, since older glibc's have broken setstate() return values
|
||||
*/
|
||||
#ifndef ANDROID
|
||||
setstate(mState);
|
||||
#endif
|
||||
|
||||
PRSize bytesLeft = sizeof(nsID);
|
||||
while (bytesLeft > 0) {
|
||||
#ifdef ANDROID
|
||||
long rval = arc4random();
|
||||
const int mRBytes = 4;
|
||||
#else
|
||||
long rval = random();
|
||||
#endif
|
||||
|
||||
|
||||
PRUint8 *src = (PRUint8*)&rval;
|
||||
// We want to grab the mRBytes least significant bytes of rval, since
|
||||
@ -199,8 +207,10 @@ nsUUIDGenerator::GenerateUUIDInPlace(nsID* id)
|
||||
id->m3[0] &= 0x3f;
|
||||
id->m3[0] |= 0x80;
|
||||
|
||||
#ifndef ANDROID
|
||||
/* Restore the previous RNG state */
|
||||
setstate(mSavedState);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
return NS_OK;
|
||||
|
@ -59,7 +59,7 @@ protected:
|
||||
|
||||
PRLock* mLock;
|
||||
#if defined(WINCE)
|
||||
#elif !defined(XP_WIN) && !defined(XP_MACOSX)
|
||||
#elif !defined(XP_WIN) && !defined(XP_MACOSX) && !defined(ANDROID)
|
||||
char mState[128];
|
||||
char *mSavedState;
|
||||
PRUint8 mRBytes;
|
||||
|
@ -536,7 +536,7 @@ NS_InitXPCOM3(nsIServiceManager* *result,
|
||||
rv = nsTimerImpl::Startup();
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
#ifndef WINCE
|
||||
#if !defined(WINCE) && !defined(ANDROID)
|
||||
NS_TIME_FUNCTION_MARK("Next: setlocale");
|
||||
|
||||
// If the locale hasn't already been setup by our embedder,
|
||||
|
@ -49,6 +49,10 @@
|
||||
#include <io.h>
|
||||
#endif
|
||||
|
||||
#ifdef ANDROID
|
||||
#include <android/log.h>
|
||||
#endif
|
||||
|
||||
const char*
|
||||
NS_strspnp(const char *delims, const char *str)
|
||||
{
|
||||
@ -279,6 +283,15 @@ printf_stderr(const char *fmt, ...)
|
||||
|
||||
fclose(fp);
|
||||
}
|
||||
#elif defined(ANDROID)
|
||||
void
|
||||
printf_stderr(const char *fmt, ...)
|
||||
{
|
||||
va_list args;
|
||||
va_start(args, fmt);
|
||||
__android_log_vprint(ANDROID_LOG_INFO, "Gecko", fmt, args);
|
||||
va_end(args);
|
||||
}
|
||||
#else
|
||||
void
|
||||
printf_stderr(const char *fmt, ...)
|
||||
|
@ -291,6 +291,9 @@ GetUnixHomeDir(nsILocalFile** aFile)
|
||||
PR_TRUE,
|
||||
aFile);
|
||||
}
|
||||
#elif defined(ANDROID)
|
||||
// XXX no home dir on android; maybe we should return the sdcard if present?
|
||||
return NS_ERROR_FAILURE;
|
||||
#else
|
||||
return NS_NewNativeLocalFile(nsDependentCString(PR_GetEnv("HOME")),
|
||||
PR_TRUE, aFile);
|
||||
|
@ -1105,7 +1105,18 @@ nsLocalFile::SetFileSize(PRInt64 aFileSize)
|
||||
{
|
||||
CHECK_mPath();
|
||||
|
||||
#ifdef HAVE_TRUNCATE64
|
||||
#if defined(ANDROID)
|
||||
/* no truncate on bionic */
|
||||
int fd = open(mPath.get(), O_WRONLY);
|
||||
if (fd == -1)
|
||||
return NSRESULT_FOR_ERRNO();
|
||||
|
||||
int ret = ftruncate(fd, (off_t)aFileSize);
|
||||
close(fd);
|
||||
|
||||
if (ret == -1)
|
||||
return NSRESULT_FOR_ERRNO();
|
||||
#elif defined(HAVE_TRUNCATE64)
|
||||
if (truncate64(mPath.get(), (off64_t)aFileSize) == -1)
|
||||
return NSRESULT_FOR_ERRNO();
|
||||
#else
|
||||
|
@ -43,9 +43,9 @@
|
||||
#include "xpcom-private.h"
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// XP_MACOSX or XP_BEOS
|
||||
// XP_MACOSX or XP_BEOS or ANDROID
|
||||
//-----------------------------------------------------------------------------
|
||||
#if defined(XP_BEOS) || defined(XP_MACOSX)
|
||||
#if defined(XP_BEOS) || defined(XP_MACOSX) || defined(ANDROID)
|
||||
|
||||
#include "nsAString.h"
|
||||
#include "nsReadableUtils.h"
|
||||
|
@ -70,12 +70,12 @@ NS_COM nsresult NS_CopyUnicodeToNative(const nsAString &input, nsACString &outp
|
||||
* a real function. On Mac OS X and BeOS, it's always UTF-8 while on Windows
|
||||
* and other platforms (e.g. OS2), it's never UTF-8.
|
||||
*/
|
||||
#if defined(XP_UNIX) && !defined(XP_MACOSX)
|
||||
#if defined(XP_UNIX) && !defined(XP_MACOSX) && !defined(ANDROID)
|
||||
NS_COM PRBool NS_IsNativeUTF8();
|
||||
#else
|
||||
inline PRBool NS_IsNativeUTF8()
|
||||
{
|
||||
#if defined(XP_MACOSX) || defined(XP_BEOS)
|
||||
#if defined(XP_MACOSX) || defined(XP_BEOS) || defined(ANDROID)
|
||||
return PR_TRUE;
|
||||
#else
|
||||
return PR_FALSE;
|
||||
|
@ -40,7 +40,7 @@
|
||||
|
||||
#include "xptcprivate.h"
|
||||
|
||||
#if !defined(LINUX) || !defined(__arm__)
|
||||
#if !defined(__arm__) && !(defined(LINUX) || defined(ANDROID))
|
||||
#error "This code is for Linux ARM only. Check that it works on your system, too.\nBeware that this code is highly compiler dependent."
|
||||
#endif
|
||||
|
||||
|
@ -41,7 +41,7 @@
|
||||
#include "xptcprivate.h"
|
||||
#include "xptiprivate.h"
|
||||
|
||||
#if !defined(LINUX) || !defined(__arm__)
|
||||
#if !defined(__arm__) && !(defined(LINUX) || defined(ANDROID))
|
||||
#error "This code is for Linux ARM only. Please check if it works for you, too.\nDepends strongly on gcc behaviour."
|
||||
#endif
|
||||
|
||||
|
@ -44,8 +44,10 @@ include $(DEPTH)/config/autoconf.mk
|
||||
|
||||
MODULE = xpcom
|
||||
|
||||
ifneq (,$(filter-out WINCE SYMBIAN,$(OS_ARCH)))
|
||||
# Sadly, the code here is too smart for the WinCE/Symbian compiler's brain
|
||||
# there's no reason to build a target xpidl, why do we do this at all?
|
||||
##ifneq (,$(filter-out WINCE SYMBIAN,$(OS_ARCH)))
|
||||
### Sadly, the code here is too smart for the WinCE/Symbian compiler's brain
|
||||
ifndef CROSS_COMPILE
|
||||
PROGRAM = xpidl$(BIN_SUFFIX)
|
||||
SDK_BINARY = $(PROGRAM)
|
||||
endif
|
||||
|
Loading…
Reference in New Issue
Block a user