annotate Modules/_gestalt.c @ 78069:a8aa77458e12 3.2

Add c_size_t and c_ssize_t to the ctypes summary table.
author Antoine Pitrou <solipsis@pitrou.net>
date Thu, 12 Jul 2012 20:31:50 +0200
parents cab14be0ada1
children 2e37fc70e2dd
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
47376
aea3c5543d43 add the gestalt module back as _gestalt
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
1 /***********************************************************
aea3c5543d43 add the gestalt module back as _gestalt
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
2 Copyright 1991-1997 by Stichting Mathematisch Centrum, Amsterdam,
aea3c5543d43 add the gestalt module back as _gestalt
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
3 The Netherlands.
aea3c5543d43 add the gestalt module back as _gestalt
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
4
aea3c5543d43 add the gestalt module back as _gestalt
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
5 All Rights Reserved
aea3c5543d43 add the gestalt module back as _gestalt
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
6
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48660
diff changeset
7 Permission to use, copy, modify, and distribute this software and its
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48660
diff changeset
8 documentation for any purpose and without fee is hereby granted,
47376
aea3c5543d43 add the gestalt module back as _gestalt
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
9 provided that the above copyright notice appear in all copies and that
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48660
diff changeset
10 both that copyright notice and this permission notice appear in
47376
aea3c5543d43 add the gestalt module back as _gestalt
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
11 supporting documentation, and that the names of Stichting Mathematisch
aea3c5543d43 add the gestalt module back as _gestalt
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
12 Centrum or CWI not be used in advertising or publicity pertaining to
aea3c5543d43 add the gestalt module back as _gestalt
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
13 distribution of the software without specific, written prior permission.
aea3c5543d43 add the gestalt module back as _gestalt
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
14
aea3c5543d43 add the gestalt module back as _gestalt
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
15 STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO
aea3c5543d43 add the gestalt module back as _gestalt
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
16 THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
aea3c5543d43 add the gestalt module back as _gestalt
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
17 FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE
aea3c5543d43 add the gestalt module back as _gestalt
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
18 FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
aea3c5543d43 add the gestalt module back as _gestalt
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
19 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
aea3c5543d43 add the gestalt module back as _gestalt
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
20 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
aea3c5543d43 add the gestalt module back as _gestalt
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
21 OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
aea3c5543d43 add the gestalt module back as _gestalt
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
22
aea3c5543d43 add the gestalt module back as _gestalt
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
23 ******************************************************************/
aea3c5543d43 add the gestalt module back as _gestalt
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
24
aea3c5543d43 add the gestalt module back as _gestalt
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
25 /* Macintosh Gestalt interface */
aea3c5543d43 add the gestalt module back as _gestalt
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
26
aea3c5543d43 add the gestalt module back as _gestalt
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
27 #include "Python.h"
aea3c5543d43 add the gestalt module back as _gestalt
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
28
aea3c5543d43 add the gestalt module back as _gestalt
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
29 #include <Carbon/Carbon.h>
aea3c5543d43 add the gestalt module back as _gestalt
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
30
aea3c5543d43 add the gestalt module back as _gestalt
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
31 /* Convert a 4-char string object argument to an OSType value */
aea3c5543d43 add the gestalt module back as _gestalt
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
32 static int
aea3c5543d43 add the gestalt module back as _gestalt
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
33 convert_to_OSType(PyObject *v, OSType *pr)
aea3c5543d43 add the gestalt module back as _gestalt
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
34 {
aea3c5543d43 add the gestalt module back as _gestalt
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
35 uint32_t tmp;
aea3c5543d43 add the gestalt module back as _gestalt
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
36 if (!PyUnicode_Check(v) || PyUnicode_GetSize(v) != 4) {
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48660
diff changeset
37 PyErr_SetString(PyExc_TypeError,
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48660
diff changeset
38 "OSType arg must be string of 4 chars");
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48660
diff changeset
39 return 0;
47376
aea3c5543d43 add the gestalt module back as _gestalt
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
40 }
48660
85b67fb5672b Rename PyUnicode_AsString -> _PyUnicode_AsString and
Marc-André Lemburg <mal@egenix.com>
parents: 47637
diff changeset
41 memcpy((char *)&tmp, _PyUnicode_AsString(v), 4);
47376
aea3c5543d43 add the gestalt module back as _gestalt
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
42 *pr = (OSType)ntohl(tmp);
aea3c5543d43 add the gestalt module back as _gestalt
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
43 return 1;
aea3c5543d43 add the gestalt module back as _gestalt
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
44 }
aea3c5543d43 add the gestalt module back as _gestalt
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
45
aea3c5543d43 add the gestalt module back as _gestalt
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
46 static PyObject *
aea3c5543d43 add the gestalt module back as _gestalt
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
47 gestalt_gestalt(PyObject *self, PyObject *args)
aea3c5543d43 add the gestalt module back as _gestalt
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
48 {
aea3c5543d43 add the gestalt module back as _gestalt
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
49 OSErr iErr;
aea3c5543d43 add the gestalt module back as _gestalt
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
50 OSType selector;
aea3c5543d43 add the gestalt module back as _gestalt
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
51 SInt32 response;
aea3c5543d43 add the gestalt module back as _gestalt
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
52 if (!PyArg_ParseTuple(args, "O&", convert_to_OSType, &selector))
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48660
diff changeset
53 return NULL;
47376
aea3c5543d43 add the gestalt module back as _gestalt
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
54 iErr = Gestalt(selector, &response);
aea3c5543d43 add the gestalt module back as _gestalt
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
55 if (iErr != 0) {
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48660
diff changeset
56 PyErr_SetString(PyExc_OSError,
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48660
diff changeset
57 "non-zero exit code!");
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48660
diff changeset
58 return NULL;
47376
aea3c5543d43 add the gestalt module back as _gestalt
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
59 }
aea3c5543d43 add the gestalt module back as _gestalt
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
60 return PyLong_FromLong(response);
aea3c5543d43 add the gestalt module back as _gestalt
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
61 }
aea3c5543d43 add the gestalt module back as _gestalt
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
62
aea3c5543d43 add the gestalt module back as _gestalt
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
63 static struct PyMethodDef gestalt_methods[] = {
aea3c5543d43 add the gestalt module back as _gestalt
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
64 {"gestalt", gestalt_gestalt, METH_VARARGS},
aea3c5543d43 add the gestalt module back as _gestalt
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
65 {NULL, NULL} /* Sentinel */
aea3c5543d43 add the gestalt module back as _gestalt
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
66 };
aea3c5543d43 add the gestalt module back as _gestalt
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
67
47580
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 47376
diff changeset
68 static struct PyModuleDef gestaltmodule = {
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48660
diff changeset
69 PyModuleDef_HEAD_INIT,
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48660
diff changeset
70 "_gestalt",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48660
diff changeset
71 NULL,
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48660
diff changeset
72 -1,
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48660
diff changeset
73 gestalt_methods,
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48660
diff changeset
74 NULL,
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48660
diff changeset
75 NULL,
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48660
diff changeset
76 NULL,
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48660
diff changeset
77 NULL
47580
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 47376
diff changeset
78 };
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 47376
diff changeset
79
47637
5258d4d7de77 fix compiler warning
Benjamin Peterson <benjamin@python.org>
parents: 47580
diff changeset
80 PyMODINIT_FUNC
47580
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 47376
diff changeset
81 PyInit__gestalt(void)
47376
aea3c5543d43 add the gestalt module back as _gestalt
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
82 {
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 48660
diff changeset
83 return PyModule_Create(&gestaltmodule);
47376
aea3c5543d43 add the gestalt module back as _gestalt
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
84 }