Mercurial > cpython-lru_cache-weakref
annotate Modules/_gestalt.c @ 79691:05c8928362ee
Merge __next__ method link fixes with 3.3.
| author | Ezio Melotti <ezio.melotti@gmail.com> |
|---|---|
| date | Fri, 12 Oct 2012 13:46:37 +0300 |
| parents | 2e37fc70e2dd |
| children |
| 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; |
|
73655
2e37fc70e2dd
Fix misuse of PyUnicode_GET_SIZE() => PyUnicode_GET_LENGTH()
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61466
diff
changeset
|
36 if (!PyUnicode_Check(v) || PyUnicode_GetLength(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 } |
