XPT_Do32(XPTCursor *cursor, uint32_t *u32p) { union { uint8_t b8[4]; uint32_t b32; } u; if (!CHECK_COUNT(cursor, 4)) return PR_FALSE; if (ENCODING(cursor)) { u.b32 = XPT_SWAB32(*u32p); CURS_POINT(cursor) = u.b8[0]; cursor->offset++; CURS_POINT(cursor) = u.b8[1]; cursor->offset++; CURS_POINT(cursor) = u.b8[2]; cursor->offset++; CURS_POINT(cursor) = u.b8[3]; } else { u.b8[0] = CURS_POINT(cursor); cursor->offset++; u.b8[1] = CURS_POINT(cursor); cursor->offset++; u.b8[2] = CURS_POINT(cursor); cursor->offset++; u.b8[3] = CURS_POINT(cursor); *u32p = XPT_SWAB32(u.b32); } cursor->offset++; return PR_TRUE; }
// @pymethod <o Py_nsIID>|xpcom|IID|Creates a new IID object PYXPCOM_EXPORT PyObject *PyXPCOMMethod_IID(PyObject *self, PyObject *args) { PyObject *obIID; PyObject *obBuf; if ( PyArg_ParseTuple(args, "O", &obBuf)) { if (PyBuffer_Check(obBuf)) { PyBufferProcs *pb = NULL; pb = obBuf->ob_type->tp_as_buffer; void *buf = NULL; int size = (*pb->bf_getreadbuffer)(obBuf, 0, &buf); if (size != sizeof(nsIID) || buf==NULL) { #ifdef VBOX PyErr_Format(PyExc_ValueError, "A buffer object to be converted to an IID must be exactly %d bytes long", (int)sizeof(nsIID)); #else PyErr_Format(PyExc_ValueError, "A buffer object to be converted to an IID must be exactly %d bytes long", sizeof(nsIID)); #endif return NULL; } nsIID iid; unsigned char *ptr = (unsigned char *)buf; iid.m0 = XPT_SWAB32(*((PRUint32 *)ptr)); ptr = ((unsigned char *)buf) + offsetof(nsIID, m1); iid.m1 = XPT_SWAB16(*((PRUint16 *)ptr)); ptr = ((unsigned char *)buf) + offsetof(nsIID, m2); iid.m2 = XPT_SWAB16(*((PRUint16 *)ptr)); ptr = ((unsigned char *)buf) + offsetof(nsIID, m3); for (int i=0;i<8;i++) { iid.m3[i] = *((PRUint8 *)ptr); ptr += sizeof(PRUint8); } return new Py_nsIID(iid); } } PyErr_Clear(); // @pyparm string/Unicode|iidString||A string representation of an IID, or a ContractID. if ( !PyArg_ParseTuple(args, "O", &obIID) ) return NULL; nsIID iid; if (!Py_nsIID::IIDFromPyObject(obIID, &iid)) return NULL; return new Py_nsIID(iid); }
XPT_Do32(NotNull<XPTCursor*> cursor, uint32_t *u32p) { union { uint8_t b8[4]; uint32_t b32; } u; if (!CHECK_COUNT(cursor, 4)) return false; u.b8[0] = CURS_POINT(cursor); cursor->offset++; u.b8[1] = CURS_POINT(cursor); cursor->offset++; u.b8[2] = CURS_POINT(cursor); cursor->offset++; u.b8[3] = CURS_POINT(cursor); *u32p = XPT_SWAB32(u.b32); cursor->offset++; return true; }