diff options
author | Bernd Eckenfels <net-tools@lina.inka.de> | 2005-08-02 22:28:10 +0000 |
---|---|---|
committer | Bernd Eckenfels <net-tools@lina.inka.de> | 2005-08-02 22:28:10 +0000 |
commit | 3fb20be356305ef2027ad403b8eb2d03f6c6e87d (patch) | |
tree | b758253f60d37c155cee8e50b714d700a2442349 /netstat.c | |
parent | minor formatting (diff) | |
download | net-tools-3fb20be356305ef2027ad403b8eb2d03f6c6e87d.tar.gz net-tools-3fb20be356305ef2027ad403b8eb2d03f6c6e87d.tar.bz2 net-tools-3fb20be356305ef2027ad403b8eb2d03f6c6e87d.zip |
make ipx in 2.6 work (perhaps).
Fixes http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=318503
Diffstat (limited to 'netstat.c')
-rw-r--r-- | netstat.c | 49 |
1 files changed, 34 insertions, 15 deletions
@@ -6,7 +6,7 @@ * NET-3 Networking Distribution for the LINUX operating * system. * - * Version: $Id: netstat.c,v 1.51 2004/06/03 22:27:37 ecki Exp $ + * Version: $Id: netstat.c,v 1.52 2005/08/02 22:28:10 ecki Exp $ * * Authors: Fred Baumgarten, <dc6iq@insu1.etec.uni-karlsruhe.de> * Fred N. van Kempen, <waltje@uwalt.nl.mugnet.org> @@ -1363,18 +1363,37 @@ static int ipx_info(void) char sad[50], dad[50]; struct sockaddr sa; unsigned sport = 0, dport = 0; - - if (!(f = fopen(_PATH_PROCNET_IPX, "r"))) { - if (errno != ENOENT) { - perror(_PATH_PROCNET_IPX); - return (-1); - } - if (flag_arg || flag_ver) - ESYSNOT("netstat", "AF IPX"); - if (flag_arg) - return (1); - else - return (0); + struct stat s; + + f = fopen(_PATH_PROCNET_IPX_SOCKET1, "r"); + if (!f) { + if (errno != ENOENT) { + perror(_PATH_PROCNET_IPX_SOCKET1); + return (-1); + } + f = fopen(_PATH_PROCNET_IPX_SOCKET2, "r"); + + /* We need to check for directory */ + if (f) { + fstat(fileno(f), &s); + if (!S_ISREG(s.st_mode)) { + fclose(f); + f=NULL; + } + } + + if (!f) { + if (errno != ENOENT) { + perror(_PATH_PROCNET_IPX_SOCKET2); + return (-1); + } + if (flag_arg || flag_ver) + ESYSNOT("netstat", "AF IPX"); + if (flag_arg) + return (1); + else + return (0); + } } printf(_("Active IPX sockets\nProto Recv-Q Send-Q Local Address Foreign Address State")); /* xxx */ if (flag_exp > 1) @@ -1394,7 +1413,7 @@ static int ipx_info(void) sscanf(st, "%X", &sport); /* net byt order */ sport = ntohs(sport); } else { - EINTERN("netstat.c", _PATH_PROCNET_IPX " sport format error"); + EINTERN("netstat.c", "ipx socket format error in source port"); return (-1); } nc = 0; @@ -1404,7 +1423,7 @@ static int ipx_info(void) sscanf(st, "%X", &dport); /* net byt order */ dport = ntohs(dport); } else { - EINTERN("netstat.c", _PATH_PROCNET_IPX " dport format error"); + EINTERN("netstat.c", "ipx soket format error in destination port"); return (-1); } } else |