Hex Artifact Content

Artifact c4f2028e1f7fb53c657dac6607135e21866b24da:


0000: 23 64 65 66 69 6e 65 20 5f 4c 49 4e 55 58 5f 53  #define _LINUX_S
0010: 4f 55 52 43 45 20 31 0a 23 69 6e 63 6c 75 64 65  OURCE 1.#include
0020: 20 3c 73 79 73 2f 72 65 73 6f 75 72 63 65 2e 68   <sys/resource.h
0030: 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 79 73 2f  >.#include <sys/
0040: 73 79 73 63 61 6c 6c 2e 68 3e 0a 23 69 6e 63 6c  syscall.h>.#incl
0050: 75 64 65 20 3c 73 79 73 2f 74 65 72 6d 69 6f 73  ude <sys/termios
0060: 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 6e 65  .h>.#include <ne
0070: 74 69 6e 65 74 2f 69 6e 2e 68 3e 0a 23 69 6e 63  tinet/in.h>.#inc
0080: 6c 75 64 65 20 3c 73 79 73 2f 72 65 62 6f 6f 74  lude <sys/reboot
0090: 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 61 72  .h>.#include <ar
00a0: 70 61 2f 69 6e 65 74 2e 68 3e 0a 23 69 6e 63 6c  pa/inet.h>.#incl
00b0: 75 64 65 20 3c 73 79 73 2f 73 6f 63 6b 65 74 2e  ude <sys/socket.
00c0: 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 79 73  h>.#include <sys
00d0: 2f 73 65 6c 65 63 74 2e 68 3e 0a 23 69 6e 63 6c  /select.h>.#incl
00e0: 75 64 65 20 3c 73 79 73 2f 6d 6f 75 6e 74 2e 68  ude <sys/mount.h
00f0: 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 79 73 2f  >.#include <sys/
0100: 74 79 70 65 73 2e 68 3e 0a 23 69 6e 63 6c 75 64  types.h>.#includ
0110: 65 20 3c 73 79 73 2f 69 6f 63 74 6c 2e 68 3e 0a  e <sys/ioctl.h>.
0120: 23 69 6e 63 6c 75 64 65 20 3c 73 79 73 2f 74 69  #include <sys/ti
0130: 6d 65 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c  me.h>.#include <
0140: 73 79 73 2f 6b 6c 6f 67 2e 68 3e 0a 23 69 6e 63  sys/klog.h>.#inc
0150: 6c 75 64 65 20 3c 73 79 73 2f 73 77 61 70 2e 68  lude <sys/swap.h
0160: 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 79 73 2f  >.#include <sys/
0170: 73 74 61 74 2e 68 3e 0a 23 69 6e 63 6c 75 64 65  stat.h>.#include
0180: 20 3c 73 79 73 2f 77 61 69 74 2e 68 3e 0a 23 69   <sys/wait.h>.#i
0190: 6e 63 6c 75 64 65 20 3c 73 79 73 2f 75 6e 2e 68  nclude <sys/un.h
01a0: 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 6c  >.#include <stdl
01b0: 69 62 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c  ib.h>.#include <
01c0: 73 69 67 6e 61 6c 2e 68 3e 0a 23 69 6e 63 6c 75  signal.h>.#inclu
01d0: 64 65 20 3c 75 6e 69 73 74 64 2e 68 3e 0a 23 69  de <unistd.h>.#i
01e0: 6e 63 6c 75 64 65 20 3c 73 74 72 69 6e 67 2e 68  nclude <string.h
01f0: 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 66 63 6e 74  >.#include <fcnt
0200: 6c 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 65  l.h>.#include <e
0210: 72 72 6e 6f 2e 68 3e 0a 23 69 6e 63 6c 75 64 65  rrno.h>.#include
0220: 20 3c 74 69 6d 65 2e 68 3e 0a 23 69 6e 63 6c 75   <time.h>.#inclu
0230: 64 65 20 3c 74 63 6c 2e 68 3e 0a 0a 23 69 6e 63  de <tcl.h>..#inc
0240: 6c 75 64 65 20 3c 6c 69 6e 75 78 2f 73 6f 63 6b  lude <linux/sock
0250: 69 6f 73 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20  ios.h>.#include 
0260: 3c 6c 69 6e 75 78 2f 72 6f 75 74 65 2e 68 3e 0a  <linux/route.h>.
0270: 23 69 6e 63 6c 75 64 65 20 3c 6c 69 6e 75 78 2f  #include <linux/
0280: 69 66 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c  if.h>.#include <
0290: 6c 69 6e 75 78 2f 69 66 5f 61 72 70 2e 68 3e 0a  linux/if_arp.h>.
02a0: 23 69 6e 63 6c 75 64 65 20 3c 6c 69 6e 75 78 2f  #include <linux/
02b0: 69 66 5f 62 72 69 64 67 65 2e 68 3e 0a 23 69 6e  if_bridge.h>.#in
02c0: 63 6c 75 64 65 20 3c 6c 69 6e 75 78 2f 6c 6f 6f  clude <linux/loo
02d0: 70 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 6c  p.h>.#include <l
02e0: 69 6e 75 78 2f 66 73 2e 68 3e 0a 0a 23 69 66 6e  inux/fs.h>..#ifn
02f0: 64 65 66 20 48 4f 53 54 5f 4e 41 4d 45 5f 4d 41  def HOST_NAME_MA
0300: 58 0a 2f 2a 20 53 55 53 76 32 20 4c 69 6d 69 74  X./* SUSv2 Limit
0310: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 48 4f 53 54   */.#define HOST
0320: 5f 4e 41 4d 45 5f 4d 41 58 20 32 35 35 0a 23 65  _NAME_MAX 255.#e
0330: 6e 64 69 66 0a 0a 2f 2a 20 46 72 6f 6d 20 4c 69  ndif../* From Li
0340: 6e 75 78 20 32 2e 36 20 2a 2f 0a 23 69 66 6e 64  nux 2.6 */.#ifnd
0350: 65 66 20 4d 4e 54 5f 44 45 54 41 43 48 0a 23 64  ef MNT_DETACH.#d
0360: 65 66 69 6e 65 20 4d 4e 54 5f 44 45 54 41 43 48  efine MNT_DETACH
0370: 20 32 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65   2.#endif.#ifnde
0380: 66 20 4d 4e 54 5f 45 58 50 49 52 45 0a 23 64 65  f MNT_EXPIRE.#de
0390: 66 69 6e 65 20 4d 4e 54 5f 45 58 50 49 52 45 20  fine MNT_EXPIRE 
03a0: 34 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  4.#endif.#ifndef
03b0: 20 4d 53 5f 4d 4f 56 45 0a 23 64 65 66 69 6e 65   MS_MOVE.#define
03c0: 20 4d 53 5f 4d 4f 56 45 20 38 31 39 32 0a 23 65   MS_MOVE 8192.#e
03d0: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 59 53  ndif.#ifndef SYS
03e0: 4c 4f 47 5f 41 43 54 49 4f 4e 5f 43 4c 4f 53 45  LOG_ACTION_CLOSE
03f0: 0a 23 64 65 66 69 6e 65 20 53 59 53 4c 4f 47 5f  .#define SYSLOG_
0400: 41 43 54 49 4f 4e 5f 43 4c 4f 53 45 20 30 0a 23  ACTION_CLOSE 0.#
0410: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 59  endif.#ifndef SY
0420: 53 4c 4f 47 5f 41 43 54 49 4f 4e 5f 4f 50 45 4e  SLOG_ACTION_OPEN
0430: 0a 23 64 65 66 69 6e 65 20 53 59 53 4c 4f 47 5f  .#define SYSLOG_
0440: 41 43 54 49 4f 4e 5f 4f 50 45 4e 20 31 0a 23 65  ACTION_OPEN 1.#e
0450: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 59 53  ndif.#ifndef SYS
0460: 4c 4f 47 5f 41 43 54 49 4f 4e 5f 52 45 41 44 5f  LOG_ACTION_READ_
0470: 41 4c 4c 0a 23 64 65 66 69 6e 65 20 53 59 53 4c  ALL.#define SYSL
0480: 4f 47 5f 41 43 54 49 4f 4e 5f 52 45 41 44 5f 41  OG_ACTION_READ_A
0490: 4c 4c 20 33 0a 23 65 6e 64 69 66 0a 23 69 66 6e  LL 3.#endif.#ifn
04a0: 64 65 66 20 53 59 53 4c 4f 47 5f 41 43 54 49 4f  def SYSLOG_ACTIO
04b0: 4e 5f 43 4c 45 41 52 0a 23 64 65 66 69 6e 65 20  N_CLEAR.#define 
04c0: 53 59 53 4c 4f 47 5f 41 43 54 49 4f 4e 5f 43 4c  SYSLOG_ACTION_CL
04d0: 45 41 52 20 35 0a 23 65 6e 64 69 66 0a 23 69 66  EAR 5.#endif.#if
04e0: 6e 64 65 66 20 53 59 53 4c 4f 47 5f 41 43 54 49  ndef SYSLOG_ACTI
04f0: 4f 4e 5f 43 4f 4e 53 4f 4c 45 5f 4f 46 46 0a 23  ON_CONSOLE_OFF.#
0500: 64 65 66 69 6e 65 20 53 59 53 4c 4f 47 5f 41 43  define SYSLOG_AC
0510: 54 49 4f 4e 5f 43 4f 4e 53 4f 4c 45 5f 4f 46 46  TION_CONSOLE_OFF
0520: 20 36 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65   6.#endif.#ifnde
0530: 66 20 53 59 53 4c 4f 47 5f 41 43 54 49 4f 4e 5f  f SYSLOG_ACTION_
0540: 43 4f 4e 53 4f 4c 45 5f 4f 4e 0a 23 64 65 66 69  CONSOLE_ON.#defi
0550: 6e 65 20 53 59 53 4c 4f 47 5f 41 43 54 49 4f 4e  ne SYSLOG_ACTION
0560: 5f 43 4f 4e 53 4f 4c 45 5f 4f 4e 20 37 0a 23 65  _CONSOLE_ON 7.#e
0570: 6e 64 69 66 0a 0a 2f 2a 20 53 69 6d 70 6c 65 20  ndif../* Simple 
0580: 6d 61 63 72 6f 73 20 2a 2f 0a 23 69 66 6e 64 65  macros */.#ifnde
0590: 66 20 4d 41 58 0a 23 64 65 66 69 6e 65 20 4d 41  f MAX.#define MA
05a0: 58 28 61 2c 20 62 29 20 28 28 28 61 29 20 3c 20  X(a, b) (((a) < 
05b0: 28 62 29 29 20 3f 20 28 62 29 20 3a 20 28 61 29  (b)) ? (b) : (a)
05c0: 29 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  ).#endif.#ifndef
05d0: 20 4d 49 4e 0a 23 64 65 66 69 6e 65 20 4d 49 4e   MIN.#define MIN
05e0: 28 61 2c 20 62 29 20 28 28 28 61 29 20 3c 20 28  (a, b) (((a) < (
05f0: 62 29 29 20 3f 20 28 61 29 20 3a 20 28 62 29 29  b)) ? (a) : (b))
0600: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 55 73 65 72  .#endif../* User
0610: 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 2c 20 66 6f   environment, fo
0620: 72 20 65 78 65 63 76 65 20 2a 2f 0a 65 78 74 65  r execve */.exte
0630: 72 6e 20 63 68 61 72 20 2a 2a 65 6e 76 69 72 6f  rn char **enviro
0640: 6e 3b 0a 0a 2f 2a 20 52 65 2d 69 6d 70 6c 65 6d  n;../* Re-implem
0650: 65 6e 74 20 74 68 65 73 65 20 69 66 20 6e 65 65  ent these if nee
0660: 64 65 64 20 2a 2f 0a 23 69 66 64 65 66 20 53 59  ded */.#ifdef SY
0670: 53 5f 69 6e 69 74 5f 6d 6f 64 75 6c 65 0a 73 74  S_init_module.st
0680: 61 74 69 63 20 69 6e 74 20 69 6e 69 74 5f 6d 6f  atic int init_mo
0690: 64 75 6c 65 28 76 6f 69 64 20 2a 76 61 6c 2c 20  dule(void *val, 
06a0: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 6c 65  unsigned long le
06b0: 6e 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61  n, const char *a
06c0: 72 67 73 29 20 7b 0a 09 72 65 74 75 72 6e 28 73  rgs) {..return(s
06d0: 79 73 63 61 6c 6c 28 53 59 53 5f 69 6e 69 74 5f  yscall(SYS_init_
06e0: 6d 6f 64 75 6c 65 2c 20 76 61 6c 2c 20 6c 65 6e  module, val, len
06f0: 2c 20 61 72 67 73 29 29 3b 0a 7d 0a 23 65 6e 64  , args));.}.#end
0700: 69 66 0a 23 69 66 64 65 66 20 53 59 53 5f 64 65  if.#ifdef SYS_de
0710: 6c 65 74 65 5f 6d 6f 64 75 6c 65 0a 73 74 61 74  lete_module.stat
0720: 69 63 20 69 6e 74 20 64 65 6c 65 74 65 5f 6d 6f  ic int delete_mo
0730: 64 75 6c 65 28 63 6f 6e 73 74 20 63 68 61 72 20  dule(const char 
0740: 2a 6e 61 6d 65 2c 20 69 6e 74 20 66 6c 61 67 73  *name, int flags
0750: 29 20 7b 0a 09 72 65 74 75 72 6e 28 73 79 73 63  ) {..return(sysc
0760: 61 6c 6c 28 53 59 53 5f 64 65 6c 65 74 65 5f 6d  all(SYS_delete_m
0770: 6f 64 75 6c 65 2c 20 6e 61 6d 65 2c 20 66 6c 61  odule, name, fla
0780: 67 73 29 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 23  gs));.}.#endif.#
0790: 69 66 64 65 66 20 53 59 53 5f 70 69 76 6f 74 5f  ifdef SYS_pivot_
07a0: 72 6f 6f 74 0a 73 74 61 74 69 63 20 69 6e 74 20  root.static int 
07b0: 70 69 76 6f 74 5f 72 6f 6f 74 28 63 6f 6e 73 74  pivot_root(const
07c0: 20 63 68 61 72 20 2a 6e 65 77 5f 72 6f 6f 74 2c   char *new_root,
07d0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 70 75 74   const char *put
07e0: 5f 6f 6c 64 29 20 7b 0a 09 72 65 74 75 72 6e 28  _old) {..return(
07f0: 73 79 73 63 61 6c 6c 28 53 59 53 5f 70 69 76 6f  syscall(SYS_pivo
0800: 74 5f 72 6f 6f 74 2c 20 6e 65 77 5f 72 6f 6f 74  t_root, new_root
0810: 2c 20 70 75 74 5f 6f 6c 64 29 29 3b 0a 7d 0a 23  , put_old));.}.#
0820: 65 6e 64 69 66 0a 0a 2f 2a 0a 20 2a 20 53 69 6d  endif../*. * Sim
0830: 70 6c 65 20 68 61 73 68 20 72 6f 75 74 69 6e 65  ple hash routine
0840: 20 74 6f 20 65 6e 61 62 6c 65 20 73 77 69 74 63   to enable switc
0850: 68 69 6e 67 20 6f 6e 20 61 20 73 74 72 69 6e 67  hing on a string
0860: 20 74 6f 20 62 65 20 69 6d 70 6c 65 6d 65 6e 74   to be implement
0870: 65 64 0a 20 2a 2f 0a 73 74 61 74 69 63 20 75 6e  ed. */.static un
0880: 73 69 67 6e 65 64 20 6c 6f 6e 67 20 74 75 61 70  signed long tuap
0890: 69 5f 69 6e 74 65 72 6e 61 6c 5f 73 69 6d 70 6c  i_internal_simpl
08a0: 65 68 61 73 68 28 63 6f 6e 73 74 20 76 6f 69 64  ehash(const void
08b0: 20 2a 64 61 74 61 62 75 66 2c 20 69 6e 74 20 64   *databuf, int d
08c0: 61 74 61 6c 65 6e 29 20 7b 0a 09 75 6e 73 69 67  atalen) {..unsig
08d0: 6e 65 64 20 6c 6f 6e 67 20 72 65 74 76 61 6c 20  ned long retval 
08e0: 3d 20 30 3b 0a 09 63 6f 6e 73 74 20 75 6e 73 69  = 0;..const unsi
08f0: 67 6e 65 64 20 63 68 61 72 20 2a 64 61 74 61 3b  gned char *data;
0900: 0a 0a 09 64 61 74 61 20 3d 20 64 61 74 61 62 75  ...data = databu
0910: 66 3b 0a 0a 09 66 6f 72 20 28 3b 20 64 61 74 61  f;...for (; data
0920: 6c 65 6e 20 3e 20 30 3b 20 64 61 74 61 6c 65 6e  len > 0; datalen
0930: 2d 2d 2c 64 61 74 61 2b 2b 29 20 7b 0a 09 09 72  --,data++) {...r
0940: 65 74 76 61 6c 20 5e 3d 20 28 72 65 74 76 61 6c  etval ^= (retval
0950: 20 3e 3e 20 32 35 29 20 26 20 30 78 37 46 3b 0a   >> 25) & 0x7F;.
0960: 09 09 72 65 74 76 61 6c 20 3c 3c 3d 20 37 3b 0a  ..retval <<= 7;.
0970: 09 09 72 65 74 76 61 6c 20 26 3d 20 28 30 78 46  ..retval &= (0xF
0980: 46 46 46 46 46 46 46 55 4c 29 3b 0a 09 09 72 65  FFFFFFFUL);...re
0990: 74 76 61 6c 20 5e 3d 20 2a 64 61 74 61 3b 0a 09  tval ^= *data;..
09a0: 7d 0a 0a 09 72 65 74 75 72 6e 28 72 65 74 76 61  }...return(retva
09b0: 6c 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 75 6e  l);.}..static un
09c0: 73 69 67 6e 65 64 20 6c 6f 6e 67 20 74 75 61 70  signed long tuap
09d0: 69 5f 69 6e 74 65 72 6e 61 6c 5f 73 69 6d 70 6c  i_internal_simpl
09e0: 65 68 61 73 68 5f 6f 62 6a 28 54 63 6c 5f 4f 62  ehash_obj(Tcl_Ob
09f0: 6a 20 2a 74 63 6c 5f 64 61 74 61 29 20 7b 0a 09  j *tcl_data) {..
0a00: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 72 65  unsigned long re
0a10: 74 76 61 6c 3b 0a 09 63 68 61 72 20 2a 64 61 74  tval;..char *dat
0a20: 61 3b 0a 09 69 6e 74 20 64 61 74 61 6c 65 6e 20  a;..int datalen 
0a30: 3d 20 2d 31 3b 0a 0a 09 64 61 74 61 20 3d 20 54  = -1;...data = T
0a40: 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d  cl_GetStringFrom
0a50: 4f 62 6a 28 74 63 6c 5f 64 61 74 61 2c 20 26 64  Obj(tcl_data, &d
0a60: 61 74 61 6c 65 6e 29 3b 0a 0a 09 72 65 74 76 61  atalen);...retva
0a70: 6c 20 3d 20 74 75 61 70 69 5f 69 6e 74 65 72 6e  l = tuapi_intern
0a80: 61 6c 5f 73 69 6d 70 6c 65 68 61 73 68 28 64 61  al_simplehash(da
0a90: 74 61 2c 20 64 61 74 61 6c 65 6e 29 3b 0a 0a 09  ta, datalen);...
0aa0: 72 65 74 75 72 6e 28 72 65 74 76 61 6c 29 3b 0a  return(retval);.
0ab0: 7d 0a 0a 23 69 66 20 30 0a 2f 2a 20 4e 4f 54 55  }..#if 0./* NOTU
0ac0: 53 45 44 3a 20 55 6e 63 6f 6d 6d 65 6e 74 20 77  SED: Uncomment w
0ad0: 68 65 6e 20 6e 65 65 64 65 64 3a 20 2a 2f 0a 73  hen needed: */.s
0ae0: 74 61 74 69 63 20 75 6e 73 69 67 6e 65 64 20 6c  tatic unsigned l
0af0: 6f 6e 67 20 74 75 61 70 69 5f 69 6e 74 65 72 6e  ong tuapi_intern
0b00: 61 6c 5f 73 69 6d 70 6c 65 68 61 73 68 5f 73 74  al_simplehash_st
0b10: 72 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 64 61  r(const char *da
0b20: 74 61 29 20 7b 0a 09 75 6e 73 69 67 6e 65 64 20  ta) {..unsigned 
0b30: 6c 6f 6e 67 20 72 65 74 76 61 6c 3b 0a 09 69 6e  long retval;..in
0b40: 74 20 64 61 74 61 6c 65 6e 3b 0a 0a 09 64 61 74  t datalen;...dat
0b50: 61 6c 65 6e 20 3d 20 73 74 72 6c 65 6e 28 64 61  alen = strlen(da
0b60: 74 61 29 3b 0a 0a 09 72 65 74 76 61 6c 20 3d 20  ta);...retval = 
0b70: 74 75 61 70 69 5f 69 6e 74 65 72 6e 61 6c 5f 73  tuapi_internal_s
0b80: 69 6d 70 6c 65 68 61 73 68 28 64 61 74 61 2c 20  implehash(data, 
0b90: 64 61 74 61 6c 65 6e 29 3b 0a 0a 09 72 65 74 75  datalen);...retu
0ba0: 72 6e 28 72 65 74 76 61 6c 29 3b 0a 7d 0a 23 65  rn(retval);.}.#e
0bb0: 6e 64 69 66 0a 0a 73 74 61 74 69 63 20 69 6e 74  ndif..static int
0bc0: 20 74 75 61 70 69 5f 69 6e 74 65 72 6e 61 6c 70   tuapi_internalp
0bd0: 72 6f 63 5f 73 69 6d 70 6c 65 68 61 73 68 28 43  roc_simplehash(C
0be0: 6c 69 65 6e 74 44 61 74 61 20 63 64 2c 20 54 63  lientData cd, Tc
0bf0: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
0c00: 2c 20 69 6e 74 20 6f 62 6a 63 2c 20 54 63 6c 5f  , int objc, Tcl_
0c10: 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
0c20: 5d 29 20 7b 0a 09 75 6e 73 69 67 6e 65 64 20 6c  ]) {..unsigned l
0c30: 6f 6e 67 20 68 61 73 68 76 61 6c 3b 0a 09 54 63  ong hashval;..Tc
0c40: 6c 5f 4f 62 6a 20 2a 68 61 73 68 76 61 6c 5f 6f  l_Obj *hashval_o
0c50: 62 6a 3b 0a 0a 09 69 66 20 28 6f 62 6a 63 20 21  bj;...if (objc !
0c60: 3d 20 32 29 20 7b 0a 09 09 54 63 6c 5f 53 65 74  = 2) {...Tcl_Set
0c70: 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70  ObjResult(interp
0c80: 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f  , Tcl_NewStringO
0c90: 62 6a 28 22 77 72 6f 6e 67 20 23 20 61 72 67 73  bj("wrong # args
0ca0: 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 3a 3a  : should be \"::
0cb0: 74 75 61 70 69 3a 3a 69 6e 74 65 72 6e 61 6c 3a  tuapi::internal:
0cc0: 3a 68 61 73 68 20 76 61 6c 75 65 5c 22 22 2c 20  :hash value\"", 
0cd0: 2d 31 29 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28  -1));....return(
0ce0: 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a  TCL_ERROR);..}..
0cf0: 09 68 61 73 68 76 61 6c 20 3d 20 74 75 61 70 69  .hashval = tuapi
0d00: 5f 69 6e 74 65 72 6e 61 6c 5f 73 69 6d 70 6c 65  _internal_simple
0d10: 68 61 73 68 5f 6f 62 6a 28 6f 62 6a 76 5b 31 5d  hash_obj(objv[1]
0d20: 29 3b 0a 0a 09 68 61 73 68 76 61 6c 5f 6f 62 6a  );...hashval_obj
0d30: 20 3d 20 54 63 6c 5f 4e 65 77 4f 62 6a 28 29 3b   = Tcl_NewObj();
0d40: 0a 09 54 63 6c 5f 53 65 74 57 69 64 65 49 6e 74  ..Tcl_SetWideInt
0d50: 4f 62 6a 28 68 61 73 68 76 61 6c 5f 6f 62 6a 2c  Obj(hashval_obj,
0d60: 20 68 61 73 68 76 61 6c 29 3b 0a 0a 09 54 63 6c   hashval);...Tcl
0d70: 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e  _SetObjResult(in
0d80: 74 65 72 70 2c 20 68 61 73 68 76 61 6c 5f 6f 62  terp, hashval_ob
0d90: 6a 29 3b 0a 0a 09 72 65 74 75 72 6e 28 54 43 4c  j);...return(TCL
0da0: 5f 4f 4b 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 20  _OK);.}..static 
0db0: 69 6e 74 20 74 75 61 70 69 5f 69 6e 74 65 72 6e  int tuapi_intern
0dc0: 61 6c 5f 67 65 74 73 6f 63 6b 28 69 6e 74 20 2a  al_getsock(int *
0dd0: 73 6f 63 6b 5f 76 34 5f 6f 75 74 2c 20 69 6e 74  sock_v4_out, int
0de0: 20 2a 73 6f 63 6b 5f 76 36 5f 6f 75 74 29 20 7b   *sock_v6_out) {
0df0: 0a 09 69 6e 74 20 73 6f 63 6b 5f 76 34 20 3d 20  ..int sock_v4 = 
0e00: 2d 31 2c 20 73 6f 63 6b 5f 76 36 20 3d 20 2d 31  -1, sock_v6 = -1
0e10: 3b 0a 09 69 6e 74 20 73 6f 63 6b 3b 0a 0a 09 69  ;..int sock;...i
0e20: 66 20 28 73 6f 63 6b 5f 76 34 5f 6f 75 74 20 3d  f (sock_v4_out =
0e30: 3d 20 4e 55 4c 4c 20 26 26 20 73 6f 63 6b 5f 76  = NULL && sock_v
0e40: 36 5f 6f 75 74 20 3d 3d 20 4e 55 4c 4c 29 20 7b  6_out == NULL) {
0e50: 0a 09 09 72 65 74 75 72 6e 28 2d 31 29 3b 0a 09  ...return(-1);..
0e60: 7d 0a 0a 09 69 66 20 28 73 6f 63 6b 5f 76 34 5f  }...if (sock_v4_
0e70: 6f 75 74 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09  out != NULL) {..
0e80: 09 2f 2a 0a 09 09 20 2a 20 43 68 65 63 6b 20 66  ./*... * Check f
0e90: 6f 72 20 49 50 76 34 20 73 75 70 70 6f 72 74 20  or IPv4 support 
0ea0: 62 65 66 6f 72 65 20 74 72 79 69 6e 67 20 74 6f  before trying to
0eb0: 20 63 72 65 61 74 65 20 61 6e 20 49 50 76 34 20   create an IPv4 
0ec0: 73 6f 63 6b 65 74 20 74 6f 0a 09 09 20 2a 20 61  socket to... * a
0ed0: 76 6f 69 64 20 64 65 6d 61 6e 64 2d 6c 6f 61 64  void demand-load
0ee0: 69 6e 67 20 49 50 76 34 20 28 58 58 58 3a 20 54  ing IPv4 (XXX: T
0ef0: 4f 44 4f 29 0a 09 09 20 2a 2f 0a 09 09 73 6f 63  ODO)... */...soc
0f00: 6b 5f 76 34 20 3d 20 73 6f 63 6b 65 74 28 41 46  k_v4 = socket(AF
0f10: 5f 49 4e 45 54 2c 20 53 4f 43 4b 5f 44 47 52 41  _INET, SOCK_DGRA
0f20: 4d 2c 20 30 29 3b 0a 09 7d 0a 0a 09 69 66 20 28  M, 0);..}...if (
0f30: 73 6f 63 6b 5f 76 36 5f 6f 75 74 20 21 3d 20 4e  sock_v6_out != N
0f40: 55 4c 4c 29 20 7b 0a 09 09 2f 2a 0a 09 09 20 2a  ULL) {.../*... *
0f50: 20 43 68 65 63 6b 20 66 6f 72 20 49 50 76 36 20   Check for IPv6 
0f60: 73 75 70 70 6f 72 74 20 62 65 66 6f 72 65 20 74  support before t
0f70: 72 79 69 6e 67 20 74 6f 20 63 72 65 61 74 65 20  rying to create 
0f80: 61 6e 20 49 50 76 36 20 73 6f 63 6b 65 74 20 74  an IPv6 socket t
0f90: 6f 0a 09 09 20 2a 20 61 76 6f 69 64 20 64 65 6d  o... * avoid dem
0fa0: 61 6e 64 2d 6c 6f 61 64 69 6e 67 20 49 50 76 36  and-loading IPv6
0fb0: 20 28 58 58 58 3a 20 54 4f 44 4f 29 0a 09 09 20   (XXX: TODO)... 
0fc0: 2a 2f 0a 09 09 73 6f 63 6b 5f 76 36 20 3d 20 73  */...sock_v6 = s
0fd0: 6f 63 6b 65 74 28 41 46 5f 49 4e 45 54 36 2c 20  ocket(AF_INET6, 
0fe0: 53 4f 43 4b 5f 44 47 52 41 4d 2c 20 30 29 3b 0a  SOCK_DGRAM, 0);.
0ff0: 09 7d 0a 0a 09 2f 2a 20 50 69 63 6b 20 61 20 73  .}.../* Pick a s
1000: 6f 63 6b 65 74 20 74 6f 20 71 75 65 72 79 20 66  ocket to query f
1010: 6f 72 20 74 68 65 20 69 6e 74 65 72 66 61 63 65  or the interface
1020: 20 6c 69 73 74 20 2a 2f 0a 09 69 66 20 28 73 6f   list */..if (so
1030: 63 6b 5f 76 34 20 3d 3d 20 2d 31 20 26 26 20 73  ck_v4 == -1 && s
1040: 6f 63 6b 5f 76 36 20 3d 3d 20 2d 31 29 20 7b 0a  ock_v6 == -1) {.
1050: 09 09 72 65 74 75 72 6e 28 2d 31 29 3b 0a 09 7d  ..return(-1);..}
1060: 0a 0a 09 69 66 20 28 73 6f 63 6b 5f 76 36 20 21  ...if (sock_v6 !
1070: 3d 20 2d 31 29 20 7b 0a 09 09 73 6f 63 6b 20 3d  = -1) {...sock =
1080: 20 73 6f 63 6b 5f 76 36 3b 0a 09 7d 20 65 6c 73   sock_v6;..} els
1090: 65 20 7b 0a 09 09 73 6f 63 6b 20 3d 20 73 6f 63  e {...sock = soc
10a0: 6b 5f 76 34 3b 0a 09 7d 0a 0a 09 69 66 20 28 73  k_v4;..}...if (s
10b0: 6f 63 6b 5f 76 34 5f 6f 75 74 20 21 3d 20 4e 55  ock_v4_out != NU
10c0: 4c 4c 29 20 7b 0a 09 09 2a 73 6f 63 6b 5f 76 34  LL) {...*sock_v4
10d0: 5f 6f 75 74 20 3d 20 73 6f 63 6b 5f 76 34 3b 0a  _out = sock_v4;.
10e0: 09 7d 0a 0a 09 69 66 20 28 73 6f 63 6b 5f 76 36  .}...if (sock_v6
10f0: 5f 6f 75 74 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a  _out != NULL) {.
1100: 09 09 2a 73 6f 63 6b 5f 76 36 5f 6f 75 74 20 3d  ..*sock_v6_out =
1110: 20 73 6f 63 6b 5f 76 36 3b 0a 09 7d 0a 0a 09 72   sock_v6;..}...r
1120: 65 74 75 72 6e 28 73 6f 63 6b 29 3b 0a 7d 0a 0a  eturn(sock);.}..
1130: 2f 2a 0a 20 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20  /*. * Low-level 
1140: 53 79 73 74 65 6d 20 43 61 6c 6c 20 57 72 61 70  System Call Wrap
1150: 70 65 72 20 50 72 6f 63 65 64 75 72 65 73 0a 20  per Procedures. 
1160: 2a 0a 20 2a 20 54 68 65 73 65 20 70 72 6f 63 65  *. * These proce
1170: 64 75 72 65 73 20 73 68 6f 75 6c 64 20 6d 69 6e  dures should min
1180: 69 6d 61 6c 6c 79 20 77 72 61 70 20 4c 69 6e 75  imally wrap Linu
1190: 78 20 6f 72 20 55 4e 49 58 20 73 79 73 74 65 6d  x or UNIX system
11a0: 20 63 61 6c 6c 73 20 74 6f 0a 20 2a 20 65 78 70   calls to. * exp
11b0: 6f 73 65 20 74 6f 20 74 68 65 20 54 63 6c 2d 6c  ose to the Tcl-l
11c0: 65 76 65 6c 2e 20 20 57 68 65 72 65 20 70 6f 73  evel.  Where pos
11d0: 73 69 62 6c 65 20 61 63 63 65 70 74 20 73 79 6d  sible accept sym
11e0: 62 6f 6c 69 63 20 6e 61 6d 65 73 20 72 61 74 68  bolic names rath
11f0: 65 72 0a 20 2a 20 74 68 61 6e 20 6e 75 6d 65 72  er. * than numer
1200: 69 63 20 76 61 6c 75 65 73 20 28 2e 65 2e 67 2c  ic values (.e.g,
1210: 20 6c 69 73 74 20 6f 66 20 76 61 6c 75 65 73 20   list of values 
1220: 74 6f 20 4f 52 20 74 6f 67 65 74 68 65 72 20 74  to OR together t
1230: 6f 20 67 65 74 20 66 6c 61 67 73 29 2e 0a 20 2a  o get flags).. *
1240: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 75 61  /.static int tua
1250: 70 69 5f 6d 6f 75 6e 74 28 43 6c 69 65 6e 74 44  pi_mount(ClientD
1260: 61 74 61 20 63 64 2c 20 54 63 6c 5f 49 6e 74 65  ata cd, Tcl_Inte
1270: 72 70 20 2a 69 6e 74 65 72 70 2c 20 69 6e 74 20  rp *interp, int 
1280: 6f 62 6a 63 2c 20 54 63 6c 5f 4f 62 6a 20 2a 43  objc, Tcl_Obj *C
1290: 4f 4e 53 54 20 6f 62 6a 76 5b 5d 29 20 7b 0a 09  ONST objv[]) {..
12a0: 54 63 6c 5f 4f 62 6a 20 2a 6d 6f 75 6e 74 66 6c  Tcl_Obj *mountfl
12b0: 61 67 73 5f 6f 62 6a 2c 20 2a 2a 6d 6f 75 6e 74  ags_obj, **mount
12c0: 66 6c 61 67 73 5f 6c 69 73 74 2c 20 2a 6d 6f 75  flags_list, *mou
12d0: 6e 74 66 6c 61 67 3b 0a 09 69 6e 74 20 6d 6f 75  ntflag;..int mou
12e0: 6e 74 66 6c 61 67 73 5f 6c 69 73 74 5f 6c 65 6e  ntflags_list_len
12f0: 3b 0a 09 63 68 61 72 20 2a 73 6f 75 72 63 65 2c  ;..char *source,
1300: 20 2a 74 61 72 67 65 74 2c 20 2a 66 73 74 79 70   *target, *fstyp
1310: 65 3b 0a 09 75 6e 73 69 67 6e 65 64 20 6c 6f 6e  e;..unsigned lon
1320: 67 20 6d 6f 75 6e 74 66 6c 61 67 73 20 3d 20 30  g mountflags = 0
1330: 3b 0a 09 76 6f 69 64 20 2a 64 61 74 61 20 3d 20  ;..void *data = 
1340: 4e 55 4c 4c 3b 0a 09 69 6e 74 20 6d 6f 75 6e 74  NULL;..int mount
1350: 5f 72 65 74 2c 20 74 63 6c 5f 72 65 74 3b 0a 0a  _ret, tcl_ret;..
1360: 09 69 66 20 28 6f 62 6a 63 20 3c 20 35 20 7c 7c  .if (objc < 5 ||
1370: 20 6f 62 6a 63 20 3e 20 36 29 20 7b 0a 09 09 54   objc > 6) {...T
1380: 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28  cl_SetObjResult(
1390: 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53  interp, Tcl_NewS
13a0: 74 72 69 6e 67 4f 62 6a 28 22 77 72 6f 6e 67 20  tringObj("wrong 
13b0: 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
13c0: 65 20 5c 22 3a 3a 74 75 61 70 69 3a 3a 73 79 73  e \"::tuapi::sys
13d0: 63 61 6c 6c 3a 3a 6d 6f 75 6e 74 20 73 6f 75 72  call::mount sour
13e0: 63 65 20 74 61 72 67 65 74 20 66 73 74 79 70 65  ce target fstype
13f0: 20 6d 6f 75 6e 74 66 6c 61 67 73 20 3f 64 61 74   mountflags ?dat
1400: 61 3f 5c 22 22 2c 20 2d 31 29 29 3b 0a 0a 09 09  a?\"", -1));....
1410: 72 65 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52  return(TCL_ERROR
1420: 29 3b 0a 09 7d 0a 0a 09 73 6f 75 72 63 65 20 3d  );..}...source =
1430: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
1440: 62 6a 76 5b 31 5d 29 3b 0a 09 74 61 72 67 65 74  bjv[1]);..target
1450: 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67   = Tcl_GetString
1460: 28 6f 62 6a 76 5b 32 5d 29 3b 0a 09 66 73 74 79  (objv[2]);..fsty
1470: 70 65 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69  pe = Tcl_GetStri
1480: 6e 67 28 6f 62 6a 76 5b 33 5d 29 3b 0a 09 6d 6f  ng(objv[3]);..mo
1490: 75 6e 74 66 6c 61 67 73 5f 6f 62 6a 20 3d 20 6f  untflags_obj = o
14a0: 62 6a 76 5b 34 5d 3b 0a 0a 09 69 66 20 28 6f 62  bjv[4];...if (ob
14b0: 6a 63 20 3d 3d 20 36 29 20 7b 0a 09 09 64 61 74  jc == 6) {...dat
14c0: 61 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  a = Tcl_GetStrin
14d0: 67 28 6f 62 6a 76 5b 35 5d 29 3b 0a 09 7d 0a 0a  g(objv[5]);..}..
14e0: 09 74 63 6c 5f 72 65 74 20 3d 20 54 63 6c 5f 4c  .tcl_ret = Tcl_L
14f0: 69 73 74 4f 62 6a 47 65 74 45 6c 65 6d 65 6e 74  istObjGetElement
1500: 73 28 69 6e 74 65 72 70 2c 20 6d 6f 75 6e 74 66  s(interp, mountf
1510: 6c 61 67 73 5f 6f 62 6a 2c 20 26 6d 6f 75 6e 74  lags_obj, &mount
1520: 66 6c 61 67 73 5f 6c 69 73 74 5f 6c 65 6e 2c 20  flags_list_len, 
1530: 26 6d 6f 75 6e 74 66 6c 61 67 73 5f 6c 69 73 74  &mountflags_list
1540: 29 3b 0a 09 69 66 20 28 74 63 6c 5f 72 65 74 20  );..if (tcl_ret 
1550: 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a 09 09 72  != TCL_OK) {...r
1560: 65 74 75 72 6e 28 74 63 6c 5f 72 65 74 29 3b 0a  eturn(tcl_ret);.
1570: 09 7d 0a 0a 09 66 6f 72 20 28 3b 20 6d 6f 75 6e  .}...for (; moun
1580: 74 66 6c 61 67 73 5f 6c 69 73 74 5f 6c 65 6e 20  tflags_list_len 
1590: 3e 20 30 3b 20 6d 6f 75 6e 74 66 6c 61 67 73 5f  > 0; mountflags_
15a0: 6c 69 73 74 5f 6c 65 6e 2d 2d 2c 6d 6f 75 6e 74  list_len--,mount
15b0: 66 6c 61 67 73 5f 6c 69 73 74 2b 2b 29 20 7b 0a  flags_list++) {.
15c0: 09 09 6d 6f 75 6e 74 66 6c 61 67 20 3d 20 6d 6f  ..mountflag = mo
15d0: 75 6e 74 66 6c 61 67 73 5f 6c 69 73 74 5b 30 5d  untflags_list[0]
15e0: 3b 0a 0a 09 09 73 77 69 74 63 68 20 28 74 75 61  ;....switch (tua
15f0: 70 69 5f 69 6e 74 65 72 6e 61 6c 5f 73 69 6d 70  pi_internal_simp
1600: 6c 65 68 61 73 68 5f 6f 62 6a 28 6d 6f 75 6e 74  lehash_obj(mount
1610: 66 6c 61 67 29 29 20 7b 0a 23 69 66 64 65 66 20  flag)) {.#ifdef 
1620: 4d 53 5f 42 49 4e 44 0a 09 09 09 63 61 73 65 20  MS_BIND....case 
1630: 30 78 38 35 32 36 37 34 34 3a 20 2f 2a 20 42 49  0x8526744: /* BI
1640: 4e 44 20 2a 2f 0a 09 09 09 09 6d 6f 75 6e 74 66  ND */.....mountf
1650: 6c 61 67 73 20 7c 3d 20 4d 53 5f 42 49 4e 44 3b  lags |= MS_BIND;
1660: 0a 09 09 09 09 62 72 65 61 6b 3b 0a 23 65 6e 64  .....break;.#end
1670: 69 66 0a 23 69 66 64 65 66 20 4d 53 5f 44 49 52  if.#ifdef MS_DIR
1680: 53 59 4e 43 0a 09 09 09 63 61 73 65 20 30 78 32  SYNC....case 0x2
1690: 61 66 66 34 31 63 33 3a 20 2f 2a 20 44 49 52 53  aff41c3: /* DIRS
16a0: 59 4e 43 20 2a 2f 0a 09 09 09 09 6d 6f 75 6e 74  YNC */.....mount
16b0: 66 6c 61 67 73 20 7c 3d 20 4d 53 5f 44 49 52 53  flags |= MS_DIRS
16c0: 59 4e 43 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a  YNC;.....break;.
16d0: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 4d 53  #endif.#ifdef MS
16e0: 5f 4d 41 4e 44 4c 4f 43 4b 0a 09 09 09 63 61 73  _MANDLOCK....cas
16f0: 65 20 30 78 34 31 30 64 62 63 62 3a 20 2f 2a 20  e 0x410dbcb: /* 
1700: 4d 41 4e 44 4c 4f 43 4b 20 2a 2f 0a 09 09 09 09  MANDLOCK */.....
1710: 6d 6f 75 6e 74 66 6c 61 67 73 20 7c 3d 20 4d 53  mountflags |= MS
1720: 5f 4d 41 4e 44 4c 4f 43 4b 3b 0a 09 09 09 09 62  _MANDLOCK;.....b
1730: 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 23 69 66  reak;.#endif.#if
1740: 64 65 66 20 4d 53 5f 4d 4f 56 45 0a 09 09 09 63  def MS_MOVE....c
1750: 61 73 65 20 30 78 39 62 33 65 62 34 35 3a 20 2f  ase 0x9b3eb45: /
1760: 2a 20 4d 4f 56 45 20 2a 2f 0a 09 09 09 09 6d 6f  * MOVE */.....mo
1770: 75 6e 74 66 6c 61 67 73 20 7c 3d 20 4d 53 5f 4d  untflags |= MS_M
1780: 4f 56 45 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a  OVE;.....break;.
1790: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 4d 53  #endif.#ifdef MS
17a0: 5f 4e 4f 41 54 49 4d 45 0a 09 09 09 63 61 73 65  _NOATIME....case
17b0: 20 30 78 31 61 30 66 35 38 63 35 3a 20 2f 2a 20   0x1a0f58c5: /* 
17c0: 4e 4f 41 54 49 4d 45 20 2a 2f 0a 09 09 09 09 6d  NOATIME */.....m
17d0: 6f 75 6e 74 66 6c 61 67 73 20 7c 3d 20 4d 53 5f  ountflags |= MS_
17e0: 4e 4f 41 54 49 4d 45 3b 0a 09 09 09 09 62 72 65  NOATIME;.....bre
17f0: 61 6b 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65  ak;.#endif.#ifde
1800: 66 20 4d 53 5f 4e 4f 44 45 56 0a 09 09 09 63 61  f MS_NODEV....ca
1810: 73 65 20 30 78 65 39 66 31 32 30 64 36 3a 20 2f  se 0xe9f120d6: /
1820: 2a 20 4e 4f 44 45 56 20 2a 2f 0a 09 09 09 09 6d  * NODEV */.....m
1830: 6f 75 6e 74 66 6c 61 67 73 20 7c 3d 20 4d 53 5f  ountflags |= MS_
1840: 4e 4f 44 45 56 3b 0a 09 09 09 09 62 72 65 61 6b  NODEV;.....break
1850: 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20  ;.#endif.#ifdef 
1860: 4d 53 5f 4e 4f 44 49 52 41 54 49 4d 45 0a 09 09  MS_NODIRATIME...
1870: 09 63 61 73 65 20 30 78 64 65 30 38 66 66 34 35  .case 0xde08ff45
1880: 3a 20 2f 2a 20 4e 4f 44 49 52 41 54 49 4d 45 20  : /* NODIRATIME 
1890: 2a 2f 0a 09 09 09 09 6d 6f 75 6e 74 66 6c 61 67  */.....mountflag
18a0: 73 20 7c 3d 20 4d 53 5f 4e 4f 44 49 52 41 54 49  s |= MS_NODIRATI
18b0: 4d 45 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a 23  ME;.....break;.#
18c0: 65 6e 64 69 66 0a 23 69 66 64 65 66 20 4d 53 5f  endif.#ifdef MS_
18d0: 4e 4f 45 58 45 43 0a 09 09 09 63 61 73 65 20 30  NOEXEC....case 0
18e0: 78 66 38 62 37 31 38 63 33 3a 20 2f 2a 20 4e 4f  xf8b718c3: /* NO
18f0: 45 58 45 43 20 2a 2f 0a 09 09 09 09 6d 6f 75 6e  EXEC */.....moun
1900: 74 66 6c 61 67 73 20 7c 3d 20 4d 53 5f 4e 4f 45  tflags |= MS_NOE
1910: 58 45 43 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a  XEC;.....break;.
1920: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 4d 53  #endif.#ifdef MS
1930: 5f 4e 4f 53 55 49 44 0a 09 09 09 63 61 73 65 20  _NOSUID....case 
1940: 30 78 66 61 37 34 35 65 63 34 3a 20 2f 2a 20 4e  0xfa745ec4: /* N
1950: 4f 53 55 49 44 20 2a 2f 0a 09 09 09 09 6d 6f 75  OSUID */.....mou
1960: 6e 74 66 6c 61 67 73 20 7c 3d 20 4d 53 5f 4e 4f  ntflags |= MS_NO
1970: 53 55 49 44 3b 0a 09 09 09 09 62 72 65 61 6b 3b  SUID;.....break;
1980: 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 4d  .#endif.#ifdef M
1990: 53 5f 52 44 4f 4e 4c 59 0a 09 09 09 63 61 73 65  S_RDONLY....case
19a0: 20 30 78 34 39 66 32 65 63 35 39 3a 20 2f 2a 20   0x49f2ec59: /* 
19b0: 52 44 4f 4e 4c 59 20 2a 2f 0a 09 09 09 09 6d 6f  RDONLY */.....mo
19c0: 75 6e 74 66 6c 61 67 73 20 7c 3d 20 4d 53 5f 52  untflags |= MS_R
19d0: 44 4f 4e 4c 59 3b 0a 09 09 09 09 62 72 65 61 6b  DONLY;.....break
19e0: 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20  ;.#endif.#ifdef 
19f0: 4d 53 5f 52 45 4c 41 54 49 4d 45 0a 09 09 09 63  MS_RELATIME....c
1a00: 61 73 65 20 30 78 34 38 31 39 35 34 63 35 3a 20  ase 0x481954c5: 
1a10: 2f 2a 20 52 45 4c 41 54 49 4d 45 20 2a 2f 0a 09  /* RELATIME */..
1a20: 09 09 09 6d 6f 75 6e 74 66 6c 61 67 73 20 7c 3d  ...mountflags |=
1a30: 20 4d 53 5f 52 45 4c 41 54 49 4d 45 3b 0a 09 09   MS_RELATIME;...
1a40: 09 09 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a  ..break;.#endif.
1a50: 23 69 66 64 65 66 20 4d 53 5f 52 45 4d 4f 55 4e  #ifdef MS_REMOUN
1a60: 54 0a 09 09 09 63 61 73 65 20 30 78 64 39 35 30  T....case 0xd950
1a70: 37 31 35 34 3a 20 2f 2a 20 52 45 4d 4f 55 4e 54  7154: /* REMOUNT
1a80: 20 2a 2f 0a 09 09 09 09 6d 6f 75 6e 74 66 6c 61   */.....mountfla
1a90: 67 73 20 7c 3d 20 4d 53 5f 52 45 4d 4f 55 4e 54  gs |= MS_REMOUNT
1aa0: 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a 23 65 6e  ;.....break;.#en
1ab0: 64 69 66 0a 23 69 66 64 65 66 20 4d 53 5f 53 49  dif.#ifdef MS_SI
1ac0: 4c 45 4e 54 0a 09 09 09 63 61 73 65 20 30 78 39  LENT....case 0x9
1ad0: 39 39 30 32 39 35 34 3a 20 2f 2a 20 53 49 4c 45  9902954: /* SILE
1ae0: 4e 54 20 2a 2f 0a 09 09 09 09 6d 6f 75 6e 74 66  NT */.....mountf
1af0: 6c 61 67 73 20 7c 3d 20 4d 53 5f 53 49 4c 45 4e  lags |= MS_SILEN
1b00: 54 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a 23 65  T;.....break;.#e
1b10: 6e 64 69 66 0a 23 69 66 64 65 66 20 4d 53 5f 53  ndif.#ifdef MS_S
1b20: 54 52 49 43 54 41 54 49 4d 45 0a 09 09 09 63 61  TRICTATIME....ca
1b30: 73 65 20 30 78 35 36 32 66 61 30 34 35 3a 20 2f  se 0x562fa045: /
1b40: 2a 20 53 54 52 49 43 54 41 54 49 4d 45 20 2a 2f  * STRICTATIME */
1b50: 0a 09 09 09 09 6d 6f 75 6e 74 66 6c 61 67 73 20  .....mountflags 
1b60: 7c 3d 20 4d 53 5f 53 54 52 49 43 54 41 54 49 4d  |= MS_STRICTATIM
1b70: 45 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a 23 65  E;.....break;.#e
1b80: 6e 64 69 66 0a 23 69 66 64 65 66 20 4d 53 5f 53  ndif.#ifdef MS_S
1b90: 59 4e 43 48 52 4f 4e 4f 55 53 0a 09 09 09 63 61  YNCHRONOUS....ca
1ba0: 73 65 20 30 78 62 66 37 39 39 33 35 33 3a 20 2f  se 0xbf799353: /
1bb0: 2a 20 53 59 4e 43 48 52 4f 4e 4f 55 53 20 2a 2f  * SYNCHRONOUS */
1bc0: 0a 09 09 09 63 61 73 65 20 30 78 61 37 36 36 37  ....case 0xa7667
1bd0: 34 33 3a 20 2f 2a 20 53 59 4e 43 20 2a 2f 0a 09  43: /* SYNC */..
1be0: 09 09 09 6d 6f 75 6e 74 66 6c 61 67 73 20 7c 3d  ...mountflags |=
1bf0: 20 4d 53 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 3b   MS_SYNCHRONOUS;
1c00: 0a 09 09 09 09 62 72 65 61 6b 3b 0a 23 65 6e 64  .....break;.#end
1c10: 69 66 0a 09 09 09 64 65 66 61 75 6c 74 3a 0a 09  if....default:..
1c20: 09 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73  ...Tcl_SetObjRes
1c30: 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ult(interp, Tcl_
1c40: 4f 62 6a 50 72 69 6e 74 66 28 22 75 6e 6b 6e 6f  ObjPrintf("unkno
1c50: 77 6e 20 65 6c 65 6d 65 6e 74 20 69 6e 20 6d 6f  wn element in mo
1c60: 75 6e 74 66 6c 61 67 73 3a 20 5c 22 25 73 5c 22  untflags: \"%s\"
1c70: 22 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  ", Tcl_GetString
1c80: 28 6d 6f 75 6e 74 66 6c 61 67 29 29 29 3b 0a 0a  (mountflag)));..
1c90: 09 09 09 09 72 65 74 75 72 6e 28 54 43 4c 5f 45  ....return(TCL_E
1ca0: 52 52 4f 52 29 3b 0a 09 09 7d 0a 09 7d 0a 0a 09  RROR);...}..}...
1cb0: 6d 6f 75 6e 74 5f 72 65 74 20 3d 20 6d 6f 75 6e  mount_ret = moun
1cc0: 74 28 73 6f 75 72 63 65 2c 20 74 61 72 67 65 74  t(source, target
1cd0: 2c 20 66 73 74 79 70 65 2c 20 6d 6f 75 6e 74 66  , fstype, mountf
1ce0: 6c 61 67 73 2c 20 64 61 74 61 29 3b 0a 09 69 66  lags, data);..if
1cf0: 20 28 6d 6f 75 6e 74 5f 72 65 74 20 21 3d 20 30   (mount_ret != 0
1d00: 29 20 7b 0a 09 09 54 63 6c 5f 53 65 74 4f 62 6a  ) {...Tcl_SetObj
1d10: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54  Result(interp, T
1d20: 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28  cl_NewStringObj(
1d30: 73 74 72 65 72 72 6f 72 28 65 72 72 6e 6f 29 2c  strerror(errno),
1d40: 20 2d 31 29 29 3b 0a 0a 09 09 72 65 74 75 72 6e   -1));....return
1d50: 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a  (TCL_ERROR);..}.
1d60: 0a 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75  ..Tcl_SetObjResu
1d70: 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e  lt(interp, Tcl_N
1d80: 65 77 53 74 72 69 6e 67 4f 62 6a 28 74 61 72 67  ewStringObj(targ
1d90: 65 74 2c 20 2d 31 29 29 3b 0a 0a 09 72 65 74 75  et, -1));...retu
1da0: 72 6e 28 54 43 4c 5f 4f 4b 29 3b 0a 7d 0a 0a 73  rn(TCL_OK);.}..s
1db0: 74 61 74 69 63 20 69 6e 74 20 74 75 61 70 69 5f  tatic int tuapi_
1dc0: 75 6d 6f 75 6e 74 28 43 6c 69 65 6e 74 44 61 74  umount(ClientDat
1dd0: 61 20 63 64 2c 20 54 63 6c 5f 49 6e 74 65 72 70  a cd, Tcl_Interp
1de0: 20 2a 69 6e 74 65 72 70 2c 20 69 6e 74 20 6f 62   *interp, int ob
1df0: 6a 63 2c 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  jc, Tcl_Obj *CON
1e00: 53 54 20 6f 62 6a 76 5b 5d 29 20 7b 0a 09 54 63  ST objv[]) {..Tc
1e10: 6c 5f 4f 62 6a 20 2a 2a 66 6c 61 67 73 2c 20 2a  l_Obj **flags, *
1e20: 66 6c 61 67 3b 0a 09 54 63 6c 5f 4f 62 6a 20 2a  flag;..Tcl_Obj *
1e30: 70 61 74 68 6e 61 6d 65 5f 6f 62 6a 3b 0a 09 63  pathname_obj;..c
1e40: 68 61 72 20 2a 70 61 74 68 6e 61 6d 65 3b 0a 09  har *pathname;..
1e50: 69 6e 74 20 75 6d 6f 75 6e 74 32 5f 66 6c 61 67  int umount2_flag
1e60: 73 20 3d 20 30 3b 0a 09 69 6e 74 20 66 6c 61 67  s = 0;..int flag
1e70: 73 5f 63 6e 74 3b 0a 09 69 6e 74 20 63 68 6b 5f  s_cnt;..int chk_
1e80: 72 65 74 2c 20 74 63 6c 5f 72 65 74 3b 0a 0a 09  ret, tcl_ret;...
1e90: 69 66 20 28 6f 62 6a 63 20 3c 20 32 20 7c 7c 20  if (objc < 2 || 
1ea0: 6f 62 6a 63 20 3e 20 33 29 20 7b 0a 09 09 54 63  objc > 3) {...Tc
1eb0: 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69  l_SetObjResult(i
1ec0: 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74  nterp, Tcl_NewSt
1ed0: 72 69 6e 67 4f 62 6a 28 22 77 72 6f 6e 67 20 23  ringObj("wrong #
1ee0: 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
1ef0: 20 5c 22 74 75 61 70 69 3a 3a 73 79 73 63 61 6c   \"tuapi::syscal
1f00: 6c 3a 3a 75 6d 6f 75 6e 74 20 64 69 72 20 3f 66  l::umount dir ?f
1f10: 6c 61 67 73 3f 5c 22 22 2c 20 2d 31 29 29 3b 0a  lags?\"", -1));.
1f20: 0a 09 09 72 65 74 75 72 6e 28 54 43 4c 5f 45 52  ...return(TCL_ER
1f30: 52 4f 52 29 3b 0a 09 7d 0a 0a 09 70 61 74 68 6e  ROR);..}...pathn
1f40: 61 6d 65 5f 6f 62 6a 20 3d 20 6f 62 6a 76 5b 31  ame_obj = objv[1
1f50: 5d 3b 0a 09 70 61 74 68 6e 61 6d 65 20 3d 20 54  ];..pathname = T
1f60: 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 70 61 74  cl_GetString(pat
1f70: 68 6e 61 6d 65 5f 6f 62 6a 29 3b 0a 0a 09 2f 2a  hname_obj);.../*
1f80: 20 53 65 74 20 61 20 64 65 66 61 75 6c 74 20 72   Set a default r
1f90: 65 74 75 72 6e 20 76 61 6c 75 65 20 2a 2f 0a 09  eturn value */..
1fa0: 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
1fb0: 28 69 6e 74 65 72 70 2c 20 70 61 74 68 6e 61 6d  (interp, pathnam
1fc0: 65 5f 6f 62 6a 29 3b 0a 0a 09 69 66 20 28 6f 62  e_obj);...if (ob
1fd0: 6a 63 20 3d 3d 20 33 29 20 7b 0a 09 09 74 63 6c  jc == 3) {...tcl
1fe0: 5f 72 65 74 20 3d 20 54 63 6c 5f 4c 69 73 74 4f  _ret = Tcl_ListO
1ff0: 62 6a 47 65 74 45 6c 65 6d 65 6e 74 73 28 69 6e  bjGetElements(in
2000: 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26  terp, objv[2], &
2010: 66 6c 61 67 73 5f 63 6e 74 2c 20 26 66 6c 61 67  flags_cnt, &flag
2020: 73 29 3b 0a 09 09 69 66 20 28 74 63 6c 5f 72 65  s);...if (tcl_re
2030: 74 20 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a 09  t != TCL_OK) {..
2040: 09 09 72 65 74 75 72 6e 28 74 63 6c 5f 72 65 74  ..return(tcl_ret
2050: 29 3b 0a 09 09 7d 0a 0a 09 09 66 6f 72 20 28 3b  );...}....for (;
2060: 20 66 6c 61 67 73 5f 63 6e 74 20 3e 20 30 3b 20   flags_cnt > 0; 
2070: 66 6c 61 67 73 5f 63 6e 74 2d 2d 2c 66 6c 61 67  flags_cnt--,flag
2080: 73 2b 2b 29 20 7b 0a 09 09 09 66 6c 61 67 20 3d  s++) {....flag =
2090: 20 66 6c 61 67 73 5b 30 5d 3b 0a 0a 09 09 09 73   flags[0];.....s
20a0: 77 69 74 63 68 20 28 74 75 61 70 69 5f 69 6e 74  witch (tuapi_int
20b0: 65 72 6e 61 6c 5f 73 69 6d 70 6c 65 68 61 73 68  ernal_simplehash
20c0: 5f 6f 62 6a 28 66 6c 61 67 29 29 20 7b 0a 09 09  _obj(flag)) {...
20d0: 09 09 63 61 73 65 20 30 78 36 39 66 34 61 33 63  ..case 0x69f4a3c
20e0: 35 3a 20 2f 2a 20 46 4f 52 43 45 20 2a 2f 0a 09  5: /* FORCE */..
20f0: 09 09 09 09 75 6d 6f 75 6e 74 32 5f 66 6c 61 67  ....umount2_flag
2100: 73 20 7c 3d 20 4d 4e 54 5f 46 4f 52 43 45 3b 0a  s |= MNT_FORCE;.
2110: 0a 09 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09  ......break;....
2120: 09 63 61 73 65 20 30 78 35 61 39 31 37 33 63 38  .case 0x5a9173c8
2130: 3a 20 2f 2a 20 44 45 54 41 43 48 20 2a 2f 0a 09  : /* DETACH */..
2140: 09 09 09 09 75 6d 6f 75 6e 74 32 5f 66 6c 61 67  ....umount2_flag
2150: 73 20 7c 3d 20 4d 4e 54 5f 44 45 54 41 43 48 3b  s |= MNT_DETACH;
2160: 0a 0a 09 09 09 09 09 62 72 65 61 6b 3b 0a 09 09  .......break;...
2170: 09 09 63 61 73 65 20 30 78 38 61 31 33 37 66 63  ..case 0x8a137fc
2180: 35 3a 20 2f 2a 20 45 58 50 49 52 45 20 2a 2f 0a  5: /* EXPIRE */.
2190: 09 09 09 09 09 75 6d 6f 75 6e 74 32 5f 66 6c 61  .....umount2_fla
21a0: 67 73 20 7c 3d 20 4d 4e 54 5f 45 58 50 49 52 45  gs |= MNT_EXPIRE
21b0: 3b 0a 0a 09 09 09 09 09 62 72 65 61 6b 3b 0a 09  ;.......break;..
21c0: 09 09 09 64 65 66 61 75 6c 74 3a 0a 09 09 09 09  ...default:.....
21d0: 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c  .Tcl_SetObjResul
21e0: 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4f 62  t(interp, Tcl_Ob
21f0: 6a 50 72 69 6e 74 66 28 22 75 6e 6b 6e 6f 77 6e  jPrintf("unknown
2200: 20 66 6c 61 67 20 5c 22 25 73 5c 22 20 73 70 65   flag \"%s\" spe
2210: 63 69 66 69 65 64 22 2c 20 54 63 6c 5f 47 65 74  cified", Tcl_Get
2220: 53 74 72 69 6e 67 28 66 6c 61 67 29 29 29 3b 0a  String(flag)));.
2230: 09 0a 09 09 09 09 09 72 65 74 75 72 6e 28 54 43  .......return(TC
2240: 4c 5f 45 52 52 4f 52 29 3b 0a 09 09 09 7d 0a 09  L_ERROR);....}..
2250: 09 7d 0a 0a 09 09 63 68 6b 5f 72 65 74 20 3d 20  .}....chk_ret = 
2260: 75 6d 6f 75 6e 74 32 28 70 61 74 68 6e 61 6d 65  umount2(pathname
2270: 2c 20 75 6d 6f 75 6e 74 32 5f 66 6c 61 67 73 29  , umount2_flags)
2280: 3b 0a 0a 09 09 2f 2a 20 44 6f 20 6e 6f 74 20 72  ;..../* Do not r
2290: 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 66  eturn an error f
22a0: 6f 72 20 74 68 69 73 20 63 61 73 65 2c 20 73 69  or this case, si
22b0: 6e 63 65 20 69 74 20 69 73 20 61 70 70 61 72 65  nce it is appare
22c0: 6e 74 6c 79 20 6e 6f 74 20 65 78 63 65 70 74 69  ntly not excepti
22d0: 6f 6e 61 6c 20 2a 2f 0a 09 09 69 66 20 28 63 68  onal */...if (ch
22e0: 6b 5f 72 65 74 20 21 3d 20 30 20 26 26 20 28 75  k_ret != 0 && (u
22f0: 6d 6f 75 6e 74 32 5f 66 6c 61 67 73 20 26 20 4d  mount2_flags & M
2300: 4e 54 5f 45 58 50 49 52 45 29 20 3d 3d 20 4d 4e  NT_EXPIRE) == MN
2310: 54 5f 45 58 50 49 52 45 20 26 26 20 65 72 72 6e  T_EXPIRE && errn
2320: 6f 20 3d 3d 20 45 41 47 41 49 4e 29 20 7b 0a 09  o == EAGAIN) {..
2330: 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75  ..Tcl_SetObjResu
2340: 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e  lt(interp, Tcl_N
2350: 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 41 47 41  ewStringObj("AGA
2360: 49 4e 22 2c 20 2d 31 29 29 3b 0a 0a 09 09 09 63  IN", -1));.....c
2370: 68 6b 5f 72 65 74 20 3d 20 30 3b 0a 09 09 7d 0a  hk_ret = 0;...}.
2380: 09 7d 20 65 6c 73 65 20 7b 0a 09 09 63 68 6b 5f  .} else {...chk_
2390: 72 65 74 20 3d 20 75 6d 6f 75 6e 74 28 70 61 74  ret = umount(pat
23a0: 68 6e 61 6d 65 29 3b 0a 09 7d 0a 0a 09 69 66 20  hname);..}...if 
23b0: 28 63 68 6b 5f 72 65 74 20 21 3d 20 30 29 20 7b  (chk_ret != 0) {
23c0: 0a 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73  ...Tcl_SetObjRes
23d0: 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ult(interp, Tcl_
23e0: 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 73 74 72  NewStringObj(str
23f0: 65 72 72 6f 72 28 65 72 72 6e 6f 29 2c 20 2d 31  error(errno), -1
2400: 29 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 54 43  ));....return(TC
2410: 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 72  L_ERROR);..}...r
2420: 65 74 75 72 6e 28 54 43 4c 5f 4f 4b 29 3b 0a 7d  eturn(TCL_OK);.}
2430: 0a 0a 73 74 61 74 69 63 20 69 6e 74 20 74 75 61  ..static int tua
2440: 70 69 5f 73 77 61 70 6f 6e 28 43 6c 69 65 6e 74  pi_swapon(Client
2450: 44 61 74 61 20 63 64 2c 20 54 63 6c 5f 49 6e 74  Data cd, Tcl_Int
2460: 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 69 6e 74  erp *interp, int
2470: 20 6f 62 6a 63 2c 20 54 63 6c 5f 4f 62 6a 20 2a   objc, Tcl_Obj *
2480: 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 29 20 7b 0a  CONST objv[]) {.
2490: 09 63 68 61 72 20 2a 70 61 74 68 6e 61 6d 65 3b  .char *pathname;
24a0: 0a 09 69 6e 74 20 63 68 6b 5f 72 65 74 3b 0a 0a  ..int chk_ret;..
24b0: 09 69 66 20 28 6f 62 6a 63 20 21 3d 20 32 29 20  .if (objc != 2) 
24c0: 7b 0a 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65  {...Tcl_SetObjRe
24d0: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c  sult(interp, Tcl
24e0: 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 77  _NewStringObj("w
24f0: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
2500: 75 6c 64 20 62 65 20 5c 22 74 75 61 70 69 3a 3a  uld be \"tuapi::
2510: 73 79 73 63 61 6c 6c 3a 3a 73 77 61 70 6f 6e 20  syscall::swapon 
2520: 70 61 74 68 6e 61 6d 65 5c 22 22 2c 20 2d 31 29  pathname\"", -1)
2530: 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 54 43 4c  );....return(TCL
2540: 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 70 61  _ERROR);..}...pa
2550: 74 68 6e 61 6d 65 20 3d 20 54 63 6c 5f 47 65 74  thname = Tcl_Get
2560: 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 3b  String(objv[1]);
2570: 0a 0a 09 63 68 6b 5f 72 65 74 20 3d 20 73 77 61  ...chk_ret = swa
2580: 70 6f 6e 28 70 61 74 68 6e 61 6d 65 2c 20 30 29  pon(pathname, 0)
2590: 3b 0a 09 69 66 20 28 63 68 6b 5f 72 65 74 20 21  ;..if (chk_ret !
25a0: 3d 20 30 29 20 7b 0a 09 09 54 63 6c 5f 53 65 74  = 0) {...Tcl_Set
25b0: 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70  ObjResult(interp
25c0: 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f  , Tcl_NewStringO
25d0: 62 6a 28 73 74 72 65 72 72 6f 72 28 65 72 72 6e  bj(strerror(errn
25e0: 6f 29 2c 20 2d 31 29 29 3b 0a 0a 09 09 72 65 74  o), -1));....ret
25f0: 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a  urn(TCL_ERROR);.
2600: 09 7d 0a 0a 09 72 65 74 75 72 6e 28 54 43 4c 5f  .}...return(TCL_
2610: 4f 4b 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 69  OK);.}..static i
2620: 6e 74 20 74 75 61 70 69 5f 73 77 61 70 6f 66 66  nt tuapi_swapoff
2630: 28 43 6c 69 65 6e 74 44 61 74 61 20 63 64 2c 20  (ClientData cd, 
2640: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
2650: 72 70 2c 20 69 6e 74 20 6f 62 6a 63 2c 20 54 63  rp, int objc, Tc
2660: 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
2670: 76 5b 5d 29 20 7b 0a 09 63 68 61 72 20 2a 70 61  v[]) {..char *pa
2680: 74 68 6e 61 6d 65 3b 0a 09 69 6e 74 20 63 68 6b  thname;..int chk
2690: 5f 72 65 74 3b 0a 0a 09 69 66 20 28 6f 62 6a 63  _ret;...if (objc
26a0: 20 21 3d 20 32 29 20 7b 0a 09 09 54 63 6c 5f 53   != 2) {...Tcl_S
26b0: 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
26c0: 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e  rp, Tcl_NewStrin
26d0: 67 4f 62 6a 28 22 77 72 6f 6e 67 20 23 20 61 72  gObj("wrong # ar
26e0: 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
26f0: 74 75 61 70 69 3a 3a 73 79 73 63 61 6c 6c 3a 3a  tuapi::syscall::
2700: 73 77 61 70 6f 66 66 20 70 61 74 68 6e 61 6d 65  swapoff pathname
2710: 5c 22 22 2c 20 2d 31 29 29 3b 0a 0a 09 09 72 65  \"", -1));....re
2720: 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b  turn(TCL_ERROR);
2730: 0a 09 7d 0a 0a 09 70 61 74 68 6e 61 6d 65 20 3d  ..}...pathname =
2740: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
2750: 62 6a 76 5b 31 5d 29 3b 0a 0a 09 63 68 6b 5f 72  bjv[1]);...chk_r
2760: 65 74 20 3d 20 73 77 61 70 6f 66 66 28 70 61 74  et = swapoff(pat
2770: 68 6e 61 6d 65 29 3b 0a 09 69 66 20 28 63 68 6b  hname);..if (chk
2780: 5f 72 65 74 20 21 3d 20 30 29 20 7b 0a 09 09 54  _ret != 0) {...T
2790: 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28  cl_SetObjResult(
27a0: 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53  interp, Tcl_NewS
27b0: 74 72 69 6e 67 4f 62 6a 28 73 74 72 65 72 72 6f  tringObj(strerro
27c0: 72 28 65 72 72 6e 6f 29 2c 20 2d 31 29 29 3b 0a  r(errno), -1));.
27d0: 0a 09 09 72 65 74 75 72 6e 28 54 43 4c 5f 45 52  ...return(TCL_ER
27e0: 52 4f 52 29 3b 0a 09 7d 0a 0a 09 72 65 74 75 72  ROR);..}...retur
27f0: 6e 28 54 43 4c 5f 4f 4b 29 3b 0a 7d 0a 0a 73 74  n(TCL_OK);.}..st
2800: 61 74 69 63 20 69 6e 74 20 74 75 61 70 69 5f 69  atic int tuapi_i
2810: 6e 73 6d 6f 64 28 43 6c 69 65 6e 74 44 61 74 61  nsmod(ClientData
2820: 20 63 64 2c 20 54 63 6c 5f 49 6e 74 65 72 70 20   cd, Tcl_Interp 
2830: 2a 69 6e 74 65 72 70 2c 20 69 6e 74 20 6f 62 6a  *interp, int obj
2840: 63 2c 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  c, Tcl_Obj *CONS
2850: 54 20 6f 62 6a 76 5b 5d 29 20 7b 0a 09 54 63 6c  T objv[]) {..Tcl
2860: 5f 43 68 61 6e 6e 65 6c 20 66 64 3b 0a 09 54 63  _Channel fd;..Tc
2870: 6c 5f 4f 62 6a 20 2a 6d 6f 64 75 6c 65 5f 66 69  l_Obj *module_fi
2880: 6c 65 6e 61 6d 65 2c 20 2a 6d 6f 64 75 6c 65 5f  lename, *module_
2890: 64 61 74 61 3b 0a 09 76 6f 69 64 20 2a 6d 6f 64  data;..void *mod
28a0: 75 6c 65 5f 64 61 74 61 5f 76 61 6c 3b 0a 09 63  ule_data_val;..c
28b0: 6f 6e 73 74 20 63 68 61 72 20 2a 6d 6f 64 75 6c  onst char *modul
28c0: 65 5f 6f 70 74 73 3b 0a 09 69 6e 74 20 6d 6f 64  e_opts;..int mod
28d0: 75 6c 65 5f 64 61 74 61 5f 6c 65 6e 3b 0a 09 69  ule_data_len;..i
28e0: 6e 74 20 72 65 61 64 5f 72 65 74 2c 20 63 68 6b  nt read_ret, chk
28f0: 5f 72 65 74 3b 0a 0a 09 69 66 20 28 6f 62 6a 63  _ret;...if (objc
2900: 20 3c 20 32 20 7c 7c 20 6f 62 6a 63 20 3e 20 33   < 2 || objc > 3
2910: 29 20 7b 0a 09 09 54 63 6c 5f 53 65 74 4f 62 6a  ) {...Tcl_SetObj
2920: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54  Result(interp, T
2930: 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28  cl_NewStringObj(
2940: 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
2950: 68 6f 75 6c 64 20 62 65 20 5c 22 74 75 61 70 69  hould be \"tuapi
2960: 3a 3a 73 79 73 63 61 6c 6c 3a 3a 69 6e 73 6d 6f  ::syscall::insmo
2970: 64 20 66 69 6c 65 6e 61 6d 65 20 3f 61 72 67 73  d filename ?args
2980: 3f 5c 22 22 2c 20 2d 31 29 29 3b 0a 0a 09 09 72  ?\"", -1));....r
2990: 65 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29  eturn(TCL_ERROR)
29a0: 3b 0a 09 7d 0a 0a 09 6d 6f 64 75 6c 65 5f 66 69  ;..}...module_fi
29b0: 6c 65 6e 61 6d 65 20 3d 20 6f 62 6a 76 5b 31 5d  lename = objv[1]
29c0: 3b 0a 0a 09 66 64 20 3d 20 54 63 6c 5f 46 53 4f  ;...fd = Tcl_FSO
29d0: 70 65 6e 46 69 6c 65 43 68 61 6e 6e 65 6c 28 69  penFileChannel(i
29e0: 6e 74 65 72 70 2c 20 6d 6f 64 75 6c 65 5f 66 69  nterp, module_fi
29f0: 6c 65 6e 61 6d 65 2c 20 22 72 22 2c 20 30 36 30  lename, "r", 060
2a00: 30 29 3b 0a 09 69 66 20 28 66 64 20 3d 3d 20 4e  0);..if (fd == N
2a10: 55 4c 4c 29 20 7b 0a 09 09 72 65 74 75 72 6e 28  ULL) {...return(
2a20: 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a  TCL_ERROR);..}..
2a30: 09 63 68 6b 5f 72 65 74 20 3d 20 54 63 6c 5f 53  .chk_ret = Tcl_S
2a40: 65 74 43 68 61 6e 6e 65 6c 4f 70 74 69 6f 6e 28  etChannelOption(
2a50: 69 6e 74 65 72 70 2c 20 66 64 2c 20 22 2d 74 72  interp, fd, "-tr
2a60: 61 6e 73 6c 61 74 69 6f 6e 22 2c 20 22 62 69 6e  anslation", "bin
2a70: 61 72 79 22 29 3b 0a 09 69 66 20 28 63 68 6b 5f  ary");..if (chk_
2a80: 72 65 74 20 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b  ret != TCL_OK) {
2a90: 0a 09 09 54 63 6c 5f 43 6c 6f 73 65 28 69 6e 74  ...Tcl_Close(int
2aa0: 65 72 70 2c 20 66 64 29 3b 0a 0a 09 09 72 65 74  erp, fd);....ret
2ab0: 75 72 6e 28 63 68 6b 5f 72 65 74 29 3b 0a 09 7d  urn(chk_ret);..}
2ac0: 0a 0a 09 6d 6f 64 75 6c 65 5f 64 61 74 61 20 3d  ...module_data =
2ad0: 20 54 63 6c 5f 4e 65 77 4f 62 6a 28 29 3b 0a 0a   Tcl_NewObj();..
2ae0: 09 72 65 61 64 5f 72 65 74 20 3d 20 54 63 6c 5f  .read_ret = Tcl_
2af0: 52 65 61 64 43 68 61 72 73 28 66 64 2c 20 6d 6f  ReadChars(fd, mo
2b00: 64 75 6c 65 5f 64 61 74 61 2c 20 2d 31 2c 20 30  dule_data, -1, 0
2b10: 29 3b 0a 0a 09 54 63 6c 5f 43 6c 6f 73 65 28 69  );...Tcl_Close(i
2b20: 6e 74 65 72 70 2c 20 66 64 29 3b 0a 0a 09 69 66  nterp, fd);...if
2b30: 20 28 72 65 61 64 5f 72 65 74 20 3c 3d 20 30 29   (read_ret <= 0)
2b40: 20 7b 0a 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52   {...Tcl_SetObjR
2b50: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63  esult(interp, Tc
2b60: 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22  l_NewStringObj("
2b70: 72 65 61 64 20 66 61 69 6c 65 64 22 2c 20 2d 31  read failed", -1
2b80: 29 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 54 43  ));....return(TC
2b90: 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 6d  L_ERROR);..}...m
2ba0: 6f 64 75 6c 65 5f 64 61 74 61 5f 76 61 6c 20 3d  odule_data_val =
2bb0: 20 54 63 6c 5f 47 65 74 42 79 74 65 41 72 72 61   Tcl_GetByteArra
2bc0: 79 46 72 6f 6d 4f 62 6a 28 6d 6f 64 75 6c 65 5f  yFromObj(module_
2bd0: 64 61 74 61 2c 20 26 6d 6f 64 75 6c 65 5f 64 61  data, &module_da
2be0: 74 61 5f 6c 65 6e 29 3b 0a 0a 09 69 66 20 28 6f  ta_len);...if (o
2bf0: 62 6a 63 20 3d 3d 20 33 29 20 7b 0a 09 09 6d 6f  bjc == 3) {...mo
2c00: 64 75 6c 65 5f 6f 70 74 73 20 3d 20 54 63 6c 5f  dule_opts = Tcl_
2c10: 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 32  GetString(objv[2
2c20: 5d 29 3b 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 09  ]);..} else {...
2c30: 6d 6f 64 75 6c 65 5f 6f 70 74 73 20 3d 20 22 22  module_opts = ""
2c40: 3b 0a 09 7d 0a 0a 09 63 68 6b 5f 72 65 74 20 3d  ;..}...chk_ret =
2c50: 20 69 6e 69 74 5f 6d 6f 64 75 6c 65 28 6d 6f 64   init_module(mod
2c60: 75 6c 65 5f 64 61 74 61 5f 76 61 6c 2c 20 6d 6f  ule_data_val, mo
2c70: 64 75 6c 65 5f 64 61 74 61 5f 6c 65 6e 2c 20 6d  dule_data_len, m
2c80: 6f 64 75 6c 65 5f 6f 70 74 73 29 3b 0a 09 69 66  odule_opts);..if
2c90: 20 28 63 68 6b 5f 72 65 74 20 21 3d 20 30 29 20   (chk_ret != 0) 
2ca0: 7b 0a 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65  {...Tcl_SetObjRe
2cb0: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c  sult(interp, Tcl
2cc0: 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 73 74  _NewStringObj(st
2cd0: 72 65 72 72 6f 72 28 65 72 72 6e 6f 29 2c 20 2d  rerror(errno), -
2ce0: 31 29 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 54  1));....return(T
2cf0: 43 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09  CL_ERROR);..}...
2d00: 72 65 74 75 72 6e 28 54 43 4c 5f 4f 4b 29 3b 0a  return(TCL_OK);.
2d10: 7d 0a 0a 73 74 61 74 69 63 20 69 6e 74 20 74 75  }..static int tu
2d20: 61 70 69 5f 72 6d 6d 6f 64 28 43 6c 69 65 6e 74  api_rmmod(Client
2d30: 44 61 74 61 20 63 64 2c 20 54 63 6c 5f 49 6e 74  Data cd, Tcl_Int
2d40: 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 69 6e 74  erp *interp, int
2d50: 20 6f 62 6a 63 2c 20 54 63 6c 5f 4f 62 6a 20 2a   objc, Tcl_Obj *
2d60: 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 29 20 7b 0a  CONST objv[]) {.
2d70: 09 63 68 61 72 20 2a 6d 6f 64 75 6c 65 3b 0a 09  .char *module;..
2d80: 69 6e 74 20 69 64 78 3b 0a 09 69 6e 74 20 64 65  int idx;..int de
2d90: 6c 65 74 65 5f 6d 6f 64 75 6c 65 5f 72 65 74 3b  lete_module_ret;
2da0: 0a 0a 09 69 66 20 28 6f 62 6a 63 20 3c 20 32 29  ...if (objc < 2)
2db0: 20 7b 0a 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52   {...Tcl_SetObjR
2dc0: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63  esult(interp, Tc
2dd0: 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22  l_NewStringObj("
2de0: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
2df0: 6f 75 6c 64 20 62 65 20 5c 22 74 75 61 70 69 3a  ould be \"tuapi:
2e00: 3a 73 79 73 63 61 6c 6c 3a 3a 72 6d 6d 6f 64 20  :syscall::rmmod 
2e10: 6d 6f 64 75 6c 65 20 3f 6d 6f 64 75 6c 65 2e 2e  module ?module..
2e20: 2e 3f 22 2c 20 2d 31 29 29 3b 0a 0a 09 09 72 65  .?", -1));....re
2e30: 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b  turn(TCL_ERROR);
2e40: 0a 09 7d 0a 0a 09 66 6f 72 20 28 69 64 78 20 3d  ..}...for (idx =
2e50: 20 31 3b 20 69 64 78 20 3c 20 6f 62 6a 63 3b 20   1; idx < objc; 
2e60: 69 64 78 2b 2b 29 20 7b 0a 09 09 6d 6f 64 75 6c  idx++) {...modul
2e70: 65 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  e = Tcl_GetStrin
2e80: 67 28 6f 62 6a 76 5b 69 64 78 5d 29 3b 0a 0a 09  g(objv[idx]);...
2e90: 09 64 65 6c 65 74 65 5f 6d 6f 64 75 6c 65 5f 72  .delete_module_r
2ea0: 65 74 20 3d 20 64 65 6c 65 74 65 5f 6d 6f 64 75  et = delete_modu
2eb0: 6c 65 28 6d 6f 64 75 6c 65 2c 20 4f 5f 4e 4f 4e  le(module, O_NON
2ec0: 42 4c 4f 43 4b 29 3b 0a 09 09 69 66 20 28 64 65  BLOCK);...if (de
2ed0: 6c 65 74 65 5f 6d 6f 64 75 6c 65 5f 72 65 74 20  lete_module_ret 
2ee0: 21 3d 20 30 29 20 7b 0a 09 09 09 54 63 6c 5f 53  != 0) {....Tcl_S
2ef0: 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
2f00: 72 70 2c 20 54 63 6c 5f 4f 62 6a 50 72 69 6e 74  rp, Tcl_ObjPrint
2f10: 66 28 22 75 6e 61 62 6c 65 20 74 6f 20 72 65 6d  f("unable to rem
2f20: 6f 76 65 20 5c 22 25 73 5c 22 3a 20 25 73 22 2c  ove \"%s\": %s",
2f30: 20 6d 6f 64 75 6c 65 2c 20 73 74 72 65 72 72 6f   module, strerro
2f40: 72 28 65 72 72 6e 6f 29 29 29 3b 0a 0a 09 09 09  r(errno)));.....
2f50: 72 65 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52  return(TCL_ERROR
2f60: 29 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 72 65 74 75  );...}..}...retu
2f70: 72 6e 28 54 43 4c 5f 4f 4b 29 3b 0a 7d 0a 0a 73  rn(TCL_OK);.}..s
2f80: 74 61 74 69 63 20 69 6e 74 20 74 75 61 70 69 5f  tatic int tuapi_
2f90: 6c 73 6d 6f 64 28 43 6c 69 65 6e 74 44 61 74 61  lsmod(ClientData
2fa0: 20 63 64 2c 20 54 63 6c 5f 49 6e 74 65 72 70 20   cd, Tcl_Interp 
2fb0: 2a 69 6e 74 65 72 70 2c 20 69 6e 74 20 6f 62 6a  *interp, int obj
2fc0: 63 2c 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  c, Tcl_Obj *CONS
2fd0: 54 20 6f 62 6a 76 5b 5d 29 20 7b 0a 09 54 63 6c  T objv[]) {..Tcl
2fe0: 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e  _SetObjResult(in
2ff0: 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72  terp, Tcl_NewStr
3000: 69 6e 67 4f 62 6a 28 22 6e 6f 74 20 69 6d 70 6c  ingObj("not impl
3010: 65 6d 65 6e 74 65 64 22 2c 20 2d 31 29 29 3b 0a  emented", -1));.
3020: 0a 09 72 65 74 75 72 6e 28 54 43 4c 5f 45 52 52  ..return(TCL_ERR
3030: 4f 52 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 69  OR);.}..static i
3040: 6e 74 20 74 75 61 70 69 5f 68 6f 73 74 6e 61 6d  nt tuapi_hostnam
3050: 65 28 43 6c 69 65 6e 74 44 61 74 61 20 63 64 2c  e(ClientData cd,
3060: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
3070: 65 72 70 2c 20 69 6e 74 20 6f 62 6a 63 2c 20 54  erp, int objc, T
3080: 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
3090: 6a 76 5b 5d 29 20 7b 0a 09 63 68 61 72 20 68 6f  jv[]) {..char ho
30a0: 73 74 6e 61 6d 65 5b 48 4f 53 54 5f 4e 41 4d 45  stname[HOST_NAME
30b0: 5f 4d 41 58 20 2b 20 31 5d 3b 0a 09 69 6e 74 20  _MAX + 1];..int 
30c0: 63 68 6b 5f 72 65 74 3b 0a 0a 09 69 66 20 28 6f  chk_ret;...if (o
30d0: 62 6a 63 20 3d 3d 20 31 29 20 7b 0a 09 09 2f 2a  bjc == 1) {.../*
30e0: 20 4e 6f 20 61 72 67 75 6d 65 6e 74 73 20 67 69   No arguments gi
30f0: 76 65 6e 2c 20 6a 75 73 74 20 72 65 74 75 72 6e  ven, just return
3100: 20 74 68 65 20 68 6f 73 74 6e 61 6d 65 20 2a 2f   the hostname */
3110: 0a 09 09 63 68 6b 5f 72 65 74 20 3d 20 67 65 74  ...chk_ret = get
3120: 68 6f 73 74 6e 61 6d 65 28 68 6f 73 74 6e 61 6d  hostname(hostnam
3130: 65 2c 20 73 69 7a 65 6f 66 28 68 6f 73 74 6e 61  e, sizeof(hostna
3140: 6d 65 29 29 3b 0a 09 09 69 66 20 28 63 68 6b 5f  me));...if (chk_
3150: 72 65 74 20 21 3d 20 30 29 20 7b 0a 09 09 09 54  ret != 0) {....T
3160: 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28  cl_SetObjResult(
3170: 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53  interp, Tcl_NewS
3180: 74 72 69 6e 67 4f 62 6a 28 73 74 72 65 72 72 6f  tringObj(strerro
3190: 72 28 65 72 72 6e 6f 29 2c 20 2d 31 29 29 3b 0a  r(errno), -1));.
31a0: 0a 09 09 09 72 65 74 75 72 6e 28 54 43 4c 5f 45  ....return(TCL_E
31b0: 52 52 4f 52 29 3b 0a 09 09 7d 0a 0a 09 09 68 6f  RROR);...}....ho
31c0: 73 74 6e 61 6d 65 5b 73 69 7a 65 6f 66 28 68 6f  stname[sizeof(ho
31d0: 73 74 6e 61 6d 65 29 20 2d 20 31 5d 20 3d 20 27  stname) - 1] = '
31e0: 5c 30 27 3b 0a 0a 09 09 54 63 6c 5f 53 65 74 4f  \0';....Tcl_SetO
31f0: 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  bjResult(interp,
3200: 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62   Tcl_NewStringOb
3210: 6a 28 68 6f 73 74 6e 61 6d 65 2c 20 2d 31 29 29  j(hostname, -1))
3220: 3b 0a 0a 09 09 72 65 74 75 72 6e 28 54 43 4c 5f  ;....return(TCL_
3230: 4f 4b 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 6f 62  OK);..}...if (ob
3240: 6a 63 20 3d 3d 20 32 29 20 7b 0a 09 09 2f 2a 20  jc == 2) {.../* 
3250: 45 78 61 63 74 6c 79 20 6f 6e 65 20 61 72 67 75  Exactly one argu
3260: 6d 65 6e 74 20 67 69 76 65 6e 2c 20 73 65 74 20  ment given, set 
3270: 74 68 65 20 68 6f 73 74 6e 61 6d 65 20 2a 2f 0a  the hostname */.
3280: 09 09 73 74 72 6e 63 70 79 28 68 6f 73 74 6e 61  ..strncpy(hostna
3290: 6d 65 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  me, Tcl_GetStrin
32a0: 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 73 69 7a 65  g(objv[1]), size
32b0: 6f 66 28 68 6f 73 74 6e 61 6d 65 29 29 3b 0a 09  of(hostname));..
32c0: 09 68 6f 73 74 6e 61 6d 65 5b 73 69 7a 65 6f 66  .hostname[sizeof
32d0: 28 68 6f 73 74 6e 61 6d 65 29 20 2d 20 31 5d 20  (hostname) - 1] 
32e0: 3d 20 27 5c 30 27 3b 0a 0a 09 09 63 68 6b 5f 72  = '\0';....chk_r
32f0: 65 74 20 3d 20 73 65 74 68 6f 73 74 6e 61 6d 65  et = sethostname
3300: 28 68 6f 73 74 6e 61 6d 65 2c 20 73 74 72 6c 65  (hostname, strle
3310: 6e 28 68 6f 73 74 6e 61 6d 65 29 29 3b 0a 09 09  n(hostname));...
3320: 69 66 20 28 63 68 6b 5f 72 65 74 20 21 3d 20 30  if (chk_ret != 0
3330: 29 20 7b 0a 09 09 09 54 63 6c 5f 53 65 74 4f 62  ) {....Tcl_SetOb
3340: 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  jResult(interp, 
3350: 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a  Tcl_NewStringObj
3360: 28 73 74 72 65 72 72 6f 72 28 65 72 72 6e 6f 29  (strerror(errno)
3370: 2c 20 2d 31 29 29 3b 0a 0a 09 09 09 72 65 74 75  , -1));.....retu
3380: 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 09  rn(TCL_ERROR);..
3390: 09 7d 0a 0a 09 09 54 63 6c 5f 53 65 74 4f 62 6a  .}....Tcl_SetObj
33a0: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54  Result(interp, T
33b0: 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28  cl_NewStringObj(
33c0: 68 6f 73 74 6e 61 6d 65 2c 20 2d 31 29 29 3b 0a  hostname, -1));.
33d0: 0a 09 09 72 65 74 75 72 6e 28 54 43 4c 5f 4f 4b  ...return(TCL_OK
33e0: 29 3b 0a 09 7d 0a 0a 09 54 63 6c 5f 53 65 74 4f  );..}...Tcl_SetO
33f0: 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  bjResult(interp,
3400: 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62   Tcl_NewStringOb
3410: 6a 28 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  j("wrong # args:
3420: 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 68 6f 73   should be \"hos
3430: 74 6e 61 6d 65 20 3f 68 6f 73 74 6e 61 6d 65 3f  tname ?hostname?
3440: 5c 22 22 2c 20 2d 31 29 29 3b 0a 0a 09 72 65 74  \"", -1));...ret
3450: 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a  urn(TCL_ERROR);.
3460: 7d 0a 0a 73 74 61 74 69 63 20 69 6e 74 20 74 75  }..static int tu
3470: 61 70 69 5f 64 6f 6d 61 69 6e 6e 61 6d 65 28 43  api_domainname(C
3480: 6c 69 65 6e 74 44 61 74 61 20 63 64 2c 20 54 63  lientData cd, Tc
3490: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
34a0: 2c 20 69 6e 74 20 6f 62 6a 63 2c 20 54 63 6c 5f  , int objc, Tcl_
34b0: 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
34c0: 5d 29 20 7b 0a 09 54 63 6c 5f 53 65 74 4f 62 6a  ]) {..Tcl_SetObj
34d0: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54  Result(interp, T
34e0: 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28  cl_NewStringObj(
34f0: 22 6e 6f 74 20 69 6d 70 6c 65 6d 65 6e 74 65 64  "not implemented
3500: 22 2c 20 2d 31 29 29 3b 0a 0a 09 72 65 74 75 72  ", -1));...retur
3510: 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 7d 0a  n(TCL_ERROR);.}.
3520: 0a 73 74 61 74 69 63 20 69 6e 74 20 74 75 61 70  .static int tuap
3530: 69 5f 63 68 72 6f 6f 74 28 43 6c 69 65 6e 74 44  i_chroot(ClientD
3540: 61 74 61 20 63 64 2c 20 54 63 6c 5f 49 6e 74 65  ata cd, Tcl_Inte
3550: 72 70 20 2a 69 6e 74 65 72 70 2c 20 69 6e 74 20  rp *interp, int 
3560: 6f 62 6a 63 2c 20 54 63 6c 5f 4f 62 6a 20 2a 43  objc, Tcl_Obj *C
3570: 4f 4e 53 54 20 6f 62 6a 76 5b 5d 29 20 7b 0a 09  ONST objv[]) {..
3580: 63 68 61 72 20 2a 70 61 74 68 6e 61 6d 65 3b 0a  char *pathname;.
3590: 09 69 6e 74 20 63 68 6b 5f 72 65 74 3b 0a 0a 09  .int chk_ret;...
35a0: 69 66 20 28 6f 62 6a 63 20 21 3d 20 32 29 20 7b  if (objc != 2) {
35b0: 0a 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73  ...Tcl_SetObjRes
35c0: 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ult(interp, Tcl_
35d0: 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 77 72  NewStringObj("wr
35e0: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
35f0: 6c 64 20 62 65 20 5c 22 3a 3a 74 75 61 70 69 3a  ld be \"::tuapi:
3600: 3a 73 79 73 63 61 6c 6c 3a 63 68 72 6f 6f 74 20  :syscall:chroot 
3610: 70 61 74 68 6e 61 6d 65 5c 22 22 2c 20 2d 31 29  pathname\"", -1)
3620: 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 54 43 4c  );....return(TCL
3630: 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 70 61  _ERROR);..}...pa
3640: 74 68 6e 61 6d 65 20 3d 20 54 63 6c 5f 47 65 74  thname = Tcl_Get
3650: 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 3b  String(objv[1]);
3660: 0a 0a 09 63 68 6b 5f 72 65 74 20 3d 20 63 68 72  ...chk_ret = chr
3670: 6f 6f 74 28 70 61 74 68 6e 61 6d 65 29 3b 0a 09  oot(pathname);..
3680: 69 66 20 28 63 68 6b 5f 72 65 74 20 21 3d 20 30  if (chk_ret != 0
3690: 29 20 7b 0a 09 09 54 63 6c 5f 53 65 74 4f 62 6a  ) {...Tcl_SetObj
36a0: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54  Result(interp, T
36b0: 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28  cl_NewStringObj(
36c0: 73 74 72 65 72 72 6f 72 28 65 72 72 6e 6f 29 2c  strerror(errno),
36d0: 20 2d 31 29 29 3b 0a 0a 09 09 72 65 74 75 72 6e   -1));....return
36e0: 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a  (TCL_ERROR);..}.
36f0: 0a 09 72 65 74 75 72 6e 28 54 43 4c 5f 4f 4b 29  ..return(TCL_OK)
3700: 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 69 6e 74 20  ;.}..static int 
3710: 74 75 61 70 69 5f 70 69 76 6f 74 5f 72 6f 6f 74  tuapi_pivot_root
3720: 28 43 6c 69 65 6e 74 44 61 74 61 20 63 64 2c 20  (ClientData cd, 
3730: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
3740: 72 70 2c 20 69 6e 74 20 6f 62 6a 63 2c 20 54 63  rp, int objc, Tc
3750: 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
3760: 76 5b 5d 29 20 7b 0a 09 63 68 61 72 20 2a 6e 65  v[]) {..char *ne
3770: 77 5f 72 6f 6f 74 2c 20 2a 70 75 74 5f 6f 6c 64  w_root, *put_old
3780: 3b 0a 09 69 6e 74 20 63 68 6b 5f 72 65 74 3b 0a  ;..int chk_ret;.
3790: 0a 09 69 66 20 28 6f 62 6a 63 20 21 3d 20 33 29  ..if (objc != 3)
37a0: 20 7b 0a 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52   {...Tcl_SetObjR
37b0: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63  esult(interp, Tc
37c0: 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22  l_NewStringObj("
37d0: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
37e0: 6f 75 6c 64 20 62 65 20 5c 22 3a 3a 74 75 61 70  ould be \"::tuap
37f0: 69 3a 3a 73 79 73 63 61 6c 6c 3a 3a 70 69 76 6f  i::syscall::pivo
3800: 74 5f 72 6f 6f 74 20 6e 65 77 5f 72 6f 6f 74 20  t_root new_root 
3810: 70 75 74 5f 6f 6c 64 5c 22 22 2c 20 2d 31 29 29  put_old\"", -1))
3820: 3b 0a 0a 09 09 72 65 74 75 72 6e 28 54 43 4c 5f  ;....return(TCL_
3830: 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 6e 65 77  ERROR);..}...new
3840: 5f 72 6f 6f 74 20 3d 20 54 63 6c 5f 47 65 74 53  _root = Tcl_GetS
3850: 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 3b 0a  tring(objv[1]);.
3860: 09 70 75 74 5f 6f 6c 64 20 3d 20 54 63 6c 5f 47  .put_old = Tcl_G
3870: 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 32 5d  etString(objv[2]
3880: 29 3b 0a 0a 09 63 68 6b 5f 72 65 74 20 3d 20 70  );...chk_ret = p
3890: 69 76 6f 74 5f 72 6f 6f 74 28 6e 65 77 5f 72 6f  ivot_root(new_ro
38a0: 6f 74 2c 20 70 75 74 5f 6f 6c 64 29 3b 0a 09 69  ot, put_old);..i
38b0: 66 20 28 63 68 6b 5f 72 65 74 20 21 3d 20 30 29  f (chk_ret != 0)
38c0: 20 7b 0a 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52   {...Tcl_SetObjR
38d0: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63  esult(interp, Tc
38e0: 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 73  l_NewStringObj(s
38f0: 74 72 65 72 72 6f 72 28 65 72 72 6e 6f 29 2c 20  trerror(errno), 
3900: 2d 31 29 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28  -1));....return(
3910: 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a  TCL_ERROR);..}..
3920: 09 72 65 74 75 72 6e 28 54 43 4c 5f 4f 4b 29 3b  .return(TCL_OK);
3930: 0a 7d 0a 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .}..static int t
3940: 75 61 70 69 5f 6d 6b 6e 6f 64 28 43 6c 69 65 6e  uapi_mknod(Clien
3950: 74 44 61 74 61 20 63 64 2c 20 54 63 6c 5f 49 6e  tData cd, Tcl_In
3960: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 69 6e  terp *interp, in
3970: 74 20 6f 62 6a 63 2c 20 54 63 6c 5f 4f 62 6a 20  t objc, Tcl_Obj 
3980: 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 29 20 7b  *CONST objv[]) {
3990: 0a 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75  ..Tcl_SetObjResu
39a0: 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e  lt(interp, Tcl_N
39b0: 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 6e 6f 74  ewStringObj("not
39c0: 20 69 6d 70 6c 65 6d 65 6e 74 65 64 22 2c 20 2d   implemented", -
39d0: 31 29 29 3b 0a 0a 09 72 65 74 75 72 6e 28 54 43  1));...return(TC
39e0: 4c 5f 45 52 52 4f 52 29 3b 0a 7d 0a 0a 73 74 61  L_ERROR);.}..sta
39f0: 74 69 63 20 69 6e 74 20 74 75 61 70 69 5f 67 65  tic int tuapi_ge
3a00: 74 75 69 64 28 43 6c 69 65 6e 74 44 61 74 61 20  tuid(ClientData 
3a10: 63 64 2c 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  cd, Tcl_Interp *
3a20: 69 6e 74 65 72 70 2c 20 69 6e 74 20 6f 62 6a 63  interp, int objc
3a30: 2c 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54  , Tcl_Obj *CONST
3a40: 20 6f 62 6a 76 5b 5d 29 20 7b 0a 09 54 63 6c 5f   objv[]) {..Tcl_
3a50: 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74  SetObjResult(int
3a60: 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69  erp, Tcl_NewStri
3a70: 6e 67 4f 62 6a 28 22 6e 6f 74 20 69 6d 70 6c 65  ngObj("not imple
3a80: 6d 65 6e 74 65 64 22 2c 20 2d 31 29 29 3b 0a 0a  mented", -1));..
3a90: 09 72 65 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f  .return(TCL_ERRO
3aa0: 52 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 69 6e  R);.}..static in
3ab0: 74 20 74 75 61 70 69 5f 6b 69 6c 6c 28 43 6c 69  t tuapi_kill(Cli
3ac0: 65 6e 74 44 61 74 61 20 63 64 2c 20 54 63 6c 5f  entData cd, Tcl_
3ad0: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20  Interp *interp, 
3ae0: 69 6e 74 20 6f 62 6a 63 2c 20 54 63 6c 5f 4f 62  int objc, Tcl_Ob
3af0: 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 29  j *CONST objv[])
3b00: 20 7b 0a 09 54 63 6c 5f 4f 62 6a 20 2a 73 69 67   {..Tcl_Obj *sig
3b10: 6e 61 6c 5f 6f 62 6a 3b 0a 0a 09 54 63 6c 5f 57  nal_obj;...Tcl_W
3b20: 69 64 65 49 6e 74 20 70 69 64 5f 77 69 64 65 2c  ideInt pid_wide,
3b30: 20 73 69 67 5f 77 69 64 65 3b 0a 09 70 69 64 5f   sig_wide;..pid_
3b40: 74 20 70 69 64 3b 0a 09 69 6e 74 20 73 69 67 3b  t pid;..int sig;
3b50: 0a 09 69 6e 74 20 6b 69 6c 6c 5f 72 65 74 2c 20  ..int kill_ret, 
3b60: 74 63 6c 5f 72 65 74 3b 0a 0a 09 69 66 20 28 6f  tcl_ret;...if (o
3b70: 62 6a 63 20 21 3d 20 33 29 20 7b 0a 09 09 54 63  bjc != 3) {...Tc
3b80: 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69  l_SetObjResult(i
3b90: 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74  nterp, Tcl_NewSt
3ba0: 72 69 6e 67 4f 62 6a 28 22 77 72 6f 6e 67 20 23  ringObj("wrong #
3bb0: 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
3bc0: 20 5c 22 3a 3a 74 75 61 70 69 3a 3a 73 79 73 63   \"::tuapi::sysc
3bd0: 61 6c 6c 3a 3a 6b 69 6c 6c 20 70 69 64 20 73 69  all::kill pid si
3be0: 67 5c 22 22 2c 20 2d 31 29 29 3b 0a 0a 09 09 72  g\"", -1));....r
3bf0: 65 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29  eturn(TCL_ERROR)
3c00: 3b 0a 09 7d 0a 0a 09 74 63 6c 5f 72 65 74 20 3d  ;..}...tcl_ret =
3c10: 20 54 63 6c 5f 47 65 74 57 69 64 65 49 6e 74 46   Tcl_GetWideIntF
3c20: 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f  romObj(interp, o
3c30: 62 6a 76 5b 31 5d 2c 20 26 70 69 64 5f 77 69 64  bjv[1], &pid_wid
3c40: 65 29 3b 0a 09 69 66 20 28 74 63 6c 5f 72 65 74  e);..if (tcl_ret
3c50: 20 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a 09 09   != TCL_OK) {...
3c60: 72 65 74 75 72 6e 28 74 63 6c 5f 72 65 74 29 3b  return(tcl_ret);
3c70: 0a 09 7d 0a 09 70 69 64 20 3d 20 70 69 64 5f 77  ..}..pid = pid_w
3c80: 69 64 65 3b 0a 0a 09 73 69 67 6e 61 6c 5f 6f 62  ide;...signal_ob
3c90: 6a 20 3d 20 6f 62 6a 76 5b 32 5d 3b 0a 0a 09 74  j = objv[2];...t
3ca0: 63 6c 5f 72 65 74 20 3d 20 54 63 6c 5f 47 65 74  cl_ret = Tcl_Get
3cb0: 57 69 64 65 49 6e 74 46 72 6f 6d 4f 62 6a 28 69  WideIntFromObj(i
3cc0: 6e 74 65 72 70 2c 20 73 69 67 6e 61 6c 5f 6f 62  nterp, signal_ob
3cd0: 6a 2c 20 26 73 69 67 5f 77 69 64 65 29 3b 0a 09  j, &sig_wide);..
3ce0: 69 66 20 28 74 63 6c 5f 72 65 74 20 21 3d 20 54  if (tcl_ret != T
3cf0: 43 4c 5f 4f 4b 29 20 7b 0a 09 09 73 77 69 74 63  CL_OK) {...switc
3d00: 68 20 28 74 75 61 70 69 5f 69 6e 74 65 72 6e 61  h (tuapi_interna
3d10: 6c 5f 73 69 6d 70 6c 65 68 61 73 68 5f 6f 62 6a  l_simplehash_obj
3d20: 28 73 69 67 6e 61 6c 5f 6f 62 6a 29 29 20 7b 0a  (signal_obj)) {.
3d30: 09 09 09 63 61 73 65 20 30 78 31 32 32 61 64 30  ...case 0x122ad0
3d40: 3a 20 2f 2a 20 48 55 50 20 2a 2f 0a 09 09 09 63  : /* HUP */....c
3d50: 61 73 65 20 30 78 39 38 66 33 36 34 64 30 3a 20  ase 0x98f364d0: 
3d60: 2f 2a 20 53 49 47 48 55 50 20 2a 2f 0a 09 09 09  /* SIGHUP */....
3d70: 09 73 69 67 20 3d 20 53 49 47 48 55 50 3b 0a 09  .sig = SIGHUP;..
3d80: 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73  ...break;....cas
3d90: 65 20 30 78 31 32 36 37 35 34 3a 20 2f 2a 20 49  e 0x126754: /* I
3da0: 4e 54 20 2a 2f 0a 09 09 09 63 61 73 65 20 30 78  NT */....case 0x
3db0: 39 38 66 33 32 39 35 34 3a 20 2f 2a 20 53 49 47  98f32954: /* SIG
3dc0: 49 4e 54 20 2a 2f 0a 09 09 09 09 73 69 67 20 3d  INT */.....sig =
3dd0: 20 53 49 47 49 4e 54 3b 0a 09 09 09 09 62 72 65   SIGINT;.....bre
3de0: 61 6b 3b 0a 09 09 09 63 61 73 65 20 30 78 61 33  ak;....case 0xa3
3df0: 35 36 34 64 34 3a 20 2f 2a 20 51 55 49 54 20 2a  564d4: /* QUIT *
3e00: 2f 0a 09 09 09 63 61 73 65 20 30 78 37 61 39 32  /....case 0x7a92
3e10: 34 32 64 34 3a 20 2f 2a 20 53 49 47 51 55 49 54  42d4: /* SIGQUIT
3e20: 20 2a 2f 0a 09 09 09 09 73 69 67 20 3d 20 53 49   */.....sig = SI
3e30: 47 51 55 49 54 3b 0a 09 09 09 09 62 72 65 61 6b  GQUIT;.....break
3e40: 3b 0a 09 09 09 63 61 73 65 20 30 78 31 32 36 36  ;....case 0x1266
3e50: 34 63 3a 20 2f 2a 20 49 4c 4c 20 2a 2f 0a 09 09  4c: /* ILL */...
3e60: 09 63 61 73 65 20 30 78 39 38 66 33 32 38 34 63  .case 0x98f3284c
3e70: 3a 20 2f 2a 20 53 49 47 49 4c 4c 20 2a 2f 0a 09  : /* SIGILL */..
3e80: 09 09 09 73 69 67 20 3d 20 53 49 47 49 4c 4c 3b  ...sig = SIGILL;
3e90: 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63  .....break;....c
3ea0: 61 73 65 20 30 78 61 39 34 61 30 64 30 3a 20 2f  ase 0xa94a0d0: /
3eb0: 2a 20 54 52 41 50 20 2a 2f 0a 09 09 09 63 61 73  * TRAP */....cas
3ec0: 65 20 30 78 37 61 33 33 38 36 64 30 3a 20 2f 2a  e 0x7a3386d0: /*
3ed0: 20 53 49 47 54 52 41 50 20 2a 2f 0a 09 09 09 09   SIGTRAP */.....
3ee0: 73 69 67 20 3d 20 53 49 47 54 52 41 50 3b 0a 09  sig = SIGTRAP;..
3ef0: 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73  ...break;....cas
3f00: 65 20 30 78 38 33 30 61 39 35 34 3a 20 2f 2a 20  e 0x830a954: /* 
3f10: 41 42 52 54 20 2a 2f 0a 09 09 09 63 61 73 65 20  ABRT */....case 
3f20: 30 78 37 38 39 37 38 66 35 34 3a 20 2f 2a 20 53  0x78978f54: /* S
3f30: 49 47 41 42 52 54 20 2a 2f 0a 09 09 09 09 73 69  IGABRT */.....si
3f40: 67 20 3d 20 53 49 47 41 42 52 54 3b 0a 09 09 09  g = SIGABRT;....
3f50: 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20  .break;....case 
3f60: 30 78 31 32 36 37 64 34 3a 20 2f 2a 20 49 4f 54  0x1267d4: /* IOT
3f70: 20 2a 2f 0a 09 09 09 63 61 73 65 20 30 78 39 38   */....case 0x98
3f80: 66 33 32 39 64 34 3a 20 2f 2a 20 53 49 47 49 4f  f329d4: /* SIGIO
3f90: 54 20 2a 2f 0a 09 09 09 09 73 69 67 20 3d 20 53  T */.....sig = S
3fa0: 49 47 49 4f 54 3b 0a 09 09 09 09 62 72 65 61 6b  IGIOT;.....break
3fb0: 3b 0a 09 09 09 63 61 73 65 20 30 78 31 30 61 61  ;....case 0x10aa
3fc0: 64 33 3a 20 2f 2a 20 42 55 53 20 2a 2f 0a 09 09  d3: /* BUS */...
3fd0: 09 63 61 73 65 20 30 78 39 38 66 31 65 34 64 33  .case 0x98f1e4d3
3fe0: 3a 20 2f 2a 20 53 49 47 42 55 53 20 2a 2f 0a 09  : /* SIGBUS */..
3ff0: 09 09 09 73 69 67 20 3d 20 53 49 47 42 55 53 3b  ...sig = SIGBUS;
4000: 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63  .....break;....c
4010: 61 73 65 20 30 78 31 31 61 38 34 35 3a 20 2f 2a  ase 0x11a845: /*
4020: 20 46 50 45 20 2a 2f 0a 09 09 09 63 61 73 65 20   FPE */....case 
4030: 30 78 39 38 66 30 65 36 34 35 3a 20 2f 2a 20 53  0x98f0e645: /* S
4040: 49 47 46 50 45 20 2a 2f 0a 09 09 09 09 73 69 67  IGFPE */.....sig
4050: 20 3d 20 53 49 47 46 50 45 3b 0a 09 09 09 09 62   = SIGFPE;.....b
4060: 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 30 78  reak;....case 0x
4070: 39 37 32 36 36 34 63 3a 20 2f 2a 20 4b 49 4c 4c  972664c: /* KILL
4080: 20 2a 2f 0a 09 09 09 63 61 73 65 20 30 78 37 39   */....case 0x79
4090: 64 35 34 30 34 63 3a 20 2f 2a 20 53 49 47 4b 49  d5404c: /* SIGKI
40a0: 4c 4c 20 2a 2f 0a 09 09 09 09 73 69 67 20 3d 20  LL */.....sig = 
40b0: 53 49 47 4b 49 4c 4c 3b 0a 09 09 09 09 62 72 65  SIGKILL;.....bre
40c0: 61 6b 3b 0a 09 09 09 63 61 73 65 20 30 78 61 62  ak;....case 0xab
40d0: 34 65 39 33 31 3a 20 2f 2a 20 55 53 52 31 20 2a  4e931: /* USR1 *
40e0: 2f 0a 09 09 09 63 61 73 65 20 30 78 37 61 31 33  /....case 0x7a13
40f0: 63 66 33 31 3a 20 2f 2a 20 53 49 47 55 53 52 31  cf31: /* SIGUSR1
4100: 20 2a 2f 0a 09 09 09 09 73 69 67 20 3d 20 53 49   */.....sig = SI
4110: 47 55 53 52 31 3b 0a 09 09 09 09 62 72 65 61 6b  GUSR1;.....break
4120: 3b 0a 09 09 09 63 61 73 65 20 30 78 61 37 31 36  ;....case 0xa716
4130: 33 64 36 3a 20 2f 2a 20 53 45 47 56 20 2a 2f 0a  3d6: /* SEGV */.
4140: 09 09 09 63 61 73 65 20 30 78 37 61 64 36 34 35  ...case 0x7ad645
4150: 64 36 3a 20 2f 2a 20 53 49 47 53 45 47 56 20 2a  d6: /* SIGSEGV *
4160: 2f 0a 09 09 09 09 73 69 67 20 3d 20 53 49 47 53  /.....sig = SIGS
4170: 45 47 56 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a  EGV;.....break;.
4180: 09 09 09 63 61 73 65 20 30 78 61 62 34 65 39 33  ...case 0xab4e93
4190: 32 3a 20 2f 2a 20 55 53 52 32 20 2a 2f 0a 09 09  2: /* USR2 */...
41a0: 09 63 61 73 65 20 30 78 37 61 31 33 63 66 33 32  .case 0x7a13cf32
41b0: 3a 20 2f 2a 20 53 49 47 55 53 52 32 20 2a 2f 0a  : /* SIGUSR2 */.
41c0: 09 09 09 09 73 69 67 20 3d 20 53 49 47 55 53 52  ....sig = SIGUSR
41d0: 32 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09  2;.....break;...
41e0: 09 63 61 73 65 20 30 78 61 31 32 36 38 34 35 3a  .case 0xa126845:
41f0: 20 2f 2a 20 50 49 50 45 20 2a 2f 0a 09 09 09 63   /* PIPE */....c
4200: 61 73 65 20 30 78 37 61 62 35 34 65 34 35 3a 20  ase 0x7ab54e45: 
4210: 2f 2a 20 53 49 47 50 49 50 45 20 2a 2f 0a 09 09  /* SIGPIPE */...
4220: 09 09 73 69 67 20 3d 20 53 49 47 50 49 50 45 3b  ..sig = SIGPIPE;
4230: 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63  .....break;....c
4240: 61 73 65 20 30 78 38 33 33 32 39 34 64 3a 20 2f  ase 0x833294d: /
4250: 2a 20 41 4c 52 4d 20 2a 2f 0a 09 09 09 63 61 73  * ALRM */....cas
4260: 65 20 30 78 37 38 39 34 30 66 34 64 3a 20 2f 2a  e 0x78940f4d: /*
4270: 20 53 49 47 41 4c 52 4d 20 2a 2f 0a 09 09 09 09   SIGALRM */.....
4280: 73 69 67 20 3d 20 53 49 47 41 4c 52 4d 3b 0a 09  sig = SIGALRM;..
4290: 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73  ...break;....cas
42a0: 65 20 30 78 61 39 31 36 39 34 64 3a 20 2f 2a 20  e 0xa91694d: /* 
42b0: 54 45 52 4d 20 2a 2f 0a 09 09 09 63 61 73 65 20  TERM */....case 
42c0: 30 78 37 61 33 36 34 66 34 64 3a 20 2f 2a 20 53  0x7a364f4d: /* S
42d0: 49 47 54 45 52 4d 20 2a 2f 0a 09 09 09 09 73 69  IGTERM */.....si
42e0: 67 20 3d 20 53 49 47 54 45 52 4d 3b 0a 09 09 09  g = SIGTERM;....
42f0: 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20  .break;....case 
4300: 30 78 34 39 37 30 65 38 64 34 3a 20 2f 2a 20 53  0x4970e8d4: /* S
4310: 54 4b 46 4c 54 20 2a 2f 0a 09 09 09 63 61 73 65  TKFLT */....case
4320: 20 30 78 38 30 66 65 66 63 35 34 3a 20 2f 2a 20   0x80fefc54: /* 
4330: 53 49 47 53 54 4b 46 4c 54 20 2a 2f 0a 09 09 09  SIGSTKFLT */....
4340: 09 73 69 67 20 3d 20 53 49 47 53 54 4b 46 4c 54  .sig = SIGSTKFLT
4350: 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09  ;.....break;....
4360: 63 61 73 65 20 30 78 38 37 32 32 36 34 34 3a 20  case 0x8722644: 
4370: 2f 2a 20 43 48 4c 44 20 2a 2f 0a 09 09 09 63 61  /* CHLD */....ca
4380: 73 65 20 30 78 37 38 64 35 30 30 34 34 3a 20 2f  se 0x78d50044: /
4390: 2a 20 53 49 47 43 48 4c 44 20 2a 2f 0a 09 09 09  * SIGCHLD */....
43a0: 09 73 69 67 20 3d 20 53 49 47 43 48 4c 44 3b 0a  .sig = SIGCHLD;.
43b0: 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61  ....break;....ca
43c0: 73 65 20 30 78 38 37 33 65 37 35 34 3a 20 2f 2a  se 0x873e754: /*
43d0: 20 43 4f 4e 54 20 2a 2f 0a 09 09 09 63 61 73 65   CONT */....case
43e0: 20 30 78 37 38 64 34 63 31 35 34 3a 20 2f 2a 20   0x78d4c154: /* 
43f0: 53 49 47 43 4f 4e 54 20 2a 2f 0a 09 09 09 09 73  SIGCONT */.....s
4400: 69 67 20 3d 20 53 49 47 43 4f 4e 54 3b 0a 09 09  ig = SIGCONT;...
4410: 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65  ..break;....case
4420: 20 30 78 61 37 35 32 37 64 30 3a 20 2f 2a 20 53   0xa7527d0: /* S
4430: 54 4f 50 20 2a 2f 0a 09 09 09 63 61 73 65 20 30  TOP */....case 0
4440: 78 37 61 64 32 30 31 64 30 3a 20 2f 2a 20 53 49  x7ad201d0: /* SI
4450: 47 53 54 4f 50 20 2a 2f 0a 09 09 09 09 73 69 67  GSTOP */.....sig
4460: 20 3d 20 53 49 47 53 54 4f 50 3b 0a 09 09 09 09   = SIGSTOP;.....
4470: 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 30  break;....case 0
4480: 78 61 39 34 65 61 35 30 3a 20 2f 2a 20 54 53 54  xa94ea50: /* TST
4490: 50 20 2a 2f 0a 09 09 09 63 61 73 65 20 30 78 37  P */....case 0x7
44a0: 61 33 33 63 63 35 30 3a 20 2f 2a 20 53 49 47 54  a33cc50: /* SIGT
44b0: 53 54 50 20 2a 2f 0a 09 09 09 09 73 69 67 20 3d  STP */.....sig =
44c0: 20 53 49 47 54 53 54 50 3b 0a 09 09 09 09 62 72   SIGTSTP;.....br
44d0: 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 30 78 61  eak;....case 0xa
44e0: 39 35 32 34 63 65 3a 20 2f 2a 20 54 54 49 4e 20  9524ce: /* TTIN 
44f0: 2a 2f 0a 09 09 09 63 61 73 65 20 30 78 37 61 33  */....case 0x7a3
4500: 32 30 32 63 65 3a 20 2f 2a 20 53 49 47 54 54 49  202ce: /* SIGTTI
4510: 4e 20 2a 2f 0a 09 09 09 09 73 69 67 20 3d 20 53  N */.....sig = S
4520: 49 47 54 54 49 4e 3b 0a 09 09 09 09 62 72 65 61  IGTTIN;.....brea
4530: 6b 3b 0a 09 09 09 63 61 73 65 20 30 78 61 39 35  k;....case 0xa95
4540: 32 37 64 35 3a 20 2f 2a 20 54 54 4f 55 20 2a 2f  27d5: /* TTOU */
4550: 0a 09 09 09 63 61 73 65 20 30 78 37 61 33 32 30  ....case 0x7a320
4560: 31 64 35 3a 20 2f 2a 20 53 49 47 54 54 4f 55 20  1d5: /* SIGTTOU 
4570: 2a 2f 0a 09 09 09 09 73 69 67 20 3d 20 53 49 47  */.....sig = SIG
4580: 54 54 4f 55 3b 0a 09 09 09 09 62 72 65 61 6b 3b  TTOU;.....break;
4590: 0a 09 09 09 63 61 73 65 20 30 78 31 35 36 39 34  ....case 0x15694
45a0: 37 3a 20 2f 2a 20 55 52 47 20 2a 2f 0a 09 09 09  7: /* URG */....
45b0: 63 61 73 65 20 30 78 39 38 66 34 32 37 34 37 3a  case 0x98f42747:
45c0: 20 2f 2a 20 53 49 47 55 52 47 20 2a 2f 0a 09 09   /* SIGURG */...
45d0: 09 09 73 69 67 20 3d 20 53 49 47 55 52 47 3b 0a  ..sig = SIGURG;.
45e0: 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61  ....break;....ca
45f0: 73 65 20 30 78 62 31 30 65 38 35 35 3a 20 2f 2a  se 0xb10e855: /*
4600: 20 58 43 50 55 20 2a 2f 0a 09 09 09 63 61 73 65   XCPU */....case
4610: 20 30 78 37 62 62 37 63 65 35 35 3a 20 2f 2a 20   0x7bb7ce55: /* 
4620: 53 49 47 58 43 50 55 20 2a 2f 0a 09 09 09 09 73  SIGXCPU */.....s
4630: 69 67 20 3d 20 53 49 47 58 43 50 55 3b 0a 09 09  ig = SIGXCPU;...
4640: 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65  ..break;....case
4650: 20 30 78 62 31 31 61 39 64 61 3a 20 2f 2a 20 58   0xb11a9da: /* X
4660: 46 53 5a 20 2a 2f 0a 09 09 09 63 61 73 65 20 30  FSZ */....case 0
4670: 78 37 62 62 36 38 66 64 61 3a 20 2f 2a 20 53 49  x7bb68fda: /* SI
4680: 47 58 46 53 5a 20 2a 2f 0a 09 09 09 09 73 69 67  GXFSZ */.....sig
4690: 20 3d 20 53 49 47 58 46 53 5a 3b 0a 09 09 09 09   = SIGXFSZ;.....
46a0: 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 30  break;....case 0
46b0: 78 34 38 33 32 37 33 63 64 3a 20 2f 2a 20 56 54  x483273cd: /* VT
46c0: 41 4c 52 4d 20 2a 2f 0a 09 09 09 63 61 73 65 20  ALRM */....case 
46d0: 30 78 38 31 62 63 36 37 34 64 3a 20 2f 2a 20 53  0x81bc674d: /* S
46e0: 49 47 56 54 41 4c 52 4d 20 2a 2f 0a 09 09 09 09  IGVTALRM */.....
46f0: 73 69 67 20 3d 20 53 49 47 56 54 41 4c 52 4d 3b  sig = SIGVTALRM;
4700: 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63  .....break;....c
4710: 61 73 65 20 30 78 61 31 34 61 37 63 36 3a 20 2f  ase 0xa14a7c6: /
4720: 2a 20 50 52 4f 46 20 2a 2f 0a 09 09 09 63 61 73  * PROF */....cas
4730: 65 20 30 78 37 61 62 33 38 31 63 36 3a 20 2f 2a  e 0x7ab381c6: /*
4740: 20 53 49 47 50 52 4f 46 20 2a 2f 0a 09 09 09 09   SIGPROF */.....
4750: 73 69 67 20 3d 20 53 49 47 50 52 4f 46 3b 0a 09  sig = SIGPROF;..
4760: 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73  ...break;....cas
4770: 65 20 30 78 37 39 33 33 61 33 34 38 3a 20 2f 2a  e 0x7933a348: /*
4780: 20 57 49 4e 43 48 20 2a 2f 0a 09 09 09 63 61 73   WINCH */....cas
4790: 65 20 30 78 32 61 61 30 62 66 34 38 3a 20 2f 2a  e 0x2aa0bf48: /*
47a0: 20 53 49 47 57 49 4e 43 48 20 2a 2f 0a 09 09 09   SIGWINCH */....
47b0: 09 73 69 67 20 3d 20 53 49 47 57 49 4e 43 48 3b  .sig = SIGWINCH;
47c0: 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63  .....break;....c
47d0: 61 73 65 20 30 78 32 34 63 66 3a 20 2f 2a 20 49  ase 0x24cf: /* I
47e0: 4f 20 2a 2f 0a 09 09 09 63 61 73 65 20 30 78 33  O */....case 0x3
47f0: 39 33 31 65 36 34 66 3a 20 2f 2a 20 53 49 47 49  931e64f: /* SIGI
4800: 4f 20 2a 2f 0a 09 09 09 09 73 69 67 20 3d 20 53  O */.....sig = S
4810: 49 47 49 4f 3b 0a 09 09 09 09 62 72 65 61 6b 3b  IGIO;.....break;
4820: 0a 09 09 09 63 61 73 65 20 30 78 31 34 32 62 64  ....case 0x142bd
4830: 32 3a 20 2f 2a 20 50 57 52 20 2a 2f 0a 09 09 09  2: /* PWR */....
4840: 63 61 73 65 20 30 78 39 38 66 35 36 35 64 32 3a  case 0x98f565d2:
4850: 20 2f 2a 20 53 49 47 50 57 52 20 2a 2f 0a 09 09   /* SIGPWR */...
4860: 09 09 73 69 67 20 3d 20 53 49 47 50 57 52 3b 0a  ..sig = SIGPWR;.
4870: 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61  ....break;....ca
4880: 73 65 20 30 78 31 34 65 63 64 33 3a 20 2f 2a 20  se 0x14ecd3: /* 
4890: 53 59 53 20 2a 2f 0a 09 09 09 63 61 73 65 20 30  SYS */....case 0
48a0: 78 39 38 66 35 61 32 64 33 3a 20 2f 2a 20 53 49  x98f5a2d3: /* SI
48b0: 47 53 59 53 20 2a 2f 0a 09 09 09 09 73 69 67 20  GSYS */.....sig 
48c0: 3d 20 53 49 47 53 59 53 3b 0a 09 09 09 09 62 72  = SIGSYS;.....br
48d0: 65 61 6b 3b 0a 09 09 09 64 65 66 61 75 6c 74 3a  eak;....default:
48e0: 0a 09 09 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52  .....Tcl_SetObjR
48f0: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63  esult(interp, Tc
4900: 6c 5f 4f 62 6a 50 72 69 6e 74 66 28 22 75 6e 6b  l_ObjPrintf("unk
4910: 6e 6f 77 6e 20 73 69 67 6e 61 6c 20 5c 22 25 73  nown signal \"%s
4920: 5c 22 22 2c 20 54 63 6c 5f 47 65 74 53 74 72 69  \"", Tcl_GetStri
4930: 6e 67 28 73 69 67 6e 61 6c 5f 6f 62 6a 29 29 29  ng(signal_obj)))
4940: 3b 0a 0a 09 09 09 09 72 65 74 75 72 6e 28 54 43  ;......return(TC
4950: 4c 5f 45 52 52 4f 52 29 3b 0a 09 09 7d 0a 09 7d  L_ERROR);...}..}
4960: 20 65 6c 73 65 20 7b 0a 09 09 73 69 67 20 3d 20   else {...sig = 
4970: 73 69 67 5f 77 69 64 65 3b 0a 09 7d 0a 0a 09 6b  sig_wide;..}...k
4980: 69 6c 6c 5f 72 65 74 20 3d 20 6b 69 6c 6c 28 70  ill_ret = kill(p
4990: 69 64 2c 20 73 69 67 29 3b 0a 09 69 66 20 28 6b  id, sig);..if (k
49a0: 69 6c 6c 5f 72 65 74 20 21 3d 20 30 29 20 7b 0a  ill_ret != 0) {.
49b0: 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75  ..Tcl_SetObjResu
49c0: 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e  lt(interp, Tcl_N
49d0: 65 77 53 74 72 69 6e 67 4f 62 6a 28 73 74 72 65  ewStringObj(stre
49e0: 72 72 6f 72 28 65 72 72 6e 6f 29 2c 20 2d 31 29  rror(errno), -1)
49f0: 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 54 43 4c  );....return(TCL
4a00: 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 72 65  _ERROR);..}...re
4a10: 74 75 72 6e 28 54 43 4c 5f 4f 4b 29 3b 0a 7d 0a  turn(TCL_OK);.}.
4a20: 0a 73 74 61 74 69 63 20 69 6e 74 20 74 75 61 70  .static int tuap
4a30: 69 5f 72 65 62 6f 6f 74 28 43 6c 69 65 6e 74 44  i_reboot(ClientD
4a40: 61 74 61 20 63 64 2c 20 54 63 6c 5f 49 6e 74 65  ata cd, Tcl_Inte
4a50: 72 70 20 2a 69 6e 74 65 72 70 2c 20 69 6e 74 20  rp *interp, int 
4a60: 6f 62 6a 63 2c 20 54 63 6c 5f 4f 62 6a 20 2a 43  objc, Tcl_Obj *C
4a70: 4f 4e 53 54 20 6f 62 6a 76 5b 5d 29 20 7b 0a 09  ONST objv[]) {..
4a80: 54 63 6c 5f 4f 62 6a 20 2a 63 6d 64 5f 6f 62 6a  Tcl_Obj *cmd_obj
4a90: 3b 0a 09 69 6e 74 20 63 6d 64 3b 0a 09 69 6e 74  ;..int cmd;..int
4aa0: 20 72 65 62 6f 6f 74 5f 72 65 74 3b 0a 0a 09 69   reboot_ret;...i
4ab0: 66 20 28 6f 62 6a 63 20 3d 3d 20 32 29 20 7b 0a  f (objc == 2) {.
4ac0: 09 09 63 6d 64 5f 6f 62 6a 20 3d 20 6f 62 6a 76  ..cmd_obj = objv
4ad0: 5b 31 5d 3b 0a 0a 09 09 73 77 69 74 63 68 20 28  [1];....switch (
4ae0: 74 75 61 70 69 5f 69 6e 74 65 72 6e 61 6c 5f 73  tuapi_internal_s
4af0: 69 6d 70 6c 65 68 61 73 68 5f 6f 62 6a 28 63 6d  implehash_obj(cm
4b00: 64 5f 6f 62 6a 29 29 20 7b 0a 09 09 09 63 61 73  d_obj)) {....cas
4b10: 65 20 30 78 32 62 65 31 39 34 36 3a 20 2f 2a 20  e 0x2be1946: /* 
4b20: 4c 49 4e 55 58 5f 52 45 42 4f 4f 54 5f 43 4d 44  LINUX_REBOOT_CMD
4b30: 5f 43 41 44 5f 4f 46 46 20 2a 2f 0a 09 09 09 63  _CAD_OFF */....c
4b40: 61 73 65 20 30 78 36 36 36 65 36 33 34 34 3a 20  ase 0x666e6344: 
4b50: 2f 2a 20 52 42 5f 44 49 53 41 42 4c 45 5f 43 41  /* RB_DISABLE_CA
4b60: 44 20 2a 2f 0a 09 09 09 63 61 73 65 20 30 78 39  D */....case 0x9
4b70: 65 33 63 65 36 34 34 3a 20 2f 2a 20 44 49 53 41  e3ce644: /* DISA
4b80: 42 4c 45 5f 43 41 44 20 2a 2f 0a 09 09 09 09 63  BLE_CAD */.....c
4b90: 6d 64 20 3d 20 52 42 5f 44 49 53 41 42 4c 45 5f  md = RB_DISABLE_
4ba0: 43 41 44 3b 0a 0a 09 09 09 09 62 72 65 61 6b 3b  CAD;......break;
4bb0: 0a 09 09 09 63 61 73 65 20 30 78 65 38 30 35 37  ....case 0xe8057
4bc0: 63 34 65 3a 20 2f 2a 20 4c 49 4e 55 58 5f 52 45  c4e: /* LINUX_RE
4bd0: 42 4f 4f 54 5f 43 4d 44 5f 43 41 44 5f 4f 4e 20  BOOT_CMD_CAD_ON 
4be0: 2a 2f 0a 09 09 09 63 61 73 65 20 30 78 66 38 64  */....case 0xf8d
4bf0: 63 34 34 34 3a 20 2f 2a 20 52 42 5f 45 4e 41 42  c444: /* RB_ENAB
4c00: 4c 45 5f 43 41 44 20 2a 2f 0a 09 09 09 63 61 73  LE_CAD */....cas
4c10: 65 20 30 78 31 61 37 64 36 31 34 34 3a 20 2f 2a  e 0x1a7d6144: /*
4c20: 20 45 4e 41 42 4c 45 5f 43 41 44 20 2a 2f 0a 09   ENABLE_CAD */..
4c30: 09 09 09 63 6d 64 20 3d 20 52 42 5f 45 4e 41 42  ...cmd = RB_ENAB
4c40: 4c 45 5f 43 41 44 3b 0a 0a 09 09 09 09 62 72 65  LE_CAD;......bre
4c50: 61 6b 3b 0a 09 09 09 63 61 73 65 20 30 78 39 35  ak;....case 0x95
4c60: 62 66 61 34 35 34 3a 20 2f 2a 20 4c 49 4e 55 58  bfa454: /* LINUX
4c70: 5f 52 45 42 4f 4f 54 5f 43 4d 44 5f 48 41 4c 54  _REBOOT_CMD_HALT
4c80: 20 2a 2f 0a 09 09 09 63 61 73 65 20 30 78 33 32   */....case 0x32
4c90: 31 30 64 61 34 64 3a 20 2f 2a 20 52 42 5f 48 41  10da4d: /* RB_HA
4ca0: 4c 54 5f 53 59 53 54 45 4d 20 2a 2f 0a 09 09 09  LT_SYSTEM */....
4cb0: 63 61 73 65 20 30 78 63 61 34 32 35 66 34 64 3a  case 0xca425f4d:
4cc0: 20 2f 2a 20 48 41 4c 54 5f 53 59 53 54 45 4d 20   /* HALT_SYSTEM 
4cd0: 2a 2f 0a 09 09 09 63 61 73 65 20 30 78 39 31 30  */....case 0x910
4ce0: 36 36 35 34 3a 20 2f 2a 20 48 41 4c 54 20 2a 2f  6654: /* HALT */
4cf0: 0a 09 09 09 09 63 6d 64 20 3d 20 52 42 5f 48 41  .....cmd = RB_HA
4d00: 4c 54 5f 53 59 53 54 45 4d 3b 0a 0a 09 09 09 09  LT_SYSTEM;......
4d10: 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 30  break;....case 0
4d20: 78 64 62 35 35 64 38 63 36 3a 20 2f 2a 20 4c 49  xdb55d8c6: /* LI
4d30: 4e 55 58 5f 52 45 42 4f 4f 54 5f 43 4d 44 5f 50  NUX_REBOOT_CMD_P
4d40: 4f 57 45 52 5f 4f 46 46 20 2a 2f 0a 09 09 09 63  OWER_OFF */....c
4d50: 61 73 65 20 30 78 66 30 37 37 30 30 63 36 3a 20  ase 0xf07700c6: 
4d60: 2f 2a 20 52 42 5f 50 4f 57 45 52 5f 4f 46 46 20  /* RB_POWER_OFF 
4d70: 2a 2f 0a 09 09 09 63 61 73 65 20 30 78 36 34 35  */....case 0x645
4d80: 63 65 31 63 36 3a 20 2f 2a 20 50 4f 57 45 52 5f  ce1c6: /* POWER_
4d90: 4f 46 46 20 2a 2f 0a 09 09 09 09 63 6d 64 20 3d  OFF */.....cmd =
4da0: 20 30 78 34 33 32 31 66 65 64 63 3b 0a 0a 09 09   0x4321fedc;....
4db0: 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65  ..break;....case
4dc0: 20 30 78 37 33 66 66 38 33 64 34 3a 20 2f 2a 20   0x73ff83d4: /* 
4dd0: 4c 49 4e 55 58 5f 52 45 42 4f 4f 54 5f 43 4d 44  LINUX_REBOOT_CMD
4de0: 5f 52 45 53 54 41 52 54 20 2a 2f 0a 09 09 09 63  _RESTART */....c
4df0: 61 73 65 20 30 78 33 63 64 30 65 32 35 34 3a 20  ase 0x3cd0e254: 
4e00: 2f 2a 20 52 42 5f 41 55 54 4f 42 4f 4f 54 20 2a  /* RB_AUTOBOOT *
4e10: 2f 0a 09 09 09 63 61 73 65 20 30 78 62 39 66 38  /....case 0xb9f8
4e20: 62 35 64 34 3a 20 2f 2a 20 41 55 54 4f 42 4f 4f  b5d4: /* AUTOBOO
4e30: 54 20 2a 2f 0a 09 09 09 63 61 73 65 20 30 78 33  T */....case 0x3
4e40: 61 33 35 37 66 64 34 3a 20 2f 2a 20 52 45 53 54  a357fd4: /* REST
4e50: 41 52 54 20 2a 2f 0a 09 09 09 63 61 73 65 20 30  ART */....case 0
4e60: 78 35 38 35 32 61 64 64 34 3a 20 2f 2a 20 52 45  x5852add4: /* RE
4e70: 42 4f 4f 54 20 2a 2f 0a 09 09 09 09 63 6d 64 20  BOOT */.....cmd 
4e80: 3d 20 52 42 5f 41 55 54 4f 42 4f 4f 54 3b 0a 0a  = RB_AUTOBOOT;..
4e90: 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 64 65  ....break;....de
4ea0: 66 61 75 6c 74 3a 0a 09 09 09 09 54 63 6c 5f 53  fault:.....Tcl_S
4eb0: 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
4ec0: 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e  rp, Tcl_NewStrin
4ed0: 67 4f 62 6a 28 22 75 6e 6b 6e 6f 77 6e 20 6f 72  gObj("unknown or
4ee0: 20 61 6d 62 69 67 75 6f 75 73 20 73 75 62 63 6f   ambiguous subco
4ef0: 6d 6d 61 6e 64 3a 20 6d 75 73 74 20 62 65 20 44  mmand: must be D
4f00: 49 53 41 42 4c 45 5f 43 41 44 2c 20 45 4e 41 42  ISABLE_CAD, ENAB
4f10: 4c 45 5f 43 41 44 2c 20 48 41 4c 54 2c 20 50 4f  LE_CAD, HALT, PO
4f20: 57 45 52 5f 4f 46 46 2c 20 6f 72 20 52 45 53 54  WER_OFF, or REST
4f30: 41 52 54 22 2c 20 2d 31 29 29 3b 0a 0a 09 09 09  ART", -1));.....
4f40: 09 72 65 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f  .return(TCL_ERRO
4f50: 52 29 3b 0a 09 09 7d 0a 09 7d 20 65 6c 73 65 20  R);...}..} else 
4f60: 69 66 20 28 6f 62 6a 63 20 3d 3d 20 31 29 20 7b  if (objc == 1) {
4f70: 0a 09 09 63 6d 64 20 3d 20 52 42 5f 41 55 54 4f  ...cmd = RB_AUTO
4f80: 42 4f 4f 54 3b 0a 09 7d 20 65 6c 73 65 20 7b 0a  BOOT;..} else {.
4f90: 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75  ..Tcl_SetObjResu
4fa0: 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e  lt(interp, Tcl_N
4fb0: 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 77 72 6f  ewStringObj("wro
4fc0: 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
4fd0: 64 20 62 65 20 5c 22 3a 3a 74 75 61 70 69 3a 3a  d be \"::tuapi::
4fe0: 73 79 73 63 61 6c 6c 3a 3a 72 65 62 6f 6f 74 20  syscall::reboot 
4ff0: 3f 63 6f 6d 6d 61 6e 64 3f 22 2c 20 2d 31 29 29  ?command?", -1))
5000: 3b 0a 0a 09 09 72 65 74 75 72 6e 28 54 43 4c 5f  ;....return(TCL_
5010: 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 73 77 69  ERROR);..}...swi
5020: 74 63 68 20 28 63 6d 64 29 20 7b 0a 09 09 63 61  tch (cmd) {...ca
5030: 73 65 20 52 42 5f 45 4e 41 42 4c 45 5f 43 41 44  se RB_ENABLE_CAD
5040: 3a 0a 09 09 63 61 73 65 20 52 42 5f 44 49 53 41  :...case RB_DISA
5050: 42 4c 45 5f 43 41 44 3a 0a 09 09 09 2f 2a 20 4e  BLE_CAD:..../* N
5060: 6f 20 6e 65 65 64 20 74 6f 20 73 79 6e 63 20 66  o need to sync f
5070: 6f 72 20 74 68 65 73 65 20 6f 70 65 72 61 74 69  or these operati
5080: 6f 6e 73 20 2a 2f 0a 09 09 09 62 72 65 61 6b 3b  ons */....break;
5090: 0a 09 09 64 65 66 61 75 6c 74 3a 0a 09 09 09 73  ...default:....s
50a0: 79 6e 63 28 29 3b 0a 09 09 09 62 72 65 61 6b 3b  ync();....break;
50b0: 0a 09 7d 0a 0a 09 72 65 62 6f 6f 74 5f 72 65 74  ..}...reboot_ret
50c0: 20 3d 20 72 65 62 6f 6f 74 28 63 6d 64 29 3b 0a   = reboot(cmd);.
50d0: 09 69 66 20 28 72 65 62 6f 6f 74 5f 72 65 74 20  .if (reboot_ret 
50e0: 21 3d 20 30 29 20 7b 0a 09 09 54 63 6c 5f 53 65  != 0) {...Tcl_Se
50f0: 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72  tObjResult(inter
5100: 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67  p, Tcl_NewString
5110: 4f 62 6a 28 73 74 72 65 72 72 6f 72 28 65 72 72  Obj(strerror(err
5120: 6e 6f 29 2c 20 2d 31 29 29 3b 0a 0a 09 09 72 65  no), -1));....re
5130: 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b  turn(TCL_ERROR);
5140: 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 28 54 43 4c  ..}...return(TCL
5150: 5f 4f 4b 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 20  _OK);.}..static 
5160: 69 6e 74 20 74 75 61 70 69 5f 65 6a 65 63 74 28  int tuapi_eject(
5170: 43 6c 69 65 6e 74 44 61 74 61 20 63 64 2c 20 54  ClientData cd, T
5180: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
5190: 70 2c 20 69 6e 74 20 6f 62 6a 63 2c 20 54 63 6c  p, int objc, Tcl
51a0: 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
51b0: 5b 5d 29 20 7b 0a 09 54 63 6c 5f 53 65 74 4f 62  []) {..Tcl_SetOb
51c0: 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  jResult(interp, 
51d0: 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a  Tcl_NewStringObj
51e0: 28 22 6e 6f 74 20 69 6d 70 6c 65 6d 65 6e 74 65  ("not implemente
51f0: 64 22 2c 20 2d 31 29 29 3b 0a 0a 09 72 65 74 75  d", -1));...retu
5200: 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 7d  rn(TCL_ERROR);.}
5210: 0a 0a 73 74 61 74 69 63 20 69 6e 74 20 74 75 61  ..static int tua
5220: 70 69 5f 70 73 28 43 6c 69 65 6e 74 44 61 74 61  pi_ps(ClientData
5230: 20 63 64 2c 20 54 63 6c 5f 49 6e 74 65 72 70 20   cd, Tcl_Interp 
5240: 2a 69 6e 74 65 72 70 2c 20 69 6e 74 20 6f 62 6a  *interp, int obj
5250: 63 2c 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  c, Tcl_Obj *CONS
5260: 54 20 6f 62 6a 76 5b 5d 29 20 7b 0a 09 54 63 6c  T objv[]) {..Tcl
5270: 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e  _SetObjResult(in
5280: 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72  terp, Tcl_NewStr
5290: 69 6e 67 4f 62 6a 28 22 6e 6f 74 20 69 6d 70 6c  ingObj("not impl
52a0: 65 6d 65 6e 74 65 64 22 2c 20 2d 31 29 29 3b 0a  emented", -1));.
52b0: 0a 09 72 65 74 75 72 6e 28 54 43 4c 5f 45 52 52  ..return(TCL_ERR
52c0: 4f 52 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 69  OR);.}..static i
52d0: 6e 74 20 74 75 61 70 69 5f 65 78 65 63 76 65 28  nt tuapi_execve(
52e0: 43 6c 69 65 6e 74 44 61 74 61 20 63 64 2c 20 54  ClientData cd, T
52f0: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
5300: 70 2c 20 69 6e 74 20 6f 62 6a 63 2c 20 54 63 6c  p, int objc, Tcl
5310: 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
5320: 5b 5d 29 20 7b 0a 09 63 68 61 72 20 2a 2a 61 72  []) {..char **ar
5330: 67 76 20 3d 20 4e 55 4c 4c 3b 0a 09 63 68 61 72  gv = NULL;..char
5340: 20 2a 66 69 6c 65 3b 0a 09 69 6e 74 20 69 64 78   *file;..int idx
5350: 3b 0a 0a 09 69 66 20 28 6f 62 6a 63 20 3c 20 32  ;...if (objc < 2
5360: 29 20 7b 0a 09 09 54 63 6c 5f 53 65 74 4f 62 6a  ) {...Tcl_SetObj
5370: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54  Result(interp, T
5380: 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28  cl_NewStringObj(
5390: 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
53a0: 68 6f 75 6c 64 20 62 65 20 5c 22 3a 3a 74 75 61  hould be \"::tua
53b0: 70 69 3a 3a 73 79 73 63 61 6c 6c 3a 3a 65 78 65  pi::syscall::exe
53c0: 63 76 65 20 66 69 6c 65 20 3f 61 72 67 73 20 2e  cve file ?args .
53d0: 2e 2e 3f 5c 22 22 2c 20 2d 31 29 29 3b 0a 0a 09  ..?\"", -1));...
53e0: 09 72 65 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f  .return(TCL_ERRO
53f0: 52 29 3b 0a 09 7d 0a 0a 09 2f 2a 20 46 69 6e 64  R);..}.../* Find
5400: 20 65 78 65 63 75 74 61 62 6c 65 20 2a 2f 0a 09   executable */..
5410: 66 69 6c 65 20 3d 20 54 63 6c 5f 47 65 74 53 74  file = Tcl_GetSt
5420: 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 3b 0a 0a  ring(objv[1]);..
5430: 09 2f 2a 20 47 65 6e 65 72 61 74 65 20 61 72 67  ./* Generate arg
5440: 75 6d 65 6e 74 20 61 72 72 61 79 20 2a 2f 0a 09  ument array */..
5450: 61 72 67 76 20 3d 20 6d 61 6c 6c 6f 63 28 73 69  argv = malloc(si
5460: 7a 65 6f 66 28 2a 61 72 67 76 29 20 2a 20 28 6f  zeof(*argv) * (o
5470: 62 6a 63 20 2d 20 31 29 29 3b 0a 0a 09 66 6f 72  bjc - 1));...for
5480: 20 28 69 64 78 20 3d 20 32 3b 20 69 64 78 20 3c   (idx = 2; idx <
5490: 20 6f 62 6a 63 3b 20 69 64 78 2b 2b 29 20 7b 0a   objc; idx++) {.
54a0: 09 09 61 72 67 76 5b 69 64 78 20 2d 20 32 5d 20  ..argv[idx - 2] 
54b0: 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  = Tcl_GetString(
54c0: 6f 62 6a 76 5b 69 64 78 5d 29 3b 0a 09 7d 0a 09  objv[idx]);..}..
54d0: 61 72 67 76 5b 6f 62 6a 63 20 2d 20 32 5d 20 3d  argv[objc - 2] =
54e0: 20 4e 55 4c 4c 3b 0a 0a 09 2f 2a 20 50 61 73 73   NULL;.../* Pass
54f0: 20 65 78 65 63 75 74 69 6f 6e 20 74 6f 20 6e 65   execution to ne
5500: 77 20 66 69 6c 65 20 2a 2f 0a 09 65 78 65 63 76  w file */..execv
5510: 65 28 66 69 6c 65 2c 20 61 72 67 76 2c 20 65 6e  e(file, argv, en
5520: 76 69 72 6f 6e 29 3b 0a 0a 09 2f 2a 20 49 66 20  viron);.../* If 
5530: 74 68 65 20 6e 65 77 20 69 6d 61 67 65 20 63 6f  the new image co
5540: 75 6c 64 20 6e 6f 74 20 74 61 6b 65 20 6f 76 65  uld not take ove
5550: 72 2c 20 73 6f 6d 65 74 68 69 6e 67 20 77 65 6e  r, something wen
5560: 74 20 77 72 6f 6e 67 20 2d 2d 20 72 65 70 6f 72  t wrong -- repor
5570: 74 20 65 72 72 6f 72 20 2a 2f 0a 09 54 63 6c 5f  t error */..Tcl_
5580: 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74  SetObjResult(int
5590: 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69  erp, Tcl_NewStri
55a0: 6e 67 4f 62 6a 28 73 74 72 65 72 72 6f 72 28 65  ngObj(strerror(e
55b0: 72 72 6e 6f 29 2c 20 2d 31 29 29 3b 0a 0a 09 72  rrno), -1));...r
55c0: 65 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29  eturn(TCL_ERROR)
55d0: 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 69 6e 74 20  ;.}..static int 
55e0: 74 75 61 70 69 5f 6c 6f 73 65 74 75 70 28 43 6c  tuapi_losetup(Cl
55f0: 69 65 6e 74 44 61 74 61 20 63 64 2c 20 54 63 6c  ientData cd, Tcl
5600: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
5610: 20 69 6e 74 20 6f 62 6a 63 2c 20 54 63 6c 5f 4f   int objc, Tcl_O
5620: 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
5630: 29 20 7b 0a 09 63 68 61 72 20 2a 66 69 6c 65 2c  ) {..char *file,
5640: 20 2a 6c 6f 6f 70 64 65 76 3b 0a 09 69 6e 74 20   *loopdev;..int 
5650: 63 68 6b 5f 72 65 74 3b 0a 09 69 6e 74 20 6c 6f  chk_ret;..int lo
5660: 6f 70 66 64 2c 20 66 69 6c 65 66 64 3b 0a 0a 09  opfd, filefd;...
5670: 69 66 20 28 6f 62 6a 63 20 21 3d 20 33 29 20 7b  if (objc != 3) {
5680: 0a 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73  ...Tcl_SetObjRes
5690: 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ult(interp, Tcl_
56a0: 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 77 72  NewStringObj("wr
56b0: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
56c0: 6c 64 20 62 65 20 5c 22 3a 3a 74 75 61 70 69 3a  ld be \"::tuapi:
56d0: 3a 73 79 73 63 61 6c 6c 3a 3a 6c 6f 73 65 74 75  :syscall::losetu
56e0: 70 20 6c 6f 6f 70 64 65 76 20 66 69 6c 65 5c 22  p loopdev file\"
56f0: 22 2c 20 2d 31 29 29 3b 0a 0a 09 09 72 65 74 75  ", -1));....retu
5700: 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 09  rn(TCL_ERROR);..
5710: 7d 0a 0a 09 6c 6f 6f 70 64 65 76 20 3d 20 54 63  }...loopdev = Tc
5720: 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
5730: 5b 31 5d 29 3b 0a 09 66 69 6c 65 20 3d 20 54 63  [1]);..file = Tc
5740: 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
5750: 5b 32 5d 29 3b 0a 0a 09 6c 6f 6f 70 66 64 20 3d  [2]);...loopfd =
5760: 20 6f 70 65 6e 28 6c 6f 6f 70 64 65 76 2c 20 4f   open(loopdev, O
5770: 5f 52 44 4f 4e 4c 59 29 3b 0a 09 69 66 20 28 6c  _RDONLY);..if (l
5780: 6f 6f 70 66 64 20 3c 20 30 29 20 7b 0a 09 09 54  oopfd < 0) {...T
5790: 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28  cl_SetObjResult(
57a0: 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53  interp, Tcl_NewS
57b0: 74 72 69 6e 67 4f 62 6a 28 73 74 72 65 72 72 6f  tringObj(strerro
57c0: 72 28 65 72 72 6e 6f 29 2c 20 2d 31 29 29 3b 0a  r(errno), -1));.
57d0: 0a 09 09 72 65 74 75 72 6e 28 54 43 4c 5f 45 52  ...return(TCL_ER
57e0: 52 4f 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 66  ROR);..}...if (f
57f0: 69 6c 65 5b 30 5d 20 21 3d 20 27 5c 30 27 29 20  ile[0] != '\0') 
5800: 7b 0a 09 09 66 69 6c 65 66 64 20 3d 20 6f 70 65  {...filefd = ope
5810: 6e 28 66 69 6c 65 2c 20 4f 5f 52 44 4f 4e 4c 59  n(file, O_RDONLY
5820: 29 3b 0a 09 09 69 66 20 28 66 69 6c 65 66 64 20  );...if (filefd 
5830: 3c 20 30 29 20 7b 0a 09 09 09 63 6c 6f 73 65 28  < 0) {....close(
5840: 6c 6f 6f 70 66 64 29 3b 0a 0a 09 09 09 54 63 6c  loopfd);.....Tcl
5850: 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e  _SetObjResult(in
5860: 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72  terp, Tcl_NewStr
5870: 69 6e 67 4f 62 6a 28 73 74 72 65 72 72 6f 72 28  ingObj(strerror(
5880: 65 72 72 6e 6f 29 2c 20 2d 31 29 29 3b 0a 0a 09  errno), -1));...
5890: 09 09 72 65 74 75 72 6e 28 54 43 4c 5f 45 52 52  ..return(TCL_ERR
58a0: 4f 52 29 3b 0a 09 09 7d 0a 0a 09 09 63 68 6b 5f  OR);...}....chk_
58b0: 72 65 74 20 3d 20 69 6f 63 74 6c 28 6c 6f 6f 70  ret = ioctl(loop
58c0: 66 64 2c 20 4c 4f 4f 50 5f 53 45 54 5f 46 44 2c  fd, LOOP_SET_FD,
58d0: 20 66 69 6c 65 66 64 29 3b 0a 0a 09 09 63 6c 6f   filefd);....clo
58e0: 73 65 28 66 69 6c 65 66 64 29 3b 0a 09 7d 20 65  se(filefd);..} e
58f0: 6c 73 65 20 7b 0a 09 09 63 68 6b 5f 72 65 74 20  lse {...chk_ret 
5900: 3d 20 69 6f 63 74 6c 28 6c 6f 6f 70 66 64 2c 20  = ioctl(loopfd, 
5910: 4c 4f 4f 50 5f 43 4c 52 5f 46 44 2c 20 30 29 3b  LOOP_CLR_FD, 0);
5920: 0a 09 7d 0a 0a 09 63 6c 6f 73 65 28 6c 6f 6f 70  ..}...close(loop
5930: 66 64 29 3b 0a 0a 09 69 66 20 28 63 68 6b 5f 72  fd);...if (chk_r
5940: 65 74 20 21 3d 20 30 29 20 7b 0a 09 09 54 63 6c  et != 0) {...Tcl
5950: 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e  _SetObjResult(in
5960: 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72  terp, Tcl_NewStr
5970: 69 6e 67 4f 62 6a 28 73 74 72 65 72 72 6f 72 28  ingObj(strerror(
5980: 65 72 72 6e 6f 29 2c 20 2d 31 29 29 3b 0a 0a 09  errno), -1));...
5990: 09 72 65 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f  .return(TCL_ERRO
59a0: 52 29 3b 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 28  R);..}...return(
59b0: 54 43 4c 5f 4f 4b 29 3b 0a 7d 0a 0a 73 74 61 74  TCL_OK);.}..stat
59c0: 69 63 20 76 6f 69 64 20 74 75 61 70 69 5f 70 72  ic void tuapi_pr
59d0: 69 76 61 74 65 5f 61 70 70 65 6e 64 5f 73 6f 63  ivate_append_soc
59e0: 6b 61 64 64 72 5f 74 6f 5f 74 63 6c 6f 62 6a 28  kaddr_to_tclobj(
59f0: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
5a00: 72 70 2c 20 54 63 6c 5f 4f 62 6a 20 2a 6c 69 73  rp, Tcl_Obj *lis
5a10: 74 2c 20 63 68 61 72 20 2a 68 65 61 64 65 72 2c  t, char *header,
5a20: 20 73 74 72 75 63 74 20 73 6f 63 6b 61 64 64 72   struct sockaddr
5a30: 20 2a 61 64 64 72 29 20 7b 0a 09 63 68 61 72 20   *addr) {..char 
5a40: 61 64 64 72 5f 62 75 66 5b 49 4e 45 54 36 5f 41  addr_buf[INET6_A
5a50: 44 44 52 53 54 52 4c 45 4e 20 2b 20 49 4e 45 54  DDRSTRLEN + INET
5a60: 5f 41 44 44 52 53 54 52 4c 45 4e 20 2b 20 31 5d  _ADDRSTRLEN + 1]
5a70: 2c 20 2a 63 68 6b 5f 69 6e 70 3b 0a 0a 09 73 77  , *chk_inp;...sw
5a80: 69 74 63 68 20 28 61 64 64 72 2d 3e 73 61 5f 66  itch (addr->sa_f
5a90: 61 6d 69 6c 79 29 20 7b 0a 09 09 63 61 73 65 20  amily) {...case 
5aa0: 41 46 5f 49 4e 45 54 3a 20 2f 2a 20 49 50 76 34  AF_INET: /* IPv4
5ab0: 20 2a 2f 0a 09 09 63 61 73 65 20 41 46 5f 49 4e   */...case AF_IN
5ac0: 45 54 36 3a 20 2f 2a 20 49 50 76 36 20 2a 2f 0a  ET6: /* IPv6 */.
5ad0: 09 09 09 73 77 69 74 63 68 20 28 61 64 64 72 2d  ...switch (addr-
5ae0: 3e 73 61 5f 66 61 6d 69 6c 79 29 20 7b 0a 09 09  >sa_family) {...
5af0: 09 09 63 61 73 65 20 41 46 5f 49 4e 45 54 3a 20  ..case AF_INET: 
5b00: 2f 2a 20 49 50 76 34 20 2a 2f 0a 09 09 09 09 09  /* IPv4 */......
5b10: 63 68 6b 5f 69 6e 70 20 3d 20 28 63 68 61 72 20  chk_inp = (char 
5b20: 2a 29 20 69 6e 65 74 5f 6e 74 6f 70 28 61 64 64  *) inet_ntop(add
5b30: 72 2d 3e 73 61 5f 66 61 6d 69 6c 79 2c 20 26 28  r->sa_family, &(
5b40: 28 73 74 72 75 63 74 20 73 6f 63 6b 61 64 64 72  (struct sockaddr
5b50: 5f 69 6e 20 2a 29 20 61 64 64 72 29 2d 3e 73 69  _in *) addr)->si
5b60: 6e 5f 61 64 64 72 2c 20 61 64 64 72 5f 62 75 66  n_addr, addr_buf
5b70: 2c 20 73 69 7a 65 6f 66 28 61 64 64 72 5f 62 75  , sizeof(addr_bu
5b80: 66 29 29 3b 0a 09 09 09 09 09 62 72 65 61 6b 3b  f));......break;
5b90: 0a 09 09 09 09 63 61 73 65 20 41 46 5f 49 4e 45  .....case AF_INE
5ba0: 54 36 3a 20 2f 2a 20 49 50 76 36 20 2a 2f 0a 09  T6: /* IPv6 */..
5bb0: 09 09 09 09 63 68 6b 5f 69 6e 70 20 3d 20 28 63  ....chk_inp = (c
5bc0: 68 61 72 20 2a 29 20 69 6e 65 74 5f 6e 74 6f 70  har *) inet_ntop
5bd0: 28 61 64 64 72 2d 3e 73 61 5f 66 61 6d 69 6c 79  (addr->sa_family
5be0: 2c 20 26 28 28 73 74 72 75 63 74 20 73 6f 63 6b  , &((struct sock
5bf0: 61 64 64 72 5f 69 6e 36 20 2a 29 20 61 64 64 72  addr_in6 *) addr
5c00: 29 2d 3e 73 69 6e 36 5f 61 64 64 72 2c 20 61 64  )->sin6_addr, ad
5c10: 64 72 5f 62 75 66 2c 20 73 69 7a 65 6f 66 28 61  dr_buf, sizeof(a
5c20: 64 64 72 5f 62 75 66 29 29 3b 0a 09 09 09 09 09  ddr_buf));......
5c30: 62 72 65 61 6b 3b 0a 09 09 09 7d 0a 0a 09 09 09  break;....}.....
5c40: 69 66 20 28 63 68 6b 5f 69 6e 70 20 3d 3d 20 4e  if (chk_inp == N
5c50: 55 4c 4c 29 20 7b 0a 09 09 09 09 62 72 65 61 6b  ULL) {.....break
5c60: 3b 0a 09 09 09 7d 0a 0a 09 09 09 69 66 20 28 68  ;....}.....if (h
5c70: 65 61 64 65 72 29 20 7b 0a 09 09 09 09 54 63 6c  eader) {.....Tcl
5c80: 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c  _ListObjAppendEl
5c90: 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 6c 69  ement(interp, li
5ca0: 73 74 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e  st, Tcl_NewStrin
5cb0: 67 4f 62 6a 28 68 65 61 64 65 72 2c 20 2d 31 29  gObj(header, -1)
5cc0: 29 3b 0a 09 09 09 7d 0a 0a 09 09 09 54 63 6c 5f  );....}.....Tcl_
5cd0: 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65  ListObjAppendEle
5ce0: 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 6c 69 73  ment(interp, lis
5cf0: 74 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67  t, Tcl_NewString
5d00: 4f 62 6a 28 61 64 64 72 5f 62 75 66 2c 20 2d 31  Obj(addr_buf, -1
5d10: 29 29 3b 0a 0a 09 09 09 62 72 65 61 6b 3b 0a 09  ));.....break;..
5d20: 7d 0a 0a 09 72 65 74 75 72 6e 3b 0a 7d 0a 0a 73  }...return;.}..s
5d30: 74 61 74 69 63 20 69 6e 74 20 74 75 61 70 69 5f  tatic int tuapi_
5d40: 70 72 69 76 61 74 65 5f 67 65 74 5f 73 6f 63 6b  private_get_sock
5d50: 61 64 64 72 5f 66 72 6f 6d 5f 6f 62 6a 28 54 63  addr_from_obj(Tc
5d60: 6c 5f 4f 62 6a 20 2a 76 61 6c 75 65 2c 20 76 6f  l_Obj *value, vo
5d70: 69 64 20 2a 74 61 72 67 65 74 29 20 7b 0a 09 73  id *target) {..s
5d80: 74 72 75 63 74 20 73 6f 63 6b 61 64 64 72 5f 69  truct sockaddr_i
5d90: 6e 20 6c 6f 63 61 6c 5f 76 34 3b 0a 09 73 74 72  n local_v4;..str
5da0: 75 63 74 20 73 6f 63 6b 61 64 64 72 5f 69 6e 36  uct sockaddr_in6
5db0: 20 6c 6f 63 61 6c 5f 76 36 3b 0a 09 63 6f 6e 73   local_v6;..cons
5dc0: 74 20 63 68 61 72 20 2a 61 64 64 72 5f 73 74 72  t char *addr_str
5dd0: 3b 0a 09 69 6e 74 20 69 6e 65 74 70 74 6f 6e 5f  ;..int inetpton_
5de0: 72 65 74 3b 0a 0a 09 61 64 64 72 5f 73 74 72 20  ret;...addr_str 
5df0: 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  = Tcl_GetString(
5e00: 76 61 6c 75 65 29 3b 0a 0a 09 6d 65 6d 73 65 74  value);...memset
5e10: 28 26 6c 6f 63 61 6c 5f 76 34 2c 20 30 2c 20 73  (&local_v4, 0, s
5e20: 69 7a 65 6f 66 28 6c 6f 63 61 6c 5f 76 34 29 29  izeof(local_v4))
5e30: 3b 0a 09 69 6e 65 74 70 74 6f 6e 5f 72 65 74 20  ;..inetpton_ret 
5e40: 3d 20 69 6e 65 74 5f 70 74 6f 6e 28 41 46 5f 49  = inet_pton(AF_I
5e50: 4e 45 54 2c 20 61 64 64 72 5f 73 74 72 2c 20 26  NET, addr_str, &
5e60: 6c 6f 63 61 6c 5f 76 34 2e 73 69 6e 5f 61 64 64  local_v4.sin_add
5e70: 72 29 3b 0a 09 69 66 20 28 69 6e 65 74 70 74 6f  r);..if (inetpto
5e80: 6e 5f 72 65 74 20 3d 3d 20 31 29 20 7b 0a 09 09  n_ret == 1) {...
5e90: 6c 6f 63 61 6c 5f 76 34 2e 73 69 6e 5f 66 61 6d  local_v4.sin_fam
5ea0: 69 6c 79 20 3d 20 41 46 5f 49 4e 45 54 3b 0a 0a  ily = AF_INET;..
5eb0: 09 09 6d 65 6d 63 70 79 28 74 61 72 67 65 74 2c  ..memcpy(target,
5ec0: 20 26 6c 6f 63 61 6c 5f 76 34 2c 20 73 69 7a 65   &local_v4, size
5ed0: 6f 66 28 6c 6f 63 61 6c 5f 76 34 29 29 3b 0a 0a  of(local_v4));..
5ee0: 09 09 72 65 74 75 72 6e 28 30 29 3b 0a 09 7d 0a  ..return(0);..}.
5ef0: 0a 09 6d 65 6d 73 65 74 28 26 6c 6f 63 61 6c 5f  ..memset(&local_
5f00: 76 36 2c 20 30 2c 20 73 69 7a 65 6f 66 28 6c 6f  v6, 0, sizeof(lo
5f10: 63 61 6c 5f 76 36 29 29 3b 0a 09 69 6e 65 74 70  cal_v6));..inetp
5f20: 74 6f 6e 5f 72 65 74 20 3d 20 69 6e 65 74 5f 70  ton_ret = inet_p
5f30: 74 6f 6e 28 41 46 5f 49 4e 45 54 36 2c 20 61 64  ton(AF_INET6, ad
5f40: 64 72 5f 73 74 72 2c 20 26 6c 6f 63 61 6c 5f 76  dr_str, &local_v
5f50: 36 2e 73 69 6e 36 5f 61 64 64 72 29 3b 0a 09 69  6.sin6_addr);..i
5f60: 66 20 28 69 6e 65 74 70 74 6f 6e 5f 72 65 74 20  f (inetpton_ret 
5f70: 3d 3d 20 31 29 20 7b 0a 09 09 6c 6f 63 61 6c 5f  == 1) {...local_
5f80: 76 36 2e 73 69 6e 36 5f 66 61 6d 69 6c 79 20 3d  v6.sin6_family =
5f90: 20 41 46 5f 49 4e 45 54 36 3b 0a 0a 09 09 6d 65   AF_INET6;....me
5fa0: 6d 63 70 79 28 74 61 72 67 65 74 2c 20 26 6c 6f  mcpy(target, &lo
5fb0: 63 61 6c 5f 76 36 2c 20 73 69 7a 65 6f 66 28 6c  cal_v6, sizeof(l
5fc0: 6f 63 61 6c 5f 76 36 29 29 3b 0a 0a 09 09 72 65  ocal_v6));....re
5fd0: 74 75 72 6e 28 30 29 3b 0a 09 7d 0a 0a 09 72 65  turn(0);..}...re
5fe0: 74 75 72 6e 28 2d 31 29 3b 0a 7d 0a 0a 73 74 61  turn(-1);.}..sta
5ff0: 74 69 63 20 69 6e 74 20 74 75 61 70 69 5f 69 66  tic int tuapi_if
6000: 63 6f 6e 66 69 67 5f 6c 69 73 74 28 43 6c 69 65  config_list(Clie
6010: 6e 74 44 61 74 61 20 63 64 2c 20 54 63 6c 5f 49  ntData cd, Tcl_I
6020: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 69  nterp *interp, i
6030: 6e 74 20 6f 62 6a 63 2c 20 54 63 6c 5f 4f 62 6a  nt objc, Tcl_Obj
6040: 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 2c 20   *CONST objv[], 
6050: 69 6e 74 20 73 6f 63 6b 29 20 7b 0a 09 54 63 6c  int sock) {..Tcl
6060: 5f 4f 62 6a 20 2a 74 63 6c 5f 69 66 61 63 65 5f  _Obj *tcl_iface_
6070: 6c 69 73 74 3b 0a 09 73 74 72 75 63 74 20 69 66  list;..struct if
6080: 63 6f 6e 66 20 69 66 61 63 65 73 5f 63 66 67 3b  conf ifaces_cfg;
6090: 0a 09 73 74 72 75 63 74 20 69 66 72 65 71 20 2a  ..struct ifreq *
60a0: 69 66 61 63 65 5f 72 65 71 20 3d 20 4e 55 4c 4c  iface_req = NULL
60b0: 3b 0a 09 69 6e 74 20 69 66 61 63 65 5f 72 65 71  ;..int iface_req
60c0: 5f 63 6e 74 20 3d 20 32 32 34 2c 20 69 66 61 63  _cnt = 224, ifac
60d0: 65 5f 72 65 71 5f 6c 65 6e 3b 0a 09 69 6e 74 20  e_req_len;..int 
60e0: 69 64 78 2c 20 69 66 61 63 65 5f 63 6e 74 3b 0a  idx, iface_cnt;.
60f0: 09 69 6e 74 20 69 6f 63 74 6c 5f 72 65 74 2c 20  .int ioctl_ret, 
6100: 74 63 6c 5f 72 65 74 3b 0a 0a 09 69 66 61 63 65  tcl_ret;...iface
6110: 5f 72 65 71 5f 6c 65 6e 20 3d 20 69 66 61 63 65  _req_len = iface
6120: 5f 72 65 71 5f 63 6e 74 20 2a 20 73 69 7a 65 6f  _req_cnt * sizeo
6130: 66 28 2a 69 66 61 63 65 5f 72 65 71 29 3b 0a 09  f(*iface_req);..
6140: 69 66 61 63 65 5f 72 65 71 20 3d 20 6d 61 6c 6c  iface_req = mall
6150: 6f 63 28 69 66 61 63 65 5f 72 65 71 5f 6c 65 6e  oc(iface_req_len
6160: 29 3b 0a 09 69 66 20 28 69 66 61 63 65 5f 72 65  );..if (iface_re
6170: 71 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 2f  q == NULL) {.../
6180: 2a 20 52 65 70 6f 72 74 20 66 61 69 6c 75 72 65  * Report failure
6190: 20 2a 2f 0a 09 09 54 63 6c 5f 53 65 74 4f 62 6a   */...Tcl_SetObj
61a0: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54  Result(interp, T
61b0: 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28  cl_NewStringObj(
61c0: 22 75 6e 61 62 6c 65 20 74 6f 20 61 6c 6c 6f 63  "unable to alloc
61d0: 61 74 65 20 6d 65 6d 6f 72 79 22 2c 20 2d 31 29  ate memory", -1)
61e0: 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 54 43 4c  );....return(TCL
61f0: 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 69 66  _ERROR);..}...if
6200: 61 63 65 73 5f 63 66 67 2e 69 66 63 5f 72 65 71  aces_cfg.ifc_req
6210: 20 3d 20 69 66 61 63 65 5f 72 65 71 3b 0a 09 69   = iface_req;..i
6220: 66 61 63 65 73 5f 63 66 67 2e 69 66 63 5f 6c 65  faces_cfg.ifc_le
6230: 6e 20 3d 20 69 66 61 63 65 5f 72 65 71 5f 6c 65  n = iface_req_le
6240: 6e 3b 0a 09 69 6f 63 74 6c 5f 72 65 74 20 3d 20  n;..ioctl_ret = 
6250: 69 6f 63 74 6c 28 73 6f 63 6b 2c 20 53 49 4f 43  ioctl(sock, SIOC
6260: 47 49 46 43 4f 4e 46 2c 20 26 69 66 61 63 65 73  GIFCONF, &ifaces
6270: 5f 63 66 67 29 3b 0a 09 69 66 20 28 69 6f 63 74  _cfg);..if (ioct
6280: 6c 5f 72 65 74 20 21 3d 20 30 29 20 7b 0a 09 09  l_ret != 0) {...
6290: 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
62a0: 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77  (interp, Tcl_New
62b0: 53 74 72 69 6e 67 4f 62 6a 28 22 69 6f 63 74 6c  StringObj("ioctl
62c0: 20 66 61 69 6c 65 64 22 2c 20 2d 31 29 29 3b 0a   failed", -1));.
62d0: 0a 09 09 66 72 65 65 28 69 66 61 63 65 5f 72 65  ...free(iface_re
62e0: 71 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 54 43  q);....return(TC
62f0: 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 69  L_ERROR);..}...i
6300: 66 61 63 65 5f 63 6e 74 20 3d 20 69 66 61 63 65  face_cnt = iface
6310: 73 5f 63 66 67 2e 69 66 63 5f 6c 65 6e 20 2f 20  s_cfg.ifc_len / 
6320: 73 69 7a 65 6f 66 28 2a 69 66 61 63 65 5f 72 65  sizeof(*iface_re
6330: 71 29 3b 0a 0a 09 74 63 6c 5f 69 66 61 63 65 5f  q);...tcl_iface_
6340: 6c 69 73 74 20 3d 20 54 63 6c 5f 4e 65 77 4f 62  list = Tcl_NewOb
6350: 6a 28 29 3b 0a 0a 09 66 6f 72 20 28 69 64 78 20  j();...for (idx 
6360: 3d 20 30 3b 20 69 64 78 20 3c 20 69 66 61 63 65  = 0; idx < iface
6370: 5f 63 6e 74 3b 20 69 64 78 2b 2b 29 20 7b 0a 09  _cnt; idx++) {..
6380: 09 74 63 6c 5f 72 65 74 20 3d 20 54 63 6c 5f 4c  .tcl_ret = Tcl_L
6390: 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d  istObjAppendElem
63a0: 65 6e 74 28 69 6e 74 65 72 70 2c 20 74 63 6c 5f  ent(interp, tcl_
63b0: 69 66 61 63 65 5f 6c 69 73 74 2c 20 54 63 6c 5f  iface_list, Tcl_
63c0: 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 69 66 61  NewStringObj(ifa
63d0: 63 65 5f 72 65 71 5b 69 64 78 5d 2e 69 66 72 5f  ce_req[idx].ifr_
63e0: 6e 61 6d 65 2c 20 2d 31 29 29 3b 0a 09 09 69 66  name, -1));...if
63f0: 20 28 74 63 6c 5f 72 65 74 20 21 3d 20 54 43 4c   (tcl_ret != TCL
6400: 5f 4f 4b 29 20 7b 0a 09 09 09 54 63 6c 5f 53 65  _OK) {....Tcl_Se
6410: 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72  tObjResult(inter
6420: 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67  p, Tcl_NewString
6430: 4f 62 6a 28 22 75 6e 61 62 6c 65 20 74 6f 20 61  Obj("unable to a
6440: 70 70 65 6e 64 20 74 6f 20 6c 69 73 74 22 2c 20  ppend to list", 
6450: 2d 31 29 29 3b 0a 0a 09 09 09 66 72 65 65 28 69  -1));.....free(i
6460: 66 61 63 65 5f 72 65 71 29 3b 0a 0a 09 09 09 72  face_req);.....r
6470: 65 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29  eturn(TCL_ERROR)
6480: 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 66 72 65 65 28  ;...}..}...free(
6490: 69 66 61 63 65 5f 72 65 71 29 3b 0a 0a 09 54 63  iface_req);...Tc
64a0: 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69  l_SetObjResult(i
64b0: 6e 74 65 72 70 2c 20 74 63 6c 5f 69 66 61 63 65  nterp, tcl_iface
64c0: 5f 6c 69 73 74 29 3b 0a 0a 09 72 65 74 75 72 6e  _list);...return
64d0: 28 54 43 4c 5f 4f 4b 29 3b 0a 7d 0a 0a 73 74 61  (TCL_OK);.}..sta
64e0: 74 69 63 20 69 6e 74 20 74 75 61 70 69 5f 69 66  tic int tuapi_if
64f0: 63 6f 6e 66 69 67 5f 69 6e 66 6f 28 43 6c 69 65  config_info(Clie
6500: 6e 74 44 61 74 61 20 63 64 2c 20 54 63 6c 5f 49  ntData cd, Tcl_I
6510: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 69  nterp *interp, i
6520: 6e 74 20 6f 62 6a 63 2c 20 54 63 6c 5f 4f 62 6a  nt objc, Tcl_Obj
6530: 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 2c 20   *CONST objv[], 
6540: 69 6e 74 20 73 6f 63 6b 2c 20 69 6e 74 20 73 6f  int sock, int so
6550: 63 6b 5f 76 34 2c 20 69 6e 74 20 73 6f 63 6b 5f  ck_v4, int sock_
6560: 76 36 29 20 7b 0a 09 54 63 6c 5f 4f 62 6a 20 2a  v6) {..Tcl_Obj *
6570: 72 65 74 6c 69 73 74 2c 20 2a 66 6c 61 67 73 3b  retlist, *flags;
6580: 0a 09 73 74 72 75 63 74 20 69 66 72 65 71 20 69  ..struct ifreq i
6590: 66 61 63 65 5f 72 65 71 3b 0a 09 75 6e 73 69 67  face_req;..unsig
65a0: 6e 65 64 20 63 68 61 72 20 2a 61 64 64 72 5f 64  ned char *addr_d
65b0: 61 74 61 3b 0a 09 63 6f 6e 73 74 20 63 68 61 72  ata;..const char
65c0: 20 2a 6c 69 6e 6b 5f 65 6e 63 61 70 3b 0a 09 63   *link_encap;..c
65d0: 6f 6e 73 74 20 63 68 61 72 20 2a 69 66 61 63 65  onst char *iface
65e0: 3b 0a 09 69 6e 74 20 66 6c 61 67 73 5f 62 69 74  ;..int flags_bit
65f0: 6d 61 73 6b 2c 20 66 6c 61 67 5f 62 72 6f 61 64  mask, flag_broad
6600: 63 61 73 74 20 3d 20 30 2c 20 66 6c 61 67 5f 70  cast = 0, flag_p
6610: 6f 69 6e 74 6f 70 6f 69 6e 74 20 3d 20 30 3b 0a  ointopoint = 0;.
6620: 09 69 6e 74 20 69 6f 63 74 6c 5f 72 65 74 3b 0a  .int ioctl_ret;.
6630: 0a 09 72 65 74 6c 69 73 74 20 3d 20 54 63 6c 5f  ..retlist = Tcl_
6640: 4e 65 77 4f 62 6a 28 29 3b 0a 0a 09 69 66 61 63  NewObj();...ifac
6650: 65 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  e = Tcl_GetStrin
6660: 67 28 6f 62 6a 76 5b 31 5d 29 3b 0a 0a 09 69 66  g(objv[1]);...if
6670: 20 28 28 73 74 72 6c 65 6e 28 69 66 61 63 65 29   ((strlen(iface)
6680: 20 2b 20 31 29 20 3e 3d 20 49 46 4e 41 4d 53 49   + 1) >= IFNAMSI
6690: 5a 29 20 7b 0a 09 09 54 63 6c 5f 53 65 74 4f 62  Z) {...Tcl_SetOb
66a0: 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  jResult(interp, 
66b0: 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a  Tcl_NewStringObj
66c0: 28 22 69 6e 74 65 72 66 61 63 65 20 6e 61 6d 65  ("interface name
66d0: 20 74 6f 6f 20 6c 6f 6e 67 22 2c 20 2d 31 29 29   too long", -1))
66e0: 3b 0a 0a 09 09 72 65 74 75 72 6e 28 54 43 4c 5f  ;....return(TCL_
66f0: 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 73 74 72  ERROR);..}...str
6700: 63 70 79 28 69 66 61 63 65 5f 72 65 71 2e 69 66  cpy(iface_req.if
6710: 72 5f 6e 61 6d 65 2c 20 69 66 61 63 65 29 3b 0a  r_name, iface);.
6720: 0a 09 2f 2a 0a 09 20 2a 20 41 6c 6c 20 69 6e 74  ../*.. * All int
6730: 65 72 66 61 63 65 73 20 73 68 6f 75 6c 64 20 68  erfaces should h
6740: 61 76 65 20 66 6c 61 67 73 2c 20 73 6f 20 75 73  ave flags, so us
6750: 65 20 69 74 20 61 73 20 61 20 63 68 65 63 6b 20  e it as a check 
6760: 66 6f 72 20 69 6e 74 65 72 66 61 63 65 0a 09 20  for interface.. 
6770: 2a 20 65 78 69 73 74 61 6e 63 65 0a 09 20 2a 2f  * existance.. */
6780: 0a 09 69 6f 63 74 6c 5f 72 65 74 20 3d 20 69 6f  ..ioctl_ret = io
6790: 63 74 6c 28 73 6f 63 6b 2c 20 53 49 4f 43 47 49  ctl(sock, SIOCGI
67a0: 46 46 4c 41 47 53 2c 20 26 69 66 61 63 65 5f 72  FFLAGS, &iface_r
67b0: 65 71 29 3b 0a 09 69 66 20 28 69 6f 63 74 6c 5f  eq);..if (ioctl_
67c0: 72 65 74 20 21 3d 20 30 29 20 7b 0a 09 09 54 63  ret != 0) {...Tc
67d0: 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69  l_SetObjResult(i
67e0: 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74  nterp, Tcl_NewSt
67f0: 72 69 6e 67 4f 62 6a 28 22 69 6e 76 61 6c 69 64  ringObj("invalid
6800: 20 69 6e 74 65 72 66 61 63 65 22 2c 20 2d 31 29   interface", -1)
6810: 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 54 43 4c  );....return(TCL
6820: 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 2f 2a  _ERROR);..}.../*
6830: 20 43 72 65 61 74 65 20 6c 69 73 74 20 6f 66 20   Create list of 
6840: 66 6c 61 67 73 20 2a 2f 0a 09 66 6c 61 67 73 20  flags */..flags 
6850: 3d 20 54 63 6c 5f 4e 65 77 4f 62 6a 28 29 3b 0a  = Tcl_NewObj();.
6860: 09 66 6c 61 67 73 5f 62 69 74 6d 61 73 6b 20 3d  .flags_bitmask =
6870: 20 69 66 61 63 65 5f 72 65 71 2e 69 66 72 5f 66   iface_req.ifr_f
6880: 6c 61 67 73 3b 0a 0a 09 69 66 20 28 28 66 6c 61  lags;...if ((fla
6890: 67 73 5f 62 69 74 6d 61 73 6b 20 26 20 49 46 46  gs_bitmask & IFF
68a0: 5f 55 50 29 20 3d 3d 20 49 46 46 5f 55 50 29 20  _UP) == IFF_UP) 
68b0: 7b 0a 09 09 54 63 6c 5f 4c 69 73 74 4f 62 6a 41  {...Tcl_ListObjA
68c0: 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74  ppendElement(int
68d0: 65 72 70 2c 20 66 6c 61 67 73 2c 20 54 63 6c 5f  erp, flags, Tcl_
68e0: 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 55 50  NewStringObj("UP
68f0: 22 2c 20 2d 31 29 29 3b 0a 09 7d 0a 09 69 66 20  ", -1));..}..if 
6900: 28 28 66 6c 61 67 73 5f 62 69 74 6d 61 73 6b 20  ((flags_bitmask 
6910: 26 20 49 46 46 5f 42 52 4f 41 44 43 41 53 54 29  & IFF_BROADCAST)
6920: 20 3d 3d 20 49 46 46 5f 42 52 4f 41 44 43 41 53   == IFF_BROADCAS
6930: 54 29 20 7b 0a 09 09 66 6c 61 67 5f 62 72 6f 61  T) {...flag_broa
6940: 64 63 61 73 74 20 3d 20 31 3b 0a 0a 09 09 54 63  dcast = 1;....Tc
6950: 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45  l_ListObjAppendE
6960: 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 66  lement(interp, f
6970: 6c 61 67 73 2c 20 54 63 6c 5f 4e 65 77 53 74 72  lags, Tcl_NewStr
6980: 69 6e 67 4f 62 6a 28 22 42 52 4f 41 44 43 41 53  ingObj("BROADCAS
6990: 54 22 2c 20 2d 31 29 29 3b 0a 09 7d 0a 09 69 66  T", -1));..}..if
69a0: 20 28 28 66 6c 61 67 73 5f 62 69 74 6d 61 73 6b   ((flags_bitmask
69b0: 20 26 20 49 46 46 5f 50 4f 49 4e 54 4f 50 4f 49   & IFF_POINTOPOI
69c0: 4e 54 29 20 3d 3d 20 49 46 46 5f 50 4f 49 4e 54  NT) == IFF_POINT
69d0: 4f 50 4f 49 4e 54 29 20 7b 0a 09 09 66 6c 61 67  OPOINT) {...flag
69e0: 5f 70 6f 69 6e 74 6f 70 6f 69 6e 74 20 3d 20 31  _pointopoint = 1
69f0: 3b 0a 0a 09 09 54 63 6c 5f 4c 69 73 74 4f 62 6a  ;....Tcl_ListObj
6a00: 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e  AppendElement(in
6a10: 74 65 72 70 2c 20 66 6c 61 67 73 2c 20 54 63 6c  terp, flags, Tcl
6a20: 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 50  _NewStringObj("P
6a30: 4f 49 4e 54 4f 50 4f 49 4e 54 22 2c 20 2d 31 29  OINTOPOINT", -1)
6a40: 29 3b 0a 09 7d 0a 09 69 66 20 28 28 66 6c 61 67  );..}..if ((flag
6a50: 73 5f 62 69 74 6d 61 73 6b 20 26 20 49 46 46 5f  s_bitmask & IFF_
6a60: 44 45 42 55 47 29 20 3d 3d 20 49 46 46 5f 44 45  DEBUG) == IFF_DE
6a70: 42 55 47 29 20 7b 0a 09 09 54 63 6c 5f 4c 69 73  BUG) {...Tcl_Lis
6a80: 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e  tObjAppendElemen
6a90: 74 28 69 6e 74 65 72 70 2c 20 66 6c 61 67 73 2c  t(interp, flags,
6aa0: 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62   Tcl_NewStringOb
6ab0: 6a 28 22 44 45 42 55 47 22 2c 20 2d 31 29 29 3b  j("DEBUG", -1));
6ac0: 0a 09 7d 0a 09 69 66 20 28 28 66 6c 61 67 73 5f  ..}..if ((flags_
6ad0: 62 69 74 6d 61 73 6b 20 26 20 49 46 46 5f 4c 4f  bitmask & IFF_LO
6ae0: 4f 50 42 41 43 4b 29 20 3d 3d 20 49 46 46 5f 4c  OPBACK) == IFF_L
6af0: 4f 4f 50 42 41 43 4b 29 20 7b 0a 09 09 54 63 6c  OOPBACK) {...Tcl
6b00: 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c  _ListObjAppendEl
6b10: 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 66 6c  ement(interp, fl
6b20: 61 67 73 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69  ags, Tcl_NewStri
6b30: 6e 67 4f 62 6a 28 22 4c 4f 4f 50 42 41 43 4b 22  ngObj("LOOPBACK"
6b40: 2c 20 2d 31 29 29 3b 0a 09 7d 0a 09 69 66 20 28  , -1));..}..if (
6b50: 28 66 6c 61 67 73 5f 62 69 74 6d 61 73 6b 20 26  (flags_bitmask &
6b60: 20 49 46 46 5f 4e 4f 54 52 41 49 4c 45 52 53 29   IFF_NOTRAILERS)
6b70: 20 3d 3d 20 49 46 46 5f 4e 4f 54 52 41 49 4c 45   == IFF_NOTRAILE
6b80: 52 53 29 20 7b 0a 09 09 54 63 6c 5f 4c 69 73 74  RS) {...Tcl_List
6b90: 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74  ObjAppendElement
6ba0: 28 69 6e 74 65 72 70 2c 20 66 6c 61 67 73 2c 20  (interp, flags, 
6bb0: 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a  Tcl_NewStringObj
6bc0: 28 22 4e 4f 54 52 41 49 4c 45 52 53 22 2c 20 2d  ("NOTRAILERS", -
6bd0: 31 29 29 3b 0a 09 7d 0a 09 69 66 20 28 28 66 6c  1));..}..if ((fl
6be0: 61 67 73 5f 62 69 74 6d 61 73 6b 20 26 20 49 46  ags_bitmask & IF
6bf0: 46 5f 52 55 4e 4e 49 4e 47 29 20 3d 3d 20 49 46  F_RUNNING) == IF
6c00: 46 5f 52 55 4e 4e 49 4e 47 29 20 7b 0a 09 09 54  F_RUNNING) {...T
6c10: 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64  cl_ListObjAppend
6c20: 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20  Element(interp, 
6c30: 66 6c 61 67 73 2c 20 54 63 6c 5f 4e 65 77 53 74  flags, Tcl_NewSt
6c40: 72 69 6e 67 4f 62 6a 28 22 52 55 4e 4e 49 4e 47  ringObj("RUNNING
6c50: 22 2c 20 2d 31 29 29 3b 0a 09 7d 0a 09 69 66 20  ", -1));..}..if 
6c60: 28 28 66 6c 61 67 73 5f 62 69 74 6d 61 73 6b 20  ((flags_bitmask 
6c70: 26 20 49 46 46 5f 4e 4f 41 52 50 29 20 3d 3d 20  & IFF_NOARP) == 
6c80: 49 46 46 5f 4e 4f 41 52 50 29 20 7b 0a 09 09 54  IFF_NOARP) {...T
6c90: 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64  cl_ListObjAppend
6ca0: 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20  Element(interp, 
6cb0: 66 6c 61 67 73 2c 20 54 63 6c 5f 4e 65 77 53 74  flags, Tcl_NewSt
6cc0: 72 69 6e 67 4f 62 6a 28 22 4e 4f 41 52 50 22 2c  ringObj("NOARP",
6cd0: 20 2d 31 29 29 3b 0a 09 7d 0a 09 69 66 20 28 28   -1));..}..if ((
6ce0: 66 6c 61 67 73 5f 62 69 74 6d 61 73 6b 20 26 20  flags_bitmask & 
6cf0: 49 46 46 5f 50 52 4f 4d 49 53 43 29 20 3d 3d 20  IFF_PROMISC) == 
6d00: 49 46 46 5f 50 52 4f 4d 49 53 43 29 20 7b 0a 09  IFF_PROMISC) {..
6d10: 09 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65  .Tcl_ListObjAppe
6d20: 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70  ndElement(interp
6d30: 2c 20 66 6c 61 67 73 2c 20 54 63 6c 5f 4e 65 77  , flags, Tcl_New
6d40: 53 74 72 69 6e 67 4f 62 6a 28 22 50 52 4f 4d 49  StringObj("PROMI
6d50: 53 43 22 2c 20 2d 31 29 29 3b 0a 09 7d 0a 09 69  SC", -1));..}..i
6d60: 66 20 28 28 66 6c 61 67 73 5f 62 69 74 6d 61 73  f ((flags_bitmas
6d70: 6b 20 26 20 49 46 46 5f 41 4c 4c 4d 55 4c 54 49  k & IFF_ALLMULTI
6d80: 29 20 3d 3d 20 49 46 46 5f 41 4c 4c 4d 55 4c 54  ) == IFF_ALLMULT
6d90: 49 29 20 7b 0a 09 09 54 63 6c 5f 4c 69 73 74 4f  I) {...Tcl_ListO
6da0: 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28  bjAppendElement(
6db0: 69 6e 74 65 72 70 2c 20 66 6c 61 67 73 2c 20 54  interp, flags, T
6dc0: 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28  cl_NewStringObj(
6dd0: 22 41 4c 4c 4d 55 4c 54 49 22 2c 20 2d 31 29 29  "ALLMULTI", -1))
6de0: 3b 0a 09 7d 0a 09 69 66 20 28 28 66 6c 61 67 73  ;..}..if ((flags
6df0: 5f 62 69 74 6d 61 73 6b 20 26 20 49 46 46 5f 4d  _bitmask & IFF_M
6e00: 41 53 54 45 52 29 20 3d 3d 20 49 46 46 5f 4d 41  ASTER) == IFF_MA
6e10: 53 54 45 52 29 20 7b 0a 09 09 54 63 6c 5f 4c 69  STER) {...Tcl_Li
6e20: 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65  stObjAppendEleme
6e30: 6e 74 28 69 6e 74 65 72 70 2c 20 66 6c 61 67 73  nt(interp, flags
6e40: 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f  , Tcl_NewStringO
6e50: 62 6a 28 22 4d 41 53 54 45 52 22 2c 20 2d 31 29  bj("MASTER", -1)
6e60: 29 3b 0a 09 7d 0a 09 69 66 20 28 28 66 6c 61 67  );..}..if ((flag
6e70: 73 5f 62 69 74 6d 61 73 6b 20 26 20 49 46 46 5f  s_bitmask & IFF_
6e80: 53 4c 41 56 45 29 20 3d 3d 20 49 46 46 5f 53 4c  SLAVE) == IFF_SL
6e90: 41 56 45 29 20 7b 0a 09 09 54 63 6c 5f 4c 69 73  AVE) {...Tcl_Lis
6ea0: 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e  tObjAppendElemen
6eb0: 74 28 69 6e 74 65 72 70 2c 20 66 6c 61 67 73 2c  t(interp, flags,
6ec0: 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62   Tcl_NewStringOb
6ed0: 6a 28 22 53 4c 41 56 45 22 2c 20 2d 31 29 29 3b  j("SLAVE", -1));
6ee0: 0a 09 7d 0a 09 69 66 20 28 28 66 6c 61 67 73 5f  ..}..if ((flags_
6ef0: 62 69 74 6d 61 73 6b 20 26 20 49 46 46 5f 4d 55  bitmask & IFF_MU
6f00: 4c 54 49 43 41 53 54 29 20 3d 3d 20 49 46 46 5f  LTICAST) == IFF_
6f10: 4d 55 4c 54 49 43 41 53 54 29 20 7b 0a 09 09 54  MULTICAST) {...T
6f20: 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64  cl_ListObjAppend
6f30: 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20  Element(interp, 
6f40: 66 6c 61 67 73 2c 20 54 63 6c 5f 4e 65 77 53 74  flags, Tcl_NewSt
6f50: 72 69 6e 67 4f 62 6a 28 22 4d 55 4c 54 49 43 41  ringObj("MULTICA
6f60: 53 54 22 2c 20 2d 31 29 29 3b 0a 09 7d 0a 09 69  ST", -1));..}..i
6f70: 66 20 28 28 66 6c 61 67 73 5f 62 69 74 6d 61 73  f ((flags_bitmas
6f80: 6b 20 26 20 49 46 46 5f 50 4f 52 54 53 45 4c 29  k & IFF_PORTSEL)
6f90: 20 3d 3d 20 49 46 46 5f 50 4f 52 54 53 45 4c 29   == IFF_PORTSEL)
6fa0: 20 7b 0a 09 09 54 63 6c 5f 4c 69 73 74 4f 62 6a   {...Tcl_ListObj
6fb0: 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e  AppendElement(in
6fc0: 74 65 72 70 2c 20 66 6c 61 67 73 2c 20 54 63 6c  terp, flags, Tcl
6fd0: 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 50  _NewStringObj("P
6fe0: 4f 52 54 53 45 4c 22 2c 20 2d 31 29 29 3b 0a 09  ORTSEL", -1));..
6ff0: 7d 0a 09 69 66 20 28 28 66 6c 61 67 73 5f 62 69  }..if ((flags_bi
7000: 74 6d 61 73 6b 20 26 20 49 46 46 5f 41 55 54 4f  tmask & IFF_AUTO
7010: 4d 45 44 49 41 29 20 3d 3d 20 49 46 46 5f 41 55  MEDIA) == IFF_AU
7020: 54 4f 4d 45 44 49 41 29 20 7b 0a 09 09 54 63 6c  TOMEDIA) {...Tcl
7030: 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c  _ListObjAppendEl
7040: 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 66 6c  ement(interp, fl
7050: 61 67 73 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69  ags, Tcl_NewStri
7060: 6e 67 4f 62 6a 28 22 41 55 54 4f 4d 45 44 49 41  ngObj("AUTOMEDIA
7070: 22 2c 20 2d 31 29 29 3b 0a 09 7d 0a 09 69 66 20  ", -1));..}..if 
7080: 28 28 66 6c 61 67 73 5f 62 69 74 6d 61 73 6b 20  ((flags_bitmask 
7090: 26 20 49 46 46 5f 44 59 4e 41 4d 49 43 29 20 3d  & IFF_DYNAMIC) =
70a0: 3d 20 49 46 46 5f 44 59 4e 41 4d 49 43 29 20 7b  = IFF_DYNAMIC) {
70b0: 0a 09 09 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70  ...Tcl_ListObjAp
70c0: 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65  pendElement(inte
70d0: 72 70 2c 20 66 6c 61 67 73 2c 20 54 63 6c 5f 4e  rp, flags, Tcl_N
70e0: 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 44 59 4e  ewStringObj("DYN
70f0: 41 4d 49 43 22 2c 20 2d 31 29 29 3b 0a 09 7d 0a  AMIC", -1));..}.
7100: 09 69 66 20 28 28 66 6c 61 67 73 5f 62 69 74 6d  .if ((flags_bitm
7110: 61 73 6b 20 26 20 49 46 46 5f 4c 4f 57 45 52 5f  ask & IFF_LOWER_
7120: 55 50 29 20 3d 3d 20 49 46 46 5f 4c 4f 57 45 52  UP) == IFF_LOWER
7130: 5f 55 50 29 20 7b 0a 09 09 54 63 6c 5f 4c 69 73  _UP) {...Tcl_Lis
7140: 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e  tObjAppendElemen
7150: 74 28 69 6e 74 65 72 70 2c 20 66 6c 61 67 73 2c  t(interp, flags,
7160: 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62   Tcl_NewStringOb
7170: 6a 28 22 4c 4f 57 45 52 5f 55 50 22 2c 20 2d 31  j("LOWER_UP", -1
7180: 29 29 3b 0a 09 7d 0a 09 69 66 20 28 28 66 6c 61  ));..}..if ((fla
7190: 67 73 5f 62 69 74 6d 61 73 6b 20 26 20 49 46 46  gs_bitmask & IFF
71a0: 5f 44 4f 52 4d 41 4e 54 29 20 3d 3d 20 49 46 46  _DORMANT) == IFF
71b0: 5f 44 4f 52 4d 41 4e 54 29 20 7b 0a 09 09 54 63  _DORMANT) {...Tc
71c0: 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45  l_ListObjAppendE
71d0: 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 66  lement(interp, f
71e0: 6c 61 67 73 2c 20 54 63 6c 5f 4e 65 77 53 74 72  lags, Tcl_NewStr
71f0: 69 6e 67 4f 62 6a 28 22 44 4f 52 4d 41 4e 54 22  ingObj("DORMANT"
7200: 2c 20 2d 31 29 29 3b 0a 09 7d 0a 23 69 66 64 65  , -1));..}.#ifde
7210: 66 20 49 46 46 5f 45 43 48 4f 0a 09 69 66 20 28  f IFF_ECHO..if (
7220: 28 66 6c 61 67 73 5f 62 69 74 6d 61 73 6b 20 26  (flags_bitmask &
7230: 20 49 46 46 5f 45 43 48 4f 29 20 3d 3d 20 49 46   IFF_ECHO) == IF
7240: 46 5f 45 43 48 4f 29 20 7b 0a 09 09 54 63 6c 5f  F_ECHO) {...Tcl_
7250: 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65  ListObjAppendEle
7260: 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 66 6c 61  ment(interp, fla
7270: 67 73 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e  gs, Tcl_NewStrin
7280: 67 4f 62 6a 28 22 45 43 48 4f 22 2c 20 2d 31 29  gObj("ECHO", -1)
7290: 29 3b 0a 09 7d 0a 23 65 6e 64 69 66 0a 0a 09 2f  );..}.#endif.../
72a0: 2a 20 41 64 64 20 61 72 72 61 79 2d 63 6f 6d 70  * Add array-comp
72b0: 6c 69 61 6e 74 2f 64 69 63 74 20 65 6e 74 72 79  liant/dict entry
72c0: 20 74 6f 20 74 68 65 20 72 65 74 75 72 6e 20 6c   to the return l
72d0: 69 73 74 20 2a 2f 0a 09 54 63 6c 5f 4c 69 73 74  ist */..Tcl_List
72e0: 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74  ObjAppendElement
72f0: 28 69 6e 74 65 72 70 2c 20 72 65 74 6c 69 73 74  (interp, retlist
7300: 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f  , Tcl_NewStringO
7310: 62 6a 28 22 66 6c 61 67 73 22 2c 20 2d 31 29 29  bj("flags", -1))
7320: 3b 0a 09 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70  ;..Tcl_ListObjAp
7330: 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65  pendElement(inte
7340: 72 70 2c 20 72 65 74 6c 69 73 74 2c 20 66 6c 61  rp, retlist, fla
7350: 67 73 29 3b 0a 0a 09 2f 2a 20 46 65 74 63 68 20  gs);.../* Fetch 
7360: 6f 74 68 65 72 20 61 74 74 72 69 62 75 74 65 73  other attributes
7370: 20 66 72 6f 6d 20 74 68 65 20 69 6e 74 65 72 66   from the interf
7380: 61 63 65 20 2a 2f 0a 09 69 6f 63 74 6c 5f 72 65  ace */..ioctl_re
7390: 74 20 3d 20 69 6f 63 74 6c 28 73 6f 63 6b 2c 20  t = ioctl(sock, 
73a0: 53 49 4f 43 47 49 46 48 57 41 44 44 52 2c 20 26  SIOCGIFHWADDR, &
73b0: 69 66 61 63 65 5f 72 65 71 29 3b 0a 09 69 66 20  iface_req);..if 
73c0: 28 69 6f 63 74 6c 5f 72 65 74 20 3d 3d 20 30 29  (ioctl_ret == 0)
73d0: 20 7b 0a 09 09 6c 69 6e 6b 5f 65 6e 63 61 70 20   {...link_encap 
73e0: 3d 20 22 75 6e 6b 6e 6f 77 6e 22 3b 0a 0a 09 09  = "unknown";....
73f0: 61 64 64 72 5f 64 61 74 61 20 3d 20 28 75 6e 73  addr_data = (uns
7400: 69 67 6e 65 64 20 63 68 61 72 20 2a 29 20 69 66  igned char *) if
7410: 61 63 65 5f 72 65 71 2e 69 66 72 5f 68 77 61 64  ace_req.ifr_hwad
7420: 64 72 2e 73 61 5f 64 61 74 61 3b 0a 09 09 73 77  dr.sa_data;...sw
7430: 69 74 63 68 20 28 69 66 61 63 65 5f 72 65 71 2e  itch (iface_req.
7440: 69 66 72 5f 68 77 61 64 64 72 2e 73 61 5f 66 61  ifr_hwaddr.sa_fa
7450: 6d 69 6c 79 29 20 7b 0a 09 09 09 63 61 73 65 20  mily) {....case 
7460: 41 52 50 48 52 44 5f 45 54 48 45 52 3a 0a 09 09  ARPHRD_ETHER:...
7470: 09 09 6c 69 6e 6b 5f 65 6e 63 61 70 20 3d 20 22  ..link_encap = "
7480: 65 74 68 65 72 6e 65 74 22 3b 0a 0a 09 09 09 09  ethernet";......
7490: 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e  Tcl_ListObjAppen
74a0: 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c  dElement(interp,
74b0: 20 72 65 74 6c 69 73 74 2c 20 54 63 6c 5f 4e 65   retlist, Tcl_Ne
74c0: 77 53 74 72 69 6e 67 4f 62 6a 28 22 68 77 61 64  wStringObj("hwad
74d0: 64 72 22 2c 20 2d 31 29 29 3b 0a 09 09 09 09 54  dr", -1));.....T
74e0: 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64  cl_ListObjAppend
74f0: 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20  Element(interp, 
7500: 72 65 74 6c 69 73 74 2c 0a 09 09 09 09 20 20 54  retlist,.....  T
7510: 63 6c 5f 4f 62 6a 50 72 69 6e 74 66 28 22 25 30  cl_ObjPrintf("%0
7520: 32 78 3a 25 30 32 78 3a 25 30 32 78 3a 25 30 32  2x:%02x:%02x:%02
7530: 78 3a 25 30 32 78 3a 25 30 32 78 22 2c 0a 09 09  x:%02x:%02x",...
7540: 09 09 20 20 20 20 61 64 64 72 5f 64 61 74 61 5b  ..    addr_data[
7550: 30 5d 2c 0a 09 09 09 09 20 20 20 20 61 64 64 72  0],.....    addr
7560: 5f 64 61 74 61 5b 31 5d 2c 0a 09 09 09 09 20 20  _data[1],.....  
7570: 20 20 61 64 64 72 5f 64 61 74 61 5b 32 5d 2c 0a    addr_data[2],.
7580: 09 09 09 09 20 20 20 20 61 64 64 72 5f 64 61 74  ....    addr_dat
7590: 61 5b 33 5d 2c 0a 09 09 09 09 20 20 20 20 61 64  a[3],.....    ad
75a0: 64 72 5f 64 61 74 61 5b 34 5d 2c 0a 09 09 09 09  dr_data[4],.....
75b0: 20 20 20 20 61 64 64 72 5f 64 61 74 61 5b 35 5d      addr_data[5]
75c0: 0a 09 09 09 09 20 20 29 0a 09 09 09 09 29 3b 0a  .....  ).....);.
75d0: 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63  .....break;....c
75e0: 61 73 65 20 41 52 50 48 52 44 5f 41 58 32 35 3a  ase ARPHRD_AX25:
75f0: 0a 09 09 09 09 6c 69 6e 6b 5f 65 6e 63 61 70 20  .....link_encap 
7600: 3d 20 22 61 78 32 35 22 3b 0a 09 09 09 09 62 72  = "ax25";.....br
7610: 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 41 52 50  eak;....case ARP
7620: 48 52 44 5f 50 52 4f 4e 45 54 3a 0a 09 09 09 09  HRD_PRONET:.....
7630: 6c 69 6e 6b 5f 65 6e 63 61 70 20 3d 20 22 70 72  link_encap = "pr
7640: 6f 6e 65 74 22 3b 0a 09 09 09 09 62 72 65 61 6b  onet";.....break
7650: 3b 0a 09 09 09 63 61 73 65 20 41 52 50 48 52 44  ;....case ARPHRD
7660: 5f 43 48 41 4f 53 3a 0a 09 09 09 09 6c 69 6e 6b  _CHAOS:.....link
7670: 5f 65 6e 63 61 70 20 3d 20 22 63 68 61 6f 73 22  _encap = "chaos"
7680: 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09  ;.....break;....
7690: 63 61 73 65 20 41 52 50 48 52 44 5f 49 45 45 45  case ARPHRD_IEEE
76a0: 38 30 32 3a 0a 09 09 09 09 6c 69 6e 6b 5f 65 6e  802:.....link_en
76b0: 63 61 70 20 3d 20 22 69 65 65 65 38 30 32 22 3b  cap = "ieee802";
76c0: 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63  .....break;....c
76d0: 61 73 65 20 41 52 50 48 52 44 5f 41 52 43 4e 45  ase ARPHRD_ARCNE
76e0: 54 3a 0a 09 09 09 09 6c 69 6e 6b 5f 65 6e 63 61  T:.....link_enca
76f0: 70 20 3d 20 22 61 72 63 6e 65 74 22 3b 0a 09 09  p = "arcnet";...
7700: 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65  ..break;....case
7710: 20 41 52 50 48 52 44 5f 41 50 50 4c 45 54 4c 4b   ARPHRD_APPLETLK
7720: 3a 0a 09 09 09 09 6c 69 6e 6b 5f 65 6e 63 61 70  :.....link_encap
7730: 20 3d 20 22 61 70 70 6c 65 74 6c 6b 22 3b 0a 09   = "appletlk";..
7740: 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73  ...break;....cas
7750: 65 20 41 52 50 48 52 44 5f 44 4c 43 49 3a 0a 09  e ARPHRD_DLCI:..
7760: 09 09 09 6c 69 6e 6b 5f 65 6e 63 61 70 20 3d 20  ...link_encap = 
7770: 22 64 6c 63 69 22 3b 0a 09 09 09 09 62 72 65 61  "dlci";.....brea
7780: 6b 3b 0a 09 09 09 63 61 73 65 20 41 52 50 48 52  k;....case ARPHR
7790: 44 5f 41 54 4d 3a 0a 09 09 09 09 6c 69 6e 6b 5f  D_ATM:.....link_
77a0: 65 6e 63 61 70 20 3d 20 22 61 74 6d 22 3b 0a 09  encap = "atm";..
77b0: 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73  ...break;....cas
77c0: 65 20 41 52 50 48 52 44 5f 4d 45 54 52 49 43 4f  e ARPHRD_METRICO
77d0: 4d 3a 0a 09 09 09 09 6c 69 6e 6b 5f 65 6e 63 61  M:.....link_enca
77e0: 70 20 3d 20 22 6d 65 74 72 69 63 6f 6d 22 3b 0a  p = "metricom";.
77f0: 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61  ....break;....ca
7800: 73 65 20 41 52 50 48 52 44 5f 49 45 45 45 31 33  se ARPHRD_IEEE13
7810: 39 34 3a 0a 09 09 09 09 6c 69 6e 6b 5f 65 6e 63  94:.....link_enc
7820: 61 70 20 3d 20 22 69 65 65 65 31 33 39 34 22 3b  ap = "ieee1394";
7830: 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63  .....break;....c
7840: 61 73 65 20 41 52 50 48 52 44 5f 45 55 49 36 34  ase ARPHRD_EUI64
7850: 3a 0a 09 09 09 09 6c 69 6e 6b 5f 65 6e 63 61 70  :.....link_encap
7860: 20 3d 20 22 65 75 69 36 34 22 3b 0a 09 09 09 09   = "eui64";.....
7870: 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 41  break;....case A
7880: 52 50 48 52 44 5f 49 4e 46 49 4e 49 42 41 4e 44  RPHRD_INFINIBAND
7890: 3a 0a 09 09 09 09 6c 69 6e 6b 5f 65 6e 63 61 70  :.....link_encap
78a0: 20 3d 20 22 69 6e 66 69 6e 69 62 61 6e 64 22 3b   = "infiniband";
78b0: 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63  .....break;....c
78c0: 61 73 65 20 41 52 50 48 52 44 5f 53 4c 49 50 3a  ase ARPHRD_SLIP:
78d0: 0a 09 09 09 09 6c 69 6e 6b 5f 65 6e 63 61 70 20  .....link_encap 
78e0: 3d 20 22 73 6c 69 70 22 3b 0a 09 09 09 09 62 72  = "slip";.....br
78f0: 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 41 52 50  eak;....case ARP
7900: 48 52 44 5f 43 53 4c 49 50 3a 0a 09 09 09 09 6c  HRD_CSLIP:.....l
7910: 69 6e 6b 5f 65 6e 63 61 70 20 3d 20 22 63 73 6c  ink_encap = "csl
7920: 69 70 22 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a  ip";.....break;.
7930: 09 09 09 63 61 73 65 20 41 52 50 48 52 44 5f 53  ...case ARPHRD_S
7940: 4c 49 50 36 3a 0a 09 09 09 09 6c 69 6e 6b 5f 65  LIP6:.....link_e
7950: 6e 63 61 70 20 3d 20 22 73 6c 69 70 36 22 3b 0a  ncap = "slip6";.
7960: 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61  ....break;....ca
7970: 73 65 20 41 52 50 48 52 44 5f 43 53 4c 49 50 36  se ARPHRD_CSLIP6
7980: 3a 0a 09 09 09 09 6c 69 6e 6b 5f 65 6e 63 61 70  :.....link_encap
7990: 20 3d 20 22 63 73 6c 69 70 36 22 3b 0a 09 09 09   = "cslip6";....
79a0: 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20  .break;....case 
79b0: 41 52 50 48 52 44 5f 52 53 52 56 44 3a 0a 09 09  ARPHRD_RSRVD:...
79c0: 09 09 6c 69 6e 6b 5f 65 6e 63 61 70 20 3d 20 22  ..link_encap = "
79d0: 72 73 72 76 64 22 3b 0a 09 09 09 09 62 72 65 61  rsrvd";.....brea
79e0: 6b 3b 0a 09 09 09 63 61 73 65 20 41 52 50 48 52  k;....case ARPHR
79f0: 44 5f 41 44 41 50 54 3a 0a 09 09 09 09 6c 69 6e  D_ADAPT:.....lin
7a00: 6b 5f 65 6e 63 61 70 20 3d 20 22 61 64 61 70 74  k_encap = "adapt
7a10: 22 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09  ";.....break;...
7a20: 09 63 61 73 65 20 41 52 50 48 52 44 5f 52 4f 53  .case ARPHRD_ROS
7a30: 45 3a 0a 09 09 09 09 6c 69 6e 6b 5f 65 6e 63 61  E:.....link_enca
7a40: 70 20 3d 20 22 72 6f 73 65 22 3b 0a 09 09 09 09  p = "rose";.....
7a50: 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 41  break;....case A
7a60: 52 50 48 52 44 5f 58 32 35 3a 0a 09 09 09 09 6c  RPHRD_X25:.....l
7a70: 69 6e 6b 5f 65 6e 63 61 70 20 3d 20 22 78 32 35  ink_encap = "x25
7a80: 22 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09  ";.....break;...
7a90: 09 63 61 73 65 20 41 52 50 48 52 44 5f 48 57 58  .case ARPHRD_HWX
7aa0: 32 35 3a 0a 09 09 09 09 6c 69 6e 6b 5f 65 6e 63  25:.....link_enc
7ab0: 61 70 20 3d 20 22 68 77 78 32 35 22 3b 0a 09 09  ap = "hwx25";...
7ac0: 09 09 62 72 65 61 6b 3b 0a 23 69 66 64 65 66 20  ..break;.#ifdef 
7ad0: 41 52 50 48 52 44 5f 43 41 4e 0a 09 09 09 63 61  ARPHRD_CAN....ca
7ae0: 73 65 20 41 52 50 48 52 44 5f 43 41 4e 3a 0a 09  se ARPHRD_CAN:..
7af0: 09 09 09 6c 69 6e 6b 5f 65 6e 63 61 70 20 3d 20  ...link_encap = 
7b00: 22 63 61 6e 22 3b 0a 09 09 09 09 62 72 65 61 6b  "can";.....break
7b10: 3b 0a 23 65 6e 64 69 66 0a 09 09 09 63 61 73 65  ;.#endif....case
7b20: 20 41 52 50 48 52 44 5f 50 50 50 3a 0a 09 09 09   ARPHRD_PPP:....
7b30: 09 6c 69 6e 6b 5f 65 6e 63 61 70 20 3d 20 22 70  .link_encap = "p
7b40: 70 70 22 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a  pp";.....break;.
7b50: 09 09 09 63 61 73 65 20 41 52 50 48 52 44 5f 43  ...case ARPHRD_C
7b60: 49 53 43 4f 3a 0a 09 09 09 09 6c 69 6e 6b 5f 65  ISCO:.....link_e
7b70: 6e 63 61 70 20 3d 20 22 63 69 73 63 6f 22 3b 0a  ncap = "cisco";.
7b80: 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61  ....break;....ca
7b90: 73 65 20 41 52 50 48 52 44 5f 4c 41 50 42 3a 0a  se ARPHRD_LAPB:.
7ba0: 09 09 09 09 6c 69 6e 6b 5f 65 6e 63 61 70 20 3d  ....link_encap =
7bb0: 20 22 6c 61 70 62 22 3b 0a 09 09 09 09 62 72 65   "lapb";.....bre
7bc0: 61 6b 3b 0a 09 09 09 63 61 73 65 20 41 52 50 48  ak;....case ARPH
7bd0: 52 44 5f 44 44 43 4d 50 3a 0a 09 09 09 09 6c 69  RD_DDCMP:.....li
7be0: 6e 6b 5f 65 6e 63 61 70 20 3d 20 22 64 64 63 6d  nk_encap = "ddcm
7bf0: 70 22 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09  p";.....break;..
7c00: 09 09 63 61 73 65 20 41 52 50 48 52 44 5f 52 41  ..case ARPHRD_RA
7c10: 57 48 44 4c 43 3a 0a 09 09 09 09 6c 69 6e 6b 5f  WHDLC:.....link_
7c20: 65 6e 63 61 70 20 3d 20 22 72 61 77 68 64 6c 63  encap = "rawhdlc
7c30: 22 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09  ";.....break;...
7c40: 09 63 61 73 65 20 41 52 50 48 52 44 5f 54 55 4e  .case ARPHRD_TUN
7c50: 4e 45 4c 3a 0a 09 09 09 09 6c 69 6e 6b 5f 65 6e  NEL:.....link_en
7c60: 63 61 70 20 3d 20 22 74 75 6e 6e 65 6c 22 3b 0a  cap = "tunnel";.
7c70: 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61  ....break;....ca
7c80: 73 65 20 41 52 50 48 52 44 5f 54 55 4e 4e 45 4c  se ARPHRD_TUNNEL
7c90: 36 3a 0a 09 09 09 09 6c 69 6e 6b 5f 65 6e 63 61  6:.....link_enca
7ca0: 70 20 3d 20 22 74 75 6e 6e 65 6c 36 22 3b 0a 09  p = "tunnel6";..
7cb0: 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73  ...break;....cas
7cc0: 65 20 41 52 50 48 52 44 5f 46 52 41 44 3a 0a 09  e ARPHRD_FRAD:..
7cd0: 09 09 09 6c 69 6e 6b 5f 65 6e 63 61 70 20 3d 20  ...link_encap = 
7ce0: 22 66 72 61 64 22 3b 0a 09 09 09 09 62 72 65 61  "frad";.....brea
7cf0: 6b 3b 0a 09 09 09 63 61 73 65 20 41 52 50 48 52  k;....case ARPHR
7d00: 44 5f 53 4b 49 50 3a 0a 09 09 09 09 6c 69 6e 6b  D_SKIP:.....link
7d10: 5f 65 6e 63 61 70 20 3d 20 22 73 6b 69 70 22 3b  _encap = "skip";
7d20: 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63  .....break;....c
7d30: 61 73 65 20 41 52 50 48 52 44 5f 4c 4f 4f 50 42  ase ARPHRD_LOOPB
7d40: 41 43 4b 3a 0a 09 09 09 09 6c 69 6e 6b 5f 65 6e  ACK:.....link_en
7d50: 63 61 70 20 3d 20 22 6c 6f 6f 70 62 61 63 6b 22  cap = "loopback"
7d60: 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09  ;.....break;....
7d70: 63 61 73 65 20 41 52 50 48 52 44 5f 4c 4f 43 41  case ARPHRD_LOCA
7d80: 4c 54 4c 4b 3a 0a 09 09 09 09 6c 69 6e 6b 5f 65  LTLK:.....link_e
7d90: 6e 63 61 70 20 3d 20 22 6c 6f 63 61 6c 74 61 6c  ncap = "localtal
7da0: 6b 22 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09  k";.....break;..
7db0: 09 09 63 61 73 65 20 41 52 50 48 52 44 5f 46 44  ..case ARPHRD_FD
7dc0: 44 49 3a 0a 09 09 09 09 6c 69 6e 6b 5f 65 6e 63  DI:.....link_enc
7dd0: 61 70 20 3d 20 22 66 64 64 69 22 3b 0a 09 09 09  ap = "fddi";....
7de0: 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20  .break;....case 
7df0: 41 52 50 48 52 44 5f 42 49 46 3a 0a 09 09 09 09  ARPHRD_BIF:.....
7e00: 6c 69 6e 6b 5f 65 6e 63 61 70 20 3d 20 22 62 69  link_encap = "bi
7e10: 66 22 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09  f";.....break;..
7e20: 09 09 63 61 73 65 20 41 52 50 48 52 44 5f 53 49  ..case ARPHRD_SI
7e30: 54 3a 0a 09 09 09 09 6c 69 6e 6b 5f 65 6e 63 61  T:.....link_enca
7e40: 70 20 3d 20 22 73 69 74 22 3b 0a 09 09 09 09 62  p = "sit";.....b
7e50: 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 41 52  reak;....case AR
7e60: 50 48 52 44 5f 49 50 44 44 50 3a 0a 09 09 09 09  PHRD_IPDDP:.....
7e70: 6c 69 6e 6b 5f 65 6e 63 61 70 20 3d 20 22 69 70  link_encap = "ip
7e80: 64 64 70 22 3b 0a 09 09 09 09 62 72 65 61 6b 3b  ddp";.....break;
7e90: 0a 09 09 09 63 61 73 65 20 41 52 50 48 52 44 5f  ....case ARPHRD_
7ea0: 49 50 47 52 45 3a 0a 09 09 09 09 6c 69 6e 6b 5f  IPGRE:.....link_
7eb0: 65 6e 63 61 70 20 3d 20 22 67 72 65 22 3b 0a 09  encap = "gre";..
7ec0: 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73  ...break;....cas
7ed0: 65 20 41 52 50 48 52 44 5f 50 49 4d 52 45 47 3a  e ARPHRD_PIMREG:
7ee0: 0a 09 09 09 09 6c 69 6e 6b 5f 65 6e 63 61 70 20  .....link_encap 
7ef0: 3d 20 22 70 69 6d 72 65 67 22 3b 0a 09 09 09 09  = "pimreg";.....
7f00: 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 41  break;....case A
7f10: 52 50 48 52 44 5f 48 49 50 50 49 3a 0a 09 09 09  RPHRD_HIPPI:....
7f20: 09 6c 69 6e 6b 5f 65 6e 63 61 70 20 3d 20 22 68  .link_encap = "h
7f30: 69 70 70 69 22 3b 0a 09 09 09 09 62 72 65 61 6b  ippi";.....break
7f40: 3b 0a 09 09 09 63 61 73 65 20 41 52 50 48 52 44  ;....case ARPHRD
7f50: 5f 41 53 48 3a 0a 09 09 09 09 6c 69 6e 6b 5f 65  _ASH:.....link_e
7f60: 6e 63 61 70 20 3d 20 22 61 73 68 22 3b 0a 09 09  ncap = "ash";...
7f70: 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65  ..break;....case
7f80: 20 41 52 50 48 52 44 5f 45 43 4f 4e 45 54 3a 0a   ARPHRD_ECONET:.
7f90: 09 09 09 09 6c 69 6e 6b 5f 65 6e 63 61 70 20 3d  ....link_encap =
7fa0: 20 22 65 63 6f 6e 65 74 22 3b 0a 09 09 09 09 62   "econet";.....b
7fb0: 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 41 52  reak;....case AR
7fc0: 50 48 52 44 5f 49 52 44 41 3a 0a 09 09 09 09 6c  PHRD_IRDA:.....l
7fd0: 69 6e 6b 5f 65 6e 63 61 70 20 3d 20 22 69 72 64  ink_encap = "ird
7fe0: 61 22 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09  a";.....break;..
7ff0: 09 7d 0a 0a 09 09 54 63 6c 5f 4c 69 73 74 4f 62  .}....Tcl_ListOb
8000: 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69  jAppendElement(i
8010: 6e 74 65 72 70 2c 20 72 65 74 6c 69 73 74 2c 20  nterp, retlist, 
8020: 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a  Tcl_NewStringObj
8030: 28 22 6c 69 6e 6b 5f 65 6e 63 61 70 22 2c 20 2d  ("link_encap", -
8040: 31 29 29 3b 0a 09 09 54 63 6c 5f 4c 69 73 74 4f  1));...Tcl_ListO
8050: 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28  bjAppendElement(
8060: 69 6e 74 65 72 70 2c 20 72 65 74 6c 69 73 74 2c  interp, retlist,
8070: 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62   Tcl_NewStringOb
8080: 6a 28 6c 69 6e 6b 5f 65 6e 63 61 70 2c 20 2d 31  j(link_encap, -1
8090: 29 29 3b 0a 09 7d 0a 0a 09 69 6f 63 74 6c 5f 72  ));..}...ioctl_r
80a0: 65 74 20 3d 20 69 6f 63 74 6c 28 73 6f 63 6b 2c  et = ioctl(sock,
80b0: 20 53 49 4f 43 47 49 46 4d 45 54 52 49 43 2c 20   SIOCGIFMETRIC, 
80c0: 26 69 66 61 63 65 5f 72 65 71 29 3b 0a 09 69 66  &iface_req);..if
80d0: 20 28 69 6f 63 74 6c 5f 72 65 74 20 3d 3d 20 30   (ioctl_ret == 0
80e0: 29 20 7b 0a 09 09 54 63 6c 5f 4c 69 73 74 4f 62  ) {...Tcl_ListOb
80f0: 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69  jAppendElement(i
8100: 6e 74 65 72 70 2c 20 72 65 74 6c 69 73 74 2c 20  nterp, retlist, 
8110: 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a  Tcl_NewStringObj
8120: 28 22 6d 65 74 72 69 63 22 2c 20 2d 31 29 29 3b  ("metric", -1));
8130: 0a 09 09 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70  ...Tcl_ListObjAp
8140: 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65  pendElement(inte
8150: 72 70 2c 20 72 65 74 6c 69 73 74 2c 20 54 63 6c  rp, retlist, Tcl
8160: 5f 4e 65 77 57 69 64 65 49 6e 74 4f 62 6a 28 69  _NewWideIntObj(i
8170: 66 61 63 65 5f 72 65 71 2e 69 66 72 5f 6d 65 74  face_req.ifr_met
8180: 72 69 63 20 2b 20 31 29 29 3b 0a 09 7d 0a 0a 09  ric + 1));..}...
8190: 69 6f 63 74 6c 5f 72 65 74 20 3d 20 69 6f 63 74  ioctl_ret = ioct
81a0: 6c 28 73 6f 63 6b 2c 20 53 49 4f 43 47 49 46 4d  l(sock, SIOCGIFM
81b0: 54 55 2c 20 26 69 66 61 63 65 5f 72 65 71 29 3b  TU, &iface_req);
81c0: 0a 09 69 66 20 28 69 6f 63 74 6c 5f 72 65 74 20  ..if (ioctl_ret 
81d0: 3d 3d 20 30 29 20 7b 0a 09 09 54 63 6c 5f 4c 69  == 0) {...Tcl_Li
81e0: 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65  stObjAppendEleme
81f0: 6e 74 28 69 6e 74 65 72 70 2c 20 72 65 74 6c 69  nt(interp, retli
8200: 73 74 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e  st, Tcl_NewStrin
8210: 67 4f 62 6a 28 22 6d 74 75 22 2c 20 2d 31 29 29  gObj("mtu", -1))
8220: 3b 0a 09 09 54 63 6c 5f 4c 69 73 74 4f 62 6a 41  ;...Tcl_ListObjA
8230: 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74  ppendElement(int
8240: 65 72 70 2c 20 72 65 74 6c 69 73 74 2c 20 54 63  erp, retlist, Tc
8250: 6c 5f 4e 65 77 57 69 64 65 49 6e 74 4f 62 6a 28  l_NewWideIntObj(
8260: 69 66 61 63 65 5f 72 65 71 2e 69 66 72 5f 6d 74  iface_req.ifr_mt
8270: 75 29 29 3b 0a 09 7d 0a 0a 09 69 6f 63 74 6c 5f  u));..}...ioctl_
8280: 72 65 74 20 3d 20 69 6f 63 74 6c 28 73 6f 63 6b  ret = ioctl(sock
8290: 2c 20 53 49 4f 43 47 49 46 49 4e 44 45 58 2c 20  , SIOCGIFINDEX, 
82a0: 26 69 66 61 63 65 5f 72 65 71 29 3b 0a 09 69 66  &iface_req);..if
82b0: 20 28 69 6f 63 74 6c 5f 72 65 74 20 3d 3d 20 30   (ioctl_ret == 0
82c0: 29 20 7b 0a 09 09 54 63 6c 5f 4c 69 73 74 4f 62  ) {...Tcl_ListOb
82d0: 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69  jAppendElement(i
82e0: 6e 74 65 72 70 2c 20 72 65 74 6c 69 73 74 2c 20  nterp, retlist, 
82f0: 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a  Tcl_NewStringObj
8300: 28 22 69 6e 64 65 78 22 2c 20 2d 31 29 29 3b 0a  ("index", -1));.
8310: 09 09 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70  ..Tcl_ListObjApp
8320: 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72  endElement(inter
8330: 70 2c 20 72 65 74 6c 69 73 74 2c 20 54 63 6c 5f  p, retlist, Tcl_
8340: 4e 65 77 57 69 64 65 49 6e 74 4f 62 6a 28 69 66  NewWideIntObj(if
8350: 61 63 65 5f 72 65 71 2e 69 66 72 5f 69 66 69 6e  ace_req.ifr_ifin
8360: 64 65 78 29 29 3b 0a 09 7d 0a 0a 09 69 66 20 28  dex));..}...if (
8370: 73 6f 63 6b 5f 76 34 20 21 3d 20 2d 31 29 20 7b  sock_v4 != -1) {
8380: 0a 09 09 69 6f 63 74 6c 5f 72 65 74 20 3d 20 69  ...ioctl_ret = i
8390: 6f 63 74 6c 28 73 6f 63 6b 5f 76 34 2c 20 53 49  octl(sock_v4, SI
83a0: 4f 43 47 49 46 41 44 44 52 2c 20 26 69 66 61 63  OCGIFADDR, &ifac
83b0: 65 5f 72 65 71 29 3b 0a 09 09 69 66 20 28 69 6f  e_req);...if (io
83c0: 63 74 6c 5f 72 65 74 20 3d 3d 20 30 29 20 7b 0a  ctl_ret == 0) {.
83d0: 09 09 09 74 75 61 70 69 5f 70 72 69 76 61 74 65  ...tuapi_private
83e0: 5f 61 70 70 65 6e 64 5f 73 6f 63 6b 61 64 64 72  _append_sockaddr
83f0: 5f 74 6f 5f 74 63 6c 6f 62 6a 28 69 6e 74 65 72  _to_tclobj(inter
8400: 70 2c 20 72 65 74 6c 69 73 74 2c 20 22 61 64 64  p, retlist, "add
8410: 72 65 73 73 22 2c 20 26 69 66 61 63 65 5f 72 65  ress", &iface_re
8420: 71 2e 69 66 72 5f 61 64 64 72 29 3b 0a 09 09 7d  q.ifr_addr);...}
8430: 0a 0a 09 09 69 66 20 28 66 6c 61 67 5f 70 6f 69  ....if (flag_poi
8440: 6e 74 6f 70 6f 69 6e 74 29 20 7b 0a 09 09 09 2f  ntopoint) {..../
8450: 2a 20 50 6f 69 6e 74 2d 74 6f 2d 50 6f 69 6e 74  * Point-to-Point
8460: 20 69 6e 74 65 72 66 61 63 65 73 20 2a 2f 0a 09   interfaces */..
8470: 09 09 69 6f 63 74 6c 5f 72 65 74 20 3d 20 69 6f  ..ioctl_ret = io
8480: 63 74 6c 28 73 6f 63 6b 5f 76 34 2c 20 53 49 4f  ctl(sock_v4, SIO
8490: 43 47 49 46 44 53 54 41 44 44 52 2c 20 26 69 66  CGIFDSTADDR, &if
84a0: 61 63 65 5f 72 65 71 29 3b 0a 09 09 09 69 66 20  ace_req);....if 
84b0: 28 69 6f 63 74 6c 5f 72 65 74 20 3d 3d 20 30 29  (ioctl_ret == 0)
84c0: 20 7b 0a 09 09 09 09 74 75 61 70 69 5f 70 72 69   {.....tuapi_pri
84d0: 76 61 74 65 5f 61 70 70 65 6e 64 5f 73 6f 63 6b  vate_append_sock
84e0: 61 64 64 72 5f 74 6f 5f 74 63 6c 6f 62 6a 28 69  addr_to_tclobj(i
84f0: 6e 74 65 72 70 2c 20 72 65 74 6c 69 73 74 2c 20  nterp, retlist, 
8500: 22 64 65 73 74 69 6e 61 74 69 6f 6e 22 2c 20 26  "destination", &
8510: 69 66 61 63 65 5f 72 65 71 2e 69 66 72 5f 61 64  iface_req.ifr_ad
8520: 64 72 29 3b 0a 09 09 09 7d 0a 09 09 7d 0a 0a 09  dr);....}...}...
8530: 09 69 66 20 28 66 6c 61 67 5f 62 72 6f 61 64 63  .if (flag_broadc
8540: 61 73 74 29 20 7b 0a 09 09 09 2f 2a 20 42 72 6f  ast) {..../* Bro
8550: 61 64 63 61 73 74 20 69 6e 74 65 72 66 61 63 65  adcast interface
8560: 73 20 2a 2f 0a 09 09 09 69 6f 63 74 6c 5f 72 65  s */....ioctl_re
8570: 74 20 3d 20 69 6f 63 74 6c 28 73 6f 63 6b 5f 76  t = ioctl(sock_v
8580: 34 2c 20 53 49 4f 43 47 49 46 42 52 44 41 44 44  4, SIOCGIFBRDADD
8590: 52 2c 20 26 69 66 61 63 65 5f 72 65 71 29 3b 0a  R, &iface_req);.
85a0: 09 09 09 69 66 20 28 69 6f 63 74 6c 5f 72 65 74  ...if (ioctl_ret
85b0: 20 3d 3d 20 30 29 20 7b 0a 09 09 09 09 74 75 61   == 0) {.....tua
85c0: 70 69 5f 70 72 69 76 61 74 65 5f 61 70 70 65 6e  pi_private_appen
85d0: 64 5f 73 6f 63 6b 61 64 64 72 5f 74 6f 5f 74 63  d_sockaddr_to_tc
85e0: 6c 6f 62 6a 28 69 6e 74 65 72 70 2c 20 72 65 74  lobj(interp, ret
85f0: 6c 69 73 74 2c 20 22 62 72 6f 61 64 63 61 73 74  list, "broadcast
8600: 22 2c 20 26 69 66 61 63 65 5f 72 65 71 2e 69 66  ", &iface_req.if
8610: 72 5f 61 64 64 72 29 3b 0a 09 09 09 7d 0a 09 09  r_addr);....}...
8620: 7d 0a 0a 09 09 69 6f 63 74 6c 5f 72 65 74 20 3d  }....ioctl_ret =
8630: 20 69 6f 63 74 6c 28 73 6f 63 6b 5f 76 34 2c 20   ioctl(sock_v4, 
8640: 53 49 4f 43 47 49 46 4e 45 54 4d 41 53 4b 2c 20  SIOCGIFNETMASK, 
8650: 26 69 66 61 63 65 5f 72 65 71 29 3b 0a 09 09 69  &iface_req);...i
8660: 66 20 28 69 6f 63 74 6c 5f 72 65 74 20 3d 3d 20  f (ioctl_ret == 
8670: 30 29 20 7b 0a 09 09 09 74 75 61 70 69 5f 70 72  0) {....tuapi_pr
8680: 69 76 61 74 65 5f 61 70 70 65 6e 64 5f 73 6f 63  ivate_append_soc
8690: 6b 61 64 64 72 5f 74 6f 5f 74 63 6c 6f 62 6a 28  kaddr_to_tclobj(
86a0: 69 6e 74 65 72 70 2c 20 72 65 74 6c 69 73 74 2c  interp, retlist,
86b0: 20 22 6e 65 74 6d 61 73 6b 22 2c 20 26 69 66 61   "netmask", &ifa
86c0: 63 65 5f 72 65 71 2e 69 66 72 5f 61 64 64 72 29  ce_req.ifr_addr)
86d0: 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 54 63 6c 5f 53  ;...}..}...Tcl_S
86e0: 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
86f0: 72 70 2c 20 72 65 74 6c 69 73 74 29 3b 0a 0a 09  rp, retlist);...
8700: 72 65 74 75 72 6e 28 54 43 4c 5f 4f 4b 29 3b 0a  return(TCL_OK);.
8710: 7d 0a 0a 73 74 61 74 69 63 20 69 6e 74 20 74 75  }..static int tu
8720: 61 70 69 5f 69 66 63 6f 6e 66 69 67 5f 63 6f 6e  api_ifconfig_con
8730: 66 28 43 6c 69 65 6e 74 44 61 74 61 20 63 64 2c  f(ClientData cd,
8740: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
8750: 65 72 70 2c 20 69 6e 74 20 6f 62 6a 63 2c 20 54  erp, int objc, T
8760: 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
8770: 6a 76 5b 5d 2c 20 69 6e 74 20 73 6f 63 6b 2c 20  jv[], int sock, 
8780: 69 6e 74 20 73 6f 63 6b 5f 76 34 2c 20 69 6e 74  int sock_v4, int
8790: 20 73 6f 63 6b 5f 76 36 29 20 7b 0a 09 54 63 6c   sock_v6) {..Tcl
87a0: 5f 4f 62 6a 20 2a 6f 70 74 69 6f 6e 5f 6e 61 6d  _Obj *option_nam
87b0: 65 5f 6f 62 6a 2c 20 2a 6f 70 74 69 6f 6e 5f 76  e_obj, *option_v
87c0: 61 6c 5f 6f 62 6a 3b 0a 09 54 63 6c 5f 4f 62 6a  al_obj;..Tcl_Obj
87d0: 20 2a 2a 66 6c 61 67 73 5f 6f 62 6a 76 3b 0a 09   **flags_objv;..
87e0: 73 74 72 75 63 74 20 69 66 72 65 71 20 69 66 61  struct ifreq ifa
87f0: 63 65 5f 72 65 71 3b 0a 09 73 74 72 75 63 74 20  ce_req;..struct 
8800: 73 6f 63 6b 61 64 64 72 20 2a 74 6d 70 5f 69 6f  sockaddr *tmp_io
8810: 63 74 6c 5f 61 64 64 72 3b 0a 09 63 6f 6e 73 74  ctl_addr;..const
8820: 20 63 68 61 72 20 2a 69 66 61 63 65 3b 0a 09 73   char *iface;..s
8830: 68 6f 72 74 20 66 6c 61 67 73 3b 0a 09 69 6e 74  hort flags;..int
8840: 20 66 6c 61 67 73 5f 6f 62 6a 63 3b 0a 09 69 6e   flags_objc;..in
8850: 74 20 74 6d 70 5f 73 6f 63 6b 2c 20 74 6d 70 5f  t tmp_sock, tmp_
8860: 69 6f 63 74 6c 3b 0a 09 69 6e 74 20 69 6f 63 74  ioctl;..int ioct
8870: 6c 5f 72 65 74 2c 20 74 63 6c 5f 72 65 74 2c 20  l_ret, tcl_ret, 
8880: 70 61 72 73 65 5f 72 65 74 3b 0a 0a 09 69 66 61  parse_ret;...ifa
8890: 63 65 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69  ce = Tcl_GetStri
88a0: 6e 67 28 6f 62 6a 76 5b 31 5d 29 3b 0a 0a 09 69  ng(objv[1]);...i
88b0: 66 20 28 28 73 74 72 6c 65 6e 28 69 66 61 63 65  f ((strlen(iface
88c0: 29 20 2b 20 31 29 20 3e 3d 20 49 46 4e 41 4d 53  ) + 1) >= IFNAMS
88d0: 49 5a 29 20 7b 0a 09 09 54 63 6c 5f 53 65 74 4f  IZ) {...Tcl_SetO
88e0: 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  bjResult(interp,
88f0: 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62   Tcl_NewStringOb
8900: 6a 28 22 69 6e 74 65 72 66 61 63 65 20 6e 61 6d  j("interface nam
8910: 65 20 74 6f 6f 20 6c 6f 6e 67 22 2c 20 2d 31 29  e too long", -1)
8920: 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 54 43 4c  );....return(TCL
8930: 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 6f 62  _ERROR);..}...ob
8940: 6a 63 20 2d 3d 20 32 3b 0a 09 6f 62 6a 76 20 2b  jc -= 2;..objv +
8950: 3d 20 32 3b 0a 0a 09 66 6f 72 20 28 3b 20 6f 62  = 2;...for (; ob
8960: 6a 63 20 3e 20 30 3b 20 6f 62 6a 63 2d 2d 2c 6f  jc > 0; objc--,o
8970: 62 6a 76 2b 2b 29 20 7b 0a 09 09 2f 2a 20 50 72  bjv++) {.../* Pr
8980: 65 70 61 72 65 20 66 6f 72 20 61 6e 20 69 6f 63  epare for an ioc
8990: 74 6c 28 29 20 2a 2f 0a 09 09 73 74 72 63 70 79  tl() */...strcpy
89a0: 28 69 66 61 63 65 5f 72 65 71 2e 69 66 72 5f 6e  (iface_req.ifr_n
89b0: 61 6d 65 2c 20 69 66 61 63 65 29 3b 0a 09 09 74  ame, iface);...t
89c0: 6d 70 5f 69 6f 63 74 6c 20 3d 20 2d 31 3b 0a 0a  mp_ioctl = -1;..
89d0: 09 09 6f 70 74 69 6f 6e 5f 6e 61 6d 65 5f 6f 62  ..option_name_ob
89e0: 6a 20 3d 20 6f 62 6a 76 5b 30 5d 3b 0a 0a 09 09  j = objv[0];....
89f0: 69 66 20 28 6f 62 6a 63 20 3d 3d 20 31 29 20 7b  if (objc == 1) {
8a00: 0a 09 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65  ....Tcl_SetObjRe
8a10: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c  sult(interp, Tcl
8a20: 5f 4f 62 6a 50 72 69 6e 74 66 28 22 6f 70 74 69  _ObjPrintf("opti
8a30: 6f 6e 20 5c 22 25 73 5c 22 20 72 65 71 75 69 72  on \"%s\" requir
8a40: 65 73 20 61 6e 20 61 72 67 75 6d 65 6e 74 22 2c  es an argument",
8a50: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
8a60: 70 74 69 6f 6e 5f 6e 61 6d 65 5f 6f 62 6a 29 29  ption_name_obj))
8a70: 29 3b 0a 0a 09 09 09 72 65 74 75 72 6e 28 54 43  );.....return(TC
8a80: 4c 5f 45 52 52 4f 52 29 3b 0a 09 09 7d 0a 0a 09  L_ERROR);...}...
8a90: 09 6f 62 6a 63 2d 2d 3b 0a 09 09 6f 62 6a 76 2b  .objc--;...objv+
8aa0: 2b 3b 0a 0a 09 09 6f 70 74 69 6f 6e 5f 76 61 6c  +;....option_val
8ab0: 5f 6f 62 6a 20 3d 20 6f 62 6a 76 5b 30 5d 3b 0a  _obj = objv[0];.
8ac0: 0a 09 09 73 77 69 74 63 68 20 28 74 75 61 70 69  ...switch (tuapi
8ad0: 5f 69 6e 74 65 72 6e 61 6c 5f 73 69 6d 70 6c 65  _internal_simple
8ae0: 68 61 73 68 5f 6f 62 6a 28 6f 70 74 69 6f 6e 5f  hash_obj(option_
8af0: 6e 61 6d 65 5f 6f 62 6a 29 29 20 7b 0a 09 09 09  name_obj)) {....
8b00: 63 61 73 65 20 30 78 36 64 39 38 37 30 66 33 3a  case 0x6d9870f3:
8b10: 20 2f 2a 20 66 6c 61 67 73 20 2a 2f 0a 09 09 09   /* flags */....
8b20: 09 66 6c 61 67 73 20 3d 20 30 3b 0a 0a 09 09 09  .flags = 0;.....
8b30: 09 74 63 6c 5f 72 65 74 20 3d 20 54 63 6c 5f 4c  .tcl_ret = Tcl_L
8b40: 69 73 74 4f 62 6a 47 65 74 45 6c 65 6d 65 6e 74  istObjGetElement
8b50: 73 28 69 6e 74 65 72 70 2c 20 6f 70 74 69 6f 6e  s(interp, option
8b60: 5f 76 61 6c 5f 6f 62 6a 2c 20 26 66 6c 61 67 73  _val_obj, &flags
8b70: 5f 6f 62 6a 63 2c 20 26 66 6c 61 67 73 5f 6f 62  _objc, &flags_ob
8b80: 6a 76 29 3b 0a 09 09 09 09 69 66 20 28 74 63 6c  jv);.....if (tcl
8b90: 5f 72 65 74 20 21 3d 20 54 43 4c 5f 4f 4b 29 20  _ret != TCL_OK) 
8ba0: 7b 0a 09 09 09 09 09 72 65 74 75 72 6e 28 74 63  {......return(tc
8bb0: 6c 5f 72 65 74 29 3b 0a 09 09 09 09 7d 0a 0a 09  l_ret);.....}...
8bc0: 09 09 09 66 6f 72 20 28 3b 20 66 6c 61 67 73 5f  ...for (; flags_
8bd0: 6f 62 6a 63 20 3e 20 30 3b 20 66 6c 61 67 73 5f  objc > 0; flags_
8be0: 6f 62 6a 63 2d 2d 2c 66 6c 61 67 73 5f 6f 62 6a  objc--,flags_obj
8bf0: 76 2b 2b 29 20 7b 0a 09 09 09 09 09 73 77 69 74  v++) {......swit
8c00: 63 68 20 28 74 75 61 70 69 5f 69 6e 74 65 72 6e  ch (tuapi_intern
8c10: 61 6c 5f 73 69 6d 70 6c 65 68 61 73 68 5f 6f 62  al_simplehash_ob
8c20: 6a 28 66 6c 61 67 73 5f 6f 62 6a 76 5b 30 5d 29  j(flags_objv[0])
8c30: 29 20 7b 0a 09 09 09 09 09 09 63 61 73 65 20 30  ) {.......case 0
8c40: 78 32 61 64 30 3a 20 2f 2a 20 55 50 20 2a 2f 0a  x2ad0: /* UP */.
8c50: 09 09 09 09 09 09 09 66 6c 61 67 73 20 7c 3d 20  .......flags |= 
8c60: 49 46 46 5f 55 50 3b 0a 09 09 09 09 09 09 09 62  IFF_UP;........b
8c70: 72 65 61 6b 3b 0a 09 09 09 09 09 09 63 61 73 65  reak;.......case
8c80: 20 30 78 31 61 65 66 37 66 35 34 3a 20 2f 2a 20   0x1aef7f54: /* 
8c90: 42 52 4f 41 44 43 41 53 54 20 2a 2f 0a 09 09 09  BROADCAST */....
8ca0: 09 09 09 09 66 6c 61 67 73 20 7c 3d 20 49 46 46  ....flags |= IFF
8cb0: 5f 42 52 4f 41 44 43 41 53 54 3b 0a 09 09 09 09  _BROADCAST;.....
8cc0: 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 09 09  ...break;.......
8cd0: 63 61 73 65 20 30 78 63 32 35 32 61 62 64 34 3a  case 0xc252abd4:
8ce0: 20 2f 2a 20 50 4f 49 4e 54 4f 50 4f 49 4e 54 20   /* POINTOPOINT 
8cf0: 2a 2f 0a 09 09 09 09 09 09 09 66 6c 61 67 73 20  */........flags 
8d00: 7c 3d 20 49 46 46 5f 50 4f 49 4e 54 4f 50 4f 49  |= IFF_POINTOPOI
8d10: 4e 54 3b 0a 09 09 09 09 09 09 09 62 72 65 61 6b  NT;........break
8d20: 3b 0a 09 09 09 09 09 09 63 61 73 65 20 30 78 34  ;.......case 0x4
8d30: 38 62 30 61 38 63 37 3a 20 2f 2a 20 44 45 42 55  8b0a8c7: /* DEBU
8d40: 47 20 2a 2f 0a 09 09 09 09 09 09 09 66 6c 61 67  G */........flag
8d50: 73 20 7c 3d 20 49 46 46 5f 44 45 42 55 47 3b 0a  s |= IFF_DEBUG;.
8d60: 09 09 09 09 09 09 09 62 72 65 61 6b 3b 0a 09 09  .......break;...
8d70: 09 09 09 09 63 61 73 65 20 30 78 34 64 33 64 62  ....case 0x4d3db
8d80: 63 64 33 3a 20 2f 2a 20 4e 4f 54 52 41 49 4c 45  cd3: /* NOTRAILE
8d90: 52 53 20 2a 2f 0a 09 09 09 09 09 09 09 66 6c 61  RS */........fla
8da0: 67 73 20 7c 3d 20 49 46 46 5f 4e 4f 54 52 41 49  gs |= IFF_NOTRAI
8db0: 4c 45 52 53 3b 0a 09 09 09 09 09 09 09 62 72 65  LERS;........bre
8dc0: 61 6b 3b 0a 09 09 09 09 09 09 63 61 73 65 20 30  ak;.......case 0
8dd0: 78 65 39 37 37 33 31 34 37 3a 20 2f 2a 20 52 55  xe9773147: /* RU
8de0: 4e 4e 49 4e 47 20 2a 2f 0a 09 09 09 09 09 09 09  NNING */........
8df0: 66 6c 61 67 73 20 7c 3d 20 49 46 46 5f 52 55 4e  flags |= IFF_RUN
8e00: 4e 49 4e 47 3b 0a 09 09 09 09 09 09 09 62 72 65  NING;........bre
8e10: 61 6b 3b 0a 09 09 09 09 09 09 63 61 73 65 20 30  ak;.......case 0
8e20: 78 65 39 66 30 36 62 35 30 3a 20 2f 2a 20 4e 4f  xe9f06b50: /* NO
8e30: 41 52 50 20 2a 2f 0a 09 09 09 09 09 09 09 66 6c  ARP */........fl
8e40: 61 67 73 20 7c 3d 20 49 46 46 5f 4e 4f 41 52 50  ags |= IFF_NOARP
8e50: 3b 0a 09 09 09 09 09 09 09 62 72 65 61 6b 3b 0a  ;........break;.
8e60: 09 09 09 09 09 09 63 61 73 65 20 30 78 66 39 31  ......case 0xf91
8e70: 33 32 33 63 33 3a 20 2f 2a 20 50 52 4f 4d 49 53  323c3: /* PROMIS
8e80: 43 20 2a 2f 0a 09 09 09 09 09 09 09 66 6c 61 67  C */........flag
8e90: 73 20 7c 3d 20 49 46 46 5f 50 52 4f 4d 49 53 43  s |= IFF_PROMISC
8ea0: 3b 0a 09 09 09 09 09 09 09 62 72 65 61 6b 3b 0a  ;........break;.
8eb0: 09 09 09 09 09 09 63 61 73 65 20 30 78 39 62 32  ......case 0x9b2
8ec0: 61 31 38 34 39 3a 20 2f 2a 20 41 4c 4c 4d 55 4c  a1849: /* ALLMUL
8ed0: 54 49 20 2a 2f 0a 09 09 09 09 09 09 09 66 6c 61  TI */........fla
8ee0: 67 73 20 7c 3d 20 49 46 46 5f 41 4c 4c 4d 55 4c  gs |= IFF_ALLMUL
8ef0: 54 49 3b 0a 09 09 09 09 09 09 09 62 72 65 61 6b  TI;........break
8f00: 3b 0a 09 09 09 09 09 09 63 61 73 65 20 30 78 31  ;.......case 0x1
8f10: 61 37 34 31 34 64 32 3a 20 2f 2a 20 4d 41 53 54  a7414d2: /* MAST
8f20: 45 52 20 2a 2f 0a 09 09 09 09 09 09 09 66 6c 61  ER */........fla
8f30: 67 73 20 7c 3d 20 49 46 46 5f 4d 41 53 54 45 52  gs |= IFF_MASTER
8f40: 3b 0a 09 09 09 09 09 09 09 62 72 65 61 6b 3b 0a  ;........break;.
8f50: 09 09 09 09 09 09 63 61 73 65 20 30 78 33 39 39  ......case 0x399
8f60: 30 36 39 63 35 3a 20 2f 2a 20 53 4c 41 56 45 20  069c5: /* SLAVE 
8f70: 2a 2f 0a 09 09 09 09 09 09 09 66 6c 61 67 73 20  */........flags 
8f80: 7c 3d 20 49 46 46 5f 53 4c 41 56 45 3b 0a 09 09  |= IFF_SLAVE;...
8f90: 09 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 09  .....break;.....
8fa0: 09 09 63 61 73 65 20 30 78 34 64 65 39 32 38 64  ..case 0x4de928d
8fb0: 34 3a 20 2f 2a 20 4d 55 4c 54 49 43 41 53 54 20  4: /* MULTICAST 
8fc0: 2a 2f 0a 09 09 09 09 09 09 09 66 6c 61 67 73 20  */........flags 
8fd0: 7c 3d 20 49 46 46 5f 4d 55 4c 54 49 43 41 53 54  |= IFF_MULTICAST
8fe0: 3b 0a 09 09 09 09 09 09 09 62 72 65 61 6b 3b 0a  ;........break;.
8ff0: 09 09 09 09 09 09 63 61 73 65 20 30 78 32 61 33  ......case 0x2a3
9000: 35 64 63 34 63 3a 20 2f 2a 20 50 4f 52 54 53 45  5dc4c: /* PORTSE
9010: 4c 20 2a 2f 0a 09 09 09 09 09 09 09 66 6c 61 67  L */........flag
9020: 73 20 7c 3d 20 49 46 46 5f 50 4f 52 54 53 45 4c  s |= IFF_PORTSEL
9030: 3b 0a 09 09 09 09 09 09 09 62 72 65 61 6b 3b 0a  ;........break;.
9040: 09 09 09 09 09 09 63 61 73 65 20 30 78 64 31 38  ......case 0xd18
9050: 30 61 63 31 3a 20 2f 2a 20 41 55 54 4f 4d 45 44  0ac1: /* AUTOMED
9060: 49 41 20 2a 2f 0a 09 09 09 09 09 09 09 66 6c 61  IA */........fla
9070: 67 73 20 7c 3d 20 49 46 46 5f 41 55 54 4f 4d 45  gs |= IFF_AUTOME
9080: 44 49 41 3b 0a 09 09 09 09 09 09 09 62 72 65 61  DIA;........brea
9090: 6b 3b 0a 09 09 09 09 09 09 63 61 73 65 20 30 78  k;.......case 0x
90a0: 65 38 62 61 30 32 63 33 3a 20 2f 2a 20 44 59 4e  e8ba02c3: /* DYN
90b0: 41 4d 49 43 20 2a 2f 0a 09 09 09 09 09 09 09 66  AMIC */........f
90c0: 6c 61 67 73 20 7c 3d 20 49 46 46 5f 44 59 4e 41  lags |= IFF_DYNA
90d0: 4d 49 43 3b 0a 09 09 09 09 09 09 09 62 72 65 61  MIC;........brea
90e0: 6b 3b 0a 09 09 09 09 09 09 63 61 73 65 20 30 78  k;.......case 0x
90f0: 31 36 63 38 62 34 64 30 3a 20 2f 2a 20 4c 4f 57  16c8b4d0: /* LOW
9100: 45 52 5f 55 50 20 2a 2f 0a 09 09 09 09 09 09 09  ER_UP */........
9110: 66 6c 61 67 73 20 7c 3d 20 49 46 46 5f 4c 4f 57  flags |= IFF_LOW
9120: 45 52 5f 55 50 3b 0a 09 09 09 09 09 09 09 62 72  ER_UP;........br
9130: 65 61 6b 3b 0a 09 09 09 09 09 09 63 61 73 65 20  eak;.......case 
9140: 30 78 32 39 33 39 35 39 64 34 3a 20 2f 2a 20 44  0x293959d4: /* D
9150: 4f 52 4d 41 4e 54 20 2a 2f 0a 09 09 09 09 09 09  ORMANT */.......
9160: 09 66 6c 61 67 73 20 7c 3d 20 49 46 46 5f 44 4f  .flags |= IFF_DO
9170: 52 4d 41 4e 54 3b 0a 09 09 09 09 09 09 09 62 72  RMANT;........br
9180: 65 61 6b 3b 0a 23 69 66 64 65 66 20 49 46 46 5f  eak;.#ifdef IFF_
9190: 45 43 48 4f 0a 09 09 09 09 09 09 63 61 73 65 20  ECHO.......case 
91a0: 30 78 38 62 30 65 34 34 66 3a 20 2f 2a 20 45 43  0x8b0e44f: /* EC
91b0: 48 4f 20 2a 2f 0a 09 09 09 09 09 09 09 66 6c 61  HO */........fla
91c0: 67 73 20 7c 3d 20 49 46 46 5f 45 43 48 4f 3b 0a  gs |= IFF_ECHO;.
91d0: 09 09 09 09 09 09 09 62 72 65 61 6b 3b 0a 23 65  .......break;.#e
91e0: 6e 64 69 66 0a 09 09 09 09 09 7d 0a 09 09 09 09  ndif......}.....
91f0: 7d 0a 0a 09 09 09 09 69 66 61 63 65 5f 72 65 71  }......iface_req
9200: 2e 69 66 72 5f 66 6c 61 67 73 20 3d 20 66 6c 61  .ifr_flags = fla
9210: 67 73 3b 0a 0a 09 09 09 09 69 6f 63 74 6c 5f 72  gs;......ioctl_r
9220: 65 74 20 3d 20 69 6f 63 74 6c 28 73 6f 63 6b 2c  et = ioctl(sock,
9230: 20 53 49 4f 43 53 49 46 46 4c 41 47 53 2c 20 26   SIOCSIFFLAGS, &
9240: 69 66 61 63 65 5f 72 65 71 29 3b 0a 09 09 09 09  iface_req);.....
9250: 69 66 20 28 69 6f 63 74 6c 5f 72 65 74 20 21 3d  if (ioctl_ret !=
9260: 20 30 29 20 7b 0a 09 09 09 09 09 54 63 6c 5f 53   0) {......Tcl_S
9270: 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
9280: 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e  rp, Tcl_NewStrin
9290: 67 4f 62 6a 28 73 74 72 65 72 72 6f 72 28 65 72  gObj(strerror(er
92a0: 72 6e 6f 29 2c 20 2d 31 29 29 3b 0a 0a 09 09 09  rno), -1));.....
92b0: 09 09 72 65 74 75 72 6e 28 54 43 4c 5f 45 52 52  ..return(TCL_ERR
92c0: 4f 52 29 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09  OR);.....}......
92d0: 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 30  break;....case 0
92e0: 78 35 65 39 64 30 33 65 33 3a 20 2f 2a 20 6d 65  x5e9d03e3: /* me
92f0: 74 72 69 63 20 2a 2f 0a 09 09 09 63 61 73 65 20  tric */....case 
9300: 30 78 31 62 37 61 37 35 3a 20 2f 2a 20 6d 74 75  0x1b7a75: /* mtu
9310: 20 2a 2f 0a 09 09 09 63 61 73 65 20 30 78 37 63   */....case 0x7c
9320: 33 38 39 31 66 32 3a 20 2f 2a 20 68 77 61 64 64  3891f2: /* hwadd
9330: 72 20 2a 2f 0a 09 09 09 63 61 73 65 20 30 78 62  r */....case 0xb
9340: 66 37 32 61 39 36 39 3a 20 2f 2a 20 61 64 64 6d  f72a969: /* addm
9350: 75 6c 74 69 20 2a 2f 0a 09 09 09 63 61 73 65 20  ulti */....case 
9360: 30 78 62 61 37 30 38 39 36 39 3a 20 2f 2a 20 64  0xba708969: /* d
9370: 65 6c 6d 75 6c 74 69 20 2a 2f 0a 09 09 09 63 61  elmulti */....ca
9380: 73 65 20 30 78 64 64 38 37 36 65 35 3a 20 2f 2a  se 0xdd876e5: /*
9390: 20 6e 61 6d 65 20 2a 2f 0a 09 09 09 09 09 54 63   name */......Tc
93a0: 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69  l_SetObjResult(i
93b0: 6e 74 65 72 70 2c 20 54 63 6c 5f 4f 62 6a 50 72  nterp, Tcl_ObjPr
93c0: 69 6e 74 66 28 22 6f 70 74 69 6f 6e 20 5c 22 25  intf("option \"%
93d0: 73 5c 22 20 75 6e 73 75 70 70 6f 72 74 65 64 22  s\" unsupported"
93e0: 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  , Tcl_GetString(
93f0: 6f 70 74 69 6f 6e 5f 6e 61 6d 65 5f 6f 62 6a 29  option_name_obj)
9400: 29 29 3b 0a 0a 09 09 09 09 09 72 65 74 75 72 6e  ));.......return
9410: 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 09 09 09  (TCL_ERROR);....
9420: 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20  .break;....case 
9430: 30 78 34 65 39 61 65 61 66 33 3a 20 2f 2a 20 61  0x4e9aeaf3: /* a
9440: 64 64 72 65 73 73 20 2a 2f 0a 09 09 09 09 69 66  ddress */.....if
9450: 20 28 74 6d 70 5f 69 6f 63 74 6c 20 3d 3d 20 2d   (tmp_ioctl == -
9460: 31 29 20 7b 0a 09 09 09 09 09 74 6d 70 5f 69 6f  1) {......tmp_io
9470: 63 74 6c 20 3d 20 53 49 4f 43 53 49 46 41 44 44  ctl = SIOCSIFADD
9480: 52 3b 0a 09 09 09 09 09 74 6d 70 5f 69 6f 63 74  R;......tmp_ioct
9490: 6c 5f 61 64 64 72 20 3d 20 26 69 66 61 63 65 5f  l_addr = &iface_
94a0: 72 65 71 2e 69 66 72 5f 61 64 64 72 3b 0a 09 09  req.ifr_addr;...
94b0: 09 09 7d 0a 0a 09 09 09 63 61 73 65 20 30 78 65  ..}.....case 0xe
94c0: 63 30 35 37 30 36 65 3a 20 2f 2a 20 64 65 73 74  c05706e: /* dest
94d0: 69 6e 61 74 69 6f 6e 20 2a 2f 0a 09 09 09 09 69  ination */.....i
94e0: 66 20 28 74 6d 70 5f 69 6f 63 74 6c 20 3d 3d 20  f (tmp_ioctl == 
94f0: 2d 31 29 20 7b 0a 09 09 09 09 09 74 6d 70 5f 69  -1) {......tmp_i
9500: 6f 63 74 6c 20 3d 20 53 49 4f 43 53 49 46 44 53  octl = SIOCSIFDS
9510: 54 41 44 44 52 3b 0a 09 09 09 09 09 74 6d 70 5f  TADDR;......tmp_
9520: 69 6f 63 74 6c 5f 61 64 64 72 20 3d 20 26 69 66  ioctl_addr = &if
9530: 61 63 65 5f 72 65 71 2e 69 66 72 5f 64 73 74 61  ace_req.ifr_dsta
9540: 64 64 72 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 63  ddr;.....}.....c
9550: 61 73 65 20 30 78 33 65 61 37 65 36 37 34 3a 20  ase 0x3ea7e674: 
9560: 2f 2a 20 62 72 6f 61 64 63 61 73 74 20 2a 2f 0a  /* broadcast */.
9570: 09 09 09 09 69 66 20 28 74 6d 70 5f 69 6f 63 74  ....if (tmp_ioct
9580: 6c 20 3d 3d 20 2d 31 29 20 7b 0a 09 09 09 09 09  l == -1) {......
9590: 74 6d 70 5f 69 6f 63 74 6c 20 3d 20 53 49 4f 43  tmp_ioctl = SIOC
95a0: 53 49 46 42 52 44 41 44 44 52 3b 0a 09 09 09 09  SIFBRDADDR;.....
95b0: 09 74 6d 70 5f 69 6f 63 74 6c 5f 61 64 64 72 20  .tmp_ioctl_addr 
95c0: 3d 20 26 69 66 61 63 65 5f 72 65 71 2e 69 66 72  = &iface_req.ifr
95d0: 5f 62 72 6f 61 64 61 64 64 72 3b 0a 09 09 09 09  _broadaddr;.....
95e0: 7d 0a 0a 09 09 09 63 61 73 65 20 30 78 34 64 36  }.....case 0x4d6
95f0: 35 65 65 36 62 3a 20 2f 2a 20 6e 65 74 6d 61 73  5ee6b: /* netmas
9600: 6b 20 2a 2f 0a 09 09 09 09 69 66 20 28 74 6d 70  k */.....if (tmp
9610: 5f 69 6f 63 74 6c 20 3d 3d 20 2d 31 29 20 7b 0a  _ioctl == -1) {.
9620: 09 09 09 09 09 74 6d 70 5f 69 6f 63 74 6c 20 3d  .....tmp_ioctl =
9630: 20 53 49 4f 43 53 49 46 4e 45 54 4d 41 53 4b 3b   SIOCSIFNETMASK;
9640: 0a 09 09 09 09 09 74 6d 70 5f 69 6f 63 74 6c 5f  ......tmp_ioctl_
9650: 61 64 64 72 20 3d 20 26 69 66 61 63 65 5f 72 65  addr = &iface_re
9660: 71 2e 69 66 72 5f 6e 65 74 6d 61 73 6b 3b 0a 09  q.ifr_netmask;..
9670: 09 09 09 7d 0a 0a 09 09 09 09 70 61 72 73 65 5f  ...}......parse_
9680: 72 65 74 20 3d 20 74 75 61 70 69 5f 70 72 69 76  ret = tuapi_priv
9690: 61 74 65 5f 67 65 74 5f 73 6f 63 6b 61 64 64 72  ate_get_sockaddr
96a0: 5f 66 72 6f 6d 5f 6f 62 6a 28 6f 70 74 69 6f 6e  _from_obj(option
96b0: 5f 76 61 6c 5f 6f 62 6a 2c 20 74 6d 70 5f 69 6f  _val_obj, tmp_io
96c0: 63 74 6c 5f 61 64 64 72 29 3b 0a 09 09 09 09 69  ctl_addr);.....i
96d0: 66 20 28 70 61 72 73 65 5f 72 65 74 20 21 3d 20  f (parse_ret != 
96e0: 30 29 20 7b 0a 09 09 09 09 09 54 63 6c 5f 53 65  0) {......Tcl_Se
96f0: 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72  tObjResult(inter
9700: 70 2c 20 54 63 6c 5f 4f 62 6a 50 72 69 6e 74 66  p, Tcl_ObjPrintf
9710: 28 22 75 6e 61 62 6c 65 20 74 6f 20 70 61 72 73  ("unable to pars
9720: 65 20 5c 22 25 73 5c 22 20 61 73 20 61 6e 20 61  e \"%s\" as an a
9730: 64 64 72 65 73 73 22 2c 20 54 63 6c 5f 47 65 74  ddress", Tcl_Get
9740: 53 74 72 69 6e 67 28 6f 70 74 69 6f 6e 5f 76 61  String(option_va
9750: 6c 5f 6f 62 6a 29 29 29 3b 0a 0a 09 09 09 09 09  l_obj)));.......
9760: 72 65 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52  return(TCL_ERROR
9770: 29 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09 73 77  );.....}......sw
9780: 69 74 63 68 20 28 74 6d 70 5f 69 6f 63 74 6c 5f  itch (tmp_ioctl_
9790: 61 64 64 72 2d 3e 73 61 5f 66 61 6d 69 6c 79 29  addr->sa_family)
97a0: 20 7b 0a 09 09 09 09 09 63 61 73 65 20 41 46 5f   {......case AF_
97b0: 49 4e 45 54 3a 0a 09 09 09 09 09 09 74 6d 70 5f  INET:.......tmp_
97c0: 73 6f 63 6b 20 3d 20 73 6f 63 6b 5f 76 34 3b 0a  sock = sock_v4;.
97d0: 0a 09 09 09 09 09 09 62 72 65 61 6b 3b 0a 09 09  .......break;...
97e0: 09 09 09 63 61 73 65 20 41 46 5f 49 4e 45 54 36  ...case AF_INET6
97f0: 3a 0a 09 09 09 09 09 09 74 6d 70 5f 73 6f 63 6b  :.......tmp_sock
9800: 20 3d 20 73 6f 63 6b 5f 76 36 3b 0a 0a 09 09 09   = sock_v6;.....
9810: 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 09 64  ...break;......d
9820: 65 66 61 75 6c 74 3a 0a 09 09 09 09 09 09 54 63  efault:.......Tc
9830: 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69  l_SetObjResult(i
9840: 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74  nterp, Tcl_NewSt
9850: 72 69 6e 67 4f 62 6a 28 22 75 6e 61 62 6c 65 20  ringObj("unable 
9860: 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 61 64 64  to determine add
9870: 72 65 73 73 20 66 61 6d 69 6c 79 20 6f 66 20 73  ress family of s
9880: 6f 63 6b 61 64 64 72 22 2c 20 2d 31 29 29 3b 0a  ockaddr", -1));.
9890: 09 09 09 09 09 09 72 65 74 75 72 6e 28 54 43 4c  ......return(TCL
98a0: 5f 45 52 52 4f 52 29 3b 0a 09 09 09 09 7d 0a 0a  _ERROR);.....}..
98b0: 09 09 09 09 69 6f 63 74 6c 5f 72 65 74 20 3d 20  ....ioctl_ret = 
98c0: 69 6f 63 74 6c 28 74 6d 70 5f 73 6f 63 6b 2c 20  ioctl(tmp_sock, 
98d0: 74 6d 70 5f 69 6f 63 74 6c 2c 20 26 69 66 61 63  tmp_ioctl, &ifac
98e0: 65 5f 72 65 71 29 3b 0a 09 09 09 09 69 66 20 28  e_req);.....if (
98f0: 69 6f 63 74 6c 5f 72 65 74 20 21 3d 20 30 29 20  ioctl_ret != 0) 
9900: 7b 0a 09 09 09 09 09 54 63 6c 5f 53 65 74 4f 62  {......Tcl_SetOb
9910: 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  jResult(interp, 
9920: 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a  Tcl_NewStringObj
9930: 28 73 74 72 65 72 72 6f 72 28 65 72 72 6e 6f 29  (strerror(errno)
9940: 2c 20 2d 31 29 29 3b 0a 0a 09 09 09 09 09 72 65  , -1));.......re
9950: 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b  turn(TCL_ERROR);
9960: 0a 09 09 09 09 7d 0a 0a 09 09 09 09 62 72 65 61  .....}......brea
9970: 6b 3b 0a 09 09 09 64 65 66 61 75 6c 74 3a 0a 09  k;....default:..
9980: 09 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73  ...Tcl_SetObjRes
9990: 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ult(interp, Tcl_
99a0: 4f 62 6a 50 72 69 6e 74 66 28 22 75 6e 6b 6e 6f  ObjPrintf("unkno
99b0: 77 6e 20 6f 70 74 69 6f 6e 20 5c 22 25 73 5c 22  wn option \"%s\"
99c0: 22 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  ", Tcl_GetString
99d0: 28 6f 70 74 69 6f 6e 5f 6e 61 6d 65 5f 6f 62 6a  (option_name_obj
99e0: 29 29 29 3b 0a 0a 09 09 09 09 72 65 74 75 72 6e  )));......return
99f0: 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 09 09 7d  (TCL_ERROR);...}
9a00: 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 28 54 43 4c  ..}...return(TCL
9a10: 5f 4f 4b 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 20  _OK);.}..static 
9a20: 69 6e 74 20 74 75 61 70 69 5f 69 66 63 6f 6e 66  int tuapi_ifconf
9a30: 69 67 28 43 6c 69 65 6e 74 44 61 74 61 20 63 64  ig(ClientData cd
9a40: 2c 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e  , Tcl_Interp *in
9a50: 74 65 72 70 2c 20 69 6e 74 20 6f 62 6a 63 2c 20  terp, int objc, 
9a60: 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
9a70: 62 6a 76 5b 5d 29 20 7b 0a 09 69 6e 74 20 73 6f  bjv[]) {..int so
9a80: 63 6b 5f 76 34 2c 20 73 6f 63 6b 5f 76 36 2c 20  ck_v4, sock_v6, 
9a90: 73 6f 63 6b 3b 0a 09 69 6e 74 20 72 65 74 76 61  sock;..int retva
9aa0: 6c 20 3d 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a  l = TCL_ERROR;..
9ab0: 09 73 6f 63 6b 20 3d 20 74 75 61 70 69 5f 69 6e  .sock = tuapi_in
9ac0: 74 65 72 6e 61 6c 5f 67 65 74 73 6f 63 6b 28 26  ternal_getsock(&
9ad0: 73 6f 63 6b 5f 76 34 2c 20 26 73 6f 63 6b 5f 76  sock_v4, &sock_v
9ae0: 36 29 3b 0a 09 69 66 20 28 73 6f 63 6b 20 3d 3d  6);..if (sock ==
9af0: 20 2d 31 29 20 7b 0a 09 09 54 63 6c 5f 53 65 74   -1) {...Tcl_Set
9b00: 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70  ObjResult(interp
9b10: 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f  , Tcl_NewStringO
9b20: 62 6a 28 22 75 6e 61 62 6c 65 20 74 6f 20 63 72  bj("unable to cr
9b30: 65 61 74 65 20 73 6f 63 6b 65 74 22 2c 20 2d 31  eate socket", -1
9b40: 29 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 54 43  ));....return(TC
9b50: 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 73  L_ERROR);..}...s
9b60: 77 69 74 63 68 20 28 6f 62 6a 63 29 20 7b 0a 09  witch (objc) {..
9b70: 09 63 61 73 65 20 30 3a 0a 09 09 63 61 73 65 20  .case 0:...case 
9b80: 31 3a 20 2f 2a 20 4e 6f 20 61 72 67 75 6d 65 6e  1: /* No argumen
9b90: 74 73 2c 20 6c 69 73 74 20 61 6c 6c 20 69 6e 74  ts, list all int
9ba0: 65 72 66 61 63 65 73 20 2a 2f 0a 09 09 09 72 65  erfaces */....re
9bb0: 74 76 61 6c 20 3d 20 74 75 61 70 69 5f 69 66 63  tval = tuapi_ifc
9bc0: 6f 6e 66 69 67 5f 6c 69 73 74 28 63 64 2c 20 69  onfig_list(cd, i
9bd0: 6e 74 65 72 70 2c 20 6f 62 6a 63 2c 20 6f 62 6a  nterp, objc, obj
9be0: 76 2c 20 73 6f 63 6b 29 3b 0a 0a 09 09 09 62 72  v, sock);.....br
9bf0: 65 61 6b 3b 0a 09 09 63 61 73 65 20 32 3a 20 2f  eak;...case 2: /
9c00: 2a 20 4f 6e 65 20 61 72 67 75 6d 65 6e 74 2c 20  * One argument, 
9c10: 67 69 76 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  give information
9c20: 20 61 62 6f 75 74 20 74 68 65 20 69 6e 74 65 72   about the inter
9c30: 66 61 63 65 20 2a 2f 0a 09 09 09 72 65 74 76 61  face */....retva
9c40: 6c 20 3d 20 74 75 61 70 69 5f 69 66 63 6f 6e 66  l = tuapi_ifconf
9c50: 69 67 5f 69 6e 66 6f 28 63 64 2c 20 69 6e 74 65  ig_info(cd, inte
9c60: 72 70 2c 20 6f 62 6a 63 2c 20 6f 62 6a 76 2c 20  rp, objc, objv, 
9c70: 73 6f 63 6b 2c 20 73 6f 63 6b 5f 76 34 2c 20 73  sock, sock_v4, s
9c80: 6f 63 6b 5f 76 36 29 3b 0a 0a 09 09 09 62 72 65  ock_v6);.....bre
9c90: 61 6b 3b 0a 09 09 64 65 66 61 75 6c 74 3a 0a 09  ak;...default:..
9ca0: 09 09 2f 2a 20 4f 74 68 65 72 77 69 73 65 2c 20  ../* Otherwise, 
9cb0: 63 6f 6e 66 69 67 75 72 65 20 74 68 65 20 69 6e  configure the in
9cc0: 74 65 72 61 63 65 20 2a 2f 0a 09 09 09 72 65 74  terace */....ret
9cd0: 76 61 6c 20 3d 20 74 75 61 70 69 5f 69 66 63 6f  val = tuapi_ifco
9ce0: 6e 66 69 67 5f 63 6f 6e 66 28 63 64 2c 20 69 6e  nfig_conf(cd, in
9cf0: 74 65 72 70 2c 20 6f 62 6a 63 2c 20 6f 62 6a 76  terp, objc, objv
9d00: 2c 20 73 6f 63 6b 2c 20 73 6f 63 6b 5f 76 34 2c  , sock, sock_v4,
9d10: 20 73 6f 63 6b 5f 76 36 29 3b 0a 0a 09 09 09 62   sock_v6);.....b
9d20: 72 65 61 6b 3b 0a 09 7d 0a 0a 09 2f 2a 20 43 6c  reak;..}.../* Cl
9d30: 65 61 6e 75 70 20 2a 2f 0a 09 69 66 20 28 73 6f  eanup */..if (so
9d40: 63 6b 5f 76 34 20 21 3d 20 2d 31 29 20 7b 0a 09  ck_v4 != -1) {..
9d50: 09 63 6c 6f 73 65 28 73 6f 63 6b 5f 76 34 29 3b  .close(sock_v4);
9d60: 0a 09 7d 0a 0a 09 69 66 20 28 73 6f 63 6b 5f 76  ..}...if (sock_v
9d70: 36 20 21 3d 20 2d 31 29 20 7b 0a 09 09 63 6c 6f  6 != -1) {...clo
9d80: 73 65 28 73 6f 63 6b 5f 76 36 29 3b 0a 09 7d 0a  se(sock_v6);..}.
9d90: 0a 09 72 65 74 75 72 6e 28 72 65 74 76 61 6c 29  ..return(retval)
9da0: 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 69 6e 74 20  ;.}..static int 
9db0: 74 75 61 70 69 5f 72 6f 75 74 65 5f 6c 69 73 74  tuapi_route_list
9dc0: 28 43 6c 69 65 6e 74 44 61 74 61 20 63 64 2c 20  (ClientData cd, 
9dd0: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
9de0: 72 70 2c 20 69 6e 74 20 6f 62 6a 63 2c 20 54 63  rp, int objc, Tc
9df0: 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
9e00: 76 5b 5d 2c 20 69 6e 74 20 73 6f 63 6b 5f 76 34  v[], int sock_v4
9e10: 2c 20 69 6e 74 20 73 6f 63 6b 5f 76 36 29 20 7b  , int sock_v6) {
9e20: 0a 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75  ..Tcl_SetObjResu
9e30: 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e  lt(interp, Tcl_N
9e40: 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 6e 6f 74  ewStringObj("not
9e50: 20 69 6d 70 6c 65 6d 65 6e 74 65 64 22 2c 20 2d   implemented", -
9e60: 31 29 29 3b 0a 0a 09 72 65 74 75 72 6e 28 54 43  1));...return(TC
9e70: 4c 5f 45 52 52 4f 52 29 3b 0a 7d 0a 0a 73 74 61  L_ERROR);.}..sta
9e80: 74 69 63 20 69 6e 74 20 74 75 61 70 69 5f 72 6f  tic int tuapi_ro
9e90: 75 74 65 5f 63 6f 6e 66 28 43 6c 69 65 6e 74 44  ute_conf(ClientD
9ea0: 61 74 61 20 63 64 2c 20 54 63 6c 5f 49 6e 74 65  ata cd, Tcl_Inte
9eb0: 72 70 20 2a 69 6e 74 65 72 70 2c 20 69 6e 74 20  rp *interp, int 
9ec0: 6f 62 6a 63 2c 20 54 63 6c 5f 4f 62 6a 20 2a 43  objc, Tcl_Obj *C
9ed0: 4f 4e 53 54 20 6f 62 6a 76 5b 5d 2c 20 69 6e 74  ONST objv[], int
9ee0: 20 73 6f 63 6b 5f 76 34 2c 20 69 6e 74 20 73 6f   sock_v4, int so
9ef0: 63 6b 5f 76 36 29 20 7b 0a 09 54 63 6c 5f 57 69  ck_v6) {..Tcl_Wi
9f00: 64 65 49 6e 74 20 6f 70 74 69 6f 6e 5f 76 61 6c  deInt option_val
9f10: 5f 77 69 64 65 3b 20 0a 09 54 63 6c 5f 4f 62 6a  _wide; ..Tcl_Obj
9f20: 20 2a 6f 70 65 72 61 74 69 6f 6e 5f 6f 62 6a 2c   *operation_obj,
9f30: 20 2a 64 65 73 74 5f 6f 62 6a 2c 20 2a 64 65 73   *dest_obj, *des
9f40: 74 6d 61 73 6b 5f 6f 62 6a 3b 0a 09 54 63 6c 5f  tmask_obj;..Tcl_
9f50: 4f 62 6a 20 2a 6f 70 74 69 6f 6e 5f 6e 61 6d 65  Obj *option_name
9f60: 5f 6f 62 6a 2c 20 2a 6f 70 74 69 6f 6e 5f 76 61  _obj, *option_va
9f70: 6c 5f 6f 62 6a 3b 0a 09 73 74 72 75 63 74 20 72  l_obj;..struct r
9f80: 74 65 6e 74 72 79 20 72 6f 75 74 65 3b 0a 09 69  tentry route;..i
9f90: 6e 74 20 73 6f 63 6b 3b 0a 09 69 6e 74 20 69 6f  nt sock;..int io
9fa0: 63 74 6c 5f 69 64 3b 0a 09 69 6e 74 20 74 63 6c  ctl_id;..int tcl
9fb0: 5f 72 65 74 2c 20 69 6f 63 74 6c 5f 72 65 74 2c  _ret, ioctl_ret,
9fc0: 20 70 61 72 73 65 5f 72 65 74 3b 0a 0a 09 69 66   parse_ret;...if
9fd0: 20 28 6f 62 6a 63 20 3c 20 34 29 20 7b 0a 09 09   (objc < 4) {...
9fe0: 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
9ff0: 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77  (interp, Tcl_New
a000: 53 74 72 69 6e 67 4f 62 6a 28 22 77 72 6f 6e 67  StringObj("wrong
a010: 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
a020: 62 65 20 5c 22 3a 3a 74 75 61 70 69 3a 3a 73 79  be \"::tuapi::sy
a030: 73 63 61 6c 6c 3a 3a 72 6f 75 74 65 20 6f 70 65  scall::route ope
a040: 72 61 74 69 6f 6e 20 64 65 73 74 69 6e 61 74 69  ration destinati
a050: 6f 6e 20 64 65 73 74 69 6e 61 74 69 6f 6e 5f 6d  on destination_m
a060: 61 73 6b 20 3f 6f 70 74 69 6f 6e 73 3f 5c 22 22  ask ?options?\""
a070: 2c 20 2d 31 29 29 3b 0a 0a 09 09 72 65 74 75 72  , -1));....retur
a080: 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d  n(TCL_ERROR);..}
a090: 0a 0a 09 2f 2a 20 43 6c 65 61 72 20 6f 62 6a 65  .../* Clear obje
a0a0: 63 74 20 76 61 6c 75 65 73 20 2a 2f 0a 09 6d 65  ct values */..me
a0b0: 6d 73 65 74 28 26 72 6f 75 74 65 2c 20 30 2c 20  mset(&route, 0, 
a0c0: 73 69 7a 65 6f 66 28 72 6f 75 74 65 29 29 3b 0a  sizeof(route));.
a0d0: 0a 09 2f 2a 20 44 65 74 65 72 6d 69 6e 65 20 6f  ../* Determine o
a0e0: 70 65 72 61 74 69 6f 6e 20 2a 2f 0a 09 6f 70 65  peration */..ope
a0f0: 72 61 74 69 6f 6e 5f 6f 62 6a 20 3d 20 6f 62 6a  ration_obj = obj
a100: 76 5b 31 5d 3b 0a 09 73 77 69 74 63 68 20 28 74  v[1];..switch (t
a110: 75 61 70 69 5f 69 6e 74 65 72 6e 61 6c 5f 73 69  uapi_internal_si
a120: 6d 70 6c 65 68 61 73 68 5f 6f 62 6a 28 6f 70 65  mplehash_obj(ope
a130: 72 61 74 69 6f 6e 5f 6f 62 6a 29 29 20 7b 0a 09  ration_obj)) {..
a140: 09 63 61 73 65 20 30 78 31 38 37 32 36 34 3a 20  .case 0x187264: 
a150: 2f 2a 20 61 64 64 20 2a 2f 0a 09 09 09 69 6f 63  /* add */....ioc
a160: 74 6c 5f 69 64 20 3d 20 53 49 4f 43 41 44 44 52  tl_id = SIOCADDR
a170: 54 3b 0a 09 09 09 62 72 65 61 6b 3b 0a 09 09 63  T;....break;...c
a180: 61 73 65 20 30 78 31 39 33 32 65 63 3a 20 2f 2a  ase 0x1932ec: /*
a190: 20 64 65 6c 20 2a 2f 0a 09 09 63 61 73 65 20 30   del */...case 0
a1a0: 78 35 64 39 38 65 39 36 35 3a 20 2f 2a 20 64 65  x5d98e965: /* de
a1b0: 6c 65 74 65 20 2a 2f 0a 09 09 09 69 6f 63 74 6c  lete */....ioctl
a1c0: 5f 69 64 20 3d 20 53 49 4f 43 44 45 4c 52 54 3b  _id = SIOCDELRT;
a1d0: 0a 09 09 09 62 72 65 61 6b 3b 0a 09 09 64 65 66  ....break;...def
a1e0: 61 75 6c 74 3a 0a 09 09 09 54 63 6c 5f 53 65 74  ault:....Tcl_Set
a1f0: 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70  ObjResult(interp
a200: 2c 20 54 63 6c 5f 4f 62 6a 50 72 69 6e 74 66 28  , Tcl_ObjPrintf(
a210: 22 62 61 64 20 6f 70 74 69 6f 6e 20 5c 22 25 73  "bad option \"%s
a220: 5c 22 3a 20 6d 75 73 74 20 62 65 20 61 64 64 2c  \": must be add,
a230: 20 6f 72 20 64 65 6c 65 74 65 22 2c 20 54 63 6c   or delete", Tcl
a240: 5f 47 65 74 53 74 72 69 6e 67 28 6f 70 65 72 61  _GetString(opera
a250: 74 69 6f 6e 5f 6f 62 6a 29 29 29 3b 0a 0a 09 09  tion_obj)));....
a260: 09 72 65 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f  .return(TCL_ERRO
a270: 52 29 3b 0a 09 7d 0a 0a 09 2f 2a 20 53 65 74 20  R);..}.../* Set 
a280: 64 65 66 61 75 6c 74 20 66 6c 61 67 73 20 2a 2f  default flags */
a290: 0a 09 72 6f 75 74 65 2e 72 74 5f 66 6c 61 67 73  ..route.rt_flags
a2a0: 20 3d 20 52 54 46 5f 55 50 3b 0a 0a 09 2f 2a 20   = RTF_UP;.../* 
a2b0: 50 61 72 73 65 20 64 65 73 74 69 6e 61 74 69 6f  Parse destinatio
a2c0: 6e 20 61 64 64 72 65 73 73 20 2a 2f 0a 09 64 65  n address */..de
a2d0: 73 74 5f 6f 62 6a 20 3d 20 6f 62 6a 76 5b 32 5d  st_obj = objv[2]
a2e0: 3b 0a 09 70 61 72 73 65 5f 72 65 74 20 3d 20 74  ;..parse_ret = t
a2f0: 75 61 70 69 5f 70 72 69 76 61 74 65 5f 67 65 74  uapi_private_get
a300: 5f 73 6f 63 6b 61 64 64 72 5f 66 72 6f 6d 5f 6f  _sockaddr_from_o
a310: 62 6a 28 64 65 73 74 5f 6f 62 6a 2c 20 26 72 6f  bj(dest_obj, &ro
a320: 75 74 65 2e 72 74 5f 64 73 74 29 3b 0a 09 69 66  ute.rt_dst);..if
a330: 20 28 70 61 72 73 65 5f 72 65 74 20 21 3d 20 30   (parse_ret != 0
a340: 29 20 7b 0a 09 09 54 63 6c 5f 53 65 74 4f 62 6a  ) {...Tcl_SetObj
a350: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54  Result(interp, T
a360: 63 6c 5f 4f 62 6a 50 72 69 6e 74 66 28 22 75 6e  cl_ObjPrintf("un
a370: 61 62 6c 65 20 74 6f 20 70 61 72 73 65 20 5c 22  able to parse \"
a380: 25 73 5c 22 20 61 73 20 61 6e 20 61 64 64 72 65  %s\" as an addre
a390: 73 73 22 2c 20 54 63 6c 5f 47 65 74 53 74 72 69  ss", Tcl_GetStri
a3a0: 6e 67 28 64 65 73 74 5f 6f 62 6a 29 29 29 3b 0a  ng(dest_obj)));.
a3b0: 0a 09 09 72 65 74 75 72 6e 28 54 43 4c 5f 45 52  ...return(TCL_ER
a3c0: 52 4f 52 29 3b 0a 09 7d 0a 0a 09 2f 2a 20 50 61  ROR);..}.../* Pa
a3d0: 72 73 65 20 64 65 73 74 69 6e 61 74 69 6f 6e 20  rse destination 
a3e0: 6e 65 74 6d 61 73 6b 20 2a 2f 0a 09 64 65 73 74  netmask */..dest
a3f0: 6d 61 73 6b 5f 6f 62 6a 20 3d 20 6f 62 6a 76 5b  mask_obj = objv[
a400: 33 5d 3b 0a 09 70 61 72 73 65 5f 72 65 74 20 3d  3];..parse_ret =
a410: 20 74 75 61 70 69 5f 70 72 69 76 61 74 65 5f 67   tuapi_private_g
a420: 65 74 5f 73 6f 63 6b 61 64 64 72 5f 66 72 6f 6d  et_sockaddr_from
a430: 5f 6f 62 6a 28 64 65 73 74 6d 61 73 6b 5f 6f 62  _obj(destmask_ob
a440: 6a 2c 20 26 72 6f 75 74 65 2e 72 74 5f 67 65 6e  j, &route.rt_gen
a450: 6d 61 73 6b 29 3b 0a 09 69 66 20 28 70 61 72 73  mask);..if (pars
a460: 65 5f 72 65 74 20 21 3d 20 30 29 20 7b 0a 09 09  e_ret != 0) {...
a470: 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
a480: 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4f 62 6a  (interp, Tcl_Obj
a490: 50 72 69 6e 74 66 28 22 75 6e 61 62 6c 65 20 74  Printf("unable t
a4a0: 6f 20 70 61 72 73 65 20 5c 22 25 73 5c 22 20 61  o parse \"%s\" a
a4b0: 73 20 61 6e 20 61 64 64 72 65 73 73 22 2c 20 54  s an address", T
a4c0: 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 64 65 73  cl_GetString(des
a4d0: 74 6d 61 73 6b 5f 6f 62 6a 29 29 29 3b 0a 0a 09  tmask_obj)));...
a4e0: 09 72 65 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f  .return(TCL_ERRO
a4f0: 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 72 6f 75  R);..}...if (rou
a500: 74 65 2e 72 74 5f 64 73 74 2e 73 61 5f 66 61 6d  te.rt_dst.sa_fam
a510: 69 6c 79 20 21 3d 20 72 6f 75 74 65 2e 72 74 5f  ily != route.rt_
a520: 67 65 6e 6d 61 73 6b 2e 73 61 5f 66 61 6d 69 6c  genmask.sa_famil
a530: 79 29 20 7b 0a 09 09 54 63 6c 5f 53 65 74 4f 62  y) {...Tcl_SetOb
a540: 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 0a  jResult(interp,.
a550: 09 09 20 20 54 63 6c 5f 4f 62 6a 50 72 69 6e 74  ..  Tcl_ObjPrint
a560: 66 28 22 64 65 73 74 69 6e 61 74 69 6f 6e 20 28  f("destination (
a570: 5c 22 25 73 5c 22 29 20 61 6e 64 20 64 65 73 74  \"%s\") and dest
a580: 69 6e 61 74 69 6f 6e 5f 6d 61 73 6b 20 28 5c 22  ination_mask (\"
a590: 25 73 5c 22 29 20 61 72 65 20 64 69 66 66 65 72  %s\") are differ
a5a0: 65 6e 74 20 63 6c 61 73 73 65 73 22 2c 0a 09 09  ent classes",...
a5b0: 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e      Tcl_GetStrin
a5c0: 67 28 64 65 73 74 5f 6f 62 6a 29 2c 0a 09 09 20  g(dest_obj),... 
a5d0: 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67     Tcl_GetString
a5e0: 28 64 65 73 74 6d 61 73 6b 5f 6f 62 6a 29 0a 09  (destmask_obj)..
a5f0: 09 20 20 29 0a 09 09 29 3b 0a 0a 09 09 72 65 74  .  )...);....ret
a600: 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a  urn(TCL_ERROR);.
a610: 09 7d 0a 0a 09 73 77 69 74 63 68 20 28 72 6f 75  .}...switch (rou
a620: 74 65 2e 72 74 5f 64 73 74 2e 73 61 5f 66 61 6d  te.rt_dst.sa_fam
a630: 69 6c 79 29 20 7b 0a 09 09 63 61 73 65 20 41 46  ily) {...case AF
a640: 5f 49 4e 45 54 3a 20 2f 2a 20 49 50 76 34 20 2a  _INET: /* IPv4 *
a650: 2f 0a 09 09 09 69 66 20 28 73 6f 63 6b 5f 76 34  /....if (sock_v4
a660: 20 3d 3d 20 2d 31 29 20 7b 0a 09 09 09 09 54 63   == -1) {.....Tc
a670: 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69  l_SetObjResult(i
a680: 6e 74 65 72 70 2c 20 54 63 6c 5f 4f 62 6a 50 72  nterp, Tcl_ObjPr
a690: 69 6e 74 66 28 22 61 64 64 72 65 73 73 20 5c 22  intf("address \"
a6a0: 25 73 5c 22 20 69 73 20 49 50 76 34 2c 20 62 75  %s\" is IPv4, bu
a6b0: 74 20 75 6e 61 62 6c 65 20 74 6f 20 63 72 65 61  t unable to crea
a6c0: 74 65 20 49 50 76 34 20 73 6f 63 6b 65 74 22 2c  te IPv4 socket",
a6d0: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 64   Tcl_GetString(d
a6e0: 65 73 74 5f 6f 62 6a 29 29 29 3b 0a 0a 09 09 09  est_obj)));.....
a6f0: 09 72 65 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f  .return(TCL_ERRO
a700: 52 29 3b 0a 09 09 09 7d 0a 0a 09 09 09 69 66 20  R);....}.....if 
a710: 28 28 28 73 74 72 75 63 74 20 73 6f 63 6b 61 64  (((struct sockad
a720: 64 72 5f 69 6e 20 2a 29 20 26 72 6f 75 74 65 2e  dr_in *) &route.
a730: 72 74 5f 67 65 6e 6d 61 73 6b 29 2d 3e 73 69 6e  rt_genmask)->sin
a740: 5f 61 64 64 72 2e 73 5f 61 64 64 72 20 3d 3d 20  _addr.s_addr == 
a750: 49 4e 41 44 44 52 5f 42 52 4f 41 44 43 41 53 54  INADDR_BROADCAST
a760: 29 20 7b 0a 09 09 09 09 72 6f 75 74 65 2e 72 74  ) {.....route.rt
a770: 5f 66 6c 61 67 73 20 7c 3d 20 52 54 46 5f 48 4f  _flags |= RTF_HO
a780: 53 54 3b 0a 09 09 09 7d 0a 0a 09 09 09 73 6f 63  ST;....}.....soc
a790: 6b 20 3d 20 73 6f 63 6b 5f 76 34 3b 0a 0a 09 09  k = sock_v4;....
a7a0: 09 62 72 65 61 6b 3b 0a 09 09 63 61 73 65 20 41  .break;...case A
a7b0: 46 5f 49 4e 45 54 36 3a 20 2f 2a 20 49 50 76 36  F_INET6: /* IPv6
a7c0: 20 2a 2f 0a 09 09 09 69 66 20 28 73 6f 63 6b 5f   */....if (sock_
a7d0: 76 36 20 3d 3d 20 2d 31 29 20 7b 0a 09 09 09 09  v6 == -1) {.....
a7e0: 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
a7f0: 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4f 62 6a  (interp, Tcl_Obj
a800: 50 72 69 6e 74 66 28 22 61 64 64 72 65 73 73 20  Printf("address 
a810: 5c 22 25 73 5c 22 20 69 73 20 49 50 76 36 2c 20  \"%s\" is IPv6, 
a820: 62 75 74 20 75 6e 61 62 6c 65 20 74 6f 20 63 72  but unable to cr
a830: 65 61 74 65 20 49 50 76 36 20 73 6f 63 6b 65 74  eate IPv6 socket
a840: 22 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  ", Tcl_GetString
a850: 28 64 65 73 74 5f 6f 62 6a 29 29 29 3b 0a 0a 09  (dest_obj)));...
a860: 09 09 09 72 65 74 75 72 6e 28 54 43 4c 5f 45 52  ...return(TCL_ER
a870: 52 4f 52 29 3b 0a 09 09 09 7d 0a 0a 09 09 09 73  ROR);....}.....s
a880: 6f 63 6b 20 3d 20 73 6f 63 6b 5f 76 36 3b 0a 0a  ock = sock_v6;..
a890: 09 09 09 62 72 65 61 6b 3b 0a 09 09 64 65 66 61  ...break;...defa
a8a0: 75 6c 74 3a 0a 09 09 09 54 63 6c 5f 53 65 74 4f  ult:....Tcl_SetO
a8b0: 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  bjResult(interp,
a8c0: 20 54 63 6c 5f 4f 62 6a 50 72 69 6e 74 66 28 22   Tcl_ObjPrintf("
a8d0: 75 6e 61 62 6c 65 20 74 6f 20 64 65 74 65 72 6d  unable to determ
a8e0: 69 6e 65 20 74 79 70 65 20 6f 66 20 61 64 64 72  ine type of addr
a8f0: 65 73 73 20 66 6f 72 20 5c 22 25 73 5c 22 22 2c  ess for \"%s\"",
a900: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 64   Tcl_GetString(d
a910: 65 73 74 5f 6f 62 6a 29 29 29 3b 0a 0a 09 09 09  est_obj)));.....
a920: 72 65 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52  return(TCL_ERROR
a930: 29 3b 0a 09 7d 0a 0a 09 2f 2a 20 50 61 72 73 65  );..}.../* Parse
a940: 20 72 65 6d 61 69 6e 69 6e 67 20 6f 70 74 69 6f   remaining optio
a950: 6e 73 20 2a 2f 0a 09 6f 62 6a 63 20 2d 3d 20 34  ns */..objc -= 4
a960: 3b 0a 09 6f 62 6a 76 20 2b 3d 20 34 3b 0a 0a 09  ;..objv += 4;...
a970: 66 6f 72 20 28 3b 20 6f 62 6a 63 20 3e 20 30 3b  for (; objc > 0;
a980: 20 6f 62 6a 63 2d 2d 2c 6f 62 6a 76 2b 2b 29 20   objc--,objv++) 
a990: 7b 0a 09 09 6f 70 74 69 6f 6e 5f 6e 61 6d 65 5f  {...option_name_
a9a0: 6f 62 6a 20 3d 20 6f 62 6a 76 5b 30 5d 3b 0a 0a  obj = objv[0];..
a9b0: 09 09 69 66 20 28 6f 62 6a 63 20 3c 20 32 29 20  ..if (objc < 2) 
a9c0: 7b 0a 09 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52  {....Tcl_SetObjR
a9d0: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63  esult(interp, Tc
a9e0: 6c 5f 4f 62 6a 50 72 69 6e 74 66 28 22 6f 70 74  l_ObjPrintf("opt
a9f0: 69 6f 6e 20 5c 22 25 73 5c 22 20 72 65 71 75 69  ion \"%s\" requi
aa00: 72 65 73 20 61 6e 20 61 72 67 75 6d 65 6e 74 22  res an argument"
aa10: 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  , Tcl_GetString(
aa20: 6f 70 74 69 6f 6e 5f 6e 61 6d 65 5f 6f 62 6a 29  option_name_obj)
aa30: 29 29 3b 0a 0a 09 09 09 72 65 74 75 72 6e 28 54  ));.....return(T
aa40: 43 4c 5f 45 52 52 4f 52 29 3b 0a 09 09 7d 0a 0a  CL_ERROR);...}..
aa50: 09 09 6f 62 6a 63 2d 2d 3b 0a 09 09 6f 62 6a 76  ..objc--;...objv
aa60: 2b 2b 3b 0a 0a 09 09 6f 70 74 69 6f 6e 5f 76 61  ++;....option_va
aa70: 6c 5f 6f 62 6a 20 3d 20 6f 62 6a 76 5b 30 5d 3b  l_obj = objv[0];
aa80: 0a 0a 09 09 73 77 69 74 63 68 20 28 74 75 61 70  ....switch (tuap
aa90: 69 5f 69 6e 74 65 72 6e 61 6c 5f 73 69 6d 70 6c  i_internal_simpl
aaa0: 65 68 61 73 68 5f 6f 62 6a 28 6f 70 74 69 6f 6e  ehash_obj(option
aab0: 5f 6e 61 6d 65 5f 6f 62 6a 29 29 20 7b 0a 09 09  _name_obj)) {...
aac0: 09 63 61 73 65 20 30 78 34 63 37 32 37 37 37 39  .case 0x4c727779
aad0: 3a 20 2f 2a 20 67 61 74 65 77 61 79 20 2a 2f 0a  : /* gateway */.
aae0: 09 09 09 09 70 61 72 73 65 5f 72 65 74 20 3d 20  ....parse_ret = 
aaf0: 74 75 61 70 69 5f 70 72 69 76 61 74 65 5f 67 65  tuapi_private_ge
ab00: 74 5f 73 6f 63 6b 61 64 64 72 5f 66 72 6f 6d 5f  t_sockaddr_from_
ab10: 6f 62 6a 28 6f 70 74 69 6f 6e 5f 76 61 6c 5f 6f  obj(option_val_o
ab20: 62 6a 2c 20 26 72 6f 75 74 65 2e 72 74 5f 67 61  bj, &route.rt_ga
ab30: 74 65 77 61 79 29 3b 0a 09 09 09 09 69 66 20 28  teway);.....if (
ab40: 70 61 72 73 65 5f 72 65 74 20 21 3d 20 30 29 20  parse_ret != 0) 
ab50: 7b 0a 09 09 09 09 09 54 63 6c 5f 53 65 74 4f 62  {......Tcl_SetOb
ab60: 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  jResult(interp, 
ab70: 54 63 6c 5f 4f 62 6a 50 72 69 6e 74 66 28 22 75  Tcl_ObjPrintf("u
ab80: 6e 61 62 6c 65 20 74 6f 20 70 61 72 73 65 20 5c  nable to parse \
ab90: 22 25 73 5c 22 20 61 73 20 61 6e 20 61 64 64 72  "%s\" as an addr
aba0: 65 73 73 22 2c 20 54 63 6c 5f 47 65 74 53 74 72  ess", Tcl_GetStr
abb0: 69 6e 67 28 6f 70 74 69 6f 6e 5f 76 61 6c 5f 6f  ing(option_val_o
abc0: 62 6a 29 29 29 3b 0a 0a 09 09 09 09 09 72 65 74  bj)));.......ret
abd0: 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a  urn(TCL_ERROR);.
abe0: 09 09 09 09 7d 0a 0a 09 09 09 09 72 6f 75 74 65  ....}......route
abf0: 2e 72 74 5f 66 6c 61 67 73 20 26 3d 20 28 7e 52  .rt_flags &= (~R
ac00: 54 46 5f 48 4f 53 54 29 3b 0a 09 09 09 09 72 6f  TF_HOST);.....ro
ac10: 75 74 65 2e 72 74 5f 66 6c 61 67 73 20 7c 3d 20  ute.rt_flags |= 
ac20: 52 54 46 5f 47 41 54 45 57 41 59 3b 0a 0a 09 09  RTF_GATEWAY;....
ac30: 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65  ..break;....case
ac40: 20 30 78 31 62 37 61 37 35 3a 20 2f 2a 20 6d 74   0x1b7a75: /* mt
ac50: 75 20 2a 2f 0a 09 09 09 09 74 63 6c 5f 72 65 74  u */.....tcl_ret
ac60: 20 3d 20 54 63 6c 5f 47 65 74 57 69 64 65 49 6e   = Tcl_GetWideIn
ac70: 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c  tFromObj(interp,
ac80: 20 6f 70 74 69 6f 6e 5f 76 61 6c 5f 6f 62 6a 2c   option_val_obj,
ac90: 20 26 6f 70 74 69 6f 6e 5f 76 61 6c 5f 77 69 64   &option_val_wid
aca0: 65 29 3b 0a 09 09 09 09 69 66 20 28 74 63 6c 5f  e);.....if (tcl_
acb0: 72 65 74 20 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b  ret != TCL_OK) {
acc0: 0a 09 09 09 09 09 72 65 74 75 72 6e 28 74 63 6c  ......return(tcl
acd0: 5f 72 65 74 29 3b 0a 09 09 09 09 7d 0a 0a 09 09  _ret);.....}....
ace0: 09 09 72 6f 75 74 65 2e 72 74 5f 66 6c 61 67 73  ..route.rt_flags
acf0: 20 7c 3d 20 52 54 46 5f 4d 54 55 3b 0a 09 09 09   |= RTF_MTU;....
ad00: 09 72 6f 75 74 65 2e 72 74 5f 6d 74 75 20 3d 20  .route.rt_mtu = 
ad10: 6f 70 74 69 6f 6e 5f 76 61 6c 5f 77 69 64 65 3b  option_val_wide;
ad20: 0a 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09  ......break;....
ad30: 63 61 73 65 20 30 78 35 65 39 64 30 33 65 33 3a  case 0x5e9d03e3:
ad40: 20 2f 2a 20 6d 65 74 72 69 63 20 2a 2f 0a 09 09   /* metric */...
ad50: 09 09 74 63 6c 5f 72 65 74 20 3d 20 54 63 6c 5f  ..tcl_ret = Tcl_
ad60: 47 65 74 57 69 64 65 49 6e 74 46 72 6f 6d 4f 62  GetWideIntFromOb
ad70: 6a 28 69 6e 74 65 72 70 2c 20 6f 70 74 69 6f 6e  j(interp, option
ad80: 5f 76 61 6c 5f 6f 62 6a 2c 20 26 6f 70 74 69 6f  _val_obj, &optio
ad90: 6e 5f 76 61 6c 5f 77 69 64 65 29 3b 0a 09 09 09  n_val_wide);....
ada0: 09 69 66 20 28 74 63 6c 5f 72 65 74 20 21 3d 20  .if (tcl_ret != 
adb0: 54 43 4c 5f 4f 4b 29 20 7b 0a 09 09 09 09 09 72  TCL_OK) {......r
adc0: 65 74 75 72 6e 28 74 63 6c 5f 72 65 74 29 3b 0a  eturn(tcl_ret);.
add0: 09 09 09 09 7d 0a 0a 09 09 09 09 72 6f 75 74 65  ....}......route
ade0: 2e 72 74 5f 6d 65 74 72 69 63 20 3d 20 6f 70 74  .rt_metric = opt
adf0: 69 6f 6e 5f 76 61 6c 5f 77 69 64 65 3b 0a 0a 09  ion_val_wide;...
ae00: 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73  ...break;....cas
ae10: 65 20 30 78 39 64 64 38 65 38 66 37 3a 20 2f 2a  e 0x9dd8e8f7: /*
ae20: 20 77 69 6e 64 6f 77 20 2a 2f 0a 09 09 09 09 74   window */.....t
ae30: 63 6c 5f 72 65 74 20 3d 20 54 63 6c 5f 47 65 74  cl_ret = Tcl_Get
ae40: 57 69 64 65 49 6e 74 46 72 6f 6d 4f 62 6a 28 69  WideIntFromObj(i
ae50: 6e 74 65 72 70 2c 20 6f 70 74 69 6f 6e 5f 76 61  nterp, option_va
ae60: 6c 5f 6f 62 6a 2c 20 26 6f 70 74 69 6f 6e 5f 76  l_obj, &option_v
ae70: 61 6c 5f 77 69 64 65 29 3b 0a 09 09 09 09 69 66  al_wide);.....if
ae80: 20 28 74 63 6c 5f 72 65 74 20 21 3d 20 54 43 4c   (tcl_ret != TCL
ae90: 5f 4f 4b 29 20 7b 0a 09 09 09 09 09 72 65 74 75  _OK) {......retu
aea0: 72 6e 28 74 63 6c 5f 72 65 74 29 3b 0a 09 09 09  rn(tcl_ret);....
aeb0: 09 7d 0a 0a 09 09 09 09 72 6f 75 74 65 2e 72 74  .}......route.rt
aec0: 5f 66 6c 61 67 73 20 7c 3d 20 52 54 46 5f 57 49  _flags |= RTF_WI
aed0: 4e 44 4f 57 3b 0a 09 09 09 09 72 6f 75 74 65 2e  NDOW;.....route.
aee0: 72 74 5f 77 69 6e 64 6f 77 20 3d 20 6f 70 74 69  rt_window = opti
aef0: 6f 6e 5f 76 61 6c 5f 77 69 64 65 3b 0a 0a 09 09  on_val_wide;....
af00: 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65  ..break;....case
af10: 20 30 78 31 39 33 32 66 36 3a 20 2f 2a 20 64 65   0x1932f6: /* de
af20: 76 20 2a 2f 0a 09 09 09 63 61 73 65 20 30 78 35  v */....case 0x5
af30: 65 64 62 65 32 65 35 3a 20 2f 2a 20 64 65 76 69  edbe2e5: /* devi
af40: 63 65 20 2a 2f 0a 09 09 09 09 72 6f 75 74 65 2e  ce */.....route.
af50: 72 74 5f 64 65 76 20 3d 20 73 74 72 64 75 70 28  rt_dev = strdup(
af60: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 70  Tcl_GetString(op
af70: 74 69 6f 6e 5f 76 61 6c 5f 6f 62 6a 29 29 3b 0a  tion_val_obj));.
af80: 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 64  .....break;....d
af90: 65 66 61 75 6c 74 3a 0a 09 09 09 09 54 63 6c 5f  efault:.....Tcl_
afa0: 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74  SetObjResult(int
afb0: 65 72 70 2c 20 54 63 6c 5f 4f 62 6a 50 72 69 6e  erp, Tcl_ObjPrin
afc0: 74 66 28 22 62 61 64 20 6f 70 74 69 6f 6e 20 5c  tf("bad option \
afd0: 22 25 73 5c 22 3a 20 6d 75 73 74 20 62 65 20 67  "%s\": must be g
afe0: 61 74 65 77 61 79 2c 20 6d 74 75 2c 20 6d 65 74  ateway, mtu, met
aff0: 72 69 63 2c 20 64 65 76 69 63 65 2c 20 6f 72 20  ric, device, or 
b000: 77 69 6e 64 6f 77 22 2c 20 54 63 6c 5f 47 65 74  window", Tcl_Get
b010: 53 74 72 69 6e 67 28 6f 70 74 69 6f 6e 5f 6e 61  String(option_na
b020: 6d 65 5f 6f 62 6a 29 29 29 3b 0a 0a 09 09 09 09  me_obj)));......
b030: 72 65 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52  return(TCL_ERROR
b040: 29 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 2f 2a 20 52  );...}..}.../* R
b050: 65 71 75 65 73 74 20 72 6f 75 74 65 20 63 68 61  equest route cha
b060: 6e 67 65 20 2a 2f 0a 09 69 6f 63 74 6c 5f 72 65  nge */..ioctl_re
b070: 74 20 3d 20 69 6f 63 74 6c 28 73 6f 63 6b 2c 20  t = ioctl(sock, 
b080: 69 6f 63 74 6c 5f 69 64 2c 20 26 72 6f 75 74 65  ioctl_id, &route
b090: 29 3b 0a 09 69 66 20 28 69 6f 63 74 6c 5f 72 65  );..if (ioctl_re
b0a0: 74 20 21 3d 20 30 29 20 7b 0a 09 09 54 63 6c 5f  t != 0) {...Tcl_
b0b0: 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74  SetObjResult(int
b0c0: 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69  erp, Tcl_NewStri
b0d0: 6e 67 4f 62 6a 28 73 74 72 65 72 72 6f 72 28 65  ngObj(strerror(e
b0e0: 72 72 6e 6f 29 2c 20 2d 31 29 29 3b 0a 0a 09 09  rrno), -1));....
b0f0: 72 65 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52  return(TCL_ERROR
b100: 29 3b 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 28 54  );..}...return(T
b110: 43 4c 5f 4f 4b 29 3b 0a 7d 0a 0a 73 74 61 74 69  CL_OK);.}..stati
b120: 63 20 69 6e 74 20 74 75 61 70 69 5f 72 6f 75 74  c int tuapi_rout
b130: 65 28 43 6c 69 65 6e 74 44 61 74 61 20 63 64 2c  e(ClientData cd,
b140: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
b150: 65 72 70 2c 20 69 6e 74 20 6f 62 6a 63 2c 20 54  erp, int objc, T
b160: 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
b170: 6a 76 5b 5d 29 20 7b 0a 09 69 6e 74 20 73 6f 63  jv[]) {..int soc
b180: 6b 5f 76 34 2c 20 73 6f 63 6b 5f 76 36 2c 20 73  k_v4, sock_v6, s
b190: 6f 63 6b 3b 0a 09 69 6e 74 20 72 65 74 76 61 6c  ock;..int retval
b1a0: 20 3d 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 09   = TCL_ERROR;...
b1b0: 73 6f 63 6b 20 3d 20 74 75 61 70 69 5f 69 6e 74  sock = tuapi_int
b1c0: 65 72 6e 61 6c 5f 67 65 74 73 6f 63 6b 28 26 73  ernal_getsock(&s
b1d0: 6f 63 6b 5f 76 34 2c 20 26 73 6f 63 6b 5f 76 36  ock_v4, &sock_v6
b1e0: 29 3b 0a 09 69 66 20 28 73 6f 63 6b 20 3d 3d 20  );..if (sock == 
b1f0: 2d 31 29 20 7b 0a 09 09 54 63 6c 5f 53 65 74 4f  -1) {...Tcl_SetO
b200: 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  bjResult(interp,
b210: 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62   Tcl_NewStringOb
b220: 6a 28 22 75 6e 61 62 6c 65 20 74 6f 20 63 72 65  j("unable to cre
b230: 61 74 65 20 73 6f 63 6b 65 74 22 2c 20 2d 31 29  ate socket", -1)
b240: 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 54 43 4c  );....return(TCL
b250: 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 73 77  _ERROR);..}...sw
b260: 69 74 63 68 20 28 6f 62 6a 63 29 20 7b 0a 09 09  itch (objc) {...
b270: 63 61 73 65 20 30 3a 0a 09 09 63 61 73 65 20 31  case 0:...case 1
b280: 3a 20 2f 2a 20 4e 6f 20 61 72 67 75 6d 65 6e 74  : /* No argument
b290: 73 2c 20 6c 69 73 74 20 61 6c 6c 20 69 6e 74 65  s, list all inte
b2a0: 72 66 61 63 65 73 20 2a 2f 0a 09 09 09 72 65 74  rfaces */....ret
b2b0: 76 61 6c 20 3d 20 74 75 61 70 69 5f 72 6f 75 74  val = tuapi_rout
b2c0: 65 5f 6c 69 73 74 28 63 64 2c 20 69 6e 74 65 72  e_list(cd, inter
b2d0: 70 2c 20 6f 62 6a 63 2c 20 6f 62 6a 76 2c 20 73  p, objc, objv, s
b2e0: 6f 63 6b 5f 76 34 2c 20 73 6f 63 6b 5f 76 36 29  ock_v4, sock_v6)
b2f0: 3b 0a 0a 09 09 09 62 72 65 61 6b 3b 0a 09 09 64  ;.....break;...d
b300: 65 66 61 75 6c 74 3a 0a 09 09 09 2f 2a 20 4f 74  efault:..../* Ot
b310: 68 65 72 77 69 73 65 2c 20 6d 6f 64 69 66 79 20  herwise, modify 
b320: 72 6f 75 74 65 73 20 2a 2f 0a 09 09 09 72 65 74  routes */....ret
b330: 76 61 6c 20 3d 20 74 75 61 70 69 5f 72 6f 75 74  val = tuapi_rout
b340: 65 5f 63 6f 6e 66 28 63 64 2c 20 69 6e 74 65 72  e_conf(cd, inter
b350: 70 2c 20 6f 62 6a 63 2c 20 6f 62 6a 76 2c 20 73  p, objc, objv, s
b360: 6f 63 6b 5f 76 34 2c 20 73 6f 63 6b 5f 76 36 29  ock_v4, sock_v6)
b370: 3b 0a 0a 09 09 09 62 72 65 61 6b 3b 0a 09 7d 0a  ;.....break;..}.
b380: 0a 09 2f 2a 20 43 6c 65 61 6e 75 70 20 2a 2f 0a  ../* Cleanup */.
b390: 09 69 66 20 28 73 6f 63 6b 5f 76 34 20 21 3d 20  .if (sock_v4 != 
b3a0: 2d 31 29 20 7b 0a 09 09 63 6c 6f 73 65 28 73 6f  -1) {...close(so
b3b0: 63 6b 5f 76 34 29 3b 0a 09 7d 0a 0a 09 69 66 20  ck_v4);..}...if 
b3c0: 28 73 6f 63 6b 5f 76 36 20 21 3d 20 2d 31 29 20  (sock_v6 != -1) 
b3d0: 7b 0a 09 09 63 6c 6f 73 65 28 73 6f 63 6b 5f 76  {...close(sock_v
b3e0: 36 29 3b 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 28  6);..}...return(
b3f0: 72 65 74 76 61 6c 29 3b 0a 7d 0a 0a 73 74 61 74  retval);.}..stat
b400: 69 63 20 69 6e 74 20 74 75 61 70 69 5f 62 72 63  ic int tuapi_brc
b410: 74 6c 5f 6c 69 73 74 28 43 6c 69 65 6e 74 44 61  tl_list(ClientDa
b420: 74 61 20 63 64 2c 20 54 63 6c 5f 49 6e 74 65 72  ta cd, Tcl_Inter
b430: 70 20 2a 69 6e 74 65 72 70 2c 20 69 6e 74 20 6f  p *interp, int o
b440: 62 6a 63 2c 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  bjc, Tcl_Obj *CO
b450: 4e 53 54 20 6f 62 6a 76 5b 5d 2c 20 69 6e 74 20  NST objv[], int 
b460: 73 6f 63 6b 29 20 7b 0a 09 54 63 6c 5f 53 65 74  sock) {..Tcl_Set
b470: 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70  ObjResult(interp
b480: 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f  , Tcl_NewStringO
b490: 62 6a 28 22 6e 6f 74 20 69 6d 70 6c 65 6d 65 6e  bj("not implemen
b4a0: 74 65 64 22 2c 20 2d 31 29 29 3b 0a 0a 09 72 65  ted", -1));...re
b4b0: 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b  turn(TCL_ERROR);
b4c0: 0a 7d 0a 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .}..static int t
b4d0: 75 61 70 69 5f 62 72 63 74 6c 5f 63 6f 6e 66 28  uapi_brctl_conf(
b4e0: 43 6c 69 65 6e 74 44 61 74 61 20 63 64 2c 20 54  ClientData cd, T
b4f0: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
b500: 70 2c 20 69 6e 74 20 6f 62 6a 63 2c 20 54 63 6c  p, int objc, Tcl
b510: 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
b520: 5b 5d 2c 20 69 6e 74 20 73 6f 63 6b 29 20 7b 0a  [], int sock) {.
b530: 09 54 63 6c 5f 4f 62 6a 20 2a 6f 70 65 72 61 74  .Tcl_Obj *operat
b540: 69 6f 6e 5f 6f 62 6a 2c 20 2a 62 72 69 64 67 65  ion_obj, *bridge
b550: 5f 6e 61 6d 65 5f 6f 62 6a 2c 20 2a 69 6e 74 65  _name_obj, *inte
b560: 72 66 61 63 65 5f 6e 61 6d 65 5f 6f 62 6a 3b 0a  rface_name_obj;.
b570: 09 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 61  .unsigned long a
b580: 72 67 5b 34 5d 3b 0a 09 73 74 72 75 63 74 20 69  rg[4];..struct i
b590: 66 72 65 71 20 69 66 72 3b 0a 09 69 6e 74 20 69  freq ifr;..int i
b5a0: 6f 63 74 6c 5f 72 65 74 2c 20 69 6f 63 74 6c 5f  octl_ret, ioctl_
b5b0: 69 64 3b 0a 09 69 6e 74 20 61 64 64 20 3d 20 30  id;..int add = 0
b5c0: 3b 0a 0a 09 2f 2a 20 44 65 74 65 72 6d 69 6e 65  ;.../* Determine
b5d0: 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f 0a 09 6f   operation */..o
b5e0: 70 65 72 61 74 69 6f 6e 5f 6f 62 6a 20 3d 20 6f  peration_obj = o
b5f0: 62 6a 76 5b 31 5d 3b 0a 09 73 77 69 74 63 68 20  bjv[1];..switch 
b600: 28 74 75 61 70 69 5f 69 6e 74 65 72 6e 61 6c 5f  (tuapi_internal_
b610: 73 69 6d 70 6c 65 68 61 73 68 5f 6f 62 6a 28 6f  simplehash_obj(o
b620: 70 65 72 61 74 69 6f 6e 5f 6f 62 6a 29 29 20 7b  peration_obj)) {
b630: 0a 09 09 63 61 73 65 20 30 78 31 63 39 39 33 32  ...case 0x1c9932
b640: 37 32 3a 20 2f 2a 20 61 64 64 62 72 20 2a 2f 0a  72: /* addbr */.
b650: 09 09 09 61 64 64 20 3d 20 31 3b 0a 09 09 63 61  ...add = 1;...ca
b660: 73 65 20 30 78 34 63 62 62 33 32 37 32 3a 20 2f  se 0x4cbb3272: /
b670: 2a 20 64 65 6c 62 72 20 2a 2f 0a 09 09 09 69 66  * delbr */....if
b680: 20 28 6f 62 6a 63 20 21 3d 20 33 29 20 7b 0a 09   (objc != 3) {..
b690: 09 09 09 69 66 20 28 61 64 64 29 20 7b 0a 09 09  ...if (add) {...
b6a0: 09 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73  ...Tcl_SetObjRes
b6b0: 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ult(interp, Tcl_
b6c0: 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 77 72  NewStringObj("wr
b6d0: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
b6e0: 6c 64 20 62 65 20 5c 22 3a 3a 74 75 61 70 69 3a  ld be \"::tuapi:
b6f0: 3a 73 79 73 63 61 6c 6c 3a 3a 62 72 63 74 6c 20  :syscall::brctl 
b700: 61 64 64 62 72 20 62 72 69 64 67 65 5c 22 22 2c  addbr bridge\"",
b710: 20 2d 31 29 29 3b 0a 09 09 09 09 7d 20 65 6c 73   -1));.....} els
b720: 65 20 7b 0a 09 09 09 09 09 54 63 6c 5f 53 65 74  e {......Tcl_Set
b730: 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70  ObjResult(interp
b740: 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f  , Tcl_NewStringO
b750: 62 6a 28 22 77 72 6f 6e 67 20 23 20 61 72 67 73  bj("wrong # args
b760: 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 3a 3a  : should be \"::
b770: 74 75 61 70 69 3a 3a 73 79 73 63 61 6c 6c 3a 3a  tuapi::syscall::
b780: 62 72 63 74 6c 20 64 65 6c 62 72 20 62 72 69 64  brctl delbr brid
b790: 67 65 5c 22 22 2c 20 2d 31 29 29 3b 0a 09 09 09  ge\"", -1));....
b7a0: 09 7d 0a 0a 09 09 09 09 72 65 74 75 72 6e 28 54  .}......return(T
b7b0: 43 4c 5f 45 52 52 4f 52 29 3b 0a 09 09 09 7d 0a  CL_ERROR);....}.
b7c0: 0a 09 09 09 62 72 69 64 67 65 5f 6e 61 6d 65 5f  ....bridge_name_
b7d0: 6f 62 6a 20 3d 20 6f 62 6a 76 5b 32 5d 3b 0a 0a  obj = objv[2];..
b7e0: 09 09 09 69 66 20 28 61 64 64 29 20 7b 0a 09 09  ...if (add) {...
b7f0: 09 09 61 72 67 5b 30 5d 20 3d 20 42 52 43 54 4c  ..arg[0] = BRCTL
b800: 5f 41 44 44 5f 42 52 49 44 47 45 3b 0a 09 09 09  _ADD_BRIDGE;....
b810: 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 61 72 67  } else {.....arg
b820: 5b 30 5d 20 3d 20 42 52 43 54 4c 5f 44 45 4c 5f  [0] = BRCTL_DEL_
b830: 42 52 49 44 47 45 3b 0a 09 09 09 7d 0a 0a 09 09  BRIDGE;....}....
b840: 09 61 72 67 5b 31 5d 20 3d 20 28 75 6e 73 69 67  .arg[1] = (unsig
b850: 6e 65 64 20 6c 6f 6e 67 29 20 54 63 6c 5f 47 65  ned long) Tcl_Ge
b860: 74 53 74 72 69 6e 67 28 62 72 69 64 67 65 5f 6e  tString(bridge_n
b870: 61 6d 65 5f 6f 62 6a 29 3b 0a 09 09 09 61 72 67  ame_obj);....arg
b880: 5b 32 5d 20 3d 20 30 3b 0a 0a 09 09 09 69 6f 63  [2] = 0;.....ioc
b890: 74 6c 5f 72 65 74 20 3d 20 69 6f 63 74 6c 28 73  tl_ret = ioctl(s
b8a0: 6f 63 6b 2c 20 53 49 4f 43 47 49 46 42 52 2c 20  ock, SIOCGIFBR, 
b8b0: 26 61 72 67 29 3b 20 0a 0a 09 09 09 62 72 65 61  &arg); .....brea
b8c0: 6b 3b 0a 09 09 63 61 73 65 20 30 78 31 43 39 39  k;...case 0x1C99
b8d0: 33 37 45 36 3a 20 2f 2a 20 61 64 64 69 66 20 2a  37E6: /* addif *
b8e0: 2f 0a 09 09 09 61 64 64 20 3d 20 31 3b 0a 09 09  /....add = 1;...
b8f0: 63 61 73 65 20 30 78 34 63 62 62 33 37 65 36 3a  case 0x4cbb37e6:
b900: 20 2f 2a 20 64 65 6c 69 66 20 2a 2f 0a 09 09 09   /* delif */....
b910: 69 66 20 28 6f 62 6a 63 20 21 3d 20 34 29 20 7b  if (objc != 4) {
b920: 0a 09 09 09 09 69 66 20 28 61 64 64 29 20 7b 0a  .....if (add) {.
b930: 09 09 09 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52  .....Tcl_SetObjR
b940: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63  esult(interp, Tc
b950: 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22  l_NewStringObj("
b960: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
b970: 6f 75 6c 64 20 62 65 20 5c 22 3a 3a 74 75 61 70  ould be \"::tuap
b980: 69 3a 3a 73 79 73 63 61 6c 6c 3a 3a 62 72 63 74  i::syscall::brct
b990: 6c 20 61 64 64 69 66 20 62 72 69 64 67 65 20 69  l addif bridge i
b9a0: 6e 74 65 72 66 61 63 65 5c 22 22 2c 20 2d 31 29  nterface\"", -1)
b9b0: 29 3b 0a 09 09 09 09 7d 20 65 6c 73 65 20 7b 0a  );.....} else {.
b9c0: 09 09 09 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52  .....Tcl_SetObjR
b9d0: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63  esult(interp, Tc
b9e0: 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22  l_NewStringObj("
b9f0: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
ba00: 6f 75 6c 64 20 62 65 20 5c 22 3a 3a 74 75 61 70  ould be \"::tuap
ba10: 69 3a 3a 73 79 73 63 61 6c 6c 3a 3a 62 72 63 74  i::syscall::brct
ba20: 6c 20 64 65 6c 69 66 20 62 72 69 64 67 65 20 69  l delif bridge i
ba30: 6e 74 65 72 66 61 63 65 5c 22 22 2c 20 2d 31 29  nterface\"", -1)
ba40: 29 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09 72 65  );.....}......re
ba50: 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b  turn(TCL_ERROR);
ba60: 0a 09 09 09 7d 0a 0a 09 09 09 69 66 20 28 61 64  ....}.....if (ad
ba70: 64 29 20 7b 0a 09 09 09 09 69 6f 63 74 6c 5f 69  d) {.....ioctl_i
ba80: 64 20 3d 20 53 49 4f 43 42 52 41 44 44 49 46 3b  d = SIOCBRADDIF;
ba90: 0a 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09  ....} else {....
baa0: 09 69 6f 63 74 6c 5f 69 64 20 3d 20 53 49 4f 43  .ioctl_id = SIOC
bab0: 42 52 44 45 4c 49 46 3b 0a 09 09 09 7d 0a 0a 09  BRDELIF;....}...
bac0: 09 09 62 72 69 64 67 65 5f 6e 61 6d 65 5f 6f 62  ..bridge_name_ob
bad0: 6a 20 3d 20 6f 62 6a 76 5b 32 5d 3b 0a 09 09 09  j = objv[2];....
bae0: 69 6e 74 65 72 66 61 63 65 5f 6e 61 6d 65 5f 6f  interface_name_o
baf0: 62 6a 20 3d 20 6f 62 6a 76 5b 33 5d 3b 0a 0a 09  bj = objv[3];...
bb00: 09 09 6d 65 6d 73 65 74 28 26 69 66 72 2c 20 30  ..memset(&ifr, 0
bb10: 2c 20 73 69 7a 65 6f 66 28 69 66 72 29 29 3b 0a  , sizeof(ifr));.
bb20: 09 09 09 73 6e 70 72 69 6e 74 66 28 69 66 72 2e  ...snprintf(ifr.
bb30: 69 66 72 5f 6e 61 6d 65 2c 20 49 46 4e 41 4d 53  ifr_name, IFNAMS
bb40: 49 5a 2c 20 22 25 73 22 2c 20 54 63 6c 5f 47 65  IZ, "%s", Tcl_Ge
bb50: 74 53 74 72 69 6e 67 28 69 6e 74 65 72 66 61 63  tString(interfac
bb60: 65 5f 6e 61 6d 65 5f 6f 62 6a 29 29 3b 0a 0a 09  e_name_obj));...
bb70: 09 09 69 6f 63 74 6c 5f 72 65 74 20 3d 20 69 6f  ..ioctl_ret = io
bb80: 63 74 6c 28 73 6f 63 6b 2c 20 53 49 4f 43 47 49  ctl(sock, SIOCGI
bb90: 46 49 4e 44 45 58 2c 20 28 76 6f 69 64 20 2a 29  FINDEX, (void *)
bba0: 20 26 69 66 72 29 3b 0a 09 09 09 69 66 20 28 69   &ifr);....if (i
bbb0: 6f 63 74 6c 5f 72 65 74 20 3d 3d 20 30 29 20 7b  octl_ret == 0) {
bbc0: 0a 09 09 09 09 73 6e 70 72 69 6e 74 66 28 69 66  .....snprintf(if
bbd0: 72 2e 69 66 72 5f 6e 61 6d 65 2c 20 49 46 4e 41  r.ifr_name, IFNA
bbe0: 4d 53 49 5a 2c 20 22 25 73 22 2c 20 54 63 6c 5f  MSIZ, "%s", Tcl_
bbf0: 47 65 74 53 74 72 69 6e 67 28 62 72 69 64 67 65  GetString(bridge
bc00: 5f 6e 61 6d 65 5f 6f 62 6a 29 29 3b 0a 09 09 09  _name_obj));....
bc10: 09 69 6f 63 74 6c 5f 72 65 74 20 3d 20 69 6f 63  .ioctl_ret = ioc
bc20: 74 6c 28 73 6f 63 6b 2c 20 69 6f 63 74 6c 5f 69  tl(sock, ioctl_i
bc30: 64 2c 20 28 76 6f 69 64 20 2a 29 20 26 69 66 72  d, (void *) &ifr
bc40: 29 3b 0a 09 09 09 7d 0a 0a 09 09 09 62 72 65 61  );....}.....brea
bc50: 6b 3b 0a 09 7d 0a 0a 09 69 66 20 28 69 6f 63 74  k;..}...if (ioct
bc60: 6c 5f 72 65 74 20 3c 20 30 29 20 7b 0a 09 09 54  l_ret < 0) {...T
bc70: 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28  cl_SetObjResult(
bc80: 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53  interp, Tcl_NewS
bc90: 74 72 69 6e 67 4f 62 6a 28 73 74 72 65 72 72 6f  tringObj(strerro
bca0: 72 28 65 72 72 6e 6f 29 2c 20 2d 31 29 29 3b 0a  r(errno), -1));.
bcb0: 0a 09 09 72 65 74 75 72 6e 28 54 43 4c 5f 45 52  ...return(TCL_ER
bcc0: 52 4f 52 29 3b 0a 09 7d 0a 0a 09 72 65 74 75 72  ROR);..}...retur
bcd0: 6e 28 54 43 4c 5f 4f 4b 29 3b 0a 7d 0a 0a 73 74  n(TCL_OK);.}..st
bce0: 61 74 69 63 20 69 6e 74 20 74 75 61 70 69 5f 62  atic int tuapi_b
bcf0: 72 63 74 6c 28 43 6c 69 65 6e 74 44 61 74 61 20  rctl(ClientData 
bd00: 63 64 2c 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  cd, Tcl_Interp *
bd10: 69 6e 74 65 72 70 2c 20 69 6e 74 20 6f 62 6a 63  interp, int objc
bd20: 2c 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54  , Tcl_Obj *CONST
bd30: 20 6f 62 6a 76 5b 5d 29 20 7b 0a 09 69 6e 74 20   objv[]) {..int 
bd40: 73 6f 63 6b 5f 76 34 2c 20 73 6f 63 6b 5f 76 36  sock_v4, sock_v6
bd50: 2c 20 73 6f 63 6b 3b 0a 09 69 6e 74 20 72 65 74  , sock;..int ret
bd60: 76 61 6c 20 3d 20 54 43 4c 5f 45 52 52 4f 52 3b  val = TCL_ERROR;
bd70: 0a 0a 09 73 6f 63 6b 20 3d 20 74 75 61 70 69 5f  ...sock = tuapi_
bd80: 69 6e 74 65 72 6e 61 6c 5f 67 65 74 73 6f 63 6b  internal_getsock
bd90: 28 26 73 6f 63 6b 5f 76 34 2c 20 26 73 6f 63 6b  (&sock_v4, &sock
bda0: 5f 76 36 29 3b 0a 09 69 66 20 28 73 6f 63 6b 20  _v6);..if (sock 
bdb0: 3d 3d 20 2d 31 29 20 7b 0a 09 09 54 63 6c 5f 53  == -1) {...Tcl_S
bdc0: 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
bdd0: 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e  rp, Tcl_NewStrin
bde0: 67 4f 62 6a 28 22 75 6e 61 62 6c 65 20 74 6f 20  gObj("unable to 
bdf0: 63 72 65 61 74 65 20 73 6f 63 6b 65 74 22 2c 20  create socket", 
be00: 2d 31 29 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28  -1));....return(
be10: 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a  TCL_ERROR);..}..
be20: 09 73 77 69 74 63 68 20 28 6f 62 6a 63 29 20 7b  .switch (objc) {
be30: 0a 09 09 63 61 73 65 20 30 3a 0a 09 09 63 61 73  ...case 0:...cas
be40: 65 20 31 3a 20 2f 2a 20 4e 6f 20 61 72 67 75 6d  e 1: /* No argum
be50: 65 6e 74 73 2c 20 6c 69 73 74 20 61 6c 6c 20 62  ents, list all b
be60: 72 69 64 67 65 73 20 2a 2f 0a 09 09 09 72 65 74  ridges */....ret
be70: 76 61 6c 20 3d 20 74 75 61 70 69 5f 62 72 63 74  val = tuapi_brct
be80: 6c 5f 6c 69 73 74 28 63 64 2c 20 69 6e 74 65 72  l_list(cd, inter
be90: 70 2c 20 6f 62 6a 63 2c 20 6f 62 6a 76 2c 20 73  p, objc, objv, s
bea0: 6f 63 6b 29 3b 0a 0a 09 09 09 62 72 65 61 6b 3b  ock);.....break;
beb0: 0a 09 09 64 65 66 61 75 6c 74 3a 0a 09 09 09 2f  ...default:..../
bec0: 2a 20 4f 74 68 65 72 77 69 73 65 2c 20 6d 6f 64  * Otherwise, mod
bed0: 69 66 79 20 72 6f 75 74 65 73 20 2a 2f 0a 09 09  ify routes */...
bee0: 09 72 65 74 76 61 6c 20 3d 20 74 75 61 70 69 5f  .retval = tuapi_
bef0: 62 72 63 74 6c 5f 63 6f 6e 66 28 63 64 2c 20 69  brctl_conf(cd, i
bf00: 6e 74 65 72 70 2c 20 6f 62 6a 63 2c 20 6f 62 6a  nterp, objc, obj
bf10: 76 2c 20 73 6f 63 6b 29 3b 0a 0a 09 09 09 62 72  v, sock);.....br
bf20: 65 61 6b 3b 0a 09 7d 0a 0a 09 2f 2a 20 43 6c 65  eak;..}.../* Cle
bf30: 61 6e 75 70 20 2a 2f 0a 09 69 66 20 28 73 6f 63  anup */..if (soc
bf40: 6b 5f 76 34 20 21 3d 20 2d 31 29 20 7b 0a 09 09  k_v4 != -1) {...
bf50: 63 6c 6f 73 65 28 73 6f 63 6b 5f 76 34 29 3b 0a  close(sock_v4);.
bf60: 09 7d 0a 0a 09 69 66 20 28 73 6f 63 6b 5f 76 36  .}...if (sock_v6
bf70: 20 21 3d 20 2d 31 29 20 7b 0a 09 09 63 6c 6f 73   != -1) {...clos
bf80: 65 28 73 6f 63 6b 5f 76 36 29 3b 0a 09 7d 0a 0a  e(sock_v6);..}..
bf90: 09 72 65 74 75 72 6e 28 72 65 74 76 61 6c 29 3b  .return(retval);
bfa0: 0a 7d 0a 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .}..static int t
bfb0: 75 61 70 69 5f 76 63 6f 6e 66 69 67 28 43 6c 69  uapi_vconfig(Cli
bfc0: 65 6e 74 44 61 74 61 20 63 64 2c 20 54 63 6c 5f  entData cd, Tcl_
bfd0: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20  Interp *interp, 
bfe0: 69 6e 74 20 6f 62 6a 63 2c 20 54 63 6c 5f 4f 62  int objc, Tcl_Ob
bff0: 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 29  j *CONST objv[])
c000: 20 7b 0a 09 69 6e 74 20 73 6f 63 6b 5f 76 34 2c   {..int sock_v4,
c010: 20 73 6f 63 6b 5f 76 36 2c 20 73 6f 63 6b 3b 0a   sock_v6, sock;.
c020: 09 69 6e 74 20 72 65 74 76 61 6c 20 3d 20 54 43  .int retval = TC
c030: 4c 5f 45 52 52 4f 52 3b 0a 0a 09 73 6f 63 6b 20  L_ERROR;...sock 
c040: 3d 20 74 75 61 70 69 5f 69 6e 74 65 72 6e 61 6c  = tuapi_internal
c050: 5f 67 65 74 73 6f 63 6b 28 26 73 6f 63 6b 5f 76  _getsock(&sock_v
c060: 34 2c 20 26 73 6f 63 6b 5f 76 36 29 3b 0a 09 69  4, &sock_v6);..i
c070: 66 20 28 73 6f 63 6b 20 3d 3d 20 2d 31 29 20 7b  f (sock == -1) {
c080: 0a 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73  ...Tcl_SetObjRes
c090: 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ult(interp, Tcl_
c0a0: 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 75 6e  NewStringObj("un
c0b0: 61 62 6c 65 20 74 6f 20 63 72 65 61 74 65 20 73  able to create s
c0c0: 6f 63 6b 65 74 22 2c 20 2d 31 29 29 3b 0a 0a 09  ocket", -1));...
c0d0: 09 72 65 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f  .return(TCL_ERRO
c0e0: 52 29 3b 0a 09 7d 0a 0a 09 54 63 6c 5f 53 65 74  R);..}...Tcl_Set
c0f0: 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70  ObjResult(interp
c100: 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f  , Tcl_NewStringO
c110: 62 6a 28 22 6e 6f 74 20 69 6d 70 6c 65 6d 65 6e  bj("not implemen
c120: 74 65 64 22 2c 20 2d 31 29 29 3b 0a 0a 09 2f 2a  ted", -1));.../*
c130: 20 43 6c 65 61 6e 75 70 20 2a 2f 0a 09 69 66 20   Cleanup */..if 
c140: 28 73 6f 63 6b 5f 76 34 20 21 3d 20 2d 31 29 20  (sock_v4 != -1) 
c150: 7b 0a 09 09 63 6c 6f 73 65 28 73 6f 63 6b 5f 76  {...close(sock_v
c160: 34 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 73 6f 63  4);..}...if (soc
c170: 6b 5f 76 36 20 21 3d 20 2d 31 29 20 7b 0a 09 09  k_v6 != -1) {...
c180: 63 6c 6f 73 65 28 73 6f 63 6b 5f 76 36 29 3b 0a  close(sock_v6);.
c190: 09 7d 0a 0a 09 72 65 74 75 72 6e 28 72 65 74 76  .}...return(retv
c1a0: 61 6c 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 69  al);.}..static i
c1b0: 6e 74 20 74 75 61 70 69 5f 73 74 74 79 28 43 6c  nt tuapi_stty(Cl
c1c0: 69 65 6e 74 44 61 74 61 20 63 64 2c 20 54 63 6c  ientData cd, Tcl
c1d0: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
c1e0: 20 69 6e 74 20 6f 62 6a 63 2c 20 54 63 6c 5f 4f   int objc, Tcl_O
c1f0: 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
c200: 29 20 7b 0a 09 54 63 6c 5f 4f 62 6a 20 2a 6f 62  ) {..Tcl_Obj *ob
c210: 6a 2c 20 2a 72 65 74 6f 62 6a 20 3d 20 4e 55 4c  j, *retobj = NUL
c220: 4c 3b 0a 09 73 74 72 75 63 74 20 74 65 72 6d 69  L;..struct termi
c230: 6f 73 20 74 65 72 6d 69 6e 61 6c 5f 69 6e 66 6f  os terminal_info
c240: 72 6d 61 74 69 6f 6e 3b 0a 09 73 74 72 75 63 74  rmation;..struct
c250: 20 77 69 6e 73 69 7a 65 20 74 65 72 6d 69 6e 61   winsize termina
c260: 6c 5f 73 69 7a 65 3b 0a 09 75 6e 73 69 67 6e 65  l_size;..unsigne
c270: 64 20 6c 6f 6e 67 20 6f 62 6a 5f 68 61 73 68 3b  d long obj_hash;
c280: 0a 09 69 6e 74 20 66 64 2c 20 69 64 78 3b 0a 09  ..int fd, idx;..
c290: 69 6e 74 20 69 6f 63 74 6c 5f 72 65 74 3b 0a 09  int ioctl_ret;..
c2a0: 69 6e 74 20 72 65 74 76 61 6c 20 3d 20 54 43 4c  int retval = TCL
c2b0: 5f 4f 4b 3b 0a 0a 09 66 64 20 3d 20 53 54 44 49  _OK;...fd = STDI
c2c0: 4e 5f 46 49 4c 45 4e 4f 3b 0a 0a 09 66 6f 72 20  N_FILENO;...for 
c2d0: 28 69 64 78 20 3d 20 31 3b 20 69 64 78 20 3c 20  (idx = 1; idx < 
c2e0: 6f 62 6a 63 3b 20 69 64 78 2b 2b 29 20 7b 0a 09  objc; idx++) {..
c2f0: 09 6f 62 6a 20 3d 20 6f 62 6a 76 5b 69 64 78 5d  .obj = objv[idx]
c300: 3b 0a 09 09 6f 62 6a 5f 68 61 73 68 20 3d 20 74  ;...obj_hash = t
c310: 75 61 70 69 5f 69 6e 74 65 72 6e 61 6c 5f 73 69  uapi_internal_si
c320: 6d 70 6c 65 68 61 73 68 5f 6f 62 6a 28 6f 62 6a  mplehash_obj(obj
c330: 29 3b 0a 0a 09 09 73 77 69 74 63 68 20 28 6f 62  );....switch (ob
c340: 6a 5f 68 61 73 68 29 20 7b 0a 09 09 09 63 61 73  j_hash) {....cas
c350: 65 20 30 78 65 37 61 37 64 36 35 3a 20 2f 2a 20  e 0xe7a7d65: /* 
c360: 73 69 7a 65 20 2a 2f 0a 09 09 09 09 69 6f 63 74  size */.....ioct
c370: 6c 5f 72 65 74 20 3d 20 69 6f 63 74 6c 28 66 64  l_ret = ioctl(fd
c380: 2c 20 54 49 4f 43 47 57 49 4e 53 5a 2c 20 26 74  , TIOCGWINSZ, &t
c390: 65 72 6d 69 6e 61 6c 5f 73 69 7a 65 29 3b 0a 09  erminal_size);..
c3a0: 09 09 09 69 66 20 28 69 6f 63 74 6c 5f 72 65 74  ...if (ioctl_ret
c3b0: 20 21 3d 20 30 29 20 7b 0a 09 09 09 09 09 54 63   != 0) {......Tc
c3c0: 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69  l_SetObjResult(i
c3d0: 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74  nterp, Tcl_NewSt
c3e0: 72 69 6e 67 4f 62 6a 28 22 69 6f 63 74 6c 20 66  ringObj("ioctl f
c3f0: 61 69 6c 65 64 22 2c 20 2d 31 29 29 3b 0a 0a 09  ailed", -1));...
c400: 09 09 09 09 72 65 74 75 72 6e 28 54 43 4c 5f 45  ....return(TCL_E
c410: 52 52 4f 52 29 3b 0a 09 09 09 09 7d 0a 0a 09 09  RROR);.....}....
c420: 09 09 69 66 20 28 72 65 74 6f 62 6a 20 3d 3d 20  ..if (retobj == 
c430: 4e 55 4c 4c 29 20 7b 0a 09 09 09 09 09 72 65 74  NULL) {......ret
c440: 6f 62 6a 20 3d 20 54 63 6c 5f 4e 65 77 4f 62 6a  obj = Tcl_NewObj
c450: 28 29 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09 54  ();.....}......T
c460: 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64  cl_ListObjAppend
c470: 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20  Element(interp, 
c480: 72 65 74 6f 62 6a 2c 20 54 63 6c 5f 4e 65 77 4c  retobj, Tcl_NewL
c490: 6f 6e 67 4f 62 6a 28 74 65 72 6d 69 6e 61 6c 5f  ongObj(terminal_
c4a0: 73 69 7a 65 2e 77 73 5f 72 6f 77 29 29 3b 0a 09  size.ws_row));..
c4b0: 09 09 09 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70  ...Tcl_ListObjAp
c4c0: 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65  pendElement(inte
c4d0: 72 70 2c 20 72 65 74 6f 62 6a 2c 20 54 63 6c 5f  rp, retobj, Tcl_
c4e0: 4e 65 77 4c 6f 6e 67 4f 62 6a 28 74 65 72 6d 69  NewLongObj(termi
c4f0: 6e 61 6c 5f 73 69 7a 65 2e 77 73 5f 63 6f 6c 29  nal_size.ws_col)
c500: 29 3b 0a 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09  );......break;..
c510: 09 09 63 61 73 65 20 30 78 35 62 63 62 30 66 37  ..case 0x5bcb0f7
c520: 3a 20 2f 2a 20 2d 72 61 77 20 2a 2f 0a 09 09 09  : /* -raw */....
c530: 63 61 73 65 20 30 78 31 63 62 30 66 37 3a 20 2f  case 0x1cb0f7: /
c540: 2a 20 72 61 77 20 2a 2f 0a 09 09 09 63 61 73 65  * raw */....case
c550: 20 30 78 64 63 62 38 66 35 36 66 3a 20 2f 2a 20   0xdcb8f56f: /* 
c560: 2d 65 63 68 6f 20 2a 2f 0a 09 09 09 63 61 73 65  -echo */....case
c570: 20 30 78 63 62 38 66 34 36 66 3a 20 2f 2a 20 65   0xcb8f46f: /* e
c580: 63 68 6f 20 2a 2f 0a 09 09 09 09 69 6f 63 74 6c  cho */.....ioctl
c590: 5f 72 65 74 20 3d 20 69 6f 63 74 6c 28 66 64 2c  _ret = ioctl(fd,
c5a0: 20 54 43 47 45 54 53 2c 20 26 74 65 72 6d 69 6e   TCGETS, &termin
c5b0: 61 6c 5f 69 6e 66 6f 72 6d 61 74 69 6f 6e 29 3b  al_information);
c5c0: 0a 09 09 09 09 69 66 20 28 69 6f 63 74 6c 5f 72  .....if (ioctl_r
c5d0: 65 74 20 21 3d 20 30 29 20 7b 0a 09 09 09 09 09  et != 0) {......
c5e0: 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
c5f0: 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77  (interp, Tcl_New
c600: 53 74 72 69 6e 67 4f 62 6a 28 22 69 6f 63 74 6c  StringObj("ioctl
c610: 20 66 61 69 6c 65 64 22 2c 20 2d 31 29 29 3b 0a   failed", -1));.
c620: 0a 09 09 09 09 09 72 65 74 75 72 6e 28 54 43 4c  ......return(TCL
c630: 5f 45 52 52 4f 52 29 3b 0a 09 09 09 09 7d 0a 0a  _ERROR);.....}..
c640: 09 09 09 09 73 77 69 74 63 68 20 28 6f 62 6a 5f  ....switch (obj_
c650: 68 61 73 68 29 20 7b 0a 09 09 09 09 09 63 61 73  hash) {......cas
c660: 65 20 30 78 35 62 63 62 30 66 37 3a 20 2f 2a 20  e 0x5bcb0f7: /* 
c670: 2d 72 61 77 20 2a 2f 0a 09 09 09 09 09 09 74 65  -raw */.......te
c680: 72 6d 69 6e 61 6c 5f 69 6e 66 6f 72 6d 61 74 69  rminal_informati
c690: 6f 6e 2e 63 5f 69 66 6c 61 67 20 7c 3d 20 42 52  on.c_iflag |= BR
c6a0: 4b 49 4e 54 20 7c 20 49 47 4e 50 41 52 20 7c 20  KINT | IGNPAR | 
c6b0: 49 53 54 52 49 50 20 7c 20 49 43 52 4e 4c 20 7c  ISTRIP | ICRNL |
c6c0: 20 49 58 4f 4e 3b 0a 09 09 09 09 09 09 74 65 72   IXON;.......ter
c6d0: 6d 69 6e 61 6c 5f 69 6e 66 6f 72 6d 61 74 69 6f  minal_informatio
c6e0: 6e 2e 63 5f 6f 66 6c 61 67 20 7c 3d 20 4f 50 4f  n.c_oflag |= OPO
c6f0: 53 54 3b 0a 09 09 09 09 09 09 74 65 72 6d 69 6e  ST;.......termin
c700: 61 6c 5f 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 63  al_information.c
c710: 5f 6c 66 6c 61 67 20 7c 3d 20 49 53 49 47 20 7c  _lflag |= ISIG |
c720: 20 49 43 41 4e 4f 4e 3b 0a 23 69 66 20 56 4d 49   ICANON;.#if VMI
c730: 4e 20 3d 3d 20 56 45 4f 46 0a 09 09 09 09 09 09  N == VEOF.......
c740: 74 65 72 6d 69 6e 61 6c 5f 69 6e 66 6f 72 6d 61  terminal_informa
c750: 74 69 6f 6e 2e 63 5f 63 63 5b 56 45 4f 46 5d 20  tion.c_cc[VEOF] 
c760: 3d 20 43 45 4f 46 3b 0a 23 65 6e 64 69 66 0a 23  = CEOF;.#endif.#
c770: 69 66 20 56 54 49 4d 45 20 3d 3d 20 56 45 4f 4c  if VTIME == VEOL
c780: 0a 09 09 09 09 09 09 74 65 72 6d 69 6e 61 6c 5f  .......terminal_
c790: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 63 5f 63 63  information.c_cc
c7a0: 5b 56 45 4f 4c 5d 20 3d 20 43 45 4f 4c 3b 0a 23  [VEOL] = CEOL;.#
c7b0: 65 6e 64 69 66 0a 09 09 09 09 09 09 62 72 65 61  endif.......brea
c7c0: 6b 3b 0a 09 09 09 09 09 63 61 73 65 20 30 78 31  k;......case 0x1
c7d0: 63 62 30 66 37 3a 20 2f 2a 20 72 61 77 20 2a 2f  cb0f7: /* raw */
c7e0: 0a 09 09 09 09 09 09 74 65 72 6d 69 6e 61 6c 5f  .......terminal_
c7f0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 63 5f 69 66  information.c_if
c800: 6c 61 67 20 26 3d 20 7e 28 49 47 4e 42 52 4b 20  lag &= ~(IGNBRK 
c810: 7c 20 42 52 4b 49 4e 54 20 7c 20 50 41 52 4d 52  | BRKINT | PARMR
c820: 4b 20 7c 20 49 53 54 52 49 50 20 7c 20 49 4e 4c  K | ISTRIP | INL
c830: 43 52 20 7c 20 49 47 4e 43 52 20 7c 20 49 43 52  CR | IGNCR | ICR
c840: 4e 4c 20 7c 20 49 58 4f 4e 29 3b 0a 09 09 09 09  NL | IXON);.....
c850: 09 09 74 65 72 6d 69 6e 61 6c 5f 69 6e 66 6f 72  ..terminal_infor
c860: 6d 61 74 69 6f 6e 2e 63 5f 6f 66 6c 61 67 20 26  mation.c_oflag &
c870: 3d 20 7e 4f 50 4f 53 54 3b 0a 09 09 09 09 09 09  = ~OPOST;.......
c880: 74 65 72 6d 69 6e 61 6c 5f 69 6e 66 6f 72 6d 61  terminal_informa
c890: 74 69 6f 6e 2e 63 5f 6c 66 6c 61 67 20 26 3d 20  tion.c_lflag &= 
c8a0: 7e 28 49 53 49 47 20 7c 20 49 43 41 4e 4f 4e 29  ~(ISIG | ICANON)
c8b0: 3b 0a 09 09 09 09 09 09 74 65 72 6d 69 6e 61 6c  ;.......terminal
c8c0: 5f 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 63 5f 63  _information.c_c
c8d0: 63 5b 56 4d 49 4e 5d 20 3d 20 31 3b 0a 09 09 09  c[VMIN] = 1;....
c8e0: 09 09 09 74 65 72 6d 69 6e 61 6c 5f 69 6e 66 6f  ...terminal_info
c8f0: 72 6d 61 74 69 6f 6e 2e 63 5f 63 63 5b 56 54 49  rmation.c_cc[VTI
c900: 4d 45 5d 20 3d 20 30 3b 0a 09 09 09 09 09 09 62  ME] = 0;.......b
c910: 72 65 61 6b 3b 0a 09 09 09 09 09 63 61 73 65 20  reak;......case 
c920: 30 78 64 63 62 38 66 35 36 66 3a 20 2f 2a 20 2d  0xdcb8f56f: /* -
c930: 65 63 68 6f 20 2a 2f 0a 09 09 09 09 09 09 74 65  echo */.......te
c940: 72 6d 69 6e 61 6c 5f 69 6e 66 6f 72 6d 61 74 69  rminal_informati
c950: 6f 6e 2e 63 5f 6c 66 6c 61 67 20 26 3d 20 7e 45  on.c_lflag &= ~E
c960: 43 48 4f 3b 0a 09 09 09 09 09 09 62 72 65 61 6b  CHO;.......break
c970: 3b 0a 09 09 09 09 09 63 61 73 65 20 30 78 63 62  ;......case 0xcb
c980: 38 66 34 36 66 3a 20 2f 2a 20 65 63 68 6f 20 2a  8f46f: /* echo *
c990: 2f 0a 09 09 09 09 09 09 74 65 72 6d 69 6e 61 6c  /.......terminal
c9a0: 5f 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 63 5f 6c  _information.c_l
c9b0: 66 6c 61 67 20 7c 3d 20 45 43 48 4f 3b 0a 09 09  flag |= ECHO;...
c9c0: 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 7d  ....break;.....}
c9d0: 0a 0a 09 09 09 09 69 6f 63 74 6c 5f 72 65 74 20  ......ioctl_ret 
c9e0: 3d 20 69 6f 63 74 6c 28 66 64 2c 20 54 43 53 45  = ioctl(fd, TCSE
c9f0: 54 53 2c 20 26 74 65 72 6d 69 6e 61 6c 5f 69 6e  TS, &terminal_in
ca00: 66 6f 72 6d 61 74 69 6f 6e 29 3b 0a 09 09 09 09  formation);.....
ca10: 69 66 20 28 69 6f 63 74 6c 5f 72 65 74 20 21 3d  if (ioctl_ret !=
ca20: 20 30 29 20 7b 0a 09 09 09 09 09 54 63 6c 5f 53   0) {......Tcl_S
ca30: 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
ca40: 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e  rp, Tcl_NewStrin
ca50: 67 4f 62 6a 28 22 69 6f 63 74 6c 20 66 61 69 6c  gObj("ioctl fail
ca60: 65 64 22 2c 20 2d 31 29 29 3b 0a 0a 09 09 09 09  ed", -1));......
ca70: 09 72 65 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f  .return(TCL_ERRO
ca80: 52 29 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09 62  R);.....}......b
ca90: 72 65 61 6b 3b 0a 09 09 09 64 65 66 61 75 6c 74  reak;....default
caa0: 3a 0a 09 09 09 09 54 63 6c 5f 53 65 74 4f 62 6a  :.....Tcl_SetObj
cab0: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54  Result(interp, T
cac0: 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28  cl_NewStringObj(
cad0: 22 73 75 62 63 6f 6d 6d 61 6e 64 20 6e 6f 74 20  "subcommand not 
cae0: 69 6d 70 6c 65 6d 65 6e 74 65 64 22 2c 20 2d 31  implemented", -1
caf0: 29 29 3b 0a 09 09 09 09 72 65 74 75 72 6e 28 54  ));.....return(T
cb00: 43 4c 5f 45 52 52 4f 52 29 3b 0a 09 09 7d 0a 09  CL_ERROR);...}..
cb10: 7d 0a 0a 09 69 66 20 28 72 65 74 6f 62 6a 20 21  }...if (retobj !
cb20: 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 54 63 6c 5f  = NULL) {...Tcl_
cb30: 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74  SetObjResult(int
cb40: 65 72 70 2c 20 72 65 74 6f 62 6a 29 3b 0a 09 7d  erp, retobj);..}
cb50: 0a 0a 09 72 65 74 75 72 6e 28 72 65 74 76 61 6c  ...return(retval
cb60: 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 69 6e 74  );.}..static int
cb70: 20 74 75 61 70 69 5f 72 6c 69 6d 69 74 28 43 6c   tuapi_rlimit(Cl
cb80: 69 65 6e 74 44 61 74 61 20 63 64 2c 20 54 63 6c  ientData cd, Tcl
cb90: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
cba0: 20 69 6e 74 20 6f 62 6a 63 2c 20 54 63 6c 5f 4f   int objc, Tcl_O
cbb0: 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
cbc0: 29 20 7b 0a 09 54 63 6c 5f 4f 62 6a 20 2a 6f 70  ) {..Tcl_Obj *op
cbd0: 65 72 61 74 69 6f 6e 5f 6f 62 6a 2c 20 2a 72 65  eration_obj, *re
cbe0: 73 6f 75 72 63 65 5f 69 64 5f 6f 62 6a 2c 20 2a  source_id_obj, *
cbf0: 72 65 73 6f 75 72 63 65 5f 76 61 6c 5f 69 74 65  resource_val_ite
cc00: 6d 5f 6f 62 6a 2c 20 2a 72 65 73 6f 75 72 63 65  m_obj, *resource
cc10: 5f 76 61 6c 5f 69 74 65 6d 76 61 6c 5f 6f 62 6a  _val_itemval_obj
cc20: 2c 20 2a 72 65 74 5f 6f 62 6a 3b 0a 09 73 74 72  , *ret_obj;..str
cc30: 75 63 74 20 72 6c 69 6d 69 74 20 72 65 73 6f 75  uct rlimit resou
cc40: 72 63 65 5f 76 61 6c 3b 0a 09 54 63 6c 5f 57 69  rce_val;..Tcl_Wi
cc50: 64 65 49 6e 74 20 72 65 73 6f 75 72 63 65 5f 76  deInt resource_v
cc60: 61 6c 5f 69 74 65 6d 3b 0a 09 69 6e 74 20 72 65  al_item;..int re
cc70: 73 6f 75 72 63 65 5f 69 64 3b 0a 09 69 6e 74 20  source_id;..int 
cc80: 72 6c 69 6d 69 74 5f 72 65 74 2c 20 74 63 6c 5f  rlimit_ret, tcl_
cc90: 72 65 74 3b 0a 0a 09 69 66 20 28 6f 62 6a 63 20  ret;...if (objc 
cca0: 3c 20 33 29 20 7b 0a 09 09 54 63 6c 5f 53 65 74  < 3) {...Tcl_Set
ccb0: 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70  ObjResult(interp
ccc0: 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f  , Tcl_NewStringO
ccd0: 62 6a 28 22 77 72 6f 6e 67 20 23 20 61 72 67 73  bj("wrong # args
cce0: 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 3a 3a  : should be \"::
ccf0: 74 75 61 70 69 3a 3a 73 79 73 63 61 6c 6c 3a 3a  tuapi::syscall::
cd00: 72 6c 69 6d 69 74 20 6f 70 65 72 61 74 69 6f 6e  rlimit operation
cd10: 20 72 65 73 6f 75 72 63 65 20 3f 76 61 6c 75 65   resource ?value
cd20: 3f 5c 22 22 2c 20 2d 31 29 29 3b 0a 0a 09 09 72  ?\"", -1));....r
cd30: 65 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29  eturn(TCL_ERROR)
cd40: 3b 0a 09 7d 0a 0a 09 6f 70 65 72 61 74 69 6f 6e  ;..}...operation
cd50: 5f 6f 62 6a 20 3d 20 6f 62 6a 76 5b 31 5d 3b 0a  _obj = objv[1];.
cd60: 09 72 65 73 6f 75 72 63 65 5f 69 64 5f 6f 62 6a  .resource_id_obj
cd70: 20 3d 20 6f 62 6a 76 5b 32 5d 3b 0a 0a 09 73 77   = objv[2];...sw
cd80: 69 74 63 68 20 28 74 75 61 70 69 5f 69 6e 74 65  itch (tuapi_inte
cd90: 72 6e 61 6c 5f 73 69 6d 70 6c 65 68 61 73 68 5f  rnal_simplehash_
cda0: 6f 62 6a 28 72 65 73 6f 75 72 63 65 5f 69 64 5f  obj(resource_id_
cdb0: 6f 62 6a 29 29 20 7b 0a 09 09 63 61 73 65 20 30  obj)) {...case 0
cdc0: 78 32 30 64 33 4c 55 3a 20 2f 2a 20 41 53 20 2a  x20d3LU: /* AS *
cdd0: 2f 0a 09 09 09 72 65 73 6f 75 72 63 65 5f 69 64  /....resource_id
cde0: 20 3d 20 52 4c 49 4d 49 54 5f 41 53 3b 0a 09 09   = RLIMIT_AS;...
cdf0: 09 62 72 65 61 6b 3b 0a 09 09 63 61 73 65 20 30  .break;...case 0
ce00: 78 38 37 33 65 39 34 35 4c 55 3a 20 2f 2a 20 43  x873e945LU: /* C
ce10: 4f 52 45 20 2a 2f 0a 09 09 09 72 65 73 6f 75 72  ORE */....resour
ce20: 63 65 5f 69 64 20 3d 20 52 4c 49 4d 49 54 5f 43  ce_id = RLIMIT_C
ce30: 4f 52 45 3b 0a 09 09 09 62 72 65 61 6b 3b 0a 09  ORE;....break;..
ce40: 09 63 61 73 65 20 30 78 31 30 65 38 35 35 4c 55  .case 0x10e855LU
ce50: 3a 20 2f 2a 20 43 50 55 20 2a 2f 0a 09 09 09 72  : /* CPU */....r
ce60: 65 73 6f 75 72 63 65 5f 69 64 20 3d 20 52 4c 49  esource_id = RLI
ce70: 4d 49 54 5f 43 50 55 3b 0a 09 09 09 62 72 65 61  MIT_CPU;....brea
ce80: 6b 3b 0a 09 09 63 61 73 65 20 30 78 38 39 30 36  k;...case 0x8906
ce90: 61 34 31 4c 55 3a 20 2f 2a 20 44 41 54 41 20 2a  a41LU: /* DATA *
cea0: 2f 0a 09 09 09 72 65 73 6f 75 72 63 65 5f 69 64  /....resource_id
ceb0: 20 3d 20 52 4c 49 4d 49 54 5f 44 41 54 41 3b 0a   = RLIMIT_DATA;.
cec0: 09 09 09 62 72 65 61 6b 3b 0a 09 09 63 61 73 65  ...break;...case
ced0: 20 30 78 36 61 37 32 36 66 34 35 4c 55 3a 20 2f   0x6a726f45LU: /
cee0: 2a 20 46 53 49 5a 45 20 2a 2f 0a 09 09 09 72 65  * FSIZE */....re
cef0: 73 6f 75 72 63 65 5f 69 64 20 3d 20 52 4c 49 4d  source_id = RLIM
cf00: 49 54 5f 46 53 49 5a 45 3b 0a 09 09 09 62 72 65  IT_FSIZE;....bre
cf10: 61 6b 3b 0a 23 69 66 64 65 66 20 52 4c 49 4d 49  ak;.#ifdef RLIMI
cf20: 54 5f 4c 4f 43 4b 53 0a 09 09 63 61 73 65 20 30  T_LOCKS...case 0
cf30: 78 63 39 66 30 65 37 64 33 4c 55 3a 20 2f 2a 20  xc9f0e7d3LU: /* 
cf40: 4c 4f 43 4b 53 20 2a 2f 0a 09 09 09 72 65 73 6f  LOCKS */....reso
cf50: 75 72 63 65 5f 69 64 20 3d 20 52 4c 49 4d 49 54  urce_id = RLIMIT
cf60: 5f 4c 4f 43 4b 53 3b 0a 09 09 09 62 72 65 61 6b  _LOCKS;....break
cf70: 3b 0a 23 65 6e 64 69 66 0a 09 09 63 61 73 65 20  ;.#endif...case 
cf80: 30 78 64 39 30 38 66 37 63 62 4c 55 3a 20 2f 2a  0xd908f7cbLU: /*
cf90: 20 4d 45 4d 4c 4f 43 4b 20 2a 2f 0a 09 09 09 72   MEMLOCK */....r
cfa0: 65 73 6f 75 72 63 65 5f 69 64 20 3d 20 52 4c 49  esource_id = RLI
cfb0: 4d 49 54 5f 4d 45 4d 4c 4f 43 4b 3b 0a 09 09 09  MIT_MEMLOCK;....
cfc0: 62 72 65 61 6b 3b 0a 23 69 66 64 65 66 20 52 4c  break;.#ifdef RL
cfd0: 49 4d 49 54 5f 4d 53 47 51 55 45 55 45 0a 09 09  IMIT_MSGQUEUE...
cfe0: 63 61 73 65 20 30 78 35 37 31 36 37 34 34 35 4c  case 0x57167445L
cff0: 55 3a 20 2f 2a 20 4d 53 47 51 55 45 55 45 20 2a  U: /* MSGQUEUE *
d000: 2f 0a 09 09 09 72 65 73 6f 75 72 63 65 5f 69 64  /....resource_id
d010: 20 3d 20 52 4c 49 4d 49 54 5f 4d 53 47 51 55 45   = RLIMIT_MSGQUE
d020: 55 45 3b 0a 09 09 09 62 72 65 61 6b 3b 0a 23 65  UE;....break;.#e
d030: 6e 64 69 66 0a 09 09 63 61 73 65 20 30 78 39 64  ndif...case 0x9d
d040: 32 36 31 63 35 4c 55 3a 20 2f 2a 20 4e 49 43 45  261c5LU: /* NICE
d050: 20 2a 2f 0a 09 09 09 72 65 73 6f 75 72 63 65 5f   */....resource_
d060: 69 64 20 3d 20 52 4c 49 4d 49 54 5f 4e 49 43 45  id = RLIMIT_NICE
d070: 3b 0a 09 09 09 62 72 65 61 6b 3b 0a 09 09 63 61  ;....break;...ca
d080: 73 65 20 30 78 66 38 64 33 35 63 34 35 4c 55 3a  se 0xf8d35c45LU:
d090: 20 2f 2a 20 4e 4f 46 49 4c 45 20 2a 2f 0a 09 09   /* NOFILE */...
d0a0: 63 61 73 65 20 30 78 66 38 64 32 36 34 34 35 4c  case 0xf8d26445L
d0b0: 55 3a 20 2f 2a 20 4f 46 49 4c 45 20 2a 2f 0a 09  U: /* OFILE */..
d0c0: 09 09 72 65 73 6f 75 72 63 65 5f 69 64 20 3d 20  ..resource_id = 
d0d0: 52 4c 49 4d 49 54 5f 4e 4f 46 49 4c 45 3b 0a 09  RLIMIT_NOFILE;..
d0e0: 09 09 62 72 65 61 6b 3b 0a 09 09 63 61 73 65 20  ..break;...case 
d0f0: 30 78 65 61 31 34 61 35 63 33 4c 55 3a 20 2f 2a  0xea14a5c3LU: /*
d100: 20 4e 50 52 4f 43 20 2a 2f 0a 09 09 09 72 65 73   NPROC */....res
d110: 6f 75 72 63 65 5f 69 64 20 3d 20 52 4c 49 4d 49  ource_id = RLIMI
d120: 54 5f 4e 50 52 4f 43 3b 0a 09 09 09 62 72 65 61  T_NPROC;....brea
d130: 6b 3b 0a 09 09 63 61 73 65 20 30 78 31 34 61 39  k;...case 0x14a9
d140: 64 33 4c 55 3a 20 2f 2a 20 52 53 53 20 2a 2f 0a  d3LU: /* RSS */.
d150: 09 09 09 72 65 73 6f 75 72 63 65 5f 69 64 20 3d  ...resource_id =
d160: 20 52 4c 49 4d 49 54 5f 52 53 53 3b 0a 09 09 09   RLIMIT_RSS;....
d170: 62 72 65 61 6b 3b 0a 23 69 66 64 65 66 20 52 4c  break;.#ifdef RL
d180: 49 4d 49 54 5f 52 54 50 52 49 4f 0a 09 09 63 61  IMIT_RTPRIO...ca
d190: 73 65 20 30 78 34 61 31 35 65 65 34 66 4c 55 3a  se 0x4a15ee4fLU:
d1a0: 20 2f 2a 20 52 54 50 52 49 4f 20 2a 2f 0a 09 09   /* RTPRIO */...
d1b0: 09 72 65 73 6f 75 72 63 65 5f 69 64 20 3d 20 52  .resource_id = R
d1c0: 4c 49 4d 49 54 5f 52 54 50 52 49 4f 3b 0a 09 09  LIMIT_RTPRIO;...
d1d0: 09 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 23  .break;.#endif.#
d1e0: 69 66 64 65 66 20 52 4c 49 4d 49 54 5f 52 54 54  ifdef RLIMIT_RTT
d1f0: 49 4d 45 0a 09 09 63 61 73 65 20 30 78 34 61 39  IME...case 0x4a9
d200: 33 32 63 34 35 4c 55 3a 20 2f 2a 20 52 54 54 49  32c45LU: /* RTTI
d210: 4d 45 20 2a 2f 0a 09 09 09 72 65 73 6f 75 72 63  ME */....resourc
d220: 65 5f 69 64 20 3d 20 52 4c 49 4d 49 54 5f 52 54  e_id = RLIMIT_RT
d230: 54 49 4d 45 3b 0a 09 09 09 62 72 65 61 6b 3b 0a  TIME;....break;.
d240: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 52 4c  #endif.#ifdef RL
d250: 49 4d 49 54 5f 53 49 47 50 45 4e 44 49 4e 47 0a  IMIT_SIGPENDING.
d260: 09 09 63 61 73 65 20 30 78 32 66 33 39 30 33 34  ..case 0x2f39034
d270: 37 4c 55 3a 20 2f 2a 20 53 49 47 50 45 4e 44 49  7LU: /* SIGPENDI
d280: 4e 47 20 2a 2f 0a 09 09 09 72 65 73 6f 75 72 63  NG */....resourc
d290: 65 5f 69 64 20 3d 20 52 4c 49 4d 49 54 5f 53 49  e_id = RLIMIT_SI
d2a0: 47 50 45 4e 44 49 4e 47 3b 0a 09 09 09 62 72 65  GPENDING;....bre
d2b0: 61 6b 3b 0a 23 65 6e 64 69 66 0a 09 09 63 61 73  ak;.#endif...cas
d2c0: 65 20 30 78 33 61 39 30 36 33 34 62 4c 55 3a 20  e 0x3a90634bLU: 
d2d0: 2f 2a 20 53 54 41 43 4b 20 2a 2f 0a 09 09 09 72  /* STACK */....r
d2e0: 65 73 6f 75 72 63 65 5f 69 64 20 3d 20 52 4c 49  esource_id = RLI
d2f0: 4d 49 54 5f 53 54 41 43 4b 3b 0a 09 09 09 62 72  MIT_STACK;....br
d300: 65 61 6b 3b 0a 09 09 64 65 66 61 75 6c 74 3a 0a  eak;...default:.
d310: 09 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73  ...Tcl_SetObjRes
d320: 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ult(interp, Tcl_
d330: 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 69 6e  NewStringObj("in
d340: 76 61 6c 69 64 20 72 65 73 6f 75 72 63 65 22 2c  valid resource",
d350: 20 2d 31 29 29 3b 0a 0a 09 09 09 72 65 74 75 72   -1));.....retur
d360: 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d  n(TCL_ERROR);..}
d370: 0a 0a 09 69 66 20 28 73 74 72 63 6d 70 28 54 63  ...if (strcmp(Tc
d380: 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 70 65 72  l_GetString(oper
d390: 61 74 69 6f 6e 5f 6f 62 6a 29 2c 20 22 67 65 74  ation_obj), "get
d3a0: 22 29 20 3d 3d 20 30 29 20 7b 0a 09 09 69 66 20  ") == 0) {...if 
d3b0: 28 6f 62 6a 63 20 21 3d 20 33 29 20 7b 0a 09 09  (objc != 3) {...
d3c0: 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c  .Tcl_SetObjResul
d3d0: 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65  t(interp, Tcl_Ne
d3e0: 77 53 74 72 69 6e 67 4f 62 6a 28 22 77 72 6f 6e  wStringObj("wron
d3f0: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
d400: 20 62 65 20 5c 22 3a 3a 74 75 61 70 69 3a 3a 73   be \"::tuapi::s
d410: 79 73 63 61 6c 6c 3a 3a 72 6c 69 6d 69 74 20 67  yscall::rlimit g
d420: 65 74 20 72 65 73 6f 75 72 63 65 5c 22 22 2c 20  et resource\"", 
d430: 2d 31 29 29 3b 0a 0a 09 09 09 72 65 74 75 72 6e  -1));.....return
d440: 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 09 09 7d  (TCL_ERROR);...}
d450: 0a 0a 09 09 72 6c 69 6d 69 74 5f 72 65 74 20 3d  ....rlimit_ret =
d460: 20 67 65 74 72 6c 69 6d 69 74 28 72 65 73 6f 75   getrlimit(resou
d470: 72 63 65 5f 69 64 2c 20 26 72 65 73 6f 75 72 63  rce_id, &resourc
d480: 65 5f 76 61 6c 29 3b 0a 09 09 69 66 20 28 72 6c  e_val);...if (rl
d490: 69 6d 69 74 5f 72 65 74 20 21 3d 20 30 29 20 7b  imit_ret != 0) {
d4a0: 0a 09 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65  ....Tcl_SetObjRe
d4b0: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c  sult(interp, Tcl
d4c0: 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 67  _NewStringObj("g
d4d0: 65 74 72 6c 69 6d 69 74 28 29 20 66 61 69 6c 65  etrlimit() faile
d4e0: 64 22 2c 20 2d 31 29 29 3b 0a 0a 09 09 09 72 65  d", -1));.....re
d4f0: 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b  turn(TCL_ERROR);
d500: 0a 09 09 7d 0a 0a 09 09 72 65 74 5f 6f 62 6a 20  ...}....ret_obj 
d510: 3d 20 54 63 6c 5f 4e 65 77 4f 62 6a 28 29 3b 0a  = Tcl_NewObj();.
d520: 09 09 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70  ..Tcl_ListObjApp
d530: 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72  endElement(inter
d540: 70 2c 20 72 65 74 5f 6f 62 6a 2c 20 54 63 6c 5f  p, ret_obj, Tcl_
d550: 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 73 6f  NewStringObj("so
d560: 66 74 22 2c 20 2d 31 29 29 3b 0a 09 09 54 63 6c  ft", -1));...Tcl
d570: 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c  _ListObjAppendEl
d580: 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 72 65  ement(interp, re
d590: 74 5f 6f 62 6a 2c 20 54 63 6c 5f 4e 65 77 57 69  t_obj, Tcl_NewWi
d5a0: 64 65 49 6e 74 4f 62 6a 28 72 65 73 6f 75 72 63  deIntObj(resourc
d5b0: 65 5f 76 61 6c 2e 72 6c 69 6d 5f 63 75 72 29 29  e_val.rlim_cur))
d5c0: 3b 0a 09 09 54 63 6c 5f 4c 69 73 74 4f 62 6a 41  ;...Tcl_ListObjA
d5d0: 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74  ppendElement(int
d5e0: 65 72 70 2c 20 72 65 74 5f 6f 62 6a 2c 20 54 63  erp, ret_obj, Tc
d5f0: 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22  l_NewStringObj("
d600: 68 61 72 64 22 2c 20 2d 31 29 29 3b 0a 09 09 54  hard", -1));...T
d610: 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64  cl_ListObjAppend
d620: 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20  Element(interp, 
d630: 72 65 74 5f 6f 62 6a 2c 20 54 63 6c 5f 4e 65 77  ret_obj, Tcl_New
d640: 57 69 64 65 49 6e 74 4f 62 6a 28 72 65 73 6f 75  WideIntObj(resou
d650: 72 63 65 5f 76 61 6c 2e 72 6c 69 6d 5f 6d 61 78  rce_val.rlim_max
d660: 29 29 3b 0a 0a 09 09 54 63 6c 5f 53 65 74 4f 62  ));....Tcl_SetOb
d670: 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  jResult(interp, 
d680: 72 65 74 5f 6f 62 6a 29 3b 0a 0a 09 09 72 65 74  ret_obj);....ret
d690: 75 72 6e 28 54 43 4c 5f 4f 4b 29 3b 0a 09 7d 0a  urn(TCL_OK);..}.
d6a0: 0a 09 69 66 20 28 73 74 72 63 6d 70 28 54 63 6c  ..if (strcmp(Tcl
d6b0: 5f 47 65 74 53 74 72 69 6e 67 28 6f 70 65 72 61  _GetString(opera
d6c0: 74 69 6f 6e 5f 6f 62 6a 29 2c 20 22 73 65 74 22  tion_obj), "set"
d6d0: 29 20 3d 3d 20 30 29 20 7b 0a 09 09 69 66 20 28  ) == 0) {...if (
d6e0: 6f 62 6a 63 20 21 3d 20 34 29 20 7b 0a 09 09 09  objc != 4) {....
d6f0: 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
d700: 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77  (interp, Tcl_New
d710: 53 74 72 69 6e 67 4f 62 6a 28 22 77 72 6f 6e 67  StringObj("wrong
d720: 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
d730: 62 65 20 5c 22 3a 3a 74 75 61 70 69 3a 3a 73 79  be \"::tuapi::sy
d740: 73 63 61 6c 6c 3a 3a 72 6c 69 6d 69 74 20 73 65  scall::rlimit se
d750: 74 20 72 65 73 6f 75 72 63 65 20 76 61 6c 75 65  t resource value
d760: 5c 22 22 2c 20 2d 31 29 29 3b 0a 0a 09 09 09 72  \"", -1));.....r
d770: 65 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29  eturn(TCL_ERROR)
d780: 3b 0a 09 09 7d 0a 0a 09 09 72 65 73 6f 75 72 63  ;...}....resourc
d790: 65 5f 76 61 6c 5f 69 74 65 6d 5f 6f 62 6a 20 3d  e_val_item_obj =
d7a0: 20 6f 62 6a 76 5b 33 5d 3b 0a 0a 09 09 2f 2a 20   objv[3];..../* 
d7b0: 44 65 74 65 72 6d 69 6e 65 20 69 66 20 77 65 20  Determine if we 
d7c0: 77 65 72 65 20 61 73 6b 65 64 20 74 6f 20 73 65  were asked to se
d7d0: 74 20 74 6f 20 61 20 73 69 6d 70 6c 65 20 76 61  t to a simple va
d7e0: 6c 75 65 2c 20 69 6e 20 77 68 69 63 68 20 63 61  lue, in which ca
d7f0: 73 65 20 73 65 74 20 62 6f 74 68 20 68 61 72 64  se set both hard
d800: 20 61 6e 64 20 73 6f 66 74 20 6c 69 6d 69 74 73   and soft limits
d810: 20 2a 2f 0a 09 09 74 63 6c 5f 72 65 74 20 3d 20   */...tcl_ret = 
d820: 54 63 6c 5f 47 65 74 57 69 64 65 49 6e 74 46 72  Tcl_GetWideIntFr
d830: 6f 6d 4f 62 6a 28 4e 55 4c 4c 2c 20 72 65 73 6f  omObj(NULL, reso
d840: 75 72 63 65 5f 76 61 6c 5f 69 74 65 6d 5f 6f 62  urce_val_item_ob
d850: 6a 2c 20 26 72 65 73 6f 75 72 63 65 5f 76 61 6c  j, &resource_val
d860: 5f 69 74 65 6d 29 3b 0a 09 09 69 66 20 28 74 63  _item);...if (tc
d870: 6c 5f 72 65 74 20 3d 3d 20 54 43 4c 5f 4f 4b 29  l_ret == TCL_OK)
d880: 20 7b 0a 09 09 09 72 65 73 6f 75 72 63 65 5f 76   {....resource_v
d890: 61 6c 2e 72 6c 69 6d 5f 63 75 72 20 3d 20 72 65  al.rlim_cur = re
d8a0: 73 6f 75 72 63 65 5f 76 61 6c 5f 69 74 65 6d 3b  source_val_item;
d8b0: 0a 09 09 09 72 65 73 6f 75 72 63 65 5f 76 61 6c  ....resource_val
d8c0: 2e 72 6c 69 6d 5f 6d 61 78 20 3d 20 72 65 73 6f  .rlim_max = reso
d8d0: 75 72 63 65 5f 76 61 6c 5f 69 74 65 6d 3b 0a 09  urce_val_item;..
d8e0: 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 74 63 6c  .} else {....tcl
d8f0: 5f 72 65 74 20 3d 20 54 63 6c 5f 44 69 63 74 4f  _ret = Tcl_DictO
d900: 62 6a 47 65 74 28 4e 55 4c 4c 2c 20 72 65 73 6f  bjGet(NULL, reso
d910: 75 72 63 65 5f 76 61 6c 5f 69 74 65 6d 5f 6f 62  urce_val_item_ob
d920: 6a 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67  j, Tcl_NewString
d930: 4f 62 6a 28 22 73 6f 66 74 22 2c 20 2d 31 29 2c  Obj("soft", -1),
d940: 20 26 72 65 73 6f 75 72 63 65 5f 76 61 6c 5f 69   &resource_val_i
d950: 74 65 6d 76 61 6c 5f 6f 62 6a 29 3b 0a 09 09 09  temval_obj);....
d960: 69 66 20 28 74 63 6c 5f 72 65 74 20 21 3d 20 54  if (tcl_ret != T
d970: 43 4c 5f 4f 4b 29 20 7b 0a 09 09 09 09 54 63 6c  CL_OK) {.....Tcl
d980: 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e  _SetObjResult(in
d990: 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72  terp, Tcl_NewStr
d9a0: 69 6e 67 4f 62 6a 28 22 69 6e 76 61 6c 69 64 20  ingObj("invalid 
d9b0: 72 65 71 75 65 73 74 22 2c 20 2d 31 29 29 3b 0a  request", -1));.
d9c0: 0a 09 09 09 09 72 65 74 75 72 6e 28 54 43 4c 5f  .....return(TCL_
d9d0: 45 52 52 4f 52 29 3b 0a 09 09 09 7d 0a 0a 09 09  ERROR);....}....
d9e0: 09 74 63 6c 5f 72 65 74 20 3d 20 54 63 6c 5f 47  .tcl_ret = Tcl_G
d9f0: 65 74 57 69 64 65 49 6e 74 46 72 6f 6d 4f 62 6a  etWideIntFromObj
da00: 28 4e 55 4c 4c 2c 20 72 65 73 6f 75 72 63 65 5f  (NULL, resource_
da10: 76 61 6c 5f 69 74 65 6d 76 61 6c 5f 6f 62 6a 2c  val_itemval_obj,
da20: 20 26 72 65 73 6f 75 72 63 65 5f 76 61 6c 5f 69   &resource_val_i
da30: 74 65 6d 29 3b 0a 09 09 09 69 66 20 28 74 63 6c  tem);....if (tcl
da40: 5f 72 65 74 20 21 3d 20 54 43 4c 5f 4f 4b 29 20  _ret != TCL_OK) 
da50: 7b 0a 09 09 09 09 54 63 6c 5f 53 65 74 4f 62 6a  {.....Tcl_SetObj
da60: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54  Result(interp, T
da70: 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28  cl_NewStringObj(
da80: 22 69 6e 76 61 6c 69 64 20 72 65 71 75 65 73 74  "invalid request
da90: 22 2c 20 2d 31 29 29 3b 0a 0a 09 09 09 09 72 65  ", -1));......re
daa0: 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b  turn(TCL_ERROR);
dab0: 0a 09 09 09 7d 0a 0a 09 09 09 72 65 73 6f 75 72  ....}.....resour
dac0: 63 65 5f 76 61 6c 2e 72 6c 69 6d 5f 63 75 72 20  ce_val.rlim_cur 
dad0: 3d 20 72 65 73 6f 75 72 63 65 5f 76 61 6c 5f 69  = resource_val_i
dae0: 74 65 6d 3b 0a 0a 09 09 09 74 63 6c 5f 72 65 74  tem;.....tcl_ret
daf0: 20 3d 20 54 63 6c 5f 44 69 63 74 4f 62 6a 47 65   = Tcl_DictObjGe
db00: 74 28 4e 55 4c 4c 2c 20 72 65 73 6f 75 72 63 65  t(NULL, resource
db10: 5f 76 61 6c 5f 69 74 65 6d 5f 6f 62 6a 2c 20 54  _val_item_obj, T
db20: 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28  cl_NewStringObj(
db30: 22 68 61 72 64 22 2c 20 2d 31 29 2c 20 26 72 65  "hard", -1), &re
db40: 73 6f 75 72 63 65 5f 76 61 6c 5f 69 74 65 6d 76  source_val_itemv
db50: 61 6c 5f 6f 62 6a 29 3b 0a 09 09 09 69 66 20 28  al_obj);....if (
db60: 74 63 6c 5f 72 65 74 20 21 3d 20 54 43 4c 5f 4f  tcl_ret != TCL_O
db70: 4b 29 20 7b 0a 09 09 09 09 54 63 6c 5f 53 65 74  K) {.....Tcl_Set
db80: 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70  ObjResult(interp
db90: 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f  , Tcl_NewStringO
dba0: 62 6a 28 22 69 6e 76 61 6c 69 64 20 72 65 71 75  bj("invalid requ
dbb0: 65 73 74 22 2c 20 2d 31 29 29 3b 0a 0a 09 09 09  est", -1));.....
dbc0: 09 72 65 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f  .return(TCL_ERRO
dbd0: 52 29 3b 0a 09 09 09 7d 0a 0a 09 09 09 74 63 6c  R);....}.....tcl
dbe0: 5f 72 65 74 20 3d 20 54 63 6c 5f 47 65 74 57 69  _ret = Tcl_GetWi
dbf0: 64 65 49 6e 74 46 72 6f 6d 4f 62 6a 28 4e 55 4c  deIntFromObj(NUL
dc00: 4c 2c 20 72 65 73 6f 75 72 63 65 5f 76 61 6c 5f  L, resource_val_
dc10: 69 74 65 6d 76 61 6c 5f 6f 62 6a 2c 20 26 72 65  itemval_obj, &re
dc20: 73 6f 75 72 63 65 5f 76 61 6c 5f 69 74 65 6d 29  source_val_item)
dc30: 3b 0a 09 09 09 69 66 20 28 74 63 6c 5f 72 65 74  ;....if (tcl_ret
dc40: 20 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a 09 09   != TCL_OK) {...
dc50: 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75  ..Tcl_SetObjResu
dc60: 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e  lt(interp, Tcl_N
dc70: 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 69 6e 76  ewStringObj("inv
dc80: 61 6c 69 64 20 72 65 71 75 65 73 74 22 2c 20 2d  alid request", -
dc90: 31 29 29 3b 0a 0a 09 09 09 09 72 65 74 75 72 6e  1));......return
dca0: 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 09 09 09  (TCL_ERROR);....
dcb0: 7d 0a 0a 09 09 09 72 65 73 6f 75 72 63 65 5f 76  }.....resource_v
dcc0: 61 6c 2e 72 6c 69 6d 5f 6d 61 78 20 3d 20 72 65  al.rlim_max = re
dcd0: 73 6f 75 72 63 65 5f 76 61 6c 5f 69 74 65 6d 3b  source_val_item;
dce0: 0a 09 09 7d 0a 0a 09 09 72 6c 69 6d 69 74 5f 72  ...}....rlimit_r
dcf0: 65 74 20 3d 20 73 65 74 72 6c 69 6d 69 74 28 72  et = setrlimit(r
dd00: 65 73 6f 75 72 63 65 5f 69 64 2c 20 26 72 65 73  esource_id, &res
dd10: 6f 75 72 63 65 5f 76 61 6c 29 3b 0a 09 09 69 66  ource_val);...if
dd20: 20 28 72 6c 69 6d 69 74 5f 72 65 74 20 21 3d 20   (rlimit_ret != 
dd30: 30 29 20 7b 0a 09 09 09 54 63 6c 5f 53 65 74 4f  0) {....Tcl_SetO
dd40: 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  bjResult(interp,
dd50: 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62   Tcl_NewStringOb
dd60: 6a 28 22 73 65 74 72 6c 69 6d 69 74 28 29 20 66  j("setrlimit() f
dd70: 61 69 6c 65 64 22 2c 20 2d 31 29 29 3b 0a 0a 09  ailed", -1));...
dd80: 09 09 72 65 74 75 72 6e 28 54 43 4c 5f 45 52 52  ..return(TCL_ERR
dd90: 4f 52 29 3b 0a 09 09 7d 0a 0a 09 09 72 65 74 75  OR);...}....retu
dda0: 72 6e 28 54 43 4c 5f 4f 4b 29 3b 0a 09 7d 0a 0a  rn(TCL_OK);..}..
ddb0: 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c  .Tcl_SetObjResul
ddc0: 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65  t(interp, Tcl_Ne
ddd0: 77 53 74 72 69 6e 67 4f 62 6a 28 22 69 6e 76 61  wStringObj("inva
dde0: 6c 69 64 20 6f 70 65 72 61 74 69 6f 6e 22 2c 20  lid operation", 
ddf0: 2d 31 29 29 3b 0a 0a 09 72 65 74 75 72 6e 28 54  -1));...return(T
de00: 43 4c 5f 45 52 52 4f 52 29 3b 0a 7d 0a 0a 73 74  CL_ERROR);.}..st
de10: 61 74 69 63 20 69 6e 74 20 74 75 61 70 69 5f 6b  atic int tuapi_k
de20: 6c 6f 67 63 74 6c 28 43 6c 69 65 6e 74 44 61 74  logctl(ClientDat
de30: 61 20 63 64 2c 20 54 63 6c 5f 49 6e 74 65 72 70  a cd, Tcl_Interp
de40: 20 2a 69 6e 74 65 72 70 2c 20 69 6e 74 20 6f 62   *interp, int ob
de50: 6a 63 2c 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  jc, Tcl_Obj *CON
de60: 53 54 20 6f 62 6a 76 5b 5d 29 20 7b 0a 09 54 63  ST objv[]) {..Tc
de70: 6c 5f 4f 62 6a 20 2a 6f 70 65 72 61 74 69 6f 6e  l_Obj *operation
de80: 5f 6f 62 6a 3b 0a 09 63 68 61 72 20 2a 62 75 66  _obj;..char *buf
de90: 3b 0a 09 69 6e 74 20 62 75 66 6c 65 6e 3b 0a 09  ;..int buflen;..
dea0: 69 6e 74 20 6b 6c 6f 67 5f 72 65 74 3b 0a 0a 09  int klog_ret;...
deb0: 69 66 20 28 6f 62 6a 63 20 3c 20 32 29 20 7b 0a  if (objc < 2) {.
dec0: 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75  ..Tcl_SetObjResu
ded0: 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e  lt(interp, Tcl_N
dee0: 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 77 72 6f  ewStringObj("wro
def0: 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
df00: 64 20 62 65 20 5c 22 3a 3a 74 75 61 70 69 3a 3a  d be \"::tuapi::
df10: 73 79 73 63 61 6c 6c 3a 3a 6b 6c 6f 67 63 74 6c  syscall::klogctl
df20: 20 6f 70 65 72 61 74 69 6f 6e 20 2e 2e 2e 5c 22   operation ...\"
df30: 22 2c 20 2d 31 29 29 3b 0a 0a 09 09 72 65 74 75  ", -1));....retu
df40: 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 09  rn(TCL_ERROR);..
df50: 7d 0a 0a 09 6b 6c 6f 67 5f 72 65 74 20 3d 20 6b  }...klog_ret = k
df60: 6c 6f 67 63 74 6c 28 53 59 53 4c 4f 47 5f 41 43  logctl(SYSLOG_AC
df70: 54 49 4f 4e 5f 4f 50 45 4e 2c 20 4e 55 4c 4c 2c  TION_OPEN, NULL,
df80: 20 30 29 3b 0a 09 69 66 20 28 6b 6c 6f 67 5f 72   0);..if (klog_r
df90: 65 74 20 21 3d 20 30 29 20 7b 0a 09 09 54 63 6c  et != 0) {...Tcl
dfa0: 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e  _SetObjResult(in
dfb0: 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72  terp, Tcl_NewStr
dfc0: 69 6e 67 4f 62 6a 28 22 6b 6c 6f 67 63 74 6c 28  ingObj("klogctl(
dfd0: 53 59 53 4c 4f 47 5f 41 43 54 49 4f 4e 5f 4f 50  SYSLOG_ACTION_OP
dfe0: 45 4e 2c 20 2e 2e 2e 29 20 66 61 69 6c 65 64 22  EN, ...) failed"
dff0: 2c 20 2d 31 29 29 3b 0a 09 09 72 65 74 75 72 6e  , -1));...return
e000: 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a  (TCL_ERROR);..}.
e010: 0a 09 6f 70 65 72 61 74 69 6f 6e 5f 6f 62 6a 20  ..operation_obj 
e020: 3d 20 6f 62 6a 76 5b 31 5d 3b 0a 09 73 77 69 74  = objv[1];..swit
e030: 63 68 20 28 74 75 61 70 69 5f 69 6e 74 65 72 6e  ch (tuapi_intern
e040: 61 6c 5f 73 69 6d 70 6c 65 68 61 73 68 5f 6f 62  al_simplehash_ob
e050: 6a 28 6f 70 65 72 61 74 69 6f 6e 5f 6f 62 6a 29  j(operation_obj)
e060: 29 20 7b 0a 09 09 63 61 73 65 20 30 78 65 35 39  ) {...case 0xe59
e070: 37 30 65 34 4c 55 3a 20 2f 2a 20 72 65 61 64 20  70e4LU: /* read 
e080: 2a 2f 0a 09 09 09 62 75 66 6c 65 6e 20 3d 20 32  */....buflen = 2
e090: 35 36 20 2a 20 31 30 32 34 3b 0a 09 09 09 62 75  56 * 1024;....bu
e0a0: 66 20 3d 20 6d 61 6c 6c 6f 63 28 62 75 66 6c 65  f = malloc(bufle
e0b0: 6e 29 3b 0a 09 09 09 69 66 20 28 62 75 66 20 3d  n);....if (buf =
e0c0: 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 09 09 54 63  = NULL) {.....Tc
e0d0: 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69  l_SetObjResult(i
e0e0: 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74  nterp, Tcl_NewSt
e0f0: 72 69 6e 67 4f 62 6a 28 22 6d 61 6c 6c 6f 63 20  ringObj("malloc 
e100: 66 61 69 6c 65 64 20 21 22 2c 20 2d 31 29 29 3b  failed !", -1));
e110: 0a 0a 09 09 09 09 72 65 74 75 72 6e 28 54 43 4c  ......return(TCL
e120: 5f 45 52 52 4f 52 29 3b 0a 09 09 09 7d 0a 0a 09  _ERROR);....}...
e130: 09 09 6b 6c 6f 67 5f 72 65 74 20 3d 20 6b 6c 6f  ..klog_ret = klo
e140: 67 63 74 6c 28 53 59 53 4c 4f 47 5f 41 43 54 49  gctl(SYSLOG_ACTI
e150: 4f 4e 5f 52 45 41 44 5f 41 4c 4c 2c 20 62 75 66  ON_READ_ALL, buf
e160: 2c 20 62 75 66 6c 65 6e 29 3b 0a 09 09 09 69 66  , buflen);....if
e170: 20 28 6b 6c 6f 67 5f 72 65 74 20 3d 3d 20 2d 31   (klog_ret == -1
e180: 29 20 7b 0a 09 09 09 09 66 72 65 65 28 62 75 66  ) {.....free(buf
e190: 29 3b 0a 0a 09 09 09 09 54 63 6c 5f 53 65 74 4f  );......Tcl_SetO
e1a0: 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  bjResult(interp,
e1b0: 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62   Tcl_NewStringOb
e1c0: 6a 28 22 6b 6c 6f 67 63 74 6c 28 53 59 53 4c 4f  j("klogctl(SYSLO
e1d0: 47 5f 41 43 54 49 4f 4e 5f 52 45 41 44 5f 41 4c  G_ACTION_READ_AL
e1e0: 4c 2c 20 2e 2e 2e 29 20 66 61 69 6c 65 64 22 2c  L, ...) failed",
e1f0: 20 2d 31 29 29 3b 0a 0a 09 09 09 09 72 65 74 75   -1));......retu
e200: 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 09  rn(TCL_ERROR);..
e210: 09 09 7d 0a 0a 09 09 09 54 63 6c 5f 53 65 74 4f  ..}.....Tcl_SetO
e220: 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  bjResult(interp,
e230: 20 54 63 6c 5f 4e 65 77 42 79 74 65 41 72 72 61   Tcl_NewByteArra
e240: 79 4f 62 6a 28 28 75 6e 73 69 67 6e 65 64 20 63  yObj((unsigned c
e250: 68 61 72 20 2a 29 20 62 75 66 2c 20 6b 6c 6f 67  har *) buf, klog
e260: 5f 72 65 74 29 29 3b 0a 0a 09 09 09 66 72 65 65  _ret));.....free
e270: 28 62 75 66 29 3b 0a 0a 09 09 09 72 65 74 75 72  (buf);.....retur
e280: 6e 28 54 43 4c 5f 4f 4b 29 3b 0a 09 09 63 61 73  n(TCL_OK);...cas
e290: 65 20 30 78 33 64 39 39 37 33 66 32 4c 55 3a 20  e 0x3d9973f2LU: 
e2a0: 2f 2a 20 63 6c 65 61 72 20 2a 2f 0a 09 09 09 6b  /* clear */....k
e2b0: 6c 6f 67 5f 72 65 74 20 3d 20 6b 6c 6f 67 63 74  log_ret = klogct
e2c0: 6c 28 53 59 53 4c 4f 47 5f 41 43 54 49 4f 4e 5f  l(SYSLOG_ACTION_
e2d0: 43 4c 45 41 52 2c 20 4e 55 4c 4c 2c 20 30 29 3b  CLEAR, NULL, 0);
e2e0: 0a 09 09 09 69 66 20 28 6b 6c 6f 67 5f 72 65 74  ....if (klog_ret
e2f0: 20 3d 3d 20 2d 31 29 20 7b 0a 09 09 09 09 54 63   == -1) {.....Tc
e300: 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69  l_SetObjResult(i
e310: 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74  nterp, Tcl_NewSt
e320: 72 69 6e 67 4f 62 6a 28 22 6b 6c 6f 67 63 74 6c  ringObj("klogctl
e330: 28 53 59 53 4c 4f 47 5f 41 43 54 49 4f 4e 5f 43  (SYSLOG_ACTION_C
e340: 4c 45 41 52 2c 20 2e 2e 2e 29 20 66 61 69 6c 65  LEAR, ...) faile
e350: 64 22 2c 20 2d 31 29 29 3b 0a 0a 09 09 09 09 72  d", -1));......r
e360: 65 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29  eturn(TCL_ERROR)
e370: 3b 0a 09 09 09 7d 0a 0a 09 09 09 72 65 74 75 72  ;....}.....retur
e380: 6e 28 54 43 4c 5f 4f 4b 29 3b 0a 09 09 63 61 73  n(TCL_OK);...cas
e390: 65 20 30 78 32 32 35 63 33 33 36 65 4c 55 3a 20  e 0x225c336eLU: 
e3a0: 2f 2a 20 63 6f 6e 73 6f 6c 65 5f 6f 6e 20 2a 2f  /* console_on */
e3b0: 0a 09 09 09 6b 6c 6f 67 5f 72 65 74 20 3d 20 6b  ....klog_ret = k
e3c0: 6c 6f 67 63 74 6c 28 53 59 53 4c 4f 47 5f 41 43  logctl(SYSLOG_AC
e3d0: 54 49 4f 4e 5f 43 4f 4e 53 4f 4c 45 5f 4f 4e 2c  TION_CONSOLE_ON,
e3e0: 20 4e 55 4c 4c 2c 20 30 29 3b 0a 09 09 09 69 66   NULL, 0);....if
e3f0: 20 28 6b 6c 6f 67 5f 72 65 74 20 3d 3d 20 2d 31   (klog_ret == -1
e400: 29 20 7b 0a 09 09 09 09 54 63 6c 5f 53 65 74 4f  ) {.....Tcl_SetO
e410: 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  bjResult(interp,
e420: 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62   Tcl_NewStringOb
e430: 6a 28 22 6b 6c 6f 67 63 74 6c 28 53 59 53 4c 4f  j("klogctl(SYSLO
e440: 47 5f 41 43 54 49 4f 4e 5f 43 4f 4e 53 4f 4c 45  G_ACTION_CONSOLE
e450: 5f 4f 4e 2c 20 2e 2e 2e 29 20 66 61 69 6c 65 64  _ON, ...) failed
e460: 22 2c 20 2d 31 29 29 3b 0a 0a 09 09 09 09 72 65  ", -1));......re
e470: 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b  turn(TCL_ERROR);
e480: 0a 09 09 09 7d 0a 0a 09 09 09 72 65 74 75 72 6e  ....}.....return
e490: 28 54 43 4c 5f 4f 4b 29 3b 0a 09 09 63 61 73 65  (TCL_OK);...case
e4a0: 20 30 78 32 65 31 39 62 62 65 36 4c 55 3a 20 2f   0x2e19bbe6LU: /
e4b0: 2a 20 63 6f 6e 73 6f 6c 65 5f 6f 66 66 20 2a 2f  * console_off */
e4c0: 0a 09 09 09 6b 6c 6f 67 5f 72 65 74 20 3d 20 6b  ....klog_ret = k
e4d0: 6c 6f 67 63 74 6c 28 53 59 53 4c 4f 47 5f 41 43  logctl(SYSLOG_AC
e4e0: 54 49 4f 4e 5f 43 4f 4e 53 4f 4c 45 5f 4f 46 46  TION_CONSOLE_OFF
e4f0: 2c 20 4e 55 4c 4c 2c 20 30 29 3b 0a 09 09 09 69  , NULL, 0);....i
e500: 66 20 28 6b 6c 6f 67 5f 72 65 74 20 3d 3d 20 2d  f (klog_ret == -
e510: 31 29 20 7b 0a 09 09 09 09 54 63 6c 5f 53 65 74  1) {.....Tcl_Set
e520: 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70  ObjResult(interp
e530: 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f  , Tcl_NewStringO
e540: 62 6a 28 22 6b 6c 6f 67 63 74 6c 28 53 59 53 4c  bj("klogctl(SYSL
e550: 4f 47 5f 41 43 54 49 4f 4e 5f 43 4f 4e 53 4f 4c  OG_ACTION_CONSOL
e560: 45 5f 4f 46 46 2c 20 2e 2e 2e 29 20 66 61 69 6c  E_OFF, ...) fail
e570: 65 64 22 2c 20 2d 31 29 29 3b 0a 0a 09 09 09 09  ed", -1));......
e580: 72 65 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52  return(TCL_ERROR
e590: 29 3b 0a 09 09 09 7d 0a 0a 09 09 09 72 65 74 75  );....}.....retu
e5a0: 72 6e 28 54 43 4c 5f 4f 4b 29 3b 0a 09 7d 0a 0a  rn(TCL_OK);..}..
e5b0: 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c  .Tcl_SetObjResul
e5c0: 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65  t(interp, Tcl_Ne
e5d0: 77 53 74 72 69 6e 67 4f 62 6a 28 22 69 6e 76 61  wStringObj("inva
e5e0: 6c 69 64 20 73 75 62 63 6f 6d 6d 61 6e 64 22 2c  lid subcommand",
e5f0: 20 2d 31 29 29 3b 0a 0a 09 72 65 74 75 72 6e 28   -1));...return(
e600: 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 7d 0a 0a 73  TCL_ERROR);.}..s
e610: 74 61 74 69 63 20 69 6e 74 20 74 75 61 70 69 5f  tatic int tuapi_
e620: 77 61 69 74 70 69 64 28 43 6c 69 65 6e 74 44 61  waitpid(ClientDa
e630: 74 61 20 63 64 2c 20 54 63 6c 5f 49 6e 74 65 72  ta cd, Tcl_Inter
e640: 70 20 2a 69 6e 74 65 72 70 2c 20 69 6e 74 20 6f  p *interp, int o
e650: 62 6a 63 2c 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  bjc, Tcl_Obj *CO
e660: 4e 53 54 20 6f 62 6a 76 5b 5d 29 20 7b 0a 09 70  NST objv[]) {..p
e670: 69 64 5f 74 20 63 68 69 6c 64 3b 0a 09 69 6e 74  id_t child;..int
e680: 20 73 74 61 74 75 73 3b 0a 0a 09 63 68 69 6c 64   status;...child
e690: 20 3d 20 77 61 69 74 70 69 64 28 2d 31 2c 20 26   = waitpid(-1, &
e6a0: 73 74 61 74 75 73 2c 20 57 4e 4f 48 41 4e 47 29  status, WNOHANG)
e6b0: 3b 0a 09 69 66 20 28 63 68 69 6c 64 20 3c 20 30  ;..if (child < 0
e6c0: 29 20 7b 0a 09 09 69 66 20 28 65 72 72 6e 6f 20  ) {...if (errno 
e6d0: 21 3d 20 45 43 48 49 4c 44 29 20 7b 0a 09 09 09  != ECHILD) {....
e6e0: 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
e6f0: 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77  (interp, Tcl_New
e700: 53 74 72 69 6e 67 4f 62 6a 28 73 74 72 65 72 72  StringObj(strerr
e710: 6f 72 28 65 72 72 6e 6f 29 2c 20 2d 31 29 29 3b  or(errno), -1));
e720: 0a 0a 09 09 09 72 65 74 75 72 6e 28 54 43 4c 5f  .....return(TCL_
e730: 45 52 52 4f 52 29 3b 0a 09 09 7d 20 65 6c 73 65  ERROR);...} else
e740: 20 7b 0a 09 09 09 63 68 69 6c 64 20 3d 20 30 3b   {....child = 0;
e750: 0a 09 09 7d 0a 09 7d 0a 0a 09 69 66 20 28 63 68  ...}..}...if (ch
e760: 69 6c 64 20 21 3d 20 30 29 20 7b 0a 09 09 54 63  ild != 0) {...Tc
e770: 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69  l_SetObjResult(i
e780: 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 57 69  nterp, Tcl_NewWi
e790: 64 65 49 6e 74 4f 62 6a 28 63 68 69 6c 64 29 29  deIntObj(child))
e7a0: 3b 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 28 54 43  ;..}...return(TC
e7b0: 4c 5f 4f 4b 29 3b 0a 7d 0a 0a 73 74 61 74 69 63  L_OK);.}..static
e7c0: 20 69 6e 74 20 74 75 61 70 69 5f 73 65 74 74 69   int tuapi_setti
e7d0: 6d 65 6f 66 64 61 79 28 43 6c 69 65 6e 74 44 61  meofday(ClientDa
e7e0: 74 61 20 63 64 2c 20 54 63 6c 5f 49 6e 74 65 72  ta cd, Tcl_Inter
e7f0: 70 20 2a 69 6e 74 65 72 70 2c 20 69 6e 74 20 6f  p *interp, int o
e800: 62 6a 63 2c 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  bjc, Tcl_Obj *CO
e810: 4e 53 54 20 6f 62 6a 76 5b 5d 29 20 7b 0a 09 73  NST objv[]) {..s
e820: 74 72 75 63 74 20 74 69 6d 65 76 61 6c 20 74 76  truct timeval tv
e830: 3b 0a 09 54 63 6c 5f 57 69 64 65 49 6e 74 20 74  ;..Tcl_WideInt t
e840: 76 5f 73 65 63 5f 76 61 6c 2c 20 74 76 5f 75 73  v_sec_val, tv_us
e850: 65 63 5f 76 61 6c 3b 0a 09 69 6e 74 20 73 65 74  ec_val;..int set
e860: 74 69 6d 65 6f 66 64 61 79 5f 72 65 74 2c 20 74  timeofday_ret, t
e870: 63 6c 5f 72 65 74 3b 0a 0a 09 69 66 20 28 6f 62  cl_ret;...if (ob
e880: 6a 63 20 21 3d 20 33 29 20 7b 0a 09 09 54 63 6c  jc != 3) {...Tcl
e890: 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e  _SetObjResult(in
e8a0: 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72  terp, Tcl_NewStr
e8b0: 69 6e 67 4f 62 6a 28 22 77 72 6f 6e 67 20 23 20  ingObj("wrong # 
e8c0: 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
e8d0: 5c 22 3a 3a 74 75 61 70 69 3a 3a 73 79 73 63 61  \"::tuapi::sysca
e8e0: 6c 6c 3a 3a 73 65 74 74 69 6d 65 6f 66 64 61 79  ll::settimeofday
e8f0: 20 73 65 63 6f 6e 64 73 20 6d 69 63 72 6f 73 65   seconds microse
e900: 63 6f 6e 64 73 5c 22 22 2c 20 2d 31 29 29 3b 0a  conds\"", -1));.
e910: 0a 09 09 72 65 74 75 72 6e 28 54 43 4c 5f 45 52  ...return(TCL_ER
e920: 52 4f 52 29 3b 0a 09 7d 0a 0a 09 74 63 6c 5f 72  ROR);..}...tcl_r
e930: 65 74 20 3d 20 54 63 6c 5f 47 65 74 57 69 64 65  et = Tcl_GetWide
e940: 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72  IntFromObj(inter
e950: 70 2c 20 6f 62 6a 76 5b 31 5d 2c 20 26 74 76 5f  p, objv[1], &tv_
e960: 73 65 63 5f 76 61 6c 29 3b 0a 09 69 66 20 28 74  sec_val);..if (t
e970: 63 6c 5f 72 65 74 20 21 3d 20 54 43 4c 5f 4f 4b  cl_ret != TCL_OK
e980: 29 20 7b 0a 09 09 72 65 74 75 72 6e 28 74 63 6c  ) {...return(tcl
e990: 5f 72 65 74 29 3b 0a 09 7d 0a 0a 09 74 63 6c 5f  _ret);..}...tcl_
e9a0: 72 65 74 20 3d 20 54 63 6c 5f 47 65 74 57 69 64  ret = Tcl_GetWid
e9b0: 65 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65  eIntFromObj(inte
e9c0: 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 74 76  rp, objv[2], &tv
e9d0: 5f 75 73 65 63 5f 76 61 6c 29 3b 0a 09 69 66 20  _usec_val);..if 
e9e0: 28 74 63 6c 5f 72 65 74 20 21 3d 20 54 43 4c 5f  (tcl_ret != TCL_
e9f0: 4f 4b 29 20 7b 0a 09 09 72 65 74 75 72 6e 28 74  OK) {...return(t
ea00: 63 6c 5f 72 65 74 29 3b 0a 09 7d 0a 0a 09 74 76  cl_ret);..}...tv
ea10: 2e 74 76 5f 73 65 63 20 3d 20 74 76 5f 73 65 63  .tv_sec = tv_sec
ea20: 5f 76 61 6c 3b 0a 09 74 76 2e 74 76 5f 75 73 65  _val;..tv.tv_use
ea30: 63 20 3d 20 74 76 5f 75 73 65 63 5f 76 61 6c 3b  c = tv_usec_val;
ea40: 20 0a 0a 09 73 65 74 74 69 6d 65 6f 66 64 61 79   ...settimeofday
ea50: 5f 72 65 74 20 3d 20 73 65 74 74 69 6d 65 6f 66  _ret = settimeof
ea60: 64 61 79 28 26 74 76 2c 20 4e 55 4c 4c 29 3b 0a  day(&tv, NULL);.
ea70: 0a 09 69 66 20 28 73 65 74 74 69 6d 65 6f 66 64  ..if (settimeofd
ea80: 61 79 5f 72 65 74 20 3c 20 30 29 20 7b 0a 09 09  ay_ret < 0) {...
ea90: 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
eaa0: 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77  (interp, Tcl_New
eab0: 53 74 72 69 6e 67 4f 62 6a 28 73 74 72 65 72 72  StringObj(strerr
eac0: 6f 72 28 65 72 72 6e 6f 29 2c 20 2d 31 29 29 3b  or(errno), -1));
ead0: 0a 0a 09 09 72 65 74 75 72 6e 28 54 43 4c 5f 45  ....return(TCL_E
eae0: 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 72 65 74 75  RROR);..}...retu
eaf0: 72 6e 28 54 43 4c 5f 4f 4b 29 3b 0a 7d 0a 0a 23  rn(TCL_OK);.}..#
eb00: 69 66 6e 64 65 66 20 44 49 53 41 42 4c 45 5f 55  ifndef DISABLE_U
eb10: 4e 49 58 5f 53 4f 43 4b 45 54 53 0a 73 74 72 75  NIX_SOCKETS.stru
eb20: 63 74 20 74 75 61 70 69 5f 73 6f 63 6b 65 74 5f  ct tuapi_socket_
eb30: 75 6e 69 78 5f 5f 63 68 61 6e 5f 69 64 20 7b 0a  unix__chan_id {.
eb40: 09 69 6e 74 20 66 64 3b 0a 09 54 63 6c 5f 43 68  .int fd;..Tcl_Ch
eb50: 61 6e 6e 65 6c 20 63 68 61 6e 3b 0a 7d 3b 0a 0a  annel chan;.};..
eb60: 73 74 61 74 69 63 20 69 6e 74 20 74 75 61 70 69  static int tuapi
eb70: 5f 73 6f 63 6b 65 74 5f 75 6e 69 78 5f 5f 63 68  _socket_unix__ch
eb80: 61 6e 5f 63 6c 6f 73 65 28 43 6c 69 65 6e 74 44  an_close(ClientD
eb90: 61 74 61 20 69 64 5f 70 2c 20 54 63 6c 5f 49 6e  ata id_p, Tcl_In
eba0: 74 65 72 70 20 2a 69 6e 74 65 72 70 29 20 7b 0a  terp *interp) {.
ebb0: 09 73 74 72 75 63 74 20 74 75 61 70 69 5f 73 6f  .struct tuapi_so
ebc0: 63 6b 65 74 5f 75 6e 69 78 5f 5f 63 68 61 6e 5f  cket_unix__chan_
ebd0: 69 64 20 2a 69 64 3b 0a 09 69 6e 74 20 66 64 3b  id *id;..int fd;
ebe0: 0a 0a 09 69 64 20 3d 20 69 64 5f 70 3b 0a 0a 09  ...id = id_p;...
ebf0: 66 64 20 3d 20 69 64 2d 3e 66 64 3b 0a 0a 09 63  fd = id->fd;...c
ec00: 6c 6f 73 65 28 66 64 29 3b 0a 0a 09 66 72 65 65  lose(fd);...free
ec10: 28 69 64 29 3b 0a 0a 09 72 65 74 75 72 6e 28 30  (id);...return(0
ec20: 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 69 6e 74  );.}..static int
ec30: 20 74 75 61 70 69 5f 73 6f 63 6b 65 74 5f 75 6e   tuapi_socket_un
ec40: 69 78 5f 5f 63 68 61 6e 5f 72 65 61 64 28 43 6c  ix__chan_read(Cl
ec50: 69 65 6e 74 44 61 74 61 20 69 64 5f 70 2c 20 63  ientData id_p, c
ec60: 68 61 72 20 2a 62 75 66 2c 20 69 6e 74 20 62 75  har *buf, int bu
ec70: 66 73 69 7a 65 2c 20 69 6e 74 20 2a 65 72 72 6f  fsize, int *erro
ec80: 72 43 6f 64 65 50 74 72 29 20 7b 0a 09 73 74 72  rCodePtr) {..str
ec90: 75 63 74 20 74 75 61 70 69 5f 73 6f 63 6b 65 74  uct tuapi_socket
eca0: 5f 75 6e 69 78 5f 5f 63 68 61 6e 5f 69 64 20 2a  _unix__chan_id *
ecb0: 69 64 3b 0a 09 73 73 69 7a 65 5f 74 20 72 65 61  id;..ssize_t rea
ecc0: 64 5f 72 65 74 3b 0a 09 69 6e 74 20 66 64 3b 0a  d_ret;..int fd;.
ecd0: 09 69 6e 74 20 72 65 74 76 61 6c 3b 0a 0a 09 69  .int retval;...i
ece0: 64 20 3d 20 69 64 5f 70 3b 0a 0a 09 66 64 20 3d  d = id_p;...fd =
ecf0: 20 69 64 2d 3e 66 64 3b 0a 0a 09 72 65 61 64 5f   id->fd;...read_
ed00: 72 65 74 20 3d 20 72 65 61 64 28 66 64 2c 20 62  ret = read(fd, b
ed10: 75 66 2c 20 62 75 66 73 69 7a 65 29 3b 0a 09 69  uf, bufsize);..i
ed20: 66 20 28 72 65 61 64 5f 72 65 74 20 3c 20 30 29  f (read_ret < 0)
ed30: 20 7b 0a 09 09 2a 65 72 72 6f 72 43 6f 64 65 50   {...*errorCodeP
ed40: 74 72 20 3d 20 65 72 72 6e 6f 3b 0a 0a 09 09 72  tr = errno;....r
ed50: 65 74 75 72 6e 28 2d 31 29 3b 0a 09 7d 0a 0a 09  eturn(-1);..}...
ed60: 72 65 74 76 61 6c 20 3d 20 72 65 61 64 5f 72 65  retval = read_re
ed70: 74 3b 0a 0a 09 72 65 74 75 72 6e 28 72 65 74 76  t;...return(retv
ed80: 61 6c 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 69  al);.}..static i
ed90: 6e 74 20 74 75 61 70 69 5f 73 6f 63 6b 65 74 5f  nt tuapi_socket_
eda0: 75 6e 69 78 5f 5f 63 68 61 6e 5f 77 72 69 74 65  unix__chan_write
edb0: 28 43 6c 69 65 6e 74 44 61 74 61 20 69 64 5f 70  (ClientData id_p
edc0: 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 62 75  , const char *bu
edd0: 66 2c 20 69 6e 74 20 74 6f 57 72 69 74 65 2c 20  f, int toWrite, 
ede0: 69 6e 74 20 2a 65 72 72 6f 72 43 6f 64 65 50 74  int *errorCodePt
edf0: 72 29 20 7b 0a 09 73 74 72 75 63 74 20 74 75 61  r) {..struct tua
ee00: 70 69 5f 73 6f 63 6b 65 74 5f 75 6e 69 78 5f 5f  pi_socket_unix__
ee10: 63 68 61 6e 5f 69 64 20 2a 69 64 3b 0a 09 73 73  chan_id *id;..ss
ee20: 69 7a 65 5f 74 20 77 72 69 74 65 5f 72 65 74 3b  ize_t write_ret;
ee30: 0a 09 69 6e 74 20 66 64 3b 0a 09 69 6e 74 20 62  ..int fd;..int b
ee40: 79 74 65 73 57 72 69 74 74 65 6e 3b 0a 0a 09 69  ytesWritten;...i
ee50: 64 20 3d 20 69 64 5f 70 3b 0a 0a 09 66 64 20 3d  d = id_p;...fd =
ee60: 20 69 64 2d 3e 66 64 3b 0a 0a 09 62 79 74 65 73   id->fd;...bytes
ee70: 57 72 69 74 74 65 6e 20 3d 20 30 3b 0a 09 77 68  Written = 0;..wh
ee80: 69 6c 65 20 28 74 6f 57 72 69 74 65 29 20 7b 0a  ile (toWrite) {.
ee90: 09 09 77 72 69 74 65 5f 72 65 74 20 3d 20 77 72  ..write_ret = wr
eea0: 69 74 65 28 66 64 2c 20 62 75 66 2c 20 74 6f 57  ite(fd, buf, toW
eeb0: 72 69 74 65 29 3b 0a 09 09 69 66 20 28 77 72 69  rite);...if (wri
eec0: 74 65 5f 72 65 74 20 3d 3d 20 30 29 20 7b 0a 09  te_ret == 0) {..
eed0: 09 09 62 72 65 61 6b 3b 0a 09 09 7d 0a 0a 09 09  ..break;...}....
eee0: 69 66 20 28 77 72 69 74 65 5f 72 65 74 20 3c 20  if (write_ret < 
eef0: 30 29 20 7b 0a 09 09 09 2a 65 72 72 6f 72 43 6f  0) {....*errorCo
ef00: 64 65 50 74 72 20 3d 20 65 72 72 6e 6f 3b 0a 0a  dePtr = errno;..
ef10: 09 09 09 72 65 74 75 72 6e 28 2d 31 29 3b 0a 09  ...return(-1);..
ef20: 09 7d 0a 0a 09 09 74 6f 57 72 69 74 65 20 2d 3d  .}....toWrite -=
ef30: 20 77 72 69 74 65 5f 72 65 74 3b 0a 09 09 62 75   write_ret;...bu
ef40: 66 20 2b 3d 20 77 72 69 74 65 5f 72 65 74 3b 0a  f += write_ret;.
ef50: 09 09 62 79 74 65 73 57 72 69 74 74 65 6e 20 2b  ..bytesWritten +
ef60: 3d 20 77 72 69 74 65 5f 72 65 74 3b 0a 09 7d 0a  = write_ret;..}.
ef70: 0a 09 69 66 20 28 62 79 74 65 73 57 72 69 74 74  ..if (bytesWritt
ef80: 65 6e 20 3d 3d 20 30 29 20 7b 0a 09 09 2a 65 72  en == 0) {...*er
ef90: 72 6f 72 43 6f 64 65 50 74 72 20 3d 20 45 41 47  rorCodePtr = EAG
efa0: 41 49 4e 3b 0a 0a 09 09 72 65 74 75 72 6e 28 2d  AIN;....return(-
efb0: 31 29 3b 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 28  1);..}...return(
efc0: 62 79 74 65 73 57 72 69 74 74 65 6e 29 3b 0a 7d  bytesWritten);.}
efd0: 0a 0a 73 74 61 74 69 63 20 76 6f 69 64 20 74 75  ..static void tu
efe0: 61 70 69 5f 73 6f 63 6b 65 74 5f 75 6e 69 78 5f  api_socket_unix_
eff0: 5f 63 68 61 6e 5f 65 76 65 6e 74 68 61 6e 64 6c  _chan_eventhandl
f000: 65 72 28 43 6c 69 65 6e 74 44 61 74 61 20 69 64  er(ClientData id
f010: 5f 70 2c 20 69 6e 74 20 6d 61 73 6b 29 20 7b 0a  _p, int mask) {.
f020: 09 73 74 72 75 63 74 20 74 75 61 70 69 5f 73 6f  .struct tuapi_so
f030: 63 6b 65 74 5f 75 6e 69 78 5f 5f 63 68 61 6e 5f  cket_unix__chan_
f040: 69 64 20 2a 69 64 3b 0a 09 54 63 6c 5f 43 68 61  id *id;..Tcl_Cha
f050: 6e 6e 65 6c 20 63 68 61 6e 3b 0a 0a 09 69 64 20  nnel chan;...id 
f060: 3d 20 69 64 5f 70 3b 0a 0a 09 63 68 61 6e 20 3d  = id_p;...chan =
f070: 20 69 64 2d 3e 63 68 61 6e 3b 0a 0a 09 69 66 20   id->chan;...if 
f080: 28 21 63 68 61 6e 29 20 7b 0a 09 09 72 65 74 75  (!chan) {...retu
f090: 72 6e 3b 0a 09 7d 0a 0a 09 54 63 6c 5f 4e 6f 74  rn;..}...Tcl_Not
f0a0: 69 66 79 43 68 61 6e 6e 65 6c 28 63 68 61 6e 2c  ifyChannel(chan,
f0b0: 20 6d 61 73 6b 29 3b 0a 7d 0a 0a 73 74 61 74 69   mask);.}..stati
f0c0: 63 20 76 6f 69 64 20 74 75 61 70 69 5f 73 6f 63  c void tuapi_soc
f0d0: 6b 65 74 5f 75 6e 69 78 5f 5f 63 68 61 6e 5f 77  ket_unix__chan_w
f0e0: 61 74 63 68 28 43 6c 69 65 6e 74 44 61 74 61 20  atch(ClientData 
f0f0: 69 64 5f 70 2c 20 69 6e 74 20 6d 61 73 6b 29 20  id_p, int mask) 
f100: 7b 0a 09 73 74 72 75 63 74 20 74 75 61 70 69 5f  {..struct tuapi_
f110: 73 6f 63 6b 65 74 5f 75 6e 69 78 5f 5f 63 68 61  socket_unix__cha
f120: 6e 5f 69 64 20 2a 69 64 3b 0a 09 69 6e 74 20 66  n_id *id;..int f
f130: 64 3b 0a 0a 09 69 64 20 3d 20 69 64 5f 70 3b 0a  d;...id = id_p;.
f140: 0a 09 66 64 20 3d 20 69 64 2d 3e 66 64 3b 0a 0a  ..fd = id->fd;..
f150: 09 54 63 6c 5f 43 72 65 61 74 65 46 69 6c 65 48  .Tcl_CreateFileH
f160: 61 6e 64 6c 65 72 28 66 64 2c 20 6d 61 73 6b 2c  andler(fd, mask,
f170: 20 74 75 61 70 69 5f 73 6f 63 6b 65 74 5f 75 6e   tuapi_socket_un
f180: 69 78 5f 5f 63 68 61 6e 5f 65 76 65 6e 74 68 61  ix__chan_eventha
f190: 6e 64 6c 65 72 2c 20 69 64 29 3b 0a 0a 09 72 65  ndler, id);...re
f1a0: 74 75 72 6e 3b 0a 7d 0a 0a 73 74 61 74 69 63 20  turn;.}..static 
f1b0: 69 6e 74 20 74 75 61 70 69 5f 73 6f 63 6b 65 74  int tuapi_socket
f1c0: 5f 75 6e 69 78 5f 5f 63 68 61 6e 5f 67 65 74 68  _unix__chan_geth
f1d0: 61 6e 64 6c 65 28 43 6c 69 65 6e 74 44 61 74 61  andle(ClientData
f1e0: 20 69 64 5f 70 2c 20 69 6e 74 20 64 69 72 65 63   id_p, int direc
f1f0: 74 69 6f 6e 2c 20 43 6c 69 65 6e 74 44 61 74 61  tion, ClientData
f200: 20 2a 68 61 6e 64 6c 65 50 74 72 29 20 7b 0a 09   *handlePtr) {..
f210: 73 74 72 75 63 74 20 74 75 61 70 69 5f 73 6f 63  struct tuapi_soc
f220: 6b 65 74 5f 75 6e 69 78 5f 5f 63 68 61 6e 5f 69  ket_unix__chan_i
f230: 64 20 2a 69 64 3b 0a 09 69 6e 74 20 66 64 3b 0a  d *id;..int fd;.
f240: 09 43 6c 69 65 6e 74 44 61 74 61 20 66 64 5f 63  .ClientData fd_c
f250: 64 3b 0a 0a 09 69 64 20 3d 20 69 64 5f 70 3b 0a  d;...id = id_p;.
f260: 0a 09 66 64 20 3d 20 69 64 2d 3e 66 64 3b 0a 0a  ..fd = id->fd;..
f270: 09 6d 65 6d 63 70 79 28 26 66 64 5f 63 64 2c 20  .memcpy(&fd_cd, 
f280: 26 66 64 2c 20 73 69 7a 65 6f 66 28 66 64 29 29  &fd, sizeof(fd))
f290: 3b 0a 0a 09 2a 68 61 6e 64 6c 65 50 74 72 20 3d  ;...*handlePtr =
f2a0: 20 66 64 5f 63 64 3b 0a 0a 09 72 65 74 75 72 6e   fd_cd;...return
f2b0: 28 54 43 4c 5f 4f 4b 29 3b 0a 7d 0a 0a 73 74 61  (TCL_OK);.}..sta
f2c0: 74 69 63 20 54 63 6c 5f 43 68 61 6e 6e 65 6c 20  tic Tcl_Channel 
f2d0: 74 75 61 70 69 5f 73 6f 63 6b 65 74 5f 75 6e 69  tuapi_socket_uni
f2e0: 78 5f 73 6f 63 6b 32 74 63 6c 63 68 61 6e 28 69  x_sock2tclchan(i
f2f0: 6e 74 20 73 6f 63 6b 29 20 7b 0a 09 73 74 72 75  nt sock) {..stru
f300: 63 74 20 74 75 61 70 69 5f 73 6f 63 6b 65 74 5f  ct tuapi_socket_
f310: 75 6e 69 78 5f 5f 63 68 61 6e 5f 69 64 20 2a 69  unix__chan_id *i
f320: 64 3b 0a 09 73 74 61 74 69 63 20 54 63 6c 5f 43  d;..static Tcl_C
f330: 68 61 6e 6e 65 6c 54 79 70 65 20 74 63 6c 5f 63  hannelType tcl_c
f340: 68 61 6e 5f 74 79 70 65 3b 0a 09 73 74 61 74 69  han_type;..stati
f350: 63 20 69 6e 74 20 74 63 6c 5f 63 68 61 6e 5f 74  c int tcl_chan_t
f360: 79 70 65 5f 69 6e 69 74 20 3d 20 30 3b 0a 09 54  ype_init = 0;..T
f370: 63 6c 5f 43 68 61 6e 6e 65 6c 20 74 63 6c 5f 63  cl_Channel tcl_c
f380: 68 61 6e 3b 0a 09 63 68 61 72 20 63 68 61 6e 5f  han;..char chan_
f390: 6e 61 6d 65 5b 33 32 5d 3b 0a 09 69 6e 74 20 73  name[32];..int s
f3a0: 6f 63 6b 5f 66 6c 61 67 73 3b 0a 0a 09 69 66 20  ock_flags;...if 
f3b0: 28 21 74 63 6c 5f 63 68 61 6e 5f 74 79 70 65 5f  (!tcl_chan_type_
f3c0: 69 6e 69 74 29 20 7b 0a 09 09 74 63 6c 5f 63 68  init) {...tcl_ch
f3d0: 61 6e 5f 74 79 70 65 2e 74 79 70 65 4e 61 6d 65  an_type.typeName
f3e0: 20 3d 20 22 73 6f 63 6b 65 74 22 3b 0a 09 09 74   = "socket";...t
f3f0: 63 6c 5f 63 68 61 6e 5f 74 79 70 65 2e 76 65 72  cl_chan_type.ver
f400: 73 69 6f 6e 20 3d 20 54 43 4c 5f 43 48 41 4e 4e  sion = TCL_CHANN
f410: 45 4c 5f 56 45 52 53 49 4f 4e 5f 32 3b 0a 09 09  EL_VERSION_2;...
f420: 74 63 6c 5f 63 68 61 6e 5f 74 79 70 65 2e 63 6c  tcl_chan_type.cl
f430: 6f 73 65 50 72 6f 63 20 3d 20 74 75 61 70 69 5f  oseProc = tuapi_
f440: 73 6f 63 6b 65 74 5f 75 6e 69 78 5f 5f 63 68 61  socket_unix__cha
f450: 6e 5f 63 6c 6f 73 65 3b 0a 09 09 74 63 6c 5f 63  n_close;...tcl_c
f460: 68 61 6e 5f 74 79 70 65 2e 69 6e 70 75 74 50 72  han_type.inputPr
f470: 6f 63 20 3d 20 74 75 61 70 69 5f 73 6f 63 6b 65  oc = tuapi_socke
f480: 74 5f 75 6e 69 78 5f 5f 63 68 61 6e 5f 72 65 61  t_unix__chan_rea
f490: 64 3b 0a 09 09 74 63 6c 5f 63 68 61 6e 5f 74 79  d;...tcl_chan_ty
f4a0: 70 65 2e 6f 75 74 70 75 74 50 72 6f 63 20 3d 20  pe.outputProc = 
f4b0: 74 75 61 70 69 5f 73 6f 63 6b 65 74 5f 75 6e 69  tuapi_socket_uni
f4c0: 78 5f 5f 63 68 61 6e 5f 77 72 69 74 65 3b 0a 09  x__chan_write;..
f4d0: 09 74 63 6c 5f 63 68 61 6e 5f 74 79 70 65 2e 77  .tcl_chan_type.w
f4e0: 61 74 63 68 50 72 6f 63 20 3d 20 74 75 61 70 69  atchProc = tuapi
f4f0: 5f 73 6f 63 6b 65 74 5f 75 6e 69 78 5f 5f 63 68  _socket_unix__ch
f500: 61 6e 5f 77 61 74 63 68 3b 0a 09 09 74 63 6c 5f  an_watch;...tcl_
f510: 63 68 61 6e 5f 74 79 70 65 2e 67 65 74 48 61 6e  chan_type.getHan
f520: 64 6c 65 50 72 6f 63 20 3d 20 74 75 61 70 69 5f  dleProc = tuapi_
f530: 73 6f 63 6b 65 74 5f 75 6e 69 78 5f 5f 63 68 61  socket_unix__cha
f540: 6e 5f 67 65 74 68 61 6e 64 6c 65 3b 0a 09 09 74  n_gethandle;...t
f550: 63 6c 5f 63 68 61 6e 5f 74 79 70 65 2e 73 65 65  cl_chan_type.see
f560: 6b 50 72 6f 63 20 3d 20 4e 55 4c 4c 3b 0a 09 09  kProc = NULL;...
f570: 74 63 6c 5f 63 68 61 6e 5f 74 79 70 65 2e 73 65  tcl_chan_type.se
f580: 74 4f 70 74 69 6f 6e 50 72 6f 63 20 3d 20 4e 55  tOptionProc = NU
f590: 4c 4c 3b 0a 09 09 74 63 6c 5f 63 68 61 6e 5f 74  LL;...tcl_chan_t
f5a0: 79 70 65 2e 67 65 74 4f 70 74 69 6f 6e 50 72 6f  ype.getOptionPro
f5b0: 63 20 3d 20 4e 55 4c 4c 3b 0a 09 09 74 63 6c 5f  c = NULL;...tcl_
f5c0: 63 68 61 6e 5f 74 79 70 65 2e 63 6c 6f 73 65 32  chan_type.close2
f5d0: 50 72 6f 63 20 3d 20 4e 55 4c 4c 3b 0a 09 09 74  Proc = NULL;...t
f5e0: 63 6c 5f 63 68 61 6e 5f 74 79 70 65 2e 62 6c 6f  cl_chan_type.blo
f5f0: 63 6b 4d 6f 64 65 50 72 6f 63 20 3d 20 4e 55 4c  ckModeProc = NUL
f600: 4c 3b 0a 09 09 74 63 6c 5f 63 68 61 6e 5f 74 79  L;...tcl_chan_ty
f610: 70 65 2e 66 6c 75 73 68 50 72 6f 63 20 3d 20 4e  pe.flushProc = N
f620: 55 4c 4c 3b 0a 09 09 74 63 6c 5f 63 68 61 6e 5f  ULL;...tcl_chan_
f630: 74 79 70 65 2e 68 61 6e 64 6c 65 72 50 72 6f 63  type.handlerProc
f640: 20 3d 20 4e 55 4c 4c 3b 0a 09 09 74 63 6c 5f 63   = NULL;...tcl_c
f650: 68 61 6e 5f 74 79 70 65 2e 77 69 64 65 53 65 65  han_type.wideSee
f660: 6b 50 72 6f 63 20 3d 20 4e 55 4c 4c 3b 0a 09 09  kProc = NULL;...
f670: 74 63 6c 5f 63 68 61 6e 5f 74 79 70 65 2e 74 68  tcl_chan_type.th
f680: 72 65 61 64 41 63 74 69 6f 6e 50 72 6f 63 20 3d  readActionProc =
f690: 20 4e 55 4c 4c 3b 0a 09 09 74 63 6c 5f 63 68 61   NULL;...tcl_cha
f6a0: 6e 5f 74 79 70 65 2e 74 72 75 6e 63 61 74 65 50  n_type.truncateP
f6b0: 72 6f 63 20 3d 20 4e 55 4c 4c 3b 0a 0a 09 09 74  roc = NULL;....t
f6c0: 63 6c 5f 63 68 61 6e 5f 74 79 70 65 5f 69 6e 69  cl_chan_type_ini
f6d0: 74 20 3d 20 31 3b 0a 09 7d 0a 0a 09 73 6e 70 72  t = 1;..}...snpr
f6e0: 69 6e 74 66 28 63 68 61 6e 5f 6e 61 6d 65 2c 20  intf(chan_name, 
f6f0: 73 69 7a 65 6f 66 28 63 68 61 6e 5f 6e 61 6d 65  sizeof(chan_name
f700: 29 2c 20 22 73 6f 63 6b 25 75 22 2c 20 73 6f 63  ), "sock%u", soc
f710: 6b 29 3b 0a 0a 09 69 64 20 3d 20 6d 61 6c 6c 6f  k);...id = mallo
f720: 63 28 73 69 7a 65 6f 66 28 2a 69 64 29 29 3b 0a  c(sizeof(*id));.
f730: 09 69 66 20 28 69 64 20 3d 3d 20 4e 55 4c 4c 29  .if (id == NULL)
f740: 20 7b 0a 09 09 72 65 74 75 72 6e 28 4e 55 4c 4c   {...return(NULL
f750: 29 3b 0a 09 7d 0a 0a 09 69 64 2d 3e 66 64 20 3d  );..}...id->fd =
f760: 20 73 6f 63 6b 3b 0a 09 69 64 2d 3e 63 68 61 6e   sock;..id->chan
f770: 20 3d 20 4e 55 4c 4c 3b 0a 0a 09 2f 2a 20 43 6f   = NULL;.../* Co
f780: 6e 66 69 67 75 72 65 20 73 6f 63 6b 65 74 20 61  nfigure socket a
f790: 73 20 6e 6f 6e 2d 62 6c 6f 63 6b 69 6e 67 20 2a  s non-blocking *
f7a0: 2f 0a 09 73 6f 63 6b 5f 66 6c 61 67 73 20 3d 20  /..sock_flags = 
f7b0: 66 63 6e 74 6c 28 73 6f 63 6b 2c 20 46 5f 47 45  fcntl(sock, F_GE
f7c0: 54 46 4c 2c 20 30 29 3b 0a 09 69 66 20 28 73 6f  TFL, 0);..if (so
f7d0: 63 6b 5f 66 6c 61 67 73 20 3d 3d 20 2d 31 29 20  ck_flags == -1) 
f7e0: 7b 0a 09 09 73 6f 63 6b 5f 66 6c 61 67 73 20 3d  {...sock_flags =
f7f0: 20 4f 5f 4e 4f 4e 42 4c 4f 43 4b 3b 0a 09 7d 20   O_NONBLOCK;..} 
f800: 65 6c 73 65 20 7b 0a 09 09 73 6f 63 6b 5f 66 6c  else {...sock_fl
f810: 61 67 73 20 7c 3d 20 4f 5f 4e 4f 4e 42 4c 4f 43  ags |= O_NONBLOC
f820: 4b 3b 0a 09 7d 0a 09 66 63 6e 74 6c 28 73 6f 63  K;..}..fcntl(soc
f830: 6b 2c 20 46 5f 53 45 54 46 4c 2c 20 28 6c 6f 6e  k, F_SETFL, (lon
f840: 67 29 20 73 6f 63 6b 5f 66 6c 61 67 73 29 3b 0a  g) sock_flags);.
f850: 0a 09 2f 2a 20 43 72 65 61 74 65 20 74 68 65 20  ../* Create the 
f860: 63 68 61 6e 6e 65 6c 20 2a 2f 0a 09 74 63 6c 5f  channel */..tcl_
f870: 63 68 61 6e 20 3d 20 54 63 6c 5f 43 72 65 61 74  chan = Tcl_Creat
f880: 65 43 68 61 6e 6e 65 6c 28 26 74 63 6c 5f 63 68  eChannel(&tcl_ch
f890: 61 6e 5f 74 79 70 65 2c 20 63 68 61 6e 5f 6e 61  an_type, chan_na
f8a0: 6d 65 2c 20 69 64 2c 20 54 43 4c 5f 52 45 41 44  me, id, TCL_READ
f8b0: 41 42 4c 45 20 7c 20 54 43 4c 5f 57 52 49 54 41  ABLE | TCL_WRITA
f8c0: 42 4c 45 29 3b 0a 0a 09 2f 2a 20 55 70 64 61 74  BLE);.../* Updat
f8d0: 65 20 74 68 65 20 73 74 72 75 63 74 75 72 65 20  e the structure 
f8e0: 70 61 73 73 65 64 20 74 6f 20 65 61 63 68 20 66  passed to each f
f8f0: 75 6e 63 74 69 6f 6e 20 74 6f 20 69 6e 63 6c 75  unction to inclu
f900: 64 65 20 74 68 65 20 63 68 61 6e 6e 65 6c 20 6e  de the channel n
f910: 61 6d 65 20 2a 2f 0a 09 69 64 2d 3e 63 68 61 6e  ame */..id->chan
f920: 20 3d 20 74 63 6c 5f 63 68 61 6e 3b 0a 0a 09 72   = tcl_chan;...r
f930: 65 74 75 72 6e 28 74 63 6c 5f 63 68 61 6e 29 3b  eturn(tcl_chan);
f940: 0a 7d 0a 0a 73 74 72 75 63 74 20 74 75 61 70 69  .}..struct tuapi
f950: 5f 73 6f 63 6b 65 74 5f 75 6e 69 78 5f 5f 63 68  _socket_unix__ch
f960: 61 6e 5f 61 63 63 65 70 74 5f 63 64 20 7b 0a 09  an_accept_cd {..
f970: 69 6e 74 20 66 64 3b 0a 09 54 63 6c 5f 49 6e 74  int fd;..Tcl_Int
f980: 65 72 70 20 2a 69 6e 74 65 72 70 3b 0a 09 54 63  erp *interp;..Tc
f990: 6c 5f 4f 62 6a 20 2a 63 6f 6d 6d 61 6e 64 3b 0a  l_Obj *command;.
f9a0: 7d 3b 0a 0a 73 74 61 74 69 63 20 76 6f 69 64 20  };..static void 
f9b0: 74 75 61 70 69 5f 73 6f 63 6b 65 74 5f 75 6e 69  tuapi_socket_uni
f9c0: 78 5f 5f 63 68 61 6e 5f 61 63 63 65 70 74 28 43  x__chan_accept(C
f9d0: 6c 69 65 6e 74 44 61 74 61 20 63 64 5f 70 2c 20  lientData cd_p, 
f9e0: 69 6e 74 20 6d 61 73 6b 29 20 7b 0a 09 73 74 72  int mask) {..str
f9f0: 75 63 74 20 74 75 61 70 69 5f 73 6f 63 6b 65 74  uct tuapi_socket
fa00: 5f 75 6e 69 78 5f 5f 63 68 61 6e 5f 61 63 63 65  _unix__chan_acce
fa10: 70 74 5f 63 64 20 2a 63 64 3b 0a 09 54 63 6c 5f  pt_cd *cd;..Tcl_
fa20: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 3b 0a  Interp *interp;.
fa30: 09 54 63 6c 5f 43 68 61 6e 6e 65 6c 20 63 68 61  .Tcl_Channel cha
fa40: 6e 3b 0a 09 54 63 6c 5f 4f 62 6a 20 2a 63 6f 6d  n;..Tcl_Obj *com
fa50: 6d 61 6e 64 2c 20 2a 63 6f 6d 6d 61 6e 64 5f 74  mand, *command_t
fa60: 6f 5f 72 75 6e 5f 6f 62 6a 73 5b 35 5d 2c 20 2a  o_run_objs[5], *
fa70: 63 6f 6d 6d 61 6e 64 5f 74 6f 5f 72 75 6e 3b 0a  command_to_run;.
fa80: 09 69 6e 74 20 73 65 74 73 6f 63 6b 6f 70 74 5f  .int setsockopt_
fa90: 72 65 74 3b 0a 09 69 6e 74 20 70 61 73 73 5f 63  ret;..int pass_c
faa0: 72 65 64 73 5f 74 72 75 65 20 3d 20 31 3b 0a 09  reds_true = 1;..
fab0: 69 6e 74 20 66 64 3b 0a 09 69 6e 74 20 73 6f 63  int fd;..int soc
fac0: 6b 3b 0a 0a 09 69 66 20 28 28 6d 61 73 6b 20 26  k;...if ((mask &
fad0: 20 54 43 4c 5f 52 45 41 44 41 42 4c 45 29 20 21   TCL_READABLE) !
fae0: 3d 20 54 43 4c 5f 52 45 41 44 41 42 4c 45 29 20  = TCL_READABLE) 
faf0: 7b 0a 09 09 72 65 74 75 72 6e 3b 0a 09 7d 0a 09  {...return;..}..
fb00: 0a 09 63 64 20 3d 20 63 64 5f 70 3b 0a 0a 09 66  ..cd = cd_p;...f
fb10: 64 20 3d 20 63 64 2d 3e 66 64 3b 0a 09 69 6e 74  d = cd->fd;..int
fb20: 65 72 70 20 3d 20 63 64 2d 3e 69 6e 74 65 72 70  erp = cd->interp
fb30: 3b 0a 09 63 6f 6d 6d 61 6e 64 20 3d 20 63 64 2d  ;..command = cd-
fb40: 3e 63 6f 6d 6d 61 6e 64 3b 0a 0a 09 73 6f 63 6b  >command;...sock
fb50: 20 3d 20 61 63 63 65 70 74 28 66 64 2c 20 4e 55   = accept(fd, NU
fb60: 4c 4c 2c 20 4e 55 4c 4c 29 3b 0a 09 69 66 20 28  LL, NULL);..if (
fb70: 73 6f 63 6b 20 3c 20 30 29 20 7b 0a 09 09 72 65  sock < 0) {...re
fb80: 74 75 72 6e 3b 0a 09 7d 0a 0a 09 63 68 61 6e 20  turn;..}...chan 
fb90: 3d 20 74 75 61 70 69 5f 73 6f 63 6b 65 74 5f 75  = tuapi_socket_u
fba0: 6e 69 78 5f 73 6f 63 6b 32 74 63 6c 63 68 61 6e  nix_sock2tclchan
fbb0: 28 73 6f 63 6b 29 3b 0a 09 69 66 20 28 63 68 61  (sock);..if (cha
fbc0: 6e 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 63  n == NULL) {...c
fbd0: 6c 6f 73 65 28 73 6f 63 6b 29 3b 0a 0a 09 09 72  lose(sock);....r
fbe0: 65 74 75 72 6e 3b 0a 09 7d 0a 0a 09 73 65 74 73  eturn;..}...sets
fbf0: 6f 63 6b 6f 70 74 5f 72 65 74 20 3d 20 73 65 74  ockopt_ret = set
fc00: 73 6f 63 6b 6f 70 74 28 73 6f 63 6b 2c 20 53 4f  sockopt(sock, SO
fc10: 4c 5f 53 4f 43 4b 45 54 2c 20 53 4f 5f 50 41 53  L_SOCKET, SO_PAS
fc20: 53 43 52 45 44 2c 20 26 70 61 73 73 5f 63 72 65  SCRED, &pass_cre
fc30: 64 73 5f 74 72 75 65 2c 20 73 69 7a 65 6f 66 28  ds_true, sizeof(
fc40: 70 61 73 73 5f 63 72 65 64 73 5f 74 72 75 65 29  pass_creds_true)
fc50: 29 3b 0a 09 69 66 20 28 73 65 74 73 6f 63 6b 6f  );..if (setsocko
fc60: 70 74 5f 72 65 74 20 21 3d 20 30 29 20 7b 0a 09  pt_ret != 0) {..
fc70: 09 63 6c 6f 73 65 28 73 6f 63 6b 29 3b 0a 0a 09  .close(sock);...
fc80: 09 72 65 74 75 72 6e 3b 0a 09 7d 0a 0a 09 54 63  .return;..}...Tc
fc90: 6c 5f 52 65 67 69 73 74 65 72 43 68 61 6e 6e 65  l_RegisterChanne
fca0: 6c 28 69 6e 74 65 72 70 2c 20 63 68 61 6e 29 3b  l(interp, chan);
fcb0: 0a 0a 09 63 6f 6d 6d 61 6e 64 5f 74 6f 5f 72 75  ...command_to_ru
fcc0: 6e 5f 6f 62 6a 73 5b 30 5d 20 3d 20 63 6f 6d 6d  n_objs[0] = comm
fcd0: 61 6e 64 3b 0a 09 63 6f 6d 6d 61 6e 64 5f 74 6f  and;..command_to
fce0: 5f 72 75 6e 5f 6f 62 6a 73 5b 31 5d 20 3d 20 54  _run_objs[1] = T
fcf0: 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28  cl_NewStringObj(
fd00: 54 63 6c 5f 47 65 74 43 68 61 6e 6e 65 6c 4e 61  Tcl_GetChannelNa
fd10: 6d 65 28 63 68 61 6e 29 2c 20 2d 31 29 3b 0a 09  me(chan), -1);..
fd20: 63 6f 6d 6d 61 6e 64 5f 74 6f 5f 72 75 6e 5f 6f  command_to_run_o
fd30: 62 6a 73 5b 32 5d 20 3d 20 54 63 6c 5f 4e 65 77  bjs[2] = Tcl_New
fd40: 53 74 72 69 6e 67 4f 62 6a 28 22 2e 2e 2e 75 69  StringObj("...ui
fd50: 64 2e 2e 2e 22 2c 20 2d 31 29 3b 20 2f 2a 20 58  d...", -1); /* X
fd60: 58 58 3a 20 54 4f 44 4f 20 2a 2f 0a 09 63 6f 6d  XX: TODO */..com
fd70: 6d 61 6e 64 5f 74 6f 5f 72 75 6e 5f 6f 62 6a 73  mand_to_run_objs
fd80: 5b 33 5d 20 3d 20 54 63 6c 5f 4e 65 77 53 74 72  [3] = Tcl_NewStr
fd90: 69 6e 67 4f 62 6a 28 22 2e 2e 2e 67 69 64 2e 2e  ingObj("...gid..
fda0: 2e 22 2c 20 2d 31 29 3b 20 2f 2a 20 58 58 58 3a  .", -1); /* XXX:
fdb0: 20 54 4f 44 4f 20 2a 2f 0a 09 63 6f 6d 6d 61 6e   TODO */..comman
fdc0: 64 5f 74 6f 5f 72 75 6e 5f 6f 62 6a 73 5b 34 5d  d_to_run_objs[4]
fdd0: 20 3d 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67   = Tcl_NewString
fde0: 4f 62 6a 28 22 2e 2e 2e 70 69 64 2e 2e 2e 22 2c  Obj("...pid...",
fdf0: 20 2d 31 29 3b 20 2f 2a 20 58 58 58 3a 20 54 4f   -1); /* XXX: TO
fe00: 44 4f 20 2a 2f 0a 09 63 6f 6d 6d 61 6e 64 5f 74  DO */..command_t
fe10: 6f 5f 72 75 6e 20 3d 20 54 63 6c 5f 43 6f 6e 63  o_run = Tcl_Conc
fe20: 61 74 4f 62 6a 28 73 69 7a 65 6f 66 28 63 6f 6d  atObj(sizeof(com
fe30: 6d 61 6e 64 5f 74 6f 5f 72 75 6e 5f 6f 62 6a 73  mand_to_run_objs
fe40: 29 20 2f 20 73 69 7a 65 6f 66 28 63 6f 6d 6d 61  ) / sizeof(comma
fe50: 6e 64 5f 74 6f 5f 72 75 6e 5f 6f 62 6a 73 5b 30  nd_to_run_objs[0
fe60: 5d 29 2c 20 63 6f 6d 6d 61 6e 64 5f 74 6f 5f 72  ]), command_to_r
fe70: 75 6e 5f 6f 62 6a 73 29 3b 0a 0a 09 54 63 6c 5f  un_objs);...Tcl_
fe80: 45 76 61 6c 4f 62 6a 45 78 28 69 6e 74 65 72 70  EvalObjEx(interp
fe90: 2c 20 63 6f 6d 6d 61 6e 64 5f 74 6f 5f 72 75 6e  , command_to_run
fea0: 2c 20 54 43 4c 5f 45 56 41 4c 5f 47 4c 4f 42 41  , TCL_EVAL_GLOBA
feb0: 4c 29 3b 0a 0a 09 72 65 74 75 72 6e 3b 0a 7d 0a  L);...return;.}.
fec0: 0a 73 74 61 74 69 63 20 69 6e 74 20 74 75 61 70  .static int tuap
fed0: 69 5f 73 6f 63 6b 65 74 5f 75 6e 69 78 5f 73 65  i_socket_unix_se
fee0: 72 76 65 72 28 43 6c 69 65 6e 74 44 61 74 61 20  rver(ClientData 
fef0: 63 64 2c 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  cd, Tcl_Interp *
ff00: 69 6e 74 65 72 70 2c 20 69 6e 74 20 73 6f 63 6b  interp, int sock
ff10: 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 70 61  , const char *pa
ff20: 74 68 2c 20 54 63 6c 5f 4f 62 6a 20 2a 63 6f 6d  th, Tcl_Obj *com
ff30: 6d 61 6e 64 29 20 7b 0a 09 73 74 72 75 63 74 20  mand) {..struct 
ff40: 74 75 61 70 69 5f 73 6f 63 6b 65 74 5f 75 6e 69  tuapi_socket_uni
ff50: 78 5f 5f 63 68 61 6e 5f 61 63 63 65 70 74 5f 63  x__chan_accept_c
ff60: 64 20 2a 61 63 63 65 70 74 5f 63 64 3b 0a 09 73  d *accept_cd;..s
ff70: 74 72 75 63 74 20 73 6f 63 6b 61 64 64 72 5f 75  truct sockaddr_u
ff80: 6e 20 64 65 73 74 3b 0a 09 73 73 69 7a 65 5f 74  n dest;..ssize_t
ff90: 20 70 61 74 68 6c 65 6e 3b 0a 09 69 6e 74 20 62   pathlen;..int b
ffa0: 69 6e 64 5f 72 65 74 2c 20 6c 69 73 74 65 6e 5f  ind_ret, listen_
ffb0: 72 65 74 3b 0a 0a 09 70 61 74 68 6c 65 6e 20 3d  ret;...pathlen =
ffc0: 20 73 74 72 6c 65 6e 28 70 61 74 68 29 20 2b 20   strlen(path) + 
ffd0: 31 3b 0a 09 69 66 20 28 70 61 74 68 6c 65 6e 20  1;..if (pathlen 
ffe0: 3c 3d 20 30 29 20 7b 0a 09 09 54 63 6c 5f 53 65  <= 0) {...Tcl_Se
fff0: 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72  tObjResult(inter
10000 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67  p, Tcl_NewString
10010 4f 62 6a 28 22 70 61 74 68 20 74 6f 6f 20 73 68  Obj("path too sh
10020 6f 72 74 22 2c 20 2d 31 29 29 3b 0a 0a 09 09 72  ort", -1));....r
10030 65 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29  eturn(TCL_ERROR)
10040 3b 0a 09 7d 0a 0a 09 69 66 20 28 70 61 74 68 6c  ;..}...if (pathl
10050 65 6e 20 3e 20 73 69 7a 65 6f 66 28 64 65 73 74  en > sizeof(dest
10060 2e 73 75 6e 5f 70 61 74 68 29 29 20 7b 0a 09 09  .sun_path)) {...
10070 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
10080 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77  (interp, Tcl_New
10090 53 74 72 69 6e 67 4f 62 6a 28 22 70 61 74 68 20  StringObj("path 
100a0 74 6f 6f 20 6c 6f 6e 67 22 2c 20 2d 31 29 29 3b  too long", -1));
100b0 0a 0a 09 09 72 65 74 75 72 6e 28 54 43 4c 5f 45  ....return(TCL_E
100c0 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 64 65 73 74  RROR);..}...dest
100d0 2e 73 75 6e 5f 66 61 6d 69 6c 79 20 3d 20 41 46  .sun_family = AF
100e0 5f 55 4e 49 58 3b 0a 09 6d 65 6d 63 70 79 28 64  _UNIX;..memcpy(d
100f0 65 73 74 2e 73 75 6e 5f 70 61 74 68 2c 20 70 61  est.sun_path, pa
10100 74 68 2c 20 70 61 74 68 6c 65 6e 29 3b 0a 0a 09  th, pathlen);...
10110 62 69 6e 64 5f 72 65 74 20 3d 20 62 69 6e 64 28  bind_ret = bind(
10120 73 6f 63 6b 2c 20 28 73 74 72 75 63 74 20 73 6f  sock, (struct so
10130 63 6b 61 64 64 72 20 2a 29 20 26 64 65 73 74 2c  ckaddr *) &dest,
10140 20 73 69 7a 65 6f 66 28 64 65 73 74 29 29 3b 0a   sizeof(dest));.
10150 09 69 66 20 28 62 69 6e 64 5f 72 65 74 20 21 3d  .if (bind_ret !=
10160 20 30 29 20 7b 0a 09 09 54 63 6c 5f 53 65 74 4f   0) {...Tcl_SetO
10170 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  bjResult(interp,
10180 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62   Tcl_NewStringOb
10190 6a 28 73 74 72 65 72 72 6f 72 28 65 72 72 6e 6f  j(strerror(errno
101a0 29 2c 20 2d 31 29 29 3b 0a 0a 09 09 72 65 74 75  ), -1));....retu
101b0 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 09  rn(TCL_ERROR);..
101c0 7d 0a 0a 09 6c 69 73 74 65 6e 5f 72 65 74 20 3d  }...listen_ret =
101d0 20 6c 69 73 74 65 6e 28 73 6f 63 6b 2c 20 32 29   listen(sock, 2)
101e0 3b 0a 09 69 66 20 28 6c 69 73 74 65 6e 5f 72 65  ;..if (listen_re
101f0 74 20 21 3d 20 30 29 20 7b 0a 09 09 54 63 6c 5f  t != 0) {...Tcl_
10200 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74  SetObjResult(int
10210 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69  erp, Tcl_NewStri
10220 6e 67 4f 62 6a 28 73 74 72 65 72 72 6f 72 28 65  ngObj(strerror(e
10230 72 72 6e 6f 29 2c 20 2d 31 29 29 3b 0a 0a 09 09  rrno), -1));....
10240 72 65 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52  return(TCL_ERROR
10250 29 3b 0a 09 7d 0a 0a 09 61 63 63 65 70 74 5f 63  );..}...accept_c
10260 64 20 3d 20 6d 61 6c 6c 6f 63 28 73 69 7a 65 6f  d = malloc(sizeo
10270 66 28 2a 61 63 63 65 70 74 5f 63 64 29 29 3b 0a  f(*accept_cd));.
10280 09 69 66 20 28 61 63 63 65 70 74 5f 63 64 20 3d  .if (accept_cd =
10290 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 54 63 6c 5f  = NULL) {...Tcl_
102a0 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74  SetObjResult(int
102b0 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69  erp, Tcl_NewStri
102c0 6e 67 4f 62 6a 28 73 74 72 65 72 72 6f 72 28 65  ngObj(strerror(e
102d0 72 72 6e 6f 29 2c 20 2d 31 29 29 3b 0a 0a 09 09  rrno), -1));....
102e0 72 65 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52  return(TCL_ERROR
102f0 29 3b 0a 09 7d 0a 0a 09 61 63 63 65 70 74 5f 63  );..}...accept_c
10300 64 2d 3e 66 64 20 3d 20 73 6f 63 6b 3b 0a 09 61  d->fd = sock;..a
10310 63 63 65 70 74 5f 63 64 2d 3e 69 6e 74 65 72 70  ccept_cd->interp
10320 20 3d 20 69 6e 74 65 72 70 3b 0a 09 61 63 63 65   = interp;..acce
10330 70 74 5f 63 64 2d 3e 63 6f 6d 6d 61 6e 64 20 3d  pt_cd->command =
10340 20 63 6f 6d 6d 61 6e 64 3b 0a 0a 09 54 63 6c 5f   command;...Tcl_
10350 49 6e 63 72 52 65 66 43 6f 75 6e 74 28 63 6f 6d  IncrRefCount(com
10360 6d 61 6e 64 29 3b 0a 0a 09 54 63 6c 5f 43 72 65  mand);...Tcl_Cre
10370 61 74 65 46 69 6c 65 48 61 6e 64 6c 65 72 28 73  ateFileHandler(s
10380 6f 63 6b 2c 20 54 43 4c 5f 52 45 41 44 41 42 4c  ock, TCL_READABL
10390 45 2c 20 74 75 61 70 69 5f 73 6f 63 6b 65 74 5f  E, tuapi_socket_
103a0 75 6e 69 78 5f 5f 63 68 61 6e 5f 61 63 63 65 70  unix__chan_accep
103b0 74 2c 20 61 63 63 65 70 74 5f 63 64 29 3b 0a 0a  t, accept_cd);..
103c0 09 72 65 74 75 72 6e 28 54 43 4c 5f 4f 4b 29 3b  .return(TCL_OK);
103d0 0a 7d 0a 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .}..static int t
103e0 75 61 70 69 5f 73 6f 63 6b 65 74 5f 75 6e 69 78  uapi_socket_unix
103f0 5f 63 6c 69 65 6e 74 28 43 6c 69 65 6e 74 44 61  _client(ClientDa
10400 74 61 20 63 64 2c 20 54 63 6c 5f 49 6e 74 65 72  ta cd, Tcl_Inter
10410 70 20 2a 69 6e 74 65 72 70 2c 20 69 6e 74 20 73  p *interp, int s
10420 6f 63 6b 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  ock, const char 
10430 2a 70 61 74 68 29 20 7b 0a 09 54 63 6c 5f 43 68  *path) {..Tcl_Ch
10440 61 6e 6e 65 6c 20 63 68 61 6e 3b 0a 09 73 74 72  annel chan;..str
10450 75 63 74 20 73 6f 63 6b 61 64 64 72 5f 75 6e 20  uct sockaddr_un 
10460 64 65 73 74 3b 0a 09 73 73 69 7a 65 5f 74 20 70  dest;..ssize_t p
10470 61 74 68 6c 65 6e 3b 0a 09 69 6e 74 20 63 6f 6e  athlen;..int con
10480 6e 65 63 74 5f 72 65 74 2c 20 73 65 74 73 6f 63  nect_ret, setsoc
10490 6b 6f 70 74 5f 72 65 74 3b 0a 09 69 6e 74 20 70  kopt_ret;..int p
104a0 61 73 73 5f 63 72 65 64 73 5f 74 72 75 65 20 3d  ass_creds_true =
104b0 20 31 3b 0a 0a 09 70 61 74 68 6c 65 6e 20 3d 20   1;...pathlen = 
104c0 73 74 72 6c 65 6e 28 70 61 74 68 29 20 2b 20 31  strlen(path) + 1
104d0 3b 0a 09 69 66 20 28 70 61 74 68 6c 65 6e 20 3c  ;..if (pathlen <
104e0 3d 20 30 29 20 7b 0a 09 09 54 63 6c 5f 53 65 74  = 0) {...Tcl_Set
104f0 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70  ObjResult(interp
10500 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f  , Tcl_NewStringO
10510 62 6a 28 22 70 61 74 68 20 74 6f 6f 20 73 68 6f  bj("path too sho
10520 72 74 22 2c 20 2d 31 29 29 3b 0a 0a 09 09 72 65  rt", -1));....re
10530 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b  turn(TCL_ERROR);
10540 0a 09 7d 0a 0a 09 69 66 20 28 70 61 74 68 6c 65  ..}...if (pathle
10550 6e 20 3e 20 73 69 7a 65 6f 66 28 64 65 73 74 2e  n > sizeof(dest.
10560 73 75 6e 5f 70 61 74 68 29 29 20 7b 0a 09 09 54  sun_path)) {...T
10570 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28  cl_SetObjResult(
10580 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53  interp, Tcl_NewS
10590 74 72 69 6e 67 4f 62 6a 28 22 70 61 74 68 20 74  tringObj("path t
105a0 6f 6f 20 6c 6f 6e 67 22 2c 20 2d 31 29 29 3b 0a  oo long", -1));.
105b0 0a 09 09 72 65 74 75 72 6e 28 54 43 4c 5f 45 52  ...return(TCL_ER
105c0 52 4f 52 29 3b 0a 09 7d 0a 0a 09 64 65 73 74 2e  ROR);..}...dest.
105d0 73 75 6e 5f 66 61 6d 69 6c 79 20 3d 20 41 46 5f  sun_family = AF_
105e0 55 4e 49 58 3b 0a 09 6d 65 6d 63 70 79 28 64 65  UNIX;..memcpy(de
105f0 73 74 2e 73 75 6e 5f 70 61 74 68 2c 20 70 61 74  st.sun_path, pat
10600 68 2c 20 70 61 74 68 6c 65 6e 29 3b 0a 0a 09 63  h, pathlen);...c
10610 6f 6e 6e 65 63 74 5f 72 65 74 20 3d 20 63 6f 6e  onnect_ret = con
10620 6e 65 63 74 28 73 6f 63 6b 2c 20 28 73 74 72 75  nect(sock, (stru
10630 63 74 20 73 6f 63 6b 61 64 64 72 20 2a 29 20 26  ct sockaddr *) &
10640 64 65 73 74 2c 20 73 69 7a 65 6f 66 28 64 65 73  dest, sizeof(des
10650 74 29 29 3b 0a 09 69 66 20 28 63 6f 6e 6e 65 63  t));..if (connec
10660 74 5f 72 65 74 20 21 3d 20 30 29 20 7b 0a 09 09  t_ret != 0) {...
10670 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
10680 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77  (interp, Tcl_New
10690 53 74 72 69 6e 67 4f 62 6a 28 73 74 72 65 72 72  StringObj(strerr
106a0 6f 72 28 65 72 72 6e 6f 29 2c 20 2d 31 29 29 3b  or(errno), -1));
106b0 0a 0a 09 09 72 65 74 75 72 6e 28 54 43 4c 5f 45  ....return(TCL_E
106c0 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 73 65 74 73  RROR);..}...sets
106d0 6f 63 6b 6f 70 74 5f 72 65 74 20 3d 20 73 65 74  ockopt_ret = set
106e0 73 6f 63 6b 6f 70 74 28 73 6f 63 6b 2c 20 53 4f  sockopt(sock, SO
106f0 4c 5f 53 4f 43 4b 45 54 2c 20 53 4f 5f 50 41 53  L_SOCKET, SO_PAS
10700 53 43 52 45 44 2c 20 26 70 61 73 73 5f 63 72 65  SCRED, &pass_cre
10710 64 73 5f 74 72 75 65 2c 20 73 69 7a 65 6f 66 28  ds_true, sizeof(
10720 70 61 73 73 5f 63 72 65 64 73 5f 74 72 75 65 29  pass_creds_true)
10730 29 3b 0a 09 69 66 20 28 73 65 74 73 6f 63 6b 6f  );..if (setsocko
10740 70 74 5f 72 65 74 20 21 3d 20 30 29 20 7b 0a 09  pt_ret != 0) {..
10750 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c  .Tcl_SetObjResul
10760 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65  t(interp, Tcl_Ne
10770 77 53 74 72 69 6e 67 4f 62 6a 28 73 74 72 65 72  wStringObj(strer
10780 72 6f 72 28 65 72 72 6e 6f 29 2c 20 2d 31 29 29  ror(errno), -1))
10790 3b 0a 0a 09 09 72 65 74 75 72 6e 28 54 43 4c 5f  ;....return(TCL_
107a0 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 63 68 61  ERROR);..}...cha
107b0 6e 20 3d 20 74 75 61 70 69 5f 73 6f 63 6b 65 74  n = tuapi_socket
107c0 5f 75 6e 69 78 5f 73 6f 63 6b 32 74 63 6c 63 68  _unix_sock2tclch
107d0 61 6e 28 73 6f 63 6b 29 3b 0a 09 69 66 20 28 63  an(sock);..if (c
107e0 68 61 6e 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09  han == NULL) {..
107f0 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c  .Tcl_SetObjResul
10800 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65  t(interp, Tcl_Ne
10810 77 53 74 72 69 6e 67 4f 62 6a 28 22 75 6e 61 62  wStringObj("unab
10820 6c 65 20 74 6f 20 63 72 65 61 74 65 20 54 63 6c  le to create Tcl
10830 20 63 68 61 6e 6e 65 6c 22 2c 20 2d 31 29 29 3b   channel", -1));
10840 0a 0a 09 09 72 65 74 75 72 6e 28 54 43 4c 5f 45  ....return(TCL_E
10850 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 54 63 6c 5f  RROR);..}...Tcl_
10860 52 65 67 69 73 74 65 72 43 68 61 6e 6e 65 6c 28  RegisterChannel(
10870 69 6e 74 65 72 70 2c 20 63 68 61 6e 29 3b 0a 0a  interp, chan);..
10880 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c  .Tcl_SetObjResul
10890 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65  t(interp, Tcl_Ne
108a0 77 53 74 72 69 6e 67 4f 62 6a 28 54 63 6c 5f 47  wStringObj(Tcl_G
108b0 65 74 43 68 61 6e 6e 65 6c 4e 61 6d 65 28 63 68  etChannelName(ch
108c0 61 6e 29 2c 20 2d 31 29 29 3b 0a 0a 09 72 65 74  an), -1));...ret
108d0 75 72 6e 28 54 43 4c 5f 4f 4b 29 3b 0a 7d 0a 0a  urn(TCL_OK);.}..
108e0 73 74 61 74 69 63 20 69 6e 74 20 74 75 61 70 69  static int tuapi
108f0 5f 73 6f 63 6b 65 74 5f 75 6e 69 78 28 43 6c 69  _socket_unix(Cli
10900 65 6e 74 44 61 74 61 20 63 64 2c 20 54 63 6c 5f  entData cd, Tcl_
10910 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20  Interp *interp, 
10920 69 6e 74 20 6f 62 6a 63 2c 20 54 63 6c 5f 4f 62  int objc, Tcl_Ob
10930 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 29  j *CONST objv[])
10940 20 7b 0a 09 54 63 6c 5f 4f 62 6a 20 2a 70 61 74   {..Tcl_Obj *pat
10950 68 5f 6f 62 6a 2c 20 2a 63 6f 6d 6d 61 6e 64 5f  h_obj, *command_
10960 6f 62 6a 3b 0a 09 63 68 61 72 20 2a 70 61 74 68  obj;..char *path
10970 3b 0a 09 69 6e 74 20 72 65 74 76 61 6c 3b 0a 09  ;..int retval;..
10980 69 6e 74 20 73 6f 63 6b 3b 0a 0a 09 69 66 20 28  int sock;...if (
10990 6f 62 6a 63 20 3c 20 32 29 20 7b 0a 09 09 54 63  objc < 2) {...Tc
109a0 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69  l_SetObjResult(i
109b0 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74  nterp, Tcl_NewSt
109c0 72 69 6e 67 4f 62 6a 28 22 77 72 6f 6e 67 20 23  ringObj("wrong #
109d0 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
109e0 20 5c 22 3a 3a 74 75 61 70 69 3a 3a 73 79 73 63   \"::tuapi::sysc
109f0 61 6c 6c 3a 3a 73 6f 63 6b 65 74 5f 75 6e 69 78  all::socket_unix
10a00 20 70 61 74 68 5c 22 20 6f 72 20 5c 22 3a 3a 74   path\" or \"::t
10a10 75 61 70 69 3a 3a 73 79 73 63 61 6c 6c 3a 3a 73  uapi::syscall::s
10a20 6f 63 6b 65 74 5f 75 6e 69 78 20 2d 73 65 72 76  ocket_unix -serv
10a30 65 72 20 63 6f 6d 6d 61 6e 64 20 70 61 74 68 5c  er command path\
10a40 22 22 2c 20 2d 31 29 29 3b 0a 0a 09 09 72 65 74  "", -1));....ret
10a50 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a  urn(TCL_ERROR);.
10a60 09 7d 0a 0a 09 70 61 74 68 5f 6f 62 6a 20 3d 20  .}...path_obj = 
10a70 6f 62 6a 76 5b 31 5d 3b 0a 09 70 61 74 68 20 3d  objv[1];..path =
10a80 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 70   Tcl_GetString(p
10a90 61 74 68 5f 6f 62 6a 29 3b 0a 0a 09 73 6f 63 6b  ath_obj);...sock
10aa0 20 3d 20 73 6f 63 6b 65 74 28 41 46 5f 55 4e 49   = socket(AF_UNI
10ab0 58 2c 20 53 4f 43 4b 5f 53 54 52 45 41 4d 2c 20  X, SOCK_STREAM, 
10ac0 30 29 3b 0a 09 69 66 20 28 73 6f 63 6b 20 3d 3d  0);..if (sock ==
10ad0 20 2d 31 29 20 7b 0a 09 09 54 63 6c 5f 53 65 74   -1) {...Tcl_Set
10ae0 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70  ObjResult(interp
10af0 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f  , Tcl_NewStringO
10b00 62 6a 28 73 74 72 65 72 72 6f 72 28 65 72 72 6e  bj(strerror(errn
10b10 6f 29 2c 20 2d 31 29 29 3b 0a 0a 09 09 72 65 74  o), -1));....ret
10b20 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a  urn(TCL_ERROR);.
10b30 09 7d 0a 0a 09 69 66 20 28 73 74 72 63 6d 70 28  .}...if (strcmp(
10b40 70 61 74 68 2c 20 22 2d 73 65 72 76 65 72 22 29  path, "-server")
10b50 20 3d 3d 20 30 29 20 7b 0a 09 09 69 66 20 28 6f   == 0) {...if (o
10b60 62 6a 63 20 21 3d 20 34 29 20 7b 0a 09 09 09 54  bjc != 4) {....T
10b70 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28  cl_SetObjResult(
10b80 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53  interp, Tcl_NewS
10b90 74 72 69 6e 67 4f 62 6a 28 22 77 72 6f 6e 67 20  tringObj("wrong 
10ba0 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
10bb0 65 20 5c 22 3a 3a 74 75 61 70 69 3a 3a 73 79 73  e \"::tuapi::sys
10bc0 63 61 6c 6c 3a 3a 73 6f 63 6b 65 74 5f 75 6e 69  call::socket_uni
10bd0 78 20 2d 73 65 72 76 65 72 20 63 6f 6d 6d 61 6e  x -server comman
10be0 64 20 70 61 74 68 5c 22 22 2c 20 2d 31 29 29 3b  d path\"", -1));
10bf0 0a 0a 09 09 09 63 6c 6f 73 65 28 73 6f 63 6b 29  .....close(sock)
10c00 3b 0a 0a 09 09 09 72 65 74 75 72 6e 28 54 43 4c  ;.....return(TCL
10c10 5f 45 52 52 4f 52 29 3b 0a 09 09 7d 0a 0a 09 09  _ERROR);...}....
10c20 63 6f 6d 6d 61 6e 64 5f 6f 62 6a 20 3d 20 6f 62  command_obj = ob
10c30 6a 76 5b 32 5d 3b 0a 09 09 70 61 74 68 5f 6f 62  jv[2];...path_ob
10c40 6a 20 3d 20 6f 62 6a 76 5b 33 5d 3b 0a 0a 09 09  j = objv[3];....
10c50 70 61 74 68 20 3d 20 54 63 6c 5f 47 65 74 53 74  path = Tcl_GetSt
10c60 72 69 6e 67 28 70 61 74 68 5f 6f 62 6a 29 3b 0a  ring(path_obj);.
10c70 0a 09 09 72 65 74 76 61 6c 20 3d 20 74 75 61 70  ...retval = tuap
10c80 69 5f 73 6f 63 6b 65 74 5f 75 6e 69 78 5f 73 65  i_socket_unix_se
10c90 72 76 65 72 28 63 64 2c 20 69 6e 74 65 72 70 2c  rver(cd, interp,
10ca0 20 73 6f 63 6b 2c 20 70 61 74 68 2c 20 63 6f 6d   sock, path, com
10cb0 6d 61 6e 64 5f 6f 62 6a 29 3b 0a 09 7d 20 65 6c  mand_obj);..} el
10cc0 73 65 20 7b 0a 09 09 69 66 20 28 6f 62 6a 63 20  se {...if (objc 
10cd0 21 3d 20 32 29 20 7b 0a 09 09 09 54 63 6c 5f 53  != 2) {....Tcl_S
10ce0 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
10cf0 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e  rp, Tcl_NewStrin
10d00 67 4f 62 6a 28 22 77 72 6f 6e 67 20 23 20 61 72  gObj("wrong # ar
10d10 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
10d20 3a 3a 74 75 61 70 69 3a 3a 73 79 73 63 61 6c 6c  ::tuapi::syscall
10d30 3a 3a 73 6f 63 6b 65 74 5f 75 6e 69 78 20 70 61  ::socket_unix pa
10d40 74 68 5c 22 22 2c 20 2d 31 29 29 3b 0a 0a 09 09  th\"", -1));....
10d50 09 63 6c 6f 73 65 28 73 6f 63 6b 29 3b 0a 0a 09  .close(sock);...
10d60 09 09 72 65 74 75 72 6e 28 54 43 4c 5f 45 52 52  ..return(TCL_ERR
10d70 4f 52 29 3b 0a 09 09 7d 0a 0a 09 09 72 65 74 76  OR);...}....retv
10d80 61 6c 20 3d 20 74 75 61 70 69 5f 73 6f 63 6b 65  al = tuapi_socke
10d90 74 5f 75 6e 69 78 5f 63 6c 69 65 6e 74 28 63 64  t_unix_client(cd
10da0 2c 20 69 6e 74 65 72 70 2c 20 73 6f 63 6b 2c 20  , interp, sock, 
10db0 70 61 74 68 29 3b 0a 09 7d 0a 0a 09 69 66 20 28  path);..}...if (
10dc0 72 65 74 76 61 6c 20 21 3d 20 54 43 4c 5f 4f 4b  retval != TCL_OK
10dd0 29 20 7b 0a 09 09 63 6c 6f 73 65 28 73 6f 63 6b  ) {...close(sock
10de0 29 3b 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 28 72  );..}...return(r
10df0 65 74 76 61 6c 29 3b 0a 7d 0a 23 65 6c 73 65 0a  etval);.}.#else.
10e00 73 74 61 74 69 63 20 69 6e 74 20 74 75 61 70 69  static int tuapi
10e10 5f 73 6f 63 6b 65 74 5f 75 6e 69 78 28 43 6c 69  _socket_unix(Cli
10e20 65 6e 74 44 61 74 61 20 63 64 2c 20 54 63 6c 5f  entData cd, Tcl_
10e30 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20  Interp *interp, 
10e40 69 6e 74 20 6f 62 6a 63 2c 20 54 63 6c 5f 4f 62  int objc, Tcl_Ob
10e50 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 29  j *CONST objv[])
10e60 20 7b 0a 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65   {..Tcl_SetObjRe
10e70 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c  sult(interp, Tcl
10e80 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 6e  _NewStringObj("n
10e90 6f 74 20 69 6d 70 6c 65 6d 65 6e 74 65 64 22 2c  ot implemented",
10ea0 20 2d 31 29 29 3b 0a 09 72 65 74 75 72 6e 28 54   -1));..return(T
10eb0 43 4c 5f 45 52 52 4f 52 29 0a 7d 0a 23 65 6e 64  CL_ERROR).}.#end
10ec0 69 66 0a 0a 73 74 61 74 69 63 20 69 6e 74 20 74  if..static int t
10ed0 75 61 70 69 5f 74 73 6d 66 5f 73 74 61 72 74 5f  uapi_tsmf_start_
10ee0 73 76 63 28 43 6c 69 65 6e 74 44 61 74 61 20 63  svc(ClientData c
10ef0 64 2c 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  d, Tcl_Interp *i
10f00 6e 74 65 72 70 2c 20 69 6e 74 20 6f 62 6a 63 2c  nterp, int objc,
10f10 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
10f20 6f 62 6a 76 5b 5d 29 20 7b 0a 09 73 74 72 75 63  objv[]) {..struc
10f30 74 20 74 69 6d 65 76 61 6c 20 73 65 6c 65 63 74  t timeval select
10f40 5f 74 69 6d 65 6f 75 74 3b 0a 09 54 63 6c 5f 57  _timeout;..Tcl_W
10f50 69 64 65 49 6e 74 20 75 6d 61 73 6b 5f 76 61 6c  ideInt umask_val
10f60 2c 20 74 69 6d 65 6f 75 74 5f 76 61 6c 2c 20 75  , timeout_val, u
10f70 69 64 5f 76 61 6c 2c 20 67 69 64 5f 76 61 6c 3b  id_val, gid_val;
10f80 0a 09 54 63 6c 5f 4f 62 6a 20 2a 66 69 6c 65 6e  ..Tcl_Obj *filen
10f90 61 6d 65 5f 6f 62 6a 2c 20 2a 65 6e 76 5f 6f 62  ame_obj, *env_ob
10fa0 6a 2c 20 2a 6c 6f 67 66 69 6c 65 5f 6f 62 6a 2c  j, *logfile_obj,
10fb0 20 2a 2a 65 6e 76 5f 65 6e 74 72 79 5f 6f 62 6a   **env_entry_obj
10fc0 76 2c 20 2a 63 77 64 5f 6f 62 6a 2c 20 2a 75 6d  v, *cwd_obj, *um
10fd0 61 73 6b 5f 6f 62 6a 2c 20 2a 75 69 64 5f 6f 62  ask_obj, *uid_ob
10fe0 6a 2c 20 2a 67 69 64 5f 6f 62 6a 3b 0a 09 54 63  j, *gid_obj;..Tc
10ff0 6c 5f 4f 62 6a 20 2a 73 72 69 5f 6f 62 6a 2c 20  l_Obj *sri_obj, 
11000 2a 74 69 6d 65 6f 75 74 5f 6f 62 6a 3b 0a 09 70  *timeout_obj;..p
11010 69 64 5f 74 20 63 68 69 6c 64 2c 20 63 68 69 6c  id_t child, chil
11020 64 5f 70 67 69 64 20 3d 20 2d 31 2c 20 77 61 69  d_pgid = -1, wai
11030 74 70 69 64 5f 72 65 74 3b 0a 09 73 73 69 7a 65  tpid_ret;..ssize
11040 5f 74 20 72 65 61 64 5f 72 65 74 3b 0a 09 74 69  _t read_ret;..ti
11050 6d 65 5f 74 20 63 75 72 72 74 69 6d 65 3b 0a 09  me_t currtime;..
11060 63 68 61 72 20 2a 61 72 67 76 5b 33 5d 2c 20 2a  char *argv[3], *
11070 65 6e 76 76 5b 35 31 32 5d 3b 0a 09 63 68 61 72  envv[512];..char
11080 20 2a 6c 6f 67 66 69 6c 65 2c 20 2a 66 69 6c 65   *logfile, *file
11090 6e 61 6d 65 2c 20 2a 63 77 64 3b 0a 09 63 68 61  name, *cwd;..cha
110a0 72 20 6c 6f 67 6d 73 67 5b 32 30 34 38 5d 3b 0a  r logmsg[2048];.
110b0 09 66 64 5f 73 65 74 20 72 65 61 64 5f 66 64 73  .fd_set read_fds
110c0 65 74 3b 0a 09 69 6e 74 20 70 69 70 65 5f 72 65  et;..int pipe_re
110d0 74 2c 20 73 65 74 73 69 64 5f 72 65 74 2c 20 65  t, setsid_ret, e
110e0 78 65 63 76 65 5f 72 65 74 2c 20 74 63 6c 5f 72  xecve_ret, tcl_r
110f0 65 74 2c 20 73 65 6c 65 63 74 5f 72 65 74 2c 20  et, select_ret, 
11100 63 68 64 69 72 5f 72 65 74 3b 0a 09 69 6e 74 20  chdir_ret;..int 
11110 6e 75 6c 6c 5f 66 64 2c 20 6c 6f 67 5f 66 64 2c  null_fd, log_fd,
11120 20 74 6d 70 5f 66 64 2c 20 6d 61 78 5f 66 64 3b   tmp_fd, max_fd;
11130 0a 09 69 6e 74 20 65 6e 76 5f 65 6e 74 72 79 5f  ..int env_entry_
11140 6f 62 6a 63 3b 0a 09 69 6e 74 20 66 64 73 5b 32  objc;..int fds[2
11150 5d 2c 20 66 64 3b 0a 09 69 6e 74 20 73 74 61 74  ], fd;..int stat
11160 75 73 3b 0a 09 69 6e 74 20 69 64 78 3b 0a 0a 09  us;..int idx;...
11170 2f 2a 20 31 2e 20 50 61 72 73 65 20 61 72 67 75  /* 1. Parse argu
11180 6d 65 6e 74 73 20 2a 2f 0a 09 2f 2a 20 31 2e 61  ments */../* 1.a
11190 2e 20 45 6e 73 75 72 65 20 74 68 65 20 63 6f 72  . Ensure the cor
111a0 72 65 63 74 20 6e 75 6d 62 65 72 20 6f 66 20 61  rect number of a
111b0 72 67 75 6d 65 6e 74 73 20 77 65 72 65 20 70 61  rguments were pa
111c0 73 73 65 64 20 2a 2f 0a 09 69 66 20 28 6f 62 6a  ssed */..if (obj
111d0 63 20 21 3d 20 31 30 29 20 7b 0a 09 09 54 63 6c  c != 10) {...Tcl
111e0 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e  _SetObjResult(in
111f0 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72  terp, Tcl_NewStr
11200 69 6e 67 4f 62 6a 28 22 77 72 6f 6e 67 20 23 20  ingObj("wrong # 
11210 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
11220 5c 22 3a 3a 74 75 61 70 69 3a 3a 73 79 73 63 61  \"::tuapi::sysca
11230 6c 6c 3a 3a 74 73 6d 66 5f 73 74 61 72 74 5f 73  ll::tsmf_start_s
11240 76 63 20 73 72 69 20 66 69 6c 65 6e 61 6d 65 20  vc sri filename 
11250 6c 6f 67 66 69 6c 65 20 65 6e 76 20 63 77 64 20  logfile env cwd 
11260 75 6d 61 73 6b 20 75 69 64 20 67 69 64 20 74 69  umask uid gid ti
11270 6d 65 6f 75 74 5c 22 22 2c 20 2d 31 29 29 3b 0a  meout\"", -1));.
11280 0a 09 09 72 65 74 75 72 6e 28 54 43 4c 5f 45 52  ...return(TCL_ER
11290 52 4f 52 29 3b 0a 09 7d 0a 0a 09 2f 2a 20 31 2e  ROR);..}.../* 1.
112a0 62 2e 20 49 64 65 6e 74 69 66 79 20 54 63 6c 5f  b. Identify Tcl_
112b0 4f 62 6a 73 20 74 6f 20 75 73 65 20 66 6f 72 20  Objs to use for 
112c0 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f  each argument */
112d0 0a 09 73 72 69 5f 6f 62 6a 20 3d 20 6f 62 6a 76  ..sri_obj = objv
112e0 5b 31 5d 3b 0a 09 66 69 6c 65 6e 61 6d 65 5f 6f  [1];..filename_o
112f0 62 6a 20 3d 20 6f 62 6a 76 5b 32 5d 3b 0a 09 6c  bj = objv[2];..l
11300 6f 67 66 69 6c 65 5f 6f 62 6a 20 3d 20 6f 62 6a  ogfile_obj = obj
11310 76 5b 33 5d 3b 0a 09 65 6e 76 5f 6f 62 6a 20 3d  v[3];..env_obj =
11320 20 6f 62 6a 76 5b 34 5d 3b 0a 09 63 77 64 5f 6f   objv[4];..cwd_o
11330 62 6a 20 3d 20 6f 62 6a 76 5b 35 5d 3b 0a 09 75  bj = objv[5];..u
11340 6d 61 73 6b 5f 6f 62 6a 20 3d 20 6f 62 6a 76 5b  mask_obj = objv[
11350 36 5d 3b 0a 09 75 69 64 5f 6f 62 6a 20 3d 20 6f  6];..uid_obj = o
11360 62 6a 76 5b 37 5d 3b 0a 09 67 69 64 5f 6f 62 6a  bjv[7];..gid_obj
11370 20 3d 20 6f 62 6a 76 5b 38 5d 3b 0a 09 74 69 6d   = objv[8];..tim
11380 65 6f 75 74 5f 6f 62 6a 20 3d 20 6f 62 6a 76 5b  eout_obj = objv[
11390 39 5d 3b 0a 0a 09 2f 2a 20 31 2e 63 2e 20 53 74  9];.../* 1.c. St
113a0 6f 72 65 20 73 74 72 69 6e 67 20 61 72 67 75 6d  ore string argum
113b0 65 6e 74 73 20 2a 2f 0a 09 66 69 6c 65 6e 61 6d  ents */..filenam
113c0 65 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  e = Tcl_GetStrin
113d0 67 28 66 69 6c 65 6e 61 6d 65 5f 6f 62 6a 29 3b  g(filename_obj);
113e0 0a 09 6c 6f 67 66 69 6c 65 20 3d 20 54 63 6c 5f  ..logfile = Tcl_
113f0 47 65 74 53 74 72 69 6e 67 28 6c 6f 67 66 69 6c  GetString(logfil
11400 65 5f 6f 62 6a 29 3b 0a 09 63 77 64 20 3d 20 54  e_obj);..cwd = T
11410 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 63 77 64  cl_GetString(cwd
11420 5f 6f 62 6a 29 3b 0a 0a 09 2f 2a 20 31 2e 64 2e  _obj);.../* 1.d.
11430 20 49 6e 74 65 67 65 72 20 6f 62 6a 65 63 74 73   Integer objects
11440 20 2a 2f 0a 09 74 63 6c 5f 72 65 74 20 3d 20 54   */..tcl_ret = T
11450 63 6c 5f 47 65 74 57 69 64 65 49 6e 74 46 72 6f  cl_GetWideIntFro
11460 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 75 6d 61  mObj(interp, uma
11470 73 6b 5f 6f 62 6a 2c 20 26 75 6d 61 73 6b 5f 76  sk_obj, &umask_v
11480 61 6c 29 3b 0a 09 69 66 20 28 74 63 6c 5f 72 65  al);..if (tcl_re
11490 74 20 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a 09  t != TCL_OK) {..
114a0 09 72 65 74 75 72 6e 28 74 63 6c 5f 72 65 74 29  .return(tcl_ret)
114b0 3b 0a 09 7d 0a 0a 09 74 63 6c 5f 72 65 74 20 3d  ;..}...tcl_ret =
114c0 20 54 63 6c 5f 47 65 74 57 69 64 65 49 6e 74 46   Tcl_GetWideIntF
114d0 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 74  romObj(interp, t
114e0 69 6d 65 6f 75 74 5f 6f 62 6a 2c 20 26 74 69 6d  imeout_obj, &tim
114f0 65 6f 75 74 5f 76 61 6c 29 3b 0a 09 69 66 20 28  eout_val);..if (
11500 74 63 6c 5f 72 65 74 20 21 3d 20 54 43 4c 5f 4f  tcl_ret != TCL_O
11510 4b 29 20 7b 0a 09 09 72 65 74 75 72 6e 28 74 63  K) {...return(tc
11520 6c 5f 72 65 74 29 3b 0a 09 7d 0a 0a 09 74 63 6c  l_ret);..}...tcl
11530 5f 72 65 74 20 3d 20 54 63 6c 5f 47 65 74 57 69  _ret = Tcl_GetWi
11540 64 65 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74  deIntFromObj(int
11550 65 72 70 2c 20 75 69 64 5f 6f 62 6a 2c 20 26 75  erp, uid_obj, &u
11560 69 64 5f 76 61 6c 29 3b 0a 09 69 66 20 28 74 63  id_val);..if (tc
11570 6c 5f 72 65 74 20 21 3d 20 54 43 4c 5f 4f 4b 29  l_ret != TCL_OK)
11580 20 7b 0a 09 09 72 65 74 75 72 6e 28 74 63 6c 5f   {...return(tcl_
11590 72 65 74 29 3b 0a 09 7d 0a 0a 09 74 63 6c 5f 72  ret);..}...tcl_r
115a0 65 74 20 3d 20 54 63 6c 5f 47 65 74 57 69 64 65  et = Tcl_GetWide
115b0 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72  IntFromObj(inter
115c0 70 2c 20 67 69 64 5f 6f 62 6a 2c 20 26 67 69 64  p, gid_obj, &gid
115d0 5f 76 61 6c 29 3b 0a 09 69 66 20 28 74 63 6c 5f  _val);..if (tcl_
115e0 72 65 74 20 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b  ret != TCL_OK) {
115f0 0a 09 09 72 65 74 75 72 6e 28 74 63 6c 5f 72 65  ...return(tcl_re
11600 74 29 3b 0a 09 7d 0a 0a 09 2f 2a 20 31 2e 65 2e  t);..}.../* 1.e.
11610 20 50 72 6f 63 65 73 73 20 65 6e 76 69 72 6f 6e   Process environ
11620 6d 65 6e 74 20 2a 2f 0a 09 74 63 6c 5f 72 65 74  ment */..tcl_ret
11630 20 3d 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 47 65   = Tcl_ListObjGe
11640 74 45 6c 65 6d 65 6e 74 73 28 69 6e 74 65 72 70  tElements(interp
11650 2c 20 65 6e 76 5f 6f 62 6a 2c 20 26 65 6e 76 5f  , env_obj, &env_
11660 65 6e 74 72 79 5f 6f 62 6a 63 2c 20 26 65 6e 76  entry_objc, &env
11670 5f 65 6e 74 72 79 5f 6f 62 6a 76 29 3b 0a 09 69  _entry_objv);..i
11680 66 20 28 74 63 6c 5f 72 65 74 20 21 3d 20 54 43  f (tcl_ret != TC
11690 4c 5f 4f 4b 29 20 7b 0a 09 09 72 65 74 75 72 6e  L_OK) {...return
116a0 28 74 63 6c 5f 72 65 74 29 3b 0a 09 7d 0a 0a 09  (tcl_ret);..}...
116b0 66 6f 72 20 28 69 64 78 20 3d 20 30 3b 20 69 64  for (idx = 0; id
116c0 78 20 3c 20 4d 49 4e 28 65 6e 76 5f 65 6e 74 72  x < MIN(env_entr
116d0 79 5f 6f 62 6a 63 2c 20 73 69 7a 65 6f 66 28 65  y_objc, sizeof(e
116e0 6e 76 76 29 20 2f 20 73 69 7a 65 6f 66 28 65 6e  nvv) / sizeof(en
116f0 76 76 5b 30 5d 29 20 2d 20 31 29 3b 20 69 64 78  vv[0]) - 1); idx
11700 2b 2b 29 20 7b 0a 09 09 65 6e 76 76 5b 69 64 78  ++) {...envv[idx
11710 5d 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  ] = Tcl_GetStrin
11720 67 28 65 6e 76 5f 65 6e 74 72 79 5f 6f 62 6a 76  g(env_entry_objv
11730 5b 69 64 78 5d 29 3b 0a 09 7d 0a 09 65 6e 76 76  [idx]);..}..envv
11740 5b 69 64 78 5d 20 3d 20 4e 55 4c 4c 3b 0a 0a 09  [idx] = NULL;...
11750 2f 2a 20 32 2e 20 43 72 65 61 74 65 20 61 20 70  /* 2. Create a p
11760 69 70 65 20 66 6f 72 20 63 6f 6d 6d 75 6e 69 63  ipe for communic
11770 61 74 69 6f 6e 20 62 65 74 77 65 65 6e 20 74 68  ation between th
11780 65 20 70 72 6f 63 65 73 73 65 73 20 2a 2f 0a 09  e processes */..
11790 70 69 70 65 5f 72 65 74 20 3d 20 70 69 70 65 28  pipe_ret = pipe(
117a0 66 64 73 29 3b 0a 09 69 66 20 28 70 69 70 65 5f  fds);..if (pipe_
117b0 72 65 74 20 21 3d 20 30 29 20 7b 0a 09 09 54 63  ret != 0) {...Tc
117c0 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69  l_SetObjResult(i
117d0 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74  nterp, Tcl_NewSt
117e0 72 69 6e 67 4f 62 6a 28 22 70 69 70 65 20 66 61  ringObj("pipe fa
117f0 69 6c 65 64 22 2c 20 2d 31 29 29 3b 0a 0a 09 09  iled", -1));....
11800 72 65 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52  return(TCL_ERROR
11810 29 3b 0a 09 7d 0a 0a 09 2f 2a 20 33 2e 20 46 6f  );..}.../* 3. Fo
11820 72 6b 20 69 6e 74 6f 20 61 20 6e 65 77 20 70 72  rk into a new pr
11830 6f 63 65 73 73 20 2a 2f 0a 09 63 68 69 6c 64 20  ocess */..child 
11840 3d 20 66 6f 72 6b 28 29 3b 0a 09 69 66 20 28 63  = fork();..if (c
11850 68 69 6c 64 20 3d 3d 20 2d 31 29 20 7b 0a 09 09  hild == -1) {...
11860 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
11870 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77  (interp, Tcl_New
11880 53 74 72 69 6e 67 4f 62 6a 28 22 66 6f 72 6b 20  StringObj("fork 
11890 66 61 69 6c 65 64 22 2c 20 2d 31 29 29 3b 0a 0a  failed", -1));..
118a0 09 09 72 65 74 75 72 6e 28 54 43 4c 5f 45 52 52  ..return(TCL_ERR
118b0 4f 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 63 68  OR);..}...if (ch
118c0 69 6c 64 20 21 3d 20 30 29 20 7b 0a 09 09 2f 2a  ild != 0) {.../*
118d0 20 34 2e 70 61 72 65 6e 74 2e 20 47 65 74 20 50   4.parent. Get P
118e0 47 49 44 20 66 72 6f 6d 20 63 68 69 6c 64 20 2a  GID from child *
118f0 2f 0a 09 09 2f 2a 20 34 2e 70 61 72 65 6e 74 2e  /.../* 4.parent.
11900 61 2e 20 4f 70 65 6e 20 6c 6f 67 20 66 69 6c 65  a. Open log file
11910 20 2a 2f 0a 09 09 6c 6f 67 5f 66 64 20 3d 20 6f   */...log_fd = o
11920 70 65 6e 28 6c 6f 67 66 69 6c 65 2c 20 4f 5f 57  pen(logfile, O_W
11930 52 4f 4e 4c 59 20 7c 20 4f 5f 43 52 45 41 54 20  RONLY | O_CREAT 
11940 7c 20 4f 5f 41 50 50 45 4e 44 2c 20 53 5f 49 52  | O_APPEND, S_IR
11950 55 53 52 20 7c 20 53 5f 49 57 55 53 52 20 7c 20  USR | S_IWUSR | 
11960 53 5f 49 52 47 52 50 20 7c 20 53 5f 49 52 4f 54  S_IRGRP | S_IROT
11970 48 29 3b 0a 0a 09 09 2f 2a 20 34 2e 70 61 72 65  H);..../* 4.pare
11980 6e 74 2e 62 2e 20 43 6c 6f 73 65 20 77 72 69 74  nt.b. Close writ
11990 65 20 65 6e 64 20 6f 66 20 70 69 70 65 20 2d 2d  e end of pipe --
119a0 20 77 65 20 61 72 65 20 72 65 61 64 2d 6f 6e 6c   we are read-onl
119b0 79 20 2a 2f 0a 09 09 63 6c 6f 73 65 28 66 64 73  y */...close(fds
119c0 5b 31 5d 29 3b 0a 09 09 66 64 20 3d 20 66 64 73  [1]);...fd = fds
119d0 5b 30 5d 3b 0a 0a 09 09 2f 2a 20 34 2e 70 61 72  [0];..../* 4.par
119e0 65 6e 74 2e 63 2e 20 52 65 61 64 20 70 72 6f 63  ent.c. Read proc
119f0 65 73 73 20 67 72 6f 75 70 20 49 44 20 6f 66 20  ess group ID of 
11a00 63 68 69 6c 64 20 66 72 6f 6d 20 70 69 70 65 20  child from pipe 
11a10 2a 2f 0a 09 09 73 65 6c 65 63 74 5f 74 69 6d 65  */...select_time
11a20 6f 75 74 2e 74 76 5f 73 65 63 20 3d 20 74 69 6d  out.tv_sec = tim
11a30 65 6f 75 74 5f 76 61 6c 3b 0a 09 09 73 65 6c 65  eout_val;...sele
11a40 63 74 5f 74 69 6d 65 6f 75 74 2e 74 76 5f 75 73  ct_timeout.tv_us
11a50 65 63 20 3d 20 30 3b 0a 0a 09 09 46 44 5f 5a 45  ec = 0;....FD_ZE
11a60 52 4f 28 26 72 65 61 64 5f 66 64 73 65 74 29 3b  RO(&read_fdset);
11a70 0a 09 09 46 44 5f 53 45 54 28 66 64 2c 20 26 72  ...FD_SET(fd, &r
11a80 65 61 64 5f 66 64 73 65 74 29 3b 0a 0a 09 09 73  ead_fdset);....s
11a90 65 6c 65 63 74 5f 72 65 74 20 3d 20 73 65 6c 65  elect_ret = sele
11aa0 63 74 28 66 64 20 2b 20 31 2c 20 26 72 65 61 64  ct(fd + 1, &read
11ab0 5f 66 64 73 65 74 2c 20 4e 55 4c 4c 2c 20 4e 55  _fdset, NULL, NU
11ac0 4c 4c 2c 20 26 73 65 6c 65 63 74 5f 74 69 6d 65  LL, &select_time
11ad0 6f 75 74 29 3b 0a 09 09 69 66 20 28 73 65 6c 65  out);...if (sele
11ae0 63 74 5f 72 65 74 20 3d 3d 20 30 29 20 7b 0a 09  ct_ret == 0) {..
11af0 09 09 2f 2a 20 4f 6e 20 74 69 6d 65 6f 75 74 2c  ../* On timeout,
11b00 20 74 65 72 6d 69 6e 61 74 65 20 73 74 61 72 74   terminate start
11b10 69 6e 67 20 70 72 6f 63 65 73 73 20 2a 2f 0a 09  ing process */..
11b20 09 09 63 68 69 6c 64 5f 70 67 69 64 20 3d 20 67  ..child_pgid = g
11b30 65 74 70 67 69 64 28 63 68 69 6c 64 29 3b 0a 09  etpgid(child);..
11b40 09 09 69 66 20 28 63 68 69 6c 64 5f 70 67 69 64  ..if (child_pgid
11b50 20 21 3d 20 2d 31 29 20 7b 0a 09 09 09 09 6b 69   != -1) {.....ki
11b60 6c 6c 28 2d 63 68 69 6c 64 5f 70 67 69 64 2c 20  ll(-child_pgid, 
11b70 53 49 47 4b 49 4c 4c 29 3b 0a 09 09 09 7d 0a 0a  SIGKILL);....}..
11b80 09 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73  ...Tcl_SetObjRes
11b90 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ult(interp, Tcl_
11ba0 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 74 69  NewStringObj("ti
11bb0 6d 65 6f 75 74 22 2c 20 2d 31 29 29 3b 0a 0a 09  meout", -1));...
11bc0 09 09 63 75 72 72 74 69 6d 65 20 3d 20 74 69 6d  ..currtime = tim
11bd0 65 28 4e 55 4c 4c 29 3b 0a 09 09 09 73 74 72 66  e(NULL);....strf
11be0 74 69 6d 65 28 6c 6f 67 6d 73 67 2c 20 73 69 7a  time(logmsg, siz
11bf0 65 6f 66 28 6c 6f 67 6d 73 67 29 2c 20 22 5b 20  eof(logmsg), "[ 
11c00 25 62 20 25 65 20 25 48 3a 25 4d 3a 25 53 20 22  %b %e %H:%M:%S "
11c10 2c 20 6c 6f 63 61 6c 74 69 6d 65 28 26 63 75 72  , localtime(&cur
11c20 72 74 69 6d 65 29 29 3b 0a 09 09 09 77 72 69 74  rtime));....writ
11c30 65 28 6c 6f 67 5f 66 64 2c 20 6c 6f 67 6d 73 67  e(log_fd, logmsg
11c40 2c 20 73 74 72 6c 65 6e 28 6c 6f 67 6d 73 67 29  , strlen(logmsg)
11c50 29 3b 0a 0a 09 09 09 73 6e 70 72 69 6e 74 66 28  );.....snprintf(
11c60 6c 6f 67 6d 73 67 2c 20 73 69 7a 65 6f 66 28 6c  logmsg, sizeof(l
11c70 6f 67 6d 73 67 29 2c 20 22 4d 65 74 68 6f 64 20  ogmsg), "Method 
11c80 5c 22 73 74 61 72 74 5c 22 20 74 69 6d 65 64 20  \"start\" timed 
11c90 6f 75 74 20 61 66 74 65 72 20 25 69 20 73 65 63  out after %i sec
11ca0 6f 6e 64 73 20 5d 5c 6e 22 2c 20 28 69 6e 74 29  onds ]\n", (int)
11cb0 20 74 69 6d 65 6f 75 74 5f 76 61 6c 29 3b 0a 09   timeout_val);..
11cc0 09 09 77 72 69 74 65 28 6c 6f 67 5f 66 64 2c 20  ..write(log_fd, 
11cd0 6c 6f 67 6d 73 67 2c 20 73 74 72 6c 65 6e 28 6c  logmsg, strlen(l
11ce0 6f 67 6d 73 67 29 29 3b 0a 0a 09 09 09 63 6c 6f  ogmsg));.....clo
11cf0 73 65 28 6c 6f 67 5f 66 64 29 3b 0a 0a 09 09 09  se(log_fd);.....
11d00 72 65 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52  return(TCL_ERROR
11d10 29 3b 0a 09 09 7d 0a 0a 09 09 69 66 20 28 73 65  );...}....if (se
11d20 6c 65 63 74 5f 72 65 74 20 3e 20 30 29 20 7b 0a  lect_ret > 0) {.
11d30 09 09 09 72 65 61 64 5f 72 65 74 20 3d 20 72 65  ...read_ret = re
11d40 61 64 28 66 64 2c 20 26 63 68 69 6c 64 5f 70 67  ad(fd, &child_pg
11d50 69 64 2c 20 73 69 7a 65 6f 66 28 63 68 69 6c 64  id, sizeof(child
11d60 5f 70 67 69 64 29 29 3b 0a 09 09 7d 0a 0a 09 09  _pgid));...}....
11d70 2f 2a 20 34 2e 70 61 72 65 6e 74 2e 64 2e 20 43  /* 4.parent.d. C
11d80 6c 6f 73 65 20 72 65 61 64 20 65 6e 64 20 6f 66  lose read end of
11d90 20 70 69 70 65 20 2a 2f 0a 09 09 63 6c 6f 73 65   pipe */...close
11da0 28 66 64 29 3b 0a 0a 09 09 2f 2a 20 34 2e 70 61  (fd);..../* 4.pa
11db0 72 65 6e 74 2e 65 2e 20 56 65 72 69 66 79 20 72  rent.e. Verify r
11dc0 65 61 64 20 77 61 73 20 6d 65 61 6e 69 6e 67 66  ead was meaningf
11dd0 75 6c 20 2a 2f 0a 09 09 69 66 20 28 72 65 61 64  ul */...if (read
11de0 5f 72 65 74 20 21 3d 20 73 69 7a 65 6f 66 28 63  _ret != sizeof(c
11df0 68 69 6c 64 5f 70 67 69 64 29 29 20 7b 0a 09 09  hild_pgid)) {...
11e00 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c  .Tcl_SetObjResul
11e10 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65  t(interp, Tcl_Ne
11e20 77 53 74 72 69 6e 67 4f 62 6a 28 22 66 61 69 6c  wStringObj("fail
11e30 65 64 20 74 6f 20 63 6f 6d 6d 75 6e 69 63 61 74  ed to communicat
11e40 65 20 77 69 74 68 20 73 74 61 72 74 65 64 20 73  e with started s
11e50 65 72 76 69 63 65 22 2c 20 2d 31 29 29 3b 0a 0a  ervice", -1));..
11e60 09 09 09 63 75 72 72 74 69 6d 65 20 3d 20 74 69  ...currtime = ti
11e70 6d 65 28 4e 55 4c 4c 29 3b 0a 09 09 09 73 74 72  me(NULL);....str
11e80 66 74 69 6d 65 28 6c 6f 67 6d 73 67 2c 20 73 69  ftime(logmsg, si
11e90 7a 65 6f 66 28 6c 6f 67 6d 73 67 29 2c 20 22 5b  zeof(logmsg), "[
11ea0 20 25 62 20 25 65 20 25 48 3a 25 4d 3a 25 53 20   %b %e %H:%M:%S 
11eb0 22 2c 20 6c 6f 63 61 6c 74 69 6d 65 28 26 63 75  ", localtime(&cu
11ec0 72 72 74 69 6d 65 29 29 3b 0a 09 09 09 77 72 69  rrtime));....wri
11ed0 74 65 28 6c 6f 67 5f 66 64 2c 20 6c 6f 67 6d 73  te(log_fd, logms
11ee0 67 2c 20 73 74 72 6c 65 6e 28 6c 6f 67 6d 73 67  g, strlen(logmsg
11ef0 29 29 3b 0a 0a 09 09 09 73 6e 70 72 69 6e 74 66  ));.....snprintf
11f00 28 6c 6f 67 6d 73 67 2c 20 73 69 7a 65 6f 66 28  (logmsg, sizeof(
11f10 6c 6f 67 6d 73 67 29 2c 20 22 4d 65 74 68 6f 64  logmsg), "Method
11f20 20 5c 22 73 74 61 72 74 5c 22 20 66 61 69 6c 65   \"start\" faile
11f30 64 3a 20 63 6f 6d 6d 75 6e 69 63 61 74 69 6f 6e  d: communication
11f40 20 77 69 74 68 20 73 74 61 72 74 65 64 20 73 65   with started se
11f50 72 76 69 63 65 20 62 72 6f 6b 65 6e 20 5d 5c 6e  rvice broken ]\n
11f60 22 29 3b 0a 09 09 09 77 72 69 74 65 28 6c 6f 67  ");....write(log
11f70 5f 66 64 2c 20 6c 6f 67 6d 73 67 2c 20 73 74 72  _fd, logmsg, str
11f80 6c 65 6e 28 6c 6f 67 6d 73 67 29 29 3b 0a 0a 09  len(logmsg));...
11f90 09 09 63 6c 6f 73 65 28 6c 6f 67 5f 66 64 29 3b  ..close(log_fd);
11fa0 0a 0a 09 09 09 72 65 74 75 72 6e 28 54 43 4c 5f  .....return(TCL_
11fb0 45 52 52 4f 52 29 3b 0a 09 09 7d 0a 0a 09 09 2f  ERROR);...}..../
11fc0 2a 20 34 2e 70 61 72 65 6e 74 2e 66 2e 20 49 66  * 4.parent.f. If
11fd0 20 74 68 65 20 50 47 49 44 20 67 69 76 65 6e 20   the PGID given 
11fe0 69 73 20 61 63 74 75 61 6c 6c 79 20 61 6e 20 65  is actually an e
11ff0 72 72 6f 72 2c 20 72 65 74 75 72 6e 20 65 72 72  rror, return err
12000 6f 72 20 2a 2f 0a 09 09 69 66 20 28 63 68 69 6c  or */...if (chil
12010 64 5f 70 67 69 64 20 3d 3d 20 2d 31 29 20 7b 0a  d_pgid == -1) {.
12020 09 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73  ...Tcl_SetObjRes
12030 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ult(interp, Tcl_
12040 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 73 65  NewStringObj("se
12050 72 76 69 63 65 20 66 61 69 6c 65 64 20 74 6f 20  rvice failed to 
12060 73 74 61 72 74 22 2c 20 2d 31 29 29 3b 0a 0a 09  start", -1));...
12070 09 09 63 75 72 72 74 69 6d 65 20 3d 20 74 69 6d  ..currtime = tim
12080 65 28 4e 55 4c 4c 29 3b 0a 09 09 09 73 74 72 66  e(NULL);....strf
12090 74 69 6d 65 28 6c 6f 67 6d 73 67 2c 20 73 69 7a  time(logmsg, siz
120a0 65 6f 66 28 6c 6f 67 6d 73 67 29 2c 20 22 5b 20  eof(logmsg), "[ 
120b0 25 62 20 25 65 20 25 48 3a 25 4d 3a 25 53 20 22  %b %e %H:%M:%S "
120c0 2c 20 6c 6f 63 61 6c 74 69 6d 65 28 26 63 75 72  , localtime(&cur
120d0 72 74 69 6d 65 29 29 3b 0a 09 09 09 77 72 69 74  rtime));....writ
120e0 65 28 6c 6f 67 5f 66 64 2c 20 6c 6f 67 6d 73 67  e(log_fd, logmsg
120f0 2c 20 73 74 72 6c 65 6e 28 6c 6f 67 6d 73 67 29  , strlen(logmsg)
12100 29 3b 0a 0a 09 09 09 73 6e 70 72 69 6e 74 66 28  );.....snprintf(
12110 6c 6f 67 6d 73 67 2c 20 73 69 7a 65 6f 66 28 6c  logmsg, sizeof(l
12120 6f 67 6d 73 67 29 2c 20 22 4d 65 74 68 6f 64 20  ogmsg), "Method 
12130 5c 22 73 74 61 72 74 5c 22 20 66 61 69 6c 65 64  \"start\" failed
12140 20 5d 5c 6e 22 29 3b 0a 09 09 09 77 72 69 74 65   ]\n");....write
12150 28 6c 6f 67 5f 66 64 2c 20 6c 6f 67 6d 73 67 2c  (log_fd, logmsg,
12160 20 73 74 72 6c 65 6e 28 6c 6f 67 6d 73 67 29 29   strlen(logmsg))
12170 3b 0a 0a 09 09 09 63 6c 6f 73 65 28 6c 6f 67 5f  ;.....close(log_
12180 66 64 29 3b 0a 0a 09 09 09 72 65 74 75 72 6e 28  fd);.....return(
12190 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 09 09 7d 0a  TCL_ERROR);...}.
121a0 0a 09 09 2f 2a 20 34 2e 70 61 72 65 6e 74 2e 67  .../* 4.parent.g
121b0 2e 20 52 65 74 75 72 6e 20 50 47 49 44 20 74 6f  . Return PGID to
121c0 20 54 63 6c 20 2a 2f 0a 09 09 54 63 6c 5f 53 65   Tcl */...Tcl_Se
121d0 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72  tObjResult(inter
121e0 70 2c 20 54 63 6c 5f 4e 65 77 57 69 64 65 49 6e  p, Tcl_NewWideIn
121f0 74 4f 62 6a 28 28 54 63 6c 5f 57 69 64 65 49 6e  tObj((Tcl_WideIn
12200 74 29 20 63 68 69 6c 64 5f 70 67 69 64 29 29 3b  t) child_pgid));
12210 0a 0a 09 09 63 75 72 72 74 69 6d 65 20 3d 20 74  ....currtime = t
12220 69 6d 65 28 4e 55 4c 4c 29 3b 0a 09 09 73 74 72  ime(NULL);...str
12230 66 74 69 6d 65 28 6c 6f 67 6d 73 67 2c 20 73 69  ftime(logmsg, si
12240 7a 65 6f 66 28 6c 6f 67 6d 73 67 29 2c 20 22 5b  zeof(logmsg), "[
12250 20 25 62 20 25 65 20 25 48 3a 25 4d 3a 25 53 20   %b %e %H:%M:%S 
12260 22 2c 20 6c 6f 63 61 6c 74 69 6d 65 28 26 63 75  ", localtime(&cu
12270 72 72 74 69 6d 65 29 29 3b 0a 09 09 77 72 69 74  rrtime));...writ
12280 65 28 6c 6f 67 5f 66 64 2c 20 6c 6f 67 6d 73 67  e(log_fd, logmsg
12290 2c 20 73 74 72 6c 65 6e 28 6c 6f 67 6d 73 67 29  , strlen(logmsg)
122a0 29 3b 0a 0a 09 09 73 6e 70 72 69 6e 74 66 28 6c  );....snprintf(l
122b0 6f 67 6d 73 67 2c 20 73 69 7a 65 6f 66 28 6c 6f  ogmsg, sizeof(lo
122c0 67 6d 73 67 29 2c 20 22 4d 65 74 68 6f 64 20 5c  gmsg), "Method \
122d0 22 73 74 61 72 74 5c 22 20 63 6f 6d 70 6c 65 74  "start\" complet
122e0 65 64 2c 20 70 72 6f 63 65 73 73 20 67 72 6f 75  ed, process grou
122f0 70 20 3d 20 25 6c 75 20 5d 5c 6e 22 2c 20 28 75  p = %lu ]\n", (u
12300 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 63 68  nsigned long) ch
12310 69 6c 64 5f 70 67 69 64 29 3b 0a 09 09 77 72 69  ild_pgid);...wri
12320 74 65 28 6c 6f 67 5f 66 64 2c 20 6c 6f 67 6d 73  te(log_fd, logms
12330 67 2c 20 73 74 72 6c 65 6e 28 6c 6f 67 6d 73 67  g, strlen(logmsg
12340 29 29 3b 0a 0a 09 09 63 6c 6f 73 65 28 6c 6f 67  ));....close(log
12350 5f 66 64 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28  _fd);....return(
12360 54 43 4c 5f 4f 4b 29 3b 0a 09 7d 0a 0a 09 2f 2a  TCL_OK);..}.../*
12370 20 34 2e 63 68 69 6c 64 2e 61 2e 20 43 6c 6f 73   4.child.a. Clos
12380 65 20 72 65 61 64 20 65 6e 64 20 6f 66 20 70 69  e read end of pi
12390 70 65 20 2d 2d 20 77 65 20 6f 6e 6c 79 20 77 72  pe -- we only wr
123a0 69 74 65 20 74 6f 20 69 74 20 2a 2f 0a 09 63 6c  ite to it */..cl
123b0 6f 73 65 28 66 64 73 5b 30 5d 29 3b 0a 09 66 64  ose(fds[0]);..fd
123c0 20 3d 20 66 64 73 5b 31 5d 3b 0a 0a 09 2f 2a 20   = fds[1];.../* 
123d0 35 2e 20 43 72 65 61 74 65 20 61 20 6e 65 77 20  5. Create a new 
123e0 73 65 73 73 69 6f 6e 20 2a 2f 0a 09 73 65 74 73  session */..sets
123f0 69 64 5f 72 65 74 20 3d 20 73 65 74 73 69 64 28  id_ret = setsid(
12400 29 3b 0a 09 69 66 20 28 73 65 74 73 69 64 5f 72  );..if (setsid_r
12410 65 74 20 3d 3d 20 2d 31 29 20 7b 0a 09 09 77 72  et == -1) {...wr
12420 69 74 65 28 66 64 2c 20 26 63 68 69 6c 64 5f 70  ite(fd, &child_p
12430 67 69 64 2c 20 73 69 7a 65 6f 66 28 63 68 69 6c  gid, sizeof(chil
12440 64 5f 70 67 69 64 29 29 3b 0a 0a 09 09 5f 65 78  d_pgid));...._ex
12450 69 74 28 30 29 3b 0a 09 7d 0a 0a 09 2f 2a 20 36  it(0);..}.../* 6
12460 2e 20 53 65 74 75 70 20 65 6e 76 69 72 6f 6e 6d  . Setup environm
12470 65 6e 74 20 2a 2f 0a 09 2f 2a 20 36 2e 61 2e 20  ent */../* 6.a. 
12480 53 65 74 20 75 6d 61 73 6b 20 2a 2f 0a 09 75 6d  Set umask */..um
12490 61 73 6b 28 75 6d 61 73 6b 5f 76 61 6c 29 3b 0a  ask(umask_val);.
124a0 0a 09 2f 2a 20 36 2e 62 2e 20 53 65 74 20 77 6f  ../* 6.b. Set wo
124b0 72 6b 69 6e 67 20 64 69 72 65 63 74 6f 72 79 20  rking directory 
124c0 2a 2f 0a 09 63 68 64 69 72 5f 72 65 74 20 3d 20  */..chdir_ret = 
124d0 63 68 64 69 72 28 63 77 64 29 3b 0a 09 69 66 20  chdir(cwd);..if 
124e0 28 63 68 64 69 72 5f 72 65 74 20 21 3d 20 30 29  (chdir_ret != 0)
124f0 20 7b 0a 09 09 77 72 69 74 65 28 66 64 2c 20 26   {...write(fd, &
12500 63 68 69 6c 64 5f 70 67 69 64 2c 20 73 69 7a 65  child_pgid, size
12510 6f 66 28 63 68 69 6c 64 5f 70 67 69 64 29 29 3b  of(child_pgid));
12520 0a 0a 09 09 5f 65 78 69 74 28 30 29 3b 0a 09 7d  ...._exit(0);..}
12530 0a 0a 09 2f 2a 20 36 2e 63 2e 20 4f 70 65 6e 20  .../* 6.c. Open 
12540 6c 6f 67 20 66 69 6c 65 20 66 6f 72 20 73 74 64  log file for std
12550 65 72 72 20 61 6e 64 20 73 74 64 6f 75 74 20 2a  err and stdout *
12560 2f 0a 09 6c 6f 67 5f 66 64 20 3d 20 6f 70 65 6e  /..log_fd = open
12570 28 6c 6f 67 66 69 6c 65 2c 20 4f 5f 57 52 4f 4e  (logfile, O_WRON
12580 4c 59 20 7c 20 4f 5f 43 52 45 41 54 20 7c 20 4f  LY | O_CREAT | O
12590 5f 41 50 50 45 4e 44 2c 20 53 5f 49 52 55 53 52  _APPEND, S_IRUSR
125a0 20 7c 20 53 5f 49 57 55 53 52 20 7c 20 53 5f 49   | S_IWUSR | S_I
125b0 52 47 52 50 20 7c 20 53 5f 49 52 4f 54 48 29 3b  RGRP | S_IROTH);
125c0 0a 0a 09 2f 2a 20 36 2e 64 2e 20 4f 70 65 6e 20  .../* 6.d. Open 
125d0 22 2f 64 65 76 2f 6e 75 6c 6c 22 20 66 6f 72 20  "/dev/null" for 
125e0 73 74 64 69 6e 20 2a 2f 0a 09 6e 75 6c 6c 5f 66  stdin */..null_f
125f0 64 20 3d 20 6f 70 65 6e 28 22 2f 64 65 76 2f 6e  d = open("/dev/n
12600 75 6c 6c 22 2c 20 4f 5f 52 44 4f 4e 4c 59 29 3b  ull", O_RDONLY);
12610 0a 09 69 66 20 28 6e 75 6c 6c 5f 66 64 20 3c 20  ..if (null_fd < 
12620 30 20 7c 7c 20 6c 6f 67 5f 66 64 20 3c 30 29 20  0 || log_fd <0) 
12630 7b 0a 09 09 77 72 69 74 65 28 66 64 2c 20 26 63  {...write(fd, &c
12640 68 69 6c 64 5f 70 67 69 64 2c 20 73 69 7a 65 6f  hild_pgid, sizeo
12650 66 28 63 68 69 6c 64 5f 70 67 69 64 29 29 3b 0a  f(child_pgid));.
12660 0a 09 09 5f 65 78 69 74 28 30 29 3b 0a 09 7d 0a  ..._exit(0);..}.
12670 0a 09 2f 2a 20 36 2e 65 2e 20 52 65 64 69 72 65  ../* 6.e. Redire
12680 63 74 20 73 74 64 69 6e 2c 20 73 74 64 6f 75 74  ct stdin, stdout
12690 2c 20 61 6e 64 20 73 74 64 65 72 72 20 74 6f 20  , and stderr to 
126a0 6e 75 6c 6c 2c 20 6c 6f 67 73 20 2a 2f 0a 09 64  null, logs */..d
126b0 75 70 32 28 6e 75 6c 6c 5f 66 64 2c 20 53 54 44  up2(null_fd, STD
126c0 49 4e 5f 46 49 4c 45 4e 4f 29 3b 0a 09 64 75 70  IN_FILENO);..dup
126d0 32 28 6c 6f 67 5f 66 64 2c 20 53 54 44 4f 55 54  2(log_fd, STDOUT
126e0 5f 46 49 4c 45 4e 4f 29 3b 0a 09 64 75 70 32 28  _FILENO);..dup2(
126f0 6c 6f 67 5f 66 64 2c 20 53 54 44 45 52 52 5f 46  log_fd, STDERR_F
12700 49 4c 45 4e 4f 29 3b 0a 0a 09 63 6c 6f 73 65 28  ILENO);...close(
12710 6e 75 6c 6c 5f 66 64 29 3b 0a 09 63 6c 6f 73 65  null_fd);..close
12720 28 6c 6f 67 5f 66 64 29 3b 0a 0a 09 2f 2a 20 36  (log_fd);.../* 6
12730 2e 66 2e 20 43 6c 6f 73 65 20 73 74 72 61 79 20  .f. Close stray 
12740 66 69 6c 65 20 64 65 73 63 72 69 70 74 6f 72 73  file descriptors
12750 20 2a 2f 0a 09 6d 61 78 5f 66 64 20 3d 20 4d 41   */..max_fd = MA
12760 58 28 4d 41 58 28 4d 41 58 28 31 30 32 34 2c 20  X(MAX(MAX(1024, 
12770 53 54 44 49 4e 5f 46 49 4c 45 4e 4f 29 2c 20 53  STDIN_FILENO), S
12780 54 44 4f 55 54 5f 46 49 4c 45 4e 4f 29 2c 20 53  TDOUT_FILENO), S
12790 54 44 45 52 52 5f 46 49 4c 45 4e 4f 29 3b 0a 09  TDERR_FILENO);..
127a0 66 6f 72 20 28 74 6d 70 5f 66 64 20 3d 20 30 3b  for (tmp_fd = 0;
127b0 20 74 6d 70 5f 66 64 20 3c 20 6d 61 78 5f 66 64   tmp_fd < max_fd
127c0 3b 20 74 6d 70 5f 66 64 2b 2b 29 20 7b 0a 09 09  ; tmp_fd++) {...
127d0 69 66 20 28 74 6d 70 5f 66 64 20 3d 3d 20 53 54  if (tmp_fd == ST
127e0 44 49 4e 5f 46 49 4c 45 4e 4f 20 7c 7c 20 74 6d  DIN_FILENO || tm
127f0 70 5f 66 64 20 3d 3d 20 53 54 44 4f 55 54 5f 46  p_fd == STDOUT_F
12800 49 4c 45 4e 4f 20 7c 7c 20 74 6d 70 5f 66 64 20  ILENO || tmp_fd 
12810 3d 3d 20 53 54 44 45 52 52 5f 46 49 4c 45 4e 4f  == STDERR_FILENO
12820 29 20 7b 0a 09 09 09 63 6f 6e 74 69 6e 75 65 3b  ) {....continue;
12830 0a 09 09 7d 0a 0a 09 09 69 66 20 28 74 6d 70 5f  ...}....if (tmp_
12840 66 64 20 3d 3d 20 66 64 29 20 7b 0a 09 09 09 63  fd == fd) {....c
12850 6f 6e 74 69 6e 75 65 3b 0a 09 09 7d 0a 0a 09 09  ontinue;...}....
12860 63 6c 6f 73 65 28 74 6d 70 5f 66 64 29 3b 0a 09  close(tmp_fd);..
12870 7d 0a 0a 09 2f 2a 20 36 2e 67 2e 20 53 77 69 74  }.../* 6.g. Swit
12880 63 68 20 74 6f 20 61 70 70 72 6f 70 72 69 61 74  ch to appropriat
12890 65 20 75 73 65 72 2f 67 72 6f 75 70 20 2a 2f 0a  e user/group */.
128a0 09 2f 2a 20 36 2e 67 2e 69 2e 20 47 72 6f 75 70  ./* 6.g.i. Group
128b0 20 2a 2f 0a 09 73 65 74 67 69 64 28 67 69 64 5f   */..setgid(gid_
128c0 76 61 6c 29 3b 0a 0a 09 2f 2a 20 36 2e 67 2e 69  val);.../* 6.g.i
128d0 69 2e 20 55 73 65 72 20 2a 2f 0a 09 73 65 74 75  i. User */..setu
128e0 69 64 28 75 69 64 5f 76 61 6c 29 3b 0a 0a 09 2f  id(uid_val);.../
128f0 2a 20 37 2e 20 43 72 65 61 74 65 20 61 20 6e 65  * 7. Create a ne
12900 77 20 70 72 6f 63 65 73 73 20 74 6f 20 61 63 74  w process to act
12910 75 61 6c 6c 79 20 73 70 61 77 6e 20 74 68 65 20  ually spawn the 
12920 70 72 6f 63 65 73 73 20 2a 2f 0a 09 63 68 69 6c  process */..chil
12930 64 20 3d 20 66 6f 72 6b 28 29 3b 0a 09 69 66 20  d = fork();..if 
12940 28 63 68 69 6c 64 20 3d 3d 20 2d 31 29 20 7b 0a  (child == -1) {.
12950 09 09 77 72 69 74 65 28 66 64 2c 20 26 63 68 69  ..write(fd, &chi
12960 6c 64 5f 70 67 69 64 2c 20 73 69 7a 65 6f 66 28  ld_pgid, sizeof(
12970 63 68 69 6c 64 5f 70 67 69 64 29 29 3b 0a 0a 09  child_pgid));...
12980 09 5f 65 78 69 74 28 30 29 3b 0a 09 7d 0a 0a 09  ._exit(0);..}...
12990 69 66 20 28 63 68 69 6c 64 20 21 3d 20 30 29 20  if (child != 0) 
129a0 7b 0a 09 09 2f 2a 20 37 2e 70 61 72 65 6e 74 2e  {.../* 7.parent.
129b0 61 2e 20 57 61 69 74 20 66 6f 72 20 63 68 69 6c  a. Wait for chil
129c0 64 20 70 72 6f 63 65 73 73 20 74 6f 20 74 65 72  d process to ter
129d0 6d 69 6e 61 74 65 20 61 6e 64 20 63 6f 6c 6c 65  minate and colle
129e0 63 74 20 73 74 61 74 75 73 20 2a 2f 0a 09 09 77  ct status */...w
129f0 61 69 74 70 69 64 5f 72 65 74 20 3d 20 77 61 69  aitpid_ret = wai
12a00 74 70 69 64 28 63 68 69 6c 64 2c 20 26 73 74 61  tpid(child, &sta
12a10 74 75 73 2c 20 30 29 3b 0a 09 09 69 66 20 28 77  tus, 0);...if (w
12a20 61 69 74 70 69 64 5f 72 65 74 20 3d 3d 20 2d 31  aitpid_ret == -1
12a30 29 20 7b 0a 09 09 09 73 74 61 74 75 73 20 3d 20  ) {....status = 
12a40 2d 31 3b 0a 09 09 7d 0a 0a 09 09 2f 2a 20 37 2e  -1;...}..../* 7.
12a50 70 61 72 65 6e 74 2e 62 2e 20 53 65 74 20 50 47  parent.b. Set PG
12a60 49 44 20 28 69 66 20 73 75 63 63 65 73 73 66 75  ID (if successfu
12a70 6c 2c 20 2d 31 20 6f 74 68 65 72 77 69 73 65 29  l, -1 otherwise)
12a80 20 74 6f 20 70 61 73 73 20 62 61 63 6b 20 74 6f   to pass back to
12a90 20 54 53 4d 46 20 2a 2f 0a 09 09 69 66 20 28 73   TSMF */...if (s
12aa0 74 61 74 75 73 20 3d 3d 20 30 29 20 7b 0a 09 09  tatus == 0) {...
12ab0 09 63 68 69 6c 64 5f 70 67 69 64 20 3d 20 67 65  .child_pgid = ge
12ac0 74 70 67 69 64 28 67 65 74 70 69 64 28 29 29 3b  tpgid(getpid());
12ad0 0a 09 09 7d 0a 09 09 77 72 69 74 65 28 66 64 2c  ...}...write(fd,
12ae0 20 26 63 68 69 6c 64 5f 70 67 69 64 2c 20 73 69   &child_pgid, si
12af0 7a 65 6f 66 28 63 68 69 6c 64 5f 70 67 69 64 29  zeof(child_pgid)
12b00 29 3b 0a 0a 09 09 63 6c 6f 73 65 28 66 64 29 3b  );....close(fd);
12b10 0a 0a 09 09 2f 2a 20 37 2e 70 61 72 65 6e 74 2e  ..../* 7.parent.
12b20 63 2e 20 57 72 69 74 65 20 6c 6f 67 20 6f 66 20  c. Write log of 
12b30 72 65 73 75 6c 74 20 2a 2f 0a 09 09 2f 2a 20 4e  result */.../* N
12b40 6f 74 65 3a 20 57 65 20 61 76 6f 69 64 20 41 4e  ote: We avoid AN
12b50 53 49 20 49 2f 4f 20 68 65 72 65 20 69 6e 20 63  SI I/O here in c
12b60 61 73 65 20 74 68 65 72 65 20 69 73 20 61 6c 72  ase there is alr
12b70 65 61 64 79 20 73 6f 6d 65 74 68 69 6e 67 20 69  eady something i
12b80 6e 20 74 68 65 20 62 75 66 66 65 72 20 2a 2f 0a  n the buffer */.
12b90 09 09 63 75 72 72 74 69 6d 65 20 3d 20 74 69 6d  ..currtime = tim
12ba0 65 28 4e 55 4c 4c 29 3b 0a 09 09 73 74 72 66 74  e(NULL);...strft
12bb0 69 6d 65 28 6c 6f 67 6d 73 67 2c 20 73 69 7a 65  ime(logmsg, size
12bc0 6f 66 28 6c 6f 67 6d 73 67 29 2c 20 22 5b 20 25  of(logmsg), "[ %
12bd0 62 20 25 65 20 25 48 3a 25 4d 3a 25 53 20 22 2c  b %e %H:%M:%S ",
12be0 20 6c 6f 63 61 6c 74 69 6d 65 28 26 63 75 72 72   localtime(&curr
12bf0 74 69 6d 65 29 29 3b 0a 09 09 77 72 69 74 65 28  time));...write(
12c00 53 54 44 45 52 52 5f 46 49 4c 45 4e 4f 2c 20 6c  STDERR_FILENO, l
12c10 6f 67 6d 73 67 2c 20 73 74 72 6c 65 6e 28 6c 6f  ogmsg, strlen(lo
12c20 67 6d 73 67 29 29 3b 0a 0a 09 09 73 6e 70 72 69  gmsg));....snpri
12c30 6e 74 66 28 6c 6f 67 6d 73 67 2c 20 73 69 7a 65  ntf(logmsg, size
12c40 6f 66 28 6c 6f 67 6d 73 67 29 2c 20 22 4d 65 74  of(logmsg), "Met
12c50 68 6f 64 20 5c 22 73 74 61 72 74 5c 22 20 65 78  hod \"start\" ex
12c60 69 74 65 64 20 77 69 74 68 20 73 74 61 74 75 73  ited with status
12c70 20 25 69 20 5d 5c 6e 22 2c 20 57 45 58 49 54 53   %i ]\n", WEXITS
12c80 54 41 54 55 53 28 73 74 61 74 75 73 29 29 3b 0a  TATUS(status));.
12c90 09 09 77 72 69 74 65 28 53 54 44 45 52 52 5f 46  ..write(STDERR_F
12ca0 49 4c 45 4e 4f 2c 20 6c 6f 67 6d 73 67 2c 20 73  ILENO, logmsg, s
12cb0 74 72 6c 65 6e 28 6c 6f 67 6d 73 67 29 29 3b 0a  trlen(logmsg));.
12cc0 0a 09 09 5f 65 78 69 74 28 30 29 3b 0a 09 7d 0a  ..._exit(0);..}.
12cd0 09 0a 09 2f 2a 20 37 2e 63 68 69 6c 64 2e 61 2e  .../* 7.child.a.
12ce0 20 43 6c 6f 73 65 20 63 68 61 6e 6e 65 6c 20 74   Close channel t
12cf0 6f 20 70 61 72 65 6e 74 20 2a 2f 0a 09 63 6c 6f  o parent */..clo
12d00 73 65 28 66 64 29 3b 0a 0a 09 2f 2a 20 38 2e 20  se(fd);.../* 8. 
12d10 4c 6f 67 20 61 74 74 65 6d 70 74 20 74 6f 20 72  Log attempt to r
12d20 75 6e 20 73 74 61 72 74 20 6d 65 74 68 6f 64 20  un start method 
12d30 2a 2f 0a 09 63 75 72 72 74 69 6d 65 20 3d 20 74  */..currtime = t
12d40 69 6d 65 28 4e 55 4c 4c 29 3b 0a 09 73 74 72 66  ime(NULL);..strf
12d50 74 69 6d 65 28 6c 6f 67 6d 73 67 2c 20 73 69 7a  time(logmsg, siz
12d60 65 6f 66 28 6c 6f 67 6d 73 67 29 2c 20 22 5b 20  eof(logmsg), "[ 
12d70 25 62 20 25 65 20 25 48 3a 25 4d 3a 25 53 20 22  %b %e %H:%M:%S "
12d80 2c 20 6c 6f 63 61 6c 74 69 6d 65 28 26 63 75 72  , localtime(&cur
12d90 72 74 69 6d 65 29 29 3b 0a 09 77 72 69 74 65 28  rtime));..write(
12da0 53 54 44 45 52 52 5f 46 49 4c 45 4e 4f 2c 20 6c  STDERR_FILENO, l
12db0 6f 67 6d 73 67 2c 20 73 74 72 6c 65 6e 28 6c 6f  ogmsg, strlen(lo
12dc0 67 6d 73 67 29 29 3b 0a 0a 09 73 6e 70 72 69 6e  gmsg));...snprin
12dd0 74 66 28 6c 6f 67 6d 73 67 2c 20 73 69 7a 65 6f  tf(logmsg, sizeo
12de0 66 28 6c 6f 67 6d 73 67 29 2c 20 22 45 78 65 63  f(logmsg), "Exec
12df0 75 74 69 6e 67 20 73 74 61 72 74 20 6d 65 74 68  uting start meth
12e00 6f 64 20 28 5c 22 25 73 5c 22 29 20 5d 5c 6e 22  od (\"%s\") ]\n"
12e10 2c 20 66 69 6c 65 6e 61 6d 65 29 3b 0a 09 77 72  , filename);..wr
12e20 69 74 65 28 53 54 44 45 52 52 5f 46 49 4c 45 4e  ite(STDERR_FILEN
12e30 4f 2c 20 6c 6f 67 6d 73 67 2c 20 73 74 72 6c 65  O, logmsg, strle
12e40 6e 28 6c 6f 67 6d 73 67 29 29 3b 0a 0a 09 2f 2a  n(logmsg));.../*
12e50 20 39 2e 20 65 78 65 63 76 65 28 29 20 6e 65 77   9. execve() new
12e60 20 69 6d 61 67 65 20 2a 2f 0a 09 61 72 67 76 5b   image */..argv[
12e70 30 5d 20 3d 20 66 69 6c 65 6e 61 6d 65 3b 0a 09  0] = filename;..
12e80 61 72 67 76 5b 31 5d 20 3d 20 22 73 74 61 72 74  argv[1] = "start
12e90 22 3b 0a 09 61 72 67 76 5b 32 5d 20 3d 20 4e 55  ";..argv[2] = NU
12ea0 4c 4c 3b 0a 09 65 78 65 63 76 65 5f 72 65 74 20  LL;..execve_ret 
12eb0 3d 20 65 78 65 63 76 65 28 66 69 6c 65 6e 61 6d  = execve(filenam
12ec0 65 2c 20 61 72 67 76 2c 20 65 6e 76 76 29 3b 0a  e, argv, envv);.
12ed0 0a 09 2f 2a 20 31 30 2e 20 41 62 6f 72 74 20 69  ../* 10. Abort i
12ee0 66 20 73 6f 6d 65 74 68 69 6e 67 20 68 61 73 20  f something has 
12ef0 67 6f 6e 65 20 77 72 6f 6e 67 20 2a 2f 0a 09 5f  gone wrong */.._
12f00 65 78 69 74 28 65 78 65 63 76 65 5f 72 65 74 29  exit(execve_ret)
12f10 3b 0a 0a 09 2f 2a 20 48 61 6e 64 6c 65 20 6c 69  ;.../* Handle li
12f20 6e 74 2d 6e 65 73 73 20 2a 2f 0a 09 72 65 74 75  nt-ness */..retu
12f30 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 09  rn(TCL_ERROR);..
12f40 73 72 69 5f 6f 62 6a 20 3d 20 73 72 69 5f 6f 62  sri_obj = sri_ob
12f50 6a 3b 0a 7d 0a 0a 69 6e 74 20 54 75 61 70 69 5f  j;.}..int Tuapi_
12f60 49 6e 69 74 28 54 63 6c 5f 49 6e 74 65 72 70 20  Init(Tcl_Interp 
12f70 2a 69 6e 74 65 72 70 29 20 7b 0a 23 69 66 64 65  *interp) {.#ifde
12f80 66 20 55 53 45 5f 54 43 4c 5f 53 54 55 42 53 0a  f USE_TCL_STUBS.
12f90 09 63 6f 6e 73 74 20 63 68 61 72 20 2a 74 63 6c  .const char *tcl
12fa0 49 6e 69 74 53 74 75 62 73 5f 72 65 74 3b 0a 0a  InitStubs_ret;..
12fb0 09 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 53  ./* Initialize S
12fc0 74 75 62 73 20 2a 2f 0a 09 74 63 6c 49 6e 69 74  tubs */..tclInit
12fd0 53 74 75 62 73 5f 72 65 74 20 3d 20 54 63 6c 5f  Stubs_ret = Tcl_
12fe0 49 6e 69 74 53 74 75 62 73 28 69 6e 74 65 72 70  InitStubs(interp
12ff0 2c 20 22 38 2e 34 22 2c 20 30 29 3b 0a 09 69 66  , "8.4", 0);..if
13000 20 28 21 74 63 6c 49 6e 69 74 53 74 75 62 73 5f   (!tclInitStubs_
13010 72 65 74 29 20 7b 0a 09 09 72 65 74 75 72 6e 28  ret) {...return(
13020 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 23  TCL_ERROR);..}.#
13030 65 6e 64 69 66 0a 0a 09 2f 2a 20 4b 65 72 6e 65  endif.../* Kerne
13040 6c 20 6d 61 69 6e 74 65 6e 61 6e 63 65 20 72 65  l maintenance re
13050 6c 61 74 65 64 20 63 6f 6d 6d 61 6e 64 73 20 2a  lated commands *
13060 2f 0a 09 54 63 6c 5f 43 72 65 61 74 65 4f 62 6a  /..Tcl_CreateObj
13070 43 6f 6d 6d 61 6e 64 28 69 6e 74 65 72 70 2c 20  Command(interp, 
13080 22 3a 3a 74 75 61 70 69 3a 3a 73 79 73 63 61 6c  "::tuapi::syscal
13090 6c 3a 3a 69 6e 73 6d 6f 64 22 2c 20 74 75 61 70  l::insmod", tuap
130a0 69 5f 69 6e 73 6d 6f 64 2c 20 4e 55 4c 4c 2c 20  i_insmod, NULL, 
130b0 4e 55 4c 4c 29 3b 0a 09 54 63 6c 5f 43 72 65 61  NULL);..Tcl_Crea
130c0 74 65 4f 62 6a 43 6f 6d 6d 61 6e 64 28 69 6e 74  teObjCommand(int
130d0 65 72 70 2c 20 22 3a 3a 74 75 61 70 69 3a 3a 73  erp, "::tuapi::s
130e0 79 73 63 61 6c 6c 3a 3a 72 6d 6d 6f 64 22 2c 20  yscall::rmmod", 
130f0 74 75 61 70 69 5f 72 6d 6d 6f 64 2c 20 4e 55 4c  tuapi_rmmod, NUL
13100 4c 2c 20 4e 55 4c 4c 29 3b 0a 09 54 63 6c 5f 43  L, NULL);..Tcl_C
13110 72 65 61 74 65 4f 62 6a 43 6f 6d 6d 61 6e 64 28  reateObjCommand(
13120 69 6e 74 65 72 70 2c 20 22 3a 3a 74 75 61 70 69  interp, "::tuapi
13130 3a 3a 73 79 73 63 61 6c 6c 3a 3a 6c 73 6d 6f 64  ::syscall::lsmod
13140 22 2c 20 74 75 61 70 69 5f 6c 73 6d 6f 64 2c 20  ", tuapi_lsmod, 
13150 4e 55 4c 4c 2c 20 4e 55 4c 4c 29 3b 0a 09 54 63  NULL, NULL);..Tc
13160 6c 5f 43 72 65 61 74 65 4f 62 6a 43 6f 6d 6d 61  l_CreateObjComma
13170 6e 64 28 69 6e 74 65 72 70 2c 20 22 3a 3a 74 75  nd(interp, "::tu
13180 61 70 69 3a 3a 73 79 73 63 61 6c 6c 3a 3a 68 6f  api::syscall::ho
13190 73 74 6e 61 6d 65 22 2c 20 74 75 61 70 69 5f 68  stname", tuapi_h
131a0 6f 73 74 6e 61 6d 65 2c 20 4e 55 4c 4c 2c 20 4e  ostname, NULL, N
131b0 55 4c 4c 29 3b 0a 09 54 63 6c 5f 43 72 65 61 74  ULL);..Tcl_Creat
131c0 65 4f 62 6a 43 6f 6d 6d 61 6e 64 28 69 6e 74 65  eObjCommand(inte
131d0 72 70 2c 20 22 3a 3a 74 75 61 70 69 3a 3a 73 79  rp, "::tuapi::sy
131e0 73 63 61 6c 6c 3a 3a 64 6f 6d 61 69 6e 6e 61 6d  scall::domainnam
131f0 65 22 2c 20 74 75 61 70 69 5f 64 6f 6d 61 69 6e  e", tuapi_domain
13200 6e 61 6d 65 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c  name, NULL, NULL
13210 29 3b 0a 09 54 63 6c 5f 43 72 65 61 74 65 4f 62  );..Tcl_CreateOb
13220 6a 43 6f 6d 6d 61 6e 64 28 69 6e 74 65 72 70 2c  jCommand(interp,
13230 20 22 3a 3a 74 75 61 70 69 3a 3a 73 79 73 63 61   "::tuapi::sysca
13240 6c 6c 3a 3a 6b 6c 6f 67 63 74 6c 22 2c 20 74 75  ll::klogctl", tu
13250 61 70 69 5f 6b 6c 6f 67 63 74 6c 2c 20 4e 55 4c  api_klogctl, NUL
13260 4c 2c 20 4e 55 4c 4c 29 3b 0a 09 54 63 6c 5f 43  L, NULL);..Tcl_C
13270 72 65 61 74 65 4f 62 6a 43 6f 6d 6d 61 6e 64 28  reateObjCommand(
13280 69 6e 74 65 72 70 2c 20 22 3a 3a 74 75 61 70 69  interp, "::tuapi
13290 3a 3a 73 79 73 63 61 6c 6c 3a 3a 73 65 74 74 69  ::syscall::setti
132a0 6d 65 6f 66 64 61 79 22 2c 20 74 75 61 70 69 5f  meofday", tuapi_
132b0 73 65 74 74 69 6d 65 6f 66 64 61 79 2c 20 4e 55  settimeofday, NU
132c0 4c 4c 2c 20 4e 55 4c 4c 29 3b 0a 0a 09 2f 2a 20  LL, NULL);.../* 
132d0 42 6c 6f 63 6b 20 6f 72 20 63 68 61 72 20 64 65  Block or char de
132e0 76 69 63 65 20 72 65 6c 61 74 65 64 20 63 6f 6d  vice related com
132f0 6d 61 6e 64 73 20 2a 2f 0a 09 54 63 6c 5f 43 72  mands */..Tcl_Cr
13300 65 61 74 65 4f 62 6a 43 6f 6d 6d 61 6e 64 28 69  eateObjCommand(i
13310 6e 74 65 72 70 2c 20 22 3a 3a 74 75 61 70 69 3a  nterp, "::tuapi:
13320 3a 73 79 73 63 61 6c 6c 3a 3a 6c 6f 73 65 74 75  :syscall::losetu
13330 70 22 2c 20 74 75 61 70 69 5f 6c 6f 73 65 74 75  p", tuapi_losetu
13340 70 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 29 3b 0a  p, NULL, NULL);.
13350 09 54 63 6c 5f 43 72 65 61 74 65 4f 62 6a 43 6f  .Tcl_CreateObjCo
13360 6d 6d 61 6e 64 28 69 6e 74 65 72 70 2c 20 22 3a  mmand(interp, ":
13370 3a 74 75 61 70 69 3a 3a 73 79 73 63 61 6c 6c 3a  :tuapi::syscall:
13380 3a 65 6a 65 63 74 22 2c 20 74 75 61 70 69 5f 65  :eject", tuapi_e
13390 6a 65 63 74 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c  ject, NULL, NULL
133a0 29 3b 0a 0a 09 2f 2a 20 46 69 6c 65 73 79 73 74  );.../* Filesyst
133b0 65 6d 20 72 65 6c 61 74 65 64 20 63 6f 6d 6d 61  em related comma
133c0 6e 64 73 20 2a 2f 0a 09 54 63 6c 5f 43 72 65 61  nds */..Tcl_Crea
133d0 74 65 4f 62 6a 43 6f 6d 6d 61 6e 64 28 69 6e 74  teObjCommand(int
133e0 65 72 70 2c 20 22 3a 3a 74 75 61 70 69 3a 3a 73  erp, "::tuapi::s
133f0 79 73 63 61 6c 6c 3a 3a 6d 6f 75 6e 74 22 2c 20  yscall::mount", 
13400 74 75 61 70 69 5f 6d 6f 75 6e 74 2c 20 4e 55 4c  tuapi_mount, NUL
13410 4c 2c 20 4e 55 4c 4c 29 3b 0a 09 54 63 6c 5f 43  L, NULL);..Tcl_C
13420 72 65 61 74 65 4f 62 6a 43 6f 6d 6d 61 6e 64 28  reateObjCommand(
13430 69 6e 74 65 72 70 2c 20 22 3a 3a 74 75 61 70 69  interp, "::tuapi
13440 3a 3a 73 79 73 63 61 6c 6c 3a 3a 75 6d 6f 75 6e  ::syscall::umoun
13450 74 22 2c 20 74 75 61 70 69 5f 75 6d 6f 75 6e 74  t", tuapi_umount
13460 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 29 3b 0a 09  , NULL, NULL);..
13470 54 63 6c 5f 43 72 65 61 74 65 4f 62 6a 43 6f 6d  Tcl_CreateObjCom
13480 6d 61 6e 64 28 69 6e 74 65 72 70 2c 20 22 3a 3a  mand(interp, "::
13490 74 75 61 70 69 3a 3a 73 79 73 63 61 6c 6c 3a 3a  tuapi::syscall::
134a0 73 77 61 70 6f 6e 22 2c 20 74 75 61 70 69 5f 73  swapon", tuapi_s
134b0 77 61 70 6f 6e 2c 20 4e 55 4c 4c 2c 20 4e 55 4c  wapon, NULL, NUL
134c0 4c 29 3b 0a 09 54 63 6c 5f 43 72 65 61 74 65 4f  L);..Tcl_CreateO
134d0 62 6a 43 6f 6d 6d 61 6e 64 28 69 6e 74 65 72 70  bjCommand(interp
134e0 2c 20 22 3a 3a 74 75 61 70 69 3a 3a 73 79 73 63  , "::tuapi::sysc
134f0 61 6c 6c 3a 3a 73 77 61 70 6f 66 66 22 2c 20 74  all::swapoff", t
13500 75 61 70 69 5f 73 77 61 70 6f 66 66 2c 20 4e 55  uapi_swapoff, NU
13510 4c 4c 2c 20 4e 55 4c 4c 29 3b 0a 09 54 63 6c 5f  LL, NULL);..Tcl_
13520 43 72 65 61 74 65 4f 62 6a 43 6f 6d 6d 61 6e 64  CreateObjCommand
13530 28 69 6e 74 65 72 70 2c 20 22 3a 3a 74 75 61 70  (interp, "::tuap
13540 69 3a 3a 73 79 73 63 61 6c 6c 3a 3a 6d 6b 6e 6f  i::syscall::mkno
13550 64 22 2c 20 74 75 61 70 69 5f 6d 6b 6e 6f 64 2c  d", tuapi_mknod,
13560 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 29 3b 0a 0a 09   NULL, NULL);...
13570 2f 2a 20 50 72 6f 63 65 73 73 20 72 65 6c 61 74  /* Process relat
13580 65 64 20 63 6f 6d 6d 61 6e 64 73 20 2a 2f 0a 09  ed commands */..
13590 54 63 6c 5f 43 72 65 61 74 65 4f 62 6a 43 6f 6d  Tcl_CreateObjCom
135a0 6d 61 6e 64 28 69 6e 74 65 72 70 2c 20 22 3a 3a  mand(interp, "::
135b0 74 75 61 70 69 3a 3a 73 79 73 63 61 6c 6c 3a 3a  tuapi::syscall::
135c0 67 65 74 75 69 64 22 2c 20 74 75 61 70 69 5f 67  getuid", tuapi_g
135d0 65 74 75 69 64 2c 20 4e 55 4c 4c 2c 20 4e 55 4c  etuid, NULL, NUL
135e0 4c 29 3b 0a 09 54 63 6c 5f 43 72 65 61 74 65 4f  L);..Tcl_CreateO
135f0 62 6a 43 6f 6d 6d 61 6e 64 28 69 6e 74 65 72 70  bjCommand(interp
13600 2c 20 22 3a 3a 74 75 61 70 69 3a 3a 73 79 73 63  , "::tuapi::sysc
13610 61 6c 6c 3a 3a 63 68 72 6f 6f 74 22 2c 20 74 75  all::chroot", tu
13620 61 70 69 5f 63 68 72 6f 6f 74 2c 20 4e 55 4c 4c  api_chroot, NULL
13630 2c 20 4e 55 4c 4c 29 3b 0a 09 54 63 6c 5f 43 72  , NULL);..Tcl_Cr
13640 65 61 74 65 4f 62 6a 43 6f 6d 6d 61 6e 64 28 69  eateObjCommand(i
13650 6e 74 65 72 70 2c 20 22 3a 3a 74 75 61 70 69 3a  nterp, "::tuapi:
13660 3a 73 79 73 63 61 6c 6c 3a 3a 70 69 76 6f 74 5f  :syscall::pivot_
13670 72 6f 6f 74 22 2c 20 74 75 61 70 69 5f 70 69 76  root", tuapi_piv
13680 6f 74 5f 72 6f 6f 74 2c 20 4e 55 4c 4c 2c 20 4e  ot_root, NULL, N
13690 55 4c 4c 29 3b 0a 09 54 63 6c 5f 43 72 65 61 74  ULL);..Tcl_Creat
136a0 65 4f 62 6a 43 6f 6d 6d 61 6e 64 28 69 6e 74 65  eObjCommand(inte
136b0 72 70 2c 20 22 3a 3a 74 75 61 70 69 3a 3a 73 79  rp, "::tuapi::sy
136c0 73 63 61 6c 6c 3a 3a 6b 69 6c 6c 22 2c 20 74 75  scall::kill", tu
136d0 61 70 69 5f 6b 69 6c 6c 2c 20 4e 55 4c 4c 2c 20  api_kill, NULL, 
136e0 4e 55 4c 4c 29 3b 0a 09 54 63 6c 5f 43 72 65 61  NULL);..Tcl_Crea
136f0 74 65 4f 62 6a 43 6f 6d 6d 61 6e 64 28 69 6e 74  teObjCommand(int
13700 65 72 70 2c 20 22 3a 3a 74 75 61 70 69 3a 3a 73  erp, "::tuapi::s
13710 79 73 63 61 6c 6c 3a 3a 77 61 69 74 70 69 64 22  yscall::waitpid"
13720 2c 20 74 75 61 70 69 5f 77 61 69 74 70 69 64 2c  , tuapi_waitpid,
13730 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 29 3b 0a 09 54   NULL, NULL);..T
13740 63 6c 5f 43 72 65 61 74 65 4f 62 6a 43 6f 6d 6d  cl_CreateObjComm
13750 61 6e 64 28 69 6e 74 65 72 70 2c 20 22 3a 3a 74  and(interp, "::t
13760 75 61 70 69 3a 3a 73 79 73 63 61 6c 6c 3a 3a 70  uapi::syscall::p
13770 73 22 2c 20 74 75 61 70 69 5f 70 73 2c 20 4e 55  s", tuapi_ps, NU
13780 4c 4c 2c 20 4e 55 4c 4c 29 3b 0a 09 54 63 6c 5f  LL, NULL);..Tcl_
13790 43 72 65 61 74 65 4f 62 6a 43 6f 6d 6d 61 6e 64  CreateObjCommand
137a0 28 69 6e 74 65 72 70 2c 20 22 3a 3a 74 75 61 70  (interp, "::tuap
137b0 69 3a 3a 73 79 73 63 61 6c 6c 3a 3a 65 78 65 63  i::syscall::exec
137c0 76 65 22 2c 20 74 75 61 70 69 5f 65 78 65 63 76  ve", tuapi_execv
137d0 65 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 29 3b 0a  e, NULL, NULL);.
137e0 09 54 63 6c 5f 43 72 65 61 74 65 4f 62 6a 43 6f  .Tcl_CreateObjCo
137f0 6d 6d 61 6e 64 28 69 6e 74 65 72 70 2c 20 22 3a  mmand(interp, ":
13800 3a 74 75 61 70 69 3a 3a 73 79 73 63 61 6c 6c 3a  :tuapi::syscall:
13810 3a 72 6c 69 6d 69 74 22 2c 20 74 75 61 70 69 5f  :rlimit", tuapi_
13820 72 6c 69 6d 69 74 2c 20 4e 55 4c 4c 2c 20 4e 55  rlimit, NULL, NU
13830 4c 4c 29 3b 0a 09 54 63 6c 5f 43 72 65 61 74 65  LL);..Tcl_Create
13840 4f 62 6a 43 6f 6d 6d 61 6e 64 28 69 6e 74 65 72  ObjCommand(inter
13850 70 2c 20 22 3a 3a 74 75 61 70 69 3a 3a 73 79 73  p, "::tuapi::sys
13860 63 61 6c 6c 3a 3a 72 65 62 6f 6f 74 22 2c 20 74  call::reboot", t
13870 75 61 70 69 5f 72 65 62 6f 6f 74 2c 20 4e 55 4c  uapi_reboot, NUL
13880 4c 2c 20 4e 55 4c 4c 29 3b 0a 0a 09 2f 2a 20 4e  L, NULL);.../* N
13890 65 74 77 6f 72 6b 20 72 65 6c 61 74 65 64 20 63  etwork related c
138a0 6f 6d 6d 61 6e 64 73 20 2a 2f 0a 09 54 63 6c 5f  ommands */..Tcl_
138b0 43 72 65 61 74 65 4f 62 6a 43 6f 6d 6d 61 6e 64  CreateObjCommand
138c0 28 69 6e 74 65 72 70 2c 20 22 3a 3a 74 75 61 70  (interp, "::tuap
138d0 69 3a 3a 73 79 73 63 61 6c 6c 3a 3a 69 66 63 6f  i::syscall::ifco
138e0 6e 66 69 67 22 2c 20 74 75 61 70 69 5f 69 66 63  nfig", tuapi_ifc
138f0 6f 6e 66 69 67 2c 20 4e 55 4c 4c 2c 20 4e 55 4c  onfig, NULL, NUL
13900 4c 29 3b 0a 09 54 63 6c 5f 43 72 65 61 74 65 4f  L);..Tcl_CreateO
13910 62 6a 43 6f 6d 6d 61 6e 64 28 69 6e 74 65 72 70  bjCommand(interp
13920 2c 20 22 3a 3a 74 75 61 70 69 3a 3a 73 79 73 63  , "::tuapi::sysc
13930 61 6c 6c 3a 3a 72 6f 75 74 65 22 2c 20 74 75 61  all::route", tua
13940 70 69 5f 72 6f 75 74 65 2c 20 4e 55 4c 4c 2c 20  pi_route, NULL, 
13950 4e 55 4c 4c 29 3b 0a 09 54 63 6c 5f 43 72 65 61  NULL);..Tcl_Crea
13960 74 65 4f 62 6a 43 6f 6d 6d 61 6e 64 28 69 6e 74  teObjCommand(int
13970 65 72 70 2c 20 22 3a 3a 74 75 61 70 69 3a 3a 73  erp, "::tuapi::s
13980 79 73 63 61 6c 6c 3a 3a 62 72 63 74 6c 22 2c 20  yscall::brctl", 
13990 74 75 61 70 69 5f 62 72 63 74 6c 2c 20 4e 55 4c  tuapi_brctl, NUL
139a0 4c 2c 20 4e 55 4c 4c 29 3b 0a 09 54 63 6c 5f 43  L, NULL);..Tcl_C
139b0 72 65 61 74 65 4f 62 6a 43 6f 6d 6d 61 6e 64 28  reateObjCommand(
139c0 69 6e 74 65 72 70 2c 20 22 3a 3a 74 75 61 70 69  interp, "::tuapi
139d0 3a 3a 73 79 73 63 61 6c 6c 3a 3a 76 63 6f 6e 66  ::syscall::vconf
139e0 69 67 22 2c 20 74 75 61 70 69 5f 76 63 6f 6e 66  ig", tuapi_vconf
139f0 69 67 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 29 3b  ig, NULL, NULL);
13a00 0a 0a 09 2f 2a 20 54 65 72 6d 69 6e 61 6c 20 72  .../* Terminal r
13a10 65 6c 61 74 65 64 20 63 6f 6d 6d 61 6e 64 73 20  elated commands 
13a20 2a 2f 0a 09 54 63 6c 5f 43 72 65 61 74 65 4f 62  */..Tcl_CreateOb
13a30 6a 43 6f 6d 6d 61 6e 64 28 69 6e 74 65 72 70 2c  jCommand(interp,
13a40 20 22 3a 3a 74 75 61 70 69 3a 3a 73 79 73 63 61   "::tuapi::sysca
13a50 6c 6c 3a 3a 73 74 74 79 22 2c 20 74 75 61 70 69  ll::stty", tuapi
13a60 5f 73 74 74 79 2c 20 4e 55 4c 4c 2c 20 4e 55 4c  _stty, NULL, NUL
13a70 4c 29 3b 0a 0a 09 2f 2a 20 4e 65 65 64 65 64 20  L);.../* Needed 
13a80 63 6f 6d 6d 61 6e 64 73 20 66 6f 72 20 62 61 73  commands for bas
13a90 69 63 20 73 65 72 76 69 63 65 73 20 54 63 6c 20  ic services Tcl 
13aa0 6c 61 63 6b 73 20 2a 2f 0a 09 54 63 6c 5f 43 72  lacks */..Tcl_Cr
13ab0 65 61 74 65 4f 62 6a 43 6f 6d 6d 61 6e 64 28 69  eateObjCommand(i
13ac0 6e 74 65 72 70 2c 20 22 3a 3a 74 75 61 70 69 3a  nterp, "::tuapi:
13ad0 3a 73 79 73 63 61 6c 6c 3a 3a 73 6f 63 6b 65 74  :syscall::socket
13ae0 5f 75 6e 69 78 22 2c 20 74 75 61 70 69 5f 73 6f  _unix", tuapi_so
13af0 63 6b 65 74 5f 75 6e 69 78 2c 20 4e 55 4c 4c 2c  cket_unix, NULL,
13b00 20 4e 55 4c 4c 29 3b 0a 0a 09 2f 2a 20 53 65 72   NULL);.../* Ser
13b10 76 69 63 65 20 28 54 53 4d 46 29 20 72 65 6c 61  vice (TSMF) rela
13b20 74 65 64 20 63 6f 6d 6d 61 6e 64 73 20 2a 2f 0a  ted commands */.
13b30 09 54 63 6c 5f 43 72 65 61 74 65 4f 62 6a 43 6f  .Tcl_CreateObjCo
13b40 6d 6d 61 6e 64 28 69 6e 74 65 72 70 2c 20 22 3a  mmand(interp, ":
13b50 3a 74 75 61 70 69 3a 3a 73 79 73 63 61 6c 6c 3a  :tuapi::syscall:
13b60 3a 74 73 6d 66 5f 73 74 61 72 74 5f 73 76 63 22  :tsmf_start_svc"
13b70 2c 20 74 75 61 70 69 5f 74 73 6d 66 5f 73 74 61  , tuapi_tsmf_sta
13b80 72 74 5f 73 76 63 2c 20 4e 55 4c 4c 2c 20 4e 55  rt_svc, NULL, NU
13b90 4c 4c 29 3b 0a 0a 09 2f 2a 20 49 6e 74 65 72 6e  LL);.../* Intern
13ba0 61 6c 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a  al functions */.
13bb0 09 54 63 6c 5f 43 72 65 61 74 65 4f 62 6a 43 6f  .Tcl_CreateObjCo
13bc0 6d 6d 61 6e 64 28 69 6e 74 65 72 70 2c 20 22 3a  mmand(interp, ":
13bd0 3a 74 75 61 70 69 3a 3a 69 6e 74 65 72 6e 61 6c  :tuapi::internal
13be0 3a 3a 68 61 73 68 22 2c 20 74 75 61 70 69 5f 69  ::hash", tuapi_i
13bf0 6e 74 65 72 6e 61 6c 70 72 6f 63 5f 73 69 6d 70  nternalproc_simp
13c00 6c 65 68 61 73 68 2c 20 4e 55 4c 4c 2c 20 4e 55  lehash, NULL, NU
13c10 4c 4c 29 3b 0a 0a 09 2f 2a 20 44 65 66 69 6e 65  LL);.../* Define
13c20 20 63 6f 6e 73 74 61 6e 74 73 20 2a 2f 0a 09 2f   constants */../
13c30 2a 2a 20 43 72 65 61 74 65 20 70 61 72 65 6e 74  ** Create parent
13c40 20 6e 61 6d 65 73 70 61 63 65 20 2a 2a 2f 0a 09   namespace **/..
13c50 54 63 6c 5f 43 72 65 61 74 65 4e 61 6d 65 73 70  Tcl_CreateNamesp
13c60 61 63 65 28 69 6e 74 65 72 70 2c 20 22 3a 3a 74  ace(interp, "::t
13c70 75 61 70 69 3a 3a 63 6f 6e 73 74 22 2c 20 4e 55  uapi::const", NU
13c80 4c 4c 2c 20 4e 55 4c 4c 29 3b 0a 0a 09 2f 2a 2a  LL, NULL);.../**
13c90 20 44 65 66 69 6e 65 20 63 6f 6e 73 74 61 6e 74   Define constant
13ca0 73 2c 20 66 6f 72 20 72 65 61 6c 20 2a 2a 2f 0a  s, for real **/.
13cb0 09 54 63 6c 5f 4f 62 6a 53 65 74 56 61 72 32 28  .Tcl_ObjSetVar2(
13cc0 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53  interp, Tcl_NewS
13cd0 74 72 69 6e 67 4f 62 6a 28 22 3a 3a 74 75 61 70  tringObj("::tuap
13ce0 69 3a 3a 63 6f 6e 73 74 3a 3a 48 4f 53 54 5f 4e  i::const::HOST_N
13cf0 41 4d 45 5f 4d 41 58 22 2c 20 2d 31 29 2c 20 4e  AME_MAX", -1), N
13d00 55 4c 4c 2c 20 54 63 6c 5f 4e 65 77 57 69 64 65  ULL, Tcl_NewWide
13d10 49 6e 74 4f 62 6a 28 48 4f 53 54 5f 4e 41 4d 45  IntObj(HOST_NAME
13d20 5f 4d 41 58 29 2c 20 54 43 4c 5f 47 4c 4f 42 41  _MAX), TCL_GLOBA
13d30 4c 5f 4f 4e 4c 59 29 3b 0a 0a 09 2f 2a 20 43 72  L_ONLY);.../* Cr
13d40 65 61 74 65 20 68 69 67 68 2d 6c 65 76 65 6c 20  eate high-level 
13d50 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 73 20 2a  user functions *
13d60 2f 0a 09 54 63 6c 5f 45 76 61 6c 28 69 6e 74 65  /..Tcl_Eval(inte
13d70 72 70 2c 0a 23 69 6e 63 6c 75 64 65 20 22 74 75  rp,.#include "tu
13d80 61 70 69 2e 74 63 6c 2e 68 22 20 0a 09 29 3b 0a  api.tcl.h" ..);.
13d90 0a 09 54 63 6c 5f 50 6b 67 50 72 6f 76 69 64 65  ..Tcl_PkgProvide
13da0 28 69 6e 74 65 72 70 2c 20 22 74 75 61 70 69 22  (interp, "tuapi"
13db0 2c 20 22 30 2e 37 22 29 3b 0a 0a 09 72 65 74 75  , "0.7");...retu
13dc0 72 6e 28 54 43 4c 5f 4f 4b 29 3b 0a 7d 0a        rn(TCL_OK);.}.