diff options
author | Eric Andersen | 2003-12-23 20:37:23 +0000 |
---|---|---|
committer | Eric Andersen | 2003-12-23 20:37:23 +0000 |
commit | 9cccc18141090190083cbe25aa72e37d3f906ca0 (patch) | |
tree | 51192e8c411160baaf9398955847902c5bcc548c /libbb/xconnect.c | |
parent | 27bb79080d675acb70ff6b0c20617c5558ebfaf0 (diff) | |
download | busybox-9cccc18141090190083cbe25aa72e37d3f906ca0.zip busybox-9cccc18141090190083cbe25aa72e37d3f906ca0.tar.gz |
don't mess up errno
Diffstat (limited to 'libbb/xconnect.c')
-rw-r--r-- | libbb/xconnect.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/libbb/xconnect.c b/libbb/xconnect.c index b3619fd..10ba947 100644 --- a/libbb/xconnect.c +++ b/libbb/xconnect.c @@ -27,9 +27,15 @@ unsigned short bb_lookup_port(const char *port, unsigned short default_port) { unsigned short port_nr = htons(default_port); if (port) { - char *endptr; - long port_long = strtol(port, &endptr, 10); + char *endptr; + int old_errno; + long port_long; + /* Since this is a lib function, we're not allowed to reset errno to 0. + * Doing so could break an app that is deferring checking of errno. */ + old_errno = errno; + errno = 0; + port_long = strtol(port, &endptr, 10); if (errno != 0 || *endptr!='\0' || endptr==port || port_long < 0 || port_long > 65535) { struct servent *tserv = getservbyname(port, "tcp"); if (tserv) { @@ -38,6 +44,7 @@ unsigned short bb_lookup_port(const char *port, unsigned short default_port) } else { port_nr = htons(port_long); } + errno = old_errno; } return port_nr; } |