Get Python XPCOM bindings building with 1.4. Not part of the build.

This commit is contained in:
mhammond%skippinet.com.au 2003-04-01 13:22:16 +00:00
Родитель 64af9c759b
Коммит e1b99b5d92
4 изменённых файлов: 16 добавлений и 42 удалений

Просмотреть файл

@ -29,7 +29,7 @@
#include "PyXPCOM_std.h" #include "PyXPCOM_std.h"
#include "nsReadableUtils.h" #include "nsReadableUtils.h"
#include <nsFileStream.h> #include <nsIConsoleService.h>
static char *PyTraceback_AsString(PyObject *exc_tb); static char *PyTraceback_AsString(PyObject *exc_tb);
@ -38,8 +38,10 @@ static char *PyTraceback_AsString(PyObject *exc_tb);
void LogMessage(const char *prefix, const char *pszMessageText) void LogMessage(const char *prefix, const char *pszMessageText)
{ {
nsOutputStream console; nsCOMPtr<nsIConsoleService> consoleService = do_GetService(NS_CONSOLESERVICE_CONTRACTID);
console << prefix << pszMessageText; NS_ABORT_IF_FALSE(consoleService, "Where is the console service?");
if (consoleService)
consoleService->LogStringMessage(NS_ConvertASCIItoUCS2(pszMessageText).get());
} }
void LogMessage(const char *prefix, nsACString &text) void LogMessage(const char *prefix, nsACString &text)

Просмотреть файл

@ -1352,6 +1352,9 @@ PRBool PyXPCOM_InterfaceVariantHelper::FillInVariant(const PythonTypeDescriptor
PRUint32 element_size = GetArrayElementSize(array_type); PRUint32 element_size = GetArrayElementSize(array_type);
int seq_length = PySequence_Length(val); int seq_length = PySequence_Length(val);
cb_this_buffer_pointer = seq_length * element_size; cb_this_buffer_pointer = seq_length * element_size;
if (cb_this_buffer_pointer==0)
// prevent assertions allocing zero bytes. Can't use NULL.
cb_this_buffer_pointer = 1;
MAKE_VALUE_BUFFER(cb_this_buffer_pointer); MAKE_VALUE_BUFFER(cb_this_buffer_pointer);
memset(this_buffer_pointer, 0, cb_this_buffer_pointer); memset(this_buffer_pointer, 0, cb_this_buffer_pointer);
rc = FillSingleArray(this_buffer_pointer, val, seq_length, element_size, array_type&XPT_TDP_TAGMASK); rc = FillSingleArray(this_buffer_pointer, val, seq_length, element_size, array_type&XPT_TDP_TAGMASK);

Просмотреть файл

@ -31,7 +31,9 @@
#include <prthread.h> #include <prthread.h>
#ifdef XP_WIN #ifdef XP_WIN
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN
#endif
#include "windows.h" #include "windows.h"
#endif #endif

Просмотреть файл

@ -28,15 +28,17 @@
// (c) 2000, ActiveState corp. // (c) 2000, ActiveState corp.
#include "PyXPCOM_std.h" #include "PyXPCOM_std.h"
#include "nsIFileSpec.h"
#include "nsSpecialSystemDirectory.h"
#include "nsIThread.h" #include "nsIThread.h"
#include "nsXPCOM.h" #include "nsXPCOM.h"
#include "nsISupportsPrimitives.h" #include "nsISupportsPrimitives.h"
#include "nsIModule.h" #include "nsIModule.h"
#include "nsIFile.h"
#include "nsILocalFile.h"
#ifdef XP_WIN #ifdef XP_WIN
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN
#endif
#include "windows.h" #include "windows.h"
#endif #endif
@ -125,34 +127,6 @@ done:
// "boot-strap" methods - interfaces we need to get the base // "boot-strap" methods - interfaces we need to get the base
// interface support! // interface support!
static PyObject *
PyXPCOMMethod_NS_LocateSpecialSystemDirectory(PyObject *self, PyObject *args)
{
int typ;
if (!PyArg_ParseTuple(args, "i", &typ))
return NULL;
nsSpecialSystemDirectory systemDir((nsSpecialSystemDirectory::SystemDirectories)typ);
return PyString_FromString(systemDir.GetNativePathCString());
}
static PyObject *
PyXPCOMMethod_NS_NewFileSpec(PyObject *self, PyObject *args)
{
char *szspec = NULL;
if (!PyArg_ParseTuple(args, "|s", &szspec))
return NULL;
nsIFileSpec *spec = NULL;
nsresult nr;
Py_BEGIN_ALLOW_THREADS;
nr = NS_NewFileSpec(&spec);
if (NS_SUCCEEDED(nr) && spec && szspec)
nr = spec->SetNativePath(szspec);
Py_END_ALLOW_THREADS;
if (NS_FAILED(nr) || spec==nsnull)
return PyXPCOM_BuildPyException(nr);
return Py_nsISupports::PyObjectFromInterface(spec, NS_GET_IID(nsIFileSpec), PR_TRUE);
}
static PyObject * static PyObject *
PyXPCOMMethod_NS_GetGlobalComponentManager(PyObject *self, PyObject *args) PyXPCOMMethod_NS_GetGlobalComponentManager(PyObject *self, PyObject *args)
{ {
@ -434,9 +408,7 @@ extern PyObject *PyXPCOMMethod_IID(PyObject *self, PyObject *args);
static struct PyMethodDef xpcom_methods[]= static struct PyMethodDef xpcom_methods[]=
{ {
{"NS_LocateSpecialSystemDirectory", PyXPCOMMethod_NS_LocateSpecialSystemDirectory, 1},
{"NS_GetGlobalComponentManager", PyXPCOMMethod_NS_GetGlobalComponentManager, 1}, {"NS_GetGlobalComponentManager", PyXPCOMMethod_NS_GetGlobalComponentManager, 1},
{"NS_NewFileSpec", PyXPCOMMethod_NS_NewFileSpec, 1},
{"XPTI_GetInterfaceInfoManager", PyXPCOMMethod_XPTI_GetInterfaceInfoManager, 1}, {"XPTI_GetInterfaceInfoManager", PyXPCOMMethod_XPTI_GetInterfaceInfoManager, 1},
{"XPTC_InvokeByIndex", PyXPCOMMethod_XPTC_InvokeByIndex, 1}, {"XPTC_InvokeByIndex", PyXPCOMMethod_XPTC_InvokeByIndex, 1},
{"GetGlobalServiceManager", PyXPCOMMethod_GetGlobalServiceManager, 1}, {"GetGlobalServiceManager", PyXPCOMMethod_GetGlobalServiceManager, 1},
@ -515,11 +487,6 @@ PRBool PyXPCOM_Globals_Ensure()
PyErr_SetString(PyExc_RuntimeError, "The XPCOM subsystem could not be initialized"); PyErr_SetString(PyExc_RuntimeError, "The XPCOM subsystem could not be initialized");
return PR_FALSE; return PR_FALSE;
} }
// Also set the "special directory"
#ifdef XP_WIN
nsFileSpec spec(landmark);
nsSpecialSystemDirectory::Set(nsSpecialSystemDirectory::OS_CurrentProcessDirectory, &spec);
#endif // XP_WIN
} }
// Even if xpcom was already init, we want to flag it as init! // Even if xpcom was already init, we want to flag it as init!
bHaveInitXPCOM = PR_TRUE; bHaveInitXPCOM = PR_TRUE;