git: 9front

Download patch

ref: 8f82317108c5953d8326d807d7ab47e03ab53cc2
parent: 7cd9c1fdc61858a0c067eaf4094f318c8eeffc94
author: cinap_lenrek <cinap_lenrek@gmx.de>
date: Sun Nov 11 21:12:05 EST 2012

tap: various improvements

dont use sed pipeline for indention, cache process arguments,
get process list once at start.

--- a/rc/bin/tap
+++ b/rc/bin/tap
@@ -1,8 +1,13 @@
 #!/bin/rc
 rfork e
 
-v=()
+if(~ $#* 0){
+	echo 'Usage: ' $0 '[ pid ... ]' >[1=2]
+	exit usage
+}
 
+f=/proc/*/fd
+
 fn otherqid {
 	x=`{echo $1 | sed 's/[12]$//'}
 	switch($1){
@@ -15,9 +20,10 @@
 
 fn traceqid {
 	while(! ~ $#* 0){
-		echo '['$2']' $3 $1
-		tracepid `{grep -n `{otherqid $1} /proc/*/fd | sed 's!^/proc/([^/]+)/.*!\1!g'} \
-			| sed 's/^/	/g'
+		echo $t '['$2']' $3 $1
+		t=('	' $t)
+		tracepid `{grep -n `{otherqid $1} $f >[2]/dev/null | sed 's!^/proc/([^/]+)/.*!\1!g'}
+		t=$t(2-)
 		shift
 		shift
 		shift
@@ -26,22 +32,25 @@
 
 fn tracepid {
 	while(! ~ $#* 0){
-		echo $1 `{cat /proc/$1/args >[2]/dev/null}
-		switch($1){
-		case $v
-			echo '	...'
-		case *
-			v=($1 $v)
-			traceqid `{awk '/\|/{q=substr($5,2);print q" "$1" "$10}' /proc/$1/fd} \
-				| sed 's/^/	/g'
+		a=ap$1
+		v=av$1
+		if(~ $$v $1){
+			echo $t $1 $$a '	...'
 		}
+		if not {
+			$v=$1
+			$a=`{cat /proc/$1/args >[2]/dev/null}
+			if(~ $$a ''){
+				s=`{cat /proc/$1/status >[2]/dev/null}
+				$a=$s(1)
+			}
+			echo $t $1 $$a
+			t=('	' $t)
+			traceqid `{awk '/\|/{q=substr($5,2);print q" "$1" "$10}' /proc/$1/fd >[2]/dev/null}
+			t=$t(2-)
+		}
 		shift
 	}
-}
-
-if(~ $#* 0){
-	echo 'Usage: ' $0 '[ pid ... ]' >[1=2]
-	exit usage
 }
 
 tracepid $*
--