diff options
author | David Turner <> | 2009-04-13 17:58:45 -0700 |
---|---|---|
committer | The Android Open Source Project <initial-contribution@android.com> | 2009-04-13 17:58:45 -0700 |
commit | 669c47953c86f489d2a7ce8893bc9a5e1f0620e5 (patch) | |
tree | c02694997e920cda9e6c756984436d438fc6e5bf /sockets.c | |
parent | fff1ae51e389c25e2b19cd087c5e19cd27d40163 (diff) | |
download | external_qemu-669c47953c86f489d2a7ce8893bc9a5e1f0620e5.zip external_qemu-669c47953c86f489d2a7ce8893bc9a5e1f0620e5.tar.gz external_qemu-669c47953c86f489d2a7ce8893bc9a5e1f0620e5.tar.bz2 |
AI 145975: am: CL 145805 Fix a bug in android/console.c that prevented the console "redir add" command from working properly
Fix a bug in sock_address_init_resolve which caused a crashed when getaddrinfo() returned an error.
Original author: digit
Merged from: //branches/cupcake/...
Automated import of CL 145975
Diffstat (limited to 'sockets.c')
-rw-r--r-- | sockets.c | 25 |
1 files changed, 23 insertions, 2 deletions
@@ -624,8 +624,29 @@ sock_address_init_resolve( SockAddress* a, const char* hostname, uint16_t por memset(hints, 0, sizeof(hints)); hints->ai_family = preferIn6 ? AF_INET6 : AF_UNSPEC; - if (getaddrinfo(hostname, NULL, hints, &res) < 0) { - return _fix_errno(); + ret = getaddrinfo(hostname, NULL, hints, &res); + if (ret != 0) { + int err; + + switch (ret) { + case EAI_AGAIN: /* server is down */ + case EAI_FAIL: /* server is sick */ + err = EHOSTDOWN; + break; + + case EAI_NODATA: + case EAI_NONAME: + err = ENOENT; + break; + + case EAI_MEMORY: + err = ENOMEM; + break; + + default: + err = EINVAL; + } + return _set_errno(err); } ret = sock_address_from_bsd( a, res->ai_addr, res->ai_addrlen ); |