annotate PC/_msi.c @ 79675:c0a2294de787 2.7

Issue #16199: Backport 2to3 typo fix from 3.2.
author Chris Jerdonek <chris.jerdonek@gmail.com>
date Thu, 11 Oct 2012 16:15:46 -0700
parents b36cb4602e21
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
1 /* Helper library for MSI creation with Python.
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
2 * Copyright (C) 2005 Martin v. Löwis
36846
adbaa9eba975 Update copyright notice.
Martin v. Löwis <martin@v.loewis.de>
parents: 36845
diff changeset
3 * Licensed to PSF under a contributor agreement.
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
4 */
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
5
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
6 #include <Python.h>
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
7 #include <fci.h>
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
8 #include <fcntl.h>
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
9 #include <windows.h>
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
10 #include <msi.h>
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
11 #include <msiquery.h>
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
12 #include <msidefs.h>
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
13 #include <rpc.h>
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
14
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
15 static PyObject *MSIError;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
16
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
17 static PyObject*
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
18 uuidcreate(PyObject* obj, PyObject*args)
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
19 {
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
20 UUID result;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
21 char *cresult;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
22 PyObject *oresult;
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
23
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
24 /* May return ok, local only, and no address.
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
25 For local only, the documentation says we still get a uuid.
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
26 For RPC_S_UUID_NO_ADDRESS, it's not clear whether we can
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
27 use the result. */
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
28 if (UuidCreate(&result) == RPC_S_UUID_NO_ADDRESS) {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
29 PyErr_SetString(PyExc_NotImplementedError, "processing 'no address' result");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
30 return NULL;
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
31 }
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
32
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
33 if (UuidToString(&result, &cresult) == RPC_S_OUT_OF_MEMORY) {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
34 PyErr_SetString(PyExc_MemoryError, "out of memory in uuidgen");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
35 return NULL;
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
36 }
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
37
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
38 oresult = PyString_FromString(cresult);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
39 RpcStringFree(&cresult);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
40 return oresult;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
41
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
42 }
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
43
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
44 /* FCI callback functions */
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
45
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
46 static FNFCIALLOC(cb_alloc)
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
47 {
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
48 return malloc(cb);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
49 }
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
50
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
51 static FNFCIFREE(cb_free)
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
52 {
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
53 free(memory);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
54 }
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
55
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
56 static FNFCIOPEN(cb_open)
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
57 {
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
58 int result = _open(pszFile, oflag, pmode);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
59 if (result == -1)
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
60 *err = errno;
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
61 return result;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
62 }
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
63
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
64 static FNFCIREAD(cb_read)
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
65 {
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
66 UINT result = (UINT)_read(hf, memory, cb);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
67 if (result != cb)
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
68 *err = errno;
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
69 return result;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
70 }
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
71
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
72 static FNFCIWRITE(cb_write)
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
73 {
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
74 UINT result = (UINT)_write(hf, memory, cb);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
75 if (result != cb)
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
76 *err = errno;
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
77 return result;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
78 }
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
79
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
80 static FNFCICLOSE(cb_close)
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
81 {
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
82 int result = _close(hf);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
83 if (result != 0)
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
84 *err = errno;
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
85 return result;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
86 }
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
87
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
88 static FNFCISEEK(cb_seek)
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
89 {
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
90 long result = (long)_lseek(hf, dist, seektype);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
91 if (result == -1)
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
92 *err = errno;
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
93 return result;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
94 }
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
95
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
96 static FNFCIDELETE(cb_delete)
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
97 {
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
98 int result = remove(pszFile);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
99 if (result != 0)
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
100 *err = errno;
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
101 return result;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
102 }
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
103
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
104 static FNFCIFILEPLACED(cb_fileplaced)
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
105 {
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
106 return 0;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
107 }
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
108
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
109 static FNFCIGETTEMPFILE(cb_gettempfile)
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
110 {
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
111 char *name = _tempnam("", "tmp");
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
112 if ((name != NULL) && ((int)strlen(name) < cbTempName)) {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
113 strcpy(pszTempName, name);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
114 free(name);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
115 return TRUE;
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
116 }
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
117
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
118 if (name) free(name);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
119 return FALSE;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
120 }
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
121
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
122 static FNFCISTATUS(cb_status)
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
123 {
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
124 if (pv) {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
125 PyObject *result = PyObject_CallMethod(pv, "status", "iii", typeStatus, cb1, cb2);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
126 if (result == NULL)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
127 return -1;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
128 Py_DECREF(result);
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
129 }
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
130 return 0;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
131 }
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
132
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
133 static FNFCIGETNEXTCABINET(cb_getnextcabinet)
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
134 {
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
135 if (pv) {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
136 PyObject *result = PyObject_CallMethod(pv, "getnextcabinet", "i", pccab->iCab);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
137 if (result == NULL)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
138 return -1;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
139 if (!PyString_Check(result)) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
140 PyErr_Format(PyExc_TypeError,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
141 "Incorrect return type %s from getnextcabinet",
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
142 result->ob_type->tp_name);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
143 Py_DECREF(result);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
144 return FALSE;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
145 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
146 strncpy(pccab->szCab, PyString_AsString(result), sizeof(pccab->szCab));
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
147 return TRUE;
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
148 }
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
149 return FALSE;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
150 }
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
151
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
152 static FNFCIGETOPENINFO(cb_getopeninfo)
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
153 {
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
154 BY_HANDLE_FILE_INFORMATION bhfi;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
155 FILETIME filetime;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
156 HANDLE handle;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
157
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
158 /* Need Win32 handle to get time stamps */
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
159 handle = CreateFile(pszName, GENERIC_READ, FILE_SHARE_READ, NULL,
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
160 OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
161 if (handle == INVALID_HANDLE_VALUE)
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
162 return -1;
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
163
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
164 if (GetFileInformationByHandle(handle, &bhfi) == FALSE)
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
165 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
166 CloseHandle(handle);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
167 return -1;
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
168 }
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
169
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
170 FileTimeToLocalFileTime(&bhfi.ftLastWriteTime, &filetime);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
171 FileTimeToDosDateTime(&filetime, pdate, ptime);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
172
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
173 *pattribs = (int)(bhfi.dwFileAttributes &
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
174 (_A_RDONLY | _A_SYSTEM | _A_HIDDEN | _A_ARCH));
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
175
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
176 CloseHandle(handle);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
177
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
178 return _open(pszName, _O_RDONLY | _O_BINARY);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
179 }
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
180
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
181 static PyObject* fcicreate(PyObject* obj, PyObject* args)
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
182 {
45295
ba17b21ab93e Backport of r60743:
Martin v. Löwis <martin@v.loewis.de>
parents: 40070
diff changeset
183 char *cabname, *p;
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
184 PyObject *files;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
185 CCAB ccab;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
186 HFCI hfci;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
187 ERF erf;
45295
ba17b21ab93e Backport of r60743:
Martin v. Löwis <martin@v.loewis.de>
parents: 40070
diff changeset
188 Py_ssize_t i;
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
189
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
190
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
191 if (!PyArg_ParseTuple(args, "sO:FCICreate", &cabname, &files))
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
192 return NULL;
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
193
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
194 if (!PyList_Check(files)) {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
195 PyErr_SetString(PyExc_TypeError, "FCICreate expects a list");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
196 return NULL;
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
197 }
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
198
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
199 ccab.cb = INT_MAX; /* no need to split CAB into multiple media */
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
200 ccab.cbFolderThresh = 1000000; /* flush directory after this many bytes */
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
201 ccab.cbReserveCFData = 0;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
202 ccab.cbReserveCFFolder = 0;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
203 ccab.cbReserveCFHeader = 0;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
204
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
205 ccab.iCab = 1;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
206 ccab.iDisk = 1;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
207
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
208 ccab.setID = 0;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
209 ccab.szDisk[0] = '\0';
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
210
45295
ba17b21ab93e Backport of r60743:
Martin v. Löwis <martin@v.loewis.de>
parents: 40070
diff changeset
211 for (i = 0, p = cabname; *p; p = CharNext(p))
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
212 if (*p == '\\' || *p == '/')
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
213 i = p - cabname + 1;
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
214
45295
ba17b21ab93e Backport of r60743:
Martin v. Löwis <martin@v.loewis.de>
parents: 40070
diff changeset
215 if (i >= sizeof(ccab.szCabPath) ||
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
216 strlen(cabname+i) >= sizeof(ccab.szCab)) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
217 PyErr_SetString(PyExc_ValueError, "path name too long");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
218 return 0;
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
219 }
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
220
45295
ba17b21ab93e Backport of r60743:
Martin v. Löwis <martin@v.loewis.de>
parents: 40070
diff changeset
221 if (i > 0) {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
222 memcpy(ccab.szCabPath, cabname, i);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
223 ccab.szCabPath[i] = '\0';
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
224 strcpy(ccab.szCab, cabname+i);
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
225 } else {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
226 strcpy(ccab.szCabPath, ".\\");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
227 strcpy(ccab.szCab, cabname);
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
228 }
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
229
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
230 hfci = FCICreate(&erf, cb_fileplaced, cb_alloc, cb_free,
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
231 cb_open, cb_read, cb_write, cb_close, cb_seek, cb_delete,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
232 cb_gettempfile, &ccab, NULL);
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
233
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
234 if (hfci == NULL) {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
235 PyErr_Format(PyExc_ValueError, "FCI error %d", erf.erfOper);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
236 return NULL;
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
237 }
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
238
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
239 for (i=0; i < PyList_GET_SIZE(files); i++) {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
240 PyObject *item = PyList_GET_ITEM(files, i);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
241 char *filename, *cabname;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
242 if (!PyArg_ParseTuple(item, "ss", &filename, &cabname))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
243 goto err;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
244 if (!FCIAddFile(hfci, filename, cabname, FALSE,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
245 cb_getnextcabinet, cb_status, cb_getopeninfo,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
246 tcompTYPE_MSZIP))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
247 goto err;
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
248 }
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
249
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
250 if (!FCIFlushCabinet(hfci, FALSE, cb_getnextcabinet, cb_status))
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
251 goto err;
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
252
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
253 if (!FCIDestroy(hfci))
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
254 goto err;
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
255
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
256 Py_INCREF(Py_None);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
257 return Py_None;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
258 err:
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
259 PyErr_Format(PyExc_ValueError, "FCI error %d", erf.erfOper); /* XXX better error type */
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
260 FCIDestroy(hfci);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
261 return NULL;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
262 }
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
263
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
264 typedef struct msiobj{
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
265 PyObject_HEAD
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
266 MSIHANDLE h;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
267 }msiobj;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
268
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
269 static void
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
270 msiobj_dealloc(msiobj* msidb)
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
271 {
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
272 MsiCloseHandle(msidb->h);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
273 msidb->h = 0;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
274 }
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
275
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
276 static PyObject*
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
277 msiobj_close(msiobj* msidb, PyObject *args)
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
278 {
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
279 MsiCloseHandle(msidb->h);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
280 msidb->h = 0;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
281 Py_INCREF(Py_None);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
282 return Py_None;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
283 }
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
284
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
285 static PyObject*
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
286 msierror(int status)
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
287 {
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
288 int code;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
289 char buf[2000];
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
290 char *res = buf;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
291 DWORD size = sizeof(buf);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
292 MSIHANDLE err = MsiGetLastErrorRecord();
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
293
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
294 if (err == 0) {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
295 switch(status) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
296 case ERROR_ACCESS_DENIED:
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
297 PyErr_SetString(MSIError, "access denied");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
298 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
299 case ERROR_FUNCTION_FAILED:
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
300 PyErr_SetString(MSIError, "function failed");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
301 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
302 case ERROR_INVALID_DATA:
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
303 PyErr_SetString(MSIError, "invalid data");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
304 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
305 case ERROR_INVALID_HANDLE:
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
306 PyErr_SetString(MSIError, "invalid handle");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
307 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
308 case ERROR_INVALID_STATE:
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
309 PyErr_SetString(MSIError, "invalid state");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
310 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
311 case ERROR_INVALID_PARAMETER:
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
312 PyErr_SetString(MSIError, "invalid parameter");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
313 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
314 default:
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
315 PyErr_Format(MSIError, "unknown error %x", status);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
316 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
317 }
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
318 }
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
319
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
320 code = MsiRecordGetInteger(err, 1); /* XXX code */
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
321 if (MsiFormatRecord(0, err, res, &size) == ERROR_MORE_DATA) {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
322 res = malloc(size+1);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
323 MsiFormatRecord(0, err, res, &size);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
324 res[size]='\0';
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
325 }
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
326 MsiCloseHandle(err);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
327 PyErr_SetString(MSIError, res);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
328 if (res != buf)
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
329 free(res);
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
330 return NULL;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
331 }
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
332
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
333 /*************************** Record objects **********************/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
334
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
335 static PyObject*
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
336 record_getfieldcount(msiobj* record, PyObject* args)
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
337 {
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
338 return PyInt_FromLong(MsiRecordGetFieldCount(record->h));
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
339 }
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
340
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
341 static PyObject*
47441
0580531c3755 Patch #2125: Add GetInteger and GetString methods for
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
342 record_getinteger(msiobj* record, PyObject* args)
0580531c3755 Patch #2125: Add GetInteger and GetString methods for
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
343 {
0580531c3755 Patch #2125: Add GetInteger and GetString methods for
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
344 unsigned int field;
0580531c3755 Patch #2125: Add GetInteger and GetString methods for
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
345 int status;
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
346
47441
0580531c3755 Patch #2125: Add GetInteger and GetString methods for
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
347 if (!PyArg_ParseTuple(args, "I:GetInteger", &field))
0580531c3755 Patch #2125: Add GetInteger and GetString methods for
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
348 return NULL;
0580531c3755 Patch #2125: Add GetInteger and GetString methods for
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
349 status = MsiRecordGetInteger(record->h, field);
0580531c3755 Patch #2125: Add GetInteger and GetString methods for
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
350 if (status == MSI_NULL_INTEGER){
0580531c3755 Patch #2125: Add GetInteger and GetString methods for
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
351 PyErr_SetString(MSIError, "could not convert record field to integer");
0580531c3755 Patch #2125: Add GetInteger and GetString methods for
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
352 return NULL;
0580531c3755 Patch #2125: Add GetInteger and GetString methods for
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
353 }
0580531c3755 Patch #2125: Add GetInteger and GetString methods for
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
354 return PyInt_FromLong((long) status);
0580531c3755 Patch #2125: Add GetInteger and GetString methods for
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
355 }
0580531c3755 Patch #2125: Add GetInteger and GetString methods for
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
356
0580531c3755 Patch #2125: Add GetInteger and GetString methods for
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
357 static PyObject*
0580531c3755 Patch #2125: Add GetInteger and GetString methods for
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
358 record_getstring(msiobj* record, PyObject* args)
0580531c3755 Patch #2125: Add GetInteger and GetString methods for
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
359 {
0580531c3755 Patch #2125: Add GetInteger and GetString methods for
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
360 unsigned int field;
0580531c3755 Patch #2125: Add GetInteger and GetString methods for
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
361 unsigned int status;
0580531c3755 Patch #2125: Add GetInteger and GetString methods for
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
362 char buf[2000];
0580531c3755 Patch #2125: Add GetInteger and GetString methods for
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
363 char *res = buf;
0580531c3755 Patch #2125: Add GetInteger and GetString methods for
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
364 DWORD size = sizeof(buf);
0580531c3755 Patch #2125: Add GetInteger and GetString methods for
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
365 PyObject* string;
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
366
47441
0580531c3755 Patch #2125: Add GetInteger and GetString methods for
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
367 if (!PyArg_ParseTuple(args, "I:GetString", &field))
0580531c3755 Patch #2125: Add GetInteger and GetString methods for
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
368 return NULL;
0580531c3755 Patch #2125: Add GetInteger and GetString methods for
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
369 status = MsiRecordGetString(record->h, field, res, &size);
0580531c3755 Patch #2125: Add GetInteger and GetString methods for
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
370 if (status == ERROR_MORE_DATA) {
0580531c3755 Patch #2125: Add GetInteger and GetString methods for
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
371 res = (char*) malloc(size + 1);
0580531c3755 Patch #2125: Add GetInteger and GetString methods for
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
372 if (res == NULL)
0580531c3755 Patch #2125: Add GetInteger and GetString methods for
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
373 return PyErr_NoMemory();
0580531c3755 Patch #2125: Add GetInteger and GetString methods for
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
374 status = MsiRecordGetString(record->h, field, res, &size);
0580531c3755 Patch #2125: Add GetInteger and GetString methods for
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
375 }
0580531c3755 Patch #2125: Add GetInteger and GetString methods for
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
376 if (status != ERROR_SUCCESS)
0580531c3755 Patch #2125: Add GetInteger and GetString methods for
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
377 return msierror((int) status);
0580531c3755 Patch #2125: Add GetInteger and GetString methods for
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
378 string = PyString_FromString(res);
0580531c3755 Patch #2125: Add GetInteger and GetString methods for
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
379 if (buf != res)
0580531c3755 Patch #2125: Add GetInteger and GetString methods for
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
380 free(res);
0580531c3755 Patch #2125: Add GetInteger and GetString methods for
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
381 return string;
0580531c3755 Patch #2125: Add GetInteger and GetString methods for
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
382 }
0580531c3755 Patch #2125: Add GetInteger and GetString methods for
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
383
0580531c3755 Patch #2125: Add GetInteger and GetString methods for
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
384 static PyObject*
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
385 record_cleardata(msiobj* record, PyObject *args)
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
386 {
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
387 int status = MsiRecordClearData(record->h);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
388 if (status != ERROR_SUCCESS)
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
389 return msierror(status);
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
390
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
391 Py_INCREF(Py_None);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
392 return Py_None;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
393 }
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
394
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
395 static PyObject*
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
396 record_setstring(msiobj* record, PyObject *args)
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
397 {
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
398 int status;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
399 int field;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
400 char *data;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
401
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
402 if (!PyArg_ParseTuple(args, "is:SetString", &field, &data))
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
403 return NULL;
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
404
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
405 if ((status = MsiRecordSetString(record->h, field, data)) != ERROR_SUCCESS)
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
406 return msierror(status);
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
407
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
408 Py_INCREF(Py_None);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
409 return Py_None;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
410 }
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
411
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
412 static PyObject*
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
413 record_setstream(msiobj* record, PyObject *args)
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
414 {
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
415 int status;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
416 int field;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
417 char *data;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
418
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
419 if (!PyArg_ParseTuple(args, "is:SetStream", &field, &data))
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
420 return NULL;
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
421
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
422 if ((status = MsiRecordSetStream(record->h, field, data)) != ERROR_SUCCESS)
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
423 return msierror(status);
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
424
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
425 Py_INCREF(Py_None);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
426 return Py_None;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
427 }
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
428
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
429 static PyObject*
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
430 record_setinteger(msiobj* record, PyObject *args)
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
431 {
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
432 int status;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
433 int field;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
434 int data;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
435
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
436 if (!PyArg_ParseTuple(args, "ii:SetInteger", &field, &data))
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
437 return NULL;
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
438
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
439 if ((status = MsiRecordSetInteger(record->h, field, data)) != ERROR_SUCCESS)
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
440 return msierror(status);
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
441
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
442 Py_INCREF(Py_None);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
443 return Py_None;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
444 }
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
445
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
446
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
447
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
448 static PyMethodDef record_methods[] = {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
449 { "GetFieldCount", (PyCFunction)record_getfieldcount, METH_NOARGS,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
450 PyDoc_STR("GetFieldCount() -> int\nWraps MsiRecordGetFieldCount")},
47441
0580531c3755 Patch #2125: Add GetInteger and GetString methods for
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
451 { "GetInteger", (PyCFunction)record_getinteger, METH_VARARGS,
0580531c3755 Patch #2125: Add GetInteger and GetString methods for
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
452 PyDoc_STR("GetInteger(field) -> int\nWraps MsiRecordGetInteger")},
0580531c3755 Patch #2125: Add GetInteger and GetString methods for
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
453 { "GetString", (PyCFunction)record_getstring, METH_VARARGS,
0580531c3755 Patch #2125: Add GetInteger and GetString methods for
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
454 PyDoc_STR("GetString(field) -> string\nWraps MsiRecordGetString")},
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
455 { "SetString", (PyCFunction)record_setstring, METH_VARARGS,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
456 PyDoc_STR("SetString(field,str) -> None\nWraps MsiRecordSetString")},
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
457 { "SetStream", (PyCFunction)record_setstream, METH_VARARGS,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
458 PyDoc_STR("SetStream(field,filename) -> None\nWraps MsiRecordSetInteger")},
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
459 { "SetInteger", (PyCFunction)record_setinteger, METH_VARARGS,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
460 PyDoc_STR("SetInteger(field,int) -> None\nWraps MsiRecordSetInteger")},
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
461 { "ClearData", (PyCFunction)record_cleardata, METH_NOARGS,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
462 PyDoc_STR("ClearData() -> int\nWraps MsiRecordGClearData")},
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
463 { NULL, NULL }
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
464 };
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
465
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
466 static PyTypeObject record_Type = {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
467 PyVarObject_HEAD_INIT(NULL, 0)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
468 "_msi.Record", /*tp_name*/
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
469 sizeof(msiobj), /*tp_basicsize*/
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
470 0, /*tp_itemsize*/
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
471 /* methods */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
472 (destructor)msiobj_dealloc, /*tp_dealloc*/
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
473 0, /*tp_print*/
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
474 0, /*tp_getattr*/
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
475 0, /*tp_setattr*/
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
476 0, /*tp_compare*/
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
477 0, /*tp_repr*/
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
478 0, /*tp_as_number*/
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
479 0, /*tp_as_sequence*/
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
480 0, /*tp_as_mapping*/
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
481 0, /*tp_hash*/
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
482 0, /*tp_call*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
483 0, /*tp_str*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
484 PyObject_GenericGetAttr,/*tp_getattro*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
485 PyObject_GenericSetAttr,/*tp_setattro*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
486 0, /*tp_as_buffer*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
487 Py_TPFLAGS_DEFAULT, /*tp_flags*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
488 0, /*tp_doc*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
489 0, /*tp_traverse*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
490 0, /*tp_clear*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
491 0, /*tp_richcompare*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
492 0, /*tp_weaklistoffset*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
493 0, /*tp_iter*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
494 0, /*tp_iternext*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
495 record_methods, /*tp_methods*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
496 0, /*tp_members*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
497 0, /*tp_getset*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
498 0, /*tp_base*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
499 0, /*tp_dict*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
500 0, /*tp_descr_get*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
501 0, /*tp_descr_set*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
502 0, /*tp_dictoffset*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
503 0, /*tp_init*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
504 0, /*tp_alloc*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
505 0, /*tp_new*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
506 0, /*tp_free*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
507 0, /*tp_is_gc*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
508 };
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
509
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
510 static PyObject*
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
511 record_new(MSIHANDLE h)
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
512 {
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
513 msiobj *result = PyObject_NEW(struct msiobj, &record_Type);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
514
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
515 if (!result) {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
516 MsiCloseHandle(h);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
517 return NULL;
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
518 }
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
519
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
520 result->h = h;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
521 return (PyObject*)result;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
522 }
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
523
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
524 /*************************** SummaryInformation objects **************/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
525
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
526 static PyObject*
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
527 summary_getproperty(msiobj* si, PyObject *args)
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
528 {
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
529 int status;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
530 int field;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
531 PyObject *result;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
532 UINT type;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
533 INT ival;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
534 FILETIME fval;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
535 char sbuf[1000];
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
536 char *sval = sbuf;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
537 DWORD ssize = sizeof(sval);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
538
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
539 if (!PyArg_ParseTuple(args, "i:GetProperty", &field))
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
540 return NULL;
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
541
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
542 status = MsiSummaryInfoGetProperty(si->h, field, &type, &ival,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
543 &fval, sval, &ssize);
40070
665d7798a1bc Patch #1572724: fix typo ('=' instead of '==') in _msi.c.
Georg Brandl <georg@python.org>
parents: 36846
diff changeset
544 if (status == ERROR_MORE_DATA) {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
545 sval = malloc(ssize);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
546 status = MsiSummaryInfoGetProperty(si->h, field, &type, &ival,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
547 &fval, sval, &ssize);
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
548 }
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
549
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
550 switch(type) {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
551 case VT_I2: case VT_I4:
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
552 return PyInt_FromLong(ival);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
553 case VT_FILETIME:
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
554 PyErr_SetString(PyExc_NotImplementedError, "FILETIME result");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
555 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
556 case VT_LPSTR:
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
557 result = PyString_FromStringAndSize(sval, ssize);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
558 if (sval != sbuf)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
559 free(sval);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
560 return result;
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
561 }
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
562 PyErr_Format(PyExc_NotImplementedError, "result of type %d", type);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
563 return NULL;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
564 }
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
565
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
566 static PyObject*
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
567 summary_getpropertycount(msiobj* si, PyObject *args)
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
568 {
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
569 int status;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
570 UINT result;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
571
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
572 status = MsiSummaryInfoGetPropertyCount(si->h, &result);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
573 if (status != ERROR_SUCCESS)
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
574 return msierror(status);
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
575
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
576 return PyInt_FromLong(result);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
577 }
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
578
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
579 static PyObject*
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
580 summary_setproperty(msiobj* si, PyObject *args)
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
581 {
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
582 int status;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
583 int field;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
584 PyObject* data;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
585
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
586 if (!PyArg_ParseTuple(args, "iO:SetProperty", &field, &data))
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
587 return NULL;
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
588
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
589 if (PyString_Check(data)) {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
590 status = MsiSummaryInfoSetProperty(si->h, field, VT_LPSTR,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
591 0, NULL, PyString_AsString(data));
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
592 } else if (PyInt_Check(data)) {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
593 status = MsiSummaryInfoSetProperty(si->h, field, VT_I4,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
594 PyInt_AsLong(data), NULL, NULL);
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
595 } else {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
596 PyErr_SetString(PyExc_TypeError, "unsupported type");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
597 return NULL;
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
598 }
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
599
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
600 if (status != ERROR_SUCCESS)
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
601 return msierror(status);
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
602
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
603 Py_INCREF(Py_None);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
604 return Py_None;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
605 }
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
606
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
607
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
608 static PyObject*
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
609 summary_persist(msiobj* si, PyObject *args)
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
610 {
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
611 int status;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
612
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
613 status = MsiSummaryInfoPersist(si->h);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
614 if (status != ERROR_SUCCESS)
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
615 return msierror(status);
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
616 Py_INCREF(Py_None);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
617 return Py_None;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
618 }
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
619
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
620 static PyMethodDef summary_methods[] = {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
621 { "GetProperty", (PyCFunction)summary_getproperty, METH_VARARGS,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
622 PyDoc_STR("GetProperty(propid) -> value\nWraps MsiSummaryInfoGetProperty")},
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
623 { "GetPropertyCount", (PyCFunction)summary_getpropertycount, METH_NOARGS,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
624 PyDoc_STR("GetProperty() -> int\nWraps MsiSummaryInfoGetPropertyCount")},
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
625 { "SetProperty", (PyCFunction)summary_setproperty, METH_VARARGS,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
626 PyDoc_STR("SetProperty(value) -> None\nWraps MsiSummaryInfoProperty")},
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
627 { "Persist", (PyCFunction)summary_persist, METH_NOARGS,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
628 PyDoc_STR("Persist() -> None\nWraps MsiSummaryInfoPersist")},
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
629 { NULL, NULL }
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
630 };
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
631
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
632 static PyTypeObject summary_Type = {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
633 PyVarObject_HEAD_INIT(NULL, 0)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
634 "_msi.SummaryInformation", /*tp_name*/
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
635 sizeof(msiobj), /*tp_basicsize*/
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
636 0, /*tp_itemsize*/
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
637 /* methods */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
638 (destructor)msiobj_dealloc, /*tp_dealloc*/
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
639 0, /*tp_print*/
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
640 0, /*tp_getattr*/
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
641 0, /*tp_setattr*/
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
642 0, /*tp_compare*/
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
643 0, /*tp_repr*/
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
644 0, /*tp_as_number*/
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
645 0, /*tp_as_sequence*/
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
646 0, /*tp_as_mapping*/
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
647 0, /*tp_hash*/
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
648 0, /*tp_call*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
649 0, /*tp_str*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
650 PyObject_GenericGetAttr,/*tp_getattro*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
651 PyObject_GenericSetAttr,/*tp_setattro*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
652 0, /*tp_as_buffer*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
653 Py_TPFLAGS_DEFAULT, /*tp_flags*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
654 0, /*tp_doc*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
655 0, /*tp_traverse*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
656 0, /*tp_clear*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
657 0, /*tp_richcompare*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
658 0, /*tp_weaklistoffset*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
659 0, /*tp_iter*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
660 0, /*tp_iternext*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
661 summary_methods, /*tp_methods*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
662 0, /*tp_members*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
663 0, /*tp_getset*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
664 0, /*tp_base*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
665 0, /*tp_dict*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
666 0, /*tp_descr_get*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
667 0, /*tp_descr_set*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
668 0, /*tp_dictoffset*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
669 0, /*tp_init*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
670 0, /*tp_alloc*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
671 0, /*tp_new*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
672 0, /*tp_free*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
673 0, /*tp_is_gc*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
674 };
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
675
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
676 /*************************** View objects **************/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
677
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
678 static PyObject*
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
679 view_execute(msiobj *view, PyObject*args)
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
680 {
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
681 int status;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
682 MSIHANDLE params = 0;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
683 PyObject *oparams = Py_None;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
684
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
685 if (!PyArg_ParseTuple(args, "O:Execute", &oparams))
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
686 return NULL;
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
687
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
688 if (oparams != Py_None) {
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
689 if (oparams->ob_type != &record_Type) {
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
690 PyErr_SetString(PyExc_TypeError, "Execute argument must be a record");
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
691 return NULL;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
692 }
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
693 params = ((msiobj*)oparams)->h;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
694 }
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
695
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
696 status = MsiViewExecute(view->h, params);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
697 if (status != ERROR_SUCCESS)
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
698 return msierror(status);
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
699
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
700 Py_INCREF(Py_None);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
701 return Py_None;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
702 }
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
703
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
704 static PyObject*
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
705 view_fetch(msiobj *view, PyObject*args)
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
706 {
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
707 int status;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
708 MSIHANDLE result;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
709
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
710 if ((status = MsiViewFetch(view->h, &result)) != ERROR_SUCCESS)
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
711 return msierror(status);
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
712
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
713 return record_new(result);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
714 }
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
715
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
716 static PyObject*
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
717 view_getcolumninfo(msiobj *view, PyObject *args)
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
718 {
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
719 int status;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
720 int kind;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
721 MSIHANDLE result;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
722
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
723 if (!PyArg_ParseTuple(args, "i:GetColumnInfo", &kind))
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
724 return NULL;
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
725
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
726 if ((status = MsiViewGetColumnInfo(view->h, kind, &result)) != ERROR_SUCCESS)
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
727 return msierror(status);
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
728
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
729 return record_new(result);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
730 }
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
731
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
732 static PyObject*
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
733 view_modify(msiobj *view, PyObject *args)
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
734 {
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
735 int kind;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
736 PyObject *data;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
737 int status;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
738
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
739 if (!PyArg_ParseTuple(args, "iO:Modify", &kind, &data))
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
740 return NULL;
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
741
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
742 if (data->ob_type != &record_Type) {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
743 PyErr_SetString(PyExc_TypeError, "Modify expects a record object");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
744 return NULL;
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
745 }
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
746
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
747 if ((status = MsiViewModify(view->h, kind, ((msiobj*)data)->h)) != ERROR_SUCCESS)
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
748 return msierror(status);
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
749
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
750 Py_INCREF(Py_None);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
751 return Py_None;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
752 }
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
753
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
754 static PyObject*
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
755 view_close(msiobj *view, PyObject*args)
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
756 {
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
757 int status;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
758
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
759 if ((status = MsiViewClose(view->h)) != ERROR_SUCCESS)
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
760 return msierror(status);
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
761
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
762 Py_INCREF(Py_None);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
763 return Py_None;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
764 }
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
765
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
766 static PyMethodDef view_methods[] = {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
767 { "Execute", (PyCFunction)view_execute, METH_VARARGS,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
768 PyDoc_STR("Execute(params=None) -> None\nWraps MsiViewExecute")},
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
769 { "GetColumnInfo", (PyCFunction)view_getcolumninfo, METH_VARARGS,
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
770 PyDoc_STR("GetColumnInfo() -> result\nWraps MsiGetColumnInfo")},
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
771 { "Fetch", (PyCFunction)view_fetch, METH_NOARGS,
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
772 PyDoc_STR("Fetch() -> result\nWraps MsiViewFetch")},
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
773 { "Modify", (PyCFunction)view_modify, METH_VARARGS,
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
774 PyDoc_STR("Modify(mode,record) -> None\nWraps MsiViewModify")},
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
775 { "Close", (PyCFunction)view_close, METH_NOARGS,
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
776 PyDoc_STR("Close() -> result\nWraps MsiViewClose")},
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
777 { NULL, NULL }
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
778 };
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
779
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
780 static PyTypeObject msiview_Type = {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
781 PyVarObject_HEAD_INIT(NULL, 0)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
782 "_msi.View", /*tp_name*/
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
783 sizeof(msiobj), /*tp_basicsize*/
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
784 0, /*tp_itemsize*/
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
785 /* methods */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
786 (destructor)msiobj_dealloc, /*tp_dealloc*/
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
787 0, /*tp_print*/
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
788 0, /*tp_getattr*/
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
789 0, /*tp_setattr*/
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
790 0, /*tp_compare*/
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
791 0, /*tp_repr*/
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
792 0, /*tp_as_number*/
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
793 0, /*tp_as_sequence*/
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
794 0, /*tp_as_mapping*/
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
795 0, /*tp_hash*/
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
796 0, /*tp_call*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
797 0, /*tp_str*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
798 PyObject_GenericGetAttr,/*tp_getattro*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
799 PyObject_GenericSetAttr,/*tp_setattro*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
800 0, /*tp_as_buffer*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
801 Py_TPFLAGS_DEFAULT, /*tp_flags*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
802 0, /*tp_doc*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
803 0, /*tp_traverse*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
804 0, /*tp_clear*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
805 0, /*tp_richcompare*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
806 0, /*tp_weaklistoffset*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
807 0, /*tp_iter*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
808 0, /*tp_iternext*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
809 view_methods, /*tp_methods*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
810 0, /*tp_members*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
811 0, /*tp_getset*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
812 0, /*tp_base*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
813 0, /*tp_dict*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
814 0, /*tp_descr_get*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
815 0, /*tp_descr_set*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
816 0, /*tp_dictoffset*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
817 0, /*tp_init*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
818 0, /*tp_alloc*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
819 0, /*tp_new*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
820 0, /*tp_free*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
821 0, /*tp_is_gc*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
822 };
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
823
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
824 /*************************** Database objects **************/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
825
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
826 static PyObject*
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
827 msidb_openview(msiobj *msidb, PyObject *args)
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
828 {
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
829 int status;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
830 char *sql;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
831 MSIHANDLE hView;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
832 msiobj *result;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
833
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
834 if (!PyArg_ParseTuple(args, "s:OpenView", &sql))
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
835 return NULL;
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
836
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
837 if ((status = MsiDatabaseOpenView(msidb->h, sql, &hView)) != ERROR_SUCCESS)
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
838 return msierror(status);
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
839
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
840 result = PyObject_NEW(struct msiobj, &msiview_Type);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
841 if (!result) {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
842 MsiCloseHandle(hView);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
843 return NULL;
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
844 }
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
846 result->h = hView;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
847 return (PyObject*)result;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
848 }
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
849
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
850 static PyObject*
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
851 msidb_commit(msiobj *msidb, PyObject *args)
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
852 {
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
853 int status;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
854
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
855 if ((status = MsiDatabaseCommit(msidb->h)) != ERROR_SUCCESS)
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
856 return msierror(status);
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
857
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
858 Py_INCREF(Py_None);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
859 return Py_None;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
860 }
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
861
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
862 static PyObject*
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
863 msidb_getsummaryinformation(msiobj *db, PyObject *args)
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
864 {
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
865 int status;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
866 int count;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
867 MSIHANDLE result;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
868 msiobj *oresult;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
869
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
870 if (!PyArg_ParseTuple(args, "i:GetSummaryInformation", &count))
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
871 return NULL;
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
872
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
873 status = MsiGetSummaryInformation(db->h, NULL, count, &result);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
874 if (status != ERROR_SUCCESS)
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
875 return msierror(status);
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
876
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
877 oresult = PyObject_NEW(struct msiobj, &summary_Type);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
878 if (!result) {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
879 MsiCloseHandle(result);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
880 return NULL;
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
881 }
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
882
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
883 oresult->h = result;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
884 return (PyObject*)oresult;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
885 }
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
886
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
887 static PyMethodDef db_methods[] = {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
888 { "OpenView", (PyCFunction)msidb_openview, METH_VARARGS,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
889 PyDoc_STR("OpenView(sql) -> viewobj\nWraps MsiDatabaseOpenView")},
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
890 { "Commit", (PyCFunction)msidb_commit, METH_NOARGS,
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
891 PyDoc_STR("Commit() -> None\nWraps MsiDatabaseCommit")},
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
892 { "GetSummaryInformation", (PyCFunction)msidb_getsummaryinformation, METH_VARARGS,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
893 PyDoc_STR("GetSummaryInformation(updateCount) -> viewobj\nWraps MsiGetSummaryInformation")},
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
894 { NULL, NULL }
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
895 };
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
896
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
897 static PyTypeObject msidb_Type = {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
898 PyVarObject_HEAD_INIT(NULL, 0)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
899 "_msi.Database", /*tp_name*/
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
900 sizeof(msiobj), /*tp_basicsize*/
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
901 0, /*tp_itemsize*/
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
902 /* methods */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
903 (destructor)msiobj_dealloc, /*tp_dealloc*/
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
904 0, /*tp_print*/
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
905 0, /*tp_getattr*/
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
906 0, /*tp_setattr*/
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
907 0, /*tp_compare*/
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
908 0, /*tp_repr*/
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
909 0, /*tp_as_number*/
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
910 0, /*tp_as_sequence*/
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
911 0, /*tp_as_mapping*/
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
912 0, /*tp_hash*/
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
913 0, /*tp_call*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
914 0, /*tp_str*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
915 PyObject_GenericGetAttr,/*tp_getattro*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
916 PyObject_GenericSetAttr,/*tp_setattro*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
917 0, /*tp_as_buffer*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
918 Py_TPFLAGS_DEFAULT, /*tp_flags*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
919 0, /*tp_doc*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
920 0, /*tp_traverse*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
921 0, /*tp_clear*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
922 0, /*tp_richcompare*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
923 0, /*tp_weaklistoffset*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
924 0, /*tp_iter*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
925 0, /*tp_iternext*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
926 db_methods, /*tp_methods*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
927 0, /*tp_members*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
928 0, /*tp_getset*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
929 0, /*tp_base*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
930 0, /*tp_dict*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
931 0, /*tp_descr_get*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
932 0, /*tp_descr_set*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
933 0, /*tp_dictoffset*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
934 0, /*tp_init*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
935 0, /*tp_alloc*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
936 0, /*tp_new*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
937 0, /*tp_free*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
938 0, /*tp_is_gc*/
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
939 };
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
940
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
941 static PyObject* msiopendb(PyObject *obj, PyObject *args)
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
942 {
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
943 int status;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
944 char *path;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
945 int persist;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
946 MSIHANDLE h;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
947 msiobj *result;
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
948
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
949 if (!PyArg_ParseTuple(args, "si:MSIOpenDatabase", &path, &persist))
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
950 return NULL;
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
951
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
952 status = MsiOpenDatabase(path, (LPCSTR)persist, &h);
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
953 if (status != ERROR_SUCCESS)
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
954 return msierror(status);
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
955
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
956 result = PyObject_NEW(struct msiobj, &msidb_Type);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
957 if (!result) {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
958 MsiCloseHandle(h);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
959 return NULL;
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
960 }
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
961 result->h = h;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
962 return (PyObject*)result;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
963 }
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
964
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
965 static PyObject*
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
966 createrecord(PyObject *o, PyObject *args)
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
967 {
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
968 int count;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
969 MSIHANDLE h;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
970
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
971 if (!PyArg_ParseTuple(args, "i:CreateRecord", &count))
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
972 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
973
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
974 h = MsiCreateRecord(count);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
975 if (h == 0)
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
976 return msierror(0);
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
977
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
978 return record_new(h);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
979 }
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
980
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
981
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
982 static PyMethodDef msi_methods[] = {
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
983 {"UuidCreate", (PyCFunction)uuidcreate, METH_NOARGS,
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
984 PyDoc_STR("UuidCreate() -> string")},
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
985 {"FCICreate", (PyCFunction)fcicreate, METH_VARARGS,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
986 PyDoc_STR("fcicreate(cabname,files) -> None")},
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
987 {"OpenDatabase", (PyCFunction)msiopendb, METH_VARARGS,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
988 PyDoc_STR("OpenDatabase(name, flags) -> dbobj\nWraps MsiOpenDatabase")},
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
989 {"CreateRecord", (PyCFunction)createrecord, METH_VARARGS,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
990 PyDoc_STR("OpenDatabase(name, flags) -> dbobj\nWraps MsiCreateRecord")},
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
991 {NULL, NULL} /* sentinel */
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
992 };
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
993
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
994 static char msi_doc[] = "Documentation";
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
995
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
996 PyMODINIT_FUNC
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
997 init_msi(void)
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
998 {
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
999 PyObject *m;
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
1000
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
1001 m = Py_InitModule3("_msi", msi_methods, msi_doc);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
1002 if (m == NULL)
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
1003 return;
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
1004
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
1005 PyModule_AddIntConstant(m, "MSIDBOPEN_CREATEDIRECT", (int)MSIDBOPEN_CREATEDIRECT);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
1006 PyModule_AddIntConstant(m, "MSIDBOPEN_CREATE", (int)MSIDBOPEN_CREATE);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
1007 PyModule_AddIntConstant(m, "MSIDBOPEN_DIRECT", (int)MSIDBOPEN_DIRECT);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
1008 PyModule_AddIntConstant(m, "MSIDBOPEN_READONLY", (int)MSIDBOPEN_READONLY);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
1009 PyModule_AddIntConstant(m, "MSIDBOPEN_TRANSACT", (int)MSIDBOPEN_TRANSACT);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
1010 PyModule_AddIntConstant(m, "MSIDBOPEN_PATCHFILE", (int)MSIDBOPEN_PATCHFILE);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
1011
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
1012 PyModule_AddIntConstant(m, "MSICOLINFO_NAMES", MSICOLINFO_NAMES);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
1013 PyModule_AddIntConstant(m, "MSICOLINFO_TYPES", MSICOLINFO_TYPES);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
1014
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
1015 PyModule_AddIntConstant(m, "MSIMODIFY_SEEK", MSIMODIFY_SEEK);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
1016 PyModule_AddIntConstant(m, "MSIMODIFY_REFRESH", MSIMODIFY_REFRESH);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
1017 PyModule_AddIntConstant(m, "MSIMODIFY_INSERT", MSIMODIFY_INSERT);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
1018 PyModule_AddIntConstant(m, "MSIMODIFY_UPDATE", MSIMODIFY_UPDATE);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
1019 PyModule_AddIntConstant(m, "MSIMODIFY_ASSIGN", MSIMODIFY_ASSIGN);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
1020 PyModule_AddIntConstant(m, "MSIMODIFY_REPLACE", MSIMODIFY_REPLACE);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
1021 PyModule_AddIntConstant(m, "MSIMODIFY_MERGE", MSIMODIFY_MERGE);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
1022 PyModule_AddIntConstant(m, "MSIMODIFY_DELETE", MSIMODIFY_DELETE);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
1023 PyModule_AddIntConstant(m, "MSIMODIFY_INSERT_TEMPORARY", MSIMODIFY_INSERT_TEMPORARY);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
1024 PyModule_AddIntConstant(m, "MSIMODIFY_VALIDATE", MSIMODIFY_VALIDATE);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
1025 PyModule_AddIntConstant(m, "MSIMODIFY_VALIDATE_NEW", MSIMODIFY_VALIDATE_NEW);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
1026 PyModule_AddIntConstant(m, "MSIMODIFY_VALIDATE_FIELD", MSIMODIFY_VALIDATE_FIELD);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
1027 PyModule_AddIntConstant(m, "MSIMODIFY_VALIDATE_DELETE", MSIMODIFY_VALIDATE_DELETE);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
1028
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
1029 PyModule_AddIntConstant(m, "PID_CODEPAGE", PID_CODEPAGE);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
1030 PyModule_AddIntConstant(m, "PID_TITLE", PID_TITLE);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
1031 PyModule_AddIntConstant(m, "PID_SUBJECT", PID_SUBJECT);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
1032 PyModule_AddIntConstant(m, "PID_AUTHOR", PID_AUTHOR);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
1033 PyModule_AddIntConstant(m, "PID_KEYWORDS", PID_KEYWORDS);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
1034 PyModule_AddIntConstant(m, "PID_COMMENTS", PID_COMMENTS);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
1035 PyModule_AddIntConstant(m, "PID_TEMPLATE", PID_TEMPLATE);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
1036 PyModule_AddIntConstant(m, "PID_LASTAUTHOR", PID_LASTAUTHOR);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
1037 PyModule_AddIntConstant(m, "PID_REVNUMBER", PID_REVNUMBER);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
1038 PyModule_AddIntConstant(m, "PID_LASTPRINTED", PID_LASTPRINTED);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
1039 PyModule_AddIntConstant(m, "PID_CREATE_DTM", PID_CREATE_DTM);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
1040 PyModule_AddIntConstant(m, "PID_LASTSAVE_DTM", PID_LASTSAVE_DTM);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
1041 PyModule_AddIntConstant(m, "PID_PAGECOUNT", PID_PAGECOUNT);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
1042 PyModule_AddIntConstant(m, "PID_WORDCOUNT", PID_WORDCOUNT);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
1043 PyModule_AddIntConstant(m, "PID_CHARCOUNT", PID_CHARCOUNT);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
1044 PyModule_AddIntConstant(m, "PID_APPNAME", PID_APPNAME);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
1045 PyModule_AddIntConstant(m, "PID_SECURITY", PID_SECURITY);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
1046
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
1047 MSIError = PyErr_NewException ("_msi.MSIError", NULL, NULL);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
1048 if (!MSIError)
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 47527
diff changeset
1049 return;
36845
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
1050 PyModule_AddObject(m, "MSIError", MSIError);
391f74c9c263 Import bdist_msi
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
1051 }