From: Nicholas Nethercote Date: Tue, 28 Apr 2009 05:35:53 +0000 (+0000) Subject: Merged r9657 (fdleak fixes) from the DARWIN branch. X-Git-Tag: svn/VALGRIND_3_5_0~759 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=fcb90ff4909c073c1e9ad38ff43782260e4d2dc5;p=thirdparty%2Fvalgrind.git Merged r9657 (fdleak fixes) from the DARWIN branch. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@9658 --- diff --git a/coregrind/m_libcfile.c b/coregrind/m_libcfile.c index 4d6cb4cded..d60c552d13 100644 --- a/coregrind/m_libcfile.c +++ b/coregrind/m_libcfile.c @@ -74,15 +74,20 @@ Int VG_(safe_fd)(Int oldfd) or if it doesn't exist, we return False. */ Bool VG_(resolve_filename) ( Int fd, HChar* buf, Int n_buf ) { +# if defined(VGO_linux) HChar tmp[64]; - VG_(sprintf)(tmp, "/proc/self/fd/%d", fd); VG_(memset)(buf, 0, n_buf); - if (VG_(readlink)(tmp, buf, n_buf) > 0 && buf[0] == '/') return True; else return False; +# elif defined(VGO_aix5) + I_die_here; /* maybe just return False? */ + return False; +# else +# error "need fd-to-filename for this OS" +# endif } SysRes VG_(open) ( const Char* pathname, Int flags, Int mode ) diff --git a/coregrind/m_syswrap/syswrap-generic.c b/coregrind/m_syswrap/syswrap-generic.c index 8c94971bf1..3a2cf5d548 100644 --- a/coregrind/m_syswrap/syswrap-generic.c +++ b/coregrind/m_syswrap/syswrap-generic.c @@ -704,13 +704,12 @@ void VG_(show_open_fds) (void) VG_(message)(Vg_UserMsg, ""); } -/* If /proc/self/fd doesn't exist for some weird reason (like you've - got a kernel that doesn't have /proc support compiled in), then we - need to find out what file descriptors we inherited from our parent - process the hard way - by checking each fd in turn. */ - +/* If /proc/self/fd doesn't exist (e.g. you've got a Linux kernel that doesn't + have /proc support compiled in, or a non-Linux kernel), then we need to + find out what file descriptors we inherited from our parent process the + hard way - by checking each fd in turn. */ static -void do_hacky_preopened(void) +void init_preopened_fds_without_proc_self_fd(void) { struct vki_rlimit lim; UInt count; @@ -719,15 +718,15 @@ void do_hacky_preopened(void) if (VG_(getrlimit) (VKI_RLIMIT_NOFILE, &lim) == -1) { /* Hmm. getrlimit() failed. Now we're screwed, so just choose an arbitrarily high number. 1024 happens to be the limit in - the 2.4 kernels. */ + the 2.4 Linux kernels. */ count = 1024; } else { count = lim.rlim_cur; } for (i = 0; i < count; i++) - if(VG_(fcntl)(i, VKI_F_GETFL, 0) != -1) - ML_(record_fd_open_nameless)(-1, i); + if (VG_(fcntl)(i, VKI_F_GETFL, 0) != -1) + ML_(record_fd_open_named)(-1, i); } /* Initialize the list of open file descriptors with the file descriptors @@ -735,13 +734,15 @@ void do_hacky_preopened(void) void VG_(init_preopened_fds)(void) { +// Nb: AIX5 is handled in syswrap-aix5.c. +#if defined(VGO_linux) Int ret; struct vki_dirent d; SysRes f; f = VG_(open)("/proc/self/fd", VKI_O_RDONLY, 0); if (f.isError) { - do_hacky_preopened(); + init_preopened_fds_without_proc_self_fd(); return; } @@ -767,6 +768,10 @@ void VG_(init_preopened_fds)(void) out: VG_(close)(f.res); + +#else +# error Unknown OS +#endif } static @@ -1989,6 +1994,7 @@ PRE(sys_exit) PRE(sys_ni_syscall) { + // Nb: AIX5 is handled in syswrap-aix5.c. PRINT("non-existent syscall! (ni_syscall)"); PRE_REG_READ0(long, "ni_syscall"); SET_STATUS_Failure( VKI_ENOSYS ); diff --git a/none/tests/fdleak.h b/none/tests/fdleak.h index bbe94914b7..66fd84e96f 100644 --- a/none/tests/fdleak.h +++ b/none/tests/fdleak.h @@ -1,6 +1,19 @@ #ifndef _FDLEAK_H_ #define _FDLEAK_H_ +#include +#include + +#define DO(op) \ + ({ \ + long res = op; \ + if (res < 0) { \ + perror(#op); \ + exit(1); \ + }; \ + res; \ + }) + /* * The macro below closes file descriptors inherited from the process * that forked the current process. Close these file descriptors right diff --git a/none/tests/fdleak_cmsg.c b/none/tests/fdleak_cmsg.c index a061b23fda..3a36a96f5f 100644 --- a/none/tests/fdleak_cmsg.c +++ b/none/tests/fdleak_cmsg.c @@ -33,44 +33,22 @@ char filea[24]; char fileb[24]; char sock[24]; -void -server (void) +void server (void) { int s, fd1, fd2; struct sockaddr_un addr; - fd1 = open(filea, O_RDWR | O_CREAT | O_TRUNC, 0750); - if(fd1 == -1) { - perror("open"); - exit(1); - } - - fd2 = open(fileb, O_RDWR | O_CREAT | O_TRUNC, 0750); - if(fd2 == -1) { - perror("open"); - exit(1); - } - - s = socket(PF_UNIX, SOCK_STREAM, 0); - if(s == -1) { - perror("socket"); - exit(1); - } + fd1 = DO( open(filea, O_RDWR | O_CREAT | O_TRUNC, 0750) ); + fd2 = DO( open(fileb, O_RDWR | O_CREAT | O_TRUNC, 0750) ); + s = DO( socket(PF_UNIX, SOCK_STREAM, 0) ); memset(&addr, 0, sizeof(addr)); addr.sun_family = AF_UNIX; sprintf(addr.sun_path, "%s", sock); - unlink(addr.sun_path); - if(bind(s, (struct sockaddr *)&addr, sizeof(addr)) == -1) { - perror("bind"); - exit(1); - } - - if(listen(s, 5) == -1) { - perror("listen"); - exit(1); - } + unlink(sock); + DO( bind(s, (struct sockaddr *)&addr, sizeof(addr)) ); + DO( listen(s, 5) ); { int x; @@ -82,11 +60,7 @@ server (void) struct iovec iov[1]; memset(&baddr, 0, sizeof(baddr)); - x = accept(s, (struct sockaddr *)&baddr, &baddrsize); - if(x == -1) { - perror("accept"); - exit(1); - } + x = DO( accept(s, (struct sockaddr *)&baddr, &baddrsize) ); msg.msg_control = buf; msg.msg_controllen = sizeof(buf); @@ -103,15 +77,11 @@ server (void) msg.msg_iov = iov; msg.msg_iovlen = 1; - if(sendmsg(x, &msg, 0) == -1) { - perror("sendmsg"); - exit(1); - } + DO( sendmsg(x, &msg, 0) ); } } -void -client (void) +void client (void) { int s, fd1 = -1, fd2 = -1, size, count = 0, ret; struct sockaddr_un addr; @@ -129,7 +99,7 @@ client (void) iov[0].iov_len = sizeof(buf); s = socket(PF_UNIX, SOCK_STREAM, 0); - if(s == -1) { + if (s == -1) { perror("socket"); exit(1); } @@ -140,16 +110,16 @@ client (void) do { count++; ret = connect(s, (struct sockaddr *)&addr, sizeof(addr)); - if(ret == -1) sleep(1); + if (ret == -1) sleep(1); } while (count < 10 && ret == -1); - if(ret == -1) { + if (ret == -1) { perror("connect"); exit(1); } again: - if((size = recvmsg(s, &msg, 0)) == -1) { + if ((size = recvmsg(s, &msg, 0)) == -1) { if (errno == EINTR) goto again; /* SIGCHLD from server exiting could interrupt */ perror("recvmsg"); @@ -158,8 +128,8 @@ client (void) cmsg = CMSG_FIRSTHDR(&msg); - while(cmsg) { - if(cmsg->cmsg_level == SOL_SOCKET && + while (cmsg) { + if (cmsg->cmsg_level == SOL_SOCKET && cmsg->cmsg_type == SCM_RIGHTS && cmsg->cmsg_len == CMSG_LEN(sizeof(int) * 2)) { fd1 = ((int *)CMSG_DATA(cmsg))[0]; @@ -169,21 +139,15 @@ client (void) cmsg = CMSG_NXTHDR(&msg, cmsg); } - if(fd1 != -1) write(fd1, "Yeah 1\n", 8); - if(fd2 != -1) write(fd2, "Yeah 2\n", 8); + if (fd1 != -1) write(fd1, "Yeah 1\n", 8); + if (fd2 != -1) write(fd2, "Yeah 2\n", 8); } -int -main (int argc, char **argv) +int main (int argc, char **argv) { int pid, status; - - - - - CLOSE_INHERITED_FDS; pid = getpid(); @@ -191,7 +155,7 @@ main (int argc, char **argv) sprintf(fileb, "/tmp/data2.%d", pid); sprintf(sock, "/tmp/sock.%d", pid); - if((pid = fork()) == 0) { + if ((pid = fork()) == 0) { server(); return 0; } @@ -200,8 +164,8 @@ main (int argc, char **argv) wait(&status); - unlink(filea); - unlink(fileb); - unlink(sock); + DO( unlink(filea) ); + DO( unlink(fileb) ); + DO( unlink(sock) ); return 0; } diff --git a/none/tests/fdleak_cmsg.stderr.exp b/none/tests/fdleak_cmsg.stderr.exp index d9328b97ff..6e5a797b9f 100644 --- a/none/tests/fdleak_cmsg.stderr.exp +++ b/none/tests/fdleak_cmsg.stderr.exp @@ -1,46 +1,46 @@ FILE DESCRIPTORS: 7 open at exit. -Open AF_UNIX socket .: /tmp/sock +Open AF_UNIX socket ...: /tmp/sock ... -Open AF_UNIX socket .: /tmp/sock +Open AF_UNIX socket ...: /tmp/sock ... -Open file descriptor .: /tmp/data2 +Open file descriptor ...: /tmp/data2 ... -Open file descriptor .: /tmp/data1 +Open file descriptor ...: /tmp/data1 ... -Open file descriptor .: . +Open file descriptor ...: ... -Open file descriptor .: . +Open file descriptor ...: ... -Open file descriptor .: /dev/null +Open file descriptor ...: /dev/null FILE DESCRIPTORS: 6 open at exit. -Open file descriptor .: /tmp/data2 +Open file descriptor ...: /tmp/data2 ... -Open file descriptor .: /tmp/data1 +Open file descriptor ...: /tmp/data1 ... -Open AF_UNIX socket .: +Open AF_UNIX socket ...: ... -Open file descriptor .: . +Open file descriptor ...: ... -Open file descriptor .: . +Open file descriptor ...: ... -Open file descriptor .: /dev/null +Open file descriptor ...: /dev/null diff --git a/none/tests/fdleak_creat.c b/none/tests/fdleak_creat.c index 7f3fd72e90..c4debc4a68 100644 --- a/none/tests/fdleak_creat.c +++ b/none/tests/fdleak_creat.c @@ -2,20 +2,15 @@ #include #include #include "fdleak.h" -int -main (int argc, char **argv) + +int main (int argc, char **argv) { char filename[24]; - - - - - CLOSE_INHERITED_FDS; sprintf(filename, "/tmp/file.%d", getpid()); - creat(filename, 0); - unlink(filename); + DO( creat(filename, 0) ); + DO( unlink(filename) ); return 0; } diff --git a/none/tests/fdleak_creat.stderr.exp b/none/tests/fdleak_creat.stderr.exp index c3dcd75be4..e7a6e918af 100644 --- a/none/tests/fdleak_creat.stderr.exp +++ b/none/tests/fdleak_creat.stderr.exp @@ -1,16 +1,16 @@ FILE DESCRIPTORS: 4 open at exit. -Open file descriptor .: /tmp/file +Open file descriptor ...: /tmp/file ... -Open file descriptor .: . +Open file descriptor ...: ... -Open file descriptor .: . +Open file descriptor ...: ... -Open file descriptor .: /dev/null +Open file descriptor ...: /dev/null diff --git a/none/tests/fdleak_dup.c b/none/tests/fdleak_dup.c index 5fbf41a955..9136376176 100644 --- a/none/tests/fdleak_dup.c +++ b/none/tests/fdleak_dup.c @@ -1,19 +1,15 @@ #include #include #include "fdleak.h" -int -main (int argc, char **argv) + +int main (int argc, char **argv) { int s; - - - - - CLOSE_INHERITED_FDS; - s = open("/dev/null", O_RDONLY); - dup(s); + s = DO( open("/dev/null", O_RDONLY) ); + DO( dup(s) ); + return 0; } diff --git a/none/tests/fdleak_dup.stderr.exp b/none/tests/fdleak_dup.stderr.exp index 50c5cd4e08..7737a7d9dc 100644 --- a/none/tests/fdleak_dup.stderr.exp +++ b/none/tests/fdleak_dup.stderr.exp @@ -1,19 +1,19 @@ FILE DESCRIPTORS: 5 open at exit. -Open file descriptor .: /dev/null +Open file descriptor ...: /dev/null ... -Open file descriptor .: /dev/null +Open file descriptor ...: /dev/null ... -Open file descriptor .: . +Open file descriptor ...: ... -Open file descriptor .: . +Open file descriptor ...: ... -Open file descriptor .: /dev/null +Open file descriptor ...: /dev/null diff --git a/none/tests/fdleak_dup2.c b/none/tests/fdleak_dup2.c index 41b770cc75..e78b48e1f2 100644 --- a/none/tests/fdleak_dup2.c +++ b/none/tests/fdleak_dup2.c @@ -1,23 +1,19 @@ #include #include #include "fdleak.h" -int -main (int argc, char **argv) + +int main (int argc, char **argv) { int s1; int s2; - - - - - CLOSE_INHERITED_FDS; - s1 = open("/dev/null", O_RDONLY); - s2 = open("/dev/null", O_RDONLY); + s1 = DO( open("/dev/null", O_RDONLY) ); + s2 = DO( open("/dev/null", O_RDONLY) ); + + DO( dup2(s1, 20) ); // dup s1 as fd 20 + DO( dup2(s1, s2) ); // dup s1 as fd s2, which closes existing s2 fd - dup2(s1, 20); - dup2(s1, s2); return 0; } diff --git a/none/tests/fdleak_dup2.stderr.exp b/none/tests/fdleak_dup2.stderr.exp index ab5bbba401..98d61a92a4 100644 --- a/none/tests/fdleak_dup2.stderr.exp +++ b/none/tests/fdleak_dup2.stderr.exp @@ -1,22 +1,22 @@ FILE DESCRIPTORS: 6 open at exit. -Open file descriptor .: /dev/null +Open file descriptor ...: /dev/null ... -Open file descriptor .: /dev/null +Open file descriptor ...: /dev/null ... -Open file descriptor .: /dev/null +Open file descriptor ...: /dev/null ... -Open file descriptor .: . +Open file descriptor ...: ... -Open file descriptor .: . +Open file descriptor ...: ... -Open file descriptor .: /dev/null +Open file descriptor ...: /dev/null diff --git a/none/tests/fdleak_fcntl.c b/none/tests/fdleak_fcntl.c index 0a1f52d74a..3d776b47a5 100644 --- a/none/tests/fdleak_fcntl.c +++ b/none/tests/fdleak_fcntl.c @@ -2,19 +2,15 @@ #include #include #include "fdleak.h" -int -main (int argc, char **argv) + +int main (int argc, char **argv) { int s1; - - - - - CLOSE_INHERITED_FDS; - s1 = open("/dev/null", O_RDONLY); - if(fcntl(s1, F_DUPFD, s1) == -1) perror("fcntl"); + s1 = DO( open("/dev/null", O_RDONLY) ); + DO( fcntl(s1, F_DUPFD, s1) ); + return 0; } diff --git a/none/tests/fdleak_fcntl.stderr.exp b/none/tests/fdleak_fcntl.stderr.exp index 50c5cd4e08..7737a7d9dc 100644 --- a/none/tests/fdleak_fcntl.stderr.exp +++ b/none/tests/fdleak_fcntl.stderr.exp @@ -1,19 +1,19 @@ FILE DESCRIPTORS: 5 open at exit. -Open file descriptor .: /dev/null +Open file descriptor ...: /dev/null ... -Open file descriptor .: /dev/null +Open file descriptor ...: /dev/null ... -Open file descriptor .: . +Open file descriptor ...: ... -Open file descriptor .: . +Open file descriptor ...: ... -Open file descriptor .: /dev/null +Open file descriptor ...: /dev/null diff --git a/none/tests/fdleak_ipv4.c b/none/tests/fdleak_ipv4.c index cdc550dfb7..f595d6f64f 100644 --- a/none/tests/fdleak_ipv4.c +++ b/none/tests/fdleak_ipv4.c @@ -9,59 +9,40 @@ #include #include #include "fdleak.h" -void -server () + +void server () { int s, x; struct sockaddr_in baddr; struct sockaddr_in addr; - int baddrsize = sizeof(baddr); + socklen_t baddrsize = sizeof(baddr); int one = 1; - s = socket(PF_INET, SOCK_STREAM, 0); - if(s == -1) { - perror("socket"); - exit(1); - } + s = DO( socket(PF_INET, SOCK_STREAM, 0) ); - setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(int)); + DO( setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(int)) ); memset(&addr, 0, sizeof(addr)); addr.sin_family = AF_INET; addr.sin_addr.s_addr = inet_addr("127.0.0.1"); addr.sin_port = 12321; - if(bind(s, (struct sockaddr *)&addr, sizeof(addr)) == -1) { - perror("bind"); - exit(1); - } + DO( bind(s, (struct sockaddr *)&addr, sizeof(addr)) ); - if(listen(s, 5) == -1) { - perror("listen"); - exit(1); - } + DO( listen(s, 5) ); memset(&baddr, 0, sizeof(baddr)); - x = accept(s, (struct sockaddr *)&baddr, &baddrsize); - if(x == -1) { - perror("accept"); - exit(1); - } + x = DO( accept(s, (struct sockaddr *)&baddr, &baddrsize) ); - write(x, "hello", 6); + DO( write(x, "hello", 6) ); } -void -client () +void client () { int s, count = 0, ret; struct sockaddr_in addr; char buf[1024]; - s = socket(PF_INET, SOCK_STREAM, 0); - if(s == -1) { - perror("socket"); - exit(1); - } + s = DO( socket(PF_INET, SOCK_STREAM, 0) ); addr.sin_family = AF_INET; addr.sin_addr.s_addr = inet_addr("127.0.0.1"); @@ -70,33 +51,27 @@ client () do { count++; ret = connect(s, (struct sockaddr *)&addr, sizeof(addr)); - if(ret == -1) sleep(1); + if (ret == -1) sleep(1); } while (count < 10 && ret == -1); - if(ret == -1) { + if (ret == -1) { perror("connect"); exit(1); } - read(s, buf, sizeof(buf)); + DO( read(s, buf, sizeof(buf)) ); printf("%s\n", buf); } -int -main (int argc, char **argv) +int main (int argc, char **argv) { int pid, status; - - - - - CLOSE_INHERITED_FDS; - if((pid = fork()) == 0) { + if ((pid = fork()) == 0) { server(); return 0; } diff --git a/none/tests/fdleak_ipv4.stderr.exp b/none/tests/fdleak_ipv4.stderr.exp index 773080dcda..80c62019f1 100644 --- a/none/tests/fdleak_ipv4.stderr.exp +++ b/none/tests/fdleak_ipv4.stderr.exp @@ -7,13 +7,13 @@ Open AF_INET socket 4: 127.0.0.1:... <-> 127.0.0.1:... Open AF_INET socket 3: 127.0.0.1:... <-> unbound ... -Open file descriptor .: . +Open file descriptor ...: ... -Open file descriptor .: . +Open file descriptor ...: ... -Open file descriptor .: /dev/null +Open file descriptor ...: /dev/null @@ -22,13 +22,13 @@ FILE DESCRIPTORS: 4 open at exit. Open AF_INET socket 3: 127.0.0.1:... <-> 127.0.0.1:... ... -Open file descriptor .: . +Open file descriptor ...: ... -Open file descriptor .: . +Open file descriptor ...: ... -Open file descriptor .: /dev/null +Open file descriptor ...: /dev/null diff --git a/none/tests/fdleak_open.c b/none/tests/fdleak_open.c index c09979886d..d477b3be7a 100644 --- a/none/tests/fdleak_open.c +++ b/none/tests/fdleak_open.c @@ -2,14 +2,11 @@ #include #include "fdleak.h" -int -main (int argc, char **argv) +int main (int argc, char **argv) { - - - CLOSE_INHERITED_FDS; - open("/dev/null", O_RDONLY); + DO( open("/dev/null", O_RDONLY) ); + return 0; } diff --git a/none/tests/fdleak_open.stderr.exp b/none/tests/fdleak_open.stderr.exp index ae14b421d5..948ed97d4e 100644 --- a/none/tests/fdleak_open.stderr.exp +++ b/none/tests/fdleak_open.stderr.exp @@ -1,16 +1,16 @@ FILE DESCRIPTORS: 4 open at exit. -Open file descriptor .: /dev/null +Open file descriptor ...: /dev/null ... -Open file descriptor .: . +Open file descriptor ...: ... -Open file descriptor .: . +Open file descriptor ...: ... -Open file descriptor .: /dev/null +Open file descriptor ...: /dev/null diff --git a/none/tests/fdleak_pipe.c b/none/tests/fdleak_pipe.c index 870ba9d3a4..bff4588d8f 100644 --- a/none/tests/fdleak_pipe.c +++ b/none/tests/fdleak_pipe.c @@ -1,17 +1,13 @@ #include #include "fdleak.h" -int -main (int argc, char **argv) + +int main (int argc, char **argv) { int fds[2]; - - - - - CLOSE_INHERITED_FDS; - pipe(fds); + DO( pipe(fds) ); + return 0; } diff --git a/none/tests/fdleak_pipe.stderr.exp b/none/tests/fdleak_pipe.stderr.exp index a265af5c9c..832fd7e11c 100644 --- a/none/tests/fdleak_pipe.stderr.exp +++ b/none/tests/fdleak_pipe.stderr.exp @@ -1,19 +1,19 @@ FILE DESCRIPTORS: 5 open at exit. -Open file descriptor .: +Open file descriptor ...: ... -Open file descriptor .: +Open file descriptor ...: ... -Open file descriptor .: . +Open file descriptor ...: ... -Open file descriptor .: . +Open file descriptor ...: ... -Open file descriptor .: /dev/null +Open file descriptor ...: /dev/null diff --git a/none/tests/fdleak_socketpair.c b/none/tests/fdleak_socketpair.c index c2524eef2b..45b75cce92 100644 --- a/none/tests/fdleak_socketpair.c +++ b/none/tests/fdleak_socketpair.c @@ -1,17 +1,15 @@ #include #include #include "fdleak.h" +#include -int -main (int argc, char **argv) +int main (int argc, char **argv) { int fds[2]; - - - CLOSE_INHERITED_FDS; - socketpair(AF_UNIX, SOCK_STREAM, PF_UNIX, fds); + DO( socketpair(AF_UNIX, SOCK_STREAM, PF_UNSPEC, fds) ); + return 0; } diff --git a/none/tests/fdleak_socketpair.stderr.exp b/none/tests/fdleak_socketpair.stderr.exp index 666c56f805..377b1318ee 100644 --- a/none/tests/fdleak_socketpair.stderr.exp +++ b/none/tests/fdleak_socketpair.stderr.exp @@ -1,19 +1,19 @@ FILE DESCRIPTORS: 5 open at exit. -Open AF_UNIX socket .: +Open AF_UNIX socket ...: ... -Open AF_UNIX socket .: +Open AF_UNIX socket ...: ... -Open file descriptor .: . +Open file descriptor ...: ... -Open file descriptor .: . +Open file descriptor ...: ... -Open file descriptor .: /dev/null +Open file descriptor ...: /dev/null diff --git a/none/tests/filter_fdleak b/none/tests/filter_fdleak index 51f4b5f9fa..bb1ef42994 100755 --- a/none/tests/filter_fdleak +++ b/none/tests/filter_fdleak @@ -2,14 +2,16 @@ dir=`dirname $0` -./filter_stderr | +./filter_stderr | -sed s/"^Open AF_UNIX socket [0-9]*: /Open AF_UNIX socket .: /" | -sed s/"^Open \(AF_UNIX socket\|file descriptor\) [0-9]*: \/dev\/null/Open \\1 .: \/dev\/null/" | -sed s/"^Open \(AF_UNIX socket\|file descriptor\) [0-9]*: \/tmp\/\(sock\|data1\|data2\|file\)\.[0-9]*/Open \\1 .: \/tmp\/\\2/" | -sed s/"^Open file descriptor [0-9]*: .*/Open file descriptor .: ./" | -sed s/"^Open file descriptor [0-9]*:$/Open file descriptor .:/" | -sed s/"127.0.0.1:[0-9]*/127.0.0.1:.../g" | +perl -p -e 's/^Open AF_UNIX socket [0-9]*: /Open AF_UNIX socket ...: /' | +perl -p -e 's/^Open (AF_UNIX socket|file descriptor) [0-9]*: \/dev\/null/Open $1 ...: \/dev\/null/' | +# Nb: on Darwin, /tmp is a symlink to /private/tmp, so sometimes it's +# necessary to filter out the "/private" part. +perl -p -e 's/^Open (AF_UNIX socket|file descriptor) [0-9]*: (\/private)?\/tmp\/(sock|data1|data2|file)\.[0-9]*/Open $1 ...: \/tmp\/$3/' | +perl -p -e 's/^Open file descriptor [0-9]*: .*/Open file descriptor ...: .../' | +perl -p -e 's/^Open file descriptor [0-9]*:$/Open file descriptor ...:/' | +perl -p -e 's/127.0.0.1:[0-9]*/127.0.0.1:.../g' | # Stack traces showing where fds were created have lots of variations: # different numbers of entries, line numbers or not depending on whether