Patch #2125: Add GetInteger and GetString methods for
msilib.Record objects.
This commit is contained in:
parent
137d824148
commit
ffe62ed46d
|
@ -264,6 +264,18 @@ Record Objects
|
||||||
:cfunc:`MsiRecordGetFieldCount`.
|
:cfunc:`MsiRecordGetFieldCount`.
|
||||||
|
|
||||||
|
|
||||||
|
.. method:: Record.GetInteger(field)
|
||||||
|
|
||||||
|
Return the value of *field* as an integer where possible. *field* must
|
||||||
|
be an integer.
|
||||||
|
|
||||||
|
|
||||||
|
.. method:: Record.GetString(field)
|
||||||
|
|
||||||
|
Return the value of *field* as a string where possible. *field* must
|
||||||
|
be an integer.
|
||||||
|
|
||||||
|
|
||||||
.. method:: Record.SetString(field, value)
|
.. method:: Record.SetString(field, value)
|
||||||
|
|
||||||
Set *field* to *value* through :cfunc:`MsiRecordSetString`. *field* must be an
|
Set *field* to *value* through :cfunc:`MsiRecordSetString`. *field* must be an
|
||||||
|
@ -543,3 +555,4 @@ definitions. Currently, these definitions are based on MSI version 2.0.
|
||||||
This module contains definitions for the UIText and ActionText tables, for the
|
This module contains definitions for the UIText and ActionText tables, for the
|
||||||
standard installer actions.
|
standard installer actions.
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -72,6 +72,9 @@ Extension Modules
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Patch #2125: Add GetInteger and GetString methods for
|
||||||
|
msilib.Record objects.
|
||||||
|
|
||||||
- Issue #2782: The datetime module's strftime methods now accept
|
- Issue #2782: The datetime module's strftime methods now accept
|
||||||
unicode format strings just as time.strftime always has.
|
unicode format strings just as time.strftime always has.
|
||||||
|
|
||||||
|
|
47
PC/_msi.c
47
PC/_msi.c
|
@ -338,6 +338,49 @@ record_getfieldcount(msiobj* record, PyObject* args)
|
||||||
return PyInt_FromLong(MsiRecordGetFieldCount(record->h));
|
return PyInt_FromLong(MsiRecordGetFieldCount(record->h));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static PyObject*
|
||||||
|
record_getinteger(msiobj* record, PyObject* args)
|
||||||
|
{
|
||||||
|
unsigned int field;
|
||||||
|
int status;
|
||||||
|
|
||||||
|
if (!PyArg_ParseTuple(args, "I:GetInteger", &field))
|
||||||
|
return NULL;
|
||||||
|
status = MsiRecordGetInteger(record->h, field);
|
||||||
|
if (status == MSI_NULL_INTEGER){
|
||||||
|
PyErr_SetString(MSIError, "could not convert record field to integer");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
return PyInt_FromLong((long) status);
|
||||||
|
}
|
||||||
|
|
||||||
|
static PyObject*
|
||||||
|
record_getstring(msiobj* record, PyObject* args)
|
||||||
|
{
|
||||||
|
unsigned int field;
|
||||||
|
unsigned int status;
|
||||||
|
char buf[2000];
|
||||||
|
char *res = buf;
|
||||||
|
DWORD size = sizeof(buf);
|
||||||
|
PyObject* string;
|
||||||
|
|
||||||
|
if (!PyArg_ParseTuple(args, "I:GetString", &field))
|
||||||
|
return NULL;
|
||||||
|
status = MsiRecordGetString(record->h, field, res, &size);
|
||||||
|
if (status == ERROR_MORE_DATA) {
|
||||||
|
res = (char*) malloc(size + 1);
|
||||||
|
if (res == NULL)
|
||||||
|
return PyErr_NoMemory();
|
||||||
|
status = MsiRecordGetString(record->h, field, res, &size);
|
||||||
|
}
|
||||||
|
if (status != ERROR_SUCCESS)
|
||||||
|
return msierror((int) status);
|
||||||
|
string = PyString_FromString(res);
|
||||||
|
if (buf != res)
|
||||||
|
free(res);
|
||||||
|
return string;
|
||||||
|
}
|
||||||
|
|
||||||
static PyObject*
|
static PyObject*
|
||||||
record_cleardata(msiobj* record, PyObject *args)
|
record_cleardata(msiobj* record, PyObject *args)
|
||||||
{
|
{
|
||||||
|
@ -405,6 +448,10 @@ record_setinteger(msiobj* record, PyObject *args)
|
||||||
static PyMethodDef record_methods[] = {
|
static PyMethodDef record_methods[] = {
|
||||||
{ "GetFieldCount", (PyCFunction)record_getfieldcount, METH_NOARGS,
|
{ "GetFieldCount", (PyCFunction)record_getfieldcount, METH_NOARGS,
|
||||||
PyDoc_STR("GetFieldCount() -> int\nWraps MsiRecordGetFieldCount")},
|
PyDoc_STR("GetFieldCount() -> int\nWraps MsiRecordGetFieldCount")},
|
||||||
|
{ "GetInteger", (PyCFunction)record_getinteger, METH_VARARGS,
|
||||||
|
PyDoc_STR("GetInteger(field) -> int\nWraps MsiRecordGetInteger")},
|
||||||
|
{ "GetString", (PyCFunction)record_getstring, METH_VARARGS,
|
||||||
|
PyDoc_STR("GetString(field) -> string\nWraps MsiRecordGetString")},
|
||||||
{ "SetString", (PyCFunction)record_setstring, METH_VARARGS,
|
{ "SetString", (PyCFunction)record_setstring, METH_VARARGS,
|
||||||
PyDoc_STR("SetString(field,str) -> None\nWraps MsiRecordSetString")},
|
PyDoc_STR("SetString(field,str) -> None\nWraps MsiRecordSetString")},
|
||||||
{ "SetStream", (PyCFunction)record_setstream, METH_VARARGS,
|
{ "SetStream", (PyCFunction)record_setstream, METH_VARARGS,
|
||||||
|
|
Loading…
Reference in New Issue