diff -up lsof_4.78C-rh/dialects/linux/dnode.c.inode lsof_4.78C-rh/dialects/linux/dnode.c --- lsof_4.78C-rh/dialects/linux/dnode.c.inode 2006-06-12 19:10:05.000000000 +0200 +++ lsof_4.78C-rh/dialects/linux/dnode.c 2007-10-03 14:01:54.000000000 +0200 @@ -191,7 +191,7 @@ get_locks(p) char buf[MAXPATHLEN], *ec, **fp; dev_t dev; int ex, i, h, mode, pid; - unsigned long inode; + INODETYPE inode; struct llock *lp, *np; FILE *ls; long maj, min; @@ -267,7 +267,7 @@ get_locks(p) */ ec = (char *)NULL; if (!fp[7] || !*fp[7] - || (inode = strtoul(fp[7], &ec, 0)) == ULONG_MAX + || (inode = strtoull(fp[7], &ec, 0)) == ULONG_MAX || !ec || *ec) continue; /* @@ -297,7 +297,7 @@ get_locks(p) for (lp = LckH[h]; lp; lp = lp->next) { if (lp->pid == pid && lp->dev == dev - && lp->inode == (INODETYPE)inode + && lp->inode == inode && lp->type == type) break; } @@ -307,14 +307,15 @@ get_locks(p) * Allocate a new llock structure and link it to the PID hash bucket. */ if (!(lp = (struct llock *)malloc(sizeof(struct llock)))) { + (void) snpf(buf, sizeof(buf), InodeFmt_d, inode); (void) fprintf(stderr, - "%s: can't allocate llock: PID %d; dev %x; inode %ld\n", - Pn, pid, (int)dev, inode); + "%s: can't allocate llock: PID %d; dev %x; inode %s\n", + Pn, pid, (int)dev, buf); Exit(1); } lp->pid = pid; lp->dev = dev; - lp->inode = (INODETYPE)inode; + lp->inode = inode; lp->type = type; lp->next = LckH[h]; LckH[h] = lp; diff -up lsof_4.78C-rh/dialects/linux/dproc.c.inode lsof_4.78C-rh/dialects/linux/dproc.c --- lsof_4.78C-rh/dialects/linux/dproc.c.inode 2007-10-03 14:01:54.000000000 +0200 +++ lsof_4.78C-rh/dialects/linux/dproc.c 2007-10-03 14:01:54.000000000 +0200 @@ -41,6 +41,9 @@ static char *rcsid = "$Id: dproc.c,v 1.1 #include #endif /* defined(HASSELINUX) */ +#if !defined(ULLONG_MAX) +#define ULLONG_MAX 18446744073709551615ULL +#endif /* !defined(ULLONG_MAX) */ /* * Local definitions @@ -790,7 +793,10 @@ process_proc_map(p, s, ss) dev = (dev_t)makedev((int)maj, (int)min); if (!fp[5] || !*fp[5]) continue; - inode = (INODETYPE)atoi(fp[5]); + ep = (char *)NULL; + if ((inode = strtoull(fp[5], &ep, 0)) == ULLONG_MAX + || !ep || *ep) + continue; if (!dev && !inode) continue; /* diff -up lsof_4.78C-rh/dialects/linux/dsock.c.inode lsof_4.78C-rh/dialects/linux/dsock.c --- lsof_4.78C-rh/dialects/linux/dsock.c.inode 2006-06-12 19:10:05.000000000 +0200 +++ lsof_4.78C-rh/dialects/linux/dsock.c 2007-10-03 14:02:39.000000000 +0200 @@ -350,7 +350,8 @@ get_ax25(p) FILE *as; char buf[MAXPATHLEN], *da, *dev_ch, *ep, **fp, *sa; int h, nf; - unsigned long inode, rq, sq, state; + INODETYPE inode; + unsigned long rq, sq, state; MALLOC_S len; unsigned char rqs, sqs; /* @@ -410,12 +411,12 @@ get_ax25(p) */ ep = (char *)NULL; if (!fp[23] || !*fp[23] - || (inode = strtoul(fp[23], &ep, 0)) == ULONG_MAX + || (inode = strtoull(fp[23], &ep, 0)) == ULONG_MAX || !ep || *ep) continue; h = INOHASH((INODETYPE)inode); for (ap = AX25sin[h]; ap; ap = ap->next) { - if ((INODETYPE)inode == ap->inode) + if (inode == ap->inode) break; } if (ap) @@ -496,7 +497,7 @@ get_ax25(p) } ap->da = da; ap->dev_ch = dev_ch; - ap->inode = (INODETYPE)inode; + ap->inode = inode; ap->rq = rq; ap->rqs = rqs; ap->sa = sa; @@ -521,7 +522,8 @@ get_ipx(p) char buf[MAXPATHLEN], *ep, **fp, *la, *ra; int fl = 1; int h; - unsigned long inode, rxq, state, txq; + INODETYPE inode; + unsigned long rxq, state, txq; struct ipxsin *ip, *np; MALLOC_S len; FILE *xs; @@ -588,12 +590,12 @@ get_ipx(p) */ ep = (char *)NULL; if (!fp[6] || !*fp[6] - || (inode = strtoul(fp[6], &ep, 0)) == ULONG_MAX + || (inode = strtoull(fp[6], &ep, 0)) == ULONG_MAX || !ep || *ep) continue; - h = INOHASH((INODETYPE)inode); + h = INOHASH(inode); for (ip = Ipxsin[h]; ip; ip = ip->next) { - if ((INODETYPE)inode == ip->inode) + if (inode == ip->inode) break; } if (ip) @@ -653,7 +655,7 @@ get_ipx(p) Pn, sizeof(struct ipxsin)); Exit(1); } - ip->inode = (INODETYPE)inode; + ip->inode = inode; ip->la = la; ip->ra = ra; ip->txq = txq; @@ -676,7 +678,7 @@ get_raw(p) { char buf[MAXPATHLEN], *ep, **fp, *la, *ra, *sp; int h; - unsigned long inode; + INODETYPE inode; int nf = 12; struct rawsin *np, *rp; MALLOC_S lal, ral, spl; @@ -741,12 +743,12 @@ get_raw(p) */ ep = (char *)NULL; if (!fp[9] || !*fp[9] - || (inode = strtoul(fp[9], &ep, 0)) == ULONG_MAX + || (inode = strtoull(fp[9], &ep, 0)) == ULONG_MAX || !ep || *ep) continue; - h = INOHASH((INODETYPE)inode); + h = INOHASH(inode); for (rp = Rawsin[h]; rp; rp = rp->next) { - if ((INODETYPE)inode == rp->inode) + if (inode == rp->inode) break; } if (rp) @@ -800,7 +802,7 @@ get_raw(p) Pn, sizeof(struct rawsin)); Exit(1); } - rp->inode = (INODETYPE)inode; + rp->inode = inode; rp->la = la; rp->lal = lal; rp->ra = ra; @@ -825,9 +827,10 @@ get_tcpudp(p, pr, clr) int clr; /* 1 == clear the table */ { char buf[MAXPATHLEN], *ep, **fp; - unsigned long faddr, fport, inode, laddr, lport, rxq, state, txq; + unsigned long faddr, fport, laddr, lport, rxq, state, txq; int h, nf; FILE *fs; + INODETYPE inode; struct tcp_udp *np, *tp; /* * Delete previous table contents. Allocate a table for the first time. @@ -902,7 +905,7 @@ get_tcpudp(p, pr, clr) || (fport = strtoul(fp[4], &ep, 16)) == ULONG_MAX || !ep || *ep) continue; /* - * Get the state, queue sizes, and inode. + * Get the state and queue sizes. */ ep = (char *)NULL; if (!fp[5] || !*fp[5] @@ -921,11 +924,11 @@ get_tcpudp(p, pr, clr) */ ep = (char *)NULL; if (!fp[13] || !*fp[13] - || (inode = strtoul(fp[13], &ep, 0)) == ULONG_MAX || !ep || *ep) + || (inode = strtoull(fp[13], &ep, 0)) == ULONG_MAX || !ep || *ep) continue; - h = INOHASH((INODETYPE)inode); + h = INOHASH(inode); for (tp = TcpUdp[h]; tp; tp = tp->next) { - if (tp->inode == (INODETYPE)inode) + if (tp->inode == inode) break; } if (tp) @@ -939,7 +942,7 @@ get_tcpudp(p, pr, clr) Pn, sizeof(struct tcp_udp)); Exit(1); } - tp->inode = (INODETYPE)inode; + tp->inode = inode; tp->faddr = faddr; tp->fport = (int)(fport & 0xffff); tp->laddr = laddr; @@ -966,7 +969,7 @@ get_raw6(p) { char buf[MAXPATHLEN], *ep, **fp, *la, *ra, *sp; int h; - unsigned long inode; + INODETYPE inode; int nf = 12; struct rawsin *np, *rp; MALLOC_S lal, ral, spl; @@ -1031,12 +1034,12 @@ get_raw6(p) */ ep = (char *)NULL; if (!fp[9] || !*fp[9] - || (inode = strtoul(fp[9], &ep, 0)) == ULONG_MAX + || (inode = strtoull(fp[9], &ep, 0)) == ULONG_MAX || !ep || *ep) continue; - h = INOHASH((INODETYPE)inode); + h = INOHASH(inode); for (rp = Rawsin6[h]; rp; rp = rp->next) { - if ((INODETYPE)inode == rp->inode) + if (inode == rp->inode) break; } if (rp) @@ -1090,7 +1093,7 @@ get_raw6(p) Pn, sizeof(struct rawsin)); Exit(1); } - rp->inode = (INODETYPE)inode; + rp->inode = inode; rp->la = la; rp->lal = lal; rp->ra = ra; @@ -1116,9 +1119,10 @@ get_tcpudp6(p, pr, clr) { char buf[MAXPATHLEN], *ep, **fp; struct in6_addr faddr, laddr; - unsigned long fport, inode, lport, rxq, state, txq; + unsigned long fport, lport, rxq, state, txq; int h, nf; FILE *fs; + INODETYPE inode; struct tcp_udp6 *np6, *tp6; /* * Delete previous table contents. Allocate a table for the first time. @@ -1189,7 +1193,7 @@ get_tcpudp6(p, pr, clr) || (fport = strtoul(fp[4], &ep, 16)) == ULONG_MAX || !ep || *ep) continue; /* - * Get the state, queue sizes, and inode. + * Get the state and queue sizes. */ ep = (char *)NULL; if (!fp[5] || !*fp[5] @@ -1208,11 +1212,11 @@ get_tcpudp6(p, pr, clr) */ ep = (char *)NULL; if (!fp[13] || !*fp[13] - || (inode = strtoul(fp[13], &ep, 0)) == ULONG_MAX || !ep || *ep) + || (inode = strtoull(fp[13], &ep, 0)) == ULONG_MAX || !ep || *ep) continue; - h = INOHASH((INODETYPE)inode); + h = INOHASH(inode); for (tp6 = TcpUdp6[h]; tp6; tp6 = tp6->next) { - if (tp6->inode == (INODETYPE)inode) + if (tp6->inode == inode) break; } if (tp6) @@ -1226,7 +1230,7 @@ get_tcpudp6(p, pr, clr) Pn, sizeof(struct tcp_udp6)); Exit(1); } - tp6->inode = (INODETYPE)inode; + tp6->inode = inode; tp6->faddr = faddr; tp6->fport = (int)(fport & 0xffff); tp6->laddr = laddr; @@ -1254,7 +1258,7 @@ get_unix(p) char buf[MAXPATHLEN], *ep, **fp, *path, *pcb; int fl = 1; int h, nf; - unsigned long inode; + INODETYPE inode; MALLOC_S len; struct uxsin *np, *up; FILE *us; @@ -1319,11 +1323,11 @@ get_unix(p) */ ep = (char *)NULL; if (!fp[6] || !*fp[6] - || (inode = strtoul(fp[6], &ep, 0)) == ULONG_MAX || !ep || *ep) + || (inode = strtoull(fp[6], &ep, 0)) == ULONG_MAX || !ep || *ep) continue; - h = INOHASH((INODETYPE)inode); + h = INOHASH(inode); for (up = Uxsin[h]; up; up = up->next) { - if ((INODETYPE)inode == up->inode) + if (inode == up->inode) break; } if (up) @@ -1362,7 +1366,7 @@ get_unix(p) Pn, sizeof(struct uxsin)); Exit(1); } - up->inode = (INODETYPE)inode; + up->inode = inode; up->pcb = pcb; up->sb_def = 0; if ((up->path = path) && (*path == '/')) {