mirror of
				https://github.com/python/cpython.git
				synced 2025-11-03 15:11:34 +00:00 
			
		
		
		
	Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
number of tests, all because of the codecs/_multibytecodecs issue described here (it's not a Py3K issue, just something Py3K discovers): http://mail.python.org/pipermail/python-dev/2006-April/064051.html Hye-Shik Chang promised to look for a fix, so no need to fix it here. The tests that are expected to break are: test_codecencodings_cn test_codecencodings_hk test_codecencodings_jp test_codecencodings_kr test_codecencodings_tw test_codecs test_multibytecodec This merge fixes an actual test failure (test_weakref) in this branch, though, so I believe merging is the right thing to do anyway.
This commit is contained in:
		
							parent
							
								
									9ada3d6e29
								
							
						
					
					
						commit
						49fd7fa443
					
				
					 640 changed files with 52240 additions and 18408 deletions
				
			
		| 
						 | 
				
			
			@ -62,6 +62,7 @@ Local naming conventions:
 | 
			
		|||
*/
 | 
			
		||||
 | 
			
		||||
#include "Python.h"
 | 
			
		||||
#include "structmember.h"
 | 
			
		||||
 | 
			
		||||
#undef MAX
 | 
			
		||||
#define MAX(x, y) ((x) < (y) ? (y) : (x))
 | 
			
		||||
| 
						 | 
				
			
			@ -967,7 +968,18 @@ makesockaddr(int sockfd, struct sockaddr *addr, int addrlen, int proto)
 | 
			
		|||
	case AF_UNIX:
 | 
			
		||||
	{
 | 
			
		||||
		struct sockaddr_un *a = (struct sockaddr_un *) addr;
 | 
			
		||||
		return PyString_FromString(a->sun_path);
 | 
			
		||||
#ifdef linux
 | 
			
		||||
		if (a->sun_path[0] == 0) {  /* Linux abstract namespace */
 | 
			
		||||
			addrlen -= (sizeof(*a) - sizeof(a->sun_path));
 | 
			
		||||
			return PyString_FromStringAndSize(a->sun_path,
 | 
			
		||||
							  addrlen);
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
#endif /* linux */
 | 
			
		||||
		{
 | 
			
		||||
			/* regular NULL-terminated string */
 | 
			
		||||
			return PyString_FromString(a->sun_path);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
#endif /* AF_UNIX */
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1097,14 +1109,28 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
 | 
			
		|||
		addr = (struct sockaddr_un*)&(s->sock_addr).un;
 | 
			
		||||
		if (!PyArg_Parse(args, "t#", &path, &len))
 | 
			
		||||
			return 0;
 | 
			
		||||
		if (len > sizeof addr->sun_path) {
 | 
			
		||||
			PyErr_SetString(socket_error,
 | 
			
		||||
					"AF_UNIX path too long");
 | 
			
		||||
			return 0;
 | 
			
		||||
#ifdef linux
 | 
			
		||||
		if (len > 0 && path[0] == 0) {
 | 
			
		||||
			/* Linux abstract namespace extension */
 | 
			
		||||
			if (len > sizeof addr->sun_path) {
 | 
			
		||||
				PyErr_SetString(socket_error,
 | 
			
		||||
						"AF_UNIX path too long");
 | 
			
		||||
				return 0;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
#endif /* linux */
 | 
			
		||||
                {
 | 
			
		||||
			/* regular NULL-terminated string */
 | 
			
		||||
			if (len >= sizeof addr->sun_path) {
 | 
			
		||||
				PyErr_SetString(socket_error,
 | 
			
		||||
						"AF_UNIX path too long");
 | 
			
		||||
				return 0;
 | 
			
		||||
			}
 | 
			
		||||
			addr->sun_path[len] = 0;
 | 
			
		||||
		}
 | 
			
		||||
		addr->sun_family = s->sock_family;
 | 
			
		||||
		memcpy(addr->sun_path, path, len);
 | 
			
		||||
		addr->sun_path[len] = 0;
 | 
			
		||||
		*addr_ret = (struct sockaddr *) addr;
 | 
			
		||||
#if defined(PYOS_OS2)
 | 
			
		||||
		*len_ret = sizeof(*addr);
 | 
			
		||||
| 
						 | 
				
			
			@ -2207,18 +2233,20 @@ sock_recvfrom(PySocketSockObject *s, PyObject *args)
 | 
			
		|||
	Py_BEGIN_ALLOW_THREADS
 | 
			
		||||
	memset(&addrbuf, 0, addrlen);
 | 
			
		||||
	timeout = internal_select(s, 0);
 | 
			
		||||
	if (!timeout)
 | 
			
		||||
		n = recvfrom(s->sock_fd, PyString_AS_STRING(buf), len, flags,
 | 
			
		||||
	if (!timeout) {
 | 
			
		||||
#ifndef MS_WINDOWS
 | 
			
		||||
#if defined(PYOS_OS2) && !defined(PYCC_GCC)
 | 
			
		||||
			     (struct sockaddr *) &addrbuf, &addrlen
 | 
			
		||||
		n = recvfrom(s->sock_fd, PyString_AS_STRING(buf), len, flags,
 | 
			
		||||
			     (struct sockaddr *) &addrbuf, &addrlen);
 | 
			
		||||
#else
 | 
			
		||||
			     (void *) &addrbuf, &addrlen
 | 
			
		||||
		n = recvfrom(s->sock_fd, PyString_AS_STRING(buf), len, flags,
 | 
			
		||||
			     (void *) &addrbuf, &addrlen);
 | 
			
		||||
#endif
 | 
			
		||||
#else
 | 
			
		||||
			     (struct sockaddr *) &addrbuf, &addrlen
 | 
			
		||||
		n = recvfrom(s->sock_fd, PyString_AS_STRING(buf), len, flags,
 | 
			
		||||
			     (struct sockaddr *) &addrbuf, &addrlen);
 | 
			
		||||
#endif
 | 
			
		||||
			);
 | 
			
		||||
	}
 | 
			
		||||
	Py_END_ALLOW_THREADS
 | 
			
		||||
 | 
			
		||||
	if (timeout) {
 | 
			
		||||
| 
						 | 
				
			
			@ -2502,6 +2530,14 @@ static PyMethodDef sock_methods[] = {
 | 
			
		|||
	{NULL,			NULL}		/* sentinel */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* SockObject members */
 | 
			
		||||
static PyMemberDef sock_memberlist[] = {
 | 
			
		||||
       {"family", T_INT, offsetof(PySocketSockObject, sock_family), READONLY, "the socket family"},
 | 
			
		||||
       {"type", T_INT, offsetof(PySocketSockObject, sock_type), READONLY, "the socket type"},
 | 
			
		||||
       {"proto", T_INT, offsetof(PySocketSockObject, sock_proto), READONLY, "the socket protocol"},
 | 
			
		||||
       {"timeout", T_DOUBLE, offsetof(PySocketSockObject, sock_timeout), READONLY, "the socket timeout"},
 | 
			
		||||
       {0},
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* Deallocate a socket object in response to the last Py_DECREF().
 | 
			
		||||
   First close the file description. */
 | 
			
		||||
| 
						 | 
				
			
			@ -2625,7 +2661,7 @@ static PyTypeObject sock_type = {
 | 
			
		|||
	0,					/* tp_iter */
 | 
			
		||||
	0,					/* tp_iternext */
 | 
			
		||||
	sock_methods,				/* tp_methods */
 | 
			
		||||
	0,					/* tp_members */
 | 
			
		||||
	sock_memberlist,			/* tp_members */
 | 
			
		||||
	0,					/* tp_getset */
 | 
			
		||||
	0,					/* tp_base */
 | 
			
		||||
	0,					/* tp_dict */
 | 
			
		||||
| 
						 | 
				
			
			@ -3159,7 +3195,8 @@ socket_fromfd(PyObject *self, PyObject *args)
 | 
			
		|||
PyDoc_STRVAR(fromfd_doc,
 | 
			
		||||
"fromfd(fd, family, type[, proto]) -> socket object\n\
 | 
			
		||||
\n\
 | 
			
		||||
Create a socket object from the given file descriptor.\n\
 | 
			
		||||
Create a socket object from a duplicate of the given\n\
 | 
			
		||||
file descriptor.\n\
 | 
			
		||||
The remaining arguments are the same as for socket().");
 | 
			
		||||
 | 
			
		||||
#endif /* NO_DUP */
 | 
			
		||||
| 
						 | 
				
			
			@ -4026,7 +4063,12 @@ init_socket(void)
 | 
			
		|||
	/*  */
 | 
			
		||||
	PyModule_AddIntConstant(m, "AF_NETLINK", AF_NETLINK);
 | 
			
		||||
	PyModule_AddIntConstant(m, "NETLINK_ROUTE", NETLINK_ROUTE);
 | 
			
		||||
#ifdef NETLINK_SKIP
 | 
			
		||||
	PyModule_AddIntConstant(m, "NETLINK_SKIP", NETLINK_SKIP);
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef NETLINK_W1
 | 
			
		||||
	PyModule_AddIntConstant(m, "NETLINK_W1", NETLINK_W1);
 | 
			
		||||
#endif
 | 
			
		||||
	PyModule_AddIntConstant(m, "NETLINK_USERSOCK", NETLINK_USERSOCK);
 | 
			
		||||
	PyModule_AddIntConstant(m, "NETLINK_FIREWALL", NETLINK_FIREWALL);
 | 
			
		||||
#ifdef NETLINK_TCPDIAG
 | 
			
		||||
| 
						 | 
				
			
			@ -4038,12 +4080,18 @@ init_socket(void)
 | 
			
		|||
#ifdef NETLINK_XFRM
 | 
			
		||||
	PyModule_AddIntConstant(m, "NETLINK_XFRM", NETLINK_XFRM);
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef NETLINK_ARPD
 | 
			
		||||
	PyModule_AddIntConstant(m, "NETLINK_ARPD", NETLINK_ARPD);
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef NETLINK_ROUTE6
 | 
			
		||||
	PyModule_AddIntConstant(m, "NETLINK_ROUTE6", NETLINK_ROUTE6);
 | 
			
		||||
#endif
 | 
			
		||||
	PyModule_AddIntConstant(m, "NETLINK_IP6_FW", NETLINK_IP6_FW);
 | 
			
		||||
	PyModule_AddIntConstant(m, "NETLINK_DNRTMSG", NETLINK_DNRTMSG);
 | 
			
		||||
#ifdef NETLINK_TAPBASE
 | 
			
		||||
	PyModule_AddIntConstant(m, "NETLINK_TAPBASE", NETLINK_TAPBASE);
 | 
			
		||||
#endif
 | 
			
		||||
#endif /* AF_NETLINK */
 | 
			
		||||
#ifdef AF_ROUTE
 | 
			
		||||
	/* Alias to emulate 4.4BSD */
 | 
			
		||||
	PyModule_AddIntConstant(m, "AF_ROUTE", AF_ROUTE);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue