From: Roland McGrath Date: Mon, 15 Mar 1999 14:33:27 +0000 (+0000) Subject: 1999-03-15 Mark Kettenis X-Git-Tag: upstream/2.20~20479 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d012636f1f27cfd477aa87faabca089387655b25;p=platform%2Fupstream%2Flinaro-glibc.git 1999-03-15 Mark Kettenis * sysdeps/mach/hurd/poll.c (__poll): Correctly pass NULL to _hurd_select if TIMEMOUT is -1. 1999-03-15 Mark Kettenis * sysdeps/mach/hurd/recvfrom.c (recvfrom): Allow ADDR to be NULL. --- diff --git a/ChangeLog b/ChangeLog index b083279..aa1c414 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +1999-03-15 Mark Kettenis + + * sysdeps/mach/hurd/poll.c (__poll): Correctly pass NULL to + _hurd_select if TIMEMOUT is -1. + +1999-03-15 Mark Kettenis + + * sysdeps/mach/hurd/recvfrom.c (recvfrom): Allow ADDR to be NULL. + 1999-03-15 Ulrich Drepper * elf/dl-load.c: Compute rtld_search_dir array size correctly. diff --git a/sysdeps/mach/hurd/recvfrom.c b/sysdeps/mach/hurd/recvfrom.c index ab41612..b395286 100644 --- a/sysdeps/mach/hurd/recvfrom.c +++ b/sysdeps/mach/hurd/recvfrom.c @@ -23,9 +23,10 @@ #include #include -/* Read N bytes into BUF through socket FD from peer - at address ADDR (which is ADDR_LEN bytes long). - Returns the number read or -1 for errors. */ +/* Read N bytes into BUF through socket FD. + If ADDR is not NULL, fill in *ADDR_LEN bytes of it with tha address of + the sender, and store the actual size of the address in *ADDR_LEN. + Returns the number of bytes read or -1 for errors. */ int recvfrom (fd, buf, n, flags, addrarg, addr_len) int fd; @@ -53,37 +54,43 @@ recvfrom (fd, buf, n, flags, addrarg, addr_len) n))) return __hurd_dfail (fd, err); - /* Get address data for the returned address port. */ - { - char *buf = (char *) addr; - mach_msg_type_number_t buflen = *addr_len; - int type; + /* Get address data for the returned address port if requested. */ + if (addr != NULL) + { + char *buf = (char *) addr; + mach_msg_type_number_t buflen = *addr_len; + int type; + + err = __socket_whatis_address (addrport, &type, &buf, &buflen); + if (err == EOPNOTSUPP) + /* If the protocol server can't tell us the address, just return a + zero-length one. */ + { + buf = (char *)addr; + buflen = 0; + err = 0; + } - err = __socket_whatis_address (addrport, &type, &buf, &buflen); - if (err == EOPNOTSUPP) - /* If the protocol server can't tell us the address, just return a - zero-length one. */ - { - buf = (char *)addr; - buflen = 0; - err = 0; - } - __mach_port_deallocate (__mach_task_self (), addrport); - if (err) - return __hurd_dfail (fd, err); + if (err) + { + __mach_port_deallocate (__mach_task_self (), addrport); + return __hurd_dfail (fd, err); + } + + if (*addr_len > buflen) + *addr_len = buflen; - if (*addr_len > buflen) - *addr_len = buflen; - - if (buf != (char *) addr) - { - memcpy (addr, buf, *addr_len); - __vm_deallocate (__mach_task_self (), (vm_address_t) buf, buflen); - } + if (buf != (char *) addr) + { + memcpy (addr, buf, *addr_len); + __vm_deallocate (__mach_task_self (), (vm_address_t) buf, buflen); + } + + if (buflen > 0) + addr->sa_family = type; + } - if (buflen > 0) - addr->sa_family = type; - } + __mach_port_deallocate (__mach_task_self (), addrport); /* Toss control data; we don't care. */ __vm_deallocate (__mach_task_self (), (vm_address_t) cdata, clen);