XPT_Do16(XPTCursor *cursor, uint16_t *u16p) { union { uint8_t b8[2]; uint16_t b16; } u; if (!CHECK_COUNT(cursor, 2)) return PR_FALSE; if (ENCODING(cursor)) { u.b16 = XPT_SWAB16(*u16p); CURS_POINT(cursor) = u.b8[0]; cursor->offset++; CURS_POINT(cursor) = u.b8[1]; } else { u.b8[0] = CURS_POINT(cursor); cursor->offset++; u.b8[1] = CURS_POINT(cursor); *u16p = XPT_SWAB16(u.b16); } 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_Do16(NotNull<XPTCursor*> cursor, uint16_t *u16p) { union { uint8_t b8[2]; uint16_t b16; } u; if (!CHECK_COUNT(cursor, 2)) return false; u.b8[0] = CURS_POINT(cursor); cursor->offset++; u.b8[1] = CURS_POINT(cursor); *u16p = XPT_SWAB16(u.b16); cursor->offset++; return true; }