diff options
author | Martin v. Löwis <martin@v.loewis.de> | 2008-06-02 10:08:54 (GMT) |
---|---|---|
committer | Martin v. Löwis <martin@v.loewis.de> | 2008-06-02 10:08:54 (GMT) |
commit | e95593e9b1498843b403d20f956a0eac9d3b4cc0 (patch) | |
tree | 23c1604ad8ae9b6f909f4c0054dba79c5add2886 /PC/_msi.c | |
parent | 90cc5ab976af11adc3469b04a290c2a15a9d4079 (diff) | |
download | cpython-e95593e9b1498843b403d20f956a0eac9d3b4cc0.zip cpython-e95593e9b1498843b403d20f956a0eac9d3b4cc0.tar.gz cpython-e95593e9b1498843b403d20f956a0eac9d3b4cc0.tar.bz2 |
Merged revisions 63888 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r63888 | martin.v.loewis | 2008-06-02 10:40:06 +0200 (Mo, 02 Jun 2008) | 2 lines
Patch #2125: Add GetInteger and GetString methods for
msilib.Record objects.
........
Diffstat (limited to 'PC/_msi.c')
-rw-r--r-- | PC/_msi.c | 47 |
1 files changed, 47 insertions, 0 deletions
@@ -339,6 +339,49 @@ record_getfieldcount(msiobj* record, PyObject* args) } 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* record_cleardata(msiobj* record, PyObject *args) { int status = MsiRecordClearData(record->h); @@ -405,6 +448,10 @@ record_setinteger(msiobj* record, PyObject *args) static PyMethodDef record_methods[] = { { "GetFieldCount", (PyCFunction)record_getfieldcount, METH_NOARGS, 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, PyDoc_STR("SetString(field,str) -> None\nWraps MsiRecordSetString")}, { "SetStream", (PyCFunction)record_setstream, METH_VARARGS, |