1 /*[clinic input]
2 preserve
3 [clinic start generated code]*/
4
5 #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
6 # include "pycore_gc.h" // PyGC_Head
7 # include "pycore_runtime.h" // _Py_ID()
8 #endif
9
10
11 PyDoc_STRVAR(_msi_UuidCreate__doc__,
12 "UuidCreate($module, /)\n"
13 "--\n"
14 "\n"
15 "Return the string representation of a new unique identifier.");
16
17 #define _MSI_UUIDCREATE_METHODDEF \
18 {"UuidCreate", (PyCFunction)_msi_UuidCreate, METH_NOARGS, _msi_UuidCreate__doc__},
19
20 static PyObject *
21 _msi_UuidCreate_impl(PyObject *module);
22
23 static PyObject *
24 _msi_UuidCreate(PyObject *module, PyObject *Py_UNUSED(ignored))
25 {
26 return _msi_UuidCreate_impl(module);
27 }
28
29 PyDoc_STRVAR(_msi_FCICreate__doc__,
30 "FCICreate($module, cabname, files, /)\n"
31 "--\n"
32 "\n"
33 "Create a new CAB file.\n"
34 "\n"
35 " cabname\n"
36 " the name of the CAB file\n"
37 " files\n"
38 " a list of tuples, each containing the name of the file on disk,\n"
39 " and the name of the file inside the CAB file");
40
41 #define _MSI_FCICREATE_METHODDEF \
42 {"FCICreate", _PyCFunction_CAST(_msi_FCICreate), METH_FASTCALL, _msi_FCICreate__doc__},
43
44 static PyObject *
45 _msi_FCICreate_impl(PyObject *module, const char *cabname, PyObject *files);
46
47 static PyObject *
48 _msi_FCICreate(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
49 {
50 PyObject *return_value = NULL;
51 const char *cabname;
52 PyObject *files;
53
54 if (!_PyArg_CheckPositional("FCICreate", nargs, 2, 2)) {
55 goto exit;
56 }
57 if (!PyUnicode_Check(args[0])) {
58 _PyArg_BadArgument("FCICreate", "argument 1", "str", args[0]);
59 goto exit;
60 }
61 Py_ssize_t cabname_length;
62 cabname = PyUnicode_AsUTF8AndSize(args[0], &cabname_length);
63 if (cabname == NULL) {
64 goto exit;
65 }
66 if (strlen(cabname) != (size_t)cabname_length) {
67 PyErr_SetString(PyExc_ValueError, "embedded null character");
68 goto exit;
69 }
70 files = args[1];
71 return_value = _msi_FCICreate_impl(module, cabname, files);
72
73 exit:
74 return return_value;
75 }
76
77 PyDoc_STRVAR(_msi_Database_Close__doc__,
78 "Close($self, /)\n"
79 "--\n"
80 "\n"
81 "Close the database object.");
82
83 #define _MSI_DATABASE_CLOSE_METHODDEF \
84 {"Close", (PyCFunction)_msi_Database_Close, METH_NOARGS, _msi_Database_Close__doc__},
85
86 static PyObject *
87 _msi_Database_Close_impl(msiobj *self);
88
89 static PyObject *
90 _msi_Database_Close(msiobj *self, PyObject *Py_UNUSED(ignored))
91 {
92 return _msi_Database_Close_impl(self);
93 }
94
95 PyDoc_STRVAR(_msi_Record_GetFieldCount__doc__,
96 "GetFieldCount($self, /)\n"
97 "--\n"
98 "\n"
99 "Return the number of fields of the record.");
100
101 #define _MSI_RECORD_GETFIELDCOUNT_METHODDEF \
102 {"GetFieldCount", (PyCFunction)_msi_Record_GetFieldCount, METH_NOARGS, _msi_Record_GetFieldCount__doc__},
103
104 static PyObject *
105 _msi_Record_GetFieldCount_impl(msiobj *self);
106
107 static PyObject *
108 _msi_Record_GetFieldCount(msiobj *self, PyObject *Py_UNUSED(ignored))
109 {
110 return _msi_Record_GetFieldCount_impl(self);
111 }
112
113 PyDoc_STRVAR(_msi_Record_GetInteger__doc__,
114 "GetInteger($self, field, /)\n"
115 "--\n"
116 "\n"
117 "Return the value of field as an integer where possible.");
118
119 #define _MSI_RECORD_GETINTEGER_METHODDEF \
120 {"GetInteger", (PyCFunction)_msi_Record_GetInteger, METH_O, _msi_Record_GetInteger__doc__},
121
122 static PyObject *
123 _msi_Record_GetInteger_impl(msiobj *self, unsigned int field);
124
125 static PyObject *
126 _msi_Record_GetInteger(msiobj *self, PyObject *arg)
127 {
128 PyObject *return_value = NULL;
129 unsigned int field;
130
131 field = (unsigned int)PyLong_AsUnsignedLongMask(arg);
132 if (field == (unsigned int)-1 && PyErr_Occurred()) {
133 goto exit;
134 }
135 return_value = _msi_Record_GetInteger_impl(self, field);
136
137 exit:
138 return return_value;
139 }
140
141 PyDoc_STRVAR(_msi_Record_GetString__doc__,
142 "GetString($self, field, /)\n"
143 "--\n"
144 "\n"
145 "Return the value of field as a string where possible.");
146
147 #define _MSI_RECORD_GETSTRING_METHODDEF \
148 {"GetString", (PyCFunction)_msi_Record_GetString, METH_O, _msi_Record_GetString__doc__},
149
150 static PyObject *
151 _msi_Record_GetString_impl(msiobj *self, unsigned int field);
152
153 static PyObject *
154 _msi_Record_GetString(msiobj *self, PyObject *arg)
155 {
156 PyObject *return_value = NULL;
157 unsigned int field;
158
159 field = (unsigned int)PyLong_AsUnsignedLongMask(arg);
160 if (field == (unsigned int)-1 && PyErr_Occurred()) {
161 goto exit;
162 }
163 return_value = _msi_Record_GetString_impl(self, field);
164
165 exit:
166 return return_value;
167 }
168
169 PyDoc_STRVAR(_msi_Record_ClearData__doc__,
170 "ClearData($self, /)\n"
171 "--\n"
172 "\n"
173 "Set all fields of the record to 0.");
174
175 #define _MSI_RECORD_CLEARDATA_METHODDEF \
176 {"ClearData", (PyCFunction)_msi_Record_ClearData, METH_NOARGS, _msi_Record_ClearData__doc__},
177
178 static PyObject *
179 _msi_Record_ClearData_impl(msiobj *self);
180
181 static PyObject *
182 _msi_Record_ClearData(msiobj *self, PyObject *Py_UNUSED(ignored))
183 {
184 return _msi_Record_ClearData_impl(self);
185 }
186
187 PyDoc_STRVAR(_msi_Record_SetString__doc__,
188 "SetString($self, field, value, /)\n"
189 "--\n"
190 "\n"
191 "Set field to a string value.");
192
193 #define _MSI_RECORD_SETSTRING_METHODDEF \
194 {"SetString", _PyCFunction_CAST(_msi_Record_SetString), METH_FASTCALL, _msi_Record_SetString__doc__},
195
196 static PyObject *
197 _msi_Record_SetString_impl(msiobj *self, int field, const Py_UNICODE *value);
198
199 static PyObject *
200 _msi_Record_SetString(msiobj *self, PyObject *const *args, Py_ssize_t nargs)
201 {
202 PyObject *return_value = NULL;
203 int field;
204 const Py_UNICODE *value = NULL;
205
206 if (!_PyArg_CheckPositional("SetString", nargs, 2, 2)) {
207 goto exit;
208 }
209 field = _PyLong_AsInt(args[0]);
210 if (field == -1 && PyErr_Occurred()) {
211 goto exit;
212 }
213 if (!PyUnicode_Check(args[1])) {
214 _PyArg_BadArgument("SetString", "argument 2", "str", args[1]);
215 goto exit;
216 }
217 value = PyUnicode_AsWideCharString(args[1], NULL);
218 if (value == NULL) {
219 goto exit;
220 }
221 return_value = _msi_Record_SetString_impl(self, field, value);
222
223 exit:
224 /* Cleanup for value */
225 PyMem_Free((void *)value);
226
227 return return_value;
228 }
229
230 PyDoc_STRVAR(_msi_Record_SetStream__doc__,
231 "SetStream($self, field, value, /)\n"
232 "--\n"
233 "\n"
234 "Set field to the contents of the file named value.");
235
236 #define _MSI_RECORD_SETSTREAM_METHODDEF \
237 {"SetStream", _PyCFunction_CAST(_msi_Record_SetStream), METH_FASTCALL, _msi_Record_SetStream__doc__},
238
239 static PyObject *
240 _msi_Record_SetStream_impl(msiobj *self, int field, const Py_UNICODE *value);
241
242 static PyObject *
243 _msi_Record_SetStream(msiobj *self, PyObject *const *args, Py_ssize_t nargs)
244 {
245 PyObject *return_value = NULL;
246 int field;
247 const Py_UNICODE *value = NULL;
248
249 if (!_PyArg_CheckPositional("SetStream", nargs, 2, 2)) {
250 goto exit;
251 }
252 field = _PyLong_AsInt(args[0]);
253 if (field == -1 && PyErr_Occurred()) {
254 goto exit;
255 }
256 if (!PyUnicode_Check(args[1])) {
257 _PyArg_BadArgument("SetStream", "argument 2", "str", args[1]);
258 goto exit;
259 }
260 value = PyUnicode_AsWideCharString(args[1], NULL);
261 if (value == NULL) {
262 goto exit;
263 }
264 return_value = _msi_Record_SetStream_impl(self, field, value);
265
266 exit:
267 /* Cleanup for value */
268 PyMem_Free((void *)value);
269
270 return return_value;
271 }
272
273 PyDoc_STRVAR(_msi_Record_SetInteger__doc__,
274 "SetInteger($self, field, value, /)\n"
275 "--\n"
276 "\n"
277 "Set field to an integer value.");
278
279 #define _MSI_RECORD_SETINTEGER_METHODDEF \
280 {"SetInteger", _PyCFunction_CAST(_msi_Record_SetInteger), METH_FASTCALL, _msi_Record_SetInteger__doc__},
281
282 static PyObject *
283 _msi_Record_SetInteger_impl(msiobj *self, int field, int value);
284
285 static PyObject *
286 _msi_Record_SetInteger(msiobj *self, PyObject *const *args, Py_ssize_t nargs)
287 {
288 PyObject *return_value = NULL;
289 int field;
290 int value;
291
292 if (!_PyArg_CheckPositional("SetInteger", nargs, 2, 2)) {
293 goto exit;
294 }
295 field = _PyLong_AsInt(args[0]);
296 if (field == -1 && PyErr_Occurred()) {
297 goto exit;
298 }
299 value = _PyLong_AsInt(args[1]);
300 if (value == -1 && PyErr_Occurred()) {
301 goto exit;
302 }
303 return_value = _msi_Record_SetInteger_impl(self, field, value);
304
305 exit:
306 return return_value;
307 }
308
309 PyDoc_STRVAR(_msi_SummaryInformation_GetProperty__doc__,
310 "GetProperty($self, field, /)\n"
311 "--\n"
312 "\n"
313 "Return a property of the summary.\n"
314 "\n"
315 " field\n"
316 " the name of the property, one of the PID_* constants");
317
318 #define _MSI_SUMMARYINFORMATION_GETPROPERTY_METHODDEF \
319 {"GetProperty", (PyCFunction)_msi_SummaryInformation_GetProperty, METH_O, _msi_SummaryInformation_GetProperty__doc__},
320
321 static PyObject *
322 _msi_SummaryInformation_GetProperty_impl(msiobj *self, int field);
323
324 static PyObject *
325 _msi_SummaryInformation_GetProperty(msiobj *self, PyObject *arg)
326 {
327 PyObject *return_value = NULL;
328 int field;
329
330 field = _PyLong_AsInt(arg);
331 if (field == -1 && PyErr_Occurred()) {
332 goto exit;
333 }
334 return_value = _msi_SummaryInformation_GetProperty_impl(self, field);
335
336 exit:
337 return return_value;
338 }
339
340 PyDoc_STRVAR(_msi_SummaryInformation_GetPropertyCount__doc__,
341 "GetPropertyCount($self, /)\n"
342 "--\n"
343 "\n"
344 "Return the number of summary properties.");
345
346 #define _MSI_SUMMARYINFORMATION_GETPROPERTYCOUNT_METHODDEF \
347 {"GetPropertyCount", (PyCFunction)_msi_SummaryInformation_GetPropertyCount, METH_NOARGS, _msi_SummaryInformation_GetPropertyCount__doc__},
348
349 static PyObject *
350 _msi_SummaryInformation_GetPropertyCount_impl(msiobj *self);
351
352 static PyObject *
353 _msi_SummaryInformation_GetPropertyCount(msiobj *self, PyObject *Py_UNUSED(ignored))
354 {
355 return _msi_SummaryInformation_GetPropertyCount_impl(self);
356 }
357
358 PyDoc_STRVAR(_msi_SummaryInformation_SetProperty__doc__,
359 "SetProperty($self, field, value, /)\n"
360 "--\n"
361 "\n"
362 "Set a property.\n"
363 "\n"
364 " field\n"
365 " the name of the property, one of the PID_* constants\n"
366 " value\n"
367 " the new value of the property (integer or string)");
368
369 #define _MSI_SUMMARYINFORMATION_SETPROPERTY_METHODDEF \
370 {"SetProperty", _PyCFunction_CAST(_msi_SummaryInformation_SetProperty), METH_FASTCALL, _msi_SummaryInformation_SetProperty__doc__},
371
372 static PyObject *
373 _msi_SummaryInformation_SetProperty_impl(msiobj *self, int field,
374 PyObject *data);
375
376 static PyObject *
377 _msi_SummaryInformation_SetProperty(msiobj *self, PyObject *const *args, Py_ssize_t nargs)
378 {
379 PyObject *return_value = NULL;
380 int field;
381 PyObject *data;
382
383 if (!_PyArg_CheckPositional("SetProperty", nargs, 2, 2)) {
384 goto exit;
385 }
386 field = _PyLong_AsInt(args[0]);
387 if (field == -1 && PyErr_Occurred()) {
388 goto exit;
389 }
390 data = args[1];
391 return_value = _msi_SummaryInformation_SetProperty_impl(self, field, data);
392
393 exit:
394 return return_value;
395 }
396
397 PyDoc_STRVAR(_msi_SummaryInformation_Persist__doc__,
398 "Persist($self, /)\n"
399 "--\n"
400 "\n"
401 "Write the modified properties to the summary information stream.");
402
403 #define _MSI_SUMMARYINFORMATION_PERSIST_METHODDEF \
404 {"Persist", (PyCFunction)_msi_SummaryInformation_Persist, METH_NOARGS, _msi_SummaryInformation_Persist__doc__},
405
406 static PyObject *
407 _msi_SummaryInformation_Persist_impl(msiobj *self);
408
409 static PyObject *
410 _msi_SummaryInformation_Persist(msiobj *self, PyObject *Py_UNUSED(ignored))
411 {
412 return _msi_SummaryInformation_Persist_impl(self);
413 }
414
415 PyDoc_STRVAR(_msi_View_Execute__doc__,
416 "Execute($self, params, /)\n"
417 "--\n"
418 "\n"
419 "Execute the SQL query of the view.\n"
420 "\n"
421 " params\n"
422 " a record describing actual values of the parameter tokens\n"
423 " in the query or None");
424
425 #define _MSI_VIEW_EXECUTE_METHODDEF \
426 {"Execute", (PyCFunction)_msi_View_Execute, METH_O, _msi_View_Execute__doc__},
427
428 PyDoc_STRVAR(_msi_View_Fetch__doc__,
429 "Fetch($self, /)\n"
430 "--\n"
431 "\n"
432 "Return a result record of the query.");
433
434 #define _MSI_VIEW_FETCH_METHODDEF \
435 {"Fetch", (PyCFunction)_msi_View_Fetch, METH_NOARGS, _msi_View_Fetch__doc__},
436
437 static PyObject *
438 _msi_View_Fetch_impl(msiobj *self);
439
440 static PyObject *
441 _msi_View_Fetch(msiobj *self, PyObject *Py_UNUSED(ignored))
442 {
443 return _msi_View_Fetch_impl(self);
444 }
445
446 PyDoc_STRVAR(_msi_View_GetColumnInfo__doc__,
447 "GetColumnInfo($self, kind, /)\n"
448 "--\n"
449 "\n"
450 "Return a record describing the columns of the view.\n"
451 "\n"
452 " kind\n"
453 " MSICOLINFO_NAMES or MSICOLINFO_TYPES");
454
455 #define _MSI_VIEW_GETCOLUMNINFO_METHODDEF \
456 {"GetColumnInfo", (PyCFunction)_msi_View_GetColumnInfo, METH_O, _msi_View_GetColumnInfo__doc__},
457
458 static PyObject *
459 _msi_View_GetColumnInfo_impl(msiobj *self, int kind);
460
461 static PyObject *
462 _msi_View_GetColumnInfo(msiobj *self, PyObject *arg)
463 {
464 PyObject *return_value = NULL;
465 int kind;
466
467 kind = _PyLong_AsInt(arg);
468 if (kind == -1 && PyErr_Occurred()) {
469 goto exit;
470 }
471 return_value = _msi_View_GetColumnInfo_impl(self, kind);
472
473 exit:
474 return return_value;
475 }
476
477 PyDoc_STRVAR(_msi_View_Modify__doc__,
478 "Modify($self, kind, data, /)\n"
479 "--\n"
480 "\n"
481 "Modify the view.\n"
482 "\n"
483 " kind\n"
484 " one of the MSIMODIFY_* constants\n"
485 " data\n"
486 " a record describing the new data");
487
488 #define _MSI_VIEW_MODIFY_METHODDEF \
489 {"Modify", _PyCFunction_CAST(_msi_View_Modify), METH_FASTCALL, _msi_View_Modify__doc__},
490
491 static PyObject *
492 _msi_View_Modify_impl(msiobj *self, int kind, PyObject *data);
493
494 static PyObject *
495 _msi_View_Modify(msiobj *self, PyObject *const *args, Py_ssize_t nargs)
496 {
497 PyObject *return_value = NULL;
498 int kind;
499 PyObject *data;
500
501 if (!_PyArg_CheckPositional("Modify", nargs, 2, 2)) {
502 goto exit;
503 }
504 kind = _PyLong_AsInt(args[0]);
505 if (kind == -1 && PyErr_Occurred()) {
506 goto exit;
507 }
508 data = args[1];
509 return_value = _msi_View_Modify_impl(self, kind, data);
510
511 exit:
512 return return_value;
513 }
514
515 PyDoc_STRVAR(_msi_View_Close__doc__,
516 "Close($self, /)\n"
517 "--\n"
518 "\n"
519 "Close the view.");
520
521 #define _MSI_VIEW_CLOSE_METHODDEF \
522 {"Close", (PyCFunction)_msi_View_Close, METH_NOARGS, _msi_View_Close__doc__},
523
524 static PyObject *
525 _msi_View_Close_impl(msiobj *self);
526
527 static PyObject *
528 _msi_View_Close(msiobj *self, PyObject *Py_UNUSED(ignored))
529 {
530 return _msi_View_Close_impl(self);
531 }
532
533 PyDoc_STRVAR(_msi_Database_OpenView__doc__,
534 "OpenView($self, sql, /)\n"
535 "--\n"
536 "\n"
537 "Return a view object.\n"
538 "\n"
539 " sql\n"
540 " the SQL statement to execute");
541
542 #define _MSI_DATABASE_OPENVIEW_METHODDEF \
543 {"OpenView", (PyCFunction)_msi_Database_OpenView, METH_O, _msi_Database_OpenView__doc__},
544
545 static PyObject *
546 _msi_Database_OpenView_impl(msiobj *self, const Py_UNICODE *sql);
547
548 static PyObject *
549 _msi_Database_OpenView(msiobj *self, PyObject *arg)
550 {
551 PyObject *return_value = NULL;
552 const Py_UNICODE *sql = NULL;
553
554 if (!PyUnicode_Check(arg)) {
555 _PyArg_BadArgument("OpenView", "argument", "str", arg);
556 goto exit;
557 }
558 sql = PyUnicode_AsWideCharString(arg, NULL);
559 if (sql == NULL) {
560 goto exit;
561 }
562 return_value = _msi_Database_OpenView_impl(self, sql);
563
564 exit:
565 /* Cleanup for sql */
566 PyMem_Free((void *)sql);
567
568 return return_value;
569 }
570
571 PyDoc_STRVAR(_msi_Database_Commit__doc__,
572 "Commit($self, /)\n"
573 "--\n"
574 "\n"
575 "Commit the changes pending in the current transaction.");
576
577 #define _MSI_DATABASE_COMMIT_METHODDEF \
578 {"Commit", (PyCFunction)_msi_Database_Commit, METH_NOARGS, _msi_Database_Commit__doc__},
579
580 static PyObject *
581 _msi_Database_Commit_impl(msiobj *self);
582
583 static PyObject *
584 _msi_Database_Commit(msiobj *self, PyObject *Py_UNUSED(ignored))
585 {
586 return _msi_Database_Commit_impl(self);
587 }
588
589 PyDoc_STRVAR(_msi_Database_GetSummaryInformation__doc__,
590 "GetSummaryInformation($self, count, /)\n"
591 "--\n"
592 "\n"
593 "Return a new summary information object.\n"
594 "\n"
595 " count\n"
596 " the maximum number of updated values");
597
598 #define _MSI_DATABASE_GETSUMMARYINFORMATION_METHODDEF \
599 {"GetSummaryInformation", (PyCFunction)_msi_Database_GetSummaryInformation, METH_O, _msi_Database_GetSummaryInformation__doc__},
600
601 static PyObject *
602 _msi_Database_GetSummaryInformation_impl(msiobj *self, int count);
603
604 static PyObject *
605 _msi_Database_GetSummaryInformation(msiobj *self, PyObject *arg)
606 {
607 PyObject *return_value = NULL;
608 int count;
609
610 count = _PyLong_AsInt(arg);
611 if (count == -1 && PyErr_Occurred()) {
612 goto exit;
613 }
614 return_value = _msi_Database_GetSummaryInformation_impl(self, count);
615
616 exit:
617 return return_value;
618 }
619
620 PyDoc_STRVAR(_msi_OpenDatabase__doc__,
621 "OpenDatabase($module, path, persist, /)\n"
622 "--\n"
623 "\n"
624 "Return a new database object.\n"
625 "\n"
626 " path\n"
627 " the file name of the MSI file\n"
628 " persist\n"
629 " the persistence mode");
630
631 #define _MSI_OPENDATABASE_METHODDEF \
632 {"OpenDatabase", _PyCFunction_CAST(_msi_OpenDatabase), METH_FASTCALL, _msi_OpenDatabase__doc__},
633
634 static PyObject *
635 _msi_OpenDatabase_impl(PyObject *module, const Py_UNICODE *path, int persist);
636
637 static PyObject *
638 _msi_OpenDatabase(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
639 {
640 PyObject *return_value = NULL;
641 const Py_UNICODE *path = NULL;
642 int persist;
643
644 if (!_PyArg_CheckPositional("OpenDatabase", nargs, 2, 2)) {
645 goto exit;
646 }
647 if (!PyUnicode_Check(args[0])) {
648 _PyArg_BadArgument("OpenDatabase", "argument 1", "str", args[0]);
649 goto exit;
650 }
651 path = PyUnicode_AsWideCharString(args[0], NULL);
652 if (path == NULL) {
653 goto exit;
654 }
655 persist = _PyLong_AsInt(args[1]);
656 if (persist == -1 && PyErr_Occurred()) {
657 goto exit;
658 }
659 return_value = _msi_OpenDatabase_impl(module, path, persist);
660
661 exit:
662 /* Cleanup for path */
663 PyMem_Free((void *)path);
664
665 return return_value;
666 }
667
668 PyDoc_STRVAR(_msi_CreateRecord__doc__,
669 "CreateRecord($module, count, /)\n"
670 "--\n"
671 "\n"
672 "Return a new record object.\n"
673 "\n"
674 " count\n"
675 " the number of fields of the record");
676
677 #define _MSI_CREATERECORD_METHODDEF \
678 {"CreateRecord", (PyCFunction)_msi_CreateRecord, METH_O, _msi_CreateRecord__doc__},
679
680 static PyObject *
681 _msi_CreateRecord_impl(PyObject *module, int count);
682
683 static PyObject *
684 _msi_CreateRecord(PyObject *module, PyObject *arg)
685 {
686 PyObject *return_value = NULL;
687 int count;
688
689 count = _PyLong_AsInt(arg);
690 if (count == -1 && PyErr_Occurred()) {
691 goto exit;
692 }
693 return_value = _msi_CreateRecord_impl(module, count);
694
695 exit:
696 return return_value;
697 }
698 /*[clinic end generated code: output=7d083c61679eed83 input=a9049054013a1b77]*/