mirror of
https://github.com/python/cpython.git
synced 2025-08-22 01:35:16 +00:00
Recorded merge of revisions 81029 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk ........ r81029 | antoine.pitrou | 2010-05-09 16:46:46 +0200 (dim., 09 mai 2010) | 3 lines Untabify C files. Will watch buildbots. ........
This commit is contained in:
parent
ba32864b2d
commit
c7c96a90bc
321 changed files with 195492 additions and 195492 deletions
|
@ -17,7 +17,7 @@
|
|||
# include <ws2tcpip.h>
|
||||
/* VC6 is shipped with old platform headers, and does not have MSTcpIP.h
|
||||
* Separate SDKs have all the functions we want, but older ones don't have
|
||||
* any version information.
|
||||
* any version information.
|
||||
* I use SIO_GET_MULTICAST_FILTER to detect a decent SDK.
|
||||
*/
|
||||
# ifdef SIO_GET_MULTICAST_FILTER
|
||||
|
@ -76,43 +76,43 @@ extern "C" {
|
|||
#endif
|
||||
|
||||
/* Python module and C API name */
|
||||
#define PySocket_MODULE_NAME "_socket"
|
||||
#define PySocket_CAPI_NAME "CAPI"
|
||||
#define PySocket_MODULE_NAME "_socket"
|
||||
#define PySocket_CAPI_NAME "CAPI"
|
||||
|
||||
/* Abstract the socket file descriptor type */
|
||||
#ifdef MS_WINDOWS
|
||||
typedef SOCKET SOCKET_T;
|
||||
# ifdef MS_WIN64
|
||||
# define SIZEOF_SOCKET_T 8
|
||||
# else
|
||||
# define SIZEOF_SOCKET_T 4
|
||||
# endif
|
||||
# ifdef MS_WIN64
|
||||
# define SIZEOF_SOCKET_T 8
|
||||
# else
|
||||
# define SIZEOF_SOCKET_T 4
|
||||
# endif
|
||||
#else
|
||||
typedef int SOCKET_T;
|
||||
# define SIZEOF_SOCKET_T SIZEOF_INT
|
||||
# define SIZEOF_SOCKET_T SIZEOF_INT
|
||||
#endif
|
||||
|
||||
/* Socket address */
|
||||
typedef union sock_addr {
|
||||
struct sockaddr_in in;
|
||||
struct sockaddr_in in;
|
||||
#ifdef AF_UNIX
|
||||
struct sockaddr_un un;
|
||||
struct sockaddr_un un;
|
||||
#endif
|
||||
#ifdef AF_NETLINK
|
||||
struct sockaddr_nl nl;
|
||||
struct sockaddr_nl nl;
|
||||
#endif
|
||||
#ifdef ENABLE_IPV6
|
||||
struct sockaddr_in6 in6;
|
||||
struct sockaddr_storage storage;
|
||||
struct sockaddr_in6 in6;
|
||||
struct sockaddr_storage storage;
|
||||
#endif
|
||||
#ifdef HAVE_BLUETOOTH_BLUETOOTH_H
|
||||
struct sockaddr_l2 bt_l2;
|
||||
struct sockaddr_rc bt_rc;
|
||||
struct sockaddr_sco bt_sco;
|
||||
struct sockaddr_hci bt_hci;
|
||||
struct sockaddr_l2 bt_l2;
|
||||
struct sockaddr_rc bt_rc;
|
||||
struct sockaddr_sco bt_sco;
|
||||
struct sockaddr_hci bt_hci;
|
||||
#endif
|
||||
#ifdef HAVE_NETPACKET_PACKET_H
|
||||
struct sockaddr_ll ll;
|
||||
struct sockaddr_ll ll;
|
||||
#endif
|
||||
} sock_addr_t;
|
||||
|
||||
|
@ -121,16 +121,16 @@ typedef union sock_addr {
|
|||
arguments properly. */
|
||||
|
||||
typedef struct {
|
||||
PyObject_HEAD
|
||||
SOCKET_T sock_fd; /* Socket file descriptor */
|
||||
int sock_family; /* Address family, e.g., AF_INET */
|
||||
int sock_type; /* Socket type, e.g., SOCK_STREAM */
|
||||
int sock_proto; /* Protocol type, usually 0 */
|
||||
PyObject *(*errorhandler)(void); /* Error handler; checks
|
||||
errno, returns NULL and
|
||||
sets a Python exception */
|
||||
double sock_timeout; /* Operation timeout in seconds;
|
||||
0.0 means non-blocking */
|
||||
PyObject_HEAD
|
||||
SOCKET_T sock_fd; /* Socket file descriptor */
|
||||
int sock_family; /* Address family, e.g., AF_INET */
|
||||
int sock_type; /* Socket type, e.g., SOCK_STREAM */
|
||||
int sock_proto; /* Protocol type, usually 0 */
|
||||
PyObject *(*errorhandler)(void); /* Error handler; checks
|
||||
errno, returns NULL and
|
||||
sets a Python exception */
|
||||
double sock_timeout; /* Operation timeout in seconds;
|
||||
0.0 means non-blocking */
|
||||
} PySocketSockObject;
|
||||
|
||||
/* --- C API ----------------------------------------------------*/
|
||||
|
@ -138,7 +138,7 @@ typedef struct {
|
|||
/* Short explanation of what this C API export mechanism does
|
||||
and how it works:
|
||||
|
||||
The _ssl module needs access to the type object defined in
|
||||
The _ssl module needs access to the type object defined in
|
||||
the _socket module. Since cross-DLL linking introduces a lot of
|
||||
problems on many platforms, the "trick" is to wrap the
|
||||
C API of a module in a struct which then gets exported to
|
||||
|
@ -160,24 +160,24 @@ typedef struct {
|
|||
|
||||
Load _socket module and its C API; this sets up the global
|
||||
PySocketModule:
|
||||
|
||||
if (PySocketModule_ImportModuleAndAPI())
|
||||
return;
|
||||
|
||||
if (PySocketModule_ImportModuleAndAPI())
|
||||
return;
|
||||
|
||||
|
||||
Now use the C API as if it were defined in the using
|
||||
module:
|
||||
|
||||
if (!PyArg_ParseTuple(args, "O!|zz:ssl",
|
||||
if (!PyArg_ParseTuple(args, "O!|zz:ssl",
|
||||
|
||||
PySocketModule.Sock_Type,
|
||||
PySocketModule.Sock_Type,
|
||||
|
||||
(PyObject*)&Sock,
|
||||
&key_file, &cert_file))
|
||||
return NULL;
|
||||
(PyObject*)&Sock,
|
||||
&key_file, &cert_file))
|
||||
return NULL;
|
||||
|
||||
Support could easily be extended to export more C APIs/symbols
|
||||
this way. Currently, only the type object is exported,
|
||||
this way. Currently, only the type object is exported,
|
||||
other candidates would be socket constructors and socket
|
||||
access functions.
|
||||
|
||||
|
@ -185,13 +185,13 @@ typedef struct {
|
|||
|
||||
/* C API for usage by other Python modules */
|
||||
typedef struct {
|
||||
PyTypeObject *Sock_Type;
|
||||
PyObject *error;
|
||||
PyTypeObject *Sock_Type;
|
||||
PyObject *error;
|
||||
} PySocketModule_APIObject;
|
||||
|
||||
/* XXX The net effect of the following appears to be to define a function
|
||||
XXX named PySocketModule_APIObject in _ssl.c. It's unclear why it isn't
|
||||
XXX defined there directly.
|
||||
XXX defined there directly.
|
||||
|
||||
>>> It's defined here because other modules might also want to use
|
||||
>>> the C API.
|
||||
|
@ -207,8 +207,8 @@ typedef struct {
|
|||
|
||||
if (!PyArg_ParseTuple(args, "O!|zz:ssl",
|
||||
&PySocketModule.Sock_Type, (PyObject*)&Sock,
|
||||
&key_file, &cert_file))
|
||||
return NULL;
|
||||
&key_file, &cert_file))
|
||||
return NULL;
|
||||
...
|
||||
*/
|
||||
|
||||
|
@ -226,34 +226,34 @@ PySocketModule_APIObject PySocketModule;
|
|||
static
|
||||
int PySocketModule_ImportModuleAndAPI(void)
|
||||
{
|
||||
PyObject *mod = 0, *v = 0;
|
||||
char *apimodule = PySocket_MODULE_NAME;
|
||||
char *apiname = PySocket_CAPI_NAME;
|
||||
void *api;
|
||||
PyObject *mod = 0, *v = 0;
|
||||
char *apimodule = PySocket_MODULE_NAME;
|
||||
char *apiname = PySocket_CAPI_NAME;
|
||||
void *api;
|
||||
|
||||
DPRINTF("Importing the %s C API...\n", apimodule);
|
||||
mod = PyImport_ImportModuleNoBlock(apimodule);
|
||||
if (mod == NULL)
|
||||
goto onError;
|
||||
DPRINTF(" %s package found\n", apimodule);
|
||||
v = PyObject_GetAttrString(mod, apiname);
|
||||
if (v == NULL)
|
||||
goto onError;
|
||||
Py_DECREF(mod);
|
||||
DPRINTF(" API object %s found\n", apiname);
|
||||
api = PyCObject_AsVoidPtr(v);
|
||||
if (api == NULL)
|
||||
goto onError;
|
||||
Py_DECREF(v);
|
||||
memcpy(&PySocketModule, api, sizeof(PySocketModule));
|
||||
DPRINTF(" API object loaded and initialized.\n");
|
||||
return 0;
|
||||
DPRINTF("Importing the %s C API...\n", apimodule);
|
||||
mod = PyImport_ImportModuleNoBlock(apimodule);
|
||||
if (mod == NULL)
|
||||
goto onError;
|
||||
DPRINTF(" %s package found\n", apimodule);
|
||||
v = PyObject_GetAttrString(mod, apiname);
|
||||
if (v == NULL)
|
||||
goto onError;
|
||||
Py_DECREF(mod);
|
||||
DPRINTF(" API object %s found\n", apiname);
|
||||
api = PyCObject_AsVoidPtr(v);
|
||||
if (api == NULL)
|
||||
goto onError;
|
||||
Py_DECREF(v);
|
||||
memcpy(&PySocketModule, api, sizeof(PySocketModule));
|
||||
DPRINTF(" API object loaded and initialized.\n");
|
||||
return 0;
|
||||
|
||||
onError:
|
||||
DPRINTF(" not found.\n");
|
||||
Py_XDECREF(mod);
|
||||
Py_XDECREF(v);
|
||||
return -1;
|
||||
DPRINTF(" not found.\n");
|
||||
Py_XDECREF(mod);
|
||||
Py_XDECREF(v);
|
||||
return -1;
|
||||
}
|
||||
|
||||
#endif /* !PySocket_BUILDING_SOCKET */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue