about summary refs log tree commit diff
path: root/Functions/TCP/tcp_sess
blob: ee3d268b300b48478b94619d3ccce5600b14fd83 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# try to disguise parameters from the eval'd command in case it's a function.
integer __myfd=1

if [[ -n $1 ]]; then
  if [[ -z $tcp_by_name[$1] ]]; then
    print no such session: $1
    __myfd=2
  elif [[ -n $2 ]]; then
    local TCP_SESS=$1
    shift
    # A bit tricky: make sure the first argument gets re-evaluated,
    # so as to get aliases etc. to work, but make sure the remainder
    # don't, so as not to bugger up quoting.  This ought to work the
    # vast majority of the time, anyway.
    local __cmd=$1
    shift
    eval $__cmd \$\*
    return
  else
    TCP_SESS=$1
    return 0;
  fi
fi

# Print out the list of sessions, first the number, than the corresponding
# file descriptor.  The current session, if any, is marked with an asterisk.
local cur name fd
for name in ${(ko)tcp_by_name}; do
  fd=${tcp_by_name[$name]}
  # mark current session with an asterisk
  if [[ ${TCP_SESS} = $name ]]; then
    cur=" *"
  else
    cur=
  fi
  print "sess:$name; fd:$fd$cur" >&$__myfd
done

return $(( __myfd - 1 ))