Hex Artifact Content

Artifact 80d5a89597796d9f4a84ed6d9601ff234a2b99c2:


0000: 2f 2a 0a 20 2a 20 43 6f 70 79 72 69 67 68 74 20  /*. * Copyright 
0010: 28 63 29 20 32 30 31 34 2d 32 30 31 37 20 52 6f  (c) 2014-2017 Ro
0020: 79 20 4b 65 65 6e 65 0a 20 2a 20 0a 20 2a 20 50  y Keene. * . * P
0030: 65 72 6d 69 73 73 69 6f 6e 20 69 73 20 68 65 72  ermission is her
0040: 65 62 79 20 67 72 61 6e 74 65 64 2c 20 66 72 65  eby granted, fre
0050: 65 20 6f 66 20 63 68 61 72 67 65 2c 20 74 6f 20  e of charge, to 
0060: 61 6e 79 20 70 65 72 73 6f 6e 20 6f 62 74 61 69  any person obtai
0070: 6e 69 6e 67 20 61 20 0a 20 2a 20 63 6f 70 79 20  ning a . * copy 
0080: 6f 66 20 74 68 69 73 20 73 6f 66 74 77 61 72 65  of this software
0090: 20 61 6e 64 20 61 73 73 6f 63 69 61 74 65 64 20   and associated 
00a0: 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 66 69  documentation fi
00b0: 6c 65 73 20 28 74 68 65 20 22 53 6f 66 74 77 61  les (the "Softwa
00c0: 72 65 22 29 2c 20 0a 20 2a 20 74 6f 20 64 65 61  re"), . * to dea
00d0: 6c 20 69 6e 20 74 68 65 20 53 6f 66 74 77 61 72  l in the Softwar
00e0: 65 20 77 69 74 68 6f 75 74 20 72 65 73 74 72 69  e without restri
00f0: 63 74 69 6f 6e 2c 20 69 6e 63 6c 75 64 69 6e 67  ction, including
0100: 20 77 69 74 68 6f 75 74 20 6c 69 6d 69 74 61 74   without limitat
0110: 69 6f 6e 20 0a 20 2a 20 74 68 65 20 72 69 67 68  ion . * the righ
0120: 74 73 20 74 6f 20 75 73 65 2c 20 63 6f 70 79 2c  ts to use, copy,
0130: 20 6d 6f 64 69 66 79 2c 20 6d 65 72 67 65 2c 20   modify, merge, 
0140: 70 75 62 6c 69 73 68 2c 20 64 69 73 74 72 69 62  publish, distrib
0150: 75 74 65 2c 20 73 75 62 6c 69 63 65 6e 73 65 2c  ute, sublicense,
0160: 20 0a 20 2a 20 61 6e 64 2f 6f 72 20 73 65 6c 6c   . * and/or sell
0170: 20 63 6f 70 69 65 73 20 6f 66 20 74 68 65 20 53   copies of the S
0180: 6f 66 74 77 61 72 65 2c 20 61 6e 64 20 74 6f 20  oftware, and to 
0190: 70 65 72 6d 69 74 20 70 65 72 73 6f 6e 73 20 74  permit persons t
01a0: 6f 20 77 68 6f 6d 20 74 68 65 20 0a 20 2a 20 53  o whom the . * S
01b0: 6f 66 74 77 61 72 65 20 69 73 20 66 75 72 6e 69  oftware is furni
01c0: 73 68 65 64 20 74 6f 20 64 6f 20 73 6f 2c 20 73  shed to do so, s
01d0: 75 62 6a 65 63 74 20 74 6f 20 74 68 65 20 66 6f  ubject to the fo
01e0: 6c 6c 6f 77 69 6e 67 20 63 6f 6e 64 69 74 69 6f  llowing conditio
01f0: 6e 73 3a 0a 20 2a 20 0a 20 2a 20 54 68 65 20 61  ns:. * . * The a
0200: 62 6f 76 65 20 63 6f 70 79 72 69 67 68 74 20 6e  bove copyright n
0210: 6f 74 69 63 65 20 61 6e 64 20 74 68 69 73 20 70  otice and this p
0220: 65 72 6d 69 73 73 69 6f 6e 20 6e 6f 74 69 63 65  ermission notice
0230: 20 73 68 61 6c 6c 20 62 65 20 69 6e 63 6c 75 64   shall be includ
0240: 65 64 20 69 6e 20 0a 20 2a 20 61 6c 6c 20 63 6f  ed in . * all co
0250: 70 69 65 73 20 6f 72 20 73 75 62 73 74 61 6e 74  pies or substant
0260: 69 61 6c 20 70 6f 72 74 69 6f 6e 73 20 6f 66 20  ial portions of 
0270: 74 68 65 20 53 6f 66 74 77 61 72 65 2e 0a 20 2a  the Software.. *
0280: 20 0a 20 2a 20 54 48 45 20 53 4f 46 54 57 41 52   . * THE SOFTWAR
0290: 45 20 49 53 20 50 52 4f 56 49 44 45 44 20 22 41  E IS PROVIDED "A
02a0: 53 20 49 53 22 2c 20 57 49 54 48 4f 55 54 20 57  S IS", WITHOUT W
02b0: 41 52 52 41 4e 54 59 20 4f 46 20 41 4e 59 20 4b  ARRANTY OF ANY K
02c0: 49 4e 44 2c 20 45 58 50 52 45 53 53 20 4f 52 20  IND, EXPRESS OR 
02d0: 0a 20 2a 20 49 4d 50 4c 49 45 44 2c 20 49 4e 43  . * IMPLIED, INC
02e0: 4c 55 44 49 4e 47 20 42 55 54 20 4e 4f 54 20 4c  LUDING BUT NOT L
02f0: 49 4d 49 54 45 44 20 54 4f 20 54 48 45 20 57 41  IMITED TO THE WA
0300: 52 52 41 4e 54 49 45 53 20 4f 46 20 4d 45 52 43  RRANTIES OF MERC
0310: 48 41 4e 54 41 42 49 4c 49 54 59 2c 20 0a 20 2a  HANTABILITY, . *
0320: 20 46 49 54 4e 45 53 53 20 46 4f 52 20 41 20 50   FITNESS FOR A P
0330: 41 52 54 49 43 55 4c 41 52 20 50 55 52 50 4f 53  ARTICULAR PURPOS
0340: 45 20 41 4e 44 20 4e 4f 4e 49 4e 46 52 49 4e 47  E AND NONINFRING
0350: 45 4d 45 4e 54 2e 20 49 4e 20 4e 4f 20 45 56 45  EMENT. IN NO EVE
0360: 4e 54 20 53 48 41 4c 4c 20 0a 20 2a 20 54 48 45  NT SHALL . * THE
0370: 20 41 55 54 48 4f 52 53 20 4f 52 20 43 4f 50 59   AUTHORS OR COPY
0380: 52 49 47 48 54 20 48 4f 4c 44 45 52 53 20 42 45  RIGHT HOLDERS BE
0390: 20 4c 49 41 42 4c 45 20 46 4f 52 20 41 4e 59 20   LIABLE FOR ANY 
03a0: 43 4c 41 49 4d 2c 20 44 41 4d 41 47 45 53 20 4f  CLAIM, DAMAGES O
03b0: 52 20 4f 54 48 45 52 20 0a 20 2a 20 4c 49 41 42  R OTHER . * LIAB
03c0: 49 4c 49 54 59 2c 20 57 48 45 54 48 45 52 20 49  ILITY, WHETHER I
03d0: 4e 20 41 4e 20 41 43 54 49 4f 4e 20 4f 46 20 43  N AN ACTION OF C
03e0: 4f 4e 54 52 41 43 54 2c 20 54 4f 52 54 20 4f 52  ONTRACT, TORT OR
03f0: 20 4f 54 48 45 52 57 49 53 45 2c 20 41 52 49 53   OTHERWISE, ARIS
0400: 49 4e 47 20 0a 20 2a 20 46 52 4f 4d 2c 20 4f 55  ING . * FROM, OU
0410: 54 20 4f 46 20 4f 52 20 49 4e 20 43 4f 4e 4e 45  T OF OR IN CONNE
0420: 43 54 49 4f 4e 20 57 49 54 48 20 54 48 45 20 53  CTION WITH THE S
0430: 4f 46 54 57 41 52 45 20 4f 52 20 54 48 45 20 55  OFTWARE OR THE U
0440: 53 45 20 4f 52 20 4f 54 48 45 52 20 0a 20 2a 20  SE OR OTHER . * 
0450: 44 45 41 4c 49 4e 47 53 20 49 4e 20 54 48 45 20  DEALINGS IN THE 
0460: 53 4f 46 54 57 41 52 45 2e 0a 20 2a 2f 0a 23 64  SOFTWARE.. */.#d
0470: 65 66 69 6e 65 20 5f 4c 49 4e 55 58 5f 53 4f 55  efine _LINUX_SOU
0480: 52 43 45 20 31 0a 23 69 6e 63 6c 75 64 65 20 3c  RCE 1.#include <
0490: 73 79 73 2f 72 65 73 6f 75 72 63 65 2e 68 3e 0a  sys/resource.h>.
04a0: 23 69 6e 63 6c 75 64 65 20 3c 73 79 73 2f 73 79  #include <sys/sy
04b0: 73 63 61 6c 6c 2e 68 3e 0a 23 69 6e 63 6c 75 64  scall.h>.#includ
04c0: 65 20 3c 73 79 73 2f 74 65 72 6d 69 6f 73 2e 68  e <sys/termios.h
04d0: 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 6e 65 74 69  >.#include <neti
04e0: 6e 65 74 2f 69 6e 2e 68 3e 0a 23 69 6e 63 6c 75  net/in.h>.#inclu
04f0: 64 65 20 3c 73 79 73 2f 72 65 62 6f 6f 74 2e 68  de <sys/reboot.h
0500: 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 79 73 2f  >.#include <sys/
0510: 70 72 63 74 6c 2e 68 3e 0a 23 69 6e 63 6c 75 64  prctl.h>.#includ
0520: 65 20 3c 61 72 70 61 2f 69 6e 65 74 2e 68 3e 0a  e <arpa/inet.h>.
0530: 23 69 6e 63 6c 75 64 65 20 3c 73 79 73 2f 73 6f  #include <sys/so
0540: 63 6b 65 74 2e 68 3e 0a 23 69 6e 63 6c 75 64 65  cket.h>.#include
0550: 20 3c 73 79 73 2f 73 65 6c 65 63 74 2e 68 3e 0a   <sys/select.h>.
0560: 23 69 6e 63 6c 75 64 65 20 3c 73 79 73 2f 6d 6f  #include <sys/mo
0570: 75 6e 74 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20  unt.h>.#include 
0580: 3c 73 79 73 2f 74 79 70 65 73 2e 68 3e 0a 23 69  <sys/types.h>.#i
0590: 6e 63 6c 75 64 65 20 3c 73 79 73 2f 69 6f 63 74  nclude <sys/ioct
05a0: 6c 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73  l.h>.#include <s
05b0: 79 73 2f 74 69 6d 65 78 2e 68 3e 0a 23 69 6e 63  ys/timex.h>.#inc
05c0: 6c 75 64 65 20 3c 73 79 73 2f 74 69 6d 65 2e 68  lude <sys/time.h
05d0: 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 79 73 2f  >.#include <sys/
05e0: 6b 6c 6f 67 2e 68 3e 0a 23 69 6e 63 6c 75 64 65  klog.h>.#include
05f0: 20 3c 73 79 73 2f 73 77 61 70 2e 68 3e 0a 23 69   <sys/swap.h>.#i
0600: 6e 63 6c 75 64 65 20 3c 73 79 73 2f 73 74 61 74  nclude <sys/stat
0610: 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 79  .h>.#include <sy
0620: 73 2f 77 61 69 74 2e 68 3e 0a 23 69 6e 63 6c 75  s/wait.h>.#inclu
0630: 64 65 20 3c 73 79 73 2f 75 6e 2e 68 3e 0a 23 69  de <sys/un.h>.#i
0640: 6e 63 6c 75 64 65 20 3c 73 74 64 6c 69 62 2e 68  nclude <stdlib.h
0650: 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 69 67 6e  >.#include <sign
0660: 61 6c 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c  al.h>.#include <
0670: 75 6e 69 73 74 64 2e 68 3e 0a 23 69 6e 63 6c 75  unistd.h>.#inclu
0680: 64 65 20 3c 73 74 72 69 6e 67 2e 68 3e 0a 23 69  de <string.h>.#i
0690: 6e 63 6c 75 64 65 20 3c 66 63 6e 74 6c 2e 68 3e  nclude <fcntl.h>
06a0: 0a 23 69 6e 63 6c 75 64 65 20 3c 65 72 72 6e 6f  .#include <errno
06b0: 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 74 69  .h>.#include <ti
06c0: 6d 65 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c  me.h>.#include <
06d0: 74 63 6c 2e 68 3e 0a 0a 23 69 6e 63 6c 75 64 65  tcl.h>..#include
06e0: 20 3c 6c 69 6e 75 78 2f 73 6f 63 6b 69 6f 73 2e   <linux/sockios.
06f0: 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 6c 69 6e  h>.#include <lin
0700: 75 78 2f 72 6f 75 74 65 2e 68 3e 0a 23 69 6e 63  ux/route.h>.#inc
0710: 6c 75 64 65 20 3c 6c 69 6e 75 78 2f 69 66 2e 68  lude <linux/if.h
0720: 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 6c 69 6e 75  >.#include <linu
0730: 78 2f 69 66 5f 61 72 70 2e 68 3e 0a 23 69 6e 63  x/if_arp.h>.#inc
0740: 6c 75 64 65 20 3c 6c 69 6e 75 78 2f 69 66 5f 62  lude <linux/if_b
0750: 72 69 64 67 65 2e 68 3e 0a 23 69 6e 63 6c 75 64  ridge.h>.#includ
0760: 65 20 3c 6c 69 6e 75 78 2f 6c 6f 6f 70 2e 68 3e  e <linux/loop.h>
0770: 0a 23 69 6e 63 6c 75 64 65 20 3c 6c 69 6e 75 78  .#include <linux
0780: 2f 66 73 2e 68 3e 0a 0a 23 69 66 6e 64 65 66 20  /fs.h>..#ifndef 
0790: 48 4f 53 54 5f 4e 41 4d 45 5f 4d 41 58 0a 2f 2a  HOST_NAME_MAX./*
07a0: 20 53 55 53 76 32 20 4c 69 6d 69 74 20 2a 2f 0a   SUSv2 Limit */.
07b0: 23 64 65 66 69 6e 65 20 48 4f 53 54 5f 4e 41 4d  #define HOST_NAM
07c0: 45 5f 4d 41 58 20 32 35 35 0a 23 65 6e 64 69 66  E_MAX 255.#endif
07d0: 0a 0a 2f 2a 20 46 72 6f 6d 20 4c 69 6e 75 78 20  ../* From Linux 
07e0: 32 2e 36 20 2a 2f 0a 23 69 66 6e 64 65 66 20 4d  2.6 */.#ifndef M
07f0: 4e 54 5f 44 45 54 41 43 48 0a 23 64 65 66 69 6e  NT_DETACH.#defin
0800: 65 20 4d 4e 54 5f 44 45 54 41 43 48 20 32 0a 23  e MNT_DETACH 2.#
0810: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 4d 4e  endif.#ifndef MN
0820: 54 5f 45 58 50 49 52 45 0a 23 64 65 66 69 6e 65  T_EXPIRE.#define
0830: 20 4d 4e 54 5f 45 58 50 49 52 45 20 34 0a 23 65   MNT_EXPIRE 4.#e
0840: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 4d 53 5f  ndif.#ifndef MS_
0850: 4d 4f 56 45 0a 23 64 65 66 69 6e 65 20 4d 53 5f  MOVE.#define MS_
0860: 4d 4f 56 45 20 38 31 39 32 0a 23 65 6e 64 69 66  MOVE 8192.#endif
0870: 0a 23 69 66 6e 64 65 66 20 53 59 53 4c 4f 47 5f  .#ifndef SYSLOG_
0880: 41 43 54 49 4f 4e 5f 43 4c 4f 53 45 0a 23 64 65  ACTION_CLOSE.#de
0890: 66 69 6e 65 20 53 59 53 4c 4f 47 5f 41 43 54 49  fine SYSLOG_ACTI
08a0: 4f 4e 5f 43 4c 4f 53 45 20 30 0a 23 65 6e 64 69  ON_CLOSE 0.#endi
08b0: 66 0a 23 69 66 6e 64 65 66 20 53 59 53 4c 4f 47  f.#ifndef SYSLOG
08c0: 5f 41 43 54 49 4f 4e 5f 4f 50 45 4e 0a 23 64 65  _ACTION_OPEN.#de
08d0: 66 69 6e 65 20 53 59 53 4c 4f 47 5f 41 43 54 49  fine SYSLOG_ACTI
08e0: 4f 4e 5f 4f 50 45 4e 20 31 0a 23 65 6e 64 69 66  ON_OPEN 1.#endif
08f0: 0a 23 69 66 6e 64 65 66 20 53 59 53 4c 4f 47 5f  .#ifndef SYSLOG_
0900: 41 43 54 49 4f 4e 5f 52 45 41 44 5f 41 4c 4c 0a  ACTION_READ_ALL.
0910: 23 64 65 66 69 6e 65 20 53 59 53 4c 4f 47 5f 41  #define SYSLOG_A
0920: 43 54 49 4f 4e 5f 52 45 41 44 5f 41 4c 4c 20 33  CTION_READ_ALL 3
0930: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
0940: 53 59 53 4c 4f 47 5f 41 43 54 49 4f 4e 5f 43 4c  SYSLOG_ACTION_CL
0950: 45 41 52 0a 23 64 65 66 69 6e 65 20 53 59 53 4c  EAR.#define SYSL
0960: 4f 47 5f 41 43 54 49 4f 4e 5f 43 4c 45 41 52 20  OG_ACTION_CLEAR 
0970: 35 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  5.#endif.#ifndef
0980: 20 53 59 53 4c 4f 47 5f 41 43 54 49 4f 4e 5f 43   SYSLOG_ACTION_C
0990: 4f 4e 53 4f 4c 45 5f 4f 46 46 0a 23 64 65 66 69  ONSOLE_OFF.#defi
09a0: 6e 65 20 53 59 53 4c 4f 47 5f 41 43 54 49 4f 4e  ne SYSLOG_ACTION
09b0: 5f 43 4f 4e 53 4f 4c 45 5f 4f 46 46 20 36 0a 23  _CONSOLE_OFF 6.#
09c0: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 59  endif.#ifndef SY
09d0: 53 4c 4f 47 5f 41 43 54 49 4f 4e 5f 43 4f 4e 53  SLOG_ACTION_CONS
09e0: 4f 4c 45 5f 4f 4e 0a 23 64 65 66 69 6e 65 20 53  OLE_ON.#define S
09f0: 59 53 4c 4f 47 5f 41 43 54 49 4f 4e 5f 43 4f 4e  YSLOG_ACTION_CON
0a00: 53 4f 4c 45 5f 4f 4e 20 37 0a 23 65 6e 64 69 66  SOLE_ON 7.#endif
0a10: 0a 0a 2f 2a 20 53 69 6d 70 6c 65 20 6d 61 63 72  ../* Simple macr
0a20: 6f 73 20 2a 2f 0a 23 69 66 6e 64 65 66 20 4d 41  os */.#ifndef MA
0a30: 58 0a 23 64 65 66 69 6e 65 20 4d 41 58 28 61 2c  X.#define MAX(a,
0a40: 20 62 29 20 28 28 28 61 29 20 3c 20 28 62 29 29   b) (((a) < (b))
0a50: 20 3f 20 28 62 29 20 3a 20 28 61 29 29 0a 23 65   ? (b) : (a)).#e
0a60: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 4d 49 4e  ndif.#ifndef MIN
0a70: 0a 23 64 65 66 69 6e 65 20 4d 49 4e 28 61 2c 20  .#define MIN(a, 
0a80: 62 29 20 28 28 28 61 29 20 3c 20 28 62 29 29 20  b) (((a) < (b)) 
0a90: 3f 20 28 61 29 20 3a 20 28 62 29 29 0a 23 65 6e  ? (a) : (b)).#en
0aa0: 64 69 66 0a 0a 2f 2a 20 55 73 65 72 20 65 6e 76  dif../* User env
0ab0: 69 72 6f 6e 6d 65 6e 74 2c 20 66 6f 72 20 65 78  ironment, for ex
0ac0: 65 63 76 65 20 2a 2f 0a 65 78 74 65 72 6e 20 63  ecve */.extern c
0ad0: 68 61 72 20 2a 2a 65 6e 76 69 72 6f 6e 3b 0a 0a  har **environ;..
0ae0: 2f 2a 20 52 65 2d 69 6d 70 6c 65 6d 65 6e 74 20  /* Re-implement 
0af0: 74 68 65 73 65 20 69 66 20 6e 65 65 64 65 64 20  these if needed 
0b00: 2a 2f 0a 23 69 66 64 65 66 20 53 59 53 5f 69 6e  */.#ifdef SYS_in
0b10: 69 74 5f 6d 6f 64 75 6c 65 0a 73 74 61 74 69 63  it_module.static
0b20: 20 69 6e 74 20 69 6e 69 74 5f 6d 6f 64 75 6c 65   int init_module
0b30: 28 76 6f 69 64 20 2a 76 61 6c 2c 20 75 6e 73 69  (void *val, unsi
0b40: 67 6e 65 64 20 6c 6f 6e 67 20 6c 65 6e 2c 20 63  gned long len, c
0b50: 6f 6e 73 74 20 63 68 61 72 20 2a 61 72 67 73 29  onst char *args)
0b60: 20 7b 0a 09 72 65 74 75 72 6e 28 73 79 73 63 61   {..return(sysca
0b70: 6c 6c 28 53 59 53 5f 69 6e 69 74 5f 6d 6f 64 75  ll(SYS_init_modu
0b80: 6c 65 2c 20 76 61 6c 2c 20 6c 65 6e 2c 20 61 72  le, val, len, ar
0b90: 67 73 29 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 23  gs));.}.#endif.#
0ba0: 69 66 64 65 66 20 53 59 53 5f 64 65 6c 65 74 65  ifdef SYS_delete
0bb0: 5f 6d 6f 64 75 6c 65 0a 73 74 61 74 69 63 20 69  _module.static i
0bc0: 6e 74 20 64 65 6c 65 74 65 5f 6d 6f 64 75 6c 65  nt delete_module
0bd0: 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 6e 61 6d  (const char *nam
0be0: 65 2c 20 69 6e 74 20 66 6c 61 67 73 29 20 7b 0a  e, int flags) {.
0bf0: 09 72 65 74 75 72 6e 28 73 79 73 63 61 6c 6c 28  .return(syscall(
0c00: 53 59 53 5f 64 65 6c 65 74 65 5f 6d 6f 64 75 6c  SYS_delete_modul
0c10: 65 2c 20 6e 61 6d 65 2c 20 66 6c 61 67 73 29 29  e, name, flags))
0c20: 3b 0a 7d 0a 23 65 6e 64 69 66 0a 23 69 66 64 65  ;.}.#endif.#ifde
0c30: 66 20 53 59 53 5f 70 69 76 6f 74 5f 72 6f 6f 74  f SYS_pivot_root
0c40: 0a 73 74 61 74 69 63 20 69 6e 74 20 70 69 76 6f  .static int pivo
0c50: 74 5f 72 6f 6f 74 28 63 6f 6e 73 74 20 63 68 61  t_root(const cha
0c60: 72 20 2a 6e 65 77 5f 72 6f 6f 74 2c 20 63 6f 6e  r *new_root, con
0c70: 73 74 20 63 68 61 72 20 2a 70 75 74 5f 6f 6c 64  st char *put_old
0c80: 29 20 7b 0a 09 72 65 74 75 72 6e 28 73 79 73 63  ) {..return(sysc
0c90: 61 6c 6c 28 53 59 53 5f 70 69 76 6f 74 5f 72 6f  all(SYS_pivot_ro
0ca0: 6f 74 2c 20 6e 65 77 5f 72 6f 6f 74 2c 20 70 75  ot, new_root, pu
0cb0: 74 5f 6f 6c 64 29 29 3b 0a 7d 0a 23 65 6e 64 69  t_old));.}.#endi
0cc0: 66 0a 0a 2f 2a 0a 20 2a 20 53 69 6d 70 6c 65 20  f../*. * Simple 
0cd0: 68 61 73 68 20 72 6f 75 74 69 6e 65 20 74 6f 20  hash routine to 
0ce0: 65 6e 61 62 6c 65 20 73 77 69 74 63 68 69 6e 67  enable switching
0cf0: 20 6f 6e 20 61 20 73 74 72 69 6e 67 20 74 6f 20   on a string to 
0d00: 62 65 20 69 6d 70 6c 65 6d 65 6e 74 65 64 0a 20  be implemented. 
0d10: 2a 2f 0a 73 74 61 74 69 63 20 75 6e 73 69 67 6e  */.static unsign
0d20: 65 64 20 6c 6f 6e 67 20 74 75 61 70 69 5f 69 6e  ed long tuapi_in
0d30: 74 65 72 6e 61 6c 5f 73 69 6d 70 6c 65 68 61 73  ternal_simplehas
0d40: 68 28 63 6f 6e 73 74 20 76 6f 69 64 20 2a 64 61  h(const void *da
0d50: 74 61 62 75 66 2c 20 69 6e 74 20 64 61 74 61 6c  tabuf, int datal
0d60: 65 6e 29 20 7b 0a 09 75 6e 73 69 67 6e 65 64 20  en) {..unsigned 
0d70: 6c 6f 6e 67 20 72 65 74 76 61 6c 20 3d 20 30 3b  long retval = 0;
0d80: 0a 09 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  ..const unsigned
0d90: 20 63 68 61 72 20 2a 64 61 74 61 3b 0a 0a 09 64   char *data;...d
0da0: 61 74 61 20 3d 20 64 61 74 61 62 75 66 3b 0a 0a  ata = databuf;..
0db0: 09 66 6f 72 20 28 3b 20 64 61 74 61 6c 65 6e 20  .for (; datalen 
0dc0: 3e 20 30 3b 20 64 61 74 61 6c 65 6e 2d 2d 2c 64  > 0; datalen--,d
0dd0: 61 74 61 2b 2b 29 20 7b 0a 09 09 72 65 74 76 61  ata++) {...retva
0de0: 6c 20 5e 3d 20 28 72 65 74 76 61 6c 20 3e 3e 20  l ^= (retval >> 
0df0: 32 35 29 20 26 20 30 78 37 46 3b 0a 09 09 72 65  25) & 0x7F;...re
0e00: 74 76 61 6c 20 3c 3c 3d 20 37 3b 0a 09 09 72 65  tval <<= 7;...re
0e10: 74 76 61 6c 20 26 3d 20 28 30 78 46 46 46 46 46  tval &= (0xFFFFF
0e20: 46 46 46 55 4c 29 3b 0a 09 09 72 65 74 76 61 6c  FFFUL);...retval
0e30: 20 5e 3d 20 2a 64 61 74 61 3b 0a 09 7d 0a 0a 09   ^= *data;..}...
0e40: 72 65 74 75 72 6e 28 72 65 74 76 61 6c 29 3b 0a  return(retval);.
0e50: 7d 0a 0a 73 74 61 74 69 63 20 75 6e 73 69 67 6e  }..static unsign
0e60: 65 64 20 6c 6f 6e 67 20 74 75 61 70 69 5f 69 6e  ed long tuapi_in
0e70: 74 65 72 6e 61 6c 5f 73 69 6d 70 6c 65 68 61 73  ternal_simplehas
0e80: 68 5f 6f 62 6a 28 54 63 6c 5f 4f 62 6a 20 2a 74  h_obj(Tcl_Obj *t
0e90: 63 6c 5f 64 61 74 61 29 20 7b 0a 09 75 6e 73 69  cl_data) {..unsi
0ea0: 67 6e 65 64 20 6c 6f 6e 67 20 72 65 74 76 61 6c  gned long retval
0eb0: 3b 0a 09 63 68 61 72 20 2a 64 61 74 61 3b 0a 09  ;..char *data;..
0ec0: 69 6e 74 20 64 61 74 61 6c 65 6e 20 3d 20 2d 31  int datalen = -1
0ed0: 3b 0a 0a 09 64 61 74 61 20 3d 20 54 63 6c 5f 47  ;...data = Tcl_G
0ee0: 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28  etStringFromObj(
0ef0: 74 63 6c 5f 64 61 74 61 2c 20 26 64 61 74 61 6c  tcl_data, &datal
0f00: 65 6e 29 3b 0a 0a 09 72 65 74 76 61 6c 20 3d 20  en);...retval = 
0f10: 74 75 61 70 69 5f 69 6e 74 65 72 6e 61 6c 5f 73  tuapi_internal_s
0f20: 69 6d 70 6c 65 68 61 73 68 28 64 61 74 61 2c 20  implehash(data, 
0f30: 64 61 74 61 6c 65 6e 29 3b 0a 0a 09 72 65 74 75  datalen);...retu
0f40: 72 6e 28 72 65 74 76 61 6c 29 3b 0a 7d 0a 0a 23  rn(retval);.}..#
0f50: 69 66 20 30 0a 2f 2a 20 4e 4f 54 55 53 45 44 3a  if 0./* NOTUSED:
0f60: 20 55 6e 63 6f 6d 6d 65 6e 74 20 77 68 65 6e 20   Uncomment when 
0f70: 6e 65 65 64 65 64 3a 20 2a 2f 0a 73 74 61 74 69  needed: */.stati
0f80: 63 20 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20  c unsigned long 
0f90: 74 75 61 70 69 5f 69 6e 74 65 72 6e 61 6c 5f 73  tuapi_internal_s
0fa0: 69 6d 70 6c 65 68 61 73 68 5f 73 74 72 28 63 6f  implehash_str(co
0fb0: 6e 73 74 20 63 68 61 72 20 2a 64 61 74 61 29 20  nst char *data) 
0fc0: 7b 0a 09 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67  {..unsigned long
0fd0: 20 72 65 74 76 61 6c 3b 0a 09 69 6e 74 20 64 61   retval;..int da
0fe0: 74 61 6c 65 6e 3b 0a 0a 09 64 61 74 61 6c 65 6e  talen;...datalen
0ff0: 20 3d 20 73 74 72 6c 65 6e 28 64 61 74 61 29 3b   = strlen(data);
1000: 0a 0a 09 72 65 74 76 61 6c 20 3d 20 74 75 61 70  ...retval = tuap
1010: 69 5f 69 6e 74 65 72 6e 61 6c 5f 73 69 6d 70 6c  i_internal_simpl
1020: 65 68 61 73 68 28 64 61 74 61 2c 20 64 61 74 61  ehash(data, data
1030: 6c 65 6e 29 3b 0a 0a 09 72 65 74 75 72 6e 28 72  len);...return(r
1040: 65 74 76 61 6c 29 3b 0a 7d 0a 23 65 6e 64 69 66  etval);.}.#endif
1050: 0a 0a 73 74 61 74 69 63 20 69 6e 74 20 74 75 61  ..static int tua
1060: 70 69 5f 69 6e 74 65 72 6e 61 6c 70 72 6f 63 5f  pi_internalproc_
1070: 73 69 6d 70 6c 65 68 61 73 68 28 43 6c 69 65 6e  simplehash(Clien
1080: 74 44 61 74 61 20 63 64 2c 20 54 63 6c 5f 49 6e  tData cd, Tcl_In
1090: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 69 6e  terp *interp, in
10a0: 74 20 6f 62 6a 63 2c 20 54 63 6c 5f 4f 62 6a 20  t objc, Tcl_Obj 
10b0: 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 29 20 7b  *CONST objv[]) {
10c0: 0a 09 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20  ..unsigned long 
10d0: 68 61 73 68 76 61 6c 3b 0a 09 54 63 6c 5f 4f 62  hashval;..Tcl_Ob
10e0: 6a 20 2a 68 61 73 68 76 61 6c 5f 6f 62 6a 3b 0a  j *hashval_obj;.
10f0: 0a 09 69 66 20 28 6f 62 6a 63 20 21 3d 20 32 29  ..if (objc != 2)
1100: 20 7b 0a 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52   {...Tcl_SetObjR
1110: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63  esult(interp, Tc
1120: 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22  l_NewStringObj("
1130: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
1140: 6f 75 6c 64 20 62 65 20 5c 22 3a 3a 74 75 61 70  ould be \"::tuap
1150: 69 3a 3a 69 6e 74 65 72 6e 61 6c 3a 3a 68 61 73  i::internal::has
1160: 68 20 76 61 6c 75 65 5c 22 22 2c 20 2d 31 29 29  h value\"", -1))
1170: 3b 0a 0a 09 09 72 65 74 75 72 6e 28 54 43 4c 5f  ;....return(TCL_
1180: 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 68 61 73  ERROR);..}...has
1190: 68 76 61 6c 20 3d 20 74 75 61 70 69 5f 69 6e 74  hval = tuapi_int
11a0: 65 72 6e 61 6c 5f 73 69 6d 70 6c 65 68 61 73 68  ernal_simplehash
11b0: 5f 6f 62 6a 28 6f 62 6a 76 5b 31 5d 29 3b 0a 0a  _obj(objv[1]);..
11c0: 09 68 61 73 68 76 61 6c 5f 6f 62 6a 20 3d 20 54  .hashval_obj = T
11d0: 63 6c 5f 4e 65 77 4f 62 6a 28 29 3b 0a 09 54 63  cl_NewObj();..Tc
11e0: 6c 5f 53 65 74 57 69 64 65 49 6e 74 4f 62 6a 28  l_SetWideIntObj(
11f0: 68 61 73 68 76 61 6c 5f 6f 62 6a 2c 20 68 61 73  hashval_obj, has
1200: 68 76 61 6c 29 3b 0a 0a 09 54 63 6c 5f 53 65 74  hval);...Tcl_Set
1210: 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70  ObjResult(interp
1220: 2c 20 68 61 73 68 76 61 6c 5f 6f 62 6a 29 3b 0a  , hashval_obj);.
1230: 0a 09 72 65 74 75 72 6e 28 54 43 4c 5f 4f 4b 29  ..return(TCL_OK)
1240: 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 69 6e 74 20  ;.}..static int 
1250: 74 75 61 70 69 5f 69 6e 74 65 72 6e 61 6c 5f 67  tuapi_internal_g
1260: 65 74 73 6f 63 6b 28 69 6e 74 20 2a 73 6f 63 6b  etsock(int *sock
1270: 5f 76 34 5f 6f 75 74 2c 20 69 6e 74 20 2a 73 6f  _v4_out, int *so
1280: 63 6b 5f 76 36 5f 6f 75 74 29 20 7b 0a 09 69 6e  ck_v6_out) {..in
1290: 74 20 73 6f 63 6b 5f 76 34 20 3d 20 2d 31 2c 20  t sock_v4 = -1, 
12a0: 73 6f 63 6b 5f 76 36 20 3d 20 2d 31 3b 0a 09 69  sock_v6 = -1;..i
12b0: 6e 74 20 73 6f 63 6b 3b 0a 0a 09 69 66 20 28 73  nt sock;...if (s
12c0: 6f 63 6b 5f 76 34 5f 6f 75 74 20 3d 3d 20 4e 55  ock_v4_out == NU
12d0: 4c 4c 20 26 26 20 73 6f 63 6b 5f 76 36 5f 6f 75  LL && sock_v6_ou
12e0: 74 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 72  t == NULL) {...r
12f0: 65 74 75 72 6e 28 2d 31 29 3b 0a 09 7d 0a 0a 09  eturn(-1);..}...
1300: 69 66 20 28 73 6f 63 6b 5f 76 34 5f 6f 75 74 20  if (sock_v4_out 
1310: 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 2f 2a 0a  != NULL) {.../*.
1320: 09 09 20 2a 20 43 68 65 63 6b 20 66 6f 72 20 49  .. * Check for I
1330: 50 76 34 20 73 75 70 70 6f 72 74 20 62 65 66 6f  Pv4 support befo
1340: 72 65 20 74 72 79 69 6e 67 20 74 6f 20 63 72 65  re trying to cre
1350: 61 74 65 20 61 6e 20 49 50 76 34 20 73 6f 63 6b  ate an IPv4 sock
1360: 65 74 20 74 6f 0a 09 09 20 2a 20 61 76 6f 69 64  et to... * avoid
1370: 20 64 65 6d 61 6e 64 2d 6c 6f 61 64 69 6e 67 20   demand-loading 
1380: 49 50 76 34 20 28 58 58 58 3a 20 54 4f 44 4f 29  IPv4 (XXX: TODO)
1390: 0a 09 09 20 2a 2f 0a 09 09 73 6f 63 6b 5f 76 34  ... */...sock_v4
13a0: 20 3d 20 73 6f 63 6b 65 74 28 41 46 5f 49 4e 45   = socket(AF_INE
13b0: 54 2c 20 53 4f 43 4b 5f 44 47 52 41 4d 2c 20 30  T, SOCK_DGRAM, 0
13c0: 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 73 6f 63 6b  );..}...if (sock
13d0: 5f 76 36 5f 6f 75 74 20 21 3d 20 4e 55 4c 4c 29  _v6_out != NULL)
13e0: 20 7b 0a 09 09 2f 2a 0a 09 09 20 2a 20 43 68 65   {.../*... * Che
13f0: 63 6b 20 66 6f 72 20 49 50 76 36 20 73 75 70 70  ck for IPv6 supp
1400: 6f 72 74 20 62 65 66 6f 72 65 20 74 72 79 69 6e  ort before tryin
1410: 67 20 74 6f 20 63 72 65 61 74 65 20 61 6e 20 49  g to create an I
1420: 50 76 36 20 73 6f 63 6b 65 74 20 74 6f 0a 09 09  Pv6 socket to...
1430: 20 2a 20 61 76 6f 69 64 20 64 65 6d 61 6e 64 2d   * avoid demand-
1440: 6c 6f 61 64 69 6e 67 20 49 50 76 36 20 28 58 58  loading IPv6 (XX
1450: 58 3a 20 54 4f 44 4f 29 0a 09 09 20 2a 2f 0a 09  X: TODO)... */..
1460: 09 73 6f 63 6b 5f 76 36 20 3d 20 73 6f 63 6b 65  .sock_v6 = socke
1470: 74 28 41 46 5f 49 4e 45 54 36 2c 20 53 4f 43 4b  t(AF_INET6, SOCK
1480: 5f 44 47 52 41 4d 2c 20 30 29 3b 0a 09 7d 0a 0a  _DGRAM, 0);..}..
1490: 09 2f 2a 20 50 69 63 6b 20 61 20 73 6f 63 6b 65  ./* Pick a socke
14a0: 74 20 74 6f 20 71 75 65 72 79 20 66 6f 72 20 74  t to query for t
14b0: 68 65 20 69 6e 74 65 72 66 61 63 65 20 6c 69 73  he interface lis
14c0: 74 20 2a 2f 0a 09 69 66 20 28 73 6f 63 6b 5f 76  t */..if (sock_v
14d0: 34 20 3d 3d 20 2d 31 20 26 26 20 73 6f 63 6b 5f  4 == -1 && sock_
14e0: 76 36 20 3d 3d 20 2d 31 29 20 7b 0a 09 09 72 65  v6 == -1) {...re
14f0: 74 75 72 6e 28 2d 31 29 3b 0a 09 7d 0a 0a 09 69  turn(-1);..}...i
1500: 66 20 28 73 6f 63 6b 5f 76 36 20 21 3d 20 2d 31  f (sock_v6 != -1
1510: 29 20 7b 0a 09 09 73 6f 63 6b 20 3d 20 73 6f 63  ) {...sock = soc
1520: 6b 5f 76 36 3b 0a 09 7d 20 65 6c 73 65 20 7b 0a  k_v6;..} else {.
1530: 09 09 73 6f 63 6b 20 3d 20 73 6f 63 6b 5f 76 34  ..sock = sock_v4
1540: 3b 0a 09 7d 0a 0a 09 69 66 20 28 73 6f 63 6b 5f  ;..}...if (sock_
1550: 76 34 5f 6f 75 74 20 21 3d 20 4e 55 4c 4c 29 20  v4_out != NULL) 
1560: 7b 0a 09 09 2a 73 6f 63 6b 5f 76 34 5f 6f 75 74  {...*sock_v4_out
1570: 20 3d 20 73 6f 63 6b 5f 76 34 3b 0a 09 7d 0a 0a   = sock_v4;..}..
1580: 09 69 66 20 28 73 6f 63 6b 5f 76 36 5f 6f 75 74  .if (sock_v6_out
1590: 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 2a 73   != NULL) {...*s
15a0: 6f 63 6b 5f 76 36 5f 6f 75 74 20 3d 20 73 6f 63  ock_v6_out = soc
15b0: 6b 5f 76 36 3b 0a 09 7d 0a 0a 09 72 65 74 75 72  k_v6;..}...retur
15c0: 6e 28 73 6f 63 6b 29 3b 0a 7d 0a 0a 2f 2a 0a 20  n(sock);.}../*. 
15d0: 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 53 79 73 74  * Low-level Syst
15e0: 65 6d 20 43 61 6c 6c 20 57 72 61 70 70 65 72 20  em Call Wrapper 
15f0: 50 72 6f 63 65 64 75 72 65 73 0a 20 2a 0a 20 2a  Procedures. *. *
1600: 20 54 68 65 73 65 20 70 72 6f 63 65 64 75 72 65   These procedure
1610: 73 20 73 68 6f 75 6c 64 20 6d 69 6e 69 6d 61 6c  s should minimal
1620: 6c 79 20 77 72 61 70 20 4c 69 6e 75 78 20 6f 72  ly wrap Linux or
1630: 20 55 4e 49 58 20 73 79 73 74 65 6d 20 63 61 6c   UNIX system cal
1640: 6c 73 20 74 6f 0a 20 2a 20 65 78 70 6f 73 65 20  ls to. * expose 
1650: 74 6f 20 74 68 65 20 54 63 6c 2d 6c 65 76 65 6c  to the Tcl-level
1660: 2e 20 20 57 68 65 72 65 20 70 6f 73 73 69 62 6c  .  Where possibl
1670: 65 20 61 63 63 65 70 74 20 73 79 6d 62 6f 6c 69  e accept symboli
1680: 63 20 6e 61 6d 65 73 20 72 61 74 68 65 72 0a 20  c names rather. 
1690: 2a 20 74 68 61 6e 20 6e 75 6d 65 72 69 63 20 76  * than numeric v
16a0: 61 6c 75 65 73 20 28 2e 65 2e 67 2c 20 6c 69 73  alues (.e.g, lis
16b0: 74 20 6f 66 20 76 61 6c 75 65 73 20 74 6f 20 4f  t of values to O
16c0: 52 20 74 6f 67 65 74 68 65 72 20 74 6f 20 67 65  R together to ge
16d0: 74 20 66 6c 61 67 73 29 2e 0a 20 2a 2f 0a 73 74  t flags).. */.st
16e0: 61 74 69 63 20 69 6e 74 20 74 75 61 70 69 5f 6d  atic int tuapi_m
16f0: 6f 75 6e 74 28 43 6c 69 65 6e 74 44 61 74 61 20  ount(ClientData 
1700: 63 64 2c 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  cd, Tcl_Interp *
1710: 69 6e 74 65 72 70 2c 20 69 6e 74 20 6f 62 6a 63  interp, int objc
1720: 2c 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54  , Tcl_Obj *CONST
1730: 20 6f 62 6a 76 5b 5d 29 20 7b 0a 09 54 63 6c 5f   objv[]) {..Tcl_
1740: 4f 62 6a 20 2a 6d 6f 75 6e 74 66 6c 61 67 73 5f  Obj *mountflags_
1750: 6f 62 6a 2c 20 2a 2a 6d 6f 75 6e 74 66 6c 61 67  obj, **mountflag
1760: 73 5f 6c 69 73 74 2c 20 2a 6d 6f 75 6e 74 66 6c  s_list, *mountfl
1770: 61 67 3b 0a 09 69 6e 74 20 6d 6f 75 6e 74 66 6c  ag;..int mountfl
1780: 61 67 73 5f 6c 69 73 74 5f 6c 65 6e 3b 0a 09 63  ags_list_len;..c
1790: 68 61 72 20 2a 73 6f 75 72 63 65 2c 20 2a 74 61  har *source, *ta
17a0: 72 67 65 74 2c 20 2a 66 73 74 79 70 65 3b 0a 09  rget, *fstype;..
17b0: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 6d 6f  unsigned long mo
17c0: 75 6e 74 66 6c 61 67 73 20 3d 20 30 3b 0a 09 76  untflags = 0;..v
17d0: 6f 69 64 20 2a 64 61 74 61 20 3d 20 4e 55 4c 4c  oid *data = NULL
17e0: 3b 0a 09 69 6e 74 20 6d 6f 75 6e 74 5f 72 65 74  ;..int mount_ret
17f0: 2c 20 74 63 6c 5f 72 65 74 3b 0a 0a 09 69 66 20  , tcl_ret;...if 
1800: 28 6f 62 6a 63 20 3c 20 35 20 7c 7c 20 6f 62 6a  (objc < 5 || obj
1810: 63 20 3e 20 36 29 20 7b 0a 09 09 54 63 6c 5f 53  c > 6) {...Tcl_S
1820: 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
1830: 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e  rp, Tcl_NewStrin
1840: 67 4f 62 6a 28 22 77 72 6f 6e 67 20 23 20 61 72  gObj("wrong # ar
1850: 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
1860: 3a 3a 74 75 61 70 69 3a 3a 73 79 73 63 61 6c 6c  ::tuapi::syscall
1870: 3a 3a 6d 6f 75 6e 74 20 73 6f 75 72 63 65 20 74  ::mount source t
1880: 61 72 67 65 74 20 66 73 74 79 70 65 20 6d 6f 75  arget fstype mou
1890: 6e 74 66 6c 61 67 73 20 3f 64 61 74 61 3f 5c 22  ntflags ?data?\"
18a0: 22 2c 20 2d 31 29 29 3b 0a 0a 09 09 72 65 74 75  ", -1));....retu
18b0: 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 09  rn(TCL_ERROR);..
18c0: 7d 0a 0a 09 73 6f 75 72 63 65 20 3d 20 54 63 6c  }...source = Tcl
18d0: 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
18e0: 31 5d 29 3b 0a 09 74 61 72 67 65 74 20 3d 20 54  1]);..target = T
18f0: 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
1900: 76 5b 32 5d 29 3b 0a 09 66 73 74 79 70 65 20 3d  v[2]);..fstype =
1910: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
1920: 62 6a 76 5b 33 5d 29 3b 0a 09 6d 6f 75 6e 74 66  bjv[3]);..mountf
1930: 6c 61 67 73 5f 6f 62 6a 20 3d 20 6f 62 6a 76 5b  lags_obj = objv[
1940: 34 5d 3b 0a 0a 09 69 66 20 28 6f 62 6a 63 20 3d  4];...if (objc =
1950: 3d 20 36 29 20 7b 0a 09 09 64 61 74 61 20 3d 20  = 6) {...data = 
1960: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
1970: 6a 76 5b 35 5d 29 3b 0a 09 7d 0a 0a 09 74 63 6c  jv[5]);..}...tcl
1980: 5f 72 65 74 20 3d 20 54 63 6c 5f 4c 69 73 74 4f  _ret = Tcl_ListO
1990: 62 6a 47 65 74 45 6c 65 6d 65 6e 74 73 28 69 6e  bjGetElements(in
19a0: 74 65 72 70 2c 20 6d 6f 75 6e 74 66 6c 61 67 73  terp, mountflags
19b0: 5f 6f 62 6a 2c 20 26 6d 6f 75 6e 74 66 6c 61 67  _obj, &mountflag
19c0: 73 5f 6c 69 73 74 5f 6c 65 6e 2c 20 26 6d 6f 75  s_list_len, &mou
19d0: 6e 74 66 6c 61 67 73 5f 6c 69 73 74 29 3b 0a 09  ntflags_list);..
19e0: 69 66 20 28 74 63 6c 5f 72 65 74 20 21 3d 20 54  if (tcl_ret != T
19f0: 43 4c 5f 4f 4b 29 20 7b 0a 09 09 72 65 74 75 72  CL_OK) {...retur
1a00: 6e 28 74 63 6c 5f 72 65 74 29 3b 0a 09 7d 0a 0a  n(tcl_ret);..}..
1a10: 09 66 6f 72 20 28 3b 20 6d 6f 75 6e 74 66 6c 61  .for (; mountfla
1a20: 67 73 5f 6c 69 73 74 5f 6c 65 6e 20 3e 20 30 3b  gs_list_len > 0;
1a30: 20 6d 6f 75 6e 74 66 6c 61 67 73 5f 6c 69 73 74   mountflags_list
1a40: 5f 6c 65 6e 2d 2d 2c 6d 6f 75 6e 74 66 6c 61 67  _len--,mountflag
1a50: 73 5f 6c 69 73 74 2b 2b 29 20 7b 0a 09 09 6d 6f  s_list++) {...mo
1a60: 75 6e 74 66 6c 61 67 20 3d 20 6d 6f 75 6e 74 66  untflag = mountf
1a70: 6c 61 67 73 5f 6c 69 73 74 5b 30 5d 3b 0a 0a 09  lags_list[0];...
1a80: 09 73 77 69 74 63 68 20 28 74 75 61 70 69 5f 69  .switch (tuapi_i
1a90: 6e 74 65 72 6e 61 6c 5f 73 69 6d 70 6c 65 68 61  nternal_simpleha
1aa0: 73 68 5f 6f 62 6a 28 6d 6f 75 6e 74 66 6c 61 67  sh_obj(mountflag
1ab0: 29 29 20 7b 0a 23 69 66 64 65 66 20 4d 53 5f 42  )) {.#ifdef MS_B
1ac0: 49 4e 44 0a 09 09 09 63 61 73 65 20 30 78 38 35  IND....case 0x85
1ad0: 32 36 37 34 34 3a 20 2f 2a 20 42 49 4e 44 20 2a  26744: /* BIND *
1ae0: 2f 0a 09 09 09 09 6d 6f 75 6e 74 66 6c 61 67 73  /.....mountflags
1af0: 20 7c 3d 20 4d 53 5f 42 49 4e 44 3b 0a 09 09 09   |= MS_BIND;....
1b00: 09 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 23  .break;.#endif.#
1b10: 69 66 64 65 66 20 4d 53 5f 44 49 52 53 59 4e 43  ifdef MS_DIRSYNC
1b20: 0a 09 09 09 63 61 73 65 20 30 78 32 61 66 66 34  ....case 0x2aff4
1b30: 31 63 33 3a 20 2f 2a 20 44 49 52 53 59 4e 43 20  1c3: /* DIRSYNC 
1b40: 2a 2f 0a 09 09 09 09 6d 6f 75 6e 74 66 6c 61 67  */.....mountflag
1b50: 73 20 7c 3d 20 4d 53 5f 44 49 52 53 59 4e 43 3b  s |= MS_DIRSYNC;
1b60: 0a 09 09 09 09 62 72 65 61 6b 3b 0a 23 65 6e 64  .....break;.#end
1b70: 69 66 0a 23 69 66 64 65 66 20 4d 53 5f 4d 41 4e  if.#ifdef MS_MAN
1b80: 44 4c 4f 43 4b 0a 09 09 09 63 61 73 65 20 30 78  DLOCK....case 0x
1b90: 34 31 30 64 62 63 62 3a 20 2f 2a 20 4d 41 4e 44  410dbcb: /* MAND
1ba0: 4c 4f 43 4b 20 2a 2f 0a 09 09 09 09 6d 6f 75 6e  LOCK */.....moun
1bb0: 74 66 6c 61 67 73 20 7c 3d 20 4d 53 5f 4d 41 4e  tflags |= MS_MAN
1bc0: 44 4c 4f 43 4b 3b 0a 09 09 09 09 62 72 65 61 6b  DLOCK;.....break
1bd0: 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20  ;.#endif.#ifdef 
1be0: 4d 53 5f 4d 4f 56 45 0a 09 09 09 63 61 73 65 20  MS_MOVE....case 
1bf0: 30 78 39 62 33 65 62 34 35 3a 20 2f 2a 20 4d 4f  0x9b3eb45: /* MO
1c00: 56 45 20 2a 2f 0a 09 09 09 09 6d 6f 75 6e 74 66  VE */.....mountf
1c10: 6c 61 67 73 20 7c 3d 20 4d 53 5f 4d 4f 56 45 3b  lags |= MS_MOVE;
1c20: 0a 09 09 09 09 62 72 65 61 6b 3b 0a 23 65 6e 64  .....break;.#end
1c30: 69 66 0a 23 69 66 64 65 66 20 4d 53 5f 4e 4f 41  if.#ifdef MS_NOA
1c40: 54 49 4d 45 0a 09 09 09 63 61 73 65 20 30 78 31  TIME....case 0x1
1c50: 61 30 66 35 38 63 35 3a 20 2f 2a 20 4e 4f 41 54  a0f58c5: /* NOAT
1c60: 49 4d 45 20 2a 2f 0a 09 09 09 09 6d 6f 75 6e 74  IME */.....mount
1c70: 66 6c 61 67 73 20 7c 3d 20 4d 53 5f 4e 4f 41 54  flags |= MS_NOAT
1c80: 49 4d 45 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a  IME;.....break;.
1c90: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 4d 53  #endif.#ifdef MS
1ca0: 5f 4e 4f 44 45 56 0a 09 09 09 63 61 73 65 20 30  _NODEV....case 0
1cb0: 78 65 39 66 31 32 30 64 36 3a 20 2f 2a 20 4e 4f  xe9f120d6: /* NO
1cc0: 44 45 56 20 2a 2f 0a 09 09 09 09 6d 6f 75 6e 74  DEV */.....mount
1cd0: 66 6c 61 67 73 20 7c 3d 20 4d 53 5f 4e 4f 44 45  flags |= MS_NODE
1ce0: 56 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a 23 65  V;.....break;.#e
1cf0: 6e 64 69 66 0a 23 69 66 64 65 66 20 4d 53 5f 4e  ndif.#ifdef MS_N
1d00: 4f 44 49 52 41 54 49 4d 45 0a 09 09 09 63 61 73  ODIRATIME....cas
1d10: 65 20 30 78 64 65 30 38 66 66 34 35 3a 20 2f 2a  e 0xde08ff45: /*
1d20: 20 4e 4f 44 49 52 41 54 49 4d 45 20 2a 2f 0a 09   NODIRATIME */..
1d30: 09 09 09 6d 6f 75 6e 74 66 6c 61 67 73 20 7c 3d  ...mountflags |=
1d40: 20 4d 53 5f 4e 4f 44 49 52 41 54 49 4d 45 3b 0a   MS_NODIRATIME;.
1d50: 09 09 09 09 62 72 65 61 6b 3b 0a 23 65 6e 64 69  ....break;.#endi
1d60: 66 0a 23 69 66 64 65 66 20 4d 53 5f 4e 4f 45 58  f.#ifdef MS_NOEX
1d70: 45 43 0a 09 09 09 63 61 73 65 20 30 78 66 38 62  EC....case 0xf8b
1d80: 37 31 38 63 33 3a 20 2f 2a 20 4e 4f 45 58 45 43  718c3: /* NOEXEC
1d90: 20 2a 2f 0a 09 09 09 09 6d 6f 75 6e 74 66 6c 61   */.....mountfla
1da0: 67 73 20 7c 3d 20 4d 53 5f 4e 4f 45 58 45 43 3b  gs |= MS_NOEXEC;
1db0: 0a 09 09 09 09 62 72 65 61 6b 3b 0a 23 65 6e 64  .....break;.#end
1dc0: 69 66 0a 23 69 66 64 65 66 20 4d 53 5f 4e 4f 53  if.#ifdef MS_NOS
1dd0: 55 49 44 0a 09 09 09 63 61 73 65 20 30 78 66 61  UID....case 0xfa
1de0: 37 34 35 65 63 34 3a 20 2f 2a 20 4e 4f 53 55 49  745ec4: /* NOSUI
1df0: 44 20 2a 2f 0a 09 09 09 09 6d 6f 75 6e 74 66 6c  D */.....mountfl
1e00: 61 67 73 20 7c 3d 20 4d 53 5f 4e 4f 53 55 49 44  ags |= MS_NOSUID
1e10: 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a 23 65 6e  ;.....break;.#en
1e20: 64 69 66 0a 23 69 66 64 65 66 20 4d 53 5f 52 44  dif.#ifdef MS_RD
1e30: 4f 4e 4c 59 0a 09 09 09 63 61 73 65 20 30 78 34  ONLY....case 0x4
1e40: 39 66 32 65 63 35 39 3a 20 2f 2a 20 52 44 4f 4e  9f2ec59: /* RDON
1e50: 4c 59 20 2a 2f 0a 09 09 09 09 6d 6f 75 6e 74 66  LY */.....mountf
1e60: 6c 61 67 73 20 7c 3d 20 4d 53 5f 52 44 4f 4e 4c  lags |= MS_RDONL
1e70: 59 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a 23 65  Y;.....break;.#e
1e80: 6e 64 69 66 0a 23 69 66 64 65 66 20 4d 53 5f 52  ndif.#ifdef MS_R
1e90: 45 4c 41 54 49 4d 45 0a 09 09 09 63 61 73 65 20  ELATIME....case 
1ea0: 30 78 34 38 31 39 35 34 63 35 3a 20 2f 2a 20 52  0x481954c5: /* R
1eb0: 45 4c 41 54 49 4d 45 20 2a 2f 0a 09 09 09 09 6d  ELATIME */.....m
1ec0: 6f 75 6e 74 66 6c 61 67 73 20 7c 3d 20 4d 53 5f  ountflags |= MS_
1ed0: 52 45 4c 41 54 49 4d 45 3b 0a 09 09 09 09 62 72  RELATIME;.....br
1ee0: 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64  eak;.#endif.#ifd
1ef0: 65 66 20 4d 53 5f 52 45 4d 4f 55 4e 54 0a 09 09  ef MS_REMOUNT...
1f00: 09 63 61 73 65 20 30 78 64 39 35 30 37 31 35 34  .case 0xd9507154
1f10: 3a 20 2f 2a 20 52 45 4d 4f 55 4e 54 20 2a 2f 0a  : /* REMOUNT */.
1f20: 09 09 09 09 6d 6f 75 6e 74 66 6c 61 67 73 20 7c  ....mountflags |
1f30: 3d 20 4d 53 5f 52 45 4d 4f 55 4e 54 3b 0a 09 09  = MS_REMOUNT;...
1f40: 09 09 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a  ..break;.#endif.
1f50: 23 69 66 64 65 66 20 4d 53 5f 53 49 4c 45 4e 54  #ifdef MS_SILENT
1f60: 0a 09 09 09 63 61 73 65 20 30 78 39 39 39 30 32  ....case 0x99902
1f70: 39 35 34 3a 20 2f 2a 20 53 49 4c 45 4e 54 20 2a  954: /* SILENT *
1f80: 2f 0a 09 09 09 09 6d 6f 75 6e 74 66 6c 61 67 73  /.....mountflags
1f90: 20 7c 3d 20 4d 53 5f 53 49 4c 45 4e 54 3b 0a 09   |= MS_SILENT;..
1fa0: 09 09 09 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66  ...break;.#endif
1fb0: 0a 23 69 66 64 65 66 20 4d 53 5f 53 54 52 49 43  .#ifdef MS_STRIC
1fc0: 54 41 54 49 4d 45 0a 09 09 09 63 61 73 65 20 30  TATIME....case 0
1fd0: 78 35 36 32 66 61 30 34 35 3a 20 2f 2a 20 53 54  x562fa045: /* ST
1fe0: 52 49 43 54 41 54 49 4d 45 20 2a 2f 0a 09 09 09  RICTATIME */....
1ff0: 09 6d 6f 75 6e 74 66 6c 61 67 73 20 7c 3d 20 4d  .mountflags |= M
2000: 53 5f 53 54 52 49 43 54 41 54 49 4d 45 3b 0a 09  S_STRICTATIME;..
2010: 09 09 09 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66  ...break;.#endif
2020: 0a 23 69 66 64 65 66 20 4d 53 5f 53 59 4e 43 48  .#ifdef MS_SYNCH
2030: 52 4f 4e 4f 55 53 0a 09 09 09 63 61 73 65 20 30  RONOUS....case 0
2040: 78 62 66 37 39 39 33 35 33 3a 20 2f 2a 20 53 59  xbf799353: /* SY
2050: 4e 43 48 52 4f 4e 4f 55 53 20 2a 2f 0a 09 09 09  NCHRONOUS */....
2060: 63 61 73 65 20 30 78 61 37 36 36 37 34 33 3a 20  case 0xa766743: 
2070: 2f 2a 20 53 59 4e 43 20 2a 2f 0a 09 09 09 09 6d  /* SYNC */.....m
2080: 6f 75 6e 74 66 6c 61 67 73 20 7c 3d 20 4d 53 5f  ountflags |= MS_
2090: 53 59 4e 43 48 52 4f 4e 4f 55 53 3b 0a 09 09 09  SYNCHRONOUS;....
20a0: 09 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 09  .break;.#endif..
20b0: 09 09 64 65 66 61 75 6c 74 3a 0a 09 09 09 09 54  ..default:.....T
20c0: 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28  cl_SetObjResult(
20d0: 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4f 62 6a 50  interp, Tcl_ObjP
20e0: 72 69 6e 74 66 28 22 75 6e 6b 6e 6f 77 6e 20 65  rintf("unknown e
20f0: 6c 65 6d 65 6e 74 20 69 6e 20 6d 6f 75 6e 74 66  lement in mountf
2100: 6c 61 67 73 3a 20 5c 22 25 73 5c 22 22 2c 20 54  lags: \"%s\"", T
2110: 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6d 6f 75  cl_GetString(mou
2120: 6e 74 66 6c 61 67 29 29 29 3b 0a 0a 09 09 09 09  ntflag)));......
2130: 72 65 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52  return(TCL_ERROR
2140: 29 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 6d 6f 75 6e  );...}..}...moun
2150: 74 5f 72 65 74 20 3d 20 6d 6f 75 6e 74 28 73 6f  t_ret = mount(so
2160: 75 72 63 65 2c 20 74 61 72 67 65 74 2c 20 66 73  urce, target, fs
2170: 74 79 70 65 2c 20 6d 6f 75 6e 74 66 6c 61 67 73  type, mountflags
2180: 2c 20 64 61 74 61 29 3b 0a 09 69 66 20 28 6d 6f  , data);..if (mo
2190: 75 6e 74 5f 72 65 74 20 21 3d 20 30 29 20 7b 0a  unt_ret != 0) {.
21a0: 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75  ..Tcl_SetObjResu
21b0: 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e  lt(interp, Tcl_N
21c0: 65 77 53 74 72 69 6e 67 4f 62 6a 28 73 74 72 65  ewStringObj(stre
21d0: 72 72 6f 72 28 65 72 72 6e 6f 29 2c 20 2d 31 29  rror(errno), -1)
21e0: 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 54 43 4c  );....return(TCL
21f0: 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 54 63  _ERROR);..}...Tc
2200: 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69  l_SetObjResult(i
2210: 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74  nterp, Tcl_NewSt
2220: 72 69 6e 67 4f 62 6a 28 74 61 72 67 65 74 2c 20  ringObj(target, 
2230: 2d 31 29 29 3b 0a 0a 09 72 65 74 75 72 6e 28 54  -1));...return(T
2240: 43 4c 5f 4f 4b 29 3b 0a 7d 0a 0a 73 74 61 74 69  CL_OK);.}..stati
2250: 63 20 69 6e 74 20 74 75 61 70 69 5f 75 6d 6f 75  c int tuapi_umou
2260: 6e 74 28 43 6c 69 65 6e 74 44 61 74 61 20 63 64  nt(ClientData cd
2270: 2c 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e  , Tcl_Interp *in
2280: 74 65 72 70 2c 20 69 6e 74 20 6f 62 6a 63 2c 20  terp, int objc, 
2290: 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
22a0: 62 6a 76 5b 5d 29 20 7b 0a 09 54 63 6c 5f 4f 62  bjv[]) {..Tcl_Ob
22b0: 6a 20 2a 2a 66 6c 61 67 73 2c 20 2a 66 6c 61 67  j **flags, *flag
22c0: 3b 0a 09 54 63 6c 5f 4f 62 6a 20 2a 70 61 74 68  ;..Tcl_Obj *path
22d0: 6e 61 6d 65 5f 6f 62 6a 3b 0a 09 63 68 61 72 20  name_obj;..char 
22e0: 2a 70 61 74 68 6e 61 6d 65 3b 0a 09 69 6e 74 20  *pathname;..int 
22f0: 75 6d 6f 75 6e 74 32 5f 66 6c 61 67 73 20 3d 20  umount2_flags = 
2300: 30 3b 0a 09 69 6e 74 20 66 6c 61 67 73 5f 63 6e  0;..int flags_cn
2310: 74 3b 0a 09 69 6e 74 20 63 68 6b 5f 72 65 74 2c  t;..int chk_ret,
2320: 20 74 63 6c 5f 72 65 74 3b 0a 0a 09 69 66 20 28   tcl_ret;...if (
2330: 6f 62 6a 63 20 3c 20 32 20 7c 7c 20 6f 62 6a 63  objc < 2 || objc
2340: 20 3e 20 33 29 20 7b 0a 09 09 54 63 6c 5f 53 65   > 3) {...Tcl_Se
2350: 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72  tObjResult(inter
2360: 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67  p, Tcl_NewString
2370: 4f 62 6a 28 22 77 72 6f 6e 67 20 23 20 61 72 67  Obj("wrong # arg
2380: 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 74  s: should be \"t
2390: 75 61 70 69 3a 3a 73 79 73 63 61 6c 6c 3a 3a 75  uapi::syscall::u
23a0: 6d 6f 75 6e 74 20 64 69 72 20 3f 66 6c 61 67 73  mount dir ?flags
23b0: 3f 5c 22 22 2c 20 2d 31 29 29 3b 0a 0a 09 09 72  ?\"", -1));....r
23c0: 65 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29  eturn(TCL_ERROR)
23d0: 3b 0a 09 7d 0a 0a 09 70 61 74 68 6e 61 6d 65 5f  ;..}...pathname_
23e0: 6f 62 6a 20 3d 20 6f 62 6a 76 5b 31 5d 3b 0a 09  obj = objv[1];..
23f0: 70 61 74 68 6e 61 6d 65 20 3d 20 54 63 6c 5f 47  pathname = Tcl_G
2400: 65 74 53 74 72 69 6e 67 28 70 61 74 68 6e 61 6d  etString(pathnam
2410: 65 5f 6f 62 6a 29 3b 0a 0a 09 2f 2a 20 53 65 74  e_obj);.../* Set
2420: 20 61 20 64 65 66 61 75 6c 74 20 72 65 74 75 72   a default retur
2430: 6e 20 76 61 6c 75 65 20 2a 2f 0a 09 54 63 6c 5f  n value */..Tcl_
2440: 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74  SetObjResult(int
2450: 65 72 70 2c 20 70 61 74 68 6e 61 6d 65 5f 6f 62  erp, pathname_ob
2460: 6a 29 3b 0a 0a 09 69 66 20 28 6f 62 6a 63 20 3d  j);...if (objc =
2470: 3d 20 33 29 20 7b 0a 09 09 74 63 6c 5f 72 65 74  = 3) {...tcl_ret
2480: 20 3d 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 47 65   = Tcl_ListObjGe
2490: 74 45 6c 65 6d 65 6e 74 73 28 69 6e 74 65 72 70  tElements(interp
24a0: 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 66 6c 61 67  , objv[2], &flag
24b0: 73 5f 63 6e 74 2c 20 26 66 6c 61 67 73 29 3b 0a  s_cnt, &flags);.
24c0: 09 09 69 66 20 28 74 63 6c 5f 72 65 74 20 21 3d  ..if (tcl_ret !=
24d0: 20 54 43 4c 5f 4f 4b 29 20 7b 0a 09 09 09 72 65   TCL_OK) {....re
24e0: 74 75 72 6e 28 74 63 6c 5f 72 65 74 29 3b 0a 09  turn(tcl_ret);..
24f0: 09 7d 0a 0a 09 09 66 6f 72 20 28 3b 20 66 6c 61  .}....for (; fla
2500: 67 73 5f 63 6e 74 20 3e 20 30 3b 20 66 6c 61 67  gs_cnt > 0; flag
2510: 73 5f 63 6e 74 2d 2d 2c 66 6c 61 67 73 2b 2b 29  s_cnt--,flags++)
2520: 20 7b 0a 09 09 09 66 6c 61 67 20 3d 20 66 6c 61   {....flag = fla
2530: 67 73 5b 30 5d 3b 0a 0a 09 09 09 73 77 69 74 63  gs[0];.....switc
2540: 68 20 28 74 75 61 70 69 5f 69 6e 74 65 72 6e 61  h (tuapi_interna
2550: 6c 5f 73 69 6d 70 6c 65 68 61 73 68 5f 6f 62 6a  l_simplehash_obj
2560: 28 66 6c 61 67 29 29 20 7b 0a 09 09 09 09 63 61  (flag)) {.....ca
2570: 73 65 20 30 78 36 39 66 34 61 33 63 35 3a 20 2f  se 0x69f4a3c5: /
2580: 2a 20 46 4f 52 43 45 20 2a 2f 0a 09 09 09 09 09  * FORCE */......
2590: 75 6d 6f 75 6e 74 32 5f 66 6c 61 67 73 20 7c 3d  umount2_flags |=
25a0: 20 4d 4e 54 5f 46 4f 52 43 45 3b 0a 0a 09 09 09   MNT_FORCE;.....
25b0: 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 63 61 73  ..break;.....cas
25c0: 65 20 30 78 35 61 39 31 37 33 63 38 3a 20 2f 2a  e 0x5a9173c8: /*
25d0: 20 44 45 54 41 43 48 20 2a 2f 0a 09 09 09 09 09   DETACH */......
25e0: 75 6d 6f 75 6e 74 32 5f 66 6c 61 67 73 20 7c 3d  umount2_flags |=
25f0: 20 4d 4e 54 5f 44 45 54 41 43 48 3b 0a 0a 09 09   MNT_DETACH;....
2600: 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 63 61  ...break;.....ca
2610: 73 65 20 30 78 38 61 31 33 37 66 63 35 3a 20 2f  se 0x8a137fc5: /
2620: 2a 20 45 58 50 49 52 45 20 2a 2f 0a 09 09 09 09  * EXPIRE */.....
2630: 09 75 6d 6f 75 6e 74 32 5f 66 6c 61 67 73 20 7c  .umount2_flags |
2640: 3d 20 4d 4e 54 5f 45 58 50 49 52 45 3b 0a 0a 09  = MNT_EXPIRE;...
2650: 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 64  ....break;.....d
2660: 65 66 61 75 6c 74 3a 0a 09 09 09 09 09 54 63 6c  efault:......Tcl
2670: 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e  _SetObjResult(in
2680: 74 65 72 70 2c 20 54 63 6c 5f 4f 62 6a 50 72 69  terp, Tcl_ObjPri
2690: 6e 74 66 28 22 75 6e 6b 6e 6f 77 6e 20 66 6c 61  ntf("unknown fla
26a0: 67 20 5c 22 25 73 5c 22 20 73 70 65 63 69 66 69  g \"%s\" specifi
26b0: 65 64 22 2c 20 54 63 6c 5f 47 65 74 53 74 72 69  ed", Tcl_GetStri
26c0: 6e 67 28 66 6c 61 67 29 29 29 3b 0a 09 0a 09 09  ng(flag)));.....
26d0: 09 09 09 72 65 74 75 72 6e 28 54 43 4c 5f 45 52  ...return(TCL_ER
26e0: 52 4f 52 29 3b 0a 09 09 09 7d 0a 09 09 7d 0a 0a  ROR);....}...}..
26f0: 09 09 63 68 6b 5f 72 65 74 20 3d 20 75 6d 6f 75  ..chk_ret = umou
2700: 6e 74 32 28 70 61 74 68 6e 61 6d 65 2c 20 75 6d  nt2(pathname, um
2710: 6f 75 6e 74 32 5f 66 6c 61 67 73 29 3b 0a 0a 09  ount2_flags);...
2720: 09 2f 2a 20 44 6f 20 6e 6f 74 20 72 65 74 75 72  ./* Do not retur
2730: 6e 20 61 6e 20 65 72 72 6f 72 20 66 6f 72 20 74  n an error for t
2740: 68 69 73 20 63 61 73 65 2c 20 73 69 6e 63 65 20  his case, since 
2750: 69 74 20 69 73 20 61 70 70 61 72 65 6e 74 6c 79  it is apparently
2760: 20 6e 6f 74 20 65 78 63 65 70 74 69 6f 6e 61 6c   not exceptional
2770: 20 2a 2f 0a 09 09 69 66 20 28 63 68 6b 5f 72 65   */...if (chk_re
2780: 74 20 21 3d 20 30 20 26 26 20 28 75 6d 6f 75 6e  t != 0 && (umoun
2790: 74 32 5f 66 6c 61 67 73 20 26 20 4d 4e 54 5f 45  t2_flags & MNT_E
27a0: 58 50 49 52 45 29 20 3d 3d 20 4d 4e 54 5f 45 58  XPIRE) == MNT_EX
27b0: 50 49 52 45 20 26 26 20 65 72 72 6e 6f 20 3d 3d  PIRE && errno ==
27c0: 20 45 41 47 41 49 4e 29 20 7b 0a 09 09 09 54 63   EAGAIN) {....Tc
27d0: 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69  l_SetObjResult(i
27e0: 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74  nterp, Tcl_NewSt
27f0: 72 69 6e 67 4f 62 6a 28 22 41 47 41 49 4e 22 2c  ringObj("AGAIN",
2800: 20 2d 31 29 29 3b 0a 0a 09 09 09 63 68 6b 5f 72   -1));.....chk_r
2810: 65 74 20 3d 20 30 3b 0a 09 09 7d 0a 09 7d 20 65  et = 0;...}..} e
2820: 6c 73 65 20 7b 0a 09 09 63 68 6b 5f 72 65 74 20  lse {...chk_ret 
2830: 3d 20 75 6d 6f 75 6e 74 28 70 61 74 68 6e 61 6d  = umount(pathnam
2840: 65 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 63 68 6b  e);..}...if (chk
2850: 5f 72 65 74 20 21 3d 20 30 29 20 7b 0a 09 09 54  _ret != 0) {...T
2860: 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28  cl_SetObjResult(
2870: 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53  interp, Tcl_NewS
2880: 74 72 69 6e 67 4f 62 6a 28 73 74 72 65 72 72 6f  tringObj(strerro
2890: 72 28 65 72 72 6e 6f 29 2c 20 2d 31 29 29 3b 0a  r(errno), -1));.
28a0: 0a 09 09 72 65 74 75 72 6e 28 54 43 4c 5f 45 52  ...return(TCL_ER
28b0: 52 4f 52 29 3b 0a 09 7d 0a 0a 09 72 65 74 75 72  ROR);..}...retur
28c0: 6e 28 54 43 4c 5f 4f 4b 29 3b 0a 7d 0a 0a 73 74  n(TCL_OK);.}..st
28d0: 61 74 69 63 20 69 6e 74 20 74 75 61 70 69 5f 73  atic int tuapi_s
28e0: 77 61 70 6f 6e 28 43 6c 69 65 6e 74 44 61 74 61  wapon(ClientData
28f0: 20 63 64 2c 20 54 63 6c 5f 49 6e 74 65 72 70 20   cd, Tcl_Interp 
2900: 2a 69 6e 74 65 72 70 2c 20 69 6e 74 20 6f 62 6a  *interp, int obj
2910: 63 2c 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  c, Tcl_Obj *CONS
2920: 54 20 6f 62 6a 76 5b 5d 29 20 7b 0a 09 63 68 61  T objv[]) {..cha
2930: 72 20 2a 70 61 74 68 6e 61 6d 65 3b 0a 09 69 6e  r *pathname;..in
2940: 74 20 63 68 6b 5f 72 65 74 3b 0a 0a 09 69 66 20  t chk_ret;...if 
2950: 28 6f 62 6a 63 20 21 3d 20 32 29 20 7b 0a 09 09  (objc != 2) {...
2960: 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
2970: 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77  (interp, Tcl_New
2980: 53 74 72 69 6e 67 4f 62 6a 28 22 77 72 6f 6e 67  StringObj("wrong
2990: 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
29a0: 62 65 20 5c 22 74 75 61 70 69 3a 3a 73 79 73 63  be \"tuapi::sysc
29b0: 61 6c 6c 3a 3a 73 77 61 70 6f 6e 20 70 61 74 68  all::swapon path
29c0: 6e 61 6d 65 5c 22 22 2c 20 2d 31 29 29 3b 0a 0a  name\"", -1));..
29d0: 09 09 72 65 74 75 72 6e 28 54 43 4c 5f 45 52 52  ..return(TCL_ERR
29e0: 4f 52 29 3b 0a 09 7d 0a 0a 09 70 61 74 68 6e 61  OR);..}...pathna
29f0: 6d 65 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69  me = Tcl_GetStri
2a00: 6e 67 28 6f 62 6a 76 5b 31 5d 29 3b 0a 0a 09 63  ng(objv[1]);...c
2a10: 68 6b 5f 72 65 74 20 3d 20 73 77 61 70 6f 6e 28  hk_ret = swapon(
2a20: 70 61 74 68 6e 61 6d 65 2c 20 30 29 3b 0a 09 69  pathname, 0);..i
2a30: 66 20 28 63 68 6b 5f 72 65 74 20 21 3d 20 30 29  f (chk_ret != 0)
2a40: 20 7b 0a 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52   {...Tcl_SetObjR
2a50: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63  esult(interp, Tc
2a60: 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 73  l_NewStringObj(s
2a70: 74 72 65 72 72 6f 72 28 65 72 72 6e 6f 29 2c 20  trerror(errno), 
2a80: 2d 31 29 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28  -1));....return(
2a90: 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a  TCL_ERROR);..}..
2aa0: 09 72 65 74 75 72 6e 28 54 43 4c 5f 4f 4b 29 3b  .return(TCL_OK);
2ab0: 0a 7d 0a 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .}..static int t
2ac0: 75 61 70 69 5f 73 77 61 70 6f 66 66 28 43 6c 69  uapi_swapoff(Cli
2ad0: 65 6e 74 44 61 74 61 20 63 64 2c 20 54 63 6c 5f  entData cd, Tcl_
2ae0: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20  Interp *interp, 
2af0: 69 6e 74 20 6f 62 6a 63 2c 20 54 63 6c 5f 4f 62  int objc, Tcl_Ob
2b00: 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 29  j *CONST objv[])
2b10: 20 7b 0a 09 63 68 61 72 20 2a 70 61 74 68 6e 61   {..char *pathna
2b20: 6d 65 3b 0a 09 69 6e 74 20 63 68 6b 5f 72 65 74  me;..int chk_ret
2b30: 3b 0a 0a 09 69 66 20 28 6f 62 6a 63 20 21 3d 20  ;...if (objc != 
2b40: 32 29 20 7b 0a 09 09 54 63 6c 5f 53 65 74 4f 62  2) {...Tcl_SetOb
2b50: 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  jResult(interp, 
2b60: 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a  Tcl_NewStringObj
2b70: 28 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20  ("wrong # args: 
2b80: 73 68 6f 75 6c 64 20 62 65 20 5c 22 74 75 61 70  should be \"tuap
2b90: 69 3a 3a 73 79 73 63 61 6c 6c 3a 3a 73 77 61 70  i::syscall::swap
2ba0: 6f 66 66 20 70 61 74 68 6e 61 6d 65 5c 22 22 2c  off pathname\"",
2bb0: 20 2d 31 29 29 3b 0a 0a 09 09 72 65 74 75 72 6e   -1));....return
2bc0: 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a  (TCL_ERROR);..}.
2bd0: 0a 09 70 61 74 68 6e 61 6d 65 20 3d 20 54 63 6c  ..pathname = Tcl
2be0: 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
2bf0: 31 5d 29 3b 0a 0a 09 63 68 6b 5f 72 65 74 20 3d  1]);...chk_ret =
2c00: 20 73 77 61 70 6f 66 66 28 70 61 74 68 6e 61 6d   swapoff(pathnam
2c10: 65 29 3b 0a 09 69 66 20 28 63 68 6b 5f 72 65 74  e);..if (chk_ret
2c20: 20 21 3d 20 30 29 20 7b 0a 09 09 54 63 6c 5f 53   != 0) {...Tcl_S
2c30: 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
2c40: 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e  rp, Tcl_NewStrin
2c50: 67 4f 62 6a 28 73 74 72 65 72 72 6f 72 28 65 72  gObj(strerror(er
2c60: 72 6e 6f 29 2c 20 2d 31 29 29 3b 0a 0a 09 09 72  rno), -1));....r
2c70: 65 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29  eturn(TCL_ERROR)
2c80: 3b 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 28 54 43  ;..}...return(TC
2c90: 4c 5f 4f 4b 29 3b 0a 7d 0a 0a 73 74 61 74 69 63  L_OK);.}..static
2ca0: 20 69 6e 74 20 74 75 61 70 69 5f 69 6e 73 6d 6f   int tuapi_insmo
2cb0: 64 28 43 6c 69 65 6e 74 44 61 74 61 20 63 64 2c  d(ClientData cd,
2cc0: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
2cd0: 65 72 70 2c 20 69 6e 74 20 6f 62 6a 63 2c 20 54  erp, int objc, T
2ce0: 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
2cf0: 6a 76 5b 5d 29 20 7b 0a 09 54 63 6c 5f 43 68 61  jv[]) {..Tcl_Cha
2d00: 6e 6e 65 6c 20 66 64 3b 0a 09 54 63 6c 5f 4f 62  nnel fd;..Tcl_Ob
2d10: 6a 20 2a 6d 6f 64 75 6c 65 5f 66 69 6c 65 6e 61  j *module_filena
2d20: 6d 65 2c 20 2a 6d 6f 64 75 6c 65 5f 64 61 74 61  me, *module_data
2d30: 3b 0a 09 76 6f 69 64 20 2a 6d 6f 64 75 6c 65 5f  ;..void *module_
2d40: 64 61 74 61 5f 76 61 6c 3b 0a 09 63 6f 6e 73 74  data_val;..const
2d50: 20 63 68 61 72 20 2a 6d 6f 64 75 6c 65 5f 6f 70   char *module_op
2d60: 74 73 3b 0a 09 69 6e 74 20 6d 6f 64 75 6c 65 5f  ts;..int module_
2d70: 64 61 74 61 5f 6c 65 6e 3b 0a 09 69 6e 74 20 72  data_len;..int r
2d80: 65 61 64 5f 72 65 74 2c 20 63 68 6b 5f 72 65 74  ead_ret, chk_ret
2d90: 3b 0a 0a 09 69 66 20 28 6f 62 6a 63 20 3c 20 32  ;...if (objc < 2
2da0: 20 7c 7c 20 6f 62 6a 63 20 3e 20 33 29 20 7b 0a   || objc > 3) {.
2db0: 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75  ..Tcl_SetObjResu
2dc0: 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e  lt(interp, Tcl_N
2dd0: 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 77 72 6f  ewStringObj("wro
2de0: 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
2df0: 64 20 62 65 20 5c 22 74 75 61 70 69 3a 3a 73 79  d be \"tuapi::sy
2e00: 73 63 61 6c 6c 3a 3a 69 6e 73 6d 6f 64 20 66 69  scall::insmod fi
2e10: 6c 65 6e 61 6d 65 20 3f 61 72 67 73 3f 5c 22 22  lename ?args?\""
2e20: 2c 20 2d 31 29 29 3b 0a 0a 09 09 72 65 74 75 72  , -1));....retur
2e30: 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d  n(TCL_ERROR);..}
2e40: 0a 0a 09 6d 6f 64 75 6c 65 5f 66 69 6c 65 6e 61  ...module_filena
2e50: 6d 65 20 3d 20 6f 62 6a 76 5b 31 5d 3b 0a 0a 09  me = objv[1];...
2e60: 66 64 20 3d 20 54 63 6c 5f 46 53 4f 70 65 6e 46  fd = Tcl_FSOpenF
2e70: 69 6c 65 43 68 61 6e 6e 65 6c 28 69 6e 74 65 72  ileChannel(inter
2e80: 70 2c 20 6d 6f 64 75 6c 65 5f 66 69 6c 65 6e 61  p, module_filena
2e90: 6d 65 2c 20 22 72 22 2c 20 30 36 30 30 29 3b 0a  me, "r", 0600);.
2ea0: 09 69 66 20 28 66 64 20 3d 3d 20 4e 55 4c 4c 29  .if (fd == NULL)
2eb0: 20 7b 0a 09 09 72 65 74 75 72 6e 28 54 43 4c 5f   {...return(TCL_
2ec0: 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 63 68 6b  ERROR);..}...chk
2ed0: 5f 72 65 74 20 3d 20 54 63 6c 5f 53 65 74 43 68  _ret = Tcl_SetCh
2ee0: 61 6e 6e 65 6c 4f 70 74 69 6f 6e 28 69 6e 74 65  annelOption(inte
2ef0: 72 70 2c 20 66 64 2c 20 22 2d 74 72 61 6e 73 6c  rp, fd, "-transl
2f00: 61 74 69 6f 6e 22 2c 20 22 62 69 6e 61 72 79 22  ation", "binary"
2f10: 29 3b 0a 09 69 66 20 28 63 68 6b 5f 72 65 74 20  );..if (chk_ret 
2f20: 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a 09 09 54  != TCL_OK) {...T
2f30: 63 6c 5f 43 6c 6f 73 65 28 69 6e 74 65 72 70 2c  cl_Close(interp,
2f40: 20 66 64 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28   fd);....return(
2f50: 63 68 6b 5f 72 65 74 29 3b 0a 09 7d 0a 0a 09 6d  chk_ret);..}...m
2f60: 6f 64 75 6c 65 5f 64 61 74 61 20 3d 20 54 63 6c  odule_data = Tcl
2f70: 5f 4e 65 77 4f 62 6a 28 29 3b 0a 0a 09 72 65 61  _NewObj();...rea
2f80: 64 5f 72 65 74 20 3d 20 54 63 6c 5f 52 65 61 64  d_ret = Tcl_Read
2f90: 43 68 61 72 73 28 66 64 2c 20 6d 6f 64 75 6c 65  Chars(fd, module
2fa0: 5f 64 61 74 61 2c 20 2d 31 2c 20 30 29 3b 0a 0a  _data, -1, 0);..
2fb0: 09 54 63 6c 5f 43 6c 6f 73 65 28 69 6e 74 65 72  .Tcl_Close(inter
2fc0: 70 2c 20 66 64 29 3b 0a 0a 09 69 66 20 28 72 65  p, fd);...if (re
2fd0: 61 64 5f 72 65 74 20 3c 3d 20 30 29 20 7b 0a 09  ad_ret <= 0) {..
2fe0: 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c  .Tcl_SetObjResul
2ff0: 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65  t(interp, Tcl_Ne
3000: 77 53 74 72 69 6e 67 4f 62 6a 28 22 72 65 61 64  wStringObj("read
3010: 20 66 61 69 6c 65 64 22 2c 20 2d 31 29 29 3b 0a   failed", -1));.
3020: 0a 09 09 72 65 74 75 72 6e 28 54 43 4c 5f 45 52  ...return(TCL_ER
3030: 52 4f 52 29 3b 0a 09 7d 0a 0a 09 6d 6f 64 75 6c  ROR);..}...modul
3040: 65 5f 64 61 74 61 5f 76 61 6c 20 3d 20 54 63 6c  e_data_val = Tcl
3050: 5f 47 65 74 42 79 74 65 41 72 72 61 79 46 72 6f  _GetByteArrayFro
3060: 6d 4f 62 6a 28 6d 6f 64 75 6c 65 5f 64 61 74 61  mObj(module_data
3070: 2c 20 26 6d 6f 64 75 6c 65 5f 64 61 74 61 5f 6c  , &module_data_l
3080: 65 6e 29 3b 0a 0a 09 69 66 20 28 6f 62 6a 63 20  en);...if (objc 
3090: 3d 3d 20 33 29 20 7b 0a 09 09 6d 6f 64 75 6c 65  == 3) {...module
30a0: 5f 6f 70 74 73 20 3d 20 54 63 6c 5f 47 65 74 53  _opts = Tcl_GetS
30b0: 74 72 69 6e 67 28 6f 62 6a 76 5b 32 5d 29 3b 0a  tring(objv[2]);.
30c0: 09 7d 20 65 6c 73 65 20 7b 0a 09 09 6d 6f 64 75  .} else {...modu
30d0: 6c 65 5f 6f 70 74 73 20 3d 20 22 22 3b 0a 09 7d  le_opts = "";..}
30e0: 0a 0a 09 63 68 6b 5f 72 65 74 20 3d 20 69 6e 69  ...chk_ret = ini
30f0: 74 5f 6d 6f 64 75 6c 65 28 6d 6f 64 75 6c 65 5f  t_module(module_
3100: 64 61 74 61 5f 76 61 6c 2c 20 6d 6f 64 75 6c 65  data_val, module
3110: 5f 64 61 74 61 5f 6c 65 6e 2c 20 6d 6f 64 75 6c  _data_len, modul
3120: 65 5f 6f 70 74 73 29 3b 0a 09 69 66 20 28 63 68  e_opts);..if (ch
3130: 6b 5f 72 65 74 20 21 3d 20 30 29 20 7b 0a 09 09  k_ret != 0) {...
3140: 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
3150: 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77  (interp, Tcl_New
3160: 53 74 72 69 6e 67 4f 62 6a 28 73 74 72 65 72 72  StringObj(strerr
3170: 6f 72 28 65 72 72 6e 6f 29 2c 20 2d 31 29 29 3b  or(errno), -1));
3180: 0a 0a 09 09 72 65 74 75 72 6e 28 54 43 4c 5f 45  ....return(TCL_E
3190: 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 72 65 74 75  RROR);..}...retu
31a0: 72 6e 28 54 43 4c 5f 4f 4b 29 3b 0a 7d 0a 0a 73  rn(TCL_OK);.}..s
31b0: 74 61 74 69 63 20 69 6e 74 20 74 75 61 70 69 5f  tatic int tuapi_
31c0: 72 6d 6d 6f 64 28 43 6c 69 65 6e 74 44 61 74 61  rmmod(ClientData
31d0: 20 63 64 2c 20 54 63 6c 5f 49 6e 74 65 72 70 20   cd, Tcl_Interp 
31e0: 2a 69 6e 74 65 72 70 2c 20 69 6e 74 20 6f 62 6a  *interp, int obj
31f0: 63 2c 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  c, Tcl_Obj *CONS
3200: 54 20 6f 62 6a 76 5b 5d 29 20 7b 0a 09 63 68 61  T objv[]) {..cha
3210: 72 20 2a 6d 6f 64 75 6c 65 3b 0a 09 69 6e 74 20  r *module;..int 
3220: 69 64 78 3b 0a 09 69 6e 74 20 64 65 6c 65 74 65  idx;..int delete
3230: 5f 6d 6f 64 75 6c 65 5f 72 65 74 3b 0a 0a 09 69  _module_ret;...i
3240: 66 20 28 6f 62 6a 63 20 3c 20 32 29 20 7b 0a 09  f (objc < 2) {..
3250: 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c  .Tcl_SetObjResul
3260: 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65  t(interp, Tcl_Ne
3270: 77 53 74 72 69 6e 67 4f 62 6a 28 22 77 72 6f 6e  wStringObj("wron
3280: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
3290: 20 62 65 20 5c 22 74 75 61 70 69 3a 3a 73 79 73   be \"tuapi::sys
32a0: 63 61 6c 6c 3a 3a 72 6d 6d 6f 64 20 6d 6f 64 75  call::rmmod modu
32b0: 6c 65 20 3f 6d 6f 64 75 6c 65 2e 2e 2e 3f 22 2c  le ?module...?",
32c0: 20 2d 31 29 29 3b 0a 0a 09 09 72 65 74 75 72 6e   -1));....return
32d0: 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a  (TCL_ERROR);..}.
32e0: 0a 09 66 6f 72 20 28 69 64 78 20 3d 20 31 3b 20  ..for (idx = 1; 
32f0: 69 64 78 20 3c 20 6f 62 6a 63 3b 20 69 64 78 2b  idx < objc; idx+
3300: 2b 29 20 7b 0a 09 09 6d 6f 64 75 6c 65 20 3d 20  +) {...module = 
3310: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
3320: 6a 76 5b 69 64 78 5d 29 3b 0a 0a 09 09 64 65 6c  jv[idx]);....del
3330: 65 74 65 5f 6d 6f 64 75 6c 65 5f 72 65 74 20 3d  ete_module_ret =
3340: 20 64 65 6c 65 74 65 5f 6d 6f 64 75 6c 65 28 6d   delete_module(m
3350: 6f 64 75 6c 65 2c 20 4f 5f 4e 4f 4e 42 4c 4f 43  odule, O_NONBLOC
3360: 4b 29 3b 0a 09 09 69 66 20 28 64 65 6c 65 74 65  K);...if (delete
3370: 5f 6d 6f 64 75 6c 65 5f 72 65 74 20 21 3d 20 30  _module_ret != 0
3380: 29 20 7b 0a 09 09 09 54 63 6c 5f 53 65 74 4f 62  ) {....Tcl_SetOb
3390: 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  jResult(interp, 
33a0: 54 63 6c 5f 4f 62 6a 50 72 69 6e 74 66 28 22 75  Tcl_ObjPrintf("u
33b0: 6e 61 62 6c 65 20 74 6f 20 72 65 6d 6f 76 65 20  nable to remove 
33c0: 5c 22 25 73 5c 22 3a 20 25 73 22 2c 20 6d 6f 64  \"%s\": %s", mod
33d0: 75 6c 65 2c 20 73 74 72 65 72 72 6f 72 28 65 72  ule, strerror(er
33e0: 72 6e 6f 29 29 29 3b 0a 0a 09 09 09 72 65 74 75  rno)));.....retu
33f0: 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 09  rn(TCL_ERROR);..
3400: 09 7d 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 28 54  .}..}...return(T
3410: 43 4c 5f 4f 4b 29 3b 0a 7d 0a 0a 73 74 61 74 69  CL_OK);.}..stati
3420: 63 20 69 6e 74 20 74 75 61 70 69 5f 6c 73 6d 6f  c int tuapi_lsmo
3430: 64 28 43 6c 69 65 6e 74 44 61 74 61 20 63 64 2c  d(ClientData cd,
3440: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
3450: 65 72 70 2c 20 69 6e 74 20 6f 62 6a 63 2c 20 54  erp, int objc, T
3460: 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
3470: 6a 76 5b 5d 29 20 7b 0a 09 54 63 6c 5f 53 65 74  jv[]) {..Tcl_Set
3480: 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70  ObjResult(interp
3490: 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f  , Tcl_NewStringO
34a0: 62 6a 28 22 6e 6f 74 20 69 6d 70 6c 65 6d 65 6e  bj("not implemen
34b0: 74 65 64 22 2c 20 2d 31 29 29 3b 0a 0a 09 72 65  ted", -1));...re
34c0: 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b  turn(TCL_ERROR);
34d0: 0a 7d 0a 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .}..static int t
34e0: 75 61 70 69 5f 68 6f 73 74 6e 61 6d 65 28 43 6c  uapi_hostname(Cl
34f0: 69 65 6e 74 44 61 74 61 20 63 64 2c 20 54 63 6c  ientData cd, Tcl
3500: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
3510: 20 69 6e 74 20 6f 62 6a 63 2c 20 54 63 6c 5f 4f   int objc, Tcl_O
3520: 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
3530: 29 20 7b 0a 09 63 68 61 72 20 68 6f 73 74 6e 61  ) {..char hostna
3540: 6d 65 5b 48 4f 53 54 5f 4e 41 4d 45 5f 4d 41 58  me[HOST_NAME_MAX
3550: 20 2b 20 31 5d 3b 0a 09 69 6e 74 20 63 68 6b 5f   + 1];..int chk_
3560: 72 65 74 3b 0a 0a 09 69 66 20 28 6f 62 6a 63 20  ret;...if (objc 
3570: 3d 3d 20 31 29 20 7b 0a 09 09 2f 2a 20 4e 6f 20  == 1) {.../* No 
3580: 61 72 67 75 6d 65 6e 74 73 20 67 69 76 65 6e 2c  arguments given,
3590: 20 6a 75 73 74 20 72 65 74 75 72 6e 20 74 68 65   just return the
35a0: 20 68 6f 73 74 6e 61 6d 65 20 2a 2f 0a 09 09 63   hostname */...c
35b0: 68 6b 5f 72 65 74 20 3d 20 67 65 74 68 6f 73 74  hk_ret = gethost
35c0: 6e 61 6d 65 28 68 6f 73 74 6e 61 6d 65 2c 20 73  name(hostname, s
35d0: 69 7a 65 6f 66 28 68 6f 73 74 6e 61 6d 65 29 29  izeof(hostname))
35e0: 3b 0a 09 09 69 66 20 28 63 68 6b 5f 72 65 74 20  ;...if (chk_ret 
35f0: 21 3d 20 30 29 20 7b 0a 09 09 09 54 63 6c 5f 53  != 0) {....Tcl_S
3600: 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
3610: 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e  rp, Tcl_NewStrin
3620: 67 4f 62 6a 28 73 74 72 65 72 72 6f 72 28 65 72  gObj(strerror(er
3630: 72 6e 6f 29 2c 20 2d 31 29 29 3b 0a 0a 09 09 09  rno), -1));.....
3640: 72 65 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52  return(TCL_ERROR
3650: 29 3b 0a 09 09 7d 0a 0a 09 09 68 6f 73 74 6e 61  );...}....hostna
3660: 6d 65 5b 73 69 7a 65 6f 66 28 68 6f 73 74 6e 61  me[sizeof(hostna
3670: 6d 65 29 20 2d 20 31 5d 20 3d 20 27 5c 30 27 3b  me) - 1] = '\0';
3680: 0a 0a 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65  ....Tcl_SetObjRe
3690: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c  sult(interp, Tcl
36a0: 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 68 6f  _NewStringObj(ho
36b0: 73 74 6e 61 6d 65 2c 20 2d 31 29 29 3b 0a 0a 09  stname, -1));...
36c0: 09 72 65 74 75 72 6e 28 54 43 4c 5f 4f 4b 29 3b  .return(TCL_OK);
36d0: 0a 09 7d 0a 0a 09 69 66 20 28 6f 62 6a 63 20 3d  ..}...if (objc =
36e0: 3d 20 32 29 20 7b 0a 09 09 2f 2a 20 45 78 61 63  = 2) {.../* Exac
36f0: 74 6c 79 20 6f 6e 65 20 61 72 67 75 6d 65 6e 74  tly one argument
3700: 20 67 69 76 65 6e 2c 20 73 65 74 20 74 68 65 20   given, set the 
3710: 68 6f 73 74 6e 61 6d 65 20 2a 2f 0a 09 09 73 74  hostname */...st
3720: 72 6e 63 70 79 28 68 6f 73 74 6e 61 6d 65 2c 20  rncpy(hostname, 
3730: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
3740: 6a 76 5b 31 5d 29 2c 20 73 69 7a 65 6f 66 28 68  jv[1]), sizeof(h
3750: 6f 73 74 6e 61 6d 65 29 29 3b 0a 09 09 68 6f 73  ostname));...hos
3760: 74 6e 61 6d 65 5b 73 69 7a 65 6f 66 28 68 6f 73  tname[sizeof(hos
3770: 74 6e 61 6d 65 29 20 2d 20 31 5d 20 3d 20 27 5c  tname) - 1] = '\
3780: 30 27 3b 0a 0a 09 09 63 68 6b 5f 72 65 74 20 3d  0';....chk_ret =
3790: 20 73 65 74 68 6f 73 74 6e 61 6d 65 28 68 6f 73   sethostname(hos
37a0: 74 6e 61 6d 65 2c 20 73 74 72 6c 65 6e 28 68 6f  tname, strlen(ho
37b0: 73 74 6e 61 6d 65 29 29 3b 0a 09 09 69 66 20 28  stname));...if (
37c0: 63 68 6b 5f 72 65 74 20 21 3d 20 30 29 20 7b 0a  chk_ret != 0) {.
37d0: 09 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73  ...Tcl_SetObjRes
37e0: 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ult(interp, Tcl_
37f0: 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 73 74 72  NewStringObj(str
3800: 65 72 72 6f 72 28 65 72 72 6e 6f 29 2c 20 2d 31  error(errno), -1
3810: 29 29 3b 0a 0a 09 09 09 72 65 74 75 72 6e 28 54  ));.....return(T
3820: 43 4c 5f 45 52 52 4f 52 29 3b 0a 09 09 7d 0a 0a  CL_ERROR);...}..
3830: 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75  ..Tcl_SetObjResu
3840: 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e  lt(interp, Tcl_N
3850: 65 77 53 74 72 69 6e 67 4f 62 6a 28 68 6f 73 74  ewStringObj(host
3860: 6e 61 6d 65 2c 20 2d 31 29 29 3b 0a 0a 09 09 72  name, -1));....r
3870: 65 74 75 72 6e 28 54 43 4c 5f 4f 4b 29 3b 0a 09  eturn(TCL_OK);..
3880: 7d 0a 0a 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65  }...Tcl_SetObjRe
3890: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c  sult(interp, Tcl
38a0: 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 77  _NewStringObj("w
38b0: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
38c0: 75 6c 64 20 62 65 20 5c 22 68 6f 73 74 6e 61 6d  uld be \"hostnam
38d0: 65 20 3f 68 6f 73 74 6e 61 6d 65 3f 5c 22 22 2c  e ?hostname?\"",
38e0: 20 2d 31 29 29 3b 0a 0a 09 72 65 74 75 72 6e 28   -1));...return(
38f0: 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 7d 0a 0a 73  TCL_ERROR);.}..s
3900: 74 61 74 69 63 20 69 6e 74 20 74 75 61 70 69 5f  tatic int tuapi_
3910: 64 6f 6d 61 69 6e 6e 61 6d 65 28 43 6c 69 65 6e  domainname(Clien
3920: 74 44 61 74 61 20 63 64 2c 20 54 63 6c 5f 49 6e  tData cd, Tcl_In
3930: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 69 6e  terp *interp, in
3940: 74 20 6f 62 6a 63 2c 20 54 63 6c 5f 4f 62 6a 20  t objc, Tcl_Obj 
3950: 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 29 20 7b  *CONST objv[]) {
3960: 0a 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75  ..Tcl_SetObjResu
3970: 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e  lt(interp, Tcl_N
3980: 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 6e 6f 74  ewStringObj("not
3990: 20 69 6d 70 6c 65 6d 65 6e 74 65 64 22 2c 20 2d   implemented", -
39a0: 31 29 29 3b 0a 0a 09 72 65 74 75 72 6e 28 54 43  1));...return(TC
39b0: 4c 5f 45 52 52 4f 52 29 3b 0a 7d 0a 0a 73 74 61  L_ERROR);.}..sta
39c0: 74 69 63 20 69 6e 74 20 74 75 61 70 69 5f 63 68  tic int tuapi_ch
39d0: 72 6f 6f 74 28 43 6c 69 65 6e 74 44 61 74 61 20  root(ClientData 
39e0: 63 64 2c 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  cd, Tcl_Interp *
39f0: 69 6e 74 65 72 70 2c 20 69 6e 74 20 6f 62 6a 63  interp, int objc
3a00: 2c 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54  , Tcl_Obj *CONST
3a10: 20 6f 62 6a 76 5b 5d 29 20 7b 0a 09 63 68 61 72   objv[]) {..char
3a20: 20 2a 70 61 74 68 6e 61 6d 65 3b 0a 09 69 6e 74   *pathname;..int
3a30: 20 63 68 6b 5f 72 65 74 3b 0a 0a 09 69 66 20 28   chk_ret;...if (
3a40: 6f 62 6a 63 20 21 3d 20 32 29 20 7b 0a 09 09 54  objc != 2) {...T
3a50: 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28  cl_SetObjResult(
3a60: 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53  interp, Tcl_NewS
3a70: 74 72 69 6e 67 4f 62 6a 28 22 77 72 6f 6e 67 20  tringObj("wrong 
3a80: 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
3a90: 65 20 5c 22 3a 3a 74 75 61 70 69 3a 3a 73 79 73  e \"::tuapi::sys
3aa0: 63 61 6c 6c 3a 63 68 72 6f 6f 74 20 70 61 74 68  call:chroot path
3ab0: 6e 61 6d 65 5c 22 22 2c 20 2d 31 29 29 3b 0a 0a  name\"", -1));..
3ac0: 09 09 72 65 74 75 72 6e 28 54 43 4c 5f 45 52 52  ..return(TCL_ERR
3ad0: 4f 52 29 3b 0a 09 7d 0a 0a 09 70 61 74 68 6e 61  OR);..}...pathna
3ae0: 6d 65 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69  me = Tcl_GetStri
3af0: 6e 67 28 6f 62 6a 76 5b 31 5d 29 3b 0a 0a 09 63  ng(objv[1]);...c
3b00: 68 6b 5f 72 65 74 20 3d 20 63 68 72 6f 6f 74 28  hk_ret = chroot(
3b10: 70 61 74 68 6e 61 6d 65 29 3b 0a 09 69 66 20 28  pathname);..if (
3b20: 63 68 6b 5f 72 65 74 20 21 3d 20 30 29 20 7b 0a  chk_ret != 0) {.
3b30: 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75  ..Tcl_SetObjResu
3b40: 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e  lt(interp, Tcl_N
3b50: 65 77 53 74 72 69 6e 67 4f 62 6a 28 73 74 72 65  ewStringObj(stre
3b60: 72 72 6f 72 28 65 72 72 6e 6f 29 2c 20 2d 31 29  rror(errno), -1)
3b70: 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 54 43 4c  );....return(TCL
3b80: 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 72 65  _ERROR);..}...re
3b90: 74 75 72 6e 28 54 43 4c 5f 4f 4b 29 3b 0a 7d 0a  turn(TCL_OK);.}.
3ba0: 0a 73 74 61 74 69 63 20 69 6e 74 20 74 75 61 70  .static int tuap
3bb0: 69 5f 70 69 76 6f 74 5f 72 6f 6f 74 28 43 6c 69  i_pivot_root(Cli
3bc0: 65 6e 74 44 61 74 61 20 63 64 2c 20 54 63 6c 5f  entData cd, Tcl_
3bd0: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20  Interp *interp, 
3be0: 69 6e 74 20 6f 62 6a 63 2c 20 54 63 6c 5f 4f 62  int objc, Tcl_Ob
3bf0: 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 29  j *CONST objv[])
3c00: 20 7b 0a 09 63 68 61 72 20 2a 6e 65 77 5f 72 6f   {..char *new_ro
3c10: 6f 74 2c 20 2a 70 75 74 5f 6f 6c 64 3b 0a 09 69  ot, *put_old;..i
3c20: 6e 74 20 63 68 6b 5f 72 65 74 3b 0a 0a 09 69 66  nt chk_ret;...if
3c30: 20 28 6f 62 6a 63 20 21 3d 20 33 29 20 7b 0a 09   (objc != 3) {..
3c40: 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c  .Tcl_SetObjResul
3c50: 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65  t(interp, Tcl_Ne
3c60: 77 53 74 72 69 6e 67 4f 62 6a 28 22 77 72 6f 6e  wStringObj("wron
3c70: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
3c80: 20 62 65 20 5c 22 3a 3a 74 75 61 70 69 3a 3a 73   be \"::tuapi::s
3c90: 79 73 63 61 6c 6c 3a 3a 70 69 76 6f 74 5f 72 6f  yscall::pivot_ro
3ca0: 6f 74 20 6e 65 77 5f 72 6f 6f 74 20 70 75 74 5f  ot new_root put_
3cb0: 6f 6c 64 5c 22 22 2c 20 2d 31 29 29 3b 0a 0a 09  old\"", -1));...
3cc0: 09 72 65 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f  .return(TCL_ERRO
3cd0: 52 29 3b 0a 09 7d 0a 0a 09 6e 65 77 5f 72 6f 6f  R);..}...new_roo
3ce0: 74 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  t = Tcl_GetStrin
3cf0: 67 28 6f 62 6a 76 5b 31 5d 29 3b 0a 09 70 75 74  g(objv[1]);..put
3d00: 5f 6f 6c 64 20 3d 20 54 63 6c 5f 47 65 74 53 74  _old = Tcl_GetSt
3d10: 72 69 6e 67 28 6f 62 6a 76 5b 32 5d 29 3b 0a 0a  ring(objv[2]);..
3d20: 09 63 68 6b 5f 72 65 74 20 3d 20 70 69 76 6f 74  .chk_ret = pivot
3d30: 5f 72 6f 6f 74 28 6e 65 77 5f 72 6f 6f 74 2c 20  _root(new_root, 
3d40: 70 75 74 5f 6f 6c 64 29 3b 0a 09 69 66 20 28 63  put_old);..if (c
3d50: 68 6b 5f 72 65 74 20 21 3d 20 30 29 20 7b 0a 09  hk_ret != 0) {..
3d60: 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c  .Tcl_SetObjResul
3d70: 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65  t(interp, Tcl_Ne
3d80: 77 53 74 72 69 6e 67 4f 62 6a 28 73 74 72 65 72  wStringObj(strer
3d90: 72 6f 72 28 65 72 72 6e 6f 29 2c 20 2d 31 29 29  ror(errno), -1))
3da0: 3b 0a 0a 09 09 72 65 74 75 72 6e 28 54 43 4c 5f  ;....return(TCL_
3db0: 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 72 65 74  ERROR);..}...ret
3dc0: 75 72 6e 28 54 43 4c 5f 4f 4b 29 3b 0a 7d 0a 0a  urn(TCL_OK);.}..
3dd0: 73 74 61 74 69 63 20 69 6e 74 20 74 75 61 70 69  static int tuapi
3de0: 5f 6d 6b 6e 6f 64 28 43 6c 69 65 6e 74 44 61 74  _mknod(ClientDat
3df0: 61 20 63 64 2c 20 54 63 6c 5f 49 6e 74 65 72 70  a cd, Tcl_Interp
3e00: 20 2a 69 6e 74 65 72 70 2c 20 69 6e 74 20 6f 62   *interp, int ob
3e10: 6a 63 2c 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  jc, Tcl_Obj *CON
3e20: 53 54 20 6f 62 6a 76 5b 5d 29 20 7b 0a 09 54 63  ST objv[]) {..Tc
3e30: 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69  l_SetObjResult(i
3e40: 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74  nterp, Tcl_NewSt
3e50: 72 69 6e 67 4f 62 6a 28 22 6e 6f 74 20 69 6d 70  ringObj("not imp
3e60: 6c 65 6d 65 6e 74 65 64 22 2c 20 2d 31 29 29 3b  lemented", -1));
3e70: 0a 0a 09 72 65 74 75 72 6e 28 54 43 4c 5f 45 52  ...return(TCL_ER
3e80: 52 4f 52 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 20  ROR);.}..static 
3e90: 69 6e 74 20 74 75 61 70 69 5f 73 65 74 75 69 64  int tuapi_setuid
3ea0: 28 43 6c 69 65 6e 74 44 61 74 61 20 63 64 2c 20  (ClientData cd, 
3eb0: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
3ec0: 72 70 2c 20 69 6e 74 20 6f 62 6a 63 2c 20 54 63  rp, int objc, Tc
3ed0: 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
3ee0: 76 5b 5d 29 20 7b 0a 09 54 63 6c 5f 57 69 64 65  v[]) {..Tcl_Wide
3ef0: 49 6e 74 20 74 63 6c 55 69 64 3b 0a 09 75 69 64  Int tclUid;..uid
3f00: 5f 74 20 75 69 64 3b 0a 09 69 6e 74 20 63 68 6b  _t uid;..int chk
3f10: 5f 72 65 74 3b 0a 0a 09 69 66 20 28 6f 62 6a 63  _ret;...if (objc
3f20: 20 21 3d 20 32 29 20 7b 0a 09 09 54 63 6c 5f 53   != 2) {...Tcl_S
3f30: 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
3f40: 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e  rp, Tcl_NewStrin
3f50: 67 4f 62 6a 28 22 77 72 6f 6e 67 20 23 20 61 72  gObj("wrong # ar
3f60: 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
3f70: 3a 3a 74 75 61 70 69 3a 3a 73 79 73 63 61 6c 6c  ::tuapi::syscall
3f80: 3a 3a 73 65 74 75 69 64 20 75 69 64 5c 22 22 2c  ::setuid uid\"",
3f90: 20 2d 31 29 29 3b 0a 09 7d 0a 0a 09 63 68 6b 5f   -1));..}...chk_
3fa0: 72 65 74 20 3d 20 54 63 6c 5f 47 65 74 57 69 64  ret = Tcl_GetWid
3fb0: 65 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65  eIntFromObj(inte
3fc0: 72 70 2c 20 6f 62 6a 76 5b 31 5d 2c 20 26 74 63  rp, objv[1], &tc
3fd0: 6c 55 69 64 29 3b 0a 09 69 66 20 28 63 68 6b 5f  lUid);..if (chk_
3fe0: 72 65 74 20 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b  ret != TCL_OK) {
3ff0: 0a 09 09 72 65 74 75 72 6e 28 63 68 6b 5f 72 65  ...return(chk_re
4000: 74 29 3b 0a 09 7d 0a 0a 09 75 69 64 20 3d 20 74  t);..}...uid = t
4010: 63 6c 55 69 64 3b 0a 0a 09 63 68 6b 5f 72 65 74  clUid;...chk_ret
4020: 20 3d 20 73 65 74 75 69 64 28 75 69 64 29 3b 0a   = setuid(uid);.
4030: 09 69 66 20 28 63 68 6b 5f 72 65 74 20 21 3d 20  .if (chk_ret != 
4040: 30 29 20 7b 0a 09 09 54 63 6c 5f 53 65 74 4f 62  0) {...Tcl_SetOb
4050: 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  jResult(interp, 
4060: 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a  Tcl_NewStringObj
4070: 28 22 73 65 74 75 69 64 20 66 61 69 6c 65 64 22  ("setuid failed"
4080: 2c 20 2d 31 29 29 3b 0a 0a 09 09 72 65 74 75 72  , -1));....retur
4090: 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d  n(TCL_ERROR);..}
40a0: 0a 0a 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73  ...Tcl_SetObjRes
40b0: 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ult(interp, Tcl_
40c0: 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 22 2c  NewStringObj("",
40d0: 20 2d 31 29 29 3b 0a 0a 09 72 65 74 75 72 6e 28   -1));...return(
40e0: 54 43 4c 5f 4f 4b 29 3b 0a 7d 0a 0a 73 74 61 74  TCL_OK);.}..stat
40f0: 69 63 20 69 6e 74 20 74 75 61 70 69 5f 67 65 74  ic int tuapi_get
4100: 75 69 64 28 43 6c 69 65 6e 74 44 61 74 61 20 63  uid(ClientData c
4110: 64 2c 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  d, Tcl_Interp *i
4120: 6e 74 65 72 70 2c 20 69 6e 74 20 6f 62 6a 63 2c  nterp, int objc,
4130: 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
4140: 6f 62 6a 76 5b 5d 29 20 7b 0a 09 75 69 64 5f 74  objv[]) {..uid_t
4150: 20 75 69 64 3b 0a 09 54 63 6c 5f 57 69 64 65 49   uid;..Tcl_WideI
4160: 6e 74 20 74 63 6c 55 69 64 3b 0a 0a 09 69 66 20  nt tclUid;...if 
4170: 28 6f 62 6a 63 20 21 3d 20 31 29 20 7b 0a 09 09  (objc != 1) {...
4180: 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
4190: 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77  (interp, Tcl_New
41a0: 53 74 72 69 6e 67 4f 62 6a 28 22 77 72 6f 6e 67  StringObj("wrong
41b0: 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
41c0: 62 65 20 5c 22 3a 3a 74 75 61 70 69 3a 3a 73 79  be \"::tuapi::sy
41d0: 73 63 61 6c 6c 3a 3a 67 65 74 75 69 64 5c 22 22  scall::getuid\""
41e0: 2c 20 2d 31 29 29 3b 0a 0a 09 09 72 65 74 75 72  , -1));....retur
41f0: 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d  n(TCL_ERROR);..}
4200: 0a 0a 09 75 69 64 20 3d 20 67 65 74 75 69 64 28  ...uid = getuid(
4210: 29 3b 0a 09 74 63 6c 55 69 64 20 3d 20 75 69 64  );..tclUid = uid
4220: 3b 0a 0a 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65  ;...Tcl_SetObjRe
4230: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c  sult(interp, Tcl
4240: 5f 4e 65 77 57 69 64 65 49 6e 74 4f 62 6a 28 74  _NewWideIntObj(t
4250: 63 6c 55 69 64 29 29 3b 0a 0a 09 72 65 74 75 72  clUid));...retur
4260: 6e 28 54 43 4c 5f 4f 4b 29 3b 0a 7d 0a 0a 73 74  n(TCL_OK);.}..st
4270: 61 74 69 63 20 69 6e 74 20 74 75 61 70 69 5f 6b  atic int tuapi_k
4280: 69 6c 6c 28 43 6c 69 65 6e 74 44 61 74 61 20 63  ill(ClientData c
4290: 64 2c 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  d, Tcl_Interp *i
42a0: 6e 74 65 72 70 2c 20 69 6e 74 20 6f 62 6a 63 2c  nterp, int objc,
42b0: 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
42c0: 6f 62 6a 76 5b 5d 29 20 7b 0a 09 54 63 6c 5f 4f  objv[]) {..Tcl_O
42d0: 62 6a 20 2a 73 69 67 6e 61 6c 5f 6f 62 6a 3b 0a  bj *signal_obj;.
42e0: 0a 09 54 63 6c 5f 57 69 64 65 49 6e 74 20 70 69  ..Tcl_WideInt pi
42f0: 64 5f 77 69 64 65 2c 20 73 69 67 5f 77 69 64 65  d_wide, sig_wide
4300: 3b 0a 09 70 69 64 5f 74 20 70 69 64 3b 0a 09 69  ;..pid_t pid;..i
4310: 6e 74 20 73 69 67 3b 0a 09 69 6e 74 20 6b 69 6c  nt sig;..int kil
4320: 6c 5f 72 65 74 2c 20 74 63 6c 5f 72 65 74 3b 0a  l_ret, tcl_ret;.
4330: 0a 09 69 66 20 28 6f 62 6a 63 20 21 3d 20 33 29  ..if (objc != 3)
4340: 20 7b 0a 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52   {...Tcl_SetObjR
4350: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63  esult(interp, Tc
4360: 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22  l_NewStringObj("
4370: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
4380: 6f 75 6c 64 20 62 65 20 5c 22 3a 3a 74 75 61 70  ould be \"::tuap
4390: 69 3a 3a 73 79 73 63 61 6c 6c 3a 3a 6b 69 6c 6c  i::syscall::kill
43a0: 20 70 69 64 20 73 69 67 5c 22 22 2c 20 2d 31 29   pid sig\"", -1)
43b0: 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 54 43 4c  );....return(TCL
43c0: 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 74 63  _ERROR);..}...tc
43d0: 6c 5f 72 65 74 20 3d 20 54 63 6c 5f 47 65 74 57  l_ret = Tcl_GetW
43e0: 69 64 65 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e  ideIntFromObj(in
43f0: 74 65 72 70 2c 20 6f 62 6a 76 5b 31 5d 2c 20 26  terp, objv[1], &
4400: 70 69 64 5f 77 69 64 65 29 3b 0a 09 69 66 20 28  pid_wide);..if (
4410: 74 63 6c 5f 72 65 74 20 21 3d 20 54 43 4c 5f 4f  tcl_ret != TCL_O
4420: 4b 29 20 7b 0a 09 09 72 65 74 75 72 6e 28 74 63  K) {...return(tc
4430: 6c 5f 72 65 74 29 3b 0a 09 7d 0a 09 70 69 64 20  l_ret);..}..pid 
4440: 3d 20 70 69 64 5f 77 69 64 65 3b 0a 0a 09 73 69  = pid_wide;...si
4450: 67 6e 61 6c 5f 6f 62 6a 20 3d 20 6f 62 6a 76 5b  gnal_obj = objv[
4460: 32 5d 3b 0a 0a 09 74 63 6c 5f 72 65 74 20 3d 20  2];...tcl_ret = 
4470: 54 63 6c 5f 47 65 74 57 69 64 65 49 6e 74 46 72  Tcl_GetWideIntFr
4480: 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 73 69  omObj(interp, si
4490: 67 6e 61 6c 5f 6f 62 6a 2c 20 26 73 69 67 5f 77  gnal_obj, &sig_w
44a0: 69 64 65 29 3b 0a 09 69 66 20 28 74 63 6c 5f 72  ide);..if (tcl_r
44b0: 65 74 20 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a  et != TCL_OK) {.
44c0: 09 09 73 77 69 74 63 68 20 28 74 75 61 70 69 5f  ..switch (tuapi_
44d0: 69 6e 74 65 72 6e 61 6c 5f 73 69 6d 70 6c 65 68  internal_simpleh
44e0: 61 73 68 5f 6f 62 6a 28 73 69 67 6e 61 6c 5f 6f  ash_obj(signal_o
44f0: 62 6a 29 29 20 7b 0a 09 09 09 63 61 73 65 20 30  bj)) {....case 0
4500: 78 31 32 32 61 64 30 3a 20 2f 2a 20 48 55 50 20  x122ad0: /* HUP 
4510: 2a 2f 0a 09 09 09 63 61 73 65 20 30 78 39 38 66  */....case 0x98f
4520: 33 36 34 64 30 3a 20 2f 2a 20 53 49 47 48 55 50  364d0: /* SIGHUP
4530: 20 2a 2f 0a 09 09 09 09 73 69 67 20 3d 20 53 49   */.....sig = SI
4540: 47 48 55 50 3b 0a 09 09 09 09 62 72 65 61 6b 3b  GHUP;.....break;
4550: 0a 09 09 09 63 61 73 65 20 30 78 31 32 36 37 35  ....case 0x12675
4560: 34 3a 20 2f 2a 20 49 4e 54 20 2a 2f 0a 09 09 09  4: /* INT */....
4570: 63 61 73 65 20 30 78 39 38 66 33 32 39 35 34 3a  case 0x98f32954:
4580: 20 2f 2a 20 53 49 47 49 4e 54 20 2a 2f 0a 09 09   /* SIGINT */...
4590: 09 09 73 69 67 20 3d 20 53 49 47 49 4e 54 3b 0a  ..sig = SIGINT;.
45a0: 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61  ....break;....ca
45b0: 73 65 20 30 78 61 33 35 36 34 64 34 3a 20 2f 2a  se 0xa3564d4: /*
45c0: 20 51 55 49 54 20 2a 2f 0a 09 09 09 63 61 73 65   QUIT */....case
45d0: 20 30 78 37 61 39 32 34 32 64 34 3a 20 2f 2a 20   0x7a9242d4: /* 
45e0: 53 49 47 51 55 49 54 20 2a 2f 0a 09 09 09 09 73  SIGQUIT */.....s
45f0: 69 67 20 3d 20 53 49 47 51 55 49 54 3b 0a 09 09  ig = SIGQUIT;...
4600: 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65  ..break;....case
4610: 20 30 78 31 32 36 36 34 63 3a 20 2f 2a 20 49 4c   0x12664c: /* IL
4620: 4c 20 2a 2f 0a 09 09 09 63 61 73 65 20 30 78 39  L */....case 0x9
4630: 38 66 33 32 38 34 63 3a 20 2f 2a 20 53 49 47 49  8f3284c: /* SIGI
4640: 4c 4c 20 2a 2f 0a 09 09 09 09 73 69 67 20 3d 20  LL */.....sig = 
4650: 53 49 47 49 4c 4c 3b 0a 09 09 09 09 62 72 65 61  SIGILL;.....brea
4660: 6b 3b 0a 09 09 09 63 61 73 65 20 30 78 61 39 34  k;....case 0xa94
4670: 61 30 64 30 3a 20 2f 2a 20 54 52 41 50 20 2a 2f  a0d0: /* TRAP */
4680: 0a 09 09 09 63 61 73 65 20 30 78 37 61 33 33 38  ....case 0x7a338
4690: 36 64 30 3a 20 2f 2a 20 53 49 47 54 52 41 50 20  6d0: /* SIGTRAP 
46a0: 2a 2f 0a 09 09 09 09 73 69 67 20 3d 20 53 49 47  */.....sig = SIG
46b0: 54 52 41 50 3b 0a 09 09 09 09 62 72 65 61 6b 3b  TRAP;.....break;
46c0: 0a 09 09 09 63 61 73 65 20 30 78 38 33 30 61 39  ....case 0x830a9
46d0: 35 34 3a 20 2f 2a 20 41 42 52 54 20 2a 2f 0a 09  54: /* ABRT */..
46e0: 09 09 63 61 73 65 20 30 78 37 38 39 37 38 66 35  ..case 0x78978f5
46f0: 34 3a 20 2f 2a 20 53 49 47 41 42 52 54 20 2a 2f  4: /* SIGABRT */
4700: 0a 09 09 09 09 73 69 67 20 3d 20 53 49 47 41 42  .....sig = SIGAB
4710: 52 54 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09  RT;.....break;..
4720: 09 09 63 61 73 65 20 30 78 31 32 36 37 64 34 3a  ..case 0x1267d4:
4730: 20 2f 2a 20 49 4f 54 20 2a 2f 0a 09 09 09 63 61   /* IOT */....ca
4740: 73 65 20 30 78 39 38 66 33 32 39 64 34 3a 20 2f  se 0x98f329d4: /
4750: 2a 20 53 49 47 49 4f 54 20 2a 2f 0a 09 09 09 09  * SIGIOT */.....
4760: 73 69 67 20 3d 20 53 49 47 49 4f 54 3b 0a 09 09  sig = SIGIOT;...
4770: 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65  ..break;....case
4780: 20 30 78 31 30 61 61 64 33 3a 20 2f 2a 20 42 55   0x10aad3: /* BU
4790: 53 20 2a 2f 0a 09 09 09 63 61 73 65 20 30 78 39  S */....case 0x9
47a0: 38 66 31 65 34 64 33 3a 20 2f 2a 20 53 49 47 42  8f1e4d3: /* SIGB
47b0: 55 53 20 2a 2f 0a 09 09 09 09 73 69 67 20 3d 20  US */.....sig = 
47c0: 53 49 47 42 55 53 3b 0a 09 09 09 09 62 72 65 61  SIGBUS;.....brea
47d0: 6b 3b 0a 09 09 09 63 61 73 65 20 30 78 31 31 61  k;....case 0x11a
47e0: 38 34 35 3a 20 2f 2a 20 46 50 45 20 2a 2f 0a 09  845: /* FPE */..
47f0: 09 09 63 61 73 65 20 30 78 39 38 66 30 65 36 34  ..case 0x98f0e64
4800: 35 3a 20 2f 2a 20 53 49 47 46 50 45 20 2a 2f 0a  5: /* SIGFPE */.
4810: 09 09 09 09 73 69 67 20 3d 20 53 49 47 46 50 45  ....sig = SIGFPE
4820: 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09  ;.....break;....
4830: 63 61 73 65 20 30 78 39 37 32 36 36 34 63 3a 20  case 0x972664c: 
4840: 2f 2a 20 4b 49 4c 4c 20 2a 2f 0a 09 09 09 63 61  /* KILL */....ca
4850: 73 65 20 30 78 37 39 64 35 34 30 34 63 3a 20 2f  se 0x79d5404c: /
4860: 2a 20 53 49 47 4b 49 4c 4c 20 2a 2f 0a 09 09 09  * SIGKILL */....
4870: 09 73 69 67 20 3d 20 53 49 47 4b 49 4c 4c 3b 0a  .sig = SIGKILL;.
4880: 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61  ....break;....ca
4890: 73 65 20 30 78 61 62 34 65 39 33 31 3a 20 2f 2a  se 0xab4e931: /*
48a0: 20 55 53 52 31 20 2a 2f 0a 09 09 09 63 61 73 65   USR1 */....case
48b0: 20 30 78 37 61 31 33 63 66 33 31 3a 20 2f 2a 20   0x7a13cf31: /* 
48c0: 53 49 47 55 53 52 31 20 2a 2f 0a 09 09 09 09 73  SIGUSR1 */.....s
48d0: 69 67 20 3d 20 53 49 47 55 53 52 31 3b 0a 09 09  ig = SIGUSR1;...
48e0: 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65  ..break;....case
48f0: 20 30 78 61 37 31 36 33 64 36 3a 20 2f 2a 20 53   0xa7163d6: /* S
4900: 45 47 56 20 2a 2f 0a 09 09 09 63 61 73 65 20 30  EGV */....case 0
4910: 78 37 61 64 36 34 35 64 36 3a 20 2f 2a 20 53 49  x7ad645d6: /* SI
4920: 47 53 45 47 56 20 2a 2f 0a 09 09 09 09 73 69 67  GSEGV */.....sig
4930: 20 3d 20 53 49 47 53 45 47 56 3b 0a 09 09 09 09   = SIGSEGV;.....
4940: 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 30  break;....case 0
4950: 78 61 62 34 65 39 33 32 3a 20 2f 2a 20 55 53 52  xab4e932: /* USR
4960: 32 20 2a 2f 0a 09 09 09 63 61 73 65 20 30 78 37  2 */....case 0x7
4970: 61 31 33 63 66 33 32 3a 20 2f 2a 20 53 49 47 55  a13cf32: /* SIGU
4980: 53 52 32 20 2a 2f 0a 09 09 09 09 73 69 67 20 3d  SR2 */.....sig =
4990: 20 53 49 47 55 53 52 32 3b 0a 09 09 09 09 62 72   SIGUSR2;.....br
49a0: 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 30 78 61  eak;....case 0xa
49b0: 31 32 36 38 34 35 3a 20 2f 2a 20 50 49 50 45 20  126845: /* PIPE 
49c0: 2a 2f 0a 09 09 09 63 61 73 65 20 30 78 37 61 62  */....case 0x7ab
49d0: 35 34 65 34 35 3a 20 2f 2a 20 53 49 47 50 49 50  54e45: /* SIGPIP
49e0: 45 20 2a 2f 0a 09 09 09 09 73 69 67 20 3d 20 53  E */.....sig = S
49f0: 49 47 50 49 50 45 3b 0a 09 09 09 09 62 72 65 61  IGPIPE;.....brea
4a00: 6b 3b 0a 09 09 09 63 61 73 65 20 30 78 38 33 33  k;....case 0x833
4a10: 32 39 34 64 3a 20 2f 2a 20 41 4c 52 4d 20 2a 2f  294d: /* ALRM */
4a20: 0a 09 09 09 63 61 73 65 20 30 78 37 38 39 34 30  ....case 0x78940
4a30: 66 34 64 3a 20 2f 2a 20 53 49 47 41 4c 52 4d 20  f4d: /* SIGALRM 
4a40: 2a 2f 0a 09 09 09 09 73 69 67 20 3d 20 53 49 47  */.....sig = SIG
4a50: 41 4c 52 4d 3b 0a 09 09 09 09 62 72 65 61 6b 3b  ALRM;.....break;
4a60: 0a 09 09 09 63 61 73 65 20 30 78 61 39 31 36 39  ....case 0xa9169
4a70: 34 64 3a 20 2f 2a 20 54 45 52 4d 20 2a 2f 0a 09  4d: /* TERM */..
4a80: 09 09 63 61 73 65 20 30 78 37 61 33 36 34 66 34  ..case 0x7a364f4
4a90: 64 3a 20 2f 2a 20 53 49 47 54 45 52 4d 20 2a 2f  d: /* SIGTERM */
4aa0: 0a 09 09 09 09 73 69 67 20 3d 20 53 49 47 54 45  .....sig = SIGTE
4ab0: 52 4d 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09  RM;.....break;..
4ac0: 09 09 63 61 73 65 20 30 78 34 39 37 30 65 38 64  ..case 0x4970e8d
4ad0: 34 3a 20 2f 2a 20 53 54 4b 46 4c 54 20 2a 2f 0a  4: /* STKFLT */.
4ae0: 09 09 09 63 61 73 65 20 30 78 38 30 66 65 66 63  ...case 0x80fefc
4af0: 35 34 3a 20 2f 2a 20 53 49 47 53 54 4b 46 4c 54  54: /* SIGSTKFLT
4b00: 20 2a 2f 0a 09 09 09 09 73 69 67 20 3d 20 53 49   */.....sig = SI
4b10: 47 53 54 4b 46 4c 54 3b 0a 09 09 09 09 62 72 65  GSTKFLT;.....bre
4b20: 61 6b 3b 0a 09 09 09 63 61 73 65 20 30 78 38 37  ak;....case 0x87
4b30: 32 32 36 34 34 3a 20 2f 2a 20 43 48 4c 44 20 2a  22644: /* CHLD *
4b40: 2f 0a 09 09 09 63 61 73 65 20 30 78 37 38 64 35  /....case 0x78d5
4b50: 30 30 34 34 3a 20 2f 2a 20 53 49 47 43 48 4c 44  0044: /* SIGCHLD
4b60: 20 2a 2f 0a 09 09 09 09 73 69 67 20 3d 20 53 49   */.....sig = SI
4b70: 47 43 48 4c 44 3b 0a 09 09 09 09 62 72 65 61 6b  GCHLD;.....break
4b80: 3b 0a 09 09 09 63 61 73 65 20 30 78 38 37 33 65  ;....case 0x873e
4b90: 37 35 34 3a 20 2f 2a 20 43 4f 4e 54 20 2a 2f 0a  754: /* CONT */.
4ba0: 09 09 09 63 61 73 65 20 30 78 37 38 64 34 63 31  ...case 0x78d4c1
4bb0: 35 34 3a 20 2f 2a 20 53 49 47 43 4f 4e 54 20 2a  54: /* SIGCONT *
4bc0: 2f 0a 09 09 09 09 73 69 67 20 3d 20 53 49 47 43  /.....sig = SIGC
4bd0: 4f 4e 54 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a  ONT;.....break;.
4be0: 09 09 09 63 61 73 65 20 30 78 61 37 35 32 37 64  ...case 0xa7527d
4bf0: 30 3a 20 2f 2a 20 53 54 4f 50 20 2a 2f 0a 09 09  0: /* STOP */...
4c00: 09 63 61 73 65 20 30 78 37 61 64 32 30 31 64 30  .case 0x7ad201d0
4c10: 3a 20 2f 2a 20 53 49 47 53 54 4f 50 20 2a 2f 0a  : /* SIGSTOP */.
4c20: 09 09 09 09 73 69 67 20 3d 20 53 49 47 53 54 4f  ....sig = SIGSTO
4c30: 50 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09  P;.....break;...
4c40: 09 63 61 73 65 20 30 78 61 39 34 65 61 35 30 3a  .case 0xa94ea50:
4c50: 20 2f 2a 20 54 53 54 50 20 2a 2f 0a 09 09 09 63   /* TSTP */....c
4c60: 61 73 65 20 30 78 37 61 33 33 63 63 35 30 3a 20  ase 0x7a33cc50: 
4c70: 2f 2a 20 53 49 47 54 53 54 50 20 2a 2f 0a 09 09  /* SIGTSTP */...
4c80: 09 09 73 69 67 20 3d 20 53 49 47 54 53 54 50 3b  ..sig = SIGTSTP;
4c90: 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63  .....break;....c
4ca0: 61 73 65 20 30 78 61 39 35 32 34 63 65 3a 20 2f  ase 0xa9524ce: /
4cb0: 2a 20 54 54 49 4e 20 2a 2f 0a 09 09 09 63 61 73  * TTIN */....cas
4cc0: 65 20 30 78 37 61 33 32 30 32 63 65 3a 20 2f 2a  e 0x7a3202ce: /*
4cd0: 20 53 49 47 54 54 49 4e 20 2a 2f 0a 09 09 09 09   SIGTTIN */.....
4ce0: 73 69 67 20 3d 20 53 49 47 54 54 49 4e 3b 0a 09  sig = SIGTTIN;..
4cf0: 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73  ...break;....cas
4d00: 65 20 30 78 61 39 35 32 37 64 35 3a 20 2f 2a 20  e 0xa9527d5: /* 
4d10: 54 54 4f 55 20 2a 2f 0a 09 09 09 63 61 73 65 20  TTOU */....case 
4d20: 30 78 37 61 33 32 30 31 64 35 3a 20 2f 2a 20 53  0x7a3201d5: /* S
4d30: 49 47 54 54 4f 55 20 2a 2f 0a 09 09 09 09 73 69  IGTTOU */.....si
4d40: 67 20 3d 20 53 49 47 54 54 4f 55 3b 0a 09 09 09  g = SIGTTOU;....
4d50: 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20  .break;....case 
4d60: 30 78 31 35 36 39 34 37 3a 20 2f 2a 20 55 52 47  0x156947: /* URG
4d70: 20 2a 2f 0a 09 09 09 63 61 73 65 20 30 78 39 38   */....case 0x98
4d80: 66 34 32 37 34 37 3a 20 2f 2a 20 53 49 47 55 52  f42747: /* SIGUR
4d90: 47 20 2a 2f 0a 09 09 09 09 73 69 67 20 3d 20 53  G */.....sig = S
4da0: 49 47 55 52 47 3b 0a 09 09 09 09 62 72 65 61 6b  IGURG;.....break
4db0: 3b 0a 09 09 09 63 61 73 65 20 30 78 62 31 30 65  ;....case 0xb10e
4dc0: 38 35 35 3a 20 2f 2a 20 58 43 50 55 20 2a 2f 0a  855: /* XCPU */.
4dd0: 09 09 09 63 61 73 65 20 30 78 37 62 62 37 63 65  ...case 0x7bb7ce
4de0: 35 35 3a 20 2f 2a 20 53 49 47 58 43 50 55 20 2a  55: /* SIGXCPU *
4df0: 2f 0a 09 09 09 09 73 69 67 20 3d 20 53 49 47 58  /.....sig = SIGX
4e00: 43 50 55 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a  CPU;.....break;.
4e10: 09 09 09 63 61 73 65 20 30 78 62 31 31 61 39 64  ...case 0xb11a9d
4e20: 61 3a 20 2f 2a 20 58 46 53 5a 20 2a 2f 0a 09 09  a: /* XFSZ */...
4e30: 09 63 61 73 65 20 30 78 37 62 62 36 38 66 64 61  .case 0x7bb68fda
4e40: 3a 20 2f 2a 20 53 49 47 58 46 53 5a 20 2a 2f 0a  : /* SIGXFSZ */.
4e50: 09 09 09 09 73 69 67 20 3d 20 53 49 47 58 46 53  ....sig = SIGXFS
4e60: 5a 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09  Z;.....break;...
4e70: 09 63 61 73 65 20 30 78 34 38 33 32 37 33 63 64  .case 0x483273cd
4e80: 3a 20 2f 2a 20 56 54 41 4c 52 4d 20 2a 2f 0a 09  : /* VTALRM */..
4e90: 09 09 63 61 73 65 20 30 78 38 31 62 63 36 37 34  ..case 0x81bc674
4ea0: 64 3a 20 2f 2a 20 53 49 47 56 54 41 4c 52 4d 20  d: /* SIGVTALRM 
4eb0: 2a 2f 0a 09 09 09 09 73 69 67 20 3d 20 53 49 47  */.....sig = SIG
4ec0: 56 54 41 4c 52 4d 3b 0a 09 09 09 09 62 72 65 61  VTALRM;.....brea
4ed0: 6b 3b 0a 09 09 09 63 61 73 65 20 30 78 61 31 34  k;....case 0xa14
4ee0: 61 37 63 36 3a 20 2f 2a 20 50 52 4f 46 20 2a 2f  a7c6: /* PROF */
4ef0: 0a 09 09 09 63 61 73 65 20 30 78 37 61 62 33 38  ....case 0x7ab38
4f00: 31 63 36 3a 20 2f 2a 20 53 49 47 50 52 4f 46 20  1c6: /* SIGPROF 
4f10: 2a 2f 0a 09 09 09 09 73 69 67 20 3d 20 53 49 47  */.....sig = SIG
4f20: 50 52 4f 46 3b 0a 09 09 09 09 62 72 65 61 6b 3b  PROF;.....break;
4f30: 0a 09 09 09 63 61 73 65 20 30 78 37 39 33 33 61  ....case 0x7933a
4f40: 33 34 38 3a 20 2f 2a 20 57 49 4e 43 48 20 2a 2f  348: /* WINCH */
4f50: 0a 09 09 09 63 61 73 65 20 30 78 32 61 61 30 62  ....case 0x2aa0b
4f60: 66 34 38 3a 20 2f 2a 20 53 49 47 57 49 4e 43 48  f48: /* SIGWINCH
4f70: 20 2a 2f 0a 09 09 09 09 73 69 67 20 3d 20 53 49   */.....sig = SI
4f80: 47 57 49 4e 43 48 3b 0a 09 09 09 09 62 72 65 61  GWINCH;.....brea
4f90: 6b 3b 0a 09 09 09 63 61 73 65 20 30 78 32 34 63  k;....case 0x24c
4fa0: 66 3a 20 2f 2a 20 49 4f 20 2a 2f 0a 09 09 09 63  f: /* IO */....c
4fb0: 61 73 65 20 30 78 33 39 33 31 65 36 34 66 3a 20  ase 0x3931e64f: 
4fc0: 2f 2a 20 53 49 47 49 4f 20 2a 2f 0a 09 09 09 09  /* SIGIO */.....
4fd0: 73 69 67 20 3d 20 53 49 47 49 4f 3b 0a 09 09 09  sig = SIGIO;....
4fe0: 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20  .break;....case 
4ff0: 30 78 31 34 32 62 64 32 3a 20 2f 2a 20 50 57 52  0x142bd2: /* PWR
5000: 20 2a 2f 0a 09 09 09 63 61 73 65 20 30 78 39 38   */....case 0x98
5010: 66 35 36 35 64 32 3a 20 2f 2a 20 53 49 47 50 57  f565d2: /* SIGPW
5020: 52 20 2a 2f 0a 09 09 09 09 73 69 67 20 3d 20 53  R */.....sig = S
5030: 49 47 50 57 52 3b 0a 09 09 09 09 62 72 65 61 6b  IGPWR;.....break
5040: 3b 0a 09 09 09 63 61 73 65 20 30 78 31 34 65 63  ;....case 0x14ec
5050: 64 33 3a 20 2f 2a 20 53 59 53 20 2a 2f 0a 09 09  d3: /* SYS */...
5060: 09 63 61 73 65 20 30 78 39 38 66 35 61 32 64 33  .case 0x98f5a2d3
5070: 3a 20 2f 2a 20 53 49 47 53 59 53 20 2a 2f 0a 09  : /* SIGSYS */..
5080: 09 09 09 73 69 67 20 3d 20 53 49 47 53 59 53 3b  ...sig = SIGSYS;
5090: 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 64  .....break;....d
50a0: 65 66 61 75 6c 74 3a 0a 09 09 09 09 54 63 6c 5f  efault:.....Tcl_
50b0: 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74  SetObjResult(int
50c0: 65 72 70 2c 20 54 63 6c 5f 4f 62 6a 50 72 69 6e  erp, Tcl_ObjPrin
50d0: 74 66 28 22 75 6e 6b 6e 6f 77 6e 20 73 69 67 6e  tf("unknown sign
50e0: 61 6c 20 5c 22 25 73 5c 22 22 2c 20 54 63 6c 5f  al \"%s\"", Tcl_
50f0: 47 65 74 53 74 72 69 6e 67 28 73 69 67 6e 61 6c  GetString(signal
5100: 5f 6f 62 6a 29 29 29 3b 0a 0a 09 09 09 09 72 65  _obj)));......re
5110: 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b  turn(TCL_ERROR);
5120: 0a 09 09 7d 0a 09 7d 20 65 6c 73 65 20 7b 0a 09  ...}..} else {..
5130: 09 73 69 67 20 3d 20 73 69 67 5f 77 69 64 65 3b  .sig = sig_wide;
5140: 0a 09 7d 0a 0a 09 6b 69 6c 6c 5f 72 65 74 20 3d  ..}...kill_ret =
5150: 20 6b 69 6c 6c 28 70 69 64 2c 20 73 69 67 29 3b   kill(pid, sig);
5160: 0a 09 69 66 20 28 6b 69 6c 6c 5f 72 65 74 20 21  ..if (kill_ret !
5170: 3d 20 30 29 20 7b 0a 09 09 54 63 6c 5f 53 65 74  = 0) {...Tcl_Set
5180: 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70  ObjResult(interp
5190: 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f  , Tcl_NewStringO
51a0: 62 6a 28 73 74 72 65 72 72 6f 72 28 65 72 72 6e  bj(strerror(errn
51b0: 6f 29 2c 20 2d 31 29 29 3b 0a 0a 09 09 72 65 74  o), -1));....ret
51c0: 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a  urn(TCL_ERROR);.
51d0: 09 7d 0a 0a 09 72 65 74 75 72 6e 28 54 43 4c 5f  .}...return(TCL_
51e0: 4f 4b 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 69  OK);.}..static i
51f0: 6e 74 20 74 75 61 70 69 5f 72 65 62 6f 6f 74 28  nt tuapi_reboot(
5200: 43 6c 69 65 6e 74 44 61 74 61 20 63 64 2c 20 54  ClientData cd, T
5210: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
5220: 70 2c 20 69 6e 74 20 6f 62 6a 63 2c 20 54 63 6c  p, int objc, Tcl
5230: 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
5240: 5b 5d 29 20 7b 0a 09 54 63 6c 5f 4f 62 6a 20 2a  []) {..Tcl_Obj *
5250: 63 6d 64 5f 6f 62 6a 3b 0a 09 69 6e 74 20 63 6d  cmd_obj;..int cm
5260: 64 3b 0a 09 69 6e 74 20 72 65 62 6f 6f 74 5f 72  d;..int reboot_r
5270: 65 74 3b 0a 0a 09 69 66 20 28 6f 62 6a 63 20 3d  et;...if (objc =
5280: 3d 20 32 29 20 7b 0a 09 09 63 6d 64 5f 6f 62 6a  = 2) {...cmd_obj
5290: 20 3d 20 6f 62 6a 76 5b 31 5d 3b 0a 0a 09 09 73   = objv[1];....s
52a0: 77 69 74 63 68 20 28 74 75 61 70 69 5f 69 6e 74  witch (tuapi_int
52b0: 65 72 6e 61 6c 5f 73 69 6d 70 6c 65 68 61 73 68  ernal_simplehash
52c0: 5f 6f 62 6a 28 63 6d 64 5f 6f 62 6a 29 29 20 7b  _obj(cmd_obj)) {
52d0: 0a 09 09 09 63 61 73 65 20 30 78 32 62 65 31 39  ....case 0x2be19
52e0: 34 36 3a 20 2f 2a 20 4c 49 4e 55 58 5f 52 45 42  46: /* LINUX_REB
52f0: 4f 4f 54 5f 43 4d 44 5f 43 41 44 5f 4f 46 46 20  OOT_CMD_CAD_OFF 
5300: 2a 2f 0a 09 09 09 63 61 73 65 20 30 78 36 36 36  */....case 0x666
5310: 65 36 33 34 34 3a 20 2f 2a 20 52 42 5f 44 49 53  e6344: /* RB_DIS
5320: 41 42 4c 45 5f 43 41 44 20 2a 2f 0a 09 09 09 63  ABLE_CAD */....c
5330: 61 73 65 20 30 78 39 65 33 63 65 36 34 34 3a 20  ase 0x9e3ce644: 
5340: 2f 2a 20 44 49 53 41 42 4c 45 5f 43 41 44 20 2a  /* DISABLE_CAD *
5350: 2f 0a 09 09 09 09 63 6d 64 20 3d 20 52 42 5f 44  /.....cmd = RB_D
5360: 49 53 41 42 4c 45 5f 43 41 44 3b 0a 0a 09 09 09  ISABLE_CAD;.....
5370: 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20  .break;....case 
5380: 30 78 65 38 30 35 37 63 34 65 3a 20 2f 2a 20 4c  0xe8057c4e: /* L
5390: 49 4e 55 58 5f 52 45 42 4f 4f 54 5f 43 4d 44 5f  INUX_REBOOT_CMD_
53a0: 43 41 44 5f 4f 4e 20 2a 2f 0a 09 09 09 63 61 73  CAD_ON */....cas
53b0: 65 20 30 78 66 38 64 63 34 34 34 3a 20 2f 2a 20  e 0xf8dc444: /* 
53c0: 52 42 5f 45 4e 41 42 4c 45 5f 43 41 44 20 2a 2f  RB_ENABLE_CAD */
53d0: 0a 09 09 09 63 61 73 65 20 30 78 31 61 37 64 36  ....case 0x1a7d6
53e0: 31 34 34 3a 20 2f 2a 20 45 4e 41 42 4c 45 5f 43  144: /* ENABLE_C
53f0: 41 44 20 2a 2f 0a 09 09 09 09 63 6d 64 20 3d 20  AD */.....cmd = 
5400: 52 42 5f 45 4e 41 42 4c 45 5f 43 41 44 3b 0a 0a  RB_ENABLE_CAD;..
5410: 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61  ....break;....ca
5420: 73 65 20 30 78 39 35 62 66 61 34 35 34 3a 20 2f  se 0x95bfa454: /
5430: 2a 20 4c 49 4e 55 58 5f 52 45 42 4f 4f 54 5f 43  * LINUX_REBOOT_C
5440: 4d 44 5f 48 41 4c 54 20 2a 2f 0a 09 09 09 63 61  MD_HALT */....ca
5450: 73 65 20 30 78 33 32 31 30 64 61 34 64 3a 20 2f  se 0x3210da4d: /
5460: 2a 20 52 42 5f 48 41 4c 54 5f 53 59 53 54 45 4d  * RB_HALT_SYSTEM
5470: 20 2a 2f 0a 09 09 09 63 61 73 65 20 30 78 63 61   */....case 0xca
5480: 34 32 35 66 34 64 3a 20 2f 2a 20 48 41 4c 54 5f  425f4d: /* HALT_
5490: 53 59 53 54 45 4d 20 2a 2f 0a 09 09 09 63 61 73  SYSTEM */....cas
54a0: 65 20 30 78 39 31 30 36 36 35 34 3a 20 2f 2a 20  e 0x9106654: /* 
54b0: 48 41 4c 54 20 2a 2f 0a 09 09 09 09 63 6d 64 20  HALT */.....cmd 
54c0: 3d 20 52 42 5f 48 41 4c 54 5f 53 59 53 54 45 4d  = RB_HALT_SYSTEM
54d0: 3b 0a 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09  ;......break;...
54e0: 09 63 61 73 65 20 30 78 64 62 35 35 64 38 63 36  .case 0xdb55d8c6
54f0: 3a 20 2f 2a 20 4c 49 4e 55 58 5f 52 45 42 4f 4f  : /* LINUX_REBOO
5500: 54 5f 43 4d 44 5f 50 4f 57 45 52 5f 4f 46 46 20  T_CMD_POWER_OFF 
5510: 2a 2f 0a 09 09 09 63 61 73 65 20 30 78 66 30 37  */....case 0xf07
5520: 37 30 30 63 36 3a 20 2f 2a 20 52 42 5f 50 4f 57  700c6: /* RB_POW
5530: 45 52 5f 4f 46 46 20 2a 2f 0a 09 09 09 63 61 73  ER_OFF */....cas
5540: 65 20 30 78 36 34 35 63 65 31 63 36 3a 20 2f 2a  e 0x645ce1c6: /*
5550: 20 50 4f 57 45 52 5f 4f 46 46 20 2a 2f 0a 09 09   POWER_OFF */...
5560: 09 09 63 6d 64 20 3d 20 30 78 34 33 32 31 66 65  ..cmd = 0x4321fe
5570: 64 63 3b 0a 0a 09 09 09 09 62 72 65 61 6b 3b 0a  dc;......break;.
5580: 09 09 09 63 61 73 65 20 30 78 37 33 66 66 38 33  ...case 0x73ff83
5590: 64 34 3a 20 2f 2a 20 4c 49 4e 55 58 5f 52 45 42  d4: /* LINUX_REB
55a0: 4f 4f 54 5f 43 4d 44 5f 52 45 53 54 41 52 54 20  OOT_CMD_RESTART 
55b0: 2a 2f 0a 09 09 09 63 61 73 65 20 30 78 33 63 64  */....case 0x3cd
55c0: 30 65 32 35 34 3a 20 2f 2a 20 52 42 5f 41 55 54  0e254: /* RB_AUT
55d0: 4f 42 4f 4f 54 20 2a 2f 0a 09 09 09 63 61 73 65  OBOOT */....case
55e0: 20 30 78 62 39 66 38 62 35 64 34 3a 20 2f 2a 20   0xb9f8b5d4: /* 
55f0: 41 55 54 4f 42 4f 4f 54 20 2a 2f 0a 09 09 09 63  AUTOBOOT */....c
5600: 61 73 65 20 30 78 33 61 33 35 37 66 64 34 3a 20  ase 0x3a357fd4: 
5610: 2f 2a 20 52 45 53 54 41 52 54 20 2a 2f 0a 09 09  /* RESTART */...
5620: 09 63 61 73 65 20 30 78 35 38 35 32 61 64 64 34  .case 0x5852add4
5630: 3a 20 2f 2a 20 52 45 42 4f 4f 54 20 2a 2f 0a 09  : /* REBOOT */..
5640: 09 09 09 63 6d 64 20 3d 20 52 42 5f 41 55 54 4f  ...cmd = RB_AUTO
5650: 42 4f 4f 54 3b 0a 0a 09 09 09 09 62 72 65 61 6b  BOOT;......break
5660: 3b 0a 09 09 09 64 65 66 61 75 6c 74 3a 0a 09 09  ;....default:...
5670: 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75  ..Tcl_SetObjResu
5680: 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e  lt(interp, Tcl_N
5690: 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 75 6e 6b  ewStringObj("unk
56a0: 6e 6f 77 6e 20 6f 72 20 61 6d 62 69 67 75 6f 75  nown or ambiguou
56b0: 73 20 73 75 62 63 6f 6d 6d 61 6e 64 3a 20 6d 75  s subcommand: mu
56c0: 73 74 20 62 65 20 44 49 53 41 42 4c 45 5f 43 41  st be DISABLE_CA
56d0: 44 2c 20 45 4e 41 42 4c 45 5f 43 41 44 2c 20 48  D, ENABLE_CAD, H
56e0: 41 4c 54 2c 20 50 4f 57 45 52 5f 4f 46 46 2c 20  ALT, POWER_OFF, 
56f0: 6f 72 20 52 45 53 54 41 52 54 22 2c 20 2d 31 29  or RESTART", -1)
5700: 29 3b 0a 0a 09 09 09 09 72 65 74 75 72 6e 28 54  );......return(T
5710: 43 4c 5f 45 52 52 4f 52 29 3b 0a 09 09 7d 0a 09  CL_ERROR);...}..
5720: 7d 20 65 6c 73 65 20 69 66 20 28 6f 62 6a 63 20  } else if (objc 
5730: 3d 3d 20 31 29 20 7b 0a 09 09 63 6d 64 20 3d 20  == 1) {...cmd = 
5740: 52 42 5f 41 55 54 4f 42 4f 4f 54 3b 0a 09 7d 20  RB_AUTOBOOT;..} 
5750: 65 6c 73 65 20 7b 0a 09 09 54 63 6c 5f 53 65 74  else {...Tcl_Set
5760: 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70  ObjResult(interp
5770: 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f  , Tcl_NewStringO
5780: 62 6a 28 22 77 72 6f 6e 67 20 23 20 61 72 67 73  bj("wrong # args
5790: 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 3a 3a  : should be \"::
57a0: 74 75 61 70 69 3a 3a 73 79 73 63 61 6c 6c 3a 3a  tuapi::syscall::
57b0: 72 65 62 6f 6f 74 20 3f 63 6f 6d 6d 61 6e 64 3f  reboot ?command?
57c0: 22 2c 20 2d 31 29 29 3b 0a 0a 09 09 72 65 74 75  ", -1));....retu
57d0: 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 09  rn(TCL_ERROR);..
57e0: 7d 0a 0a 09 73 77 69 74 63 68 20 28 63 6d 64 29  }...switch (cmd)
57f0: 20 7b 0a 09 09 63 61 73 65 20 52 42 5f 45 4e 41   {...case RB_ENA
5800: 42 4c 45 5f 43 41 44 3a 0a 09 09 63 61 73 65 20  BLE_CAD:...case 
5810: 52 42 5f 44 49 53 41 42 4c 45 5f 43 41 44 3a 0a  RB_DISABLE_CAD:.
5820: 09 09 09 2f 2a 20 4e 6f 20 6e 65 65 64 20 74 6f  .../* No need to
5830: 20 73 79 6e 63 20 66 6f 72 20 74 68 65 73 65 20   sync for these 
5840: 6f 70 65 72 61 74 69 6f 6e 73 20 2a 2f 0a 09 09  operations */...
5850: 09 62 72 65 61 6b 3b 0a 09 09 64 65 66 61 75 6c  .break;...defaul
5860: 74 3a 0a 09 09 09 73 79 6e 63 28 29 3b 0a 09 09  t:....sync();...
5870: 09 62 72 65 61 6b 3b 0a 09 7d 0a 0a 09 72 65 62  .break;..}...reb
5880: 6f 6f 74 5f 72 65 74 20 3d 20 72 65 62 6f 6f 74  oot_ret = reboot
5890: 28 63 6d 64 29 3b 0a 09 69 66 20 28 72 65 62 6f  (cmd);..if (rebo
58a0: 6f 74 5f 72 65 74 20 21 3d 20 30 29 20 7b 0a 09  ot_ret != 0) {..
58b0: 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c  .Tcl_SetObjResul
58c0: 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65  t(interp, Tcl_Ne
58d0: 77 53 74 72 69 6e 67 4f 62 6a 28 73 74 72 65 72  wStringObj(strer
58e0: 72 6f 72 28 65 72 72 6e 6f 29 2c 20 2d 31 29 29  ror(errno), -1))
58f0: 3b 0a 0a 09 09 72 65 74 75 72 6e 28 54 43 4c 5f  ;....return(TCL_
5900: 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 72 65 74  ERROR);..}...ret
5910: 75 72 6e 28 54 43 4c 5f 4f 4b 29 3b 0a 7d 0a 0a  urn(TCL_OK);.}..
5920: 73 74 61 74 69 63 20 69 6e 74 20 74 75 61 70 69  static int tuapi
5930: 5f 73 65 74 5f 74 68 72 65 61 64 5f 6e 61 6d 65  _set_thread_name
5940: 28 43 6c 69 65 6e 74 44 61 74 61 20 63 64 2c 20  (ClientData cd, 
5950: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
5960: 72 70 2c 20 69 6e 74 20 6f 62 6a 63 2c 20 54 63  rp, int objc, Tc
5970: 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
5980: 76 5b 5d 29 20 7b 0a 09 63 68 61 72 20 2a 6e 61  v[]) {..char *na
5990: 6d 65 3b 0a 0a 09 69 66 20 28 6f 62 6a 63 20 3d  me;...if (objc =
59a0: 3d 20 32 29 20 7b 0a 23 69 66 64 65 66 20 50 52  = 2) {.#ifdef PR
59b0: 5f 53 45 54 5f 4e 41 4d 45 0a 09 09 6e 61 6d 65  _SET_NAME...name
59c0: 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67   = Tcl_GetString
59d0: 28 6f 62 6a 76 5b 31 5d 29 3b 0a 09 09 70 72 63  (objv[1]);...prc
59e0: 74 6c 28 50 52 5f 53 45 54 5f 4e 41 4d 45 2c 20  tl(PR_SET_NAME, 
59f0: 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20  (unsigned long) 
5a00: 6e 61 6d 65 2c 20 30 2c 20 30 2c 20 30 29 3b 0a  name, 0, 0, 0);.
5a10: 23 65 6c 73 65 0a 09 09 54 63 6c 5f 53 65 74 4f  #else...Tcl_SetO
5a20: 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  bjResult(interp,
5a30: 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62   Tcl_NewStringOb
5a40: 6a 28 22 75 6e 73 75 70 70 6f 72 74 65 64 22 2c  j("unsupported",
5a50: 20 2d 31 29 29 3b 0a 09 09 72 65 74 75 72 6e 28   -1));...return(
5a60: 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 23 65 6e 64  TCL_ERROR);.#end
5a70: 69 66 0a 09 7d 20 65 6c 73 65 20 7b 0a 23 69 66  if..} else {.#if
5a80: 64 65 66 20 50 52 5f 47 45 54 5f 4e 41 4d 45 0a  def PR_GET_NAME.
5a90: 09 09 6e 61 6d 65 20 3d 20 6d 61 6c 6c 6f 63 28  ..name = malloc(
5aa0: 31 37 29 3b 0a 0a 09 09 70 72 63 74 6c 28 50 52  17);....prctl(PR
5ab0: 5f 47 45 54 5f 4e 41 4d 45 2c 20 28 75 6e 73 69  _GET_NAME, (unsi
5ac0: 67 6e 65 64 20 6c 6f 6e 67 29 20 6e 61 6d 65 2c  gned long) name,
5ad0: 20 30 2c 20 30 2c 20 30 29 3b 0a 0a 09 09 54 63   0, 0, 0);....Tc
5ae0: 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69  l_SetObjResult(i
5af0: 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74  nterp, Tcl_NewSt
5b00: 72 69 6e 67 4f 62 6a 28 6e 61 6d 65 2c 20 2d 31  ringObj(name, -1
5b10: 29 29 3b 0a 0a 09 09 66 72 65 65 28 6e 61 6d 65  ));....free(name
5b20: 29 3b 0a 23 65 6c 73 65 0a 09 09 54 63 6c 5f 53  );.#else...Tcl_S
5b30: 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
5b40: 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e  rp, Tcl_NewStrin
5b50: 67 4f 62 6a 28 22 75 6e 73 75 70 70 6f 72 74 65  gObj("unsupporte
5b60: 64 22 2c 20 2d 31 29 29 3b 0a 09 09 72 65 74 75  d", -1));...retu
5b70: 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 23  rn(TCL_ERROR);.#
5b80: 65 6e 64 69 66 0a 09 7d 0a 0a 09 72 65 74 75 72  endif..}...retur
5b90: 6e 28 54 43 4c 5f 4f 4b 29 3b 0a 7d 0a 0a 73 74  n(TCL_OK);.}..st
5ba0: 61 74 69 63 20 69 6e 74 20 74 75 61 70 69 5f 65  atic int tuapi_e
5bb0: 6a 65 63 74 28 43 6c 69 65 6e 74 44 61 74 61 20  ject(ClientData 
5bc0: 63 64 2c 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  cd, Tcl_Interp *
5bd0: 69 6e 74 65 72 70 2c 20 69 6e 74 20 6f 62 6a 63  interp, int objc
5be0: 2c 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54  , Tcl_Obj *CONST
5bf0: 20 6f 62 6a 76 5b 5d 29 20 7b 0a 09 54 63 6c 5f   objv[]) {..Tcl_
5c00: 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74  SetObjResult(int
5c10: 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69  erp, Tcl_NewStri
5c20: 6e 67 4f 62 6a 28 22 6e 6f 74 20 69 6d 70 6c 65  ngObj("not imple
5c30: 6d 65 6e 74 65 64 22 2c 20 2d 31 29 29 3b 0a 0a  mented", -1));..
5c40: 09 72 65 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f  .return(TCL_ERRO
5c50: 52 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 69 6e  R);.}..static in
5c60: 74 20 74 75 61 70 69 5f 70 73 28 43 6c 69 65 6e  t tuapi_ps(Clien
5c70: 74 44 61 74 61 20 63 64 2c 20 54 63 6c 5f 49 6e  tData cd, Tcl_In
5c80: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 69 6e  terp *interp, in
5c90: 74 20 6f 62 6a 63 2c 20 54 63 6c 5f 4f 62 6a 20  t objc, Tcl_Obj 
5ca0: 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 29 20 7b  *CONST objv[]) {
5cb0: 0a 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75  ..Tcl_SetObjResu
5cc0: 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e  lt(interp, Tcl_N
5cd0: 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 6e 6f 74  ewStringObj("not
5ce0: 20 69 6d 70 6c 65 6d 65 6e 74 65 64 22 2c 20 2d   implemented", -
5cf0: 31 29 29 3b 0a 0a 09 72 65 74 75 72 6e 28 54 43  1));...return(TC
5d00: 4c 5f 45 52 52 4f 52 29 3b 0a 7d 0a 0a 73 74 61  L_ERROR);.}..sta
5d10: 74 69 63 20 69 6e 74 20 74 75 61 70 69 5f 65 78  tic int tuapi_ex
5d20: 65 63 76 65 28 43 6c 69 65 6e 74 44 61 74 61 20  ecve(ClientData 
5d30: 63 64 2c 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  cd, Tcl_Interp *
5d40: 69 6e 74 65 72 70 2c 20 69 6e 74 20 6f 62 6a 63  interp, int objc
5d50: 2c 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54  , Tcl_Obj *CONST
5d60: 20 6f 62 6a 76 5b 5d 29 20 7b 0a 09 63 68 61 72   objv[]) {..char
5d70: 20 2a 2a 61 72 67 76 20 3d 20 4e 55 4c 4c 3b 0a   **argv = NULL;.
5d80: 09 63 68 61 72 20 2a 66 69 6c 65 3b 0a 09 69 6e  .char *file;..in
5d90: 74 20 69 64 78 3b 0a 0a 09 69 66 20 28 6f 62 6a  t idx;...if (obj
5da0: 63 20 3c 20 32 29 20 7b 0a 09 09 54 63 6c 5f 53  c < 2) {...Tcl_S
5db0: 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
5dc0: 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e  rp, Tcl_NewStrin
5dd0: 67 4f 62 6a 28 22 77 72 6f 6e 67 20 23 20 61 72  gObj("wrong # ar
5de0: 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
5df0: 3a 3a 74 75 61 70 69 3a 3a 73 79 73 63 61 6c 6c  ::tuapi::syscall
5e00: 3a 3a 65 78 65 63 76 65 20 66 69 6c 65 20 3f 61  ::execve file ?a
5e10: 72 67 73 20 2e 2e 2e 3f 5c 22 22 2c 20 2d 31 29  rgs ...?\"", -1)
5e20: 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 54 43 4c  );....return(TCL
5e30: 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 2f 2a  _ERROR);..}.../*
5e40: 20 46 69 6e 64 20 65 78 65 63 75 74 61 62 6c 65   Find executable
5e50: 20 2a 2f 0a 09 66 69 6c 65 20 3d 20 54 63 6c 5f   */..file = Tcl_
5e60: 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31  GetString(objv[1
5e70: 5d 29 3b 0a 0a 09 2f 2a 20 47 65 6e 65 72 61 74  ]);.../* Generat
5e80: 65 20 61 72 67 75 6d 65 6e 74 20 61 72 72 61 79  e argument array
5e90: 20 2a 2f 0a 09 61 72 67 76 20 3d 20 6d 61 6c 6c   */..argv = mall
5ea0: 6f 63 28 73 69 7a 65 6f 66 28 2a 61 72 67 76 29  oc(sizeof(*argv)
5eb0: 20 2a 20 28 6f 62 6a 63 20 2d 20 31 29 29 3b 0a   * (objc - 1));.
5ec0: 0a 09 66 6f 72 20 28 69 64 78 20 3d 20 32 3b 20  ..for (idx = 2; 
5ed0: 69 64 78 20 3c 20 6f 62 6a 63 3b 20 69 64 78 2b  idx < objc; idx+
5ee0: 2b 29 20 7b 0a 09 09 61 72 67 76 5b 69 64 78 20  +) {...argv[idx 
5ef0: 2d 20 32 5d 20 3d 20 54 63 6c 5f 47 65 74 53 74  - 2] = Tcl_GetSt
5f00: 72 69 6e 67 28 6f 62 6a 76 5b 69 64 78 5d 29 3b  ring(objv[idx]);
5f10: 0a 09 7d 0a 09 61 72 67 76 5b 6f 62 6a 63 20 2d  ..}..argv[objc -
5f20: 20 32 5d 20 3d 20 4e 55 4c 4c 3b 0a 0a 09 2f 2a   2] = NULL;.../*
5f30: 20 50 61 73 73 20 65 78 65 63 75 74 69 6f 6e 20   Pass execution 
5f40: 74 6f 20 6e 65 77 20 66 69 6c 65 20 2a 2f 0a 09  to new file */..
5f50: 65 78 65 63 76 65 28 66 69 6c 65 2c 20 61 72 67  execve(file, arg
5f60: 76 2c 20 65 6e 76 69 72 6f 6e 29 3b 0a 0a 09 2f  v, environ);.../
5f70: 2a 20 49 66 20 74 68 65 20 6e 65 77 20 69 6d 61  * If the new ima
5f80: 67 65 20 63 6f 75 6c 64 20 6e 6f 74 20 74 61 6b  ge could not tak
5f90: 65 20 6f 76 65 72 2c 20 73 6f 6d 65 74 68 69 6e  e over, somethin
5fa0: 67 20 77 65 6e 74 20 77 72 6f 6e 67 20 2d 2d 20  g went wrong -- 
5fb0: 72 65 70 6f 72 74 20 65 72 72 6f 72 20 2a 2f 0a  report error */.
5fc0: 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c  .Tcl_SetObjResul
5fd0: 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65  t(interp, Tcl_Ne
5fe0: 77 53 74 72 69 6e 67 4f 62 6a 28 73 74 72 65 72  wStringObj(strer
5ff0: 72 6f 72 28 65 72 72 6e 6f 29 2c 20 2d 31 29 29  ror(errno), -1))
6000: 3b 0a 0a 09 72 65 74 75 72 6e 28 54 43 4c 5f 45  ;...return(TCL_E
6010: 52 52 4f 52 29 3b 0a 7d 0a 0a 73 74 61 74 69 63  RROR);.}..static
6020: 20 69 6e 74 20 74 75 61 70 69 5f 6c 6f 73 65 74   int tuapi_loset
6030: 75 70 28 43 6c 69 65 6e 74 44 61 74 61 20 63 64  up(ClientData cd
6040: 2c 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e  , Tcl_Interp *in
6050: 74 65 72 70 2c 20 69 6e 74 20 6f 62 6a 63 2c 20  terp, int objc, 
6060: 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
6070: 62 6a 76 5b 5d 29 20 7b 0a 09 63 68 61 72 20 2a  bjv[]) {..char *
6080: 66 69 6c 65 2c 20 2a 6c 6f 6f 70 64 65 76 3b 0a  file, *loopdev;.
6090: 09 69 6e 74 20 63 68 6b 5f 72 65 74 3b 0a 09 69  .int chk_ret;..i
60a0: 6e 74 20 6c 6f 6f 70 66 64 2c 20 66 69 6c 65 66  nt loopfd, filef
60b0: 64 3b 0a 0a 09 69 66 20 28 6f 62 6a 63 20 21 3d  d;...if (objc !=
60c0: 20 33 29 20 7b 0a 09 09 54 63 6c 5f 53 65 74 4f   3) {...Tcl_SetO
60d0: 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  bjResult(interp,
60e0: 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62   Tcl_NewStringOb
60f0: 6a 28 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  j("wrong # args:
6100: 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 3a 3a 74   should be \"::t
6110: 75 61 70 69 3a 3a 73 79 73 63 61 6c 6c 3a 3a 6c  uapi::syscall::l
6120: 6f 73 65 74 75 70 20 6c 6f 6f 70 64 65 76 20 66  osetup loopdev f
6130: 69 6c 65 5c 22 22 2c 20 2d 31 29 29 3b 0a 0a 09  ile\"", -1));...
6140: 09 72 65 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f  .return(TCL_ERRO
6150: 52 29 3b 0a 09 7d 0a 0a 09 6c 6f 6f 70 64 65 76  R);..}...loopdev
6160: 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67   = Tcl_GetString
6170: 28 6f 62 6a 76 5b 31 5d 29 3b 0a 09 66 69 6c 65  (objv[1]);..file
6180: 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67   = Tcl_GetString
6190: 28 6f 62 6a 76 5b 32 5d 29 3b 0a 0a 09 6c 6f 6f  (objv[2]);...loo
61a0: 70 66 64 20 3d 20 6f 70 65 6e 28 6c 6f 6f 70 64  pfd = open(loopd
61b0: 65 76 2c 20 4f 5f 52 44 4f 4e 4c 59 29 3b 0a 09  ev, O_RDONLY);..
61c0: 69 66 20 28 6c 6f 6f 70 66 64 20 3c 20 30 29 20  if (loopfd < 0) 
61d0: 7b 0a 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65  {...Tcl_SetObjRe
61e0: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c  sult(interp, Tcl
61f0: 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 73 74  _NewStringObj(st
6200: 72 65 72 72 6f 72 28 65 72 72 6e 6f 29 2c 20 2d  rerror(errno), -
6210: 31 29 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 54  1));....return(T
6220: 43 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09  CL_ERROR);..}...
6230: 69 66 20 28 66 69 6c 65 5b 30 5d 20 21 3d 20 27  if (file[0] != '
6240: 5c 30 27 29 20 7b 0a 09 09 66 69 6c 65 66 64 20  \0') {...filefd 
6250: 3d 20 6f 70 65 6e 28 66 69 6c 65 2c 20 4f 5f 52  = open(file, O_R
6260: 44 4f 4e 4c 59 29 3b 0a 09 09 69 66 20 28 66 69  DONLY);...if (fi
6270: 6c 65 66 64 20 3c 20 30 29 20 7b 0a 09 09 09 63  lefd < 0) {....c
6280: 6c 6f 73 65 28 6c 6f 6f 70 66 64 29 3b 0a 0a 09  lose(loopfd);...
6290: 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75  ..Tcl_SetObjResu
62a0: 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e  lt(interp, Tcl_N
62b0: 65 77 53 74 72 69 6e 67 4f 62 6a 28 73 74 72 65  ewStringObj(stre
62c0: 72 72 6f 72 28 65 72 72 6e 6f 29 2c 20 2d 31 29  rror(errno), -1)
62d0: 29 3b 0a 0a 09 09 09 72 65 74 75 72 6e 28 54 43  );.....return(TC
62e0: 4c 5f 45 52 52 4f 52 29 3b 0a 09 09 7d 0a 0a 09  L_ERROR);...}...
62f0: 09 63 68 6b 5f 72 65 74 20 3d 20 69 6f 63 74 6c  .chk_ret = ioctl
6300: 28 6c 6f 6f 70 66 64 2c 20 4c 4f 4f 50 5f 53 45  (loopfd, LOOP_SE
6310: 54 5f 46 44 2c 20 66 69 6c 65 66 64 29 3b 0a 0a  T_FD, filefd);..
6320: 09 09 63 6c 6f 73 65 28 66 69 6c 65 66 64 29 3b  ..close(filefd);
6330: 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 09 63 68 6b  ..} else {...chk
6340: 5f 72 65 74 20 3d 20 69 6f 63 74 6c 28 6c 6f 6f  _ret = ioctl(loo
6350: 70 66 64 2c 20 4c 4f 4f 50 5f 43 4c 52 5f 46 44  pfd, LOOP_CLR_FD
6360: 2c 20 30 29 3b 0a 09 7d 0a 0a 09 63 6c 6f 73 65  , 0);..}...close
6370: 28 6c 6f 6f 70 66 64 29 3b 0a 0a 09 69 66 20 28  (loopfd);...if (
6380: 63 68 6b 5f 72 65 74 20 21 3d 20 30 29 20 7b 0a  chk_ret != 0) {.
6390: 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75  ..Tcl_SetObjResu
63a0: 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e  lt(interp, Tcl_N
63b0: 65 77 53 74 72 69 6e 67 4f 62 6a 28 73 74 72 65  ewStringObj(stre
63c0: 72 72 6f 72 28 65 72 72 6e 6f 29 2c 20 2d 31 29  rror(errno), -1)
63d0: 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 54 43 4c  );....return(TCL
63e0: 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 72 65  _ERROR);..}...re
63f0: 74 75 72 6e 28 54 43 4c 5f 4f 4b 29 3b 0a 7d 0a  turn(TCL_OK);.}.
6400: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 74 75 61  .static void tua
6410: 70 69 5f 70 72 69 76 61 74 65 5f 61 70 70 65 6e  pi_private_appen
6420: 64 5f 73 6f 63 6b 61 64 64 72 5f 74 6f 5f 74 63  d_sockaddr_to_tc
6430: 6c 6f 62 6a 28 54 63 6c 5f 49 6e 74 65 72 70 20  lobj(Tcl_Interp 
6440: 2a 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4f 62 6a  *interp, Tcl_Obj
6450: 20 2a 6c 69 73 74 2c 20 63 68 61 72 20 2a 68 65   *list, char *he
6460: 61 64 65 72 2c 20 73 74 72 75 63 74 20 73 6f 63  ader, struct soc
6470: 6b 61 64 64 72 20 2a 61 64 64 72 29 20 7b 0a 09  kaddr *addr) {..
6480: 63 68 61 72 20 61 64 64 72 5f 62 75 66 5b 49 4e  char addr_buf[IN
6490: 45 54 36 5f 41 44 44 52 53 54 52 4c 45 4e 20 2b  ET6_ADDRSTRLEN +
64a0: 20 49 4e 45 54 5f 41 44 44 52 53 54 52 4c 45 4e   INET_ADDRSTRLEN
64b0: 20 2b 20 31 5d 2c 20 2a 63 68 6b 5f 69 6e 70 3b   + 1], *chk_inp;
64c0: 0a 0a 09 73 77 69 74 63 68 20 28 61 64 64 72 2d  ...switch (addr-
64d0: 3e 73 61 5f 66 61 6d 69 6c 79 29 20 7b 0a 09 09  >sa_family) {...
64e0: 63 61 73 65 20 41 46 5f 49 4e 45 54 3a 20 2f 2a  case AF_INET: /*
64f0: 20 49 50 76 34 20 2a 2f 0a 09 09 63 61 73 65 20   IPv4 */...case 
6500: 41 46 5f 49 4e 45 54 36 3a 20 2f 2a 20 49 50 76  AF_INET6: /* IPv
6510: 36 20 2a 2f 0a 09 09 09 73 77 69 74 63 68 20 28  6 */....switch (
6520: 61 64 64 72 2d 3e 73 61 5f 66 61 6d 69 6c 79 29  addr->sa_family)
6530: 20 7b 0a 09 09 09 09 63 61 73 65 20 41 46 5f 49   {.....case AF_I
6540: 4e 45 54 3a 20 2f 2a 20 49 50 76 34 20 2a 2f 0a  NET: /* IPv4 */.
6550: 09 09 09 09 09 63 68 6b 5f 69 6e 70 20 3d 20 28  .....chk_inp = (
6560: 63 68 61 72 20 2a 29 20 69 6e 65 74 5f 6e 74 6f  char *) inet_nto
6570: 70 28 61 64 64 72 2d 3e 73 61 5f 66 61 6d 69 6c  p(addr->sa_famil
6580: 79 2c 20 26 28 28 73 74 72 75 63 74 20 73 6f 63  y, &((struct soc
6590: 6b 61 64 64 72 5f 69 6e 20 2a 29 20 61 64 64 72  kaddr_in *) addr
65a0: 29 2d 3e 73 69 6e 5f 61 64 64 72 2c 20 61 64 64  )->sin_addr, add
65b0: 72 5f 62 75 66 2c 20 73 69 7a 65 6f 66 28 61 64  r_buf, sizeof(ad
65c0: 64 72 5f 62 75 66 29 29 3b 0a 09 09 09 09 09 62  dr_buf));......b
65d0: 72 65 61 6b 3b 0a 09 09 09 09 63 61 73 65 20 41  reak;.....case A
65e0: 46 5f 49 4e 45 54 36 3a 20 2f 2a 20 49 50 76 36  F_INET6: /* IPv6
65f0: 20 2a 2f 0a 09 09 09 09 09 63 68 6b 5f 69 6e 70   */......chk_inp
6600: 20 3d 20 28 63 68 61 72 20 2a 29 20 69 6e 65 74   = (char *) inet
6610: 5f 6e 74 6f 70 28 61 64 64 72 2d 3e 73 61 5f 66  _ntop(addr->sa_f
6620: 61 6d 69 6c 79 2c 20 26 28 28 73 74 72 75 63 74  amily, &((struct
6630: 20 73 6f 63 6b 61 64 64 72 5f 69 6e 36 20 2a 29   sockaddr_in6 *)
6640: 20 61 64 64 72 29 2d 3e 73 69 6e 36 5f 61 64 64   addr)->sin6_add
6650: 72 2c 20 61 64 64 72 5f 62 75 66 2c 20 73 69 7a  r, addr_buf, siz
6660: 65 6f 66 28 61 64 64 72 5f 62 75 66 29 29 3b 0a  eof(addr_buf));.
6670: 09 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 7d  .....break;....}
6680: 0a 0a 09 09 09 69 66 20 28 63 68 6b 5f 69 6e 70  .....if (chk_inp
6690: 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 09 09   == NULL) {.....
66a0: 62 72 65 61 6b 3b 0a 09 09 09 7d 0a 0a 09 09 09  break;....}.....
66b0: 69 66 20 28 68 65 61 64 65 72 29 20 7b 0a 09 09  if (header) {...
66c0: 09 09 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70  ..Tcl_ListObjApp
66d0: 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72  endElement(inter
66e0: 70 2c 20 6c 69 73 74 2c 20 54 63 6c 5f 4e 65 77  p, list, Tcl_New
66f0: 53 74 72 69 6e 67 4f 62 6a 28 68 65 61 64 65 72  StringObj(header
6700: 2c 20 2d 31 29 29 3b 0a 09 09 09 7d 0a 0a 09 09  , -1));....}....
6710: 09 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65  .Tcl_ListObjAppe
6720: 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70  ndElement(interp
6730: 2c 20 6c 69 73 74 2c 20 54 63 6c 5f 4e 65 77 53  , list, Tcl_NewS
6740: 74 72 69 6e 67 4f 62 6a 28 61 64 64 72 5f 62 75  tringObj(addr_bu
6750: 66 2c 20 2d 31 29 29 3b 0a 0a 09 09 09 62 72 65  f, -1));.....bre
6760: 61 6b 3b 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 3b  ak;..}...return;
6770: 0a 7d 0a 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .}..static int t
6780: 75 61 70 69 5f 70 72 69 76 61 74 65 5f 67 65 74  uapi_private_get
6790: 5f 73 6f 63 6b 61 64 64 72 5f 66 72 6f 6d 5f 6f  _sockaddr_from_o
67a0: 62 6a 28 54 63 6c 5f 4f 62 6a 20 2a 76 61 6c 75  bj(Tcl_Obj *valu
67b0: 65 2c 20 76 6f 69 64 20 2a 74 61 72 67 65 74 29  e, void *target)
67c0: 20 7b 0a 09 73 74 72 75 63 74 20 73 6f 63 6b 61   {..struct socka
67d0: 64 64 72 5f 69 6e 20 6c 6f 63 61 6c 5f 76 34 3b  ddr_in local_v4;
67e0: 0a 09 73 74 72 75 63 74 20 73 6f 63 6b 61 64 64  ..struct sockadd
67f0: 72 5f 69 6e 36 20 6c 6f 63 61 6c 5f 76 36 3b 0a  r_in6 local_v6;.
6800: 09 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 64 64  .const char *add
6810: 72 5f 73 74 72 3b 0a 09 69 6e 74 20 69 6e 65 74  r_str;..int inet
6820: 70 74 6f 6e 5f 72 65 74 3b 0a 0a 09 61 64 64 72  pton_ret;...addr
6830: 5f 73 74 72 20 3d 20 54 63 6c 5f 47 65 74 53 74  _str = Tcl_GetSt
6840: 72 69 6e 67 28 76 61 6c 75 65 29 3b 0a 0a 09 6d  ring(value);...m
6850: 65 6d 73 65 74 28 26 6c 6f 63 61 6c 5f 76 34 2c  emset(&local_v4,
6860: 20 30 2c 20 73 69 7a 65 6f 66 28 6c 6f 63 61 6c   0, sizeof(local
6870: 5f 76 34 29 29 3b 0a 09 69 6e 65 74 70 74 6f 6e  _v4));..inetpton
6880: 5f 72 65 74 20 3d 20 69 6e 65 74 5f 70 74 6f 6e  _ret = inet_pton
6890: 28 41 46 5f 49 4e 45 54 2c 20 61 64 64 72 5f 73  (AF_INET, addr_s
68a0: 74 72 2c 20 26 6c 6f 63 61 6c 5f 76 34 2e 73 69  tr, &local_v4.si
68b0: 6e 5f 61 64 64 72 29 3b 0a 09 69 66 20 28 69 6e  n_addr);..if (in
68c0: 65 74 70 74 6f 6e 5f 72 65 74 20 3d 3d 20 31 29  etpton_ret == 1)
68d0: 20 7b 0a 09 09 6c 6f 63 61 6c 5f 76 34 2e 73 69   {...local_v4.si
68e0: 6e 5f 66 61 6d 69 6c 79 20 3d 20 41 46 5f 49 4e  n_family = AF_IN
68f0: 45 54 3b 0a 0a 09 09 6d 65 6d 63 70 79 28 74 61  ET;....memcpy(ta
6900: 72 67 65 74 2c 20 26 6c 6f 63 61 6c 5f 76 34 2c  rget, &local_v4,
6910: 20 73 69 7a 65 6f 66 28 6c 6f 63 61 6c 5f 76 34   sizeof(local_v4
6920: 29 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 30 29  ));....return(0)
6930: 3b 0a 09 7d 0a 0a 09 6d 65 6d 73 65 74 28 26 6c  ;..}...memset(&l
6940: 6f 63 61 6c 5f 76 36 2c 20 30 2c 20 73 69 7a 65  ocal_v6, 0, size
6950: 6f 66 28 6c 6f 63 61 6c 5f 76 36 29 29 3b 0a 09  of(local_v6));..
6960: 69 6e 65 74 70 74 6f 6e 5f 72 65 74 20 3d 20 69  inetpton_ret = i
6970: 6e 65 74 5f 70 74 6f 6e 28 41 46 5f 49 4e 45 54  net_pton(AF_INET
6980: 36 2c 20 61 64 64 72 5f 73 74 72 2c 20 26 6c 6f  6, addr_str, &lo
6990: 63 61 6c 5f 76 36 2e 73 69 6e 36 5f 61 64 64 72  cal_v6.sin6_addr
69a0: 29 3b 0a 09 69 66 20 28 69 6e 65 74 70 74 6f 6e  );..if (inetpton
69b0: 5f 72 65 74 20 3d 3d 20 31 29 20 7b 0a 09 09 6c  _ret == 1) {...l
69c0: 6f 63 61 6c 5f 76 36 2e 73 69 6e 36 5f 66 61 6d  ocal_v6.sin6_fam
69d0: 69 6c 79 20 3d 20 41 46 5f 49 4e 45 54 36 3b 0a  ily = AF_INET6;.
69e0: 0a 09 09 6d 65 6d 63 70 79 28 74 61 72 67 65 74  ...memcpy(target
69f0: 2c 20 26 6c 6f 63 61 6c 5f 76 36 2c 20 73 69 7a  , &local_v6, siz
6a00: 65 6f 66 28 6c 6f 63 61 6c 5f 76 36 29 29 3b 0a  eof(local_v6));.
6a10: 0a 09 09 72 65 74 75 72 6e 28 30 29 3b 0a 09 7d  ...return(0);..}
6a20: 0a 0a 09 72 65 74 75 72 6e 28 2d 31 29 3b 0a 7d  ...return(-1);.}
6a30: 0a 0a 73 74 61 74 69 63 20 69 6e 74 20 74 75 61  ..static int tua
6a40: 70 69 5f 69 66 63 6f 6e 66 69 67 5f 6c 69 73 74  pi_ifconfig_list
6a50: 28 43 6c 69 65 6e 74 44 61 74 61 20 63 64 2c 20  (ClientData cd, 
6a60: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
6a70: 72 70 2c 20 69 6e 74 20 6f 62 6a 63 2c 20 54 63  rp, int objc, Tc
6a80: 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
6a90: 76 5b 5d 2c 20 69 6e 74 20 73 6f 63 6b 29 20 7b  v[], int sock) {
6aa0: 0a 09 54 63 6c 5f 4f 62 6a 20 2a 74 63 6c 5f 69  ..Tcl_Obj *tcl_i
6ab0: 66 61 63 65 5f 6c 69 73 74 3b 0a 09 73 74 72 75  face_list;..stru
6ac0: 63 74 20 69 66 63 6f 6e 66 20 69 66 61 63 65 73  ct ifconf ifaces
6ad0: 5f 63 66 67 3b 0a 09 73 74 72 75 63 74 20 69 66  _cfg;..struct if
6ae0: 72 65 71 20 2a 69 66 61 63 65 5f 72 65 71 20 3d  req *iface_req =
6af0: 20 4e 55 4c 4c 3b 0a 09 69 6e 74 20 69 66 61 63   NULL;..int ifac
6b00: 65 5f 72 65 71 5f 63 6e 74 20 3d 20 32 32 34 2c  e_req_cnt = 224,
6b10: 20 69 66 61 63 65 5f 72 65 71 5f 6c 65 6e 3b 0a   iface_req_len;.
6b20: 09 69 6e 74 20 69 64 78 2c 20 69 66 61 63 65 5f  .int idx, iface_
6b30: 63 6e 74 3b 0a 09 69 6e 74 20 69 6f 63 74 6c 5f  cnt;..int ioctl_
6b40: 72 65 74 2c 20 74 63 6c 5f 72 65 74 3b 0a 0a 09  ret, tcl_ret;...
6b50: 69 66 61 63 65 5f 72 65 71 5f 6c 65 6e 20 3d 20  iface_req_len = 
6b60: 69 66 61 63 65 5f 72 65 71 5f 63 6e 74 20 2a 20  iface_req_cnt * 
6b70: 73 69 7a 65 6f 66 28 2a 69 66 61 63 65 5f 72 65  sizeof(*iface_re
6b80: 71 29 3b 0a 09 69 66 61 63 65 5f 72 65 71 20 3d  q);..iface_req =
6b90: 20 6d 61 6c 6c 6f 63 28 69 66 61 63 65 5f 72 65   malloc(iface_re
6ba0: 71 5f 6c 65 6e 29 3b 0a 09 69 66 20 28 69 66 61  q_len);..if (ifa
6bb0: 63 65 5f 72 65 71 20 3d 3d 20 4e 55 4c 4c 29 20  ce_req == NULL) 
6bc0: 7b 0a 09 09 2f 2a 20 52 65 70 6f 72 74 20 66 61  {.../* Report fa
6bd0: 69 6c 75 72 65 20 2a 2f 0a 09 09 54 63 6c 5f 53  ilure */...Tcl_S
6be0: 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
6bf0: 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e  rp, Tcl_NewStrin
6c00: 67 4f 62 6a 28 22 75 6e 61 62 6c 65 20 74 6f 20  gObj("unable to 
6c10: 61 6c 6c 6f 63 61 74 65 20 6d 65 6d 6f 72 79 22  allocate memory"
6c20: 2c 20 2d 31 29 29 3b 0a 0a 09 09 72 65 74 75 72  , -1));....retur
6c30: 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d  n(TCL_ERROR);..}
6c40: 0a 0a 09 69 66 61 63 65 73 5f 63 66 67 2e 69 66  ...ifaces_cfg.if
6c50: 63 5f 72 65 71 20 3d 20 69 66 61 63 65 5f 72 65  c_req = iface_re
6c60: 71 3b 0a 09 69 66 61 63 65 73 5f 63 66 67 2e 69  q;..ifaces_cfg.i
6c70: 66 63 5f 6c 65 6e 20 3d 20 69 66 61 63 65 5f 72  fc_len = iface_r
6c80: 65 71 5f 6c 65 6e 3b 0a 09 69 6f 63 74 6c 5f 72  eq_len;..ioctl_r
6c90: 65 74 20 3d 20 69 6f 63 74 6c 28 73 6f 63 6b 2c  et = ioctl(sock,
6ca0: 20 53 49 4f 43 47 49 46 43 4f 4e 46 2c 20 26 69   SIOCGIFCONF, &i
6cb0: 66 61 63 65 73 5f 63 66 67 29 3b 0a 09 69 66 20  faces_cfg);..if 
6cc0: 28 69 6f 63 74 6c 5f 72 65 74 20 21 3d 20 30 29  (ioctl_ret != 0)
6cd0: 20 7b 0a 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52   {...Tcl_SetObjR
6ce0: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63  esult(interp, Tc
6cf0: 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22  l_NewStringObj("
6d00: 69 6f 63 74 6c 20 66 61 69 6c 65 64 22 2c 20 2d  ioctl failed", -
6d10: 31 29 29 3b 0a 0a 09 09 66 72 65 65 28 69 66 61  1));....free(ifa
6d20: 63 65 5f 72 65 71 29 3b 0a 0a 09 09 72 65 74 75  ce_req);....retu
6d30: 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 09  rn(TCL_ERROR);..
6d40: 7d 0a 0a 09 69 66 61 63 65 5f 63 6e 74 20 3d 20  }...iface_cnt = 
6d50: 69 66 61 63 65 73 5f 63 66 67 2e 69 66 63 5f 6c  ifaces_cfg.ifc_l
6d60: 65 6e 20 2f 20 73 69 7a 65 6f 66 28 2a 69 66 61  en / sizeof(*ifa
6d70: 63 65 5f 72 65 71 29 3b 0a 0a 09 74 63 6c 5f 69  ce_req);...tcl_i
6d80: 66 61 63 65 5f 6c 69 73 74 20 3d 20 54 63 6c 5f  face_list = Tcl_
6d90: 4e 65 77 4f 62 6a 28 29 3b 0a 0a 09 66 6f 72 20  NewObj();...for 
6da0: 28 69 64 78 20 3d 20 30 3b 20 69 64 78 20 3c 20  (idx = 0; idx < 
6db0: 69 66 61 63 65 5f 63 6e 74 3b 20 69 64 78 2b 2b  iface_cnt; idx++
6dc0: 29 20 7b 0a 09 09 74 63 6c 5f 72 65 74 20 3d 20  ) {...tcl_ret = 
6dd0: 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e  Tcl_ListObjAppen
6de0: 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c  dElement(interp,
6df0: 20 74 63 6c 5f 69 66 61 63 65 5f 6c 69 73 74 2c   tcl_iface_list,
6e00: 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62   Tcl_NewStringOb
6e10: 6a 28 69 66 61 63 65 5f 72 65 71 5b 69 64 78 5d  j(iface_req[idx]
6e20: 2e 69 66 72 5f 6e 61 6d 65 2c 20 2d 31 29 29 3b  .ifr_name, -1));
6e30: 0a 09 09 69 66 20 28 74 63 6c 5f 72 65 74 20 21  ...if (tcl_ret !
6e40: 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a 09 09 09 54  = TCL_OK) {....T
6e50: 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28  cl_SetObjResult(
6e60: 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53  interp, Tcl_NewS
6e70: 74 72 69 6e 67 4f 62 6a 28 22 75 6e 61 62 6c 65  tringObj("unable
6e80: 20 74 6f 20 61 70 70 65 6e 64 20 74 6f 20 6c 69   to append to li
6e90: 73 74 22 2c 20 2d 31 29 29 3b 0a 0a 09 09 09 66  st", -1));.....f
6ea0: 72 65 65 28 69 66 61 63 65 5f 72 65 71 29 3b 0a  ree(iface_req);.
6eb0: 0a 09 09 09 72 65 74 75 72 6e 28 54 43 4c 5f 45  ....return(TCL_E
6ec0: 52 52 4f 52 29 3b 0a 09 09 7d 0a 09 7d 0a 0a 09  RROR);...}..}...
6ed0: 66 72 65 65 28 69 66 61 63 65 5f 72 65 71 29 3b  free(iface_req);
6ee0: 0a 0a 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73  ...Tcl_SetObjRes
6ef0: 75 6c 74 28 69 6e 74 65 72 70 2c 20 74 63 6c 5f  ult(interp, tcl_
6f00: 69 66 61 63 65 5f 6c 69 73 74 29 3b 0a 0a 09 72  iface_list);...r
6f10: 65 74 75 72 6e 28 54 43 4c 5f 4f 4b 29 3b 0a 7d  eturn(TCL_OK);.}
6f20: 0a 0a 73 74 61 74 69 63 20 69 6e 74 20 74 75 61  ..static int tua
6f30: 70 69 5f 69 66 63 6f 6e 66 69 67 5f 69 6e 66 6f  pi_ifconfig_info
6f40: 28 43 6c 69 65 6e 74 44 61 74 61 20 63 64 2c 20  (ClientData cd, 
6f50: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
6f60: 72 70 2c 20 69 6e 74 20 6f 62 6a 63 2c 20 54 63  rp, int objc, Tc
6f70: 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
6f80: 76 5b 5d 2c 20 69 6e 74 20 73 6f 63 6b 2c 20 69  v[], int sock, i
6f90: 6e 74 20 73 6f 63 6b 5f 76 34 2c 20 69 6e 74 20  nt sock_v4, int 
6fa0: 73 6f 63 6b 5f 76 36 29 20 7b 0a 09 54 63 6c 5f  sock_v6) {..Tcl_
6fb0: 4f 62 6a 20 2a 72 65 74 6c 69 73 74 2c 20 2a 66  Obj *retlist, *f
6fc0: 6c 61 67 73 3b 0a 09 73 74 72 75 63 74 20 69 66  lags;..struct if
6fd0: 72 65 71 20 69 66 61 63 65 5f 72 65 71 3b 0a 09  req iface_req;..
6fe0: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 61  unsigned char *a
6ff0: 64 64 72 5f 64 61 74 61 3b 0a 09 63 6f 6e 73 74  ddr_data;..const
7000: 20 63 68 61 72 20 2a 6c 69 6e 6b 5f 65 6e 63 61   char *link_enca
7010: 70 3b 0a 09 63 6f 6e 73 74 20 63 68 61 72 20 2a  p;..const char *
7020: 69 66 61 63 65 3b 0a 09 69 6e 74 20 66 6c 61 67  iface;..int flag
7030: 73 5f 62 69 74 6d 61 73 6b 2c 20 66 6c 61 67 5f  s_bitmask, flag_
7040: 62 72 6f 61 64 63 61 73 74 20 3d 20 30 2c 20 66  broadcast = 0, f
7050: 6c 61 67 5f 70 6f 69 6e 74 6f 70 6f 69 6e 74 20  lag_pointopoint 
7060: 3d 20 30 3b 0a 09 69 6e 74 20 69 6f 63 74 6c 5f  = 0;..int ioctl_
7070: 72 65 74 3b 0a 0a 09 72 65 74 6c 69 73 74 20 3d  ret;...retlist =
7080: 20 54 63 6c 5f 4e 65 77 4f 62 6a 28 29 3b 0a 0a   Tcl_NewObj();..
7090: 09 69 66 61 63 65 20 3d 20 54 63 6c 5f 47 65 74  .iface = Tcl_Get
70a0: 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 3b  String(objv[1]);
70b0: 0a 0a 09 69 66 20 28 28 73 74 72 6c 65 6e 28 69  ...if ((strlen(i
70c0: 66 61 63 65 29 20 2b 20 31 29 20 3e 3d 20 49 46  face) + 1) >= IF
70d0: 4e 41 4d 53 49 5a 29 20 7b 0a 09 09 54 63 6c 5f  NAMSIZ) {...Tcl_
70e0: 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74  SetObjResult(int
70f0: 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69  erp, Tcl_NewStri
7100: 6e 67 4f 62 6a 28 22 69 6e 74 65 72 66 61 63 65  ngObj("interface
7110: 20 6e 61 6d 65 20 74 6f 6f 20 6c 6f 6e 67 22 2c   name too long",
7120: 20 2d 31 29 29 3b 0a 0a 09 09 72 65 74 75 72 6e   -1));....return
7130: 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a  (TCL_ERROR);..}.
7140: 0a 09 73 74 72 63 70 79 28 69 66 61 63 65 5f 72  ..strcpy(iface_r
7150: 65 71 2e 69 66 72 5f 6e 61 6d 65 2c 20 69 66 61  eq.ifr_name, ifa
7160: 63 65 29 3b 0a 0a 09 2f 2a 0a 09 20 2a 20 41 6c  ce);.../*.. * Al
7170: 6c 20 69 6e 74 65 72 66 61 63 65 73 20 73 68 6f  l interfaces sho
7180: 75 6c 64 20 68 61 76 65 20 66 6c 61 67 73 2c 20  uld have flags, 
7190: 73 6f 20 75 73 65 20 69 74 20 61 73 20 61 20 63  so use it as a c
71a0: 68 65 63 6b 20 66 6f 72 20 69 6e 74 65 72 66 61  heck for interfa
71b0: 63 65 0a 09 20 2a 20 65 78 69 73 74 61 6e 63 65  ce.. * existance
71c0: 0a 09 20 2a 2f 0a 09 69 6f 63 74 6c 5f 72 65 74  .. */..ioctl_ret
71d0: 20 3d 20 69 6f 63 74 6c 28 73 6f 63 6b 2c 20 53   = ioctl(sock, S
71e0: 49 4f 43 47 49 46 46 4c 41 47 53 2c 20 26 69 66  IOCGIFFLAGS, &if
71f0: 61 63 65 5f 72 65 71 29 3b 0a 09 69 66 20 28 69  ace_req);..if (i
7200: 6f 63 74 6c 5f 72 65 74 20 21 3d 20 30 29 20 7b  octl_ret != 0) {
7210: 0a 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73  ...Tcl_SetObjRes
7220: 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ult(interp, Tcl_
7230: 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 69 6e  NewStringObj("in
7240: 76 61 6c 69 64 20 69 6e 74 65 72 66 61 63 65 22  valid interface"
7250: 2c 20 2d 31 29 29 3b 0a 0a 09 09 72 65 74 75 72  , -1));....retur
7260: 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d  n(TCL_ERROR);..}
7270: 0a 0a 09 2f 2a 20 43 72 65 61 74 65 20 6c 69 73  .../* Create lis
7280: 74 20 6f 66 20 66 6c 61 67 73 20 2a 2f 0a 09 66  t of flags */..f
7290: 6c 61 67 73 20 3d 20 54 63 6c 5f 4e 65 77 4f 62  lags = Tcl_NewOb
72a0: 6a 28 29 3b 0a 09 66 6c 61 67 73 5f 62 69 74 6d  j();..flags_bitm
72b0: 61 73 6b 20 3d 20 69 66 61 63 65 5f 72 65 71 2e  ask = iface_req.
72c0: 69 66 72 5f 66 6c 61 67 73 3b 0a 0a 09 69 66 20  ifr_flags;...if 
72d0: 28 28 66 6c 61 67 73 5f 62 69 74 6d 61 73 6b 20  ((flags_bitmask 
72e0: 26 20 49 46 46 5f 55 50 29 20 3d 3d 20 49 46 46  & IFF_UP) == IFF
72f0: 5f 55 50 29 20 7b 0a 09 09 54 63 6c 5f 4c 69 73  _UP) {...Tcl_Lis
7300: 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e  tObjAppendElemen
7310: 74 28 69 6e 74 65 72 70 2c 20 66 6c 61 67 73 2c  t(interp, flags,
7320: 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62   Tcl_NewStringOb
7330: 6a 28 22 55 50 22 2c 20 2d 31 29 29 3b 0a 09 7d  j("UP", -1));..}
7340: 0a 09 69 66 20 28 28 66 6c 61 67 73 5f 62 69 74  ..if ((flags_bit
7350: 6d 61 73 6b 20 26 20 49 46 46 5f 42 52 4f 41 44  mask & IFF_BROAD
7360: 43 41 53 54 29 20 3d 3d 20 49 46 46 5f 42 52 4f  CAST) == IFF_BRO
7370: 41 44 43 41 53 54 29 20 7b 0a 09 09 66 6c 61 67  ADCAST) {...flag
7380: 5f 62 72 6f 61 64 63 61 73 74 20 3d 20 31 3b 0a  _broadcast = 1;.
7390: 0a 09 09 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70  ...Tcl_ListObjAp
73a0: 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65  pendElement(inte
73b0: 72 70 2c 20 66 6c 61 67 73 2c 20 54 63 6c 5f 4e  rp, flags, Tcl_N
73c0: 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 42 52 4f  ewStringObj("BRO
73d0: 41 44 43 41 53 54 22 2c 20 2d 31 29 29 3b 0a 09  ADCAST", -1));..
73e0: 7d 0a 09 69 66 20 28 28 66 6c 61 67 73 5f 62 69  }..if ((flags_bi
73f0: 74 6d 61 73 6b 20 26 20 49 46 46 5f 50 4f 49 4e  tmask & IFF_POIN
7400: 54 4f 50 4f 49 4e 54 29 20 3d 3d 20 49 46 46 5f  TOPOINT) == IFF_
7410: 50 4f 49 4e 54 4f 50 4f 49 4e 54 29 20 7b 0a 09  POINTOPOINT) {..
7420: 09 66 6c 61 67 5f 70 6f 69 6e 74 6f 70 6f 69 6e  .flag_pointopoin
7430: 74 20 3d 20 31 3b 0a 0a 09 09 54 63 6c 5f 4c 69  t = 1;....Tcl_Li
7440: 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65  stObjAppendEleme
7450: 6e 74 28 69 6e 74 65 72 70 2c 20 66 6c 61 67 73  nt(interp, flags
7460: 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f  , Tcl_NewStringO
7470: 62 6a 28 22 50 4f 49 4e 54 4f 50 4f 49 4e 54 22  bj("POINTOPOINT"
7480: 2c 20 2d 31 29 29 3b 0a 09 7d 0a 09 69 66 20 28  , -1));..}..if (
7490: 28 66 6c 61 67 73 5f 62 69 74 6d 61 73 6b 20 26  (flags_bitmask &
74a0: 20 49 46 46 5f 44 45 42 55 47 29 20 3d 3d 20 49   IFF_DEBUG) == I
74b0: 46 46 5f 44 45 42 55 47 29 20 7b 0a 09 09 54 63  FF_DEBUG) {...Tc
74c0: 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45  l_ListObjAppendE
74d0: 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 66  lement(interp, f
74e0: 6c 61 67 73 2c 20 54 63 6c 5f 4e 65 77 53 74 72  lags, Tcl_NewStr
74f0: 69 6e 67 4f 62 6a 28 22 44 45 42 55 47 22 2c 20  ingObj("DEBUG", 
7500: 2d 31 29 29 3b 0a 09 7d 0a 09 69 66 20 28 28 66  -1));..}..if ((f
7510: 6c 61 67 73 5f 62 69 74 6d 61 73 6b 20 26 20 49  lags_bitmask & I
7520: 46 46 5f 4c 4f 4f 50 42 41 43 4b 29 20 3d 3d 20  FF_LOOPBACK) == 
7530: 49 46 46 5f 4c 4f 4f 50 42 41 43 4b 29 20 7b 0a  IFF_LOOPBACK) {.
7540: 09 09 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70  ..Tcl_ListObjApp
7550: 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72  endElement(inter
7560: 70 2c 20 66 6c 61 67 73 2c 20 54 63 6c 5f 4e 65  p, flags, Tcl_Ne
7570: 77 53 74 72 69 6e 67 4f 62 6a 28 22 4c 4f 4f 50  wStringObj("LOOP
7580: 42 41 43 4b 22 2c 20 2d 31 29 29 3b 0a 09 7d 0a  BACK", -1));..}.
7590: 09 69 66 20 28 28 66 6c 61 67 73 5f 62 69 74 6d  .if ((flags_bitm
75a0: 61 73 6b 20 26 20 49 46 46 5f 4e 4f 54 52 41 49  ask & IFF_NOTRAI
75b0: 4c 45 52 53 29 20 3d 3d 20 49 46 46 5f 4e 4f 54  LERS) == IFF_NOT
75c0: 52 41 49 4c 45 52 53 29 20 7b 0a 09 09 54 63 6c  RAILERS) {...Tcl
75d0: 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c  _ListObjAppendEl
75e0: 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 66 6c  ement(interp, fl
75f0: 61 67 73 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69  ags, Tcl_NewStri
7600: 6e 67 4f 62 6a 28 22 4e 4f 54 52 41 49 4c 45 52  ngObj("NOTRAILER
7610: 53 22 2c 20 2d 31 29 29 3b 0a 09 7d 0a 09 69 66  S", -1));..}..if
7620: 20 28 28 66 6c 61 67 73 5f 62 69 74 6d 61 73 6b   ((flags_bitmask
7630: 20 26 20 49 46 46 5f 52 55 4e 4e 49 4e 47 29 20   & IFF_RUNNING) 
7640: 3d 3d 20 49 46 46 5f 52 55 4e 4e 49 4e 47 29 20  == IFF_RUNNING) 
7650: 7b 0a 09 09 54 63 6c 5f 4c 69 73 74 4f 62 6a 41  {...Tcl_ListObjA
7660: 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74  ppendElement(int
7670: 65 72 70 2c 20 66 6c 61 67 73 2c 20 54 63 6c 5f  erp, flags, Tcl_
7680: 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 52 55  NewStringObj("RU
7690: 4e 4e 49 4e 47 22 2c 20 2d 31 29 29 3b 0a 09 7d  NNING", -1));..}
76a0: 0a 09 69 66 20 28 28 66 6c 61 67 73 5f 62 69 74  ..if ((flags_bit
76b0: 6d 61 73 6b 20 26 20 49 46 46 5f 4e 4f 41 52 50  mask & IFF_NOARP
76c0: 29 20 3d 3d 20 49 46 46 5f 4e 4f 41 52 50 29 20  ) == IFF_NOARP) 
76d0: 7b 0a 09 09 54 63 6c 5f 4c 69 73 74 4f 62 6a 41  {...Tcl_ListObjA
76e0: 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74  ppendElement(int
76f0: 65 72 70 2c 20 66 6c 61 67 73 2c 20 54 63 6c 5f  erp, flags, Tcl_
7700: 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 4e 4f  NewStringObj("NO
7710: 41 52 50 22 2c 20 2d 31 29 29 3b 0a 09 7d 0a 09  ARP", -1));..}..
7720: 69 66 20 28 28 66 6c 61 67 73 5f 62 69 74 6d 61  if ((flags_bitma
7730: 73 6b 20 26 20 49 46 46 5f 50 52 4f 4d 49 53 43  sk & IFF_PROMISC
7740: 29 20 3d 3d 20 49 46 46 5f 50 52 4f 4d 49 53 43  ) == IFF_PROMISC
7750: 29 20 7b 0a 09 09 54 63 6c 5f 4c 69 73 74 4f 62  ) {...Tcl_ListOb
7760: 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69  jAppendElement(i
7770: 6e 74 65 72 70 2c 20 66 6c 61 67 73 2c 20 54 63  nterp, flags, Tc
7780: 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22  l_NewStringObj("
7790: 50 52 4f 4d 49 53 43 22 2c 20 2d 31 29 29 3b 0a  PROMISC", -1));.
77a0: 09 7d 0a 09 69 66 20 28 28 66 6c 61 67 73 5f 62  .}..if ((flags_b
77b0: 69 74 6d 61 73 6b 20 26 20 49 46 46 5f 41 4c 4c  itmask & IFF_ALL
77c0: 4d 55 4c 54 49 29 20 3d 3d 20 49 46 46 5f 41 4c  MULTI) == IFF_AL
77d0: 4c 4d 55 4c 54 49 29 20 7b 0a 09 09 54 63 6c 5f  LMULTI) {...Tcl_
77e0: 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65  ListObjAppendEle
77f0: 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 66 6c 61  ment(interp, fla
7800: 67 73 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e  gs, Tcl_NewStrin
7810: 67 4f 62 6a 28 22 41 4c 4c 4d 55 4c 54 49 22 2c  gObj("ALLMULTI",
7820: 20 2d 31 29 29 3b 0a 09 7d 0a 09 69 66 20 28 28   -1));..}..if ((
7830: 66 6c 61 67 73 5f 62 69 74 6d 61 73 6b 20 26 20  flags_bitmask & 
7840: 49 46 46 5f 4d 41 53 54 45 52 29 20 3d 3d 20 49  IFF_MASTER) == I
7850: 46 46 5f 4d 41 53 54 45 52 29 20 7b 0a 09 09 54  FF_MASTER) {...T
7860: 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64  cl_ListObjAppend
7870: 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20  Element(interp, 
7880: 66 6c 61 67 73 2c 20 54 63 6c 5f 4e 65 77 53 74  flags, Tcl_NewSt
7890: 72 69 6e 67 4f 62 6a 28 22 4d 41 53 54 45 52 22  ringObj("MASTER"
78a0: 2c 20 2d 31 29 29 3b 0a 09 7d 0a 09 69 66 20 28  , -1));..}..if (
78b0: 28 66 6c 61 67 73 5f 62 69 74 6d 61 73 6b 20 26  (flags_bitmask &
78c0: 20 49 46 46 5f 53 4c 41 56 45 29 20 3d 3d 20 49   IFF_SLAVE) == I
78d0: 46 46 5f 53 4c 41 56 45 29 20 7b 0a 09 09 54 63  FF_SLAVE) {...Tc
78e0: 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45  l_ListObjAppendE
78f0: 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 66  lement(interp, f
7900: 6c 61 67 73 2c 20 54 63 6c 5f 4e 65 77 53 74 72  lags, Tcl_NewStr
7910: 69 6e 67 4f 62 6a 28 22 53 4c 41 56 45 22 2c 20  ingObj("SLAVE", 
7920: 2d 31 29 29 3b 0a 09 7d 0a 09 69 66 20 28 28 66  -1));..}..if ((f
7930: 6c 61 67 73 5f 62 69 74 6d 61 73 6b 20 26 20 49  lags_bitmask & I
7940: 46 46 5f 4d 55 4c 54 49 43 41 53 54 29 20 3d 3d  FF_MULTICAST) ==
7950: 20 49 46 46 5f 4d 55 4c 54 49 43 41 53 54 29 20   IFF_MULTICAST) 
7960: 7b 0a 09 09 54 63 6c 5f 4c 69 73 74 4f 62 6a 41  {...Tcl_ListObjA
7970: 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74  ppendElement(int
7980: 65 72 70 2c 20 66 6c 61 67 73 2c 20 54 63 6c 5f  erp, flags, Tcl_
7990: 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 4d 55  NewStringObj("MU
79a0: 4c 54 49 43 41 53 54 22 2c 20 2d 31 29 29 3b 0a  LTICAST", -1));.
79b0: 09 7d 0a 09 69 66 20 28 28 66 6c 61 67 73 5f 62  .}..if ((flags_b
79c0: 69 74 6d 61 73 6b 20 26 20 49 46 46 5f 50 4f 52  itmask & IFF_POR
79d0: 54 53 45 4c 29 20 3d 3d 20 49 46 46 5f 50 4f 52  TSEL) == IFF_POR
79e0: 54 53 45 4c 29 20 7b 0a 09 09 54 63 6c 5f 4c 69  TSEL) {...Tcl_Li
79f0: 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65  stObjAppendEleme
7a00: 6e 74 28 69 6e 74 65 72 70 2c 20 66 6c 61 67 73  nt(interp, flags
7a10: 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f  , Tcl_NewStringO
7a20: 62 6a 28 22 50 4f 52 54 53 45 4c 22 2c 20 2d 31  bj("PORTSEL", -1
7a30: 29 29 3b 0a 09 7d 0a 09 69 66 20 28 28 66 6c 61  ));..}..if ((fla
7a40: 67 73 5f 62 69 74 6d 61 73 6b 20 26 20 49 46 46  gs_bitmask & IFF
7a50: 5f 41 55 54 4f 4d 45 44 49 41 29 20 3d 3d 20 49  _AUTOMEDIA) == I
7a60: 46 46 5f 41 55 54 4f 4d 45 44 49 41 29 20 7b 0a  FF_AUTOMEDIA) {.
7a70: 09 09 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70  ..Tcl_ListObjApp
7a80: 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72  endElement(inter
7a90: 70 2c 20 66 6c 61 67 73 2c 20 54 63 6c 5f 4e 65  p, flags, Tcl_Ne
7aa0: 77 53 74 72 69 6e 67 4f 62 6a 28 22 41 55 54 4f  wStringObj("AUTO
7ab0: 4d 45 44 49 41 22 2c 20 2d 31 29 29 3b 0a 09 7d  MEDIA", -1));..}
7ac0: 0a 09 69 66 20 28 28 66 6c 61 67 73 5f 62 69 74  ..if ((flags_bit
7ad0: 6d 61 73 6b 20 26 20 49 46 46 5f 44 59 4e 41 4d  mask & IFF_DYNAM
7ae0: 49 43 29 20 3d 3d 20 49 46 46 5f 44 59 4e 41 4d  IC) == IFF_DYNAM
7af0: 49 43 29 20 7b 0a 09 09 54 63 6c 5f 4c 69 73 74  IC) {...Tcl_List
7b00: 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74  ObjAppendElement
7b10: 28 69 6e 74 65 72 70 2c 20 66 6c 61 67 73 2c 20  (interp, flags, 
7b20: 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a  Tcl_NewStringObj
7b30: 28 22 44 59 4e 41 4d 49 43 22 2c 20 2d 31 29 29  ("DYNAMIC", -1))
7b40: 3b 0a 09 7d 0a 09 69 66 20 28 28 66 6c 61 67 73  ;..}..if ((flags
7b50: 5f 62 69 74 6d 61 73 6b 20 26 20 49 46 46 5f 4c  _bitmask & IFF_L
7b60: 4f 57 45 52 5f 55 50 29 20 3d 3d 20 49 46 46 5f  OWER_UP) == IFF_
7b70: 4c 4f 57 45 52 5f 55 50 29 20 7b 0a 09 09 54 63  LOWER_UP) {...Tc
7b80: 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45  l_ListObjAppendE
7b90: 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 66  lement(interp, f
7ba0: 6c 61 67 73 2c 20 54 63 6c 5f 4e 65 77 53 74 72  lags, Tcl_NewStr
7bb0: 69 6e 67 4f 62 6a 28 22 4c 4f 57 45 52 5f 55 50  ingObj("LOWER_UP
7bc0: 22 2c 20 2d 31 29 29 3b 0a 09 7d 0a 09 69 66 20  ", -1));..}..if 
7bd0: 28 28 66 6c 61 67 73 5f 62 69 74 6d 61 73 6b 20  ((flags_bitmask 
7be0: 26 20 49 46 46 5f 44 4f 52 4d 41 4e 54 29 20 3d  & IFF_DORMANT) =
7bf0: 3d 20 49 46 46 5f 44 4f 52 4d 41 4e 54 29 20 7b  = IFF_DORMANT) {
7c00: 0a 09 09 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70  ...Tcl_ListObjAp
7c10: 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65  pendElement(inte
7c20: 72 70 2c 20 66 6c 61 67 73 2c 20 54 63 6c 5f 4e  rp, flags, Tcl_N
7c30: 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 44 4f 52  ewStringObj("DOR
7c40: 4d 41 4e 54 22 2c 20 2d 31 29 29 3b 0a 09 7d 0a  MANT", -1));..}.
7c50: 23 69 66 64 65 66 20 49 46 46 5f 45 43 48 4f 0a  #ifdef IFF_ECHO.
7c60: 09 69 66 20 28 28 66 6c 61 67 73 5f 62 69 74 6d  .if ((flags_bitm
7c70: 61 73 6b 20 26 20 49 46 46 5f 45 43 48 4f 29 20  ask & IFF_ECHO) 
7c80: 3d 3d 20 49 46 46 5f 45 43 48 4f 29 20 7b 0a 09  == IFF_ECHO) {..
7c90: 09 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65  .Tcl_ListObjAppe
7ca0: 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70  ndElement(interp
7cb0: 2c 20 66 6c 61 67 73 2c 20 54 63 6c 5f 4e 65 77  , flags, Tcl_New
7cc0: 53 74 72 69 6e 67 4f 62 6a 28 22 45 43 48 4f 22  StringObj("ECHO"
7cd0: 2c 20 2d 31 29 29 3b 0a 09 7d 0a 23 65 6e 64 69  , -1));..}.#endi
7ce0: 66 0a 0a 09 2f 2a 20 41 64 64 20 61 72 72 61 79  f.../* Add array
7cf0: 2d 63 6f 6d 70 6c 69 61 6e 74 2f 64 69 63 74 20  -compliant/dict 
7d00: 65 6e 74 72 79 20 74 6f 20 74 68 65 20 72 65 74  entry to the ret
7d10: 75 72 6e 20 6c 69 73 74 20 2a 2f 0a 09 54 63 6c  urn list */..Tcl
7d20: 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c  _ListObjAppendEl
7d30: 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 72 65  ement(interp, re
7d40: 74 6c 69 73 74 2c 20 54 63 6c 5f 4e 65 77 53 74  tlist, Tcl_NewSt
7d50: 72 69 6e 67 4f 62 6a 28 22 66 6c 61 67 73 22 2c  ringObj("flags",
7d60: 20 2d 31 29 29 3b 0a 09 54 63 6c 5f 4c 69 73 74   -1));..Tcl_List
7d70: 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74  ObjAppendElement
7d80: 28 69 6e 74 65 72 70 2c 20 72 65 74 6c 69 73 74  (interp, retlist
7d90: 2c 20 66 6c 61 67 73 29 3b 0a 0a 09 2f 2a 20 46  , flags);.../* F
7da0: 65 74 63 68 20 6f 74 68 65 72 20 61 74 74 72 69  etch other attri
7db0: 62 75 74 65 73 20 66 72 6f 6d 20 74 68 65 20 69  butes from the i
7dc0: 6e 74 65 72 66 61 63 65 20 2a 2f 0a 09 69 6f 63  nterface */..ioc
7dd0: 74 6c 5f 72 65 74 20 3d 20 69 6f 63 74 6c 28 73  tl_ret = ioctl(s
7de0: 6f 63 6b 2c 20 53 49 4f 43 47 49 46 48 57 41 44  ock, SIOCGIFHWAD
7df0: 44 52 2c 20 26 69 66 61 63 65 5f 72 65 71 29 3b  DR, &iface_req);
7e00: 0a 09 69 66 20 28 69 6f 63 74 6c 5f 72 65 74 20  ..if (ioctl_ret 
7e10: 3d 3d 20 30 29 20 7b 0a 09 09 6c 69 6e 6b 5f 65  == 0) {...link_e
7e20: 6e 63 61 70 20 3d 20 22 75 6e 6b 6e 6f 77 6e 22  ncap = "unknown"
7e30: 3b 0a 0a 09 09 61 64 64 72 5f 64 61 74 61 20 3d  ;....addr_data =
7e40: 20 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20   (unsigned char 
7e50: 2a 29 20 69 66 61 63 65 5f 72 65 71 2e 69 66 72  *) iface_req.ifr
7e60: 5f 68 77 61 64 64 72 2e 73 61 5f 64 61 74 61 3b  _hwaddr.sa_data;
7e70: 0a 09 09 73 77 69 74 63 68 20 28 69 66 61 63 65  ...switch (iface
7e80: 5f 72 65 71 2e 69 66 72 5f 68 77 61 64 64 72 2e  _req.ifr_hwaddr.
7e90: 73 61 5f 66 61 6d 69 6c 79 29 20 7b 0a 09 09 09  sa_family) {....
7ea0: 63 61 73 65 20 41 52 50 48 52 44 5f 45 54 48 45  case ARPHRD_ETHE
7eb0: 52 3a 0a 09 09 09 09 6c 69 6e 6b 5f 65 6e 63 61  R:.....link_enca
7ec0: 70 20 3d 20 22 65 74 68 65 72 6e 65 74 22 3b 0a  p = "ethernet";.
7ed0: 0a 09 09 09 09 54 63 6c 5f 4c 69 73 74 4f 62 6a  .....Tcl_ListObj
7ee0: 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e  AppendElement(in
7ef0: 74 65 72 70 2c 20 72 65 74 6c 69 73 74 2c 20 54  terp, retlist, T
7f00: 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28  cl_NewStringObj(
7f10: 22 68 77 61 64 64 72 22 2c 20 2d 31 29 29 3b 0a  "hwaddr", -1));.
7f20: 09 09 09 09 54 63 6c 5f 4c 69 73 74 4f 62 6a 41  ....Tcl_ListObjA
7f30: 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74  ppendElement(int
7f40: 65 72 70 2c 20 72 65 74 6c 69 73 74 2c 0a 09 09  erp, retlist,...
7f50: 09 09 20 20 54 63 6c 5f 4f 62 6a 50 72 69 6e 74  ..  Tcl_ObjPrint
7f60: 66 28 22 25 30 32 78 3a 25 30 32 78 3a 25 30 32  f("%02x:%02x:%02
7f70: 78 3a 25 30 32 78 3a 25 30 32 78 3a 25 30 32 78  x:%02x:%02x:%02x
7f80: 22 2c 0a 09 09 09 09 20 20 20 20 61 64 64 72 5f  ",.....    addr_
7f90: 64 61 74 61 5b 30 5d 2c 0a 09 09 09 09 20 20 20  data[0],.....   
7fa0: 20 61 64 64 72 5f 64 61 74 61 5b 31 5d 2c 0a 09   addr_data[1],..
7fb0: 09 09 09 20 20 20 20 61 64 64 72 5f 64 61 74 61  ...    addr_data
7fc0: 5b 32 5d 2c 0a 09 09 09 09 20 20 20 20 61 64 64  [2],.....    add
7fd0: 72 5f 64 61 74 61 5b 33 5d 2c 0a 09 09 09 09 20  r_data[3],..... 
7fe0: 20 20 20 61 64 64 72 5f 64 61 74 61 5b 34 5d 2c     addr_data[4],
7ff0: 0a 09 09 09 09 20 20 20 20 61 64 64 72 5f 64 61  .....    addr_da
8000: 74 61 5b 35 5d 0a 09 09 09 09 20 20 29 0a 09 09  ta[5].....  )...
8010: 09 09 29 3b 0a 0a 09 09 09 09 62 72 65 61 6b 3b  ..);......break;
8020: 0a 09 09 09 63 61 73 65 20 41 52 50 48 52 44 5f  ....case ARPHRD_
8030: 41 58 32 35 3a 0a 09 09 09 09 6c 69 6e 6b 5f 65  AX25:.....link_e
8040: 6e 63 61 70 20 3d 20 22 61 78 32 35 22 3b 0a 09  ncap = "ax25";..
8050: 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73  ...break;....cas
8060: 65 20 41 52 50 48 52 44 5f 50 52 4f 4e 45 54 3a  e ARPHRD_PRONET:
8070: 0a 09 09 09 09 6c 69 6e 6b 5f 65 6e 63 61 70 20  .....link_encap 
8080: 3d 20 22 70 72 6f 6e 65 74 22 3b 0a 09 09 09 09  = "pronet";.....
8090: 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 41  break;....case A
80a0: 52 50 48 52 44 5f 43 48 41 4f 53 3a 0a 09 09 09  RPHRD_CHAOS:....
80b0: 09 6c 69 6e 6b 5f 65 6e 63 61 70 20 3d 20 22 63  .link_encap = "c
80c0: 68 61 6f 73 22 3b 0a 09 09 09 09 62 72 65 61 6b  haos";.....break
80d0: 3b 0a 09 09 09 63 61 73 65 20 41 52 50 48 52 44  ;....case ARPHRD
80e0: 5f 49 45 45 45 38 30 32 3a 0a 09 09 09 09 6c 69  _IEEE802:.....li
80f0: 6e 6b 5f 65 6e 63 61 70 20 3d 20 22 69 65 65 65  nk_encap = "ieee
8100: 38 30 32 22 3b 0a 09 09 09 09 62 72 65 61 6b 3b  802";.....break;
8110: 0a 09 09 09 63 61 73 65 20 41 52 50 48 52 44 5f  ....case ARPHRD_
8120: 41 52 43 4e 45 54 3a 0a 09 09 09 09 6c 69 6e 6b  ARCNET:.....link
8130: 5f 65 6e 63 61 70 20 3d 20 22 61 72 63 6e 65 74  _encap = "arcnet
8140: 22 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09  ";.....break;...
8150: 09 63 61 73 65 20 41 52 50 48 52 44 5f 41 50 50  .case ARPHRD_APP
8160: 4c 45 54 4c 4b 3a 0a 09 09 09 09 6c 69 6e 6b 5f  LETLK:.....link_
8170: 65 6e 63 61 70 20 3d 20 22 61 70 70 6c 65 74 6c  encap = "appletl
8180: 6b 22 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09  k";.....break;..
8190: 09 09 63 61 73 65 20 41 52 50 48 52 44 5f 44 4c  ..case ARPHRD_DL
81a0: 43 49 3a 0a 09 09 09 09 6c 69 6e 6b 5f 65 6e 63  CI:.....link_enc
81b0: 61 70 20 3d 20 22 64 6c 63 69 22 3b 0a 09 09 09  ap = "dlci";....
81c0: 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20  .break;....case 
81d0: 41 52 50 48 52 44 5f 41 54 4d 3a 0a 09 09 09 09  ARPHRD_ATM:.....
81e0: 6c 69 6e 6b 5f 65 6e 63 61 70 20 3d 20 22 61 74  link_encap = "at
81f0: 6d 22 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09  m";.....break;..
8200: 09 09 63 61 73 65 20 41 52 50 48 52 44 5f 4d 45  ..case ARPHRD_ME
8210: 54 52 49 43 4f 4d 3a 0a 09 09 09 09 6c 69 6e 6b  TRICOM:.....link
8220: 5f 65 6e 63 61 70 20 3d 20 22 6d 65 74 72 69 63  _encap = "metric
8230: 6f 6d 22 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a  om";.....break;.
8240: 09 09 09 63 61 73 65 20 41 52 50 48 52 44 5f 49  ...case ARPHRD_I
8250: 45 45 45 31 33 39 34 3a 0a 09 09 09 09 6c 69 6e  EEE1394:.....lin
8260: 6b 5f 65 6e 63 61 70 20 3d 20 22 69 65 65 65 31  k_encap = "ieee1
8270: 33 39 34 22 3b 0a 09 09 09 09 62 72 65 61 6b 3b  394";.....break;
8280: 0a 09 09 09 63 61 73 65 20 41 52 50 48 52 44 5f  ....case ARPHRD_
8290: 45 55 49 36 34 3a 0a 09 09 09 09 6c 69 6e 6b 5f  EUI64:.....link_
82a0: 65 6e 63 61 70 20 3d 20 22 65 75 69 36 34 22 3b  encap = "eui64";
82b0: 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63  .....break;....c
82c0: 61 73 65 20 41 52 50 48 52 44 5f 49 4e 46 49 4e  ase ARPHRD_INFIN
82d0: 49 42 41 4e 44 3a 0a 09 09 09 09 6c 69 6e 6b 5f  IBAND:.....link_
82e0: 65 6e 63 61 70 20 3d 20 22 69 6e 66 69 6e 69 62  encap = "infinib
82f0: 61 6e 64 22 3b 0a 09 09 09 09 62 72 65 61 6b 3b  and";.....break;
8300: 0a 09 09 09 63 61 73 65 20 41 52 50 48 52 44 5f  ....case ARPHRD_
8310: 53 4c 49 50 3a 0a 09 09 09 09 6c 69 6e 6b 5f 65  SLIP:.....link_e
8320: 6e 63 61 70 20 3d 20 22 73 6c 69 70 22 3b 0a 09  ncap = "slip";..
8330: 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73  ...break;....cas
8340: 65 20 41 52 50 48 52 44 5f 43 53 4c 49 50 3a 0a  e ARPHRD_CSLIP:.
8350: 09 09 09 09 6c 69 6e 6b 5f 65 6e 63 61 70 20 3d  ....link_encap =
8360: 20 22 63 73 6c 69 70 22 3b 0a 09 09 09 09 62 72   "cslip";.....br
8370: 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 41 52 50  eak;....case ARP
8380: 48 52 44 5f 53 4c 49 50 36 3a 0a 09 09 09 09 6c  HRD_SLIP6:.....l
8390: 69 6e 6b 5f 65 6e 63 61 70 20 3d 20 22 73 6c 69  ink_encap = "sli
83a0: 70 36 22 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a  p6";.....break;.
83b0: 09 09 09 63 61 73 65 20 41 52 50 48 52 44 5f 43  ...case ARPHRD_C
83c0: 53 4c 49 50 36 3a 0a 09 09 09 09 6c 69 6e 6b 5f  SLIP6:.....link_
83d0: 65 6e 63 61 70 20 3d 20 22 63 73 6c 69 70 36 22  encap = "cslip6"
83e0: 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09  ;.....break;....
83f0: 63 61 73 65 20 41 52 50 48 52 44 5f 52 53 52 56  case ARPHRD_RSRV
8400: 44 3a 0a 09 09 09 09 6c 69 6e 6b 5f 65 6e 63 61  D:.....link_enca
8410: 70 20 3d 20 22 72 73 72 76 64 22 3b 0a 09 09 09  p = "rsrvd";....
8420: 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20  .break;....case 
8430: 41 52 50 48 52 44 5f 41 44 41 50 54 3a 0a 09 09  ARPHRD_ADAPT:...
8440: 09 09 6c 69 6e 6b 5f 65 6e 63 61 70 20 3d 20 22  ..link_encap = "
8450: 61 64 61 70 74 22 3b 0a 09 09 09 09 62 72 65 61  adapt";.....brea
8460: 6b 3b 0a 09 09 09 63 61 73 65 20 41 52 50 48 52  k;....case ARPHR
8470: 44 5f 52 4f 53 45 3a 0a 09 09 09 09 6c 69 6e 6b  D_ROSE:.....link
8480: 5f 65 6e 63 61 70 20 3d 20 22 72 6f 73 65 22 3b  _encap = "rose";
8490: 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63  .....break;....c
84a0: 61 73 65 20 41 52 50 48 52 44 5f 58 32 35 3a 0a  ase ARPHRD_X25:.
84b0: 09 09 09 09 6c 69 6e 6b 5f 65 6e 63 61 70 20 3d  ....link_encap =
84c0: 20 22 78 32 35 22 3b 0a 09 09 09 09 62 72 65 61   "x25";.....brea
84d0: 6b 3b 0a 09 09 09 63 61 73 65 20 41 52 50 48 52  k;....case ARPHR
84e0: 44 5f 48 57 58 32 35 3a 0a 09 09 09 09 6c 69 6e  D_HWX25:.....lin
84f0: 6b 5f 65 6e 63 61 70 20 3d 20 22 68 77 78 32 35  k_encap = "hwx25
8500: 22 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a 23 69  ";.....break;.#i
8510: 66 64 65 66 20 41 52 50 48 52 44 5f 43 41 4e 0a  fdef ARPHRD_CAN.
8520: 09 09 09 63 61 73 65 20 41 52 50 48 52 44 5f 43  ...case ARPHRD_C
8530: 41 4e 3a 0a 09 09 09 09 6c 69 6e 6b 5f 65 6e 63  AN:.....link_enc
8540: 61 70 20 3d 20 22 63 61 6e 22 3b 0a 09 09 09 09  ap = "can";.....
8550: 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 09 09  break;.#endif...
8560: 09 63 61 73 65 20 41 52 50 48 52 44 5f 50 50 50  .case ARPHRD_PPP
8570: 3a 0a 09 09 09 09 6c 69 6e 6b 5f 65 6e 63 61 70  :.....link_encap
8580: 20 3d 20 22 70 70 70 22 3b 0a 09 09 09 09 62 72   = "ppp";.....br
8590: 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 41 52 50  eak;....case ARP
85a0: 48 52 44 5f 43 49 53 43 4f 3a 0a 09 09 09 09 6c  HRD_CISCO:.....l
85b0: 69 6e 6b 5f 65 6e 63 61 70 20 3d 20 22 63 69 73  ink_encap = "cis
85c0: 63 6f 22 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a  co";.....break;.
85d0: 09 09 09 63 61 73 65 20 41 52 50 48 52 44 5f 4c  ...case ARPHRD_L
85e0: 41 50 42 3a 0a 09 09 09 09 6c 69 6e 6b 5f 65 6e  APB:.....link_en
85f0: 63 61 70 20 3d 20 22 6c 61 70 62 22 3b 0a 09 09  cap = "lapb";...
8600: 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65  ..break;....case
8610: 20 41 52 50 48 52 44 5f 44 44 43 4d 50 3a 0a 09   ARPHRD_DDCMP:..
8620: 09 09 09 6c 69 6e 6b 5f 65 6e 63 61 70 20 3d 20  ...link_encap = 
8630: 22 64 64 63 6d 70 22 3b 0a 09 09 09 09 62 72 65  "ddcmp";.....bre
8640: 61 6b 3b 0a 09 09 09 63 61 73 65 20 41 52 50 48  ak;....case ARPH
8650: 52 44 5f 52 41 57 48 44 4c 43 3a 0a 09 09 09 09  RD_RAWHDLC:.....
8660: 6c 69 6e 6b 5f 65 6e 63 61 70 20 3d 20 22 72 61  link_encap = "ra
8670: 77 68 64 6c 63 22 3b 0a 09 09 09 09 62 72 65 61  whdlc";.....brea
8680: 6b 3b 0a 09 09 09 63 61 73 65 20 41 52 50 48 52  k;....case ARPHR
8690: 44 5f 54 55 4e 4e 45 4c 3a 0a 09 09 09 09 6c 69  D_TUNNEL:.....li
86a0: 6e 6b 5f 65 6e 63 61 70 20 3d 20 22 74 75 6e 6e  nk_encap = "tunn
86b0: 65 6c 22 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a  el";.....break;.
86c0: 09 09 09 63 61 73 65 20 41 52 50 48 52 44 5f 54  ...case ARPHRD_T
86d0: 55 4e 4e 45 4c 36 3a 0a 09 09 09 09 6c 69 6e 6b  UNNEL6:.....link
86e0: 5f 65 6e 63 61 70 20 3d 20 22 74 75 6e 6e 65 6c  _encap = "tunnel
86f0: 36 22 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09  6";.....break;..
8700: 09 09 63 61 73 65 20 41 52 50 48 52 44 5f 46 52  ..case ARPHRD_FR
8710: 41 44 3a 0a 09 09 09 09 6c 69 6e 6b 5f 65 6e 63  AD:.....link_enc
8720: 61 70 20 3d 20 22 66 72 61 64 22 3b 0a 09 09 09  ap = "frad";....
8730: 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20  .break;....case 
8740: 41 52 50 48 52 44 5f 53 4b 49 50 3a 0a 09 09 09  ARPHRD_SKIP:....
8750: 09 6c 69 6e 6b 5f 65 6e 63 61 70 20 3d 20 22 73  .link_encap = "s
8760: 6b 69 70 22 3b 0a 09 09 09 09 62 72 65 61 6b 3b  kip";.....break;
8770: 0a 09 09 09 63 61 73 65 20 41 52 50 48 52 44 5f  ....case ARPHRD_
8780: 4c 4f 4f 50 42 41 43 4b 3a 0a 09 09 09 09 6c 69  LOOPBACK:.....li
8790: 6e 6b 5f 65 6e 63 61 70 20 3d 20 22 6c 6f 6f 70  nk_encap = "loop
87a0: 62 61 63 6b 22 3b 0a 09 09 09 09 62 72 65 61 6b  back";.....break
87b0: 3b 0a 09 09 09 63 61 73 65 20 41 52 50 48 52 44  ;....case ARPHRD
87c0: 5f 4c 4f 43 41 4c 54 4c 4b 3a 0a 09 09 09 09 6c  _LOCALTLK:.....l
87d0: 69 6e 6b 5f 65 6e 63 61 70 20 3d 20 22 6c 6f 63  ink_encap = "loc
87e0: 61 6c 74 61 6c 6b 22 3b 0a 09 09 09 09 62 72 65  altalk";.....bre
87f0: 61 6b 3b 0a 09 09 09 63 61 73 65 20 41 52 50 48  ak;....case ARPH
8800: 52 44 5f 46 44 44 49 3a 0a 09 09 09 09 6c 69 6e  RD_FDDI:.....lin
8810: 6b 5f 65 6e 63 61 70 20 3d 20 22 66 64 64 69 22  k_encap = "fddi"
8820: 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09  ;.....break;....
8830: 63 61 73 65 20 41 52 50 48 52 44 5f 42 49 46 3a  case ARPHRD_BIF:
8840: 0a 09 09 09 09 6c 69 6e 6b 5f 65 6e 63 61 70 20  .....link_encap 
8850: 3d 20 22 62 69 66 22 3b 0a 09 09 09 09 62 72 65  = "bif";.....bre
8860: 61 6b 3b 0a 09 09 09 63 61 73 65 20 41 52 50 48  ak;....case ARPH
8870: 52 44 5f 53 49 54 3a 0a 09 09 09 09 6c 69 6e 6b  RD_SIT:.....link
8880: 5f 65 6e 63 61 70 20 3d 20 22 73 69 74 22 3b 0a  _encap = "sit";.
8890: 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61  ....break;....ca
88a0: 73 65 20 41 52 50 48 52 44 5f 49 50 44 44 50 3a  se ARPHRD_IPDDP:
88b0: 0a 09 09 09 09 6c 69 6e 6b 5f 65 6e 63 61 70 20  .....link_encap 
88c0: 3d 20 22 69 70 64 64 70 22 3b 0a 09 09 09 09 62  = "ipddp";.....b
88d0: 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 41 52  reak;....case AR
88e0: 50 48 52 44 5f 49 50 47 52 45 3a 0a 09 09 09 09  PHRD_IPGRE:.....
88f0: 6c 69 6e 6b 5f 65 6e 63 61 70 20 3d 20 22 67 72  link_encap = "gr
8900: 65 22 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09  e";.....break;..
8910: 09 09 63 61 73 65 20 41 52 50 48 52 44 5f 50 49  ..case ARPHRD_PI
8920: 4d 52 45 47 3a 0a 09 09 09 09 6c 69 6e 6b 5f 65  MREG:.....link_e
8930: 6e 63 61 70 20 3d 20 22 70 69 6d 72 65 67 22 3b  ncap = "pimreg";
8940: 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63  .....break;....c
8950: 61 73 65 20 41 52 50 48 52 44 5f 48 49 50 50 49  ase ARPHRD_HIPPI
8960: 3a 0a 09 09 09 09 6c 69 6e 6b 5f 65 6e 63 61 70  :.....link_encap
8970: 20 3d 20 22 68 69 70 70 69 22 3b 0a 09 09 09 09   = "hippi";.....
8980: 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 41  break;....case A
8990: 52 50 48 52 44 5f 41 53 48 3a 0a 09 09 09 09 6c  RPHRD_ASH:.....l
89a0: 69 6e 6b 5f 65 6e 63 61 70 20 3d 20 22 61 73 68  ink_encap = "ash
89b0: 22 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09  ";.....break;...
89c0: 09 63 61 73 65 20 41 52 50 48 52 44 5f 45 43 4f  .case ARPHRD_ECO
89d0: 4e 45 54 3a 0a 09 09 09 09 6c 69 6e 6b 5f 65 6e  NET:.....link_en
89e0: 63 61 70 20 3d 20 22 65 63 6f 6e 65 74 22 3b 0a  cap = "econet";.
89f0: 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61  ....break;....ca
8a00: 73 65 20 41 52 50 48 52 44 5f 49 52 44 41 3a 0a  se ARPHRD_IRDA:.
8a10: 09 09 09 09 6c 69 6e 6b 5f 65 6e 63 61 70 20 3d  ....link_encap =
8a20: 20 22 69 72 64 61 22 3b 0a 09 09 09 09 62 72 65   "irda";.....bre
8a30: 61 6b 3b 0a 09 09 7d 0a 0a 09 09 54 63 6c 5f 4c  ak;...}....Tcl_L
8a40: 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d  istObjAppendElem
8a50: 65 6e 74 28 69 6e 74 65 72 70 2c 20 72 65 74 6c  ent(interp, retl
8a60: 69 73 74 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69  ist, Tcl_NewStri
8a70: 6e 67 4f 62 6a 28 22 6c 69 6e 6b 5f 65 6e 63 61  ngObj("link_enca
8a80: 70 22 2c 20 2d 31 29 29 3b 0a 09 09 54 63 6c 5f  p", -1));...Tcl_
8a90: 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65  ListObjAppendEle
8aa0: 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 72 65 74  ment(interp, ret
8ab0: 6c 69 73 74 2c 20 54 63 6c 5f 4e 65 77 53 74 72  list, Tcl_NewStr
8ac0: 69 6e 67 4f 62 6a 28 6c 69 6e 6b 5f 65 6e 63 61  ingObj(link_enca
8ad0: 70 2c 20 2d 31 29 29 3b 0a 09 7d 0a 0a 09 69 6f  p, -1));..}...io
8ae0: 63 74 6c 5f 72 65 74 20 3d 20 69 6f 63 74 6c 28  ctl_ret = ioctl(
8af0: 73 6f 63 6b 2c 20 53 49 4f 43 47 49 46 4d 45 54  sock, SIOCGIFMET
8b00: 52 49 43 2c 20 26 69 66 61 63 65 5f 72 65 71 29  RIC, &iface_req)
8b10: 3b 0a 09 69 66 20 28 69 6f 63 74 6c 5f 72 65 74  ;..if (ioctl_ret
8b20: 20 3d 3d 20 30 29 20 7b 0a 09 09 54 63 6c 5f 4c   == 0) {...Tcl_L
8b30: 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d  istObjAppendElem
8b40: 65 6e 74 28 69 6e 74 65 72 70 2c 20 72 65 74 6c  ent(interp, retl
8b50: 69 73 74 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69  ist, Tcl_NewStri
8b60: 6e 67 4f 62 6a 28 22 6d 65 74 72 69 63 22 2c 20  ngObj("metric", 
8b70: 2d 31 29 29 3b 0a 09 09 54 63 6c 5f 4c 69 73 74  -1));...Tcl_List
8b80: 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74  ObjAppendElement
8b90: 28 69 6e 74 65 72 70 2c 20 72 65 74 6c 69 73 74  (interp, retlist
8ba0: 2c 20 54 63 6c 5f 4e 65 77 57 69 64 65 49 6e 74  , Tcl_NewWideInt
8bb0: 4f 62 6a 28 69 66 61 63 65 5f 72 65 71 2e 69 66  Obj(iface_req.if
8bc0: 72 5f 6d 65 74 72 69 63 20 2b 20 31 29 29 3b 0a  r_metric + 1));.
8bd0: 09 7d 0a 0a 09 69 6f 63 74 6c 5f 72 65 74 20 3d  .}...ioctl_ret =
8be0: 20 69 6f 63 74 6c 28 73 6f 63 6b 2c 20 53 49 4f   ioctl(sock, SIO
8bf0: 43 47 49 46 4d 54 55 2c 20 26 69 66 61 63 65 5f  CGIFMTU, &iface_
8c00: 72 65 71 29 3b 0a 09 69 66 20 28 69 6f 63 74 6c  req);..if (ioctl
8c10: 5f 72 65 74 20 3d 3d 20 30 29 20 7b 0a 09 09 54  _ret == 0) {...T
8c20: 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64  cl_ListObjAppend
8c30: 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20  Element(interp, 
8c40: 72 65 74 6c 69 73 74 2c 20 54 63 6c 5f 4e 65 77  retlist, Tcl_New
8c50: 53 74 72 69 6e 67 4f 62 6a 28 22 6d 74 75 22 2c  StringObj("mtu",
8c60: 20 2d 31 29 29 3b 0a 09 09 54 63 6c 5f 4c 69 73   -1));...Tcl_Lis
8c70: 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e  tObjAppendElemen
8c80: 74 28 69 6e 74 65 72 70 2c 20 72 65 74 6c 69 73  t(interp, retlis
8c90: 74 2c 20 54 63 6c 5f 4e 65 77 57 69 64 65 49 6e  t, Tcl_NewWideIn
8ca0: 74 4f 62 6a 28 69 66 61 63 65 5f 72 65 71 2e 69  tObj(iface_req.i
8cb0: 66 72 5f 6d 74 75 29 29 3b 0a 09 7d 0a 0a 09 69  fr_mtu));..}...i
8cc0: 6f 63 74 6c 5f 72 65 74 20 3d 20 69 6f 63 74 6c  octl_ret = ioctl
8cd0: 28 73 6f 63 6b 2c 20 53 49 4f 43 47 49 46 49 4e  (sock, SIOCGIFIN
8ce0: 44 45 58 2c 20 26 69 66 61 63 65 5f 72 65 71 29  DEX, &iface_req)
8cf0: 3b 0a 09 69 66 20 28 69 6f 63 74 6c 5f 72 65 74  ;..if (ioctl_ret
8d00: 20 3d 3d 20 30 29 20 7b 0a 09 09 54 63 6c 5f 4c   == 0) {...Tcl_L
8d10: 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d  istObjAppendElem
8d20: 65 6e 74 28 69 6e 74 65 72 70 2c 20 72 65 74 6c  ent(interp, retl
8d30: 69 73 74 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69  ist, Tcl_NewStri
8d40: 6e 67 4f 62 6a 28 22 69 6e 64 65 78 22 2c 20 2d  ngObj("index", -
8d50: 31 29 29 3b 0a 09 09 54 63 6c 5f 4c 69 73 74 4f  1));...Tcl_ListO
8d60: 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28  bjAppendElement(
8d70: 69 6e 74 65 72 70 2c 20 72 65 74 6c 69 73 74 2c  interp, retlist,
8d80: 20 54 63 6c 5f 4e 65 77 57 69 64 65 49 6e 74 4f   Tcl_NewWideIntO
8d90: 62 6a 28 69 66 61 63 65 5f 72 65 71 2e 69 66 72  bj(iface_req.ifr
8da0: 5f 69 66 69 6e 64 65 78 29 29 3b 0a 09 7d 0a 0a  _ifindex));..}..
8db0: 09 69 66 20 28 73 6f 63 6b 5f 76 34 20 21 3d 20  .if (sock_v4 != 
8dc0: 2d 31 29 20 7b 0a 09 09 69 6f 63 74 6c 5f 72 65  -1) {...ioctl_re
8dd0: 74 20 3d 20 69 6f 63 74 6c 28 73 6f 63 6b 5f 76  t = ioctl(sock_v
8de0: 34 2c 20 53 49 4f 43 47 49 46 41 44 44 52 2c 20  4, SIOCGIFADDR, 
8df0: 26 69 66 61 63 65 5f 72 65 71 29 3b 0a 09 09 69  &iface_req);...i
8e00: 66 20 28 69 6f 63 74 6c 5f 72 65 74 20 3d 3d 20  f (ioctl_ret == 
8e10: 30 29 20 7b 0a 09 09 09 74 75 61 70 69 5f 70 72  0) {....tuapi_pr
8e20: 69 76 61 74 65 5f 61 70 70 65 6e 64 5f 73 6f 63  ivate_append_soc
8e30: 6b 61 64 64 72 5f 74 6f 5f 74 63 6c 6f 62 6a 28  kaddr_to_tclobj(
8e40: 69 6e 74 65 72 70 2c 20 72 65 74 6c 69 73 74 2c  interp, retlist,
8e50: 20 22 61 64 64 72 65 73 73 22 2c 20 26 69 66 61   "address", &ifa
8e60: 63 65 5f 72 65 71 2e 69 66 72 5f 61 64 64 72 29  ce_req.ifr_addr)
8e70: 3b 0a 09 09 7d 0a 0a 09 09 69 66 20 28 66 6c 61  ;...}....if (fla
8e80: 67 5f 70 6f 69 6e 74 6f 70 6f 69 6e 74 29 20 7b  g_pointopoint) {
8e90: 0a 09 09 09 2f 2a 20 50 6f 69 6e 74 2d 74 6f 2d  ..../* Point-to-
8ea0: 50 6f 69 6e 74 20 69 6e 74 65 72 66 61 63 65 73  Point interfaces
8eb0: 20 2a 2f 0a 09 09 09 69 6f 63 74 6c 5f 72 65 74   */....ioctl_ret
8ec0: 20 3d 20 69 6f 63 74 6c 28 73 6f 63 6b 5f 76 34   = ioctl(sock_v4
8ed0: 2c 20 53 49 4f 43 47 49 46 44 53 54 41 44 44 52  , SIOCGIFDSTADDR
8ee0: 2c 20 26 69 66 61 63 65 5f 72 65 71 29 3b 0a 09  , &iface_req);..
8ef0: 09 09 69 66 20 28 69 6f 63 74 6c 5f 72 65 74 20  ..if (ioctl_ret 
8f00: 3d 3d 20 30 29 20 7b 0a 09 09 09 09 74 75 61 70  == 0) {.....tuap
8f10: 69 5f 70 72 69 76 61 74 65 5f 61 70 70 65 6e 64  i_private_append
8f20: 5f 73 6f 63 6b 61 64 64 72 5f 74 6f 5f 74 63 6c  _sockaddr_to_tcl
8f30: 6f 62 6a 28 69 6e 74 65 72 70 2c 20 72 65 74 6c  obj(interp, retl
8f40: 69 73 74 2c 20 22 64 65 73 74 69 6e 61 74 69 6f  ist, "destinatio
8f50: 6e 22 2c 20 26 69 66 61 63 65 5f 72 65 71 2e 69  n", &iface_req.i
8f60: 66 72 5f 61 64 64 72 29 3b 0a 09 09 09 7d 0a 09  fr_addr);....}..
8f70: 09 7d 0a 0a 09 09 69 66 20 28 66 6c 61 67 5f 62  .}....if (flag_b
8f80: 72 6f 61 64 63 61 73 74 29 20 7b 0a 09 09 09 2f  roadcast) {..../
8f90: 2a 20 42 72 6f 61 64 63 61 73 74 20 69 6e 74 65  * Broadcast inte
8fa0: 72 66 61 63 65 73 20 2a 2f 0a 09 09 09 69 6f 63  rfaces */....ioc
8fb0: 74 6c 5f 72 65 74 20 3d 20 69 6f 63 74 6c 28 73  tl_ret = ioctl(s
8fc0: 6f 63 6b 5f 76 34 2c 20 53 49 4f 43 47 49 46 42  ock_v4, SIOCGIFB
8fd0: 52 44 41 44 44 52 2c 20 26 69 66 61 63 65 5f 72  RDADDR, &iface_r
8fe0: 65 71 29 3b 0a 09 09 09 69 66 20 28 69 6f 63 74  eq);....if (ioct
8ff0: 6c 5f 72 65 74 20 3d 3d 20 30 29 20 7b 0a 09 09  l_ret == 0) {...
9000: 09 09 74 75 61 70 69 5f 70 72 69 76 61 74 65 5f  ..tuapi_private_
9010: 61 70 70 65 6e 64 5f 73 6f 63 6b 61 64 64 72 5f  append_sockaddr_
9020: 74 6f 5f 74 63 6c 6f 62 6a 28 69 6e 74 65 72 70  to_tclobj(interp
9030: 2c 20 72 65 74 6c 69 73 74 2c 20 22 62 72 6f 61  , retlist, "broa
9040: 64 63 61 73 74 22 2c 20 26 69 66 61 63 65 5f 72  dcast", &iface_r
9050: 65 71 2e 69 66 72 5f 61 64 64 72 29 3b 0a 09 09  eq.ifr_addr);...
9060: 09 7d 0a 09 09 7d 0a 0a 09 09 69 6f 63 74 6c 5f  .}...}....ioctl_
9070: 72 65 74 20 3d 20 69 6f 63 74 6c 28 73 6f 63 6b  ret = ioctl(sock
9080: 5f 76 34 2c 20 53 49 4f 43 47 49 46 4e 45 54 4d  _v4, SIOCGIFNETM
9090: 41 53 4b 2c 20 26 69 66 61 63 65 5f 72 65 71 29  ASK, &iface_req)
90a0: 3b 0a 09 09 69 66 20 28 69 6f 63 74 6c 5f 72 65  ;...if (ioctl_re
90b0: 74 20 3d 3d 20 30 29 20 7b 0a 09 09 09 74 75 61  t == 0) {....tua
90c0: 70 69 5f 70 72 69 76 61 74 65 5f 61 70 70 65 6e  pi_private_appen
90d0: 64 5f 73 6f 63 6b 61 64 64 72 5f 74 6f 5f 74 63  d_sockaddr_to_tc
90e0: 6c 6f 62 6a 28 69 6e 74 65 72 70 2c 20 72 65 74  lobj(interp, ret
90f0: 6c 69 73 74 2c 20 22 6e 65 74 6d 61 73 6b 22 2c  list, "netmask",
9100: 20 26 69 66 61 63 65 5f 72 65 71 2e 69 66 72 5f   &iface_req.ifr_
9110: 61 64 64 72 29 3b 0a 09 09 7d 0a 09 7d 0a 0a 09  addr);...}..}...
9120: 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
9130: 28 69 6e 74 65 72 70 2c 20 72 65 74 6c 69 73 74  (interp, retlist
9140: 29 3b 0a 0a 09 72 65 74 75 72 6e 28 54 43 4c 5f  );...return(TCL_
9150: 4f 4b 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 69  OK);.}..static i
9160: 6e 74 20 74 75 61 70 69 5f 69 66 63 6f 6e 66 69  nt tuapi_ifconfi
9170: 67 5f 63 6f 6e 66 28 43 6c 69 65 6e 74 44 61 74  g_conf(ClientDat
9180: 61 20 63 64 2c 20 54 63 6c 5f 49 6e 74 65 72 70  a cd, Tcl_Interp
9190: 20 2a 69 6e 74 65 72 70 2c 20 69 6e 74 20 6f 62   *interp, int ob
91a0: 6a 63 2c 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  jc, Tcl_Obj *CON
91b0: 53 54 20 6f 62 6a 76 5b 5d 2c 20 69 6e 74 20 73  ST objv[], int s
91c0: 6f 63 6b 2c 20 69 6e 74 20 73 6f 63 6b 5f 76 34  ock, int sock_v4
91d0: 2c 20 69 6e 74 20 73 6f 63 6b 5f 76 36 29 20 7b  , int sock_v6) {
91e0: 0a 09 54 63 6c 5f 4f 62 6a 20 2a 6f 70 74 69 6f  ..Tcl_Obj *optio
91f0: 6e 5f 6e 61 6d 65 5f 6f 62 6a 2c 20 2a 6f 70 74  n_name_obj, *opt
9200: 69 6f 6e 5f 76 61 6c 5f 6f 62 6a 3b 0a 09 54 63  ion_val_obj;..Tc
9210: 6c 5f 4f 62 6a 20 2a 2a 66 6c 61 67 73 5f 6f 62  l_Obj **flags_ob
9220: 6a 76 3b 0a 09 54 63 6c 5f 57 69 64 65 49 6e 74  jv;..Tcl_WideInt
9230: 20 6f 70 74 69 6f 6e 5f 76 61 6c 5f 77 69 64 65   option_val_wide
9240: 3b 0a 09 73 74 72 75 63 74 20 69 66 72 65 71 20  ;..struct ifreq 
9250: 69 66 61 63 65 5f 72 65 71 3b 0a 09 73 74 72 75  iface_req;..stru
9260: 63 74 20 73 6f 63 6b 61 64 64 72 20 2a 74 6d 70  ct sockaddr *tmp
9270: 5f 69 6f 63 74 6c 5f 61 64 64 72 3b 0a 09 63 6f  _ioctl_addr;..co
9280: 6e 73 74 20 63 68 61 72 20 2a 69 66 61 63 65 3b  nst char *iface;
9290: 0a 09 73 68 6f 72 74 20 66 6c 61 67 73 3b 0a 09  ..short flags;..
92a0: 69 6e 74 20 66 6c 61 67 73 5f 6f 62 6a 63 3b 0a  int flags_objc;.
92b0: 09 69 6e 74 20 74 6d 70 5f 73 6f 63 6b 2c 20 74  .int tmp_sock, t
92c0: 6d 70 5f 69 6f 63 74 6c 3b 0a 09 69 6e 74 20 69  mp_ioctl;..int i
92d0: 6f 63 74 6c 5f 72 65 74 2c 20 74 63 6c 5f 72 65  octl_ret, tcl_re
92e0: 74 2c 20 70 61 72 73 65 5f 72 65 74 3b 0a 0a 09  t, parse_ret;...
92f0: 69 66 61 63 65 20 3d 20 54 63 6c 5f 47 65 74 53  iface = Tcl_GetS
9300: 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 3b 0a  tring(objv[1]);.
9310: 0a 09 69 66 20 28 28 73 74 72 6c 65 6e 28 69 66  ..if ((strlen(if
9320: 61 63 65 29 20 2b 20 31 29 20 3e 3d 20 49 46 4e  ace) + 1) >= IFN
9330: 41 4d 53 49 5a 29 20 7b 0a 09 09 54 63 6c 5f 53  AMSIZ) {...Tcl_S
9340: 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
9350: 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e  rp, Tcl_NewStrin
9360: 67 4f 62 6a 28 22 69 6e 74 65 72 66 61 63 65 20  gObj("interface 
9370: 6e 61 6d 65 20 74 6f 6f 20 6c 6f 6e 67 22 2c 20  name too long", 
9380: 2d 31 29 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28  -1));....return(
9390: 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a  TCL_ERROR);..}..
93a0: 09 6f 62 6a 63 20 2d 3d 20 32 3b 0a 09 6f 62 6a  .objc -= 2;..obj
93b0: 76 20 2b 3d 20 32 3b 0a 0a 09 66 6f 72 20 28 3b  v += 2;...for (;
93c0: 20 6f 62 6a 63 20 3e 20 30 3b 20 6f 62 6a 63 2d   objc > 0; objc-
93d0: 2d 2c 6f 62 6a 76 2b 2b 29 20 7b 0a 09 09 2f 2a  -,objv++) {.../*
93e0: 20 50 72 65 70 61 72 65 20 66 6f 72 20 61 6e 20   Prepare for an 
93f0: 69 6f 63 74 6c 28 29 20 2a 2f 0a 09 09 6d 65 6d  ioctl() */...mem
9400: 73 65 74 28 26 69 66 61 63 65 5f 72 65 71 2c 20  set(&iface_req, 
9410: 30 2c 20 73 69 7a 65 6f 66 28 69 66 61 63 65 5f  0, sizeof(iface_
9420: 72 65 71 29 29 3b 0a 09 09 73 74 72 63 70 79 28  req));...strcpy(
9430: 69 66 61 63 65 5f 72 65 71 2e 69 66 72 5f 6e 61  iface_req.ifr_na
9440: 6d 65 2c 20 69 66 61 63 65 29 3b 0a 09 09 74 6d  me, iface);...tm
9450: 70 5f 69 6f 63 74 6c 20 3d 20 2d 31 3b 0a 0a 09  p_ioctl = -1;...
9460: 09 6f 70 74 69 6f 6e 5f 6e 61 6d 65 5f 6f 62 6a  .option_name_obj
9470: 20 3d 20 6f 62 6a 76 5b 30 5d 3b 0a 0a 09 09 69   = objv[0];....i
9480: 66 20 28 6f 62 6a 63 20 3d 3d 20 31 29 20 7b 0a  f (objc == 1) {.
9490: 09 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73  ...Tcl_SetObjRes
94a0: 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ult(interp, Tcl_
94b0: 4f 62 6a 50 72 69 6e 74 66 28 22 6f 70 74 69 6f  ObjPrintf("optio
94c0: 6e 20 5c 22 25 73 5c 22 20 72 65 71 75 69 72 65  n \"%s\" require
94d0: 73 20 61 6e 20 61 72 67 75 6d 65 6e 74 22 2c 20  s an argument", 
94e0: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 70  Tcl_GetString(op
94f0: 74 69 6f 6e 5f 6e 61 6d 65 5f 6f 62 6a 29 29 29  tion_name_obj)))
9500: 3b 0a 0a 09 09 09 72 65 74 75 72 6e 28 54 43 4c  ;.....return(TCL
9510: 5f 45 52 52 4f 52 29 3b 0a 09 09 7d 0a 0a 09 09  _ERROR);...}....
9520: 6f 62 6a 63 2d 2d 3b 0a 09 09 6f 62 6a 76 2b 2b  objc--;...objv++
9530: 3b 0a 0a 09 09 6f 70 74 69 6f 6e 5f 76 61 6c 5f  ;....option_val_
9540: 6f 62 6a 20 3d 20 6f 62 6a 76 5b 30 5d 3b 0a 0a  obj = objv[0];..
9550: 09 09 73 77 69 74 63 68 20 28 74 75 61 70 69 5f  ..switch (tuapi_
9560: 69 6e 74 65 72 6e 61 6c 5f 73 69 6d 70 6c 65 68  internal_simpleh
9570: 61 73 68 5f 6f 62 6a 28 6f 70 74 69 6f 6e 5f 6e  ash_obj(option_n
9580: 61 6d 65 5f 6f 62 6a 29 29 20 7b 0a 09 09 09 63  ame_obj)) {....c
9590: 61 73 65 20 30 78 36 64 39 38 37 30 66 33 3a 20  ase 0x6d9870f3: 
95a0: 2f 2a 20 66 6c 61 67 73 20 2a 2f 0a 09 09 09 09  /* flags */.....
95b0: 66 6c 61 67 73 20 3d 20 30 3b 0a 0a 09 09 09 09  flags = 0;......
95c0: 74 63 6c 5f 72 65 74 20 3d 20 54 63 6c 5f 4c 69  tcl_ret = Tcl_Li
95d0: 73 74 4f 62 6a 47 65 74 45 6c 65 6d 65 6e 74 73  stObjGetElements
95e0: 28 69 6e 74 65 72 70 2c 20 6f 70 74 69 6f 6e 5f  (interp, option_
95f0: 76 61 6c 5f 6f 62 6a 2c 20 26 66 6c 61 67 73 5f  val_obj, &flags_
9600: 6f 62 6a 63 2c 20 26 66 6c 61 67 73 5f 6f 62 6a  objc, &flags_obj
9610: 76 29 3b 0a 09 09 09 09 69 66 20 28 74 63 6c 5f  v);.....if (tcl_
9620: 72 65 74 20 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b  ret != TCL_OK) {
9630: 0a 09 09 09 09 09 72 65 74 75 72 6e 28 74 63 6c  ......return(tcl
9640: 5f 72 65 74 29 3b 0a 09 09 09 09 7d 0a 0a 09 09  _ret);.....}....
9650: 09 09 66 6f 72 20 28 3b 20 66 6c 61 67 73 5f 6f  ..for (; flags_o
9660: 62 6a 63 20 3e 20 30 3b 20 66 6c 61 67 73 5f 6f  bjc > 0; flags_o
9670: 62 6a 63 2d 2d 2c 66 6c 61 67 73 5f 6f 62 6a 76  bjc--,flags_objv
9680: 2b 2b 29 20 7b 0a 09 09 09 09 09 73 77 69 74 63  ++) {......switc
9690: 68 20 28 74 75 61 70 69 5f 69 6e 74 65 72 6e 61  h (tuapi_interna
96a0: 6c 5f 73 69 6d 70 6c 65 68 61 73 68 5f 6f 62 6a  l_simplehash_obj
96b0: 28 66 6c 61 67 73 5f 6f 62 6a 76 5b 30 5d 29 29  (flags_objv[0]))
96c0: 20 7b 0a 09 09 09 09 09 09 63 61 73 65 20 30 78   {.......case 0x
96d0: 32 61 64 30 3a 20 2f 2a 20 55 50 20 2a 2f 0a 09  2ad0: /* UP */..
96e0: 09 09 09 09 09 09 66 6c 61 67 73 20 7c 3d 20 49  ......flags |= I
96f0: 46 46 5f 55 50 3b 0a 09 09 09 09 09 09 09 62 72  FF_UP;........br
9700: 65 61 6b 3b 0a 09 09 09 09 09 09 63 61 73 65 20  eak;.......case 
9710: 30 78 31 61 65 66 37 66 35 34 3a 20 2f 2a 20 42  0x1aef7f54: /* B
9720: 52 4f 41 44 43 41 53 54 20 2a 2f 0a 09 09 09 09  ROADCAST */.....
9730: 09 09 09 66 6c 61 67 73 20 7c 3d 20 49 46 46 5f  ...flags |= IFF_
9740: 42 52 4f 41 44 43 41 53 54 3b 0a 09 09 09 09 09  BROADCAST;......
9750: 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 09 09 63  ..break;.......c
9760: 61 73 65 20 30 78 63 32 35 32 61 62 64 34 3a 20  ase 0xc252abd4: 
9770: 2f 2a 20 50 4f 49 4e 54 4f 50 4f 49 4e 54 20 2a  /* POINTOPOINT *
9780: 2f 0a 09 09 09 09 09 09 09 66 6c 61 67 73 20 7c  /........flags |
9790: 3d 20 49 46 46 5f 50 4f 49 4e 54 4f 50 4f 49 4e  = IFF_POINTOPOIN
97a0: 54 3b 0a 09 09 09 09 09 09 09 62 72 65 61 6b 3b  T;........break;
97b0: 0a 09 09 09 09 09 09 63 61 73 65 20 30 78 34 38  .......case 0x48
97c0: 62 30 61 38 63 37 3a 20 2f 2a 20 44 45 42 55 47  b0a8c7: /* DEBUG
97d0: 20 2a 2f 0a 09 09 09 09 09 09 09 66 6c 61 67 73   */........flags
97e0: 20 7c 3d 20 49 46 46 5f 44 45 42 55 47 3b 0a 09   |= IFF_DEBUG;..
97f0: 09 09 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09  ......break;....
9800: 09 09 09 63 61 73 65 20 30 78 34 64 33 64 62 63  ...case 0x4d3dbc
9810: 64 33 3a 20 2f 2a 20 4e 4f 54 52 41 49 4c 45 52  d3: /* NOTRAILER
9820: 53 20 2a 2f 0a 09 09 09 09 09 09 09 66 6c 61 67  S */........flag
9830: 73 20 7c 3d 20 49 46 46 5f 4e 4f 54 52 41 49 4c  s |= IFF_NOTRAIL
9840: 45 52 53 3b 0a 09 09 09 09 09 09 09 62 72 65 61  ERS;........brea
9850: 6b 3b 0a 09 09 09 09 09 09 63 61 73 65 20 30 78  k;.......case 0x
9860: 65 39 37 37 33 31 34 37 3a 20 2f 2a 20 52 55 4e  e9773147: /* RUN
9870: 4e 49 4e 47 20 2a 2f 0a 09 09 09 09 09 09 09 66  NING */........f
9880: 6c 61 67 73 20 7c 3d 20 49 46 46 5f 52 55 4e 4e  lags |= IFF_RUNN
9890: 49 4e 47 3b 0a 09 09 09 09 09 09 09 62 72 65 61  ING;........brea
98a0: 6b 3b 0a 09 09 09 09 09 09 63 61 73 65 20 30 78  k;.......case 0x
98b0: 65 39 66 30 36 62 35 30 3a 20 2f 2a 20 4e 4f 41  e9f06b50: /* NOA
98c0: 52 50 20 2a 2f 0a 09 09 09 09 09 09 09 66 6c 61  RP */........fla
98d0: 67 73 20 7c 3d 20 49 46 46 5f 4e 4f 41 52 50 3b  gs |= IFF_NOARP;
98e0: 0a 09 09 09 09 09 09 09 62 72 65 61 6b 3b 0a 09  ........break;..
98f0: 09 09 09 09 09 63 61 73 65 20 30 78 66 39 31 33  .....case 0xf913
9900: 32 33 63 33 3a 20 2f 2a 20 50 52 4f 4d 49 53 43  23c3: /* PROMISC
9910: 20 2a 2f 0a 09 09 09 09 09 09 09 66 6c 61 67 73   */........flags
9920: 20 7c 3d 20 49 46 46 5f 50 52 4f 4d 49 53 43 3b   |= IFF_PROMISC;
9930: 0a 09 09 09 09 09 09 09 62 72 65 61 6b 3b 0a 09  ........break;..
9940: 09 09 09 09 09 63 61 73 65 20 30 78 39 62 32 61  .....case 0x9b2a
9950: 31 38 34 39 3a 20 2f 2a 20 41 4c 4c 4d 55 4c 54  1849: /* ALLMULT
9960: 49 20 2a 2f 0a 09 09 09 09 09 09 09 66 6c 61 67  I */........flag
9970: 73 20 7c 3d 20 49 46 46 5f 41 4c 4c 4d 55 4c 54  s |= IFF_ALLMULT
9980: 49 3b 0a 09 09 09 09 09 09 09 62 72 65 61 6b 3b  I;........break;
9990: 0a 09 09 09 09 09 09 63 61 73 65 20 30 78 31 61  .......case 0x1a
99a0: 37 34 31 34 64 32 3a 20 2f 2a 20 4d 41 53 54 45  7414d2: /* MASTE
99b0: 52 20 2a 2f 0a 09 09 09 09 09 09 09 66 6c 61 67  R */........flag
99c0: 73 20 7c 3d 20 49 46 46 5f 4d 41 53 54 45 52 3b  s |= IFF_MASTER;
99d0: 0a 09 09 09 09 09 09 09 62 72 65 61 6b 3b 0a 09  ........break;..
99e0: 09 09 09 09 09 63 61 73 65 20 30 78 33 39 39 30  .....case 0x3990
99f0: 36 39 63 35 3a 20 2f 2a 20 53 4c 41 56 45 20 2a  69c5: /* SLAVE *
9a00: 2f 0a 09 09 09 09 09 09 09 66 6c 61 67 73 20 7c  /........flags |
9a10: 3d 20 49 46 46 5f 53 4c 41 56 45 3b 0a 09 09 09  = IFF_SLAVE;....
9a20: 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 09  ....break;......
9a30: 09 63 61 73 65 20 30 78 34 64 65 39 32 38 64 34  .case 0x4de928d4
9a40: 3a 20 2f 2a 20 4d 55 4c 54 49 43 41 53 54 20 2a  : /* MULTICAST *
9a50: 2f 0a 09 09 09 09 09 09 09 66 6c 61 67 73 20 7c  /........flags |
9a60: 3d 20 49 46 46 5f 4d 55 4c 54 49 43 41 53 54 3b  = IFF_MULTICAST;
9a70: 0a 09 09 09 09 09 09 09 62 72 65 61 6b 3b 0a 09  ........break;..
9a80: 09 09 09 09 09 63 61 73 65 20 30 78 32 61 33 35  .....case 0x2a35
9a90: 64 63 34 63 3a 20 2f 2a 20 50 4f 52 54 53 45 4c  dc4c: /* PORTSEL
9aa0: 20 2a 2f 0a 09 09 09 09 09 09 09 66 6c 61 67 73   */........flags
9ab0: 20 7c 3d 20 49 46 46 5f 50 4f 52 54 53 45 4c 3b   |= IFF_PORTSEL;
9ac0: 0a 09 09 09 09 09 09 09 62 72 65 61 6b 3b 0a 09  ........break;..
9ad0: 09 09 09 09 09 63 61 73 65 20 30 78 64 31 38 30  .....case 0xd180
9ae0: 61 63 31 3a 20 2f 2a 20 41 55 54 4f 4d 45 44 49  ac1: /* AUTOMEDI
9af0: 41 20 2a 2f 0a 09 09 09 09 09 09 09 66 6c 61 67  A */........flag
9b00: 73 20 7c 3d 20 49 46 46 5f 41 55 54 4f 4d 45 44  s |= IFF_AUTOMED
9b10: 49 41 3b 0a 09 09 09 09 09 09 09 62 72 65 61 6b  IA;........break
9b20: 3b 0a 09 09 09 09 09 09 63 61 73 65 20 30 78 65  ;.......case 0xe
9b30: 38 62 61 30 32 63 33 3a 20 2f 2a 20 44 59 4e 41  8ba02c3: /* DYNA
9b40: 4d 49 43 20 2a 2f 0a 09 09 09 09 09 09 09 66 6c  MIC */........fl
9b50: 61 67 73 20 7c 3d 20 49 46 46 5f 44 59 4e 41 4d  ags |= IFF_DYNAM
9b60: 49 43 3b 0a 09 09 09 09 09 09 09 62 72 65 61 6b  IC;........break
9b70: 3b 0a 09 09 09 09 09 09 63 61 73 65 20 30 78 31  ;.......case 0x1
9b80: 36 63 38 62 34 64 30 3a 20 2f 2a 20 4c 4f 57 45  6c8b4d0: /* LOWE
9b90: 52 5f 55 50 20 2a 2f 0a 09 09 09 09 09 09 09 66  R_UP */........f
9ba0: 6c 61 67 73 20 7c 3d 20 49 46 46 5f 4c 4f 57 45  lags |= IFF_LOWE
9bb0: 52 5f 55 50 3b 0a 09 09 09 09 09 09 09 62 72 65  R_UP;........bre
9bc0: 61 6b 3b 0a 09 09 09 09 09 09 63 61 73 65 20 30  ak;.......case 0
9bd0: 78 32 39 33 39 35 39 64 34 3a 20 2f 2a 20 44 4f  x293959d4: /* DO
9be0: 52 4d 41 4e 54 20 2a 2f 0a 09 09 09 09 09 09 09  RMANT */........
9bf0: 66 6c 61 67 73 20 7c 3d 20 49 46 46 5f 44 4f 52  flags |= IFF_DOR
9c00: 4d 41 4e 54 3b 0a 09 09 09 09 09 09 09 62 72 65  MANT;........bre
9c10: 61 6b 3b 0a 23 69 66 64 65 66 20 49 46 46 5f 45  ak;.#ifdef IFF_E
9c20: 43 48 4f 0a 09 09 09 09 09 09 63 61 73 65 20 30  CHO.......case 0
9c30: 78 38 62 30 65 34 34 66 3a 20 2f 2a 20 45 43 48  x8b0e44f: /* ECH
9c40: 4f 20 2a 2f 0a 09 09 09 09 09 09 09 66 6c 61 67  O */........flag
9c50: 73 20 7c 3d 20 49 46 46 5f 45 43 48 4f 3b 0a 09  s |= IFF_ECHO;..
9c60: 09 09 09 09 09 09 62 72 65 61 6b 3b 0a 23 65 6e  ......break;.#en
9c70: 64 69 66 0a 09 09 09 09 09 7d 0a 09 09 09 09 7d  dif......}.....}
9c80: 0a 0a 09 09 09 09 69 66 61 63 65 5f 72 65 71 2e  ......iface_req.
9c90: 69 66 72 5f 66 6c 61 67 73 20 3d 20 66 6c 61 67  ifr_flags = flag
9ca0: 73 3b 0a 0a 09 09 09 09 69 6f 63 74 6c 5f 72 65  s;......ioctl_re
9cb0: 74 20 3d 20 69 6f 63 74 6c 28 73 6f 63 6b 2c 20  t = ioctl(sock, 
9cc0: 53 49 4f 43 53 49 46 46 4c 41 47 53 2c 20 26 69  SIOCSIFFLAGS, &i
9cd0: 66 61 63 65 5f 72 65 71 29 3b 0a 09 09 09 09 69  face_req);.....i
9ce0: 66 20 28 69 6f 63 74 6c 5f 72 65 74 20 21 3d 20  f (ioctl_ret != 
9cf0: 30 29 20 7b 0a 09 09 09 09 09 54 63 6c 5f 53 65  0) {......Tcl_Se
9d00: 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72  tObjResult(inter
9d10: 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67  p, Tcl_NewString
9d20: 4f 62 6a 28 73 74 72 65 72 72 6f 72 28 65 72 72  Obj(strerror(err
9d30: 6e 6f 29 2c 20 2d 31 29 29 3b 0a 0a 09 09 09 09  no), -1));......
9d40: 09 72 65 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f  .return(TCL_ERRO
9d50: 52 29 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09 62  R);.....}......b
9d60: 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 30 78  reak;....case 0x
9d70: 35 65 39 64 30 33 65 33 3a 20 2f 2a 20 6d 65 74  5e9d03e3: /* met
9d80: 72 69 63 20 2a 2f 0a 09 09 09 63 61 73 65 20 30  ric */....case 0
9d90: 78 37 63 33 38 39 31 66 32 3a 20 2f 2a 20 68 77  x7c3891f2: /* hw
9da0: 61 64 64 72 20 2a 2f 0a 09 09 09 63 61 73 65 20  addr */....case 
9db0: 30 78 62 66 37 32 61 39 36 39 3a 20 2f 2a 20 61  0xbf72a969: /* a
9dc0: 64 64 6d 75 6c 74 69 20 2a 2f 0a 09 09 09 63 61  ddmulti */....ca
9dd0: 73 65 20 30 78 62 61 37 30 38 39 36 39 3a 20 2f  se 0xba708969: /
9de0: 2a 20 64 65 6c 6d 75 6c 74 69 20 2a 2f 0a 09 09  * delmulti */...
9df0: 09 63 61 73 65 20 30 78 64 64 38 37 36 65 35 3a  .case 0xdd876e5:
9e00: 20 2f 2a 20 6e 61 6d 65 20 2a 2f 0a 09 09 09 09   /* name */.....
9e10: 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c  .Tcl_SetObjResul
9e20: 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4f 62  t(interp, Tcl_Ob
9e30: 6a 50 72 69 6e 74 66 28 22 6f 70 74 69 6f 6e 20  jPrintf("option 
9e40: 5c 22 25 73 5c 22 20 75 6e 73 75 70 70 6f 72 74  \"%s\" unsupport
9e50: 65 64 22 2c 20 54 63 6c 5f 47 65 74 53 74 72 69  ed", Tcl_GetStri
9e60: 6e 67 28 6f 70 74 69 6f 6e 5f 6e 61 6d 65 5f 6f  ng(option_name_o
9e70: 62 6a 29 29 29 3b 0a 0a 09 09 09 09 09 72 65 74  bj)));.......ret
9e80: 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a  urn(TCL_ERROR);.
9e90: 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61  ....break;....ca
9ea0: 73 65 20 30 78 31 62 37 61 37 35 3a 20 2f 2a 20  se 0x1b7a75: /* 
9eb0: 6d 74 75 20 2a 2f 0a 09 09 09 09 74 63 6c 5f 72  mtu */.....tcl_r
9ec0: 65 74 20 3d 20 54 63 6c 5f 47 65 74 57 69 64 65  et = Tcl_GetWide
9ed0: 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72  IntFromObj(inter
9ee0: 70 2c 20 6f 70 74 69 6f 6e 5f 76 61 6c 5f 6f 62  p, option_val_ob
9ef0: 6a 2c 20 26 6f 70 74 69 6f 6e 5f 76 61 6c 5f 77  j, &option_val_w
9f00: 69 64 65 29 3b 0a 09 09 09 09 69 66 20 28 74 63  ide);.....if (tc
9f10: 6c 5f 72 65 74 20 21 3d 20 54 43 4c 5f 4f 4b 29  l_ret != TCL_OK)
9f20: 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e 28 74   {......return(t
9f30: 63 6c 5f 72 65 74 29 3b 0a 09 09 09 09 7d 0a 0a  cl_ret);.....}..
9f40: 09 09 09 09 69 66 61 63 65 5f 72 65 71 2e 69 66  ....iface_req.if
9f50: 72 5f 6d 74 75 20 3d 20 6f 70 74 69 6f 6e 5f 76  r_mtu = option_v
9f60: 61 6c 5f 77 69 64 65 3b 0a 0a 09 09 09 09 69 6f  al_wide;......io
9f70: 63 74 6c 5f 72 65 74 20 3d 20 69 6f 63 74 6c 28  ctl_ret = ioctl(
9f80: 73 6f 63 6b 2c 20 53 49 4f 43 53 49 46 4d 54 55  sock, SIOCSIFMTU
9f90: 2c 20 26 69 66 61 63 65 5f 72 65 71 29 3b 0a 09  , &iface_req);..
9fa0: 09 09 09 69 66 20 28 69 6f 63 74 6c 5f 72 65 74  ...if (ioctl_ret
9fb0: 20 21 3d 20 30 29 20 7b 0a 09 09 09 09 09 54 63   != 0) {......Tc
9fc0: 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69  l_SetObjResult(i
9fd0: 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74  nterp, Tcl_NewSt
9fe0: 72 69 6e 67 4f 62 6a 28 73 74 72 65 72 72 6f 72  ringObj(strerror
9ff0: 28 65 72 72 6e 6f 29 2c 20 2d 31 29 29 3b 0a 0a  (errno), -1));..
a000: 09 09 09 09 09 72 65 74 75 72 6e 28 54 43 4c 5f  .....return(TCL_
a010: 45 52 52 4f 52 29 3b 0a 09 09 09 09 7d 0a 0a 09  ERROR);.....}...
a020: 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73  ...break;....cas
a030: 65 20 30 78 34 65 39 61 65 61 66 33 3a 20 2f 2a  e 0x4e9aeaf3: /*
a040: 20 61 64 64 72 65 73 73 20 2a 2f 0a 09 09 09 09   address */.....
a050: 69 66 20 28 74 6d 70 5f 69 6f 63 74 6c 20 3d 3d  if (tmp_ioctl ==
a060: 20 2d 31 29 20 7b 0a 09 09 09 09 09 74 6d 70 5f   -1) {......tmp_
a070: 69 6f 63 74 6c 20 3d 20 53 49 4f 43 53 49 46 41  ioctl = SIOCSIFA
a080: 44 44 52 3b 0a 09 09 09 09 09 74 6d 70 5f 69 6f  DDR;......tmp_io
a090: 63 74 6c 5f 61 64 64 72 20 3d 20 26 69 66 61 63  ctl_addr = &ifac
a0a0: 65 5f 72 65 71 2e 69 66 72 5f 61 64 64 72 3b 0a  e_req.ifr_addr;.
a0b0: 09 09 09 09 7d 0a 0a 09 09 09 63 61 73 65 20 30  ....}.....case 0
a0c0: 78 65 63 30 35 37 30 36 65 3a 20 2f 2a 20 64 65  xec05706e: /* de
a0d0: 73 74 69 6e 61 74 69 6f 6e 20 2a 2f 0a 09 09 09  stination */....
a0e0: 09 69 66 20 28 74 6d 70 5f 69 6f 63 74 6c 20 3d  .if (tmp_ioctl =
a0f0: 3d 20 2d 31 29 20 7b 0a 09 09 09 09 09 74 6d 70  = -1) {......tmp
a100: 5f 69 6f 63 74 6c 20 3d 20 53 49 4f 43 53 49 46  _ioctl = SIOCSIF
a110: 44 53 54 41 44 44 52 3b 0a 09 09 09 09 09 74 6d  DSTADDR;......tm
a120: 70 5f 69 6f 63 74 6c 5f 61 64 64 72 20 3d 20 26  p_ioctl_addr = &
a130: 69 66 61 63 65 5f 72 65 71 2e 69 66 72 5f 64 73  iface_req.ifr_ds
a140: 74 61 64 64 72 3b 0a 09 09 09 09 7d 0a 0a 09 09  taddr;.....}....
a150: 09 63 61 73 65 20 30 78 33 65 61 37 65 36 37 34  .case 0x3ea7e674
a160: 3a 20 2f 2a 20 62 72 6f 61 64 63 61 73 74 20 2a  : /* broadcast *
a170: 2f 0a 09 09 09 09 69 66 20 28 74 6d 70 5f 69 6f  /.....if (tmp_io
a180: 63 74 6c 20 3d 3d 20 2d 31 29 20 7b 0a 09 09 09  ctl == -1) {....
a190: 09 09 74 6d 70 5f 69 6f 63 74 6c 20 3d 20 53 49  ..tmp_ioctl = SI
a1a0: 4f 43 53 49 46 42 52 44 41 44 44 52 3b 0a 09 09  OCSIFBRDADDR;...
a1b0: 09 09 09 74 6d 70 5f 69 6f 63 74 6c 5f 61 64 64  ...tmp_ioctl_add
a1c0: 72 20 3d 20 26 69 66 61 63 65 5f 72 65 71 2e 69  r = &iface_req.i
a1d0: 66 72 5f 62 72 6f 61 64 61 64 64 72 3b 0a 09 09  fr_broadaddr;...
a1e0: 09 09 7d 0a 0a 09 09 09 63 61 73 65 20 30 78 34  ..}.....case 0x4
a1f0: 64 36 35 65 65 36 62 3a 20 2f 2a 20 6e 65 74 6d  d65ee6b: /* netm
a200: 61 73 6b 20 2a 2f 0a 09 09 09 09 69 66 20 28 74  ask */.....if (t
a210: 6d 70 5f 69 6f 63 74 6c 20 3d 3d 20 2d 31 29 20  mp_ioctl == -1) 
a220: 7b 0a 09 09 09 09 09 74 6d 70 5f 69 6f 63 74 6c  {......tmp_ioctl
a230: 20 3d 20 53 49 4f 43 53 49 46 4e 45 54 4d 41 53   = SIOCSIFNETMAS
a240: 4b 3b 0a 09 09 09 09 09 74 6d 70 5f 69 6f 63 74  K;......tmp_ioct
a250: 6c 5f 61 64 64 72 20 3d 20 26 69 66 61 63 65 5f  l_addr = &iface_
a260: 72 65 71 2e 69 66 72 5f 6e 65 74 6d 61 73 6b 3b  req.ifr_netmask;
a270: 0a 09 09 09 09 7d 0a 0a 09 09 09 09 70 61 72 73  .....}......pars
a280: 65 5f 72 65 74 20 3d 20 74 75 61 70 69 5f 70 72  e_ret = tuapi_pr
a290: 69 76 61 74 65 5f 67 65 74 5f 73 6f 63 6b 61 64  ivate_get_sockad
a2a0: 64 72 5f 66 72 6f 6d 5f 6f 62 6a 28 6f 70 74 69  dr_from_obj(opti
a2b0: 6f 6e 5f 76 61 6c 5f 6f 62 6a 2c 20 74 6d 70 5f  on_val_obj, tmp_
a2c0: 69 6f 63 74 6c 5f 61 64 64 72 29 3b 0a 09 09 09  ioctl_addr);....
a2d0: 09 69 66 20 28 70 61 72 73 65 5f 72 65 74 20 21  .if (parse_ret !
a2e0: 3d 20 30 29 20 7b 0a 09 09 09 09 09 54 63 6c 5f  = 0) {......Tcl_
a2f0: 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74  SetObjResult(int
a300: 65 72 70 2c 20 54 63 6c 5f 4f 62 6a 50 72 69 6e  erp, Tcl_ObjPrin
a310: 74 66 28 22 75 6e 61 62 6c 65 20 74 6f 20 70 61  tf("unable to pa
a320: 72 73 65 20 5c 22 25 73 5c 22 20 61 73 20 61 6e  rse \"%s\" as an
a330: 20 61 64 64 72 65 73 73 22 2c 20 54 63 6c 5f 47   address", Tcl_G
a340: 65 74 53 74 72 69 6e 67 28 6f 70 74 69 6f 6e 5f  etString(option_
a350: 76 61 6c 5f 6f 62 6a 29 29 29 3b 0a 0a 09 09 09  val_obj)));.....
a360: 09 09 72 65 74 75 72 6e 28 54 43 4c 5f 45 52 52  ..return(TCL_ERR
a370: 4f 52 29 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09  OR);.....}......
a380: 73 77 69 74 63 68 20 28 74 6d 70 5f 69 6f 63 74  switch (tmp_ioct
a390: 6c 5f 61 64 64 72 2d 3e 73 61 5f 66 61 6d 69 6c  l_addr->sa_famil
a3a0: 79 29 20 7b 0a 09 09 09 09 09 63 61 73 65 20 41  y) {......case A
a3b0: 46 5f 49 4e 45 54 3a 0a 09 09 09 09 09 09 74 6d  F_INET:.......tm
a3c0: 70 5f 73 6f 63 6b 20 3d 20 73 6f 63 6b 5f 76 34  p_sock = sock_v4
a3d0: 3b 0a 0a 09 09 09 09 09 09 62 72 65 61 6b 3b 0a  ;........break;.
a3e0: 09 09 09 09 09 63 61 73 65 20 41 46 5f 49 4e 45  .....case AF_INE
a3f0: 54 36 3a 0a 09 09 09 09 09 09 74 6d 70 5f 73 6f  T6:.......tmp_so
a400: 63 6b 20 3d 20 73 6f 63 6b 5f 76 36 3b 0a 0a 09  ck = sock_v6;...
a410: 09 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 09  .....break;.....
a420: 09 64 65 66 61 75 6c 74 3a 0a 09 09 09 09 09 09  .default:.......
a430: 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
a440: 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77  (interp, Tcl_New
a450: 53 74 72 69 6e 67 4f 62 6a 28 22 75 6e 61 62 6c  StringObj("unabl
a460: 65 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 61  e to determine a
a470: 64 64 72 65 73 73 20 66 61 6d 69 6c 79 20 6f 66  ddress family of
a480: 20 73 6f 63 6b 61 64 64 72 22 2c 20 2d 31 29 29   sockaddr", -1))
a490: 3b 0a 09 09 09 09 09 09 72 65 74 75 72 6e 28 54  ;.......return(T
a4a0: 43 4c 5f 45 52 52 4f 52 29 3b 0a 09 09 09 09 7d  CL_ERROR);.....}
a4b0: 0a 0a 09 09 09 09 69 6f 63 74 6c 5f 72 65 74 20  ......ioctl_ret 
a4c0: 3d 20 69 6f 63 74 6c 28 74 6d 70 5f 73 6f 63 6b  = ioctl(tmp_sock
a4d0: 2c 20 74 6d 70 5f 69 6f 63 74 6c 2c 20 26 69 66  , tmp_ioctl, &if
a4e0: 61 63 65 5f 72 65 71 29 3b 0a 09 09 09 09 69 66  ace_req);.....if
a4f0: 20 28 69 6f 63 74 6c 5f 72 65 74 20 21 3d 20 30   (ioctl_ret != 0
a500: 29 20 7b 0a 09 09 09 09 09 54 63 6c 5f 53 65 74  ) {......Tcl_Set
a510: 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70  ObjResult(interp
a520: 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f  , Tcl_NewStringO
a530: 62 6a 28 73 74 72 65 72 72 6f 72 28 65 72 72 6e  bj(strerror(errn
a540: 6f 29 2c 20 2d 31 29 29 3b 0a 0a 09 09 09 09 09  o), -1));.......
a550: 72 65 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52  return(TCL_ERROR
a560: 29 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09 62 72  );.....}......br
a570: 65 61 6b 3b 0a 09 09 09 64 65 66 61 75 6c 74 3a  eak;....default:
a580: 0a 09 09 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52  .....Tcl_SetObjR
a590: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63  esult(interp, Tc
a5a0: 6c 5f 4f 62 6a 50 72 69 6e 74 66 28 22 75 6e 6b  l_ObjPrintf("unk
a5b0: 6e 6f 77 6e 20 6f 70 74 69 6f 6e 20 5c 22 25 73  nown option \"%s
a5c0: 5c 22 22 2c 20 54 63 6c 5f 47 65 74 53 74 72 69  \"", Tcl_GetStri
a5d0: 6e 67 28 6f 70 74 69 6f 6e 5f 6e 61 6d 65 5f 6f  ng(option_name_o
a5e0: 62 6a 29 29 29 3b 0a 0a 09 09 09 09 72 65 74 75  bj)));......retu
a5f0: 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 09  rn(TCL_ERROR);..
a600: 09 7d 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 28 54  .}..}...return(T
a610: 43 4c 5f 4f 4b 29 3b 0a 7d 0a 0a 73 74 61 74 69  CL_OK);.}..stati
a620: 63 20 69 6e 74 20 74 75 61 70 69 5f 69 66 63 6f  c int tuapi_ifco
a630: 6e 66 69 67 28 43 6c 69 65 6e 74 44 61 74 61 20  nfig(ClientData 
a640: 63 64 2c 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  cd, Tcl_Interp *
a650: 69 6e 74 65 72 70 2c 20 69 6e 74 20 6f 62 6a 63  interp, int objc
a660: 2c 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54  , Tcl_Obj *CONST
a670: 20 6f 62 6a 76 5b 5d 29 20 7b 0a 09 69 6e 74 20   objv[]) {..int 
a680: 73 6f 63 6b 5f 76 34 2c 20 73 6f 63 6b 5f 76 36  sock_v4, sock_v6
a690: 2c 20 73 6f 63 6b 3b 0a 09 69 6e 74 20 72 65 74  , sock;..int ret
a6a0: 76 61 6c 20 3d 20 54 43 4c 5f 45 52 52 4f 52 3b  val = TCL_ERROR;
a6b0: 0a 0a 09 73 6f 63 6b 20 3d 20 74 75 61 70 69 5f  ...sock = tuapi_
a6c0: 69 6e 74 65 72 6e 61 6c 5f 67 65 74 73 6f 63 6b  internal_getsock
a6d0: 28 26 73 6f 63 6b 5f 76 34 2c 20 26 73 6f 63 6b  (&sock_v4, &sock
a6e0: 5f 76 36 29 3b 0a 09 69 66 20 28 73 6f 63 6b 20  _v6);..if (sock 
a6f0: 3d 3d 20 2d 31 29 20 7b 0a 09 09 54 63 6c 5f 53  == -1) {...Tcl_S
a700: 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
a710: 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e  rp, Tcl_NewStrin
a720: 67 4f 62 6a 28 22 75 6e 61 62 6c 65 20 74 6f 20  gObj("unable to 
a730: 63 72 65 61 74 65 20 73 6f 63 6b 65 74 22 2c 20  create socket", 
a740: 2d 31 29 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28  -1));....return(
a750: 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a  TCL_ERROR);..}..
a760: 09 73 77 69 74 63 68 20 28 6f 62 6a 63 29 20 7b  .switch (objc) {
a770: 0a 09 09 63 61 73 65 20 30 3a 0a 09 09 63 61 73  ...case 0:...cas
a780: 65 20 31 3a 20 2f 2a 20 4e 6f 20 61 72 67 75 6d  e 1: /* No argum
a790: 65 6e 74 73 2c 20 6c 69 73 74 20 61 6c 6c 20 69  ents, list all i
a7a0: 6e 74 65 72 66 61 63 65 73 20 2a 2f 0a 09 09 09  nterfaces */....
a7b0: 72 65 74 76 61 6c 20 3d 20 74 75 61 70 69 5f 69  retval = tuapi_i
a7c0: 66 63 6f 6e 66 69 67 5f 6c 69 73 74 28 63 64 2c  fconfig_list(cd,
a7d0: 20 69 6e 74 65 72 70 2c 20 6f 62 6a 63 2c 20 6f   interp, objc, o
a7e0: 62 6a 76 2c 20 73 6f 63 6b 29 3b 0a 0a 09 09 09  bjv, sock);.....
a7f0: 62 72 65 61 6b 3b 0a 09 09 63 61 73 65 20 32 3a  break;...case 2:
a800: 20 2f 2a 20 4f 6e 65 20 61 72 67 75 6d 65 6e 74   /* One argument
a810: 2c 20 67 69 76 65 20 69 6e 66 6f 72 6d 61 74 69  , give informati
a820: 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 69 6e 74  on about the int
a830: 65 72 66 61 63 65 20 2a 2f 0a 09 09 09 72 65 74  erface */....ret
a840: 76 61 6c 20 3d 20 74 75 61 70 69 5f 69 66 63 6f  val = tuapi_ifco
a850: 6e 66 69 67 5f 69 6e 66 6f 28 63 64 2c 20 69 6e  nfig_info(cd, in
a860: 74 65 72 70 2c 20 6f 62 6a 63 2c 20 6f 62 6a 76  terp, objc, objv
a870: 2c 20 73 6f 63 6b 2c 20 73 6f 63 6b 5f 76 34 2c  , sock, sock_v4,
a880: 20 73 6f 63 6b 5f 76 36 29 3b 0a 0a 09 09 09 62   sock_v6);.....b
a890: 72 65 61 6b 3b 0a 09 09 64 65 66 61 75 6c 74 3a  reak;...default:
a8a0: 0a 09 09 09 2f 2a 20 4f 74 68 65 72 77 69 73 65  ..../* Otherwise
a8b0: 2c 20 63 6f 6e 66 69 67 75 72 65 20 74 68 65 20  , configure the 
a8c0: 69 6e 74 65 72 61 63 65 20 2a 2f 0a 09 09 09 72  interace */....r
a8d0: 65 74 76 61 6c 20 3d 20 74 75 61 70 69 5f 69 66  etval = tuapi_if
a8e0: 63 6f 6e 66 69 67 5f 63 6f 6e 66 28 63 64 2c 20  config_conf(cd, 
a8f0: 69 6e 74 65 72 70 2c 20 6f 62 6a 63 2c 20 6f 62  interp, objc, ob
a900: 6a 76 2c 20 73 6f 63 6b 2c 20 73 6f 63 6b 5f 76  jv, sock, sock_v
a910: 34 2c 20 73 6f 63 6b 5f 76 36 29 3b 0a 0a 09 09  4, sock_v6);....
a920: 09 62 72 65 61 6b 3b 0a 09 7d 0a 0a 09 2f 2a 20  .break;..}.../* 
a930: 43 6c 65 61 6e 75 70 20 2a 2f 0a 09 69 66 20 28  Cleanup */..if (
a940: 73 6f 63 6b 5f 76 34 20 21 3d 20 2d 31 29 20 7b  sock_v4 != -1) {
a950: 0a 09 09 63 6c 6f 73 65 28 73 6f 63 6b 5f 76 34  ...close(sock_v4
a960: 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 73 6f 63 6b  );..}...if (sock
a970: 5f 76 36 20 21 3d 20 2d 31 29 20 7b 0a 09 09 63  _v6 != -1) {...c
a980: 6c 6f 73 65 28 73 6f 63 6b 5f 76 36 29 3b 0a 09  lose(sock_v6);..
a990: 7d 0a 0a 09 72 65 74 75 72 6e 28 72 65 74 76 61  }...return(retva
a9a0: 6c 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 69 6e  l);.}..static in
a9b0: 74 20 74 75 61 70 69 5f 72 6f 75 74 65 5f 6c 69  t tuapi_route_li
a9c0: 73 74 28 43 6c 69 65 6e 74 44 61 74 61 20 63 64  st(ClientData cd
a9d0: 2c 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e  , Tcl_Interp *in
a9e0: 74 65 72 70 2c 20 69 6e 74 20 6f 62 6a 63 2c 20  terp, int objc, 
a9f0: 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
aa00: 62 6a 76 5b 5d 2c 20 69 6e 74 20 73 6f 63 6b 5f  bjv[], int sock_
aa10: 76 34 2c 20 69 6e 74 20 73 6f 63 6b 5f 76 36 29  v4, int sock_v6)
aa20: 20 7b 0a 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65   {..Tcl_SetObjRe
aa30: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c  sult(interp, Tcl
aa40: 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 6e  _NewStringObj("n
aa50: 6f 74 20 69 6d 70 6c 65 6d 65 6e 74 65 64 22 2c  ot implemented",
aa60: 20 2d 31 29 29 3b 0a 0a 09 72 65 74 75 72 6e 28   -1));...return(
aa70: 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 7d 0a 0a 73  TCL_ERROR);.}..s
aa80: 74 61 74 69 63 20 69 6e 74 20 74 75 61 70 69 5f  tatic int tuapi_
aa90: 72 6f 75 74 65 5f 63 6f 6e 66 28 43 6c 69 65 6e  route_conf(Clien
aaa0: 74 44 61 74 61 20 63 64 2c 20 54 63 6c 5f 49 6e  tData cd, Tcl_In
aab0: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 69 6e  terp *interp, in
aac0: 74 20 6f 62 6a 63 2c 20 54 63 6c 5f 4f 62 6a 20  t objc, Tcl_Obj 
aad0: 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 2c 20 69  *CONST objv[], i
aae0: 6e 74 20 73 6f 63 6b 5f 76 34 2c 20 69 6e 74 20  nt sock_v4, int 
aaf0: 73 6f 63 6b 5f 76 36 29 20 7b 0a 09 54 63 6c 5f  sock_v6) {..Tcl_
ab00: 57 69 64 65 49 6e 74 20 6f 70 74 69 6f 6e 5f 76  WideInt option_v
ab10: 61 6c 5f 77 69 64 65 3b 20 0a 09 54 63 6c 5f 4f  al_wide; ..Tcl_O
ab20: 62 6a 20 2a 6f 70 65 72 61 74 69 6f 6e 5f 6f 62  bj *operation_ob
ab30: 6a 2c 20 2a 64 65 73 74 5f 6f 62 6a 2c 20 2a 64  j, *dest_obj, *d
ab40: 65 73 74 6d 61 73 6b 5f 6f 62 6a 3b 0a 09 54 63  estmask_obj;..Tc
ab50: 6c 5f 4f 62 6a 20 2a 6f 70 74 69 6f 6e 5f 6e 61  l_Obj *option_na
ab60: 6d 65 5f 6f 62 6a 2c 20 2a 6f 70 74 69 6f 6e 5f  me_obj, *option_
ab70: 76 61 6c 5f 6f 62 6a 3b 0a 09 73 74 72 75 63 74  val_obj;..struct
ab80: 20 72 74 65 6e 74 72 79 20 72 6f 75 74 65 3b 0a   rtentry route;.
ab90: 09 69 6e 74 20 73 6f 63 6b 3b 0a 09 69 6e 74 20  .int sock;..int 
aba0: 69 6f 63 74 6c 5f 69 64 3b 0a 09 69 6e 74 20 74  ioctl_id;..int t
abb0: 63 6c 5f 72 65 74 2c 20 69 6f 63 74 6c 5f 72 65  cl_ret, ioctl_re
abc0: 74 2c 20 70 61 72 73 65 5f 72 65 74 3b 0a 0a 09  t, parse_ret;...
abd0: 69 66 20 28 6f 62 6a 63 20 3c 20 34 29 20 7b 0a  if (objc < 4) {.
abe0: 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75  ..Tcl_SetObjResu
abf0: 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e  lt(interp, Tcl_N
ac00: 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 77 72 6f  ewStringObj("wro
ac10: 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
ac20: 64 20 62 65 20 5c 22 3a 3a 74 75 61 70 69 3a 3a  d be \"::tuapi::
ac30: 73 79 73 63 61 6c 6c 3a 3a 72 6f 75 74 65 20 6f  syscall::route o
ac40: 70 65 72 61 74 69 6f 6e 20 64 65 73 74 69 6e 61  peration destina
ac50: 74 69 6f 6e 20 64 65 73 74 69 6e 61 74 69 6f 6e  tion destination
ac60: 5f 6d 61 73 6b 20 3f 6f 70 74 69 6f 6e 73 3f 5c  _mask ?options?\
ac70: 22 22 2c 20 2d 31 29 29 3b 0a 0a 09 09 72 65 74  "", -1));....ret
ac80: 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a  urn(TCL_ERROR);.
ac90: 09 7d 0a 0a 09 2f 2a 20 43 6c 65 61 72 20 6f 62  .}.../* Clear ob
aca0: 6a 65 63 74 20 76 61 6c 75 65 73 20 2a 2f 0a 09  ject values */..
acb0: 6d 65 6d 73 65 74 28 26 72 6f 75 74 65 2c 20 30  memset(&route, 0
acc0: 2c 20 73 69 7a 65 6f 66 28 72 6f 75 74 65 29 29  , sizeof(route))
acd0: 3b 0a 0a 09 2f 2a 20 44 65 74 65 72 6d 69 6e 65  ;.../* Determine
ace0: 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f 0a 09 6f   operation */..o
acf0: 70 65 72 61 74 69 6f 6e 5f 6f 62 6a 20 3d 20 6f  peration_obj = o
ad00: 62 6a 76 5b 31 5d 3b 0a 09 73 77 69 74 63 68 20  bjv[1];..switch 
ad10: 28 74 75 61 70 69 5f 69 6e 74 65 72 6e 61 6c 5f  (tuapi_internal_
ad20: 73 69 6d 70 6c 65 68 61 73 68 5f 6f 62 6a 28 6f  simplehash_obj(o
ad30: 70 65 72 61 74 69 6f 6e 5f 6f 62 6a 29 29 20 7b  peration_obj)) {
ad40: 0a 09 09 63 61 73 65 20 30 78 31 38 37 32 36 34  ...case 0x187264
ad50: 3a 20 2f 2a 20 61 64 64 20 2a 2f 0a 09 09 09 69  : /* add */....i
ad60: 6f 63 74 6c 5f 69 64 20 3d 20 53 49 4f 43 41 44  octl_id = SIOCAD
ad70: 44 52 54 3b 0a 09 09 09 62 72 65 61 6b 3b 0a 09  DRT;....break;..
ad80: 09 63 61 73 65 20 30 78 31 39 33 32 65 63 3a 20  .case 0x1932ec: 
ad90: 2f 2a 20 64 65 6c 20 2a 2f 0a 09 09 63 61 73 65  /* del */...case
ada0: 20 30 78 35 64 39 38 65 39 36 35 3a 20 2f 2a 20   0x5d98e965: /* 
adb0: 64 65 6c 65 74 65 20 2a 2f 0a 09 09 09 69 6f 63  delete */....ioc
adc0: 74 6c 5f 69 64 20 3d 20 53 49 4f 43 44 45 4c 52  tl_id = SIOCDELR
add0: 54 3b 0a 09 09 09 62 72 65 61 6b 3b 0a 09 09 64  T;....break;...d
ade0: 65 66 61 75 6c 74 3a 0a 09 09 09 54 63 6c 5f 53  efault:....Tcl_S
adf0: 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
ae00: 72 70 2c 20 54 63 6c 5f 4f 62 6a 50 72 69 6e 74  rp, Tcl_ObjPrint
ae10: 66 28 22 62 61 64 20 6f 70 74 69 6f 6e 20 5c 22  f("bad option \"
ae20: 25 73 5c 22 3a 20 6d 75 73 74 20 62 65 20 61 64  %s\": must be ad
ae30: 64 2c 20 6f 72 20 64 65 6c 65 74 65 22 2c 20 54  d, or delete", T
ae40: 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 70 65  cl_GetString(ope
ae50: 72 61 74 69 6f 6e 5f 6f 62 6a 29 29 29 3b 0a 0a  ration_obj)));..
ae60: 09 09 09 72 65 74 75 72 6e 28 54 43 4c 5f 45 52  ...return(TCL_ER
ae70: 52 4f 52 29 3b 0a 09 7d 0a 0a 09 2f 2a 20 53 65  ROR);..}.../* Se
ae80: 74 20 64 65 66 61 75 6c 74 20 66 6c 61 67 73 20  t default flags 
ae90: 2a 2f 0a 09 72 6f 75 74 65 2e 72 74 5f 66 6c 61  */..route.rt_fla
aea0: 67 73 20 3d 20 52 54 46 5f 55 50 3b 0a 0a 09 2f  gs = RTF_UP;.../
aeb0: 2a 20 50 61 72 73 65 20 64 65 73 74 69 6e 61 74  * Parse destinat
aec0: 69 6f 6e 20 61 64 64 72 65 73 73 20 2a 2f 0a 09  ion address */..
aed0: 64 65 73 74 5f 6f 62 6a 20 3d 20 6f 62 6a 76 5b  dest_obj = objv[
aee0: 32 5d 3b 0a 09 70 61 72 73 65 5f 72 65 74 20 3d  2];..parse_ret =
aef0: 20 74 75 61 70 69 5f 70 72 69 76 61 74 65 5f 67   tuapi_private_g
af00: 65 74 5f 73 6f 63 6b 61 64 64 72 5f 66 72 6f 6d  et_sockaddr_from
af10: 5f 6f 62 6a 28 64 65 73 74 5f 6f 62 6a 2c 20 26  _obj(dest_obj, &
af20: 72 6f 75 74 65 2e 72 74 5f 64 73 74 29 3b 0a 09  route.rt_dst);..
af30: 69 66 20 28 70 61 72 73 65 5f 72 65 74 20 21 3d  if (parse_ret !=
af40: 20 30 29 20 7b 0a 09 09 54 63 6c 5f 53 65 74 4f   0) {...Tcl_SetO
af50: 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  bjResult(interp,
af60: 20 54 63 6c 5f 4f 62 6a 50 72 69 6e 74 66 28 22   Tcl_ObjPrintf("
af70: 75 6e 61 62 6c 65 20 74 6f 20 70 61 72 73 65 20  unable to parse 
af80: 5c 22 25 73 5c 22 20 61 73 20 61 6e 20 61 64 64  \"%s\" as an add
af90: 72 65 73 73 22 2c 20 54 63 6c 5f 47 65 74 53 74  ress", Tcl_GetSt
afa0: 72 69 6e 67 28 64 65 73 74 5f 6f 62 6a 29 29 29  ring(dest_obj)))
afb0: 3b 0a 0a 09 09 72 65 74 75 72 6e 28 54 43 4c 5f  ;....return(TCL_
afc0: 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 2f 2a 20  ERROR);..}.../* 
afd0: 50 61 72 73 65 20 64 65 73 74 69 6e 61 74 69 6f  Parse destinatio
afe0: 6e 20 6e 65 74 6d 61 73 6b 20 2a 2f 0a 09 64 65  n netmask */..de
aff0: 73 74 6d 61 73 6b 5f 6f 62 6a 20 3d 20 6f 62 6a  stmask_obj = obj
b000: 76 5b 33 5d 3b 0a 09 70 61 72 73 65 5f 72 65 74  v[3];..parse_ret
b010: 20 3d 20 74 75 61 70 69 5f 70 72 69 76 61 74 65   = tuapi_private
b020: 5f 67 65 74 5f 73 6f 63 6b 61 64 64 72 5f 66 72  _get_sockaddr_fr
b030: 6f 6d 5f 6f 62 6a 28 64 65 73 74 6d 61 73 6b 5f  om_obj(destmask_
b040: 6f 62 6a 2c 20 26 72 6f 75 74 65 2e 72 74 5f 67  obj, &route.rt_g
b050: 65 6e 6d 61 73 6b 29 3b 0a 09 69 66 20 28 70 61  enmask);..if (pa
b060: 72 73 65 5f 72 65 74 20 21 3d 20 30 29 20 7b 0a  rse_ret != 0) {.
b070: 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75  ..Tcl_SetObjResu
b080: 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4f  lt(interp, Tcl_O
b090: 62 6a 50 72 69 6e 74 66 28 22 75 6e 61 62 6c 65  bjPrintf("unable
b0a0: 20 74 6f 20 70 61 72 73 65 20 5c 22 25 73 5c 22   to parse \"%s\"
b0b0: 20 61 73 20 61 6e 20 61 64 64 72 65 73 73 22 2c   as an address",
b0c0: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 64   Tcl_GetString(d
b0d0: 65 73 74 6d 61 73 6b 5f 6f 62 6a 29 29 29 3b 0a  estmask_obj)));.
b0e0: 0a 09 09 72 65 74 75 72 6e 28 54 43 4c 5f 45 52  ...return(TCL_ER
b0f0: 52 4f 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 72  ROR);..}...if (r
b100: 6f 75 74 65 2e 72 74 5f 64 73 74 2e 73 61 5f 66  oute.rt_dst.sa_f
b110: 61 6d 69 6c 79 20 21 3d 20 72 6f 75 74 65 2e 72  amily != route.r
b120: 74 5f 67 65 6e 6d 61 73 6b 2e 73 61 5f 66 61 6d  t_genmask.sa_fam
b130: 69 6c 79 29 20 7b 0a 09 09 54 63 6c 5f 53 65 74  ily) {...Tcl_Set
b140: 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70  ObjResult(interp
b150: 2c 0a 09 09 20 20 54 63 6c 5f 4f 62 6a 50 72 69  ,...  Tcl_ObjPri
b160: 6e 74 66 28 22 64 65 73 74 69 6e 61 74 69 6f 6e  ntf("destination
b170: 20 28 5c 22 25 73 5c 22 29 20 61 6e 64 20 64 65   (\"%s\") and de
b180: 73 74 69 6e 61 74 69 6f 6e 5f 6d 61 73 6b 20 28  stination_mask (
b190: 5c 22 25 73 5c 22 29 20 61 72 65 20 64 69 66 66  \"%s\") are diff
b1a0: 65 72 65 6e 74 20 63 6c 61 73 73 65 73 22 2c 0a  erent classes",.
b1b0: 09 09 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72  ..    Tcl_GetStr
b1c0: 69 6e 67 28 64 65 73 74 5f 6f 62 6a 29 2c 0a 09  ing(dest_obj),..
b1d0: 09 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69  .    Tcl_GetStri
b1e0: 6e 67 28 64 65 73 74 6d 61 73 6b 5f 6f 62 6a 29  ng(destmask_obj)
b1f0: 0a 09 09 20 20 29 0a 09 09 29 3b 0a 0a 09 09 72  ...  )...);....r
b200: 65 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29  eturn(TCL_ERROR)
b210: 3b 0a 09 7d 0a 0a 09 73 77 69 74 63 68 20 28 72  ;..}...switch (r
b220: 6f 75 74 65 2e 72 74 5f 64 73 74 2e 73 61 5f 66  oute.rt_dst.sa_f
b230: 61 6d 69 6c 79 29 20 7b 0a 09 09 63 61 73 65 20  amily) {...case 
b240: 41 46 5f 49 4e 45 54 3a 20 2f 2a 20 49 50 76 34  AF_INET: /* IPv4
b250: 20 2a 2f 0a 09 09 09 69 66 20 28 73 6f 63 6b 5f   */....if (sock_
b260: 76 34 20 3d 3d 20 2d 31 29 20 7b 0a 09 09 09 09  v4 == -1) {.....
b270: 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
b280: 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4f 62 6a  (interp, Tcl_Obj
b290: 50 72 69 6e 74 66 28 22 61 64 64 72 65 73 73 20  Printf("address 
b2a0: 5c 22 25 73 5c 22 20 69 73 20 49 50 76 34 2c 20  \"%s\" is IPv4, 
b2b0: 62 75 74 20 75 6e 61 62 6c 65 20 74 6f 20 63 72  but unable to cr
b2c0: 65 61 74 65 20 49 50 76 34 20 73 6f 63 6b 65 74  eate IPv4 socket
b2d0: 22 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  ", Tcl_GetString
b2e0: 28 64 65 73 74 5f 6f 62 6a 29 29 29 3b 0a 0a 09  (dest_obj)));...
b2f0: 09 09 09 72 65 74 75 72 6e 28 54 43 4c 5f 45 52  ...return(TCL_ER
b300: 52 4f 52 29 3b 0a 09 09 09 7d 0a 0a 09 09 09 69  ROR);....}.....i
b310: 66 20 28 28 28 73 74 72 75 63 74 20 73 6f 63 6b  f (((struct sock
b320: 61 64 64 72 5f 69 6e 20 2a 29 20 26 72 6f 75 74  addr_in *) &rout
b330: 65 2e 72 74 5f 67 65 6e 6d 61 73 6b 29 2d 3e 73  e.rt_genmask)->s
b340: 69 6e 5f 61 64 64 72 2e 73 5f 61 64 64 72 20 3d  in_addr.s_addr =
b350: 3d 20 49 4e 41 44 44 52 5f 42 52 4f 41 44 43 41  = INADDR_BROADCA
b360: 53 54 29 20 7b 0a 09 09 09 09 72 6f 75 74 65 2e  ST) {.....route.
b370: 72 74 5f 66 6c 61 67 73 20 7c 3d 20 52 54 46 5f  rt_flags |= RTF_
b380: 48 4f 53 54 3b 0a 09 09 09 7d 0a 0a 09 09 09 73  HOST;....}.....s
b390: 6f 63 6b 20 3d 20 73 6f 63 6b 5f 76 34 3b 0a 0a  ock = sock_v4;..
b3a0: 09 09 09 62 72 65 61 6b 3b 0a 09 09 63 61 73 65  ...break;...case
b3b0: 20 41 46 5f 49 4e 45 54 36 3a 20 2f 2a 20 49 50   AF_INET6: /* IP
b3c0: 76 36 20 2a 2f 0a 09 09 09 69 66 20 28 73 6f 63  v6 */....if (soc
b3d0: 6b 5f 76 36 20 3d 3d 20 2d 31 29 20 7b 0a 09 09  k_v6 == -1) {...
b3e0: 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75  ..Tcl_SetObjResu
b3f0: 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4f  lt(interp, Tcl_O
b400: 62 6a 50 72 69 6e 74 66 28 22 61 64 64 72 65 73  bjPrintf("addres
b410: 73 20 5c 22 25 73 5c 22 20 69 73 20 49 50 76 36  s \"%s\" is IPv6
b420: 2c 20 62 75 74 20 75 6e 61 62 6c 65 20 74 6f 20  , but unable to 
b430: 63 72 65 61 74 65 20 49 50 76 36 20 73 6f 63 6b  create IPv6 sock
b440: 65 74 22 2c 20 54 63 6c 5f 47 65 74 53 74 72 69  et", Tcl_GetStri
b450: 6e 67 28 64 65 73 74 5f 6f 62 6a 29 29 29 3b 0a  ng(dest_obj)));.
b460: 0a 09 09 09 09 72 65 74 75 72 6e 28 54 43 4c 5f  .....return(TCL_
b470: 45 52 52 4f 52 29 3b 0a 09 09 09 7d 0a 0a 09 09  ERROR);....}....
b480: 09 73 6f 63 6b 20 3d 20 73 6f 63 6b 5f 76 36 3b  .sock = sock_v6;
b490: 0a 0a 09 09 09 62 72 65 61 6b 3b 0a 09 09 64 65  .....break;...de
b4a0: 66 61 75 6c 74 3a 0a 09 09 09 54 63 6c 5f 53 65  fault:....Tcl_Se
b4b0: 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72  tObjResult(inter
b4c0: 70 2c 20 54 63 6c 5f 4f 62 6a 50 72 69 6e 74 66  p, Tcl_ObjPrintf
b4d0: 28 22 75 6e 61 62 6c 65 20 74 6f 20 64 65 74 65  ("unable to dete
b4e0: 72 6d 69 6e 65 20 74 79 70 65 20 6f 66 20 61 64  rmine type of ad
b4f0: 64 72 65 73 73 20 66 6f 72 20 5c 22 25 73 5c 22  dress for \"%s\"
b500: 22 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  ", Tcl_GetString
b510: 28 64 65 73 74 5f 6f 62 6a 29 29 29 3b 0a 0a 09  (dest_obj)));...
b520: 09 09 72 65 74 75 72 6e 28 54 43 4c 5f 45 52 52  ..return(TCL_ERR
b530: 4f 52 29 3b 0a 09 7d 0a 0a 09 2f 2a 20 50 61 72  OR);..}.../* Par
b540: 73 65 20 72 65 6d 61 69 6e 69 6e 67 20 6f 70 74  se remaining opt
b550: 69 6f 6e 73 20 2a 2f 0a 09 6f 62 6a 63 20 2d 3d  ions */..objc -=
b560: 20 34 3b 0a 09 6f 62 6a 76 20 2b 3d 20 34 3b 0a   4;..objv += 4;.
b570: 0a 09 66 6f 72 20 28 3b 20 6f 62 6a 63 20 3e 20  ..for (; objc > 
b580: 30 3b 20 6f 62 6a 63 2d 2d 2c 6f 62 6a 76 2b 2b  0; objc--,objv++
b590: 29 20 7b 0a 09 09 6f 70 74 69 6f 6e 5f 6e 61 6d  ) {...option_nam
b5a0: 65 5f 6f 62 6a 20 3d 20 6f 62 6a 76 5b 30 5d 3b  e_obj = objv[0];
b5b0: 0a 0a 09 09 69 66 20 28 6f 62 6a 63 20 3c 20 32  ....if (objc < 2
b5c0: 29 20 7b 0a 09 09 09 54 63 6c 5f 53 65 74 4f 62  ) {....Tcl_SetOb
b5d0: 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  jResult(interp, 
b5e0: 54 63 6c 5f 4f 62 6a 50 72 69 6e 74 66 28 22 6f  Tcl_ObjPrintf("o
b5f0: 70 74 69 6f 6e 20 5c 22 25 73 5c 22 20 72 65 71  ption \"%s\" req
b600: 75 69 72 65 73 20 61 6e 20 61 72 67 75 6d 65 6e  uires an argumen
b610: 74 22 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  t", Tcl_GetStrin
b620: 67 28 6f 70 74 69 6f 6e 5f 6e 61 6d 65 5f 6f 62  g(option_name_ob
b630: 6a 29 29 29 3b 0a 0a 09 09 09 72 65 74 75 72 6e  j)));.....return
b640: 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 09 09 7d  (TCL_ERROR);...}
b650: 0a 0a 09 09 6f 62 6a 63 2d 2d 3b 0a 09 09 6f 62  ....objc--;...ob
b660: 6a 76 2b 2b 3b 0a 0a 09 09 6f 70 74 69 6f 6e 5f  jv++;....option_
b670: 76 61 6c 5f 6f 62 6a 20 3d 20 6f 62 6a 76 5b 30  val_obj = objv[0
b680: 5d 3b 0a 0a 09 09 73 77 69 74 63 68 20 28 74 75  ];....switch (tu
b690: 61 70 69 5f 69 6e 74 65 72 6e 61 6c 5f 73 69 6d  api_internal_sim
b6a0: 70 6c 65 68 61 73 68 5f 6f 62 6a 28 6f 70 74 69  plehash_obj(opti
b6b0: 6f 6e 5f 6e 61 6d 65 5f 6f 62 6a 29 29 20 7b 0a  on_name_obj)) {.
b6c0: 09 09 09 63 61 73 65 20 30 78 34 63 37 32 37 37  ...case 0x4c7277
b6d0: 37 39 3a 20 2f 2a 20 67 61 74 65 77 61 79 20 2a  79: /* gateway *
b6e0: 2f 0a 09 09 09 09 70 61 72 73 65 5f 72 65 74 20  /.....parse_ret 
b6f0: 3d 20 74 75 61 70 69 5f 70 72 69 76 61 74 65 5f  = tuapi_private_
b700: 67 65 74 5f 73 6f 63 6b 61 64 64 72 5f 66 72 6f  get_sockaddr_fro
b710: 6d 5f 6f 62 6a 28 6f 70 74 69 6f 6e 5f 76 61 6c  m_obj(option_val
b720: 5f 6f 62 6a 2c 20 26 72 6f 75 74 65 2e 72 74 5f  _obj, &route.rt_
b730: 67 61 74 65 77 61 79 29 3b 0a 09 09 09 09 69 66  gateway);.....if
b740: 20 28 70 61 72 73 65 5f 72 65 74 20 21 3d 20 30   (parse_ret != 0
b750: 29 20 7b 0a 09 09 09 09 09 54 63 6c 5f 53 65 74  ) {......Tcl_Set
b760: 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70  ObjResult(interp
b770: 2c 20 54 63 6c 5f 4f 62 6a 50 72 69 6e 74 66 28  , Tcl_ObjPrintf(
b780: 22 75 6e 61 62 6c 65 20 74 6f 20 70 61 72 73 65  "unable to parse
b790: 20 5c 22 25 73 5c 22 20 61 73 20 61 6e 20 61 64   \"%s\" as an ad
b7a0: 64 72 65 73 73 22 2c 20 54 63 6c 5f 47 65 74 53  dress", Tcl_GetS
b7b0: 74 72 69 6e 67 28 6f 70 74 69 6f 6e 5f 76 61 6c  tring(option_val
b7c0: 5f 6f 62 6a 29 29 29 3b 0a 0a 09 09 09 09 09 72  _obj)));.......r
b7d0: 65 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29  eturn(TCL_ERROR)
b7e0: 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09 72 6f 75  ;.....}......rou
b7f0: 74 65 2e 72 74 5f 66 6c 61 67 73 20 26 3d 20 28  te.rt_flags &= (
b800: 7e 52 54 46 5f 48 4f 53 54 29 3b 0a 09 09 09 09  ~RTF_HOST);.....
b810: 72 6f 75 74 65 2e 72 74 5f 66 6c 61 67 73 20 7c  route.rt_flags |
b820: 3d 20 52 54 46 5f 47 41 54 45 57 41 59 3b 0a 0a  = RTF_GATEWAY;..
b830: 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61  ....break;....ca
b840: 73 65 20 30 78 31 62 37 61 37 35 3a 20 2f 2a 20  se 0x1b7a75: /* 
b850: 6d 74 75 20 2a 2f 0a 09 09 09 09 74 63 6c 5f 72  mtu */.....tcl_r
b860: 65 74 20 3d 20 54 63 6c 5f 47 65 74 57 69 64 65  et = Tcl_GetWide
b870: 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72  IntFromObj(inter
b880: 70 2c 20 6f 70 74 69 6f 6e 5f 76 61 6c 5f 6f 62  p, option_val_ob
b890: 6a 2c 20 26 6f 70 74 69 6f 6e 5f 76 61 6c 5f 77  j, &option_val_w
b8a0: 69 64 65 29 3b 0a 09 09 09 09 69 66 20 28 74 63  ide);.....if (tc
b8b0: 6c 5f 72 65 74 20 21 3d 20 54 43 4c 5f 4f 4b 29  l_ret != TCL_OK)
b8c0: 20 7b 0a 09 09 09 09 09 72 65 74 75 72 6e 28 74   {......return(t
b8d0: 63 6c 5f 72 65 74 29 3b 0a 09 09 09 09 7d 0a 0a  cl_ret);.....}..
b8e0: 09 09 09 09 72 6f 75 74 65 2e 72 74 5f 66 6c 61  ....route.rt_fla
b8f0: 67 73 20 7c 3d 20 52 54 46 5f 4d 54 55 3b 0a 09  gs |= RTF_MTU;..
b900: 09 09 09 72 6f 75 74 65 2e 72 74 5f 6d 74 75 20  ...route.rt_mtu 
b910: 3d 20 6f 70 74 69 6f 6e 5f 76 61 6c 5f 77 69 64  = option_val_wid
b920: 65 3b 0a 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09  e;......break;..
b930: 09 09 63 61 73 65 20 30 78 35 65 39 64 30 33 65  ..case 0x5e9d03e
b940: 33 3a 20 2f 2a 20 6d 65 74 72 69 63 20 2a 2f 0a  3: /* metric */.
b950: 09 09 09 09 74 63 6c 5f 72 65 74 20 3d 20 54 63  ....tcl_ret = Tc
b960: 6c 5f 47 65 74 57 69 64 65 49 6e 74 46 72 6f 6d  l_GetWideIntFrom
b970: 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 70 74 69  Obj(interp, opti
b980: 6f 6e 5f 76 61 6c 5f 6f 62 6a 2c 20 26 6f 70 74  on_val_obj, &opt
b990: 69 6f 6e 5f 76 61 6c 5f 77 69 64 65 29 3b 0a 09  ion_val_wide);..
b9a0: 09 09 09 69 66 20 28 74 63 6c 5f 72 65 74 20 21  ...if (tcl_ret !
b9b0: 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a 09 09 09 09  = TCL_OK) {.....
b9c0: 09 72 65 74 75 72 6e 28 74 63 6c 5f 72 65 74 29  .return(tcl_ret)
b9d0: 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09 72 6f 75  ;.....}......rou
b9e0: 74 65 2e 72 74 5f 6d 65 74 72 69 63 20 3d 20 6f  te.rt_metric = o
b9f0: 70 74 69 6f 6e 5f 76 61 6c 5f 77 69 64 65 3b 0a  ption_val_wide;.
ba00: 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63  .....break;....c
ba10: 61 73 65 20 30 78 39 64 64 38 65 38 66 37 3a 20  ase 0x9dd8e8f7: 
ba20: 2f 2a 20 77 69 6e 64 6f 77 20 2a 2f 0a 09 09 09  /* window */....
ba30: 09 74 63 6c 5f 72 65 74 20 3d 20 54 63 6c 5f 47  .tcl_ret = Tcl_G
ba40: 65 74 57 69 64 65 49 6e 74 46 72 6f 6d 4f 62 6a  etWideIntFromObj
ba50: 28 69 6e 74 65 72 70 2c 20 6f 70 74 69 6f 6e 5f  (interp, option_
ba60: 76 61 6c 5f 6f 62 6a 2c 20 26 6f 70 74 69 6f 6e  val_obj, &option
ba70: 5f 76 61 6c 5f 77 69 64 65 29 3b 0a 09 09 09 09  _val_wide);.....
ba80: 69 66 20 28 74 63 6c 5f 72 65 74 20 21 3d 20 54  if (tcl_ret != T
ba90: 43 4c 5f 4f 4b 29 20 7b 0a 09 09 09 09 09 72 65  CL_OK) {......re
baa0: 74 75 72 6e 28 74 63 6c 5f 72 65 74 29 3b 0a 09  turn(tcl_ret);..
bab0: 09 09 09 7d 0a 0a 09 09 09 09 72 6f 75 74 65 2e  ...}......route.
bac0: 72 74 5f 66 6c 61 67 73 20 7c 3d 20 52 54 46 5f  rt_flags |= RTF_
bad0: 57 49 4e 44 4f 57 3b 0a 09 09 09 09 72 6f 75 74  WINDOW;.....rout
bae0: 65 2e 72 74 5f 77 69 6e 64 6f 77 20 3d 20 6f 70  e.rt_window = op
baf0: 74 69 6f 6e 5f 76 61 6c 5f 77 69 64 65 3b 0a 0a  tion_val_wide;..
bb00: 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61  ....break;....ca
bb10: 73 65 20 30 78 31 39 33 32 66 36 3a 20 2f 2a 20  se 0x1932f6: /* 
bb20: 64 65 76 20 2a 2f 0a 09 09 09 63 61 73 65 20 30  dev */....case 0
bb30: 78 35 65 64 62 65 32 65 35 3a 20 2f 2a 20 64 65  x5edbe2e5: /* de
bb40: 76 69 63 65 20 2a 2f 0a 09 09 09 09 72 6f 75 74  vice */.....rout
bb50: 65 2e 72 74 5f 64 65 76 20 3d 20 73 74 72 64 75  e.rt_dev = strdu
bb60: 70 28 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  p(Tcl_GetString(
bb70: 6f 70 74 69 6f 6e 5f 76 61 6c 5f 6f 62 6a 29 29  option_val_obj))
bb80: 3b 0a 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09  ;......break;...
bb90: 09 64 65 66 61 75 6c 74 3a 0a 09 09 09 09 54 63  .default:.....Tc
bba0: 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69  l_SetObjResult(i
bbb0: 6e 74 65 72 70 2c 20 54 63 6c 5f 4f 62 6a 50 72  nterp, Tcl_ObjPr
bbc0: 69 6e 74 66 28 22 62 61 64 20 6f 70 74 69 6f 6e  intf("bad option
bbd0: 20 5c 22 25 73 5c 22 3a 20 6d 75 73 74 20 62 65   \"%s\": must be
bbe0: 20 67 61 74 65 77 61 79 2c 20 6d 74 75 2c 20 6d   gateway, mtu, m
bbf0: 65 74 72 69 63 2c 20 64 65 76 69 63 65 2c 20 6f  etric, device, o
bc00: 72 20 77 69 6e 64 6f 77 22 2c 20 54 63 6c 5f 47  r window", Tcl_G
bc10: 65 74 53 74 72 69 6e 67 28 6f 70 74 69 6f 6e 5f  etString(option_
bc20: 6e 61 6d 65 5f 6f 62 6a 29 29 29 3b 0a 0a 09 09  name_obj)));....
bc30: 09 09 72 65 74 75 72 6e 28 54 43 4c 5f 45 52 52  ..return(TCL_ERR
bc40: 4f 52 29 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 2f 2a  OR);...}..}.../*
bc50: 20 52 65 71 75 65 73 74 20 72 6f 75 74 65 20 63   Request route c
bc60: 68 61 6e 67 65 20 2a 2f 0a 09 69 6f 63 74 6c 5f  hange */..ioctl_
bc70: 72 65 74 20 3d 20 69 6f 63 74 6c 28 73 6f 63 6b  ret = ioctl(sock
bc80: 2c 20 69 6f 63 74 6c 5f 69 64 2c 20 26 72 6f 75  , ioctl_id, &rou
bc90: 74 65 29 3b 0a 09 69 66 20 28 69 6f 63 74 6c 5f  te);..if (ioctl_
bca0: 72 65 74 20 21 3d 20 30 29 20 7b 0a 09 09 54 63  ret != 0) {...Tc
bcb0: 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69  l_SetObjResult(i
bcc0: 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74  nterp, Tcl_NewSt
bcd0: 72 69 6e 67 4f 62 6a 28 73 74 72 65 72 72 6f 72  ringObj(strerror
bce0: 28 65 72 72 6e 6f 29 2c 20 2d 31 29 29 3b 0a 0a  (errno), -1));..
bcf0: 09 09 72 65 74 75 72 6e 28 54 43 4c 5f 45 52 52  ..return(TCL_ERR
bd00: 4f 52 29 3b 0a 09 7d 0a 0a 09 72 65 74 75 72 6e  OR);..}...return
bd10: 28 54 43 4c 5f 4f 4b 29 3b 0a 7d 0a 0a 73 74 61  (TCL_OK);.}..sta
bd20: 74 69 63 20 69 6e 74 20 74 75 61 70 69 5f 72 6f  tic int tuapi_ro
bd30: 75 74 65 28 43 6c 69 65 6e 74 44 61 74 61 20 63  ute(ClientData c
bd40: 64 2c 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  d, Tcl_Interp *i
bd50: 6e 74 65 72 70 2c 20 69 6e 74 20 6f 62 6a 63 2c  nterp, int objc,
bd60: 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
bd70: 6f 62 6a 76 5b 5d 29 20 7b 0a 09 69 6e 74 20 73  objv[]) {..int s
bd80: 6f 63 6b 5f 76 34 2c 20 73 6f 63 6b 5f 76 36 2c  ock_v4, sock_v6,
bd90: 20 73 6f 63 6b 3b 0a 09 69 6e 74 20 72 65 74 76   sock;..int retv
bda0: 61 6c 20 3d 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  al = TCL_ERROR;.
bdb0: 0a 09 73 6f 63 6b 20 3d 20 74 75 61 70 69 5f 69  ..sock = tuapi_i
bdc0: 6e 74 65 72 6e 61 6c 5f 67 65 74 73 6f 63 6b 28  nternal_getsock(
bdd0: 26 73 6f 63 6b 5f 76 34 2c 20 26 73 6f 63 6b 5f  &sock_v4, &sock_
bde0: 76 36 29 3b 0a 09 69 66 20 28 73 6f 63 6b 20 3d  v6);..if (sock =
bdf0: 3d 20 2d 31 29 20 7b 0a 09 09 54 63 6c 5f 53 65  = -1) {...Tcl_Se
be00: 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72  tObjResult(inter
be10: 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67  p, Tcl_NewString
be20: 4f 62 6a 28 22 75 6e 61 62 6c 65 20 74 6f 20 63  Obj("unable to c
be30: 72 65 61 74 65 20 73 6f 63 6b 65 74 22 2c 20 2d  reate socket", -
be40: 31 29 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 54  1));....return(T
be50: 43 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09  CL_ERROR);..}...
be60: 73 77 69 74 63 68 20 28 6f 62 6a 63 29 20 7b 0a  switch (objc) {.
be70: 09 09 63 61 73 65 20 30 3a 0a 09 09 63 61 73 65  ..case 0:...case
be80: 20 31 3a 20 2f 2a 20 4e 6f 20 61 72 67 75 6d 65   1: /* No argume
be90: 6e 74 73 2c 20 6c 69 73 74 20 61 6c 6c 20 69 6e  nts, list all in
bea0: 74 65 72 66 61 63 65 73 20 2a 2f 0a 09 09 09 72  terfaces */....r
beb0: 65 74 76 61 6c 20 3d 20 74 75 61 70 69 5f 72 6f  etval = tuapi_ro
bec0: 75 74 65 5f 6c 69 73 74 28 63 64 2c 20 69 6e 74  ute_list(cd, int
bed0: 65 72 70 2c 20 6f 62 6a 63 2c 20 6f 62 6a 76 2c  erp, objc, objv,
bee0: 20 73 6f 63 6b 5f 76 34 2c 20 73 6f 63 6b 5f 76   sock_v4, sock_v
bef0: 36 29 3b 0a 0a 09 09 09 62 72 65 61 6b 3b 0a 09  6);.....break;..
bf00: 09 64 65 66 61 75 6c 74 3a 0a 09 09 09 2f 2a 20  .default:..../* 
bf10: 4f 74 68 65 72 77 69 73 65 2c 20 6d 6f 64 69 66  Otherwise, modif
bf20: 79 20 72 6f 75 74 65 73 20 2a 2f 0a 09 09 09 72  y routes */....r
bf30: 65 74 76 61 6c 20 3d 20 74 75 61 70 69 5f 72 6f  etval = tuapi_ro
bf40: 75 74 65 5f 63 6f 6e 66 28 63 64 2c 20 69 6e 74  ute_conf(cd, int
bf50: 65 72 70 2c 20 6f 62 6a 63 2c 20 6f 62 6a 76 2c  erp, objc, objv,
bf60: 20 73 6f 63 6b 5f 76 34 2c 20 73 6f 63 6b 5f 76   sock_v4, sock_v
bf70: 36 29 3b 0a 0a 09 09 09 62 72 65 61 6b 3b 0a 09  6);.....break;..
bf80: 7d 0a 0a 09 2f 2a 20 43 6c 65 61 6e 75 70 20 2a  }.../* Cleanup *
bf90: 2f 0a 09 69 66 20 28 73 6f 63 6b 5f 76 34 20 21  /..if (sock_v4 !
bfa0: 3d 20 2d 31 29 20 7b 0a 09 09 63 6c 6f 73 65 28  = -1) {...close(
bfb0: 73 6f 63 6b 5f 76 34 29 3b 0a 09 7d 0a 0a 09 69  sock_v4);..}...i
bfc0: 66 20 28 73 6f 63 6b 5f 76 36 20 21 3d 20 2d 31  f (sock_v6 != -1
bfd0: 29 20 7b 0a 09 09 63 6c 6f 73 65 28 73 6f 63 6b  ) {...close(sock
bfe0: 5f 76 36 29 3b 0a 09 7d 0a 0a 09 72 65 74 75 72  _v6);..}...retur
bff0: 6e 28 72 65 74 76 61 6c 29 3b 0a 7d 0a 0a 73 74  n(retval);.}..st
c000: 61 74 69 63 20 69 6e 74 20 74 75 61 70 69 5f 62  atic int tuapi_b
c010: 72 63 74 6c 5f 6c 69 73 74 28 43 6c 69 65 6e 74  rctl_list(Client
c020: 44 61 74 61 20 63 64 2c 20 54 63 6c 5f 49 6e 74  Data cd, Tcl_Int
c030: 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 69 6e 74  erp *interp, int
c040: 20 6f 62 6a 63 2c 20 54 63 6c 5f 4f 62 6a 20 2a   objc, Tcl_Obj *
c050: 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 2c 20 69 6e  CONST objv[], in
c060: 74 20 73 6f 63 6b 29 20 7b 0a 09 54 63 6c 5f 53  t sock) {..Tcl_S
c070: 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
c080: 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e  rp, Tcl_NewStrin
c090: 67 4f 62 6a 28 22 6e 6f 74 20 69 6d 70 6c 65 6d  gObj("not implem
c0a0: 65 6e 74 65 64 22 2c 20 2d 31 29 29 3b 0a 0a 09  ented", -1));...
c0b0: 72 65 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52  return(TCL_ERROR
c0c0: 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 69 6e 74  );.}..static int
c0d0: 20 74 75 61 70 69 5f 62 72 63 74 6c 5f 63 6f 6e   tuapi_brctl_con
c0e0: 66 28 43 6c 69 65 6e 74 44 61 74 61 20 63 64 2c  f(ClientData cd,
c0f0: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
c100: 65 72 70 2c 20 69 6e 74 20 6f 62 6a 63 2c 20 54  erp, int objc, T
c110: 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
c120: 6a 76 5b 5d 2c 20 69 6e 74 20 73 6f 63 6b 29 20  jv[], int sock) 
c130: 7b 0a 09 54 63 6c 5f 4f 62 6a 20 2a 6f 70 65 72  {..Tcl_Obj *oper
c140: 61 74 69 6f 6e 5f 6f 62 6a 2c 20 2a 62 72 69 64  ation_obj, *brid
c150: 67 65 5f 6e 61 6d 65 5f 6f 62 6a 2c 20 2a 69 6e  ge_name_obj, *in
c160: 74 65 72 66 61 63 65 5f 6e 61 6d 65 5f 6f 62 6a  terface_name_obj
c170: 3b 0a 09 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67  ;..unsigned long
c180: 20 61 72 67 5b 34 5d 3b 0a 09 73 74 72 75 63 74   arg[4];..struct
c190: 20 69 66 72 65 71 20 69 66 72 3b 0a 09 69 6e 74   ifreq ifr;..int
c1a0: 20 69 6f 63 74 6c 5f 72 65 74 2c 20 69 6f 63 74   ioctl_ret, ioct
c1b0: 6c 5f 69 64 3b 0a 09 69 6e 74 20 61 64 64 20 3d  l_id;..int add =
c1c0: 20 30 3b 0a 0a 09 2f 2a 20 44 65 74 65 72 6d 69   0;.../* Determi
c1d0: 6e 65 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f 0a  ne operation */.
c1e0: 09 6f 70 65 72 61 74 69 6f 6e 5f 6f 62 6a 20 3d  .operation_obj =
c1f0: 20 6f 62 6a 76 5b 31 5d 3b 0a 09 73 77 69 74 63   objv[1];..switc
c200: 68 20 28 74 75 61 70 69 5f 69 6e 74 65 72 6e 61  h (tuapi_interna
c210: 6c 5f 73 69 6d 70 6c 65 68 61 73 68 5f 6f 62 6a  l_simplehash_obj
c220: 28 6f 70 65 72 61 74 69 6f 6e 5f 6f 62 6a 29 29  (operation_obj))
c230: 20 7b 0a 09 09 63 61 73 65 20 30 78 31 63 39 39   {...case 0x1c99
c240: 33 32 37 32 3a 20 2f 2a 20 61 64 64 62 72 20 2a  3272: /* addbr *
c250: 2f 0a 09 09 09 61 64 64 20 3d 20 31 3b 0a 09 09  /....add = 1;...
c260: 63 61 73 65 20 30 78 34 63 62 62 33 32 37 32 3a  case 0x4cbb3272:
c270: 20 2f 2a 20 64 65 6c 62 72 20 2a 2f 0a 09 09 09   /* delbr */....
c280: 69 66 20 28 6f 62 6a 63 20 21 3d 20 33 29 20 7b  if (objc != 3) {
c290: 0a 09 09 09 09 69 66 20 28 61 64 64 29 20 7b 0a  .....if (add) {.
c2a0: 09 09 09 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52  .....Tcl_SetObjR
c2b0: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63  esult(interp, Tc
c2c0: 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22  l_NewStringObj("
c2d0: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
c2e0: 6f 75 6c 64 20 62 65 20 5c 22 3a 3a 74 75 61 70  ould be \"::tuap
c2f0: 69 3a 3a 73 79 73 63 61 6c 6c 3a 3a 62 72 63 74  i::syscall::brct
c300: 6c 20 61 64 64 62 72 20 62 72 69 64 67 65 5c 22  l addbr bridge\"
c310: 22 2c 20 2d 31 29 29 3b 0a 09 09 09 09 7d 20 65  ", -1));.....} e
c320: 6c 73 65 20 7b 0a 09 09 09 09 09 54 63 6c 5f 53  lse {......Tcl_S
c330: 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
c340: 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e  rp, Tcl_NewStrin
c350: 67 4f 62 6a 28 22 77 72 6f 6e 67 20 23 20 61 72  gObj("wrong # ar
c360: 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
c370: 3a 3a 74 75 61 70 69 3a 3a 73 79 73 63 61 6c 6c  ::tuapi::syscall
c380: 3a 3a 62 72 63 74 6c 20 64 65 6c 62 72 20 62 72  ::brctl delbr br
c390: 69 64 67 65 5c 22 22 2c 20 2d 31 29 29 3b 0a 09  idge\"", -1));..
c3a0: 09 09 09 7d 0a 0a 09 09 09 09 72 65 74 75 72 6e  ...}......return
c3b0: 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 09 09 09  (TCL_ERROR);....
c3c0: 7d 0a 0a 09 09 09 62 72 69 64 67 65 5f 6e 61 6d  }.....bridge_nam
c3d0: 65 5f 6f 62 6a 20 3d 20 6f 62 6a 76 5b 32 5d 3b  e_obj = objv[2];
c3e0: 0a 0a 09 09 09 69 66 20 28 61 64 64 29 20 7b 0a  .....if (add) {.
c3f0: 09 09 09 09 61 72 67 5b 30 5d 20 3d 20 42 52 43  ....arg[0] = BRC
c400: 54 4c 5f 41 44 44 5f 42 52 49 44 47 45 3b 0a 09  TL_ADD_BRIDGE;..
c410: 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 61  ..} else {.....a
c420: 72 67 5b 30 5d 20 3d 20 42 52 43 54 4c 5f 44 45  rg[0] = BRCTL_DE
c430: 4c 5f 42 52 49 44 47 45 3b 0a 09 09 09 7d 0a 0a  L_BRIDGE;....}..
c440: 09 09 09 61 72 67 5b 31 5d 20 3d 20 28 75 6e 73  ...arg[1] = (uns
c450: 69 67 6e 65 64 20 6c 6f 6e 67 29 20 54 63 6c 5f  igned long) Tcl_
c460: 47 65 74 53 74 72 69 6e 67 28 62 72 69 64 67 65  GetString(bridge
c470: 5f 6e 61 6d 65 5f 6f 62 6a 29 3b 0a 09 09 09 61  _name_obj);....a
c480: 72 67 5b 32 5d 20 3d 20 30 3b 0a 0a 09 09 09 69  rg[2] = 0;.....i
c490: 6f 63 74 6c 5f 72 65 74 20 3d 20 69 6f 63 74 6c  octl_ret = ioctl
c4a0: 28 73 6f 63 6b 2c 20 53 49 4f 43 47 49 46 42 52  (sock, SIOCGIFBR
c4b0: 2c 20 26 61 72 67 29 3b 20 0a 0a 09 09 09 62 72  , &arg); .....br
c4c0: 65 61 6b 3b 0a 09 09 63 61 73 65 20 30 78 31 43  eak;...case 0x1C
c4d0: 39 39 33 37 45 36 3a 20 2f 2a 20 61 64 64 69 66  9937E6: /* addif
c4e0: 20 2a 2f 0a 09 09 09 61 64 64 20 3d 20 31 3b 0a   */....add = 1;.
c4f0: 09 09 63 61 73 65 20 30 78 34 63 62 62 33 37 65  ..case 0x4cbb37e
c500: 36 3a 20 2f 2a 20 64 65 6c 69 66 20 2a 2f 0a 09  6: /* delif */..
c510: 09 09 69 66 20 28 6f 62 6a 63 20 21 3d 20 34 29  ..if (objc != 4)
c520: 20 7b 0a 09 09 09 09 69 66 20 28 61 64 64 29 20   {.....if (add) 
c530: 7b 0a 09 09 09 09 09 54 63 6c 5f 53 65 74 4f 62  {......Tcl_SetOb
c540: 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  jResult(interp, 
c550: 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a  Tcl_NewStringObj
c560: 28 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20  ("wrong # args: 
c570: 73 68 6f 75 6c 64 20 62 65 20 5c 22 3a 3a 74 75  should be \"::tu
c580: 61 70 69 3a 3a 73 79 73 63 61 6c 6c 3a 3a 62 72  api::syscall::br
c590: 63 74 6c 20 61 64 64 69 66 20 62 72 69 64 67 65  ctl addif bridge
c5a0: 20 69 6e 74 65 72 66 61 63 65 5c 22 22 2c 20 2d   interface\"", -
c5b0: 31 29 29 3b 0a 09 09 09 09 7d 20 65 6c 73 65 20  1));.....} else 
c5c0: 7b 0a 09 09 09 09 09 54 63 6c 5f 53 65 74 4f 62  {......Tcl_SetOb
c5d0: 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  jResult(interp, 
c5e0: 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a  Tcl_NewStringObj
c5f0: 28 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20  ("wrong # args: 
c600: 73 68 6f 75 6c 64 20 62 65 20 5c 22 3a 3a 74 75  should be \"::tu
c610: 61 70 69 3a 3a 73 79 73 63 61 6c 6c 3a 3a 62 72  api::syscall::br
c620: 63 74 6c 20 64 65 6c 69 66 20 62 72 69 64 67 65  ctl delif bridge
c630: 20 69 6e 74 65 72 66 61 63 65 5c 22 22 2c 20 2d   interface\"", -
c640: 31 29 29 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09  1));.....}......
c650: 72 65 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52  return(TCL_ERROR
c660: 29 3b 0a 09 09 09 7d 0a 0a 09 09 09 69 66 20 28  );....}.....if (
c670: 61 64 64 29 20 7b 0a 09 09 09 09 69 6f 63 74 6c  add) {.....ioctl
c680: 5f 69 64 20 3d 20 53 49 4f 43 42 52 41 44 44 49  _id = SIOCBRADDI
c690: 46 3b 0a 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09  F;....} else {..
c6a0: 09 09 09 69 6f 63 74 6c 5f 69 64 20 3d 20 53 49  ...ioctl_id = SI
c6b0: 4f 43 42 52 44 45 4c 49 46 3b 0a 09 09 09 7d 0a  OCBRDELIF;....}.
c6c0: 0a 09 09 09 62 72 69 64 67 65 5f 6e 61 6d 65 5f  ....bridge_name_
c6d0: 6f 62 6a 20 3d 20 6f 62 6a 76 5b 32 5d 3b 0a 09  obj = objv[2];..
c6e0: 09 09 69 6e 74 65 72 66 61 63 65 5f 6e 61 6d 65  ..interface_name
c6f0: 5f 6f 62 6a 20 3d 20 6f 62 6a 76 5b 33 5d 3b 0a  _obj = objv[3];.
c700: 0a 09 09 09 6d 65 6d 73 65 74 28 26 69 66 72 2c  ....memset(&ifr,
c710: 20 30 2c 20 73 69 7a 65 6f 66 28 69 66 72 29 29   0, sizeof(ifr))
c720: 3b 0a 09 09 09 73 6e 70 72 69 6e 74 66 28 69 66  ;....snprintf(if
c730: 72 2e 69 66 72 5f 6e 61 6d 65 2c 20 49 46 4e 41  r.ifr_name, IFNA
c740: 4d 53 49 5a 2c 20 22 25 73 22 2c 20 54 63 6c 5f  MSIZ, "%s", Tcl_
c750: 47 65 74 53 74 72 69 6e 67 28 69 6e 74 65 72 66  GetString(interf
c760: 61 63 65 5f 6e 61 6d 65 5f 6f 62 6a 29 29 3b 0a  ace_name_obj));.
c770: 0a 09 09 09 69 6f 63 74 6c 5f 72 65 74 20 3d 20  ....ioctl_ret = 
c780: 69 6f 63 74 6c 28 73 6f 63 6b 2c 20 53 49 4f 43  ioctl(sock, SIOC
c790: 47 49 46 49 4e 44 45 58 2c 20 28 76 6f 69 64 20  GIFINDEX, (void 
c7a0: 2a 29 20 26 69 66 72 29 3b 0a 09 09 09 69 66 20  *) &ifr);....if 
c7b0: 28 69 6f 63 74 6c 5f 72 65 74 20 3d 3d 20 30 29  (ioctl_ret == 0)
c7c0: 20 7b 0a 09 09 09 09 73 6e 70 72 69 6e 74 66 28   {.....snprintf(
c7d0: 69 66 72 2e 69 66 72 5f 6e 61 6d 65 2c 20 49 46  ifr.ifr_name, IF
c7e0: 4e 41 4d 53 49 5a 2c 20 22 25 73 22 2c 20 54 63  NAMSIZ, "%s", Tc
c7f0: 6c 5f 47 65 74 53 74 72 69 6e 67 28 62 72 69 64  l_GetString(brid
c800: 67 65 5f 6e 61 6d 65 5f 6f 62 6a 29 29 3b 0a 09  ge_name_obj));..
c810: 09 09 09 69 6f 63 74 6c 5f 72 65 74 20 3d 20 69  ...ioctl_ret = i
c820: 6f 63 74 6c 28 73 6f 63 6b 2c 20 69 6f 63 74 6c  octl(sock, ioctl
c830: 5f 69 64 2c 20 28 76 6f 69 64 20 2a 29 20 26 69  _id, (void *) &i
c840: 66 72 29 3b 0a 09 09 09 7d 0a 0a 09 09 09 62 72  fr);....}.....br
c850: 65 61 6b 3b 0a 09 7d 0a 0a 09 69 66 20 28 69 6f  eak;..}...if (io
c860: 63 74 6c 5f 72 65 74 20 3c 20 30 29 20 7b 0a 09  ctl_ret < 0) {..
c870: 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c  .Tcl_SetObjResul
c880: 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65  t(interp, Tcl_Ne
c890: 77 53 74 72 69 6e 67 4f 62 6a 28 73 74 72 65 72  wStringObj(strer
c8a0: 72 6f 72 28 65 72 72 6e 6f 29 2c 20 2d 31 29 29  ror(errno), -1))
c8b0: 3b 0a 0a 09 09 72 65 74 75 72 6e 28 54 43 4c 5f  ;....return(TCL_
c8c0: 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 72 65 74  ERROR);..}...ret
c8d0: 75 72 6e 28 54 43 4c 5f 4f 4b 29 3b 0a 7d 0a 0a  urn(TCL_OK);.}..
c8e0: 73 74 61 74 69 63 20 69 6e 74 20 74 75 61 70 69  static int tuapi
c8f0: 5f 62 72 63 74 6c 28 43 6c 69 65 6e 74 44 61 74  _brctl(ClientDat
c900: 61 20 63 64 2c 20 54 63 6c 5f 49 6e 74 65 72 70  a cd, Tcl_Interp
c910: 20 2a 69 6e 74 65 72 70 2c 20 69 6e 74 20 6f 62   *interp, int ob
c920: 6a 63 2c 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  jc, Tcl_Obj *CON
c930: 53 54 20 6f 62 6a 76 5b 5d 29 20 7b 0a 09 69 6e  ST objv[]) {..in
c940: 74 20 73 6f 63 6b 5f 76 34 2c 20 73 6f 63 6b 5f  t sock_v4, sock_
c950: 76 36 2c 20 73 6f 63 6b 3b 0a 09 69 6e 74 20 72  v6, sock;..int r
c960: 65 74 76 61 6c 20 3d 20 54 43 4c 5f 45 52 52 4f  etval = TCL_ERRO
c970: 52 3b 0a 0a 09 73 6f 63 6b 20 3d 20 74 75 61 70  R;...sock = tuap
c980: 69 5f 69 6e 74 65 72 6e 61 6c 5f 67 65 74 73 6f  i_internal_getso
c990: 63 6b 28 26 73 6f 63 6b 5f 76 34 2c 20 26 73 6f  ck(&sock_v4, &so
c9a0: 63 6b 5f 76 36 29 3b 0a 09 69 66 20 28 73 6f 63  ck_v6);..if (soc
c9b0: 6b 20 3d 3d 20 2d 31 29 20 7b 0a 09 09 54 63 6c  k == -1) {...Tcl
c9c0: 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e  _SetObjResult(in
c9d0: 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72  terp, Tcl_NewStr
c9e0: 69 6e 67 4f 62 6a 28 22 75 6e 61 62 6c 65 20 74  ingObj("unable t
c9f0: 6f 20 63 72 65 61 74 65 20 73 6f 63 6b 65 74 22  o create socket"
ca00: 2c 20 2d 31 29 29 3b 0a 0a 09 09 72 65 74 75 72  , -1));....retur
ca10: 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d  n(TCL_ERROR);..}
ca20: 0a 0a 09 73 77 69 74 63 68 20 28 6f 62 6a 63 29  ...switch (objc)
ca30: 20 7b 0a 09 09 63 61 73 65 20 30 3a 0a 09 09 63   {...case 0:...c
ca40: 61 73 65 20 31 3a 20 2f 2a 20 4e 6f 20 61 72 67  ase 1: /* No arg
ca50: 75 6d 65 6e 74 73 2c 20 6c 69 73 74 20 61 6c 6c  uments, list all
ca60: 20 62 72 69 64 67 65 73 20 2a 2f 0a 09 09 09 72   bridges */....r
ca70: 65 74 76 61 6c 20 3d 20 74 75 61 70 69 5f 62 72  etval = tuapi_br
ca80: 63 74 6c 5f 6c 69 73 74 28 63 64 2c 20 69 6e 74  ctl_list(cd, int
ca90: 65 72 70 2c 20 6f 62 6a 63 2c 20 6f 62 6a 76 2c  erp, objc, objv,
caa0: 20 73 6f 63 6b 29 3b 0a 0a 09 09 09 62 72 65 61   sock);.....brea
cab0: 6b 3b 0a 09 09 64 65 66 61 75 6c 74 3a 0a 09 09  k;...default:...
cac0: 09 2f 2a 20 4f 74 68 65 72 77 69 73 65 2c 20 6d  ./* Otherwise, m
cad0: 6f 64 69 66 79 20 72 6f 75 74 65 73 20 2a 2f 0a  odify routes */.
cae0: 09 09 09 72 65 74 76 61 6c 20 3d 20 74 75 61 70  ...retval = tuap
caf0: 69 5f 62 72 63 74 6c 5f 63 6f 6e 66 28 63 64 2c  i_brctl_conf(cd,
cb00: 20 69 6e 74 65 72 70 2c 20 6f 62 6a 63 2c 20 6f   interp, objc, o
cb10: 62 6a 76 2c 20 73 6f 63 6b 29 3b 0a 0a 09 09 09  bjv, sock);.....
cb20: 62 72 65 61 6b 3b 0a 09 7d 0a 0a 09 2f 2a 20 43  break;..}.../* C
cb30: 6c 65 61 6e 75 70 20 2a 2f 0a 09 69 66 20 28 73  leanup */..if (s
cb40: 6f 63 6b 5f 76 34 20 21 3d 20 2d 31 29 20 7b 0a  ock_v4 != -1) {.
cb50: 09 09 63 6c 6f 73 65 28 73 6f 63 6b 5f 76 34 29  ..close(sock_v4)
cb60: 3b 0a 09 7d 0a 0a 09 69 66 20 28 73 6f 63 6b 5f  ;..}...if (sock_
cb70: 76 36 20 21 3d 20 2d 31 29 20 7b 0a 09 09 63 6c  v6 != -1) {...cl
cb80: 6f 73 65 28 73 6f 63 6b 5f 76 36 29 3b 0a 09 7d  ose(sock_v6);..}
cb90: 0a 0a 09 72 65 74 75 72 6e 28 72 65 74 76 61 6c  ...return(retval
cba0: 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 69 6e 74  );.}..static int
cbb0: 20 74 75 61 70 69 5f 76 63 6f 6e 66 69 67 28 43   tuapi_vconfig(C
cbc0: 6c 69 65 6e 74 44 61 74 61 20 63 64 2c 20 54 63  lientData cd, Tc
cbd0: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
cbe0: 2c 20 69 6e 74 20 6f 62 6a 63 2c 20 54 63 6c 5f  , int objc, Tcl_
cbf0: 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
cc00: 5d 29 20 7b 0a 09 69 6e 74 20 73 6f 63 6b 5f 76  ]) {..int sock_v
cc10: 34 2c 20 73 6f 63 6b 5f 76 36 2c 20 73 6f 63 6b  4, sock_v6, sock
cc20: 3b 0a 09 69 6e 74 20 72 65 74 76 61 6c 20 3d 20  ;..int retval = 
cc30: 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 09 73 6f 63  TCL_ERROR;...soc
cc40: 6b 20 3d 20 74 75 61 70 69 5f 69 6e 74 65 72 6e  k = tuapi_intern
cc50: 61 6c 5f 67 65 74 73 6f 63 6b 28 26 73 6f 63 6b  al_getsock(&sock
cc60: 5f 76 34 2c 20 26 73 6f 63 6b 5f 76 36 29 3b 0a  _v4, &sock_v6);.
cc70: 09 69 66 20 28 73 6f 63 6b 20 3d 3d 20 2d 31 29  .if (sock == -1)
cc80: 20 7b 0a 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52   {...Tcl_SetObjR
cc90: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63  esult(interp, Tc
cca0: 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22  l_NewStringObj("
ccb0: 75 6e 61 62 6c 65 20 74 6f 20 63 72 65 61 74 65  unable to create
ccc0: 20 73 6f 63 6b 65 74 22 2c 20 2d 31 29 29 3b 0a   socket", -1));.
ccd0: 0a 09 09 72 65 74 75 72 6e 28 54 43 4c 5f 45 52  ...return(TCL_ER
cce0: 52 4f 52 29 3b 0a 09 7d 0a 0a 09 54 63 6c 5f 53  ROR);..}...Tcl_S
ccf0: 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
cd00: 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e  rp, Tcl_NewStrin
cd10: 67 4f 62 6a 28 22 6e 6f 74 20 69 6d 70 6c 65 6d  gObj("not implem
cd20: 65 6e 74 65 64 22 2c 20 2d 31 29 29 3b 0a 0a 09  ented", -1));...
cd30: 2f 2a 20 43 6c 65 61 6e 75 70 20 2a 2f 0a 09 69  /* Cleanup */..i
cd40: 66 20 28 73 6f 63 6b 5f 76 34 20 21 3d 20 2d 31  f (sock_v4 != -1
cd50: 29 20 7b 0a 09 09 63 6c 6f 73 65 28 73 6f 63 6b  ) {...close(sock
cd60: 5f 76 34 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 73  _v4);..}...if (s
cd70: 6f 63 6b 5f 76 36 20 21 3d 20 2d 31 29 20 7b 0a  ock_v6 != -1) {.
cd80: 09 09 63 6c 6f 73 65 28 73 6f 63 6b 5f 76 36 29  ..close(sock_v6)
cd90: 3b 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 28 72 65  ;..}...return(re
cda0: 74 76 61 6c 29 3b 0a 7d 0a 0a 73 74 61 74 69 63  tval);.}..static
cdb0: 20 69 6e 74 20 74 75 61 70 69 5f 73 74 74 79 28   int tuapi_stty(
cdc0: 43 6c 69 65 6e 74 44 61 74 61 20 63 64 2c 20 54  ClientData cd, T
cdd0: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
cde0: 70 2c 20 69 6e 74 20 6f 62 6a 63 2c 20 54 63 6c  p, int objc, Tcl
cdf0: 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
ce00: 5b 5d 29 20 7b 0a 09 54 63 6c 5f 4f 62 6a 20 2a  []) {..Tcl_Obj *
ce10: 6f 62 6a 2c 20 2a 72 65 74 6f 62 6a 20 3d 20 4e  obj, *retobj = N
ce20: 55 4c 4c 3b 0a 09 73 74 72 75 63 74 20 74 65 72  ULL;..struct ter
ce30: 6d 69 6f 73 20 74 65 72 6d 69 6e 61 6c 5f 69 6e  mios terminal_in
ce40: 66 6f 72 6d 61 74 69 6f 6e 3b 0a 09 73 74 72 75  formation;..stru
ce50: 63 74 20 77 69 6e 73 69 7a 65 20 74 65 72 6d 69  ct winsize termi
ce60: 6e 61 6c 5f 73 69 7a 65 3b 0a 09 75 6e 73 69 67  nal_size;..unsig
ce70: 6e 65 64 20 6c 6f 6e 67 20 6f 62 6a 5f 68 61 73  ned long obj_has
ce80: 68 3b 0a 09 69 6e 74 20 66 64 2c 20 69 64 78 3b  h;..int fd, idx;
ce90: 0a 09 69 6e 74 20 69 6f 63 74 6c 5f 72 65 74 3b  ..int ioctl_ret;
cea0: 0a 09 69 6e 74 20 72 65 74 76 61 6c 20 3d 20 54  ..int retval = T
ceb0: 43 4c 5f 4f 4b 3b 0a 0a 09 66 64 20 3d 20 53 54  CL_OK;...fd = ST
cec0: 44 49 4e 5f 46 49 4c 45 4e 4f 3b 0a 0a 09 66 6f  DIN_FILENO;...fo
ced0: 72 20 28 69 64 78 20 3d 20 31 3b 20 69 64 78 20  r (idx = 1; idx 
cee0: 3c 20 6f 62 6a 63 3b 20 69 64 78 2b 2b 29 20 7b  < objc; idx++) {
cef0: 0a 09 09 6f 62 6a 20 3d 20 6f 62 6a 76 5b 69 64  ...obj = objv[id
cf00: 78 5d 3b 0a 09 09 6f 62 6a 5f 68 61 73 68 20 3d  x];...obj_hash =
cf10: 20 74 75 61 70 69 5f 69 6e 74 65 72 6e 61 6c 5f   tuapi_internal_
cf20: 73 69 6d 70 6c 65 68 61 73 68 5f 6f 62 6a 28 6f  simplehash_obj(o
cf30: 62 6a 29 3b 0a 0a 09 09 73 77 69 74 63 68 20 28  bj);....switch (
cf40: 6f 62 6a 5f 68 61 73 68 29 20 7b 0a 09 09 09 63  obj_hash) {....c
cf50: 61 73 65 20 30 78 65 37 61 37 64 36 35 3a 20 2f  ase 0xe7a7d65: /
cf60: 2a 20 73 69 7a 65 20 2a 2f 0a 09 09 09 09 69 6f  * size */.....io
cf70: 63 74 6c 5f 72 65 74 20 3d 20 69 6f 63 74 6c 28  ctl_ret = ioctl(
cf80: 66 64 2c 20 54 49 4f 43 47 57 49 4e 53 5a 2c 20  fd, TIOCGWINSZ, 
cf90: 26 74 65 72 6d 69 6e 61 6c 5f 73 69 7a 65 29 3b  &terminal_size);
cfa0: 0a 09 09 09 09 69 66 20 28 69 6f 63 74 6c 5f 72  .....if (ioctl_r
cfb0: 65 74 20 21 3d 20 30 29 20 7b 0a 09 09 09 09 09  et != 0) {......
cfc0: 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
cfd0: 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77  (interp, Tcl_New
cfe0: 53 74 72 69 6e 67 4f 62 6a 28 22 69 6f 63 74 6c  StringObj("ioctl
cff0: 20 66 61 69 6c 65 64 22 2c 20 2d 31 29 29 3b 0a   failed", -1));.
d000: 0a 09 09 09 09 09 72 65 74 75 72 6e 28 54 43 4c  ......return(TCL
d010: 5f 45 52 52 4f 52 29 3b 0a 09 09 09 09 7d 0a 0a  _ERROR);.....}..
d020: 09 09 09 09 69 66 20 28 72 65 74 6f 62 6a 20 3d  ....if (retobj =
d030: 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 09 09 09 72  = NULL) {......r
d040: 65 74 6f 62 6a 20 3d 20 54 63 6c 5f 4e 65 77 4f  etobj = Tcl_NewO
d050: 62 6a 28 29 3b 0a 09 09 09 09 7d 0a 0a 09 09 09  bj();.....}.....
d060: 09 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65  .Tcl_ListObjAppe
d070: 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70  ndElement(interp
d080: 2c 20 72 65 74 6f 62 6a 2c 20 54 63 6c 5f 4e 65  , retobj, Tcl_Ne
d090: 77 4c 6f 6e 67 4f 62 6a 28 74 65 72 6d 69 6e 61  wLongObj(termina
d0a0: 6c 5f 73 69 7a 65 2e 77 73 5f 72 6f 77 29 29 3b  l_size.ws_row));
d0b0: 0a 09 09 09 09 54 63 6c 5f 4c 69 73 74 4f 62 6a  .....Tcl_ListObj
d0c0: 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e  AppendElement(in
d0d0: 74 65 72 70 2c 20 72 65 74 6f 62 6a 2c 20 54 63  terp, retobj, Tc
d0e0: 6c 5f 4e 65 77 4c 6f 6e 67 4f 62 6a 28 74 65 72  l_NewLongObj(ter
d0f0: 6d 69 6e 61 6c 5f 73 69 7a 65 2e 77 73 5f 63 6f  minal_size.ws_co
d100: 6c 29 29 3b 0a 0a 09 09 09 09 62 72 65 61 6b 3b  l));......break;
d110: 0a 09 09 09 63 61 73 65 20 30 78 35 62 63 62 30  ....case 0x5bcb0
d120: 66 37 3a 20 2f 2a 20 2d 72 61 77 20 2a 2f 0a 09  f7: /* -raw */..
d130: 09 09 63 61 73 65 20 30 78 31 63 62 30 66 37 3a  ..case 0x1cb0f7:
d140: 20 2f 2a 20 72 61 77 20 2a 2f 0a 09 09 09 63 61   /* raw */....ca
d150: 73 65 20 30 78 64 63 62 38 66 35 36 66 3a 20 2f  se 0xdcb8f56f: /
d160: 2a 20 2d 65 63 68 6f 20 2a 2f 0a 09 09 09 63 61  * -echo */....ca
d170: 73 65 20 30 78 63 62 38 66 34 36 66 3a 20 2f 2a  se 0xcb8f46f: /*
d180: 20 65 63 68 6f 20 2a 2f 0a 09 09 09 09 69 6f 63   echo */.....ioc
d190: 74 6c 5f 72 65 74 20 3d 20 69 6f 63 74 6c 28 66  tl_ret = ioctl(f
d1a0: 64 2c 20 54 43 47 45 54 53 2c 20 26 74 65 72 6d  d, TCGETS, &term
d1b0: 69 6e 61 6c 5f 69 6e 66 6f 72 6d 61 74 69 6f 6e  inal_information
d1c0: 29 3b 0a 09 09 09 09 69 66 20 28 69 6f 63 74 6c  );.....if (ioctl
d1d0: 5f 72 65 74 20 21 3d 20 30 29 20 7b 0a 09 09 09  _ret != 0) {....
d1e0: 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75  ..Tcl_SetObjResu
d1f0: 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e  lt(interp, Tcl_N
d200: 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 69 6f 63  ewStringObj("ioc
d210: 74 6c 20 66 61 69 6c 65 64 22 2c 20 2d 31 29 29  tl failed", -1))
d220: 3b 0a 0a 09 09 09 09 09 72 65 74 75 72 6e 28 54  ;.......return(T
d230: 43 4c 5f 45 52 52 4f 52 29 3b 0a 09 09 09 09 7d  CL_ERROR);.....}
d240: 0a 0a 09 09 09 09 73 77 69 74 63 68 20 28 6f 62  ......switch (ob
d250: 6a 5f 68 61 73 68 29 20 7b 0a 09 09 09 09 09 63  j_hash) {......c
d260: 61 73 65 20 30 78 35 62 63 62 30 66 37 3a 20 2f  ase 0x5bcb0f7: /
d270: 2a 20 2d 72 61 77 20 2a 2f 0a 09 09 09 09 09 09  * -raw */.......
d280: 74 65 72 6d 69 6e 61 6c 5f 69 6e 66 6f 72 6d 61  terminal_informa
d290: 74 69 6f 6e 2e 63 5f 69 66 6c 61 67 20 7c 3d 20  tion.c_iflag |= 
d2a0: 42 52 4b 49 4e 54 20 7c 20 49 47 4e 50 41 52 20  BRKINT | IGNPAR 
d2b0: 7c 20 49 53 54 52 49 50 20 7c 20 49 43 52 4e 4c  | ISTRIP | ICRNL
d2c0: 20 7c 20 49 58 4f 4e 3b 0a 09 09 09 09 09 09 74   | IXON;.......t
d2d0: 65 72 6d 69 6e 61 6c 5f 69 6e 66 6f 72 6d 61 74  erminal_informat
d2e0: 69 6f 6e 2e 63 5f 6f 66 6c 61 67 20 7c 3d 20 4f  ion.c_oflag |= O
d2f0: 50 4f 53 54 3b 0a 09 09 09 09 09 09 74 65 72 6d  POST;.......term
d300: 69 6e 61 6c 5f 69 6e 66 6f 72 6d 61 74 69 6f 6e  inal_information
d310: 2e 63 5f 6c 66 6c 61 67 20 7c 3d 20 49 53 49 47  .c_lflag |= ISIG
d320: 20 7c 20 49 43 41 4e 4f 4e 3b 0a 23 69 66 20 56   | ICANON;.#if V
d330: 4d 49 4e 20 3d 3d 20 56 45 4f 46 0a 09 09 09 09  MIN == VEOF.....
d340: 09 09 74 65 72 6d 69 6e 61 6c 5f 69 6e 66 6f 72  ..terminal_infor
d350: 6d 61 74 69 6f 6e 2e 63 5f 63 63 5b 56 45 4f 46  mation.c_cc[VEOF
d360: 5d 20 3d 20 43 45 4f 46 3b 0a 23 65 6e 64 69 66  ] = CEOF;.#endif
d370: 0a 23 69 66 20 56 54 49 4d 45 20 3d 3d 20 56 45  .#if VTIME == VE
d380: 4f 4c 0a 09 09 09 09 09 09 74 65 72 6d 69 6e 61  OL.......termina
d390: 6c 5f 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 63 5f  l_information.c_
d3a0: 63 63 5b 56 45 4f 4c 5d 20 3d 20 43 45 4f 4c 3b  cc[VEOL] = CEOL;
d3b0: 0a 23 65 6e 64 69 66 0a 09 09 09 09 09 09 62 72  .#endif.......br
d3c0: 65 61 6b 3b 0a 09 09 09 09 09 63 61 73 65 20 30  eak;......case 0
d3d0: 78 31 63 62 30 66 37 3a 20 2f 2a 20 72 61 77 20  x1cb0f7: /* raw 
d3e0: 2a 2f 0a 09 09 09 09 09 09 74 65 72 6d 69 6e 61  */.......termina
d3f0: 6c 5f 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 63 5f  l_information.c_
d400: 69 66 6c 61 67 20 26 3d 20 7e 28 49 47 4e 42 52  iflag &= ~(IGNBR
d410: 4b 20 7c 20 42 52 4b 49 4e 54 20 7c 20 50 41 52  K | BRKINT | PAR
d420: 4d 52 4b 20 7c 20 49 53 54 52 49 50 20 7c 20 49  MRK | ISTRIP | I
d430: 4e 4c 43 52 20 7c 20 49 47 4e 43 52 20 7c 20 49  NLCR | IGNCR | I
d440: 43 52 4e 4c 20 7c 20 49 58 4f 4e 29 3b 0a 09 09  CRNL | IXON);...
d450: 09 09 09 09 74 65 72 6d 69 6e 61 6c 5f 69 6e 66  ....terminal_inf
d460: 6f 72 6d 61 74 69 6f 6e 2e 63 5f 6f 66 6c 61 67  ormation.c_oflag
d470: 20 26 3d 20 7e 4f 50 4f 53 54 3b 0a 09 09 09 09   &= ~OPOST;.....
d480: 09 09 74 65 72 6d 69 6e 61 6c 5f 69 6e 66 6f 72  ..terminal_infor
d490: 6d 61 74 69 6f 6e 2e 63 5f 6c 66 6c 61 67 20 26  mation.c_lflag &
d4a0: 3d 20 7e 28 49 53 49 47 20 7c 20 49 43 41 4e 4f  = ~(ISIG | ICANO
d4b0: 4e 29 3b 0a 09 09 09 09 09 09 74 65 72 6d 69 6e  N);.......termin
d4c0: 61 6c 5f 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 63  al_information.c
d4d0: 5f 63 63 5b 56 4d 49 4e 5d 20 3d 20 31 3b 0a 09  _cc[VMIN] = 1;..
d4e0: 09 09 09 09 09 74 65 72 6d 69 6e 61 6c 5f 69 6e  .....terminal_in
d4f0: 66 6f 72 6d 61 74 69 6f 6e 2e 63 5f 63 63 5b 56  formation.c_cc[V
d500: 54 49 4d 45 5d 20 3d 20 30 3b 0a 09 09 09 09 09  TIME] = 0;......
d510: 09 62 72 65 61 6b 3b 0a 09 09 09 09 09 63 61 73  .break;......cas
d520: 65 20 30 78 64 63 62 38 66 35 36 66 3a 20 2f 2a  e 0xdcb8f56f: /*
d530: 20 2d 65 63 68 6f 20 2a 2f 0a 09 09 09 09 09 09   -echo */.......
d540: 74 65 72 6d 69 6e 61 6c 5f 69 6e 66 6f 72 6d 61  terminal_informa
d550: 74 69 6f 6e 2e 63 5f 6c 66 6c 61 67 20 26 3d 20  tion.c_lflag &= 
d560: 7e 45 43 48 4f 3b 0a 09 09 09 09 09 09 62 72 65  ~ECHO;.......bre
d570: 61 6b 3b 0a 09 09 09 09 09 63 61 73 65 20 30 78  ak;......case 0x
d580: 63 62 38 66 34 36 66 3a 20 2f 2a 20 65 63 68 6f  cb8f46f: /* echo
d590: 20 2a 2f 0a 09 09 09 09 09 09 74 65 72 6d 69 6e   */.......termin
d5a0: 61 6c 5f 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 63  al_information.c
d5b0: 5f 6c 66 6c 61 67 20 7c 3d 20 45 43 48 4f 3b 0a  _lflag |= ECHO;.
d5c0: 09 09 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09  ......break;....
d5d0: 09 7d 0a 0a 09 09 09 09 69 6f 63 74 6c 5f 72 65  .}......ioctl_re
d5e0: 74 20 3d 20 69 6f 63 74 6c 28 66 64 2c 20 54 43  t = ioctl(fd, TC
d5f0: 53 45 54 53 2c 20 26 74 65 72 6d 69 6e 61 6c 5f  SETS, &terminal_
d600: 69 6e 66 6f 72 6d 61 74 69 6f 6e 29 3b 0a 09 09  information);...
d610: 09 09 69 66 20 28 69 6f 63 74 6c 5f 72 65 74 20  ..if (ioctl_ret 
d620: 21 3d 20 30 29 20 7b 0a 09 09 09 09 09 54 63 6c  != 0) {......Tcl
d630: 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e  _SetObjResult(in
d640: 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72  terp, Tcl_NewStr
d650: 69 6e 67 4f 62 6a 28 22 69 6f 63 74 6c 20 66 61  ingObj("ioctl fa
d660: 69 6c 65 64 22 2c 20 2d 31 29 29 3b 0a 0a 09 09  iled", -1));....
d670: 09 09 09 72 65 74 75 72 6e 28 54 43 4c 5f 45 52  ...return(TCL_ER
d680: 52 4f 52 29 3b 0a 09 09 09 09 7d 0a 0a 09 09 09  ROR);.....}.....
d690: 09 62 72 65 61 6b 3b 0a 09 09 09 64 65 66 61 75  .break;....defau
d6a0: 6c 74 3a 0a 09 09 09 09 54 63 6c 5f 53 65 74 4f  lt:.....Tcl_SetO
d6b0: 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  bjResult(interp,
d6c0: 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62   Tcl_NewStringOb
d6d0: 6a 28 22 73 75 62 63 6f 6d 6d 61 6e 64 20 6e 6f  j("subcommand no
d6e0: 74 20 69 6d 70 6c 65 6d 65 6e 74 65 64 22 2c 20  t implemented", 
d6f0: 2d 31 29 29 3b 0a 09 09 09 09 72 65 74 75 72 6e  -1));.....return
d700: 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 09 09 7d  (TCL_ERROR);...}
d710: 0a 09 7d 0a 0a 09 69 66 20 28 72 65 74 6f 62 6a  ..}...if (retobj
d720: 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 54 63   != NULL) {...Tc
d730: 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69  l_SetObjResult(i
d740: 6e 74 65 72 70 2c 20 72 65 74 6f 62 6a 29 3b 0a  nterp, retobj);.
d750: 09 7d 0a 0a 09 72 65 74 75 72 6e 28 72 65 74 76  .}...return(retv
d760: 61 6c 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 69  al);.}..static i
d770: 6e 74 20 74 75 61 70 69 5f 72 6c 69 6d 69 74 28  nt tuapi_rlimit(
d780: 43 6c 69 65 6e 74 44 61 74 61 20 63 64 2c 20 54  ClientData cd, T
d790: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
d7a0: 70 2c 20 69 6e 74 20 6f 62 6a 63 2c 20 54 63 6c  p, int objc, Tcl
d7b0: 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
d7c0: 5b 5d 29 20 7b 0a 09 54 63 6c 5f 4f 62 6a 20 2a  []) {..Tcl_Obj *
d7d0: 6f 70 65 72 61 74 69 6f 6e 5f 6f 62 6a 2c 20 2a  operation_obj, *
d7e0: 72 65 73 6f 75 72 63 65 5f 69 64 5f 6f 62 6a 2c  resource_id_obj,
d7f0: 20 2a 72 65 73 6f 75 72 63 65 5f 76 61 6c 5f 69   *resource_val_i
d800: 74 65 6d 5f 6f 62 6a 2c 20 2a 72 65 73 6f 75 72  tem_obj, *resour
d810: 63 65 5f 76 61 6c 5f 69 74 65 6d 76 61 6c 5f 6f  ce_val_itemval_o
d820: 62 6a 2c 20 2a 72 65 74 5f 6f 62 6a 3b 0a 09 73  bj, *ret_obj;..s
d830: 74 72 75 63 74 20 72 6c 69 6d 69 74 20 72 65 73  truct rlimit res
d840: 6f 75 72 63 65 5f 76 61 6c 3b 0a 09 54 63 6c 5f  ource_val;..Tcl_
d850: 57 69 64 65 49 6e 74 20 72 65 73 6f 75 72 63 65  WideInt resource
d860: 5f 76 61 6c 5f 69 74 65 6d 3b 0a 09 69 6e 74 20  _val_item;..int 
d870: 72 65 73 6f 75 72 63 65 5f 69 64 3b 0a 09 69 6e  resource_id;..in
d880: 74 20 72 6c 69 6d 69 74 5f 72 65 74 2c 20 74 63  t rlimit_ret, tc
d890: 6c 5f 72 65 74 3b 0a 0a 09 69 66 20 28 6f 62 6a  l_ret;...if (obj
d8a0: 63 20 3c 20 33 29 20 7b 0a 09 09 54 63 6c 5f 53  c < 3) {...Tcl_S
d8b0: 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
d8c0: 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e  rp, Tcl_NewStrin
d8d0: 67 4f 62 6a 28 22 77 72 6f 6e 67 20 23 20 61 72  gObj("wrong # ar
d8e0: 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
d8f0: 3a 3a 74 75 61 70 69 3a 3a 73 79 73 63 61 6c 6c  ::tuapi::syscall
d900: 3a 3a 72 6c 69 6d 69 74 20 6f 70 65 72 61 74 69  ::rlimit operati
d910: 6f 6e 20 72 65 73 6f 75 72 63 65 20 3f 76 61 6c  on resource ?val
d920: 75 65 3f 5c 22 22 2c 20 2d 31 29 29 3b 0a 0a 09  ue?\"", -1));...
d930: 09 72 65 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f  .return(TCL_ERRO
d940: 52 29 3b 0a 09 7d 0a 0a 09 6f 70 65 72 61 74 69  R);..}...operati
d950: 6f 6e 5f 6f 62 6a 20 3d 20 6f 62 6a 76 5b 31 5d  on_obj = objv[1]
d960: 3b 0a 09 72 65 73 6f 75 72 63 65 5f 69 64 5f 6f  ;..resource_id_o
d970: 62 6a 20 3d 20 6f 62 6a 76 5b 32 5d 3b 0a 0a 09  bj = objv[2];...
d980: 73 77 69 74 63 68 20 28 74 75 61 70 69 5f 69 6e  switch (tuapi_in
d990: 74 65 72 6e 61 6c 5f 73 69 6d 70 6c 65 68 61 73  ternal_simplehas
d9a0: 68 5f 6f 62 6a 28 72 65 73 6f 75 72 63 65 5f 69  h_obj(resource_i
d9b0: 64 5f 6f 62 6a 29 29 20 7b 0a 09 09 63 61 73 65  d_obj)) {...case
d9c0: 20 30 78 32 30 64 33 4c 55 3a 20 2f 2a 20 41 53   0x20d3LU: /* AS
d9d0: 20 2a 2f 0a 09 09 09 72 65 73 6f 75 72 63 65 5f   */....resource_
d9e0: 69 64 20 3d 20 52 4c 49 4d 49 54 5f 41 53 3b 0a  id = RLIMIT_AS;.
d9f0: 09 09 09 62 72 65 61 6b 3b 0a 09 09 63 61 73 65  ...break;...case
da00: 20 30 78 38 37 33 65 39 34 35 4c 55 3a 20 2f 2a   0x873e945LU: /*
da10: 20 43 4f 52 45 20 2a 2f 0a 09 09 09 72 65 73 6f   CORE */....reso
da20: 75 72 63 65 5f 69 64 20 3d 20 52 4c 49 4d 49 54  urce_id = RLIMIT
da30: 5f 43 4f 52 45 3b 0a 09 09 09 62 72 65 61 6b 3b  _CORE;....break;
da40: 0a 09 09 63 61 73 65 20 30 78 31 30 65 38 35 35  ...case 0x10e855
da50: 4c 55 3a 20 2f 2a 20 43 50 55 20 2a 2f 0a 09 09  LU: /* CPU */...
da60: 09 72 65 73 6f 75 72 63 65 5f 69 64 20 3d 20 52  .resource_id = R
da70: 4c 49 4d 49 54 5f 43 50 55 3b 0a 09 09 09 62 72  LIMIT_CPU;....br
da80: 65 61 6b 3b 0a 09 09 63 61 73 65 20 30 78 38 39  eak;...case 0x89
da90: 30 36 61 34 31 4c 55 3a 20 2f 2a 20 44 41 54 41  06a41LU: /* DATA
daa0: 20 2a 2f 0a 09 09 09 72 65 73 6f 75 72 63 65 5f   */....resource_
dab0: 69 64 20 3d 20 52 4c 49 4d 49 54 5f 44 41 54 41  id = RLIMIT_DATA
dac0: 3b 0a 09 09 09 62 72 65 61 6b 3b 0a 09 09 63 61  ;....break;...ca
dad0: 73 65 20 30 78 36 61 37 32 36 66 34 35 4c 55 3a  se 0x6a726f45LU:
dae0: 20 2f 2a 20 46 53 49 5a 45 20 2a 2f 0a 09 09 09   /* FSIZE */....
daf0: 72 65 73 6f 75 72 63 65 5f 69 64 20 3d 20 52 4c  resource_id = RL
db00: 49 4d 49 54 5f 46 53 49 5a 45 3b 0a 09 09 09 62  IMIT_FSIZE;....b
db10: 72 65 61 6b 3b 0a 23 69 66 64 65 66 20 52 4c 49  reak;.#ifdef RLI
db20: 4d 49 54 5f 4c 4f 43 4b 53 0a 09 09 63 61 73 65  MIT_LOCKS...case
db30: 20 30 78 63 39 66 30 65 37 64 33 4c 55 3a 20 2f   0xc9f0e7d3LU: /
db40: 2a 20 4c 4f 43 4b 53 20 2a 2f 0a 09 09 09 72 65  * LOCKS */....re
db50: 73 6f 75 72 63 65 5f 69 64 20 3d 20 52 4c 49 4d  source_id = RLIM
db60: 49 54 5f 4c 4f 43 4b 53 3b 0a 09 09 09 62 72 65  IT_LOCKS;....bre
db70: 61 6b 3b 0a 23 65 6e 64 69 66 0a 09 09 63 61 73  ak;.#endif...cas
db80: 65 20 30 78 64 39 30 38 66 37 63 62 4c 55 3a 20  e 0xd908f7cbLU: 
db90: 2f 2a 20 4d 45 4d 4c 4f 43 4b 20 2a 2f 0a 09 09  /* MEMLOCK */...
dba0: 09 72 65 73 6f 75 72 63 65 5f 69 64 20 3d 20 52  .resource_id = R
dbb0: 4c 49 4d 49 54 5f 4d 45 4d 4c 4f 43 4b 3b 0a 09  LIMIT_MEMLOCK;..
dbc0: 09 09 62 72 65 61 6b 3b 0a 23 69 66 64 65 66 20  ..break;.#ifdef 
dbd0: 52 4c 49 4d 49 54 5f 4d 53 47 51 55 45 55 45 0a  RLIMIT_MSGQUEUE.
dbe0: 09 09 63 61 73 65 20 30 78 35 37 31 36 37 34 34  ..case 0x5716744
dbf0: 35 4c 55 3a 20 2f 2a 20 4d 53 47 51 55 45 55 45  5LU: /* MSGQUEUE
dc00: 20 2a 2f 0a 09 09 09 72 65 73 6f 75 72 63 65 5f   */....resource_
dc10: 69 64 20 3d 20 52 4c 49 4d 49 54 5f 4d 53 47 51  id = RLIMIT_MSGQ
dc20: 55 45 55 45 3b 0a 09 09 09 62 72 65 61 6b 3b 0a  UEUE;....break;.
dc30: 23 65 6e 64 69 66 0a 09 09 63 61 73 65 20 30 78  #endif...case 0x
dc40: 39 64 32 36 31 63 35 4c 55 3a 20 2f 2a 20 4e 49  9d261c5LU: /* NI
dc50: 43 45 20 2a 2f 0a 09 09 09 72 65 73 6f 75 72 63  CE */....resourc
dc60: 65 5f 69 64 20 3d 20 52 4c 49 4d 49 54 5f 4e 49  e_id = RLIMIT_NI
dc70: 43 45 3b 0a 09 09 09 62 72 65 61 6b 3b 0a 09 09  CE;....break;...
dc80: 63 61 73 65 20 30 78 66 38 64 33 35 63 34 35 4c  case 0xf8d35c45L
dc90: 55 3a 20 2f 2a 20 4e 4f 46 49 4c 45 20 2a 2f 0a  U: /* NOFILE */.
dca0: 09 09 63 61 73 65 20 30 78 66 38 64 32 36 34 34  ..case 0xf8d2644
dcb0: 35 4c 55 3a 20 2f 2a 20 4f 46 49 4c 45 20 2a 2f  5LU: /* OFILE */
dcc0: 0a 09 09 09 72 65 73 6f 75 72 63 65 5f 69 64 20  ....resource_id 
dcd0: 3d 20 52 4c 49 4d 49 54 5f 4e 4f 46 49 4c 45 3b  = RLIMIT_NOFILE;
dce0: 0a 09 09 09 62 72 65 61 6b 3b 0a 09 09 63 61 73  ....break;...cas
dcf0: 65 20 30 78 65 61 31 34 61 35 63 33 4c 55 3a 20  e 0xea14a5c3LU: 
dd00: 2f 2a 20 4e 50 52 4f 43 20 2a 2f 0a 09 09 09 72  /* NPROC */....r
dd10: 65 73 6f 75 72 63 65 5f 69 64 20 3d 20 52 4c 49  esource_id = RLI
dd20: 4d 49 54 5f 4e 50 52 4f 43 3b 0a 09 09 09 62 72  MIT_NPROC;....br
dd30: 65 61 6b 3b 0a 09 09 63 61 73 65 20 30 78 31 34  eak;...case 0x14
dd40: 61 39 64 33 4c 55 3a 20 2f 2a 20 52 53 53 20 2a  a9d3LU: /* RSS *
dd50: 2f 0a 09 09 09 72 65 73 6f 75 72 63 65 5f 69 64  /....resource_id
dd60: 20 3d 20 52 4c 49 4d 49 54 5f 52 53 53 3b 0a 09   = RLIMIT_RSS;..
dd70: 09 09 62 72 65 61 6b 3b 0a 23 69 66 64 65 66 20  ..break;.#ifdef 
dd80: 52 4c 49 4d 49 54 5f 52 54 50 52 49 4f 0a 09 09  RLIMIT_RTPRIO...
dd90: 63 61 73 65 20 30 78 34 61 31 35 65 65 34 66 4c  case 0x4a15ee4fL
dda0: 55 3a 20 2f 2a 20 52 54 50 52 49 4f 20 2a 2f 0a  U: /* RTPRIO */.
ddb0: 09 09 09 72 65 73 6f 75 72 63 65 5f 69 64 20 3d  ...resource_id =
ddc0: 20 52 4c 49 4d 49 54 5f 52 54 50 52 49 4f 3b 0a   RLIMIT_RTPRIO;.
ddd0: 09 09 09 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66  ...break;.#endif
dde0: 0a 23 69 66 64 65 66 20 52 4c 49 4d 49 54 5f 52  .#ifdef RLIMIT_R
ddf0: 54 54 49 4d 45 0a 09 09 63 61 73 65 20 30 78 34  TTIME...case 0x4
de00: 61 39 33 32 63 34 35 4c 55 3a 20 2f 2a 20 52 54  a932c45LU: /* RT
de10: 54 49 4d 45 20 2a 2f 0a 09 09 09 72 65 73 6f 75  TIME */....resou
de20: 72 63 65 5f 69 64 20 3d 20 52 4c 49 4d 49 54 5f  rce_id = RLIMIT_
de30: 52 54 54 49 4d 45 3b 0a 09 09 09 62 72 65 61 6b  RTTIME;....break
de40: 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20  ;.#endif.#ifdef 
de50: 52 4c 49 4d 49 54 5f 53 49 47 50 45 4e 44 49 4e  RLIMIT_SIGPENDIN
de60: 47 0a 09 09 63 61 73 65 20 30 78 32 66 33 39 30  G...case 0x2f390
de70: 33 34 37 4c 55 3a 20 2f 2a 20 53 49 47 50 45 4e  347LU: /* SIGPEN
de80: 44 49 4e 47 20 2a 2f 0a 09 09 09 72 65 73 6f 75  DING */....resou
de90: 72 63 65 5f 69 64 20 3d 20 52 4c 49 4d 49 54 5f  rce_id = RLIMIT_
dea0: 53 49 47 50 45 4e 44 49 4e 47 3b 0a 09 09 09 62  SIGPENDING;....b
deb0: 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 09 09 63  reak;.#endif...c
dec0: 61 73 65 20 30 78 33 61 39 30 36 33 34 62 4c 55  ase 0x3a90634bLU
ded0: 3a 20 2f 2a 20 53 54 41 43 4b 20 2a 2f 0a 09 09  : /* STACK */...
dee0: 09 72 65 73 6f 75 72 63 65 5f 69 64 20 3d 20 52  .resource_id = R
def0: 4c 49 4d 49 54 5f 53 54 41 43 4b 3b 0a 09 09 09  LIMIT_STACK;....
df00: 62 72 65 61 6b 3b 0a 09 09 64 65 66 61 75 6c 74  break;...default
df10: 3a 0a 09 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52  :....Tcl_SetObjR
df20: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63  esult(interp, Tc
df30: 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22  l_NewStringObj("
df40: 69 6e 76 61 6c 69 64 20 72 65 73 6f 75 72 63 65  invalid resource
df50: 22 2c 20 2d 31 29 29 3b 0a 0a 09 09 09 72 65 74  ", -1));.....ret
df60: 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a  urn(TCL_ERROR);.
df70: 09 7d 0a 0a 09 69 66 20 28 73 74 72 63 6d 70 28  .}...if (strcmp(
df80: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 70  Tcl_GetString(op
df90: 65 72 61 74 69 6f 6e 5f 6f 62 6a 29 2c 20 22 67  eration_obj), "g
dfa0: 65 74 22 29 20 3d 3d 20 30 29 20 7b 0a 09 09 69  et") == 0) {...i
dfb0: 66 20 28 6f 62 6a 63 20 21 3d 20 33 29 20 7b 0a  f (objc != 3) {.
dfc0: 09 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73  ...Tcl_SetObjRes
dfd0: 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ult(interp, Tcl_
dfe0: 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 77 72  NewStringObj("wr
dff0: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
e000: 6c 64 20 62 65 20 5c 22 3a 3a 74 75 61 70 69 3a  ld be \"::tuapi:
e010: 3a 73 79 73 63 61 6c 6c 3a 3a 72 6c 69 6d 69 74  :syscall::rlimit
e020: 20 67 65 74 20 72 65 73 6f 75 72 63 65 5c 22 22   get resource\""
e030: 2c 20 2d 31 29 29 3b 0a 0a 09 09 09 72 65 74 75  , -1));.....retu
e040: 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 09  rn(TCL_ERROR);..
e050: 09 7d 0a 0a 09 09 72 6c 69 6d 69 74 5f 72 65 74  .}....rlimit_ret
e060: 20 3d 20 67 65 74 72 6c 69 6d 69 74 28 72 65 73   = getrlimit(res
e070: 6f 75 72 63 65 5f 69 64 2c 20 26 72 65 73 6f 75  ource_id, &resou
e080: 72 63 65 5f 76 61 6c 29 3b 0a 09 09 69 66 20 28  rce_val);...if (
e090: 72 6c 69 6d 69 74 5f 72 65 74 20 21 3d 20 30 29  rlimit_ret != 0)
e0a0: 20 7b 0a 09 09 09 54 63 6c 5f 53 65 74 4f 62 6a   {....Tcl_SetObj
e0b0: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54  Result(interp, T
e0c0: 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28  cl_NewStringObj(
e0d0: 22 67 65 74 72 6c 69 6d 69 74 28 29 20 66 61 69  "getrlimit() fai
e0e0: 6c 65 64 22 2c 20 2d 31 29 29 3b 0a 0a 09 09 09  led", -1));.....
e0f0: 72 65 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52  return(TCL_ERROR
e100: 29 3b 0a 09 09 7d 0a 0a 09 09 72 65 74 5f 6f 62  );...}....ret_ob
e110: 6a 20 3d 20 54 63 6c 5f 4e 65 77 4f 62 6a 28 29  j = Tcl_NewObj()
e120: 3b 0a 09 09 54 63 6c 5f 4c 69 73 74 4f 62 6a 41  ;...Tcl_ListObjA
e130: 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74  ppendElement(int
e140: 65 72 70 2c 20 72 65 74 5f 6f 62 6a 2c 20 54 63  erp, ret_obj, Tc
e150: 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22  l_NewStringObj("
e160: 73 6f 66 74 22 2c 20 2d 31 29 29 3b 0a 09 09 54  soft", -1));...T
e170: 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64  cl_ListObjAppend
e180: 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20  Element(interp, 
e190: 72 65 74 5f 6f 62 6a 2c 20 54 63 6c 5f 4e 65 77  ret_obj, Tcl_New
e1a0: 57 69 64 65 49 6e 74 4f 62 6a 28 72 65 73 6f 75  WideIntObj(resou
e1b0: 72 63 65 5f 76 61 6c 2e 72 6c 69 6d 5f 63 75 72  rce_val.rlim_cur
e1c0: 29 29 3b 0a 09 09 54 63 6c 5f 4c 69 73 74 4f 62  ));...Tcl_ListOb
e1d0: 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69  jAppendElement(i
e1e0: 6e 74 65 72 70 2c 20 72 65 74 5f 6f 62 6a 2c 20  nterp, ret_obj, 
e1f0: 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a  Tcl_NewStringObj
e200: 28 22 68 61 72 64 22 2c 20 2d 31 29 29 3b 0a 09  ("hard", -1));..
e210: 09 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65  .Tcl_ListObjAppe
e220: 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70  ndElement(interp
e230: 2c 20 72 65 74 5f 6f 62 6a 2c 20 54 63 6c 5f 4e  , ret_obj, Tcl_N
e240: 65 77 57 69 64 65 49 6e 74 4f 62 6a 28 72 65 73  ewWideIntObj(res
e250: 6f 75 72 63 65 5f 76 61 6c 2e 72 6c 69 6d 5f 6d  ource_val.rlim_m
e260: 61 78 29 29 3b 0a 0a 09 09 54 63 6c 5f 53 65 74  ax));....Tcl_Set
e270: 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70  ObjResult(interp
e280: 2c 20 72 65 74 5f 6f 62 6a 29 3b 0a 0a 09 09 72  , ret_obj);....r
e290: 65 74 75 72 6e 28 54 43 4c 5f 4f 4b 29 3b 0a 09  eturn(TCL_OK);..
e2a0: 7d 0a 0a 09 69 66 20 28 73 74 72 63 6d 70 28 54  }...if (strcmp(T
e2b0: 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 70 65  cl_GetString(ope
e2c0: 72 61 74 69 6f 6e 5f 6f 62 6a 29 2c 20 22 73 65  ration_obj), "se
e2d0: 74 22 29 20 3d 3d 20 30 29 20 7b 0a 09 09 69 66  t") == 0) {...if
e2e0: 20 28 6f 62 6a 63 20 21 3d 20 34 29 20 7b 0a 09   (objc != 4) {..
e2f0: 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75  ..Tcl_SetObjResu
e300: 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e  lt(interp, Tcl_N
e310: 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 77 72 6f  ewStringObj("wro
e320: 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
e330: 64 20 62 65 20 5c 22 3a 3a 74 75 61 70 69 3a 3a  d be \"::tuapi::
e340: 73 79 73 63 61 6c 6c 3a 3a 72 6c 69 6d 69 74 20  syscall::rlimit 
e350: 73 65 74 20 72 65 73 6f 75 72 63 65 20 76 61 6c  set resource val
e360: 75 65 5c 22 22 2c 20 2d 31 29 29 3b 0a 0a 09 09  ue\"", -1));....
e370: 09 72 65 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f  .return(TCL_ERRO
e380: 52 29 3b 0a 09 09 7d 0a 0a 09 09 72 65 73 6f 75  R);...}....resou
e390: 72 63 65 5f 76 61 6c 5f 69 74 65 6d 5f 6f 62 6a  rce_val_item_obj
e3a0: 20 3d 20 6f 62 6a 76 5b 33 5d 3b 0a 0a 09 09 2f   = objv[3];..../
e3b0: 2a 20 44 65 74 65 72 6d 69 6e 65 20 69 66 20 77  * Determine if w
e3c0: 65 20 77 65 72 65 20 61 73 6b 65 64 20 74 6f 20  e were asked to 
e3d0: 73 65 74 20 74 6f 20 61 20 73 69 6d 70 6c 65 20  set to a simple 
e3e0: 76 61 6c 75 65 2c 20 69 6e 20 77 68 69 63 68 20  value, in which 
e3f0: 63 61 73 65 20 73 65 74 20 62 6f 74 68 20 68 61  case set both ha
e400: 72 64 20 61 6e 64 20 73 6f 66 74 20 6c 69 6d 69  rd and soft limi
e410: 74 73 20 2a 2f 0a 09 09 74 63 6c 5f 72 65 74 20  ts */...tcl_ret 
e420: 3d 20 54 63 6c 5f 47 65 74 57 69 64 65 49 6e 74  = Tcl_GetWideInt
e430: 46 72 6f 6d 4f 62 6a 28 4e 55 4c 4c 2c 20 72 65  FromObj(NULL, re
e440: 73 6f 75 72 63 65 5f 76 61 6c 5f 69 74 65 6d 5f  source_val_item_
e450: 6f 62 6a 2c 20 26 72 65 73 6f 75 72 63 65 5f 76  obj, &resource_v
e460: 61 6c 5f 69 74 65 6d 29 3b 0a 09 09 69 66 20 28  al_item);...if (
e470: 74 63 6c 5f 72 65 74 20 3d 3d 20 54 43 4c 5f 4f  tcl_ret == TCL_O
e480: 4b 29 20 7b 0a 09 09 09 72 65 73 6f 75 72 63 65  K) {....resource
e490: 5f 76 61 6c 2e 72 6c 69 6d 5f 63 75 72 20 3d 20  _val.rlim_cur = 
e4a0: 72 65 73 6f 75 72 63 65 5f 76 61 6c 5f 69 74 65  resource_val_ite
e4b0: 6d 3b 0a 09 09 09 72 65 73 6f 75 72 63 65 5f 76  m;....resource_v
e4c0: 61 6c 2e 72 6c 69 6d 5f 6d 61 78 20 3d 20 72 65  al.rlim_max = re
e4d0: 73 6f 75 72 63 65 5f 76 61 6c 5f 69 74 65 6d 3b  source_val_item;
e4e0: 0a 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 74  ...} else {....t
e4f0: 63 6c 5f 72 65 74 20 3d 20 54 63 6c 5f 44 69 63  cl_ret = Tcl_Dic
e500: 74 4f 62 6a 47 65 74 28 4e 55 4c 4c 2c 20 72 65  tObjGet(NULL, re
e510: 73 6f 75 72 63 65 5f 76 61 6c 5f 69 74 65 6d 5f  source_val_item_
e520: 6f 62 6a 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69  obj, Tcl_NewStri
e530: 6e 67 4f 62 6a 28 22 73 6f 66 74 22 2c 20 2d 31  ngObj("soft", -1
e540: 29 2c 20 26 72 65 73 6f 75 72 63 65 5f 76 61 6c  ), &resource_val
e550: 5f 69 74 65 6d 76 61 6c 5f 6f 62 6a 29 3b 0a 09  _itemval_obj);..
e560: 09 09 69 66 20 28 74 63 6c 5f 72 65 74 20 21 3d  ..if (tcl_ret !=
e570: 20 54 43 4c 5f 4f 4b 29 20 7b 0a 09 09 09 09 54   TCL_OK) {.....T
e580: 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28  cl_SetObjResult(
e590: 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53  interp, Tcl_NewS
e5a0: 74 72 69 6e 67 4f 62 6a 28 22 69 6e 76 61 6c 69  tringObj("invali
e5b0: 64 20 72 65 71 75 65 73 74 22 2c 20 2d 31 29 29  d request", -1))
e5c0: 3b 0a 0a 09 09 09 09 72 65 74 75 72 6e 28 54 43  ;......return(TC
e5d0: 4c 5f 45 52 52 4f 52 29 3b 0a 09 09 09 7d 0a 0a  L_ERROR);....}..
e5e0: 09 09 09 74 63 6c 5f 72 65 74 20 3d 20 54 63 6c  ...tcl_ret = Tcl
e5f0: 5f 47 65 74 57 69 64 65 49 6e 74 46 72 6f 6d 4f  _GetWideIntFromO
e600: 62 6a 28 4e 55 4c 4c 2c 20 72 65 73 6f 75 72 63  bj(NULL, resourc
e610: 65 5f 76 61 6c 5f 69 74 65 6d 76 61 6c 5f 6f 62  e_val_itemval_ob
e620: 6a 2c 20 26 72 65 73 6f 75 72 63 65 5f 76 61 6c  j, &resource_val
e630: 5f 69 74 65 6d 29 3b 0a 09 09 09 69 66 20 28 74  _item);....if (t
e640: 63 6c 5f 72 65 74 20 21 3d 20 54 43 4c 5f 4f 4b  cl_ret != TCL_OK
e650: 29 20 7b 0a 09 09 09 09 54 63 6c 5f 53 65 74 4f  ) {.....Tcl_SetO
e660: 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  bjResult(interp,
e670: 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62   Tcl_NewStringOb
e680: 6a 28 22 69 6e 76 61 6c 69 64 20 72 65 71 75 65  j("invalid reque
e690: 73 74 22 2c 20 2d 31 29 29 3b 0a 0a 09 09 09 09  st", -1));......
e6a0: 72 65 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52  return(TCL_ERROR
e6b0: 29 3b 0a 09 09 09 7d 0a 0a 09 09 09 72 65 73 6f  );....}.....reso
e6c0: 75 72 63 65 5f 76 61 6c 2e 72 6c 69 6d 5f 63 75  urce_val.rlim_cu
e6d0: 72 20 3d 20 72 65 73 6f 75 72 63 65 5f 76 61 6c  r = resource_val
e6e0: 5f 69 74 65 6d 3b 0a 0a 09 09 09 74 63 6c 5f 72  _item;.....tcl_r
e6f0: 65 74 20 3d 20 54 63 6c 5f 44 69 63 74 4f 62 6a  et = Tcl_DictObj
e700: 47 65 74 28 4e 55 4c 4c 2c 20 72 65 73 6f 75 72  Get(NULL, resour
e710: 63 65 5f 76 61 6c 5f 69 74 65 6d 5f 6f 62 6a 2c  ce_val_item_obj,
e720: 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62   Tcl_NewStringOb
e730: 6a 28 22 68 61 72 64 22 2c 20 2d 31 29 2c 20 26  j("hard", -1), &
e740: 72 65 73 6f 75 72 63 65 5f 76 61 6c 5f 69 74 65  resource_val_ite
e750: 6d 76 61 6c 5f 6f 62 6a 29 3b 0a 09 09 09 69 66  mval_obj);....if
e760: 20 28 74 63 6c 5f 72 65 74 20 21 3d 20 54 43 4c   (tcl_ret != TCL
e770: 5f 4f 4b 29 20 7b 0a 09 09 09 09 54 63 6c 5f 53  _OK) {.....Tcl_S
e780: 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
e790: 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e  rp, Tcl_NewStrin
e7a0: 67 4f 62 6a 28 22 69 6e 76 61 6c 69 64 20 72 65  gObj("invalid re
e7b0: 71 75 65 73 74 22 2c 20 2d 31 29 29 3b 0a 0a 09  quest", -1));...
e7c0: 09 09 09 72 65 74 75 72 6e 28 54 43 4c 5f 45 52  ...return(TCL_ER
e7d0: 52 4f 52 29 3b 0a 09 09 09 7d 0a 0a 09 09 09 74  ROR);....}.....t
e7e0: 63 6c 5f 72 65 74 20 3d 20 54 63 6c 5f 47 65 74  cl_ret = Tcl_Get
e7f0: 57 69 64 65 49 6e 74 46 72 6f 6d 4f 62 6a 28 4e  WideIntFromObj(N
e800: 55 4c 4c 2c 20 72 65 73 6f 75 72 63 65 5f 76 61  ULL, resource_va
e810: 6c 5f 69 74 65 6d 76 61 6c 5f 6f 62 6a 2c 20 26  l_itemval_obj, &
e820: 72 65 73 6f 75 72 63 65 5f 76 61 6c 5f 69 74 65  resource_val_ite
e830: 6d 29 3b 0a 09 09 09 69 66 20 28 74 63 6c 5f 72  m);....if (tcl_r
e840: 65 74 20 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a  et != TCL_OK) {.
e850: 09 09 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65  ....Tcl_SetObjRe
e860: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c  sult(interp, Tcl
e870: 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 69  _NewStringObj("i
e880: 6e 76 61 6c 69 64 20 72 65 71 75 65 73 74 22 2c  nvalid request",
e890: 20 2d 31 29 29 3b 0a 0a 09 09 09 09 72 65 74 75   -1));......retu
e8a0: 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 09  rn(TCL_ERROR);..
e8b0: 09 09 7d 0a 0a 09 09 09 72 65 73 6f 75 72 63 65  ..}.....resource
e8c0: 5f 76 61 6c 2e 72 6c 69 6d 5f 6d 61 78 20 3d 20  _val.rlim_max = 
e8d0: 72 65 73 6f 75 72 63 65 5f 76 61 6c 5f 69 74 65  resource_val_ite
e8e0: 6d 3b 0a 09 09 7d 0a 0a 09 09 72 6c 69 6d 69 74  m;...}....rlimit
e8f0: 5f 72 65 74 20 3d 20 73 65 74 72 6c 69 6d 69 74  _ret = setrlimit
e900: 28 72 65 73 6f 75 72 63 65 5f 69 64 2c 20 26 72  (resource_id, &r
e910: 65 73 6f 75 72 63 65 5f 76 61 6c 29 3b 0a 09 09  esource_val);...
e920: 69 66 20 28 72 6c 69 6d 69 74 5f 72 65 74 20 21  if (rlimit_ret !
e930: 3d 20 30 29 20 7b 0a 09 09 09 54 63 6c 5f 53 65  = 0) {....Tcl_Se
e940: 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72  tObjResult(inter
e950: 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67  p, Tcl_NewString
e960: 4f 62 6a 28 22 73 65 74 72 6c 69 6d 69 74 28 29  Obj("setrlimit()
e970: 20 66 61 69 6c 65 64 22 2c 20 2d 31 29 29 3b 0a   failed", -1));.
e980: 0a 09 09 09 72 65 74 75 72 6e 28 54 43 4c 5f 45  ....return(TCL_E
e990: 52 52 4f 52 29 3b 0a 09 09 7d 0a 0a 09 09 72 65  RROR);...}....re
e9a0: 74 75 72 6e 28 54 43 4c 5f 4f 4b 29 3b 0a 09 7d  turn(TCL_OK);..}
e9b0: 0a 0a 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73  ...Tcl_SetObjRes
e9c0: 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ult(interp, Tcl_
e9d0: 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 69 6e  NewStringObj("in
e9e0: 76 61 6c 69 64 20 6f 70 65 72 61 74 69 6f 6e 22  valid operation"
e9f0: 2c 20 2d 31 29 29 3b 0a 0a 09 72 65 74 75 72 6e  , -1));...return
ea00: 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 7d 0a 0a  (TCL_ERROR);.}..
ea10: 73 74 61 74 69 63 20 69 6e 74 20 74 75 61 70 69  static int tuapi
ea20: 5f 6b 6c 6f 67 63 74 6c 28 43 6c 69 65 6e 74 44  _klogctl(ClientD
ea30: 61 74 61 20 63 64 2c 20 54 63 6c 5f 49 6e 74 65  ata cd, Tcl_Inte
ea40: 72 70 20 2a 69 6e 74 65 72 70 2c 20 69 6e 74 20  rp *interp, int 
ea50: 6f 62 6a 63 2c 20 54 63 6c 5f 4f 62 6a 20 2a 43  objc, Tcl_Obj *C
ea60: 4f 4e 53 54 20 6f 62 6a 76 5b 5d 29 20 7b 0a 09  ONST objv[]) {..
ea70: 54 63 6c 5f 4f 62 6a 20 2a 6f 70 65 72 61 74 69  Tcl_Obj *operati
ea80: 6f 6e 5f 6f 62 6a 3b 0a 09 63 68 61 72 20 2a 62  on_obj;..char *b
ea90: 75 66 3b 0a 09 69 6e 74 20 62 75 66 6c 65 6e 3b  uf;..int buflen;
eaa0: 0a 09 69 6e 74 20 6b 6c 6f 67 5f 72 65 74 3b 0a  ..int klog_ret;.
eab0: 0a 09 69 66 20 28 6f 62 6a 63 20 3c 20 32 29 20  ..if (objc < 2) 
eac0: 7b 0a 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65  {...Tcl_SetObjRe
ead0: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c  sult(interp, Tcl
eae0: 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 77  _NewStringObj("w
eaf0: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
eb00: 75 6c 64 20 62 65 20 5c 22 3a 3a 74 75 61 70 69  uld be \"::tuapi
eb10: 3a 3a 73 79 73 63 61 6c 6c 3a 3a 6b 6c 6f 67 63  ::syscall::klogc
eb20: 74 6c 20 6f 70 65 72 61 74 69 6f 6e 20 2e 2e 2e  tl operation ...
eb30: 5c 22 22 2c 20 2d 31 29 29 3b 0a 0a 09 09 72 65  \"", -1));....re
eb40: 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b  turn(TCL_ERROR);
eb50: 0a 09 7d 0a 0a 09 6b 6c 6f 67 5f 72 65 74 20 3d  ..}...klog_ret =
eb60: 20 6b 6c 6f 67 63 74 6c 28 53 59 53 4c 4f 47 5f   klogctl(SYSLOG_
eb70: 41 43 54 49 4f 4e 5f 4f 50 45 4e 2c 20 4e 55 4c  ACTION_OPEN, NUL
eb80: 4c 2c 20 30 29 3b 0a 09 69 66 20 28 6b 6c 6f 67  L, 0);..if (klog
eb90: 5f 72 65 74 20 21 3d 20 30 29 20 7b 0a 09 09 54  _ret != 0) {...T
eba0: 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28  cl_SetObjResult(
ebb0: 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53  interp, Tcl_NewS
ebc0: 74 72 69 6e 67 4f 62 6a 28 22 6b 6c 6f 67 63 74  tringObj("klogct
ebd0: 6c 28 53 59 53 4c 4f 47 5f 41 43 54 49 4f 4e 5f  l(SYSLOG_ACTION_
ebe0: 4f 50 45 4e 2c 20 2e 2e 2e 29 20 66 61 69 6c 65  OPEN, ...) faile
ebf0: 64 22 2c 20 2d 31 29 29 3b 0a 09 09 72 65 74 75  d", -1));...retu
ec00: 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 09  rn(TCL_ERROR);..
ec10: 7d 0a 0a 09 6f 70 65 72 61 74 69 6f 6e 5f 6f 62  }...operation_ob
ec20: 6a 20 3d 20 6f 62 6a 76 5b 31 5d 3b 0a 09 73 77  j = objv[1];..sw
ec30: 69 74 63 68 20 28 74 75 61 70 69 5f 69 6e 74 65  itch (tuapi_inte
ec40: 72 6e 61 6c 5f 73 69 6d 70 6c 65 68 61 73 68 5f  rnal_simplehash_
ec50: 6f 62 6a 28 6f 70 65 72 61 74 69 6f 6e 5f 6f 62  obj(operation_ob
ec60: 6a 29 29 20 7b 0a 09 09 63 61 73 65 20 30 78 65  j)) {...case 0xe
ec70: 35 39 37 30 65 34 4c 55 3a 20 2f 2a 20 72 65 61  5970e4LU: /* rea
ec80: 64 20 2a 2f 0a 09 09 09 62 75 66 6c 65 6e 20 3d  d */....buflen =
ec90: 20 32 35 36 20 2a 20 31 30 32 34 3b 0a 09 09 09   256 * 1024;....
eca0: 62 75 66 20 3d 20 6d 61 6c 6c 6f 63 28 62 75 66  buf = malloc(buf
ecb0: 6c 65 6e 29 3b 0a 09 09 09 69 66 20 28 62 75 66  len);....if (buf
ecc0: 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 09 09   == NULL) {.....
ecd0: 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
ece0: 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77  (interp, Tcl_New
ecf0: 53 74 72 69 6e 67 4f 62 6a 28 22 6d 61 6c 6c 6f  StringObj("mallo
ed00: 63 20 66 61 69 6c 65 64 20 21 22 2c 20 2d 31 29  c failed !", -1)
ed10: 29 3b 0a 0a 09 09 09 09 72 65 74 75 72 6e 28 54  );......return(T
ed20: 43 4c 5f 45 52 52 4f 52 29 3b 0a 09 09 09 7d 0a  CL_ERROR);....}.
ed30: 0a 09 09 09 6b 6c 6f 67 5f 72 65 74 20 3d 20 6b  ....klog_ret = k
ed40: 6c 6f 67 63 74 6c 28 53 59 53 4c 4f 47 5f 41 43  logctl(SYSLOG_AC
ed50: 54 49 4f 4e 5f 52 45 41 44 5f 41 4c 4c 2c 20 62  TION_READ_ALL, b
ed60: 75 66 2c 20 62 75 66 6c 65 6e 29 3b 0a 09 09 09  uf, buflen);....
ed70: 69 66 20 28 6b 6c 6f 67 5f 72 65 74 20 3d 3d 20  if (klog_ret == 
ed80: 2d 31 29 20 7b 0a 09 09 09 09 66 72 65 65 28 62  -1) {.....free(b
ed90: 75 66 29 3b 0a 0a 09 09 09 09 54 63 6c 5f 53 65  uf);......Tcl_Se
eda0: 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72  tObjResult(inter
edb0: 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67  p, Tcl_NewString
edc0: 4f 62 6a 28 22 6b 6c 6f 67 63 74 6c 28 53 59 53  Obj("klogctl(SYS
edd0: 4c 4f 47 5f 41 43 54 49 4f 4e 5f 52 45 41 44 5f  LOG_ACTION_READ_
ede0: 41 4c 4c 2c 20 2e 2e 2e 29 20 66 61 69 6c 65 64  ALL, ...) failed
edf0: 22 2c 20 2d 31 29 29 3b 0a 0a 09 09 09 09 72 65  ", -1));......re
ee00: 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b  turn(TCL_ERROR);
ee10: 0a 09 09 09 7d 0a 0a 09 09 09 54 63 6c 5f 53 65  ....}.....Tcl_Se
ee20: 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72  tObjResult(inter
ee30: 70 2c 20 54 63 6c 5f 4e 65 77 42 79 74 65 41 72  p, Tcl_NewByteAr
ee40: 72 61 79 4f 62 6a 28 28 75 6e 73 69 67 6e 65 64  rayObj((unsigned
ee50: 20 63 68 61 72 20 2a 29 20 62 75 66 2c 20 6b 6c   char *) buf, kl
ee60: 6f 67 5f 72 65 74 29 29 3b 0a 0a 09 09 09 66 72  og_ret));.....fr
ee70: 65 65 28 62 75 66 29 3b 0a 0a 09 09 09 72 65 74  ee(buf);.....ret
ee80: 75 72 6e 28 54 43 4c 5f 4f 4b 29 3b 0a 09 09 63  urn(TCL_OK);...c
ee90: 61 73 65 20 30 78 33 64 39 39 37 33 66 32 4c 55  ase 0x3d9973f2LU
eea0: 3a 20 2f 2a 20 63 6c 65 61 72 20 2a 2f 0a 09 09  : /* clear */...
eeb0: 09 6b 6c 6f 67 5f 72 65 74 20 3d 20 6b 6c 6f 67  .klog_ret = klog
eec0: 63 74 6c 28 53 59 53 4c 4f 47 5f 41 43 54 49 4f  ctl(SYSLOG_ACTIO
eed0: 4e 5f 43 4c 45 41 52 2c 20 4e 55 4c 4c 2c 20 30  N_CLEAR, NULL, 0
eee0: 29 3b 0a 09 09 09 69 66 20 28 6b 6c 6f 67 5f 72  );....if (klog_r
eef0: 65 74 20 3d 3d 20 2d 31 29 20 7b 0a 09 09 09 09  et == -1) {.....
ef00: 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
ef10: 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77  (interp, Tcl_New
ef20: 53 74 72 69 6e 67 4f 62 6a 28 22 6b 6c 6f 67 63  StringObj("klogc
ef30: 74 6c 28 53 59 53 4c 4f 47 5f 41 43 54 49 4f 4e  tl(SYSLOG_ACTION
ef40: 5f 43 4c 45 41 52 2c 20 2e 2e 2e 29 20 66 61 69  _CLEAR, ...) fai
ef50: 6c 65 64 22 2c 20 2d 31 29 29 3b 0a 0a 09 09 09  led", -1));.....
ef60: 09 72 65 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f  .return(TCL_ERRO
ef70: 52 29 3b 0a 09 09 09 7d 0a 0a 09 09 09 72 65 74  R);....}.....ret
ef80: 75 72 6e 28 54 43 4c 5f 4f 4b 29 3b 0a 09 09 63  urn(TCL_OK);...c
ef90: 61 73 65 20 30 78 32 32 35 63 33 33 36 65 4c 55  ase 0x225c336eLU
efa0: 3a 20 2f 2a 20 63 6f 6e 73 6f 6c 65 5f 6f 6e 20  : /* console_on 
efb0: 2a 2f 0a 09 09 09 6b 6c 6f 67 5f 72 65 74 20 3d  */....klog_ret =
efc0: 20 6b 6c 6f 67 63 74 6c 28 53 59 53 4c 4f 47 5f   klogctl(SYSLOG_
efd0: 41 43 54 49 4f 4e 5f 43 4f 4e 53 4f 4c 45 5f 4f  ACTION_CONSOLE_O
efe0: 4e 2c 20 4e 55 4c 4c 2c 20 30 29 3b 0a 09 09 09  N, NULL, 0);....
eff0: 69 66 20 28 6b 6c 6f 67 5f 72 65 74 20 3d 3d 20  if (klog_ret == 
f000: 2d 31 29 20 7b 0a 09 09 09 09 54 63 6c 5f 53 65  -1) {.....Tcl_Se
f010: 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72  tObjResult(inter
f020: 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67  p, Tcl_NewString
f030: 4f 62 6a 28 22 6b 6c 6f 67 63 74 6c 28 53 59 53  Obj("klogctl(SYS
f040: 4c 4f 47 5f 41 43 54 49 4f 4e 5f 43 4f 4e 53 4f  LOG_ACTION_CONSO
f050: 4c 45 5f 4f 4e 2c 20 2e 2e 2e 29 20 66 61 69 6c  LE_ON, ...) fail
f060: 65 64 22 2c 20 2d 31 29 29 3b 0a 0a 09 09 09 09  ed", -1));......
f070: 72 65 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52  return(TCL_ERROR
f080: 29 3b 0a 09 09 09 7d 0a 0a 09 09 09 72 65 74 75  );....}.....retu
f090: 72 6e 28 54 43 4c 5f 4f 4b 29 3b 0a 09 09 63 61  rn(TCL_OK);...ca
f0a0: 73 65 20 30 78 32 65 31 39 62 62 65 36 4c 55 3a  se 0x2e19bbe6LU:
f0b0: 20 2f 2a 20 63 6f 6e 73 6f 6c 65 5f 6f 66 66 20   /* console_off 
f0c0: 2a 2f 0a 09 09 09 6b 6c 6f 67 5f 72 65 74 20 3d  */....klog_ret =
f0d0: 20 6b 6c 6f 67 63 74 6c 28 53 59 53 4c 4f 47 5f   klogctl(SYSLOG_
f0e0: 41 43 54 49 4f 4e 5f 43 4f 4e 53 4f 4c 45 5f 4f  ACTION_CONSOLE_O
f0f0: 46 46 2c 20 4e 55 4c 4c 2c 20 30 29 3b 0a 09 09  FF, NULL, 0);...
f100: 09 69 66 20 28 6b 6c 6f 67 5f 72 65 74 20 3d 3d  .if (klog_ret ==
f110: 20 2d 31 29 20 7b 0a 09 09 09 09 54 63 6c 5f 53   -1) {.....Tcl_S
f120: 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
f130: 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e  rp, Tcl_NewStrin
f140: 67 4f 62 6a 28 22 6b 6c 6f 67 63 74 6c 28 53 59  gObj("klogctl(SY
f150: 53 4c 4f 47 5f 41 43 54 49 4f 4e 5f 43 4f 4e 53  SLOG_ACTION_CONS
f160: 4f 4c 45 5f 4f 46 46 2c 20 2e 2e 2e 29 20 66 61  OLE_OFF, ...) fa
f170: 69 6c 65 64 22 2c 20 2d 31 29 29 3b 0a 0a 09 09  iled", -1));....
f180: 09 09 72 65 74 75 72 6e 28 54 43 4c 5f 45 52 52  ..return(TCL_ERR
f190: 4f 52 29 3b 0a 09 09 09 7d 0a 0a 09 09 09 72 65  OR);....}.....re
f1a0: 74 75 72 6e 28 54 43 4c 5f 4f 4b 29 3b 0a 09 7d  turn(TCL_OK);..}
f1b0: 0a 0a 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73  ...Tcl_SetObjRes
f1c0: 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ult(interp, Tcl_
f1d0: 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 69 6e  NewStringObj("in
f1e0: 76 61 6c 69 64 20 73 75 62 63 6f 6d 6d 61 6e 64  valid subcommand
f1f0: 22 2c 20 2d 31 29 29 3b 0a 0a 09 72 65 74 75 72  ", -1));...retur
f200: 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 7d 0a  n(TCL_ERROR);.}.
f210: 0a 73 74 61 74 69 63 20 69 6e 74 20 74 75 61 70  .static int tuap
f220: 69 5f 77 61 69 74 70 69 64 28 43 6c 69 65 6e 74  i_waitpid(Client
f230: 44 61 74 61 20 63 64 2c 20 54 63 6c 5f 49 6e 74  Data cd, Tcl_Int
f240: 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 69 6e 74  erp *interp, int
f250: 20 6f 62 6a 63 2c 20 54 63 6c 5f 4f 62 6a 20 2a   objc, Tcl_Obj *
f260: 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 29 20 7b 0a  CONST objv[]) {.
f270: 09 70 69 64 5f 74 20 63 68 69 6c 64 3b 0a 09 69  .pid_t child;..i
f280: 6e 74 20 73 74 61 74 75 73 3b 0a 0a 09 63 68 69  nt status;...chi
f290: 6c 64 20 3d 20 77 61 69 74 70 69 64 28 2d 31 2c  ld = waitpid(-1,
f2a0: 20 26 73 74 61 74 75 73 2c 20 57 4e 4f 48 41 4e   &status, WNOHAN
f2b0: 47 29 3b 0a 09 69 66 20 28 63 68 69 6c 64 20 3c  G);..if (child <
f2c0: 20 30 29 20 7b 0a 09 09 69 66 20 28 65 72 72 6e   0) {...if (errn
f2d0: 6f 20 21 3d 20 45 43 48 49 4c 44 29 20 7b 0a 09  o != ECHILD) {..
f2e0: 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75  ..Tcl_SetObjResu
f2f0: 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e  lt(interp, Tcl_N
f300: 65 77 53 74 72 69 6e 67 4f 62 6a 28 73 74 72 65  ewStringObj(stre
f310: 72 72 6f 72 28 65 72 72 6e 6f 29 2c 20 2d 31 29  rror(errno), -1)
f320: 29 3b 0a 0a 09 09 09 72 65 74 75 72 6e 28 54 43  );.....return(TC
f330: 4c 5f 45 52 52 4f 52 29 3b 0a 09 09 7d 20 65 6c  L_ERROR);...} el
f340: 73 65 20 7b 0a 09 09 09 63 68 69 6c 64 20 3d 20  se {....child = 
f350: 30 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 69 66 20 28  0;...}..}...if (
f360: 63 68 69 6c 64 20 21 3d 20 30 29 20 7b 0a 09 09  child != 0) {...
f370: 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
f380: 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77  (interp, Tcl_New
f390: 57 69 64 65 49 6e 74 4f 62 6a 28 63 68 69 6c 64  WideIntObj(child
f3a0: 29 29 3b 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 28  ));..}...return(
f3b0: 54 43 4c 5f 4f 4b 29 3b 0a 7d 0a 0a 73 74 61 74  TCL_OK);.}..stat
f3c0: 69 63 20 69 6e 74 20 74 75 61 70 69 5f 73 65 74  ic int tuapi_set
f3d0: 74 69 6d 65 6f 66 64 61 79 28 43 6c 69 65 6e 74  timeofday(Client
f3e0: 44 61 74 61 20 63 64 2c 20 54 63 6c 5f 49 6e 74  Data cd, Tcl_Int
f3f0: 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 69 6e 74  erp *interp, int
f400: 20 6f 62 6a 63 2c 20 54 63 6c 5f 4f 62 6a 20 2a   objc, Tcl_Obj *
f410: 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 29 20 7b 0a  CONST objv[]) {.
f420: 09 73 74 72 75 63 74 20 74 69 6d 65 76 61 6c 20  .struct timeval 
f430: 74 76 3b 0a 09 54 63 6c 5f 57 69 64 65 49 6e 74  tv;..Tcl_WideInt
f440: 20 74 76 5f 73 65 63 5f 76 61 6c 2c 20 74 76 5f   tv_sec_val, tv_
f450: 75 73 65 63 5f 76 61 6c 3b 0a 09 69 6e 74 20 73  usec_val;..int s
f460: 65 74 74 69 6d 65 6f 66 64 61 79 5f 72 65 74 2c  ettimeofday_ret,
f470: 20 74 63 6c 5f 72 65 74 3b 0a 0a 09 69 66 20 28   tcl_ret;...if (
f480: 6f 62 6a 63 20 21 3d 20 33 29 20 7b 0a 09 09 54  objc != 3) {...T
f490: 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28  cl_SetObjResult(
f4a0: 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53  interp, Tcl_NewS
f4b0: 74 72 69 6e 67 4f 62 6a 28 22 77 72 6f 6e 67 20  tringObj("wrong 
f4c0: 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
f4d0: 65 20 5c 22 3a 3a 74 75 61 70 69 3a 3a 73 79 73  e \"::tuapi::sys
f4e0: 63 61 6c 6c 3a 3a 73 65 74 74 69 6d 65 6f 66 64  call::settimeofd
f4f0: 61 79 20 73 65 63 6f 6e 64 73 20 6d 69 63 72 6f  ay seconds micro
f500: 73 65 63 6f 6e 64 73 5c 22 22 2c 20 2d 31 29 29  seconds\"", -1))
f510: 3b 0a 0a 09 09 72 65 74 75 72 6e 28 54 43 4c 5f  ;....return(TCL_
f520: 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 74 63 6c  ERROR);..}...tcl
f530: 5f 72 65 74 20 3d 20 54 63 6c 5f 47 65 74 57 69  _ret = Tcl_GetWi
f540: 64 65 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74  deIntFromObj(int
f550: 65 72 70 2c 20 6f 62 6a 76 5b 31 5d 2c 20 26 74  erp, objv[1], &t
f560: 76 5f 73 65 63 5f 76 61 6c 29 3b 0a 09 69 66 20  v_sec_val);..if 
f570: 28 74 63 6c 5f 72 65 74 20 21 3d 20 54 43 4c 5f  (tcl_ret != TCL_
f580: 4f 4b 29 20 7b 0a 09 09 72 65 74 75 72 6e 28 74  OK) {...return(t
f590: 63 6c 5f 72 65 74 29 3b 0a 09 7d 0a 0a 09 74 63  cl_ret);..}...tc
f5a0: 6c 5f 72 65 74 20 3d 20 54 63 6c 5f 47 65 74 57  l_ret = Tcl_GetW
f5b0: 69 64 65 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e  ideIntFromObj(in
f5c0: 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26  terp, objv[2], &
f5d0: 74 76 5f 75 73 65 63 5f 76 61 6c 29 3b 0a 09 69  tv_usec_val);..i
f5e0: 66 20 28 74 63 6c 5f 72 65 74 20 21 3d 20 54 43  f (tcl_ret != TC
f5f0: 4c 5f 4f 4b 29 20 7b 0a 09 09 72 65 74 75 72 6e  L_OK) {...return
f600: 28 74 63 6c 5f 72 65 74 29 3b 0a 09 7d 0a 0a 09  (tcl_ret);..}...
f610: 74 76 2e 74 76 5f 73 65 63 20 3d 20 74 76 5f 73  tv.tv_sec = tv_s
f620: 65 63 5f 76 61 6c 3b 0a 09 74 76 2e 74 76 5f 75  ec_val;..tv.tv_u
f630: 73 65 63 20 3d 20 74 76 5f 75 73 65 63 5f 76 61  sec = tv_usec_va
f640: 6c 3b 20 0a 0a 09 73 65 74 74 69 6d 65 6f 66 64  l; ...settimeofd
f650: 61 79 5f 72 65 74 20 3d 20 73 65 74 74 69 6d 65  ay_ret = settime
f660: 6f 66 64 61 79 28 26 74 76 2c 20 4e 55 4c 4c 29  ofday(&tv, NULL)
f670: 3b 0a 0a 09 69 66 20 28 73 65 74 74 69 6d 65 6f  ;...if (settimeo
f680: 66 64 61 79 5f 72 65 74 20 3c 20 30 29 20 7b 0a  fday_ret < 0) {.
f690: 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75  ..Tcl_SetObjResu
f6a0: 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e  lt(interp, Tcl_N
f6b0: 65 77 53 74 72 69 6e 67 4f 62 6a 28 73 74 72 65  ewStringObj(stre
f6c0: 72 72 6f 72 28 65 72 72 6e 6f 29 2c 20 2d 31 29  rror(errno), -1)
f6d0: 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 54 43 4c  );....return(TCL
f6e0: 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 72 65  _ERROR);..}...re
f6f0: 74 75 72 6e 28 54 43 4c 5f 4f 4b 29 3b 0a 7d 0a  turn(TCL_OK);.}.
f700: 0a 73 74 61 74 69 63 20 69 6e 74 20 74 75 61 70  .static int tuap
f710: 69 5f 61 64 6a 74 69 6d 65 28 43 6c 69 65 6e 74  i_adjtime(Client
f720: 44 61 74 61 20 63 64 2c 20 54 63 6c 5f 49 6e 74  Data cd, Tcl_Int
f730: 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 69 6e 74  erp *interp, int
f740: 20 6f 62 6a 63 2c 20 54 63 6c 5f 4f 62 6a 20 2a   objc, Tcl_Obj *
f750: 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 29 20 7b 0a  CONST objv[]) {.
f760: 09 73 74 72 75 63 74 20 74 69 6d 65 76 61 6c 20  .struct timeval 
f770: 74 76 2c 20 6f 6c 64 54 56 3b 0a 09 54 63 6c 5f  tv, oldTV;..Tcl_
f780: 57 69 64 65 49 6e 74 20 74 76 5f 73 65 63 5f 76  WideInt tv_sec_v
f790: 61 6c 2c 20 74 76 5f 75 73 65 63 5f 76 61 6c 3b  al, tv_usec_val;
f7a0: 0a 09 69 6e 74 20 61 64 6a 74 69 6d 65 5f 72 65  ..int adjtime_re
f7b0: 74 2c 20 74 63 6c 5f 72 65 74 3b 0a 0a 09 69 66  t, tcl_ret;...if
f7c0: 20 28 6f 62 6a 63 20 21 3d 20 33 29 20 7b 0a 09   (objc != 3) {..
f7d0: 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c  .Tcl_SetObjResul
f7e0: 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65  t(interp, Tcl_Ne
f7f0: 77 53 74 72 69 6e 67 4f 62 6a 28 22 77 72 6f 6e  wStringObj("wron
f800: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
f810: 20 62 65 20 5c 22 3a 3a 74 75 61 70 69 3a 3a 73   be \"::tuapi::s
f820: 79 73 63 61 6c 6c 3a 3a 61 64 6a 74 69 6d 65 20  yscall::adjtime 
f830: 73 65 63 6f 6e 64 73 20 6d 69 63 72 6f 73 65 63  seconds microsec
f840: 6f 6e 64 73 5c 22 22 2c 20 2d 31 29 29 3b 0a 0a  onds\"", -1));..
f850: 09 09 72 65 74 75 72 6e 28 54 43 4c 5f 45 52 52  ..return(TCL_ERR
f860: 4f 52 29 3b 0a 09 7d 0a 0a 09 74 63 6c 5f 72 65  OR);..}...tcl_re
f870: 74 20 3d 20 54 63 6c 5f 47 65 74 57 69 64 65 49  t = Tcl_GetWideI
f880: 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70  ntFromObj(interp
f890: 2c 20 6f 62 6a 76 5b 31 5d 2c 20 26 74 76 5f 73  , objv[1], &tv_s
f8a0: 65 63 5f 76 61 6c 29 3b 0a 09 69 66 20 28 74 63  ec_val);..if (tc
f8b0: 6c 5f 72 65 74 20 21 3d 20 54 43 4c 5f 4f 4b 29  l_ret != TCL_OK)
f8c0: 20 7b 0a 09 09 72 65 74 75 72 6e 28 74 63 6c 5f   {...return(tcl_
f8d0: 72 65 74 29 3b 0a 09 7d 0a 0a 09 74 63 6c 5f 72  ret);..}...tcl_r
f8e0: 65 74 20 3d 20 54 63 6c 5f 47 65 74 57 69 64 65  et = Tcl_GetWide
f8f0: 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72  IntFromObj(inter
f900: 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 74 76 5f  p, objv[2], &tv_
f910: 75 73 65 63 5f 76 61 6c 29 3b 0a 09 69 66 20 28  usec_val);..if (
f920: 74 63 6c 5f 72 65 74 20 21 3d 20 54 43 4c 5f 4f  tcl_ret != TCL_O
f930: 4b 29 20 7b 0a 09 09 72 65 74 75 72 6e 28 74 63  K) {...return(tc
f940: 6c 5f 72 65 74 29 3b 0a 09 7d 0a 0a 09 74 76 2e  l_ret);..}...tv.
f950: 74 76 5f 73 65 63 20 3d 20 74 76 5f 73 65 63 5f  tv_sec = tv_sec_
f960: 76 61 6c 3b 0a 09 74 76 2e 74 76 5f 75 73 65 63  val;..tv.tv_usec
f970: 20 3d 20 74 76 5f 75 73 65 63 5f 76 61 6c 3b 20   = tv_usec_val; 
f980: 0a 0a 09 61 64 6a 74 69 6d 65 5f 72 65 74 20 3d  ...adjtime_ret =
f990: 20 61 64 6a 74 69 6d 65 28 26 74 76 2c 20 26 6f   adjtime(&tv, &o
f9a0: 6c 64 54 56 29 3b 0a 0a 09 69 66 20 28 61 64 6a  ldTV);...if (adj
f9b0: 74 69 6d 65 5f 72 65 74 20 21 3d 20 30 29 20 7b  time_ret != 0) {
f9c0: 0a 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73  ...Tcl_SetObjRes
f9d0: 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ult(interp, Tcl_
f9e0: 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 73 74 72  NewStringObj(str
f9f0: 65 72 72 6f 72 28 65 72 72 6e 6f 29 2c 20 2d 31  error(errno), -1
fa00: 29 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 54 43  ));....return(TC
fa10: 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 2f  L_ERROR);..}.../
fa20: 2a 20 58 58 58 20 54 4f 44 4f 3a 20 52 65 74 75  * XXX TODO: Retu
fa30: 72 6e 20 6f 6c 64 20 61 64 6a 75 73 74 6d 65 6e  rn old adjustmen
fa40: 74 20 2a 2f 0a 0a 09 72 65 74 75 72 6e 28 54 43  t */...return(TC
fa50: 4c 5f 4f 4b 29 3b 0a 7d 0a 0a 0a 23 69 66 6e 64  L_OK);.}...#ifnd
fa60: 65 66 20 44 49 53 41 42 4c 45 5f 55 4e 49 58 5f  ef DISABLE_UNIX_
fa70: 53 4f 43 4b 45 54 53 0a 73 74 72 75 63 74 20 74  SOCKETS.struct t
fa80: 75 61 70 69 5f 73 6f 63 6b 65 74 5f 75 6e 69 78  uapi_socket_unix
fa90: 5f 5f 63 68 61 6e 5f 69 64 20 7b 0a 09 69 6e 74  __chan_id {..int
faa0: 20 66 64 3b 0a 09 54 63 6c 5f 43 68 61 6e 6e 65   fd;..Tcl_Channe
fab0: 6c 20 63 68 61 6e 3b 0a 7d 3b 0a 0a 73 74 61 74  l chan;.};..stat
fac0: 69 63 20 69 6e 74 20 74 75 61 70 69 5f 73 6f 63  ic int tuapi_soc
fad0: 6b 65 74 5f 75 6e 69 78 5f 5f 63 68 61 6e 5f 63  ket_unix__chan_c
fae0: 6c 6f 73 65 28 43 6c 69 65 6e 74 44 61 74 61 20  lose(ClientData 
faf0: 69 64 5f 70 2c 20 54 63 6c 5f 49 6e 74 65 72 70  id_p, Tcl_Interp
fb00: 20 2a 69 6e 74 65 72 70 29 20 7b 0a 09 73 74 72   *interp) {..str
fb10: 75 63 74 20 74 75 61 70 69 5f 73 6f 63 6b 65 74  uct tuapi_socket
fb20: 5f 75 6e 69 78 5f 5f 63 68 61 6e 5f 69 64 20 2a  _unix__chan_id *
fb30: 69 64 3b 0a 09 69 6e 74 20 66 64 3b 0a 0a 09 69  id;..int fd;...i
fb40: 64 20 3d 20 69 64 5f 70 3b 0a 0a 09 66 64 20 3d  d = id_p;...fd =
fb50: 20 69 64 2d 3e 66 64 3b 0a 0a 09 63 6c 6f 73 65   id->fd;...close
fb60: 28 66 64 29 3b 0a 0a 09 66 72 65 65 28 69 64 29  (fd);...free(id)
fb70: 3b 0a 0a 09 72 65 74 75 72 6e 28 30 29 3b 0a 7d  ;...return(0);.}
fb80: 0a 0a 73 74 61 74 69 63 20 69 6e 74 20 74 75 61  ..static int tua
fb90: 70 69 5f 73 6f 63 6b 65 74 5f 75 6e 69 78 5f 5f  pi_socket_unix__
fba0: 63 68 61 6e 5f 72 65 61 64 28 43 6c 69 65 6e 74  chan_read(Client
fbb0: 44 61 74 61 20 69 64 5f 70 2c 20 63 68 61 72 20  Data id_p, char 
fbc0: 2a 62 75 66 2c 20 69 6e 74 20 62 75 66 73 69 7a  *buf, int bufsiz
fbd0: 65 2c 20 69 6e 74 20 2a 65 72 72 6f 72 43 6f 64  e, int *errorCod
fbe0: 65 50 74 72 29 20 7b 0a 09 73 74 72 75 63 74 20  ePtr) {..struct 
fbf0: 74 75 61 70 69 5f 73 6f 63 6b 65 74 5f 75 6e 69  tuapi_socket_uni
fc00: 78 5f 5f 63 68 61 6e 5f 69 64 20 2a 69 64 3b 0a  x__chan_id *id;.
fc10: 09 73 73 69 7a 65 5f 74 20 72 65 61 64 5f 72 65  .ssize_t read_re
fc20: 74 3b 0a 09 69 6e 74 20 66 64 3b 0a 09 69 6e 74  t;..int fd;..int
fc30: 20 72 65 74 76 61 6c 3b 0a 0a 09 69 64 20 3d 20   retval;...id = 
fc40: 69 64 5f 70 3b 0a 0a 09 66 64 20 3d 20 69 64 2d  id_p;...fd = id-
fc50: 3e 66 64 3b 0a 0a 09 72 65 61 64 5f 72 65 74 20  >fd;...read_ret 
fc60: 3d 20 72 65 61 64 28 66 64 2c 20 62 75 66 2c 20  = read(fd, buf, 
fc70: 62 75 66 73 69 7a 65 29 3b 0a 09 69 66 20 28 72  bufsize);..if (r
fc80: 65 61 64 5f 72 65 74 20 3c 20 30 29 20 7b 0a 09  ead_ret < 0) {..
fc90: 09 2a 65 72 72 6f 72 43 6f 64 65 50 74 72 20 3d  .*errorCodePtr =
fca0: 20 65 72 72 6e 6f 3b 0a 0a 09 09 72 65 74 75 72   errno;....retur
fcb0: 6e 28 2d 31 29 3b 0a 09 7d 0a 0a 09 72 65 74 76  n(-1);..}...retv
fcc0: 61 6c 20 3d 20 72 65 61 64 5f 72 65 74 3b 0a 0a  al = read_ret;..
fcd0: 09 72 65 74 75 72 6e 28 72 65 74 76 61 6c 29 3b  .return(retval);
fce0: 0a 7d 0a 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .}..static int t
fcf0: 75 61 70 69 5f 73 6f 63 6b 65 74 5f 75 6e 69 78  uapi_socket_unix
fd00: 5f 5f 63 68 61 6e 5f 77 72 69 74 65 28 43 6c 69  __chan_write(Cli
fd10: 65 6e 74 44 61 74 61 20 69 64 5f 70 2c 20 63 6f  entData id_p, co
fd20: 6e 73 74 20 63 68 61 72 20 2a 62 75 66 2c 20 69  nst char *buf, i
fd30: 6e 74 20 74 6f 57 72 69 74 65 2c 20 69 6e 74 20  nt toWrite, int 
fd40: 2a 65 72 72 6f 72 43 6f 64 65 50 74 72 29 20 7b  *errorCodePtr) {
fd50: 0a 09 73 74 72 75 63 74 20 74 75 61 70 69 5f 73  ..struct tuapi_s
fd60: 6f 63 6b 65 74 5f 75 6e 69 78 5f 5f 63 68 61 6e  ocket_unix__chan
fd70: 5f 69 64 20 2a 69 64 3b 0a 09 73 73 69 7a 65 5f  _id *id;..ssize_
fd80: 74 20 77 72 69 74 65 5f 72 65 74 3b 0a 09 69 6e  t write_ret;..in
fd90: 74 20 66 64 3b 0a 09 69 6e 74 20 62 79 74 65 73  t fd;..int bytes
fda0: 57 72 69 74 74 65 6e 3b 0a 0a 09 69 64 20 3d 20  Written;...id = 
fdb0: 69 64 5f 70 3b 0a 0a 09 66 64 20 3d 20 69 64 2d  id_p;...fd = id-
fdc0: 3e 66 64 3b 0a 0a 09 62 79 74 65 73 57 72 69 74  >fd;...bytesWrit
fdd0: 74 65 6e 20 3d 20 30 3b 0a 09 77 68 69 6c 65 20  ten = 0;..while 
fde0: 28 74 6f 57 72 69 74 65 29 20 7b 0a 09 09 77 72  (toWrite) {...wr
fdf0: 69 74 65 5f 72 65 74 20 3d 20 77 72 69 74 65 28  ite_ret = write(
fe00: 66 64 2c 20 62 75 66 2c 20 74 6f 57 72 69 74 65  fd, buf, toWrite
fe10: 29 3b 0a 09 09 69 66 20 28 77 72 69 74 65 5f 72  );...if (write_r
fe20: 65 74 20 3d 3d 20 30 29 20 7b 0a 09 09 09 62 72  et == 0) {....br
fe30: 65 61 6b 3b 0a 09 09 7d 0a 0a 09 09 69 66 20 28  eak;...}....if (
fe40: 77 72 69 74 65 5f 72 65 74 20 3c 20 30 29 20 7b  write_ret < 0) {
fe50: 0a 09 09 09 2a 65 72 72 6f 72 43 6f 64 65 50 74  ....*errorCodePt
fe60: 72 20 3d 20 65 72 72 6e 6f 3b 0a 0a 09 09 09 72  r = errno;.....r
fe70: 65 74 75 72 6e 28 2d 31 29 3b 0a 09 09 7d 0a 0a  eturn(-1);...}..
fe80: 09 09 74 6f 57 72 69 74 65 20 2d 3d 20 77 72 69  ..toWrite -= wri
fe90: 74 65 5f 72 65 74 3b 0a 09 09 62 75 66 20 2b 3d  te_ret;...buf +=
fea0: 20 77 72 69 74 65 5f 72 65 74 3b 0a 09 09 62 79   write_ret;...by
feb0: 74 65 73 57 72 69 74 74 65 6e 20 2b 3d 20 77 72  tesWritten += wr
fec0: 69 74 65 5f 72 65 74 3b 0a 09 7d 0a 0a 09 69 66  ite_ret;..}...if
fed0: 20 28 62 79 74 65 73 57 72 69 74 74 65 6e 20 3d   (bytesWritten =
fee0: 3d 20 30 29 20 7b 0a 09 09 2a 65 72 72 6f 72 43  = 0) {...*errorC
fef0: 6f 64 65 50 74 72 20 3d 20 45 41 47 41 49 4e 3b  odePtr = EAGAIN;
ff00: 0a 0a 09 09 72 65 74 75 72 6e 28 2d 31 29 3b 0a  ....return(-1);.
ff10: 09 7d 0a 0a 09 72 65 74 75 72 6e 28 62 79 74 65  .}...return(byte
ff20: 73 57 72 69 74 74 65 6e 29 3b 0a 7d 0a 0a 73 74  sWritten);.}..st
ff30: 61 74 69 63 20 76 6f 69 64 20 74 75 61 70 69 5f  atic void tuapi_
ff40: 73 6f 63 6b 65 74 5f 75 6e 69 78 5f 5f 63 68 61  socket_unix__cha
ff50: 6e 5f 65 76 65 6e 74 68 61 6e 64 6c 65 72 28 43  n_eventhandler(C
ff60: 6c 69 65 6e 74 44 61 74 61 20 69 64 5f 70 2c 20  lientData id_p, 
ff70: 69 6e 74 20 6d 61 73 6b 29 20 7b 0a 09 73 74 72  int mask) {..str
ff80: 75 63 74 20 74 75 61 70 69 5f 73 6f 63 6b 65 74  uct tuapi_socket
ff90: 5f 75 6e 69 78 5f 5f 63 68 61 6e 5f 69 64 20 2a  _unix__chan_id *
ffa0: 69 64 3b 0a 09 54 63 6c 5f 43 68 61 6e 6e 65 6c  id;..Tcl_Channel
ffb0: 20 63 68 61 6e 3b 0a 0a 09 69 64 20 3d 20 69 64   chan;...id = id
ffc0: 5f 70 3b 0a 0a 09 63 68 61 6e 20 3d 20 69 64 2d  _p;...chan = id-
ffd0: 3e 63 68 61 6e 3b 0a 0a 09 69 66 20 28 21 63 68  >chan;...if (!ch
ffe0: 61 6e 29 20 7b 0a 09 09 72 65 74 75 72 6e 3b 0a  an) {...return;.
fff0: 09 7d 0a 0a 09 54 63 6c 5f 4e 6f 74 69 66 79 43  .}...Tcl_NotifyC
10000 68 61 6e 6e 65 6c 28 63 68 61 6e 2c 20 6d 61 73  hannel(chan, mas
10010 6b 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 76 6f  k);.}..static vo
10020 69 64 20 74 75 61 70 69 5f 73 6f 63 6b 65 74 5f  id tuapi_socket_
10030 75 6e 69 78 5f 5f 63 68 61 6e 5f 77 61 74 63 68  unix__chan_watch
10040 28 43 6c 69 65 6e 74 44 61 74 61 20 69 64 5f 70  (ClientData id_p
10050 2c 20 69 6e 74 20 6d 61 73 6b 29 20 7b 0a 09 73  , int mask) {..s
10060 74 72 75 63 74 20 74 75 61 70 69 5f 73 6f 63 6b  truct tuapi_sock
10070 65 74 5f 75 6e 69 78 5f 5f 63 68 61 6e 5f 69 64  et_unix__chan_id
10080 20 2a 69 64 3b 0a 09 69 6e 74 20 66 64 3b 0a 0a   *id;..int fd;..
10090 09 69 64 20 3d 20 69 64 5f 70 3b 0a 0a 09 66 64  .id = id_p;...fd
100a0 20 3d 20 69 64 2d 3e 66 64 3b 0a 0a 09 54 63 6c   = id->fd;...Tcl
100b0 5f 43 72 65 61 74 65 46 69 6c 65 48 61 6e 64 6c  _CreateFileHandl
100c0 65 72 28 66 64 2c 20 6d 61 73 6b 2c 20 74 75 61  er(fd, mask, tua
100d0 70 69 5f 73 6f 63 6b 65 74 5f 75 6e 69 78 5f 5f  pi_socket_unix__
100e0 63 68 61 6e 5f 65 76 65 6e 74 68 61 6e 64 6c 65  chan_eventhandle
100f0 72 2c 20 69 64 29 3b 0a 0a 09 72 65 74 75 72 6e  r, id);...return
10100 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 69 6e 74 20  ;.}..static int 
10110 74 75 61 70 69 5f 73 6f 63 6b 65 74 5f 75 6e 69  tuapi_socket_uni
10120 78 5f 5f 63 68 61 6e 5f 67 65 74 68 61 6e 64 6c  x__chan_gethandl
10130 65 28 43 6c 69 65 6e 74 44 61 74 61 20 69 64 5f  e(ClientData id_
10140 70 2c 20 69 6e 74 20 64 69 72 65 63 74 69 6f 6e  p, int direction
10150 2c 20 43 6c 69 65 6e 74 44 61 74 61 20 2a 68 61  , ClientData *ha
10160 6e 64 6c 65 50 74 72 29 20 7b 0a 09 73 74 72 75  ndlePtr) {..stru
10170 63 74 20 74 75 61 70 69 5f 73 6f 63 6b 65 74 5f  ct tuapi_socket_
10180 75 6e 69 78 5f 5f 63 68 61 6e 5f 69 64 20 2a 69  unix__chan_id *i
10190 64 3b 0a 09 69 6e 74 20 66 64 3b 0a 09 43 6c 69  d;..int fd;..Cli
101a0 65 6e 74 44 61 74 61 20 66 64 5f 63 64 3b 0a 0a  entData fd_cd;..
101b0 09 69 64 20 3d 20 69 64 5f 70 3b 0a 0a 09 66 64  .id = id_p;...fd
101c0 20 3d 20 69 64 2d 3e 66 64 3b 0a 0a 09 6d 65 6d   = id->fd;...mem
101d0 63 70 79 28 26 66 64 5f 63 64 2c 20 26 66 64 2c  cpy(&fd_cd, &fd,
101e0 20 73 69 7a 65 6f 66 28 66 64 29 29 3b 0a 0a 09   sizeof(fd));...
101f0 2a 68 61 6e 64 6c 65 50 74 72 20 3d 20 66 64 5f  *handlePtr = fd_
10200 63 64 3b 0a 0a 09 72 65 74 75 72 6e 28 54 43 4c  cd;...return(TCL
10210 5f 4f 4b 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 20  _OK);.}..static 
10220 54 63 6c 5f 43 68 61 6e 6e 65 6c 20 74 75 61 70  Tcl_Channel tuap
10230 69 5f 73 6f 63 6b 65 74 5f 75 6e 69 78 5f 73 6f  i_socket_unix_so
10240 63 6b 32 74 63 6c 63 68 61 6e 28 69 6e 74 20 73  ck2tclchan(int s
10250 6f 63 6b 29 20 7b 0a 09 73 74 72 75 63 74 20 74  ock) {..struct t
10260 75 61 70 69 5f 73 6f 63 6b 65 74 5f 75 6e 69 78  uapi_socket_unix
10270 5f 5f 63 68 61 6e 5f 69 64 20 2a 69 64 3b 0a 09  __chan_id *id;..
10280 73 74 61 74 69 63 20 54 63 6c 5f 43 68 61 6e 6e  static Tcl_Chann
10290 65 6c 54 79 70 65 20 74 63 6c 5f 63 68 61 6e 5f  elType tcl_chan_
102a0 74 79 70 65 3b 0a 09 73 74 61 74 69 63 20 69 6e  type;..static in
102b0 74 20 74 63 6c 5f 63 68 61 6e 5f 74 79 70 65 5f  t tcl_chan_type_
102c0 69 6e 69 74 20 3d 20 30 3b 0a 09 54 63 6c 5f 43  init = 0;..Tcl_C
102d0 68 61 6e 6e 65 6c 20 74 63 6c 5f 63 68 61 6e 3b  hannel tcl_chan;
102e0 0a 09 63 68 61 72 20 63 68 61 6e 5f 6e 61 6d 65  ..char chan_name
102f0 5b 33 32 5d 3b 0a 09 69 6e 74 20 73 6f 63 6b 5f  [32];..int sock_
10300 66 6c 61 67 73 3b 0a 0a 09 69 66 20 28 21 74 63  flags;...if (!tc
10310 6c 5f 63 68 61 6e 5f 74 79 70 65 5f 69 6e 69 74  l_chan_type_init
10320 29 20 7b 0a 09 09 74 63 6c 5f 63 68 61 6e 5f 74  ) {...tcl_chan_t
10330 79 70 65 2e 74 79 70 65 4e 61 6d 65 20 3d 20 22  ype.typeName = "
10340 73 6f 63 6b 65 74 22 3b 0a 09 09 74 63 6c 5f 63  socket";...tcl_c
10350 68 61 6e 5f 74 79 70 65 2e 76 65 72 73 69 6f 6e  han_type.version
10360 20 3d 20 54 43 4c 5f 43 48 41 4e 4e 45 4c 5f 56   = TCL_CHANNEL_V
10370 45 52 53 49 4f 4e 5f 32 3b 0a 09 09 74 63 6c 5f  ERSION_2;...tcl_
10380 63 68 61 6e 5f 74 79 70 65 2e 63 6c 6f 73 65 50  chan_type.closeP
10390 72 6f 63 20 3d 20 74 75 61 70 69 5f 73 6f 63 6b  roc = tuapi_sock
103a0 65 74 5f 75 6e 69 78 5f 5f 63 68 61 6e 5f 63 6c  et_unix__chan_cl
103b0 6f 73 65 3b 0a 09 09 74 63 6c 5f 63 68 61 6e 5f  ose;...tcl_chan_
103c0 74 79 70 65 2e 69 6e 70 75 74 50 72 6f 63 20 3d  type.inputProc =
103d0 20 74 75 61 70 69 5f 73 6f 63 6b 65 74 5f 75 6e   tuapi_socket_un
103e0 69 78 5f 5f 63 68 61 6e 5f 72 65 61 64 3b 0a 09  ix__chan_read;..
103f0 09 74 63 6c 5f 63 68 61 6e 5f 74 79 70 65 2e 6f  .tcl_chan_type.o
10400 75 74 70 75 74 50 72 6f 63 20 3d 20 74 75 61 70  utputProc = tuap
10410 69 5f 73 6f 63 6b 65 74 5f 75 6e 69 78 5f 5f 63  i_socket_unix__c
10420 68 61 6e 5f 77 72 69 74 65 3b 0a 09 09 74 63 6c  han_write;...tcl
10430 5f 63 68 61 6e 5f 74 79 70 65 2e 77 61 74 63 68  _chan_type.watch
10440 50 72 6f 63 20 3d 20 74 75 61 70 69 5f 73 6f 63  Proc = tuapi_soc
10450 6b 65 74 5f 75 6e 69 78 5f 5f 63 68 61 6e 5f 77  ket_unix__chan_w
10460 61 74 63 68 3b 0a 09 09 74 63 6c 5f 63 68 61 6e  atch;...tcl_chan
10470 5f 74 79 70 65 2e 67 65 74 48 61 6e 64 6c 65 50  _type.getHandleP
10480 72 6f 63 20 3d 20 74 75 61 70 69 5f 73 6f 63 6b  roc = tuapi_sock
10490 65 74 5f 75 6e 69 78 5f 5f 63 68 61 6e 5f 67 65  et_unix__chan_ge
104a0 74 68 61 6e 64 6c 65 3b 0a 09 09 74 63 6c 5f 63  thandle;...tcl_c
104b0 68 61 6e 5f 74 79 70 65 2e 73 65 65 6b 50 72 6f  han_type.seekPro
104c0 63 20 3d 20 4e 55 4c 4c 3b 0a 09 09 74 63 6c 5f  c = NULL;...tcl_
104d0 63 68 61 6e 5f 74 79 70 65 2e 73 65 74 4f 70 74  chan_type.setOpt
104e0 69 6f 6e 50 72 6f 63 20 3d 20 4e 55 4c 4c 3b 0a  ionProc = NULL;.
104f0 09 09 74 63 6c 5f 63 68 61 6e 5f 74 79 70 65 2e  ..tcl_chan_type.
10500 67 65 74 4f 70 74 69 6f 6e 50 72 6f 63 20 3d 20  getOptionProc = 
10510 4e 55 4c 4c 3b 0a 09 09 74 63 6c 5f 63 68 61 6e  NULL;...tcl_chan
10520 5f 74 79 70 65 2e 63 6c 6f 73 65 32 50 72 6f 63  _type.close2Proc
10530 20 3d 20 4e 55 4c 4c 3b 0a 09 09 74 63 6c 5f 63   = NULL;...tcl_c
10540 68 61 6e 5f 74 79 70 65 2e 62 6c 6f 63 6b 4d 6f  han_type.blockMo
10550 64 65 50 72 6f 63 20 3d 20 4e 55 4c 4c 3b 0a 09  deProc = NULL;..
10560 09 74 63 6c 5f 63 68 61 6e 5f 74 79 70 65 2e 66  .tcl_chan_type.f
10570 6c 75 73 68 50 72 6f 63 20 3d 20 4e 55 4c 4c 3b  lushProc = NULL;
10580 0a 09 09 74 63 6c 5f 63 68 61 6e 5f 74 79 70 65  ...tcl_chan_type
10590 2e 68 61 6e 64 6c 65 72 50 72 6f 63 20 3d 20 4e  .handlerProc = N
105a0 55 4c 4c 3b 0a 09 09 74 63 6c 5f 63 68 61 6e 5f  ULL;...tcl_chan_
105b0 74 79 70 65 2e 77 69 64 65 53 65 65 6b 50 72 6f  type.wideSeekPro
105c0 63 20 3d 20 4e 55 4c 4c 3b 0a 09 09 74 63 6c 5f  c = NULL;...tcl_
105d0 63 68 61 6e 5f 74 79 70 65 2e 74 68 72 65 61 64  chan_type.thread
105e0 41 63 74 69 6f 6e 50 72 6f 63 20 3d 20 4e 55 4c  ActionProc = NUL
105f0 4c 3b 0a 09 09 74 63 6c 5f 63 68 61 6e 5f 74 79  L;...tcl_chan_ty
10600 70 65 2e 74 72 75 6e 63 61 74 65 50 72 6f 63 20  pe.truncateProc 
10610 3d 20 4e 55 4c 4c 3b 0a 0a 09 09 74 63 6c 5f 63  = NULL;....tcl_c
10620 68 61 6e 5f 74 79 70 65 5f 69 6e 69 74 20 3d 20  han_type_init = 
10630 31 3b 0a 09 7d 0a 0a 09 73 6e 70 72 69 6e 74 66  1;..}...snprintf
10640 28 63 68 61 6e 5f 6e 61 6d 65 2c 20 73 69 7a 65  (chan_name, size
10650 6f 66 28 63 68 61 6e 5f 6e 61 6d 65 29 2c 20 22  of(chan_name), "
10660 73 6f 63 6b 25 75 22 2c 20 73 6f 63 6b 29 3b 0a  sock%u", sock);.
10670 0a 09 69 64 20 3d 20 6d 61 6c 6c 6f 63 28 73 69  ..id = malloc(si
10680 7a 65 6f 66 28 2a 69 64 29 29 3b 0a 09 69 66 20  zeof(*id));..if 
10690 28 69 64 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09  (id == NULL) {..
106a0 09 72 65 74 75 72 6e 28 4e 55 4c 4c 29 3b 0a 09  .return(NULL);..
106b0 7d 0a 0a 09 69 64 2d 3e 66 64 20 3d 20 73 6f 63  }...id->fd = soc
106c0 6b 3b 0a 09 69 64 2d 3e 63 68 61 6e 20 3d 20 4e  k;..id->chan = N
106d0 55 4c 4c 3b 0a 0a 09 2f 2a 20 43 6f 6e 66 69 67  ULL;.../* Config
106e0 75 72 65 20 73 6f 63 6b 65 74 20 61 73 20 6e 6f  ure socket as no
106f0 6e 2d 62 6c 6f 63 6b 69 6e 67 20 2a 2f 0a 09 73  n-blocking */..s
10700 6f 63 6b 5f 66 6c 61 67 73 20 3d 20 66 63 6e 74  ock_flags = fcnt
10710 6c 28 73 6f 63 6b 2c 20 46 5f 47 45 54 46 4c 2c  l(sock, F_GETFL,
10720 20 30 29 3b 0a 09 69 66 20 28 73 6f 63 6b 5f 66   0);..if (sock_f
10730 6c 61 67 73 20 3d 3d 20 2d 31 29 20 7b 0a 09 09  lags == -1) {...
10740 73 6f 63 6b 5f 66 6c 61 67 73 20 3d 20 4f 5f 4e  sock_flags = O_N
10750 4f 4e 42 4c 4f 43 4b 3b 0a 09 7d 20 65 6c 73 65  ONBLOCK;..} else
10760 20 7b 0a 09 09 73 6f 63 6b 5f 66 6c 61 67 73 20   {...sock_flags 
10770 7c 3d 20 4f 5f 4e 4f 4e 42 4c 4f 43 4b 3b 0a 09  |= O_NONBLOCK;..
10780 7d 0a 09 66 63 6e 74 6c 28 73 6f 63 6b 2c 20 46  }..fcntl(sock, F
10790 5f 53 45 54 46 4c 2c 20 28 6c 6f 6e 67 29 20 73  _SETFL, (long) s
107a0 6f 63 6b 5f 66 6c 61 67 73 29 3b 0a 0a 09 2f 2a  ock_flags);.../*
107b0 20 43 72 65 61 74 65 20 74 68 65 20 63 68 61 6e   Create the chan
107c0 6e 65 6c 20 2a 2f 0a 09 74 63 6c 5f 63 68 61 6e  nel */..tcl_chan
107d0 20 3d 20 54 63 6c 5f 43 72 65 61 74 65 43 68 61   = Tcl_CreateCha
107e0 6e 6e 65 6c 28 26 74 63 6c 5f 63 68 61 6e 5f 74  nnel(&tcl_chan_t
107f0 79 70 65 2c 20 63 68 61 6e 5f 6e 61 6d 65 2c 20  ype, chan_name, 
10800 69 64 2c 20 54 43 4c 5f 52 45 41 44 41 42 4c 45  id, TCL_READABLE
10810 20 7c 20 54 43 4c 5f 57 52 49 54 41 42 4c 45 29   | TCL_WRITABLE)
10820 3b 0a 0a 09 2f 2a 20 55 70 64 61 74 65 20 74 68  ;.../* Update th
10830 65 20 73 74 72 75 63 74 75 72 65 20 70 61 73 73  e structure pass
10840 65 64 20 74 6f 20 65 61 63 68 20 66 75 6e 63 74  ed to each funct
10850 69 6f 6e 20 74 6f 20 69 6e 63 6c 75 64 65 20 74  ion to include t
10860 68 65 20 63 68 61 6e 6e 65 6c 20 6e 61 6d 65 20  he channel name 
10870 2a 2f 0a 09 69 64 2d 3e 63 68 61 6e 20 3d 20 74  */..id->chan = t
10880 63 6c 5f 63 68 61 6e 3b 0a 0a 09 72 65 74 75 72  cl_chan;...retur
10890 6e 28 74 63 6c 5f 63 68 61 6e 29 3b 0a 7d 0a 0a  n(tcl_chan);.}..
108a0 73 74 72 75 63 74 20 74 75 61 70 69 5f 73 6f 63  struct tuapi_soc
108b0 6b 65 74 5f 75 6e 69 78 5f 5f 63 68 61 6e 5f 61  ket_unix__chan_a
108c0 63 63 65 70 74 5f 63 64 20 7b 0a 09 69 6e 74 20  ccept_cd {..int 
108d0 66 64 3b 0a 09 54 63 6c 5f 49 6e 74 65 72 70 20  fd;..Tcl_Interp 
108e0 2a 69 6e 74 65 72 70 3b 0a 09 54 63 6c 5f 4f 62  *interp;..Tcl_Ob
108f0 6a 20 2a 63 6f 6d 6d 61 6e 64 3b 0a 7d 3b 0a 0a  j *command;.};..
10900 73 74 61 74 69 63 20 76 6f 69 64 20 74 75 61 70  static void tuap
10910 69 5f 73 6f 63 6b 65 74 5f 75 6e 69 78 5f 5f 63  i_socket_unix__c
10920 68 61 6e 5f 61 63 63 65 70 74 28 43 6c 69 65 6e  han_accept(Clien
10930 74 44 61 74 61 20 63 64 5f 70 2c 20 69 6e 74 20  tData cd_p, int 
10940 6d 61 73 6b 29 20 7b 0a 09 73 74 72 75 63 74 20  mask) {..struct 
10950 74 75 61 70 69 5f 73 6f 63 6b 65 74 5f 75 6e 69  tuapi_socket_uni
10960 78 5f 5f 63 68 61 6e 5f 61 63 63 65 70 74 5f 63  x__chan_accept_c
10970 64 20 2a 63 64 3b 0a 09 54 63 6c 5f 49 6e 74 65  d *cd;..Tcl_Inte
10980 72 70 20 2a 69 6e 74 65 72 70 3b 0a 09 54 63 6c  rp *interp;..Tcl
10990 5f 43 68 61 6e 6e 65 6c 20 63 68 61 6e 3b 0a 09  _Channel chan;..
109a0 54 63 6c 5f 4f 62 6a 20 2a 63 6f 6d 6d 61 6e 64  Tcl_Obj *command
109b0 2c 20 2a 63 6f 6d 6d 61 6e 64 5f 74 6f 5f 72 75  , *command_to_ru
109c0 6e 5f 6f 62 6a 73 5b 35 5d 2c 20 2a 63 6f 6d 6d  n_objs[5], *comm
109d0 61 6e 64 5f 74 6f 5f 72 75 6e 3b 0a 09 69 6e 74  and_to_run;..int
109e0 20 73 65 74 73 6f 63 6b 6f 70 74 5f 72 65 74 3b   setsockopt_ret;
109f0 0a 09 69 6e 74 20 70 61 73 73 5f 63 72 65 64 73  ..int pass_creds
10a00 5f 74 72 75 65 20 3d 20 31 3b 0a 09 69 6e 74 20  _true = 1;..int 
10a10 66 64 3b 0a 09 69 6e 74 20 73 6f 63 6b 3b 0a 0a  fd;..int sock;..
10a20 09 69 66 20 28 28 6d 61 73 6b 20 26 20 54 43 4c  .if ((mask & TCL
10a30 5f 52 45 41 44 41 42 4c 45 29 20 21 3d 20 54 43  _READABLE) != TC
10a40 4c 5f 52 45 41 44 41 42 4c 45 29 20 7b 0a 09 09  L_READABLE) {...
10a50 72 65 74 75 72 6e 3b 0a 09 7d 0a 09 0a 09 63 64  return;..}....cd
10a60 20 3d 20 63 64 5f 70 3b 0a 0a 09 66 64 20 3d 20   = cd_p;...fd = 
10a70 63 64 2d 3e 66 64 3b 0a 09 69 6e 74 65 72 70 20  cd->fd;..interp 
10a80 3d 20 63 64 2d 3e 69 6e 74 65 72 70 3b 0a 09 63  = cd->interp;..c
10a90 6f 6d 6d 61 6e 64 20 3d 20 63 64 2d 3e 63 6f 6d  ommand = cd->com
10aa0 6d 61 6e 64 3b 0a 0a 09 73 6f 63 6b 20 3d 20 61  mand;...sock = a
10ab0 63 63 65 70 74 28 66 64 2c 20 4e 55 4c 4c 2c 20  ccept(fd, NULL, 
10ac0 4e 55 4c 4c 29 3b 0a 09 69 66 20 28 73 6f 63 6b  NULL);..if (sock
10ad0 20 3c 20 30 29 20 7b 0a 09 09 72 65 74 75 72 6e   < 0) {...return
10ae0 3b 0a 09 7d 0a 0a 09 63 68 61 6e 20 3d 20 74 75  ;..}...chan = tu
10af0 61 70 69 5f 73 6f 63 6b 65 74 5f 75 6e 69 78 5f  api_socket_unix_
10b00 73 6f 63 6b 32 74 63 6c 63 68 61 6e 28 73 6f 63  sock2tclchan(soc
10b10 6b 29 3b 0a 09 69 66 20 28 63 68 61 6e 20 3d 3d  k);..if (chan ==
10b20 20 4e 55 4c 4c 29 20 7b 0a 09 09 63 6c 6f 73 65   NULL) {...close
10b30 28 73 6f 63 6b 29 3b 0a 0a 09 09 72 65 74 75 72  (sock);....retur
10b40 6e 3b 0a 09 7d 0a 0a 09 73 65 74 73 6f 63 6b 6f  n;..}...setsocko
10b50 70 74 5f 72 65 74 20 3d 20 73 65 74 73 6f 63 6b  pt_ret = setsock
10b60 6f 70 74 28 73 6f 63 6b 2c 20 53 4f 4c 5f 53 4f  opt(sock, SOL_SO
10b70 43 4b 45 54 2c 20 53 4f 5f 50 41 53 53 43 52 45  CKET, SO_PASSCRE
10b80 44 2c 20 26 70 61 73 73 5f 63 72 65 64 73 5f 74  D, &pass_creds_t
10b90 72 75 65 2c 20 73 69 7a 65 6f 66 28 70 61 73 73  rue, sizeof(pass
10ba0 5f 63 72 65 64 73 5f 74 72 75 65 29 29 3b 0a 09  _creds_true));..
10bb0 69 66 20 28 73 65 74 73 6f 63 6b 6f 70 74 5f 72  if (setsockopt_r
10bc0 65 74 20 21 3d 20 30 29 20 7b 0a 09 09 63 6c 6f  et != 0) {...clo
10bd0 73 65 28 73 6f 63 6b 29 3b 0a 0a 09 09 72 65 74  se(sock);....ret
10be0 75 72 6e 3b 0a 09 7d 0a 0a 09 54 63 6c 5f 52 65  urn;..}...Tcl_Re
10bf0 67 69 73 74 65 72 43 68 61 6e 6e 65 6c 28 69 6e  gisterChannel(in
10c00 74 65 72 70 2c 20 63 68 61 6e 29 3b 0a 0a 09 63  terp, chan);...c
10c10 6f 6d 6d 61 6e 64 5f 74 6f 5f 72 75 6e 5f 6f 62  ommand_to_run_ob
10c20 6a 73 5b 30 5d 20 3d 20 63 6f 6d 6d 61 6e 64 3b  js[0] = command;
10c30 0a 09 63 6f 6d 6d 61 6e 64 5f 74 6f 5f 72 75 6e  ..command_to_run
10c40 5f 6f 62 6a 73 5b 31 5d 20 3d 20 54 63 6c 5f 4e  _objs[1] = Tcl_N
10c50 65 77 53 74 72 69 6e 67 4f 62 6a 28 54 63 6c 5f  ewStringObj(Tcl_
10c60 47 65 74 43 68 61 6e 6e 65 6c 4e 61 6d 65 28 63  GetChannelName(c
10c70 68 61 6e 29 2c 20 2d 31 29 3b 0a 09 63 6f 6d 6d  han), -1);..comm
10c80 61 6e 64 5f 74 6f 5f 72 75 6e 5f 6f 62 6a 73 5b  and_to_run_objs[
10c90 32 5d 20 3d 20 54 63 6c 5f 4e 65 77 53 74 72 69  2] = Tcl_NewStri
10ca0 6e 67 4f 62 6a 28 22 2e 2e 2e 75 69 64 2e 2e 2e  ngObj("...uid...
10cb0 22 2c 20 2d 31 29 3b 20 2f 2a 20 58 58 58 3a 20  ", -1); /* XXX: 
10cc0 54 4f 44 4f 20 2a 2f 0a 09 63 6f 6d 6d 61 6e 64  TODO */..command
10cd0 5f 74 6f 5f 72 75 6e 5f 6f 62 6a 73 5b 33 5d 20  _to_run_objs[3] 
10ce0 3d 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f  = Tcl_NewStringO
10cf0 62 6a 28 22 2e 2e 2e 67 69 64 2e 2e 2e 22 2c 20  bj("...gid...", 
10d00 2d 31 29 3b 20 2f 2a 20 58 58 58 3a 20 54 4f 44  -1); /* XXX: TOD
10d10 4f 20 2a 2f 0a 09 63 6f 6d 6d 61 6e 64 5f 74 6f  O */..command_to
10d20 5f 72 75 6e 5f 6f 62 6a 73 5b 34 5d 20 3d 20 54  _run_objs[4] = T
10d30 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28  cl_NewStringObj(
10d40 22 2e 2e 2e 70 69 64 2e 2e 2e 22 2c 20 2d 31 29  "...pid...", -1)
10d50 3b 20 2f 2a 20 58 58 58 3a 20 54 4f 44 4f 20 2a  ; /* XXX: TODO *
10d60 2f 0a 09 63 6f 6d 6d 61 6e 64 5f 74 6f 5f 72 75  /..command_to_ru
10d70 6e 20 3d 20 54 63 6c 5f 43 6f 6e 63 61 74 4f 62  n = Tcl_ConcatOb
10d80 6a 28 73 69 7a 65 6f 66 28 63 6f 6d 6d 61 6e 64  j(sizeof(command
10d90 5f 74 6f 5f 72 75 6e 5f 6f 62 6a 73 29 20 2f 20  _to_run_objs) / 
10da0 73 69 7a 65 6f 66 28 63 6f 6d 6d 61 6e 64 5f 74  sizeof(command_t
10db0 6f 5f 72 75 6e 5f 6f 62 6a 73 5b 30 5d 29 2c 20  o_run_objs[0]), 
10dc0 63 6f 6d 6d 61 6e 64 5f 74 6f 5f 72 75 6e 5f 6f  command_to_run_o
10dd0 62 6a 73 29 3b 0a 0a 09 54 63 6c 5f 45 76 61 6c  bjs);...Tcl_Eval
10de0 4f 62 6a 45 78 28 69 6e 74 65 72 70 2c 20 63 6f  ObjEx(interp, co
10df0 6d 6d 61 6e 64 5f 74 6f 5f 72 75 6e 2c 20 54 43  mmand_to_run, TC
10e00 4c 5f 45 56 41 4c 5f 47 4c 4f 42 41 4c 29 3b 0a  L_EVAL_GLOBAL);.
10e10 0a 09 72 65 74 75 72 6e 3b 0a 7d 0a 0a 73 74 61  ..return;.}..sta
10e20 74 69 63 20 69 6e 74 20 74 75 61 70 69 5f 73 6f  tic int tuapi_so
10e30 63 6b 65 74 5f 75 6e 69 78 5f 73 65 72 76 65 72  cket_unix_server
10e40 28 43 6c 69 65 6e 74 44 61 74 61 20 63 64 2c 20  (ClientData cd, 
10e50 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
10e60 72 70 2c 20 69 6e 74 20 73 6f 63 6b 2c 20 63 6f  rp, int sock, co
10e70 6e 73 74 20 63 68 61 72 20 2a 70 61 74 68 2c 20  nst char *path, 
10e80 54 63 6c 5f 4f 62 6a 20 2a 63 6f 6d 6d 61 6e 64  Tcl_Obj *command
10e90 29 20 7b 0a 09 73 74 72 75 63 74 20 74 75 61 70  ) {..struct tuap
10ea0 69 5f 73 6f 63 6b 65 74 5f 75 6e 69 78 5f 5f 63  i_socket_unix__c
10eb0 68 61 6e 5f 61 63 63 65 70 74 5f 63 64 20 2a 61  han_accept_cd *a
10ec0 63 63 65 70 74 5f 63 64 3b 0a 09 73 74 72 75 63  ccept_cd;..struc
10ed0 74 20 73 6f 63 6b 61 64 64 72 5f 75 6e 20 64 65  t sockaddr_un de
10ee0 73 74 3b 0a 09 73 73 69 7a 65 5f 74 20 70 61 74  st;..ssize_t pat
10ef0 68 6c 65 6e 3b 0a 09 69 6e 74 20 62 69 6e 64 5f  hlen;..int bind_
10f00 72 65 74 2c 20 6c 69 73 74 65 6e 5f 72 65 74 3b  ret, listen_ret;
10f10 0a 0a 09 70 61 74 68 6c 65 6e 20 3d 20 73 74 72  ...pathlen = str
10f20 6c 65 6e 28 70 61 74 68 29 20 2b 20 31 3b 0a 09  len(path) + 1;..
10f30 69 66 20 28 70 61 74 68 6c 65 6e 20 3c 3d 20 30  if (pathlen <= 0
10f40 29 20 7b 0a 09 09 54 63 6c 5f 53 65 74 4f 62 6a  ) {...Tcl_SetObj
10f50 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54  Result(interp, T
10f60 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28  cl_NewStringObj(
10f70 22 70 61 74 68 20 74 6f 6f 20 73 68 6f 72 74 22  "path too short"
10f80 2c 20 2d 31 29 29 3b 0a 0a 09 09 72 65 74 75 72  , -1));....retur
10f90 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d  n(TCL_ERROR);..}
10fa0 0a 0a 09 69 66 20 28 70 61 74 68 6c 65 6e 20 3e  ...if (pathlen >
10fb0 20 73 69 7a 65 6f 66 28 64 65 73 74 2e 73 75 6e   sizeof(dest.sun
10fc0 5f 70 61 74 68 29 29 20 7b 0a 09 09 54 63 6c 5f  _path)) {...Tcl_
10fd0 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74  SetObjResult(int
10fe0 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69  erp, Tcl_NewStri
10ff0 6e 67 4f 62 6a 28 22 70 61 74 68 20 74 6f 6f 20  ngObj("path too 
11000 6c 6f 6e 67 22 2c 20 2d 31 29 29 3b 0a 0a 09 09  long", -1));....
11010 72 65 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52  return(TCL_ERROR
11020 29 3b 0a 09 7d 0a 0a 09 64 65 73 74 2e 73 75 6e  );..}...dest.sun
11030 5f 66 61 6d 69 6c 79 20 3d 20 41 46 5f 55 4e 49  _family = AF_UNI
11040 58 3b 0a 09 6d 65 6d 63 70 79 28 64 65 73 74 2e  X;..memcpy(dest.
11050 73 75 6e 5f 70 61 74 68 2c 20 70 61 74 68 2c 20  sun_path, path, 
11060 70 61 74 68 6c 65 6e 29 3b 0a 0a 09 62 69 6e 64  pathlen);...bind
11070 5f 72 65 74 20 3d 20 62 69 6e 64 28 73 6f 63 6b  _ret = bind(sock
11080 2c 20 28 73 74 72 75 63 74 20 73 6f 63 6b 61 64  , (struct sockad
11090 64 72 20 2a 29 20 26 64 65 73 74 2c 20 73 69 7a  dr *) &dest, siz
110a0 65 6f 66 28 64 65 73 74 29 29 3b 0a 09 69 66 20  eof(dest));..if 
110b0 28 62 69 6e 64 5f 72 65 74 20 21 3d 20 30 29 20  (bind_ret != 0) 
110c0 7b 0a 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65  {...Tcl_SetObjRe
110d0 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c  sult(interp, Tcl
110e0 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 73 74  _NewStringObj(st
110f0 72 65 72 72 6f 72 28 65 72 72 6e 6f 29 2c 20 2d  rerror(errno), -
11100 31 29 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 54  1));....return(T
11110 43 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09  CL_ERROR);..}...
11120 6c 69 73 74 65 6e 5f 72 65 74 20 3d 20 6c 69 73  listen_ret = lis
11130 74 65 6e 28 73 6f 63 6b 2c 20 32 29 3b 0a 09 69  ten(sock, 2);..i
11140 66 20 28 6c 69 73 74 65 6e 5f 72 65 74 20 21 3d  f (listen_ret !=
11150 20 30 29 20 7b 0a 09 09 54 63 6c 5f 53 65 74 4f   0) {...Tcl_SetO
11160 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  bjResult(interp,
11170 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62   Tcl_NewStringOb
11180 6a 28 73 74 72 65 72 72 6f 72 28 65 72 72 6e 6f  j(strerror(errno
11190 29 2c 20 2d 31 29 29 3b 0a 0a 09 09 72 65 74 75  ), -1));....retu
111a0 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 09  rn(TCL_ERROR);..
111b0 7d 0a 0a 09 61 63 63 65 70 74 5f 63 64 20 3d 20  }...accept_cd = 
111c0 6d 61 6c 6c 6f 63 28 73 69 7a 65 6f 66 28 2a 61  malloc(sizeof(*a
111d0 63 63 65 70 74 5f 63 64 29 29 3b 0a 09 69 66 20  ccept_cd));..if 
111e0 28 61 63 63 65 70 74 5f 63 64 20 3d 3d 20 4e 55  (accept_cd == NU
111f0 4c 4c 29 20 7b 0a 09 09 54 63 6c 5f 53 65 74 4f  LL) {...Tcl_SetO
11200 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  bjResult(interp,
11210 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62   Tcl_NewStringOb
11220 6a 28 73 74 72 65 72 72 6f 72 28 65 72 72 6e 6f  j(strerror(errno
11230 29 2c 20 2d 31 29 29 3b 0a 0a 09 09 72 65 74 75  ), -1));....retu
11240 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 09  rn(TCL_ERROR);..
11250 7d 0a 0a 09 61 63 63 65 70 74 5f 63 64 2d 3e 66  }...accept_cd->f
11260 64 20 3d 20 73 6f 63 6b 3b 0a 09 61 63 63 65 70  d = sock;..accep
11270 74 5f 63 64 2d 3e 69 6e 74 65 72 70 20 3d 20 69  t_cd->interp = i
11280 6e 74 65 72 70 3b 0a 09 61 63 63 65 70 74 5f 63  nterp;..accept_c
11290 64 2d 3e 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6d  d->command = com
112a0 6d 61 6e 64 3b 0a 0a 09 54 63 6c 5f 49 6e 63 72  mand;...Tcl_Incr
112b0 52 65 66 43 6f 75 6e 74 28 63 6f 6d 6d 61 6e 64  RefCount(command
112c0 29 3b 0a 0a 09 54 63 6c 5f 43 72 65 61 74 65 46  );...Tcl_CreateF
112d0 69 6c 65 48 61 6e 64 6c 65 72 28 73 6f 63 6b 2c  ileHandler(sock,
112e0 20 54 43 4c 5f 52 45 41 44 41 42 4c 45 2c 20 74   TCL_READABLE, t
112f0 75 61 70 69 5f 73 6f 63 6b 65 74 5f 75 6e 69 78  uapi_socket_unix
11300 5f 5f 63 68 61 6e 5f 61 63 63 65 70 74 2c 20 61  __chan_accept, a
11310 63 63 65 70 74 5f 63 64 29 3b 0a 0a 09 72 65 74  ccept_cd);...ret
11320 75 72 6e 28 54 43 4c 5f 4f 4b 29 3b 0a 7d 0a 0a  urn(TCL_OK);.}..
11330 73 74 61 74 69 63 20 69 6e 74 20 74 75 61 70 69  static int tuapi
11340 5f 73 6f 63 6b 65 74 5f 75 6e 69 78 5f 63 6c 69  _socket_unix_cli
11350 65 6e 74 28 43 6c 69 65 6e 74 44 61 74 61 20 63  ent(ClientData c
11360 64 2c 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  d, Tcl_Interp *i
11370 6e 74 65 72 70 2c 20 69 6e 74 20 73 6f 63 6b 2c  nterp, int sock,
11380 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 70 61 74   const char *pat
11390 68 29 20 7b 0a 09 54 63 6c 5f 43 68 61 6e 6e 65  h) {..Tcl_Channe
113a0 6c 20 63 68 61 6e 3b 0a 09 73 74 72 75 63 74 20  l chan;..struct 
113b0 73 6f 63 6b 61 64 64 72 5f 75 6e 20 64 65 73 74  sockaddr_un dest
113c0 3b 0a 09 73 73 69 7a 65 5f 74 20 70 61 74 68 6c  ;..ssize_t pathl
113d0 65 6e 3b 0a 09 69 6e 74 20 63 6f 6e 6e 65 63 74  en;..int connect
113e0 5f 72 65 74 2c 20 73 65 74 73 6f 63 6b 6f 70 74  _ret, setsockopt
113f0 5f 72 65 74 3b 0a 09 69 6e 74 20 70 61 73 73 5f  _ret;..int pass_
11400 63 72 65 64 73 5f 74 72 75 65 20 3d 20 31 3b 0a  creds_true = 1;.
11410 0a 09 70 61 74 68 6c 65 6e 20 3d 20 73 74 72 6c  ..pathlen = strl
11420 65 6e 28 70 61 74 68 29 20 2b 20 31 3b 0a 09 69  en(path) + 1;..i
11430 66 20 28 70 61 74 68 6c 65 6e 20 3c 3d 20 30 29  f (pathlen <= 0)
11440 20 7b 0a 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52   {...Tcl_SetObjR
11450 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63  esult(interp, Tc
11460 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22  l_NewStringObj("
11470 70 61 74 68 20 74 6f 6f 20 73 68 6f 72 74 22 2c  path too short",
11480 20 2d 31 29 29 3b 0a 0a 09 09 72 65 74 75 72 6e   -1));....return
11490 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a  (TCL_ERROR);..}.
114a0 0a 09 69 66 20 28 70 61 74 68 6c 65 6e 20 3e 20  ..if (pathlen > 
114b0 73 69 7a 65 6f 66 28 64 65 73 74 2e 73 75 6e 5f  sizeof(dest.sun_
114c0 70 61 74 68 29 29 20 7b 0a 09 09 54 63 6c 5f 53  path)) {...Tcl_S
114d0 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
114e0 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e  rp, Tcl_NewStrin
114f0 67 4f 62 6a 28 22 70 61 74 68 20 74 6f 6f 20 6c  gObj("path too l
11500 6f 6e 67 22 2c 20 2d 31 29 29 3b 0a 0a 09 09 72  ong", -1));....r
11510 65 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29  eturn(TCL_ERROR)
11520 3b 0a 09 7d 0a 0a 09 64 65 73 74 2e 73 75 6e 5f  ;..}...dest.sun_
11530 66 61 6d 69 6c 79 20 3d 20 41 46 5f 55 4e 49 58  family = AF_UNIX
11540 3b 0a 09 6d 65 6d 63 70 79 28 64 65 73 74 2e 73  ;..memcpy(dest.s
11550 75 6e 5f 70 61 74 68 2c 20 70 61 74 68 2c 20 70  un_path, path, p
11560 61 74 68 6c 65 6e 29 3b 0a 0a 09 63 6f 6e 6e 65  athlen);...conne
11570 63 74 5f 72 65 74 20 3d 20 63 6f 6e 6e 65 63 74  ct_ret = connect
11580 28 73 6f 63 6b 2c 20 28 73 74 72 75 63 74 20 73  (sock, (struct s
11590 6f 63 6b 61 64 64 72 20 2a 29 20 26 64 65 73 74  ockaddr *) &dest
115a0 2c 20 73 69 7a 65 6f 66 28 64 65 73 74 29 29 3b  , sizeof(dest));
115b0 0a 09 69 66 20 28 63 6f 6e 6e 65 63 74 5f 72 65  ..if (connect_re
115c0 74 20 21 3d 20 30 29 20 7b 0a 09 09 54 63 6c 5f  t != 0) {...Tcl_
115d0 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74  SetObjResult(int
115e0 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69  erp, Tcl_NewStri
115f0 6e 67 4f 62 6a 28 73 74 72 65 72 72 6f 72 28 65  ngObj(strerror(e
11600 72 72 6e 6f 29 2c 20 2d 31 29 29 3b 0a 0a 09 09  rrno), -1));....
11610 72 65 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52  return(TCL_ERROR
11620 29 3b 0a 09 7d 0a 0a 09 73 65 74 73 6f 63 6b 6f  );..}...setsocko
11630 70 74 5f 72 65 74 20 3d 20 73 65 74 73 6f 63 6b  pt_ret = setsock
11640 6f 70 74 28 73 6f 63 6b 2c 20 53 4f 4c 5f 53 4f  opt(sock, SOL_SO
11650 43 4b 45 54 2c 20 53 4f 5f 50 41 53 53 43 52 45  CKET, SO_PASSCRE
11660 44 2c 20 26 70 61 73 73 5f 63 72 65 64 73 5f 74  D, &pass_creds_t
11670 72 75 65 2c 20 73 69 7a 65 6f 66 28 70 61 73 73  rue, sizeof(pass
11680 5f 63 72 65 64 73 5f 74 72 75 65 29 29 3b 0a 09  _creds_true));..
11690 69 66 20 28 73 65 74 73 6f 63 6b 6f 70 74 5f 72  if (setsockopt_r
116a0 65 74 20 21 3d 20 30 29 20 7b 0a 09 09 54 63 6c  et != 0) {...Tcl
116b0 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e  _SetObjResult(in
116c0 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72  terp, Tcl_NewStr
116d0 69 6e 67 4f 62 6a 28 73 74 72 65 72 72 6f 72 28  ingObj(strerror(
116e0 65 72 72 6e 6f 29 2c 20 2d 31 29 29 3b 0a 0a 09  errno), -1));...
116f0 09 72 65 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f  .return(TCL_ERRO
11700 52 29 3b 0a 09 7d 0a 0a 09 63 68 61 6e 20 3d 20  R);..}...chan = 
11710 74 75 61 70 69 5f 73 6f 63 6b 65 74 5f 75 6e 69  tuapi_socket_uni
11720 78 5f 73 6f 63 6b 32 74 63 6c 63 68 61 6e 28 73  x_sock2tclchan(s
11730 6f 63 6b 29 3b 0a 09 69 66 20 28 63 68 61 6e 20  ock);..if (chan 
11740 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 54 63 6c  == NULL) {...Tcl
11750 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e  _SetObjResult(in
11760 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72  terp, Tcl_NewStr
11770 69 6e 67 4f 62 6a 28 22 75 6e 61 62 6c 65 20 74  ingObj("unable t
11780 6f 20 63 72 65 61 74 65 20 54 63 6c 20 63 68 61  o create Tcl cha
11790 6e 6e 65 6c 22 2c 20 2d 31 29 29 3b 0a 0a 09 09  nnel", -1));....
117a0 72 65 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52  return(TCL_ERROR
117b0 29 3b 0a 09 7d 0a 0a 09 54 63 6c 5f 52 65 67 69  );..}...Tcl_Regi
117c0 73 74 65 72 43 68 61 6e 6e 65 6c 28 69 6e 74 65  sterChannel(inte
117d0 72 70 2c 20 63 68 61 6e 29 3b 0a 0a 09 54 63 6c  rp, chan);...Tcl
117e0 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e  _SetObjResult(in
117f0 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72  terp, Tcl_NewStr
11800 69 6e 67 4f 62 6a 28 54 63 6c 5f 47 65 74 43 68  ingObj(Tcl_GetCh
11810 61 6e 6e 65 6c 4e 61 6d 65 28 63 68 61 6e 29 2c  annelName(chan),
11820 20 2d 31 29 29 3b 0a 0a 09 72 65 74 75 72 6e 28   -1));...return(
11830 54 43 4c 5f 4f 4b 29 3b 0a 7d 0a 0a 73 74 61 74  TCL_OK);.}..stat
11840 69 63 20 69 6e 74 20 74 75 61 70 69 5f 73 6f 63  ic int tuapi_soc
11850 6b 65 74 5f 75 6e 69 78 28 43 6c 69 65 6e 74 44  ket_unix(ClientD
11860 61 74 61 20 63 64 2c 20 54 63 6c 5f 49 6e 74 65  ata cd, Tcl_Inte
11870 72 70 20 2a 69 6e 74 65 72 70 2c 20 69 6e 74 20  rp *interp, int 
11880 6f 62 6a 63 2c 20 54 63 6c 5f 4f 62 6a 20 2a 43  objc, Tcl_Obj *C
11890 4f 4e 53 54 20 6f 62 6a 76 5b 5d 29 20 7b 0a 09  ONST objv[]) {..
118a0 54 63 6c 5f 4f 62 6a 20 2a 70 61 74 68 5f 6f 62  Tcl_Obj *path_ob
118b0 6a 2c 20 2a 63 6f 6d 6d 61 6e 64 5f 6f 62 6a 3b  j, *command_obj;
118c0 0a 09 63 68 61 72 20 2a 70 61 74 68 3b 0a 09 69  ..char *path;..i
118d0 6e 74 20 72 65 74 76 61 6c 3b 0a 09 69 6e 74 20  nt retval;..int 
118e0 73 6f 63 6b 3b 0a 0a 09 69 66 20 28 6f 62 6a 63  sock;...if (objc
118f0 20 3c 20 32 29 20 7b 0a 09 09 54 63 6c 5f 53 65   < 2) {...Tcl_Se
11900 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72  tObjResult(inter
11910 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67  p, Tcl_NewString
11920 4f 62 6a 28 22 77 72 6f 6e 67 20 23 20 61 72 67  Obj("wrong # arg
11930 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 3a  s: should be \":
11940 3a 74 75 61 70 69 3a 3a 73 79 73 63 61 6c 6c 3a  :tuapi::syscall:
11950 3a 73 6f 63 6b 65 74 5f 75 6e 69 78 20 70 61 74  :socket_unix pat
11960 68 5c 22 20 6f 72 20 5c 22 3a 3a 74 75 61 70 69  h\" or \"::tuapi
11970 3a 3a 73 79 73 63 61 6c 6c 3a 3a 73 6f 63 6b 65  ::syscall::socke
11980 74 5f 75 6e 69 78 20 2d 73 65 72 76 65 72 20 63  t_unix -server c
11990 6f 6d 6d 61 6e 64 20 70 61 74 68 5c 22 22 2c 20  ommand path\"", 
119a0 2d 31 29 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28  -1));....return(
119b0 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a  TCL_ERROR);..}..
119c0 09 70 61 74 68 5f 6f 62 6a 20 3d 20 6f 62 6a 76  .path_obj = objv
119d0 5b 31 5d 3b 0a 09 70 61 74 68 20 3d 20 54 63 6c  [1];..path = Tcl
119e0 5f 47 65 74 53 74 72 69 6e 67 28 70 61 74 68 5f  _GetString(path_
119f0 6f 62 6a 29 3b 0a 0a 09 73 6f 63 6b 20 3d 20 73  obj);...sock = s
11a00 6f 63 6b 65 74 28 41 46 5f 55 4e 49 58 2c 20 53  ocket(AF_UNIX, S
11a10 4f 43 4b 5f 53 54 52 45 41 4d 2c 20 30 29 3b 0a  OCK_STREAM, 0);.
11a20 09 69 66 20 28 73 6f 63 6b 20 3d 3d 20 2d 31 29  .if (sock == -1)
11a30 20 7b 0a 09 09 54 63 6c 5f 53 65 74 4f 62 6a 52   {...Tcl_SetObjR
11a40 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63  esult(interp, Tc
11a50 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 73  l_NewStringObj(s
11a60 74 72 65 72 72 6f 72 28 65 72 72 6e 6f 29 2c 20  trerror(errno), 
11a70 2d 31 29 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28  -1));....return(
11a80 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a  TCL_ERROR);..}..
11a90 09 69 66 20 28 73 74 72 63 6d 70 28 70 61 74 68  .if (strcmp(path
11aa0 2c 20 22 2d 73 65 72 76 65 72 22 29 20 3d 3d 20  , "-server") == 
11ab0 30 29 20 7b 0a 09 09 69 66 20 28 6f 62 6a 63 20  0) {...if (objc 
11ac0 21 3d 20 34 29 20 7b 0a 09 09 09 54 63 6c 5f 53  != 4) {....Tcl_S
11ad0 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
11ae0 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e  rp, Tcl_NewStrin
11af0 67 4f 62 6a 28 22 77 72 6f 6e 67 20 23 20 61 72  gObj("wrong # ar
11b00 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
11b10 3a 3a 74 75 61 70 69 3a 3a 73 79 73 63 61 6c 6c  ::tuapi::syscall
11b20 3a 3a 73 6f 63 6b 65 74 5f 75 6e 69 78 20 2d 73  ::socket_unix -s
11b30 65 72 76 65 72 20 63 6f 6d 6d 61 6e 64 20 70 61  erver command pa
11b40 74 68 5c 22 22 2c 20 2d 31 29 29 3b 0a 0a 09 09  th\"", -1));....
11b50 09 63 6c 6f 73 65 28 73 6f 63 6b 29 3b 0a 0a 09  .close(sock);...
11b60 09 09 72 65 74 75 72 6e 28 54 43 4c 5f 45 52 52  ..return(TCL_ERR
11b70 4f 52 29 3b 0a 09 09 7d 0a 0a 09 09 63 6f 6d 6d  OR);...}....comm
11b80 61 6e 64 5f 6f 62 6a 20 3d 20 6f 62 6a 76 5b 32  and_obj = objv[2
11b90 5d 3b 0a 09 09 70 61 74 68 5f 6f 62 6a 20 3d 20  ];...path_obj = 
11ba0 6f 62 6a 76 5b 33 5d 3b 0a 0a 09 09 70 61 74 68  objv[3];....path
11bb0 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67   = Tcl_GetString
11bc0 28 70 61 74 68 5f 6f 62 6a 29 3b 0a 0a 09 09 72  (path_obj);....r
11bd0 65 74 76 61 6c 20 3d 20 74 75 61 70 69 5f 73 6f  etval = tuapi_so
11be0 63 6b 65 74 5f 75 6e 69 78 5f 73 65 72 76 65 72  cket_unix_server
11bf0 28 63 64 2c 20 69 6e 74 65 72 70 2c 20 73 6f 63  (cd, interp, soc
11c00 6b 2c 20 70 61 74 68 2c 20 63 6f 6d 6d 61 6e 64  k, path, command
11c10 5f 6f 62 6a 29 3b 0a 09 7d 20 65 6c 73 65 20 7b  _obj);..} else {
11c20 0a 09 09 69 66 20 28 6f 62 6a 63 20 21 3d 20 32  ...if (objc != 2
11c30 29 20 7b 0a 09 09 09 54 63 6c 5f 53 65 74 4f 62  ) {....Tcl_SetOb
11c40 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  jResult(interp, 
11c50 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a  Tcl_NewStringObj
11c60 28 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20  ("wrong # args: 
11c70 73 68 6f 75 6c 64 20 62 65 20 5c 22 3a 3a 74 75  should be \"::tu
11c80 61 70 69 3a 3a 73 79 73 63 61 6c 6c 3a 3a 73 6f  api::syscall::so
11c90 63 6b 65 74 5f 75 6e 69 78 20 70 61 74 68 5c 22  cket_unix path\"
11ca0 22 2c 20 2d 31 29 29 3b 0a 0a 09 09 09 63 6c 6f  ", -1));.....clo
11cb0 73 65 28 73 6f 63 6b 29 3b 0a 0a 09 09 09 72 65  se(sock);.....re
11cc0 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b  turn(TCL_ERROR);
11cd0 0a 09 09 7d 0a 0a 09 09 72 65 74 76 61 6c 20 3d  ...}....retval =
11ce0 20 74 75 61 70 69 5f 73 6f 63 6b 65 74 5f 75 6e   tuapi_socket_un
11cf0 69 78 5f 63 6c 69 65 6e 74 28 63 64 2c 20 69 6e  ix_client(cd, in
11d00 74 65 72 70 2c 20 73 6f 63 6b 2c 20 70 61 74 68  terp, sock, path
11d10 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 72 65 74 76  );..}...if (retv
11d20 61 6c 20 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a  al != TCL_OK) {.
11d30 09 09 63 6c 6f 73 65 28 73 6f 63 6b 29 3b 0a 09  ..close(sock);..
11d40 7d 0a 0a 09 72 65 74 75 72 6e 28 72 65 74 76 61  }...return(retva
11d50 6c 29 3b 0a 7d 0a 23 65 6c 73 65 0a 73 74 61 74  l);.}.#else.stat
11d60 69 63 20 69 6e 74 20 74 75 61 70 69 5f 73 6f 63  ic int tuapi_soc
11d70 6b 65 74 5f 75 6e 69 78 28 43 6c 69 65 6e 74 44  ket_unix(ClientD
11d80 61 74 61 20 63 64 2c 20 54 63 6c 5f 49 6e 74 65  ata cd, Tcl_Inte
11d90 72 70 20 2a 69 6e 74 65 72 70 2c 20 69 6e 74 20  rp *interp, int 
11da0 6f 62 6a 63 2c 20 54 63 6c 5f 4f 62 6a 20 2a 43  objc, Tcl_Obj *C
11db0 4f 4e 53 54 20 6f 62 6a 76 5b 5d 29 20 7b 0a 09  ONST objv[]) {..
11dc0 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
11dd0 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77  (interp, Tcl_New
11de0 53 74 72 69 6e 67 4f 62 6a 28 22 6e 6f 74 20 69  StringObj("not i
11df0 6d 70 6c 65 6d 65 6e 74 65 64 22 2c 20 2d 31 29  mplemented", -1)
11e00 29 3b 0a 09 72 65 74 75 72 6e 28 54 43 4c 5f 45  );..return(TCL_E
11e10 52 52 4f 52 29 0a 7d 0a 23 65 6e 64 69 66 0a 0a  RROR).}.#endif..
11e20 73 74 61 74 69 63 20 69 6e 74 20 74 75 61 70 69  static int tuapi
11e30 5f 74 73 6d 66 5f 73 74 61 72 74 5f 73 76 63 28  _tsmf_start_svc(
11e40 43 6c 69 65 6e 74 44 61 74 61 20 63 64 2c 20 54  ClientData cd, T
11e50 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
11e60 70 2c 20 69 6e 74 20 6f 62 6a 63 2c 20 54 63 6c  p, int objc, Tcl
11e70 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
11e80 5b 5d 29 20 7b 0a 09 73 74 72 75 63 74 20 74 69  []) {..struct ti
11e90 6d 65 76 61 6c 20 73 65 6c 65 63 74 5f 74 69 6d  meval select_tim
11ea0 65 6f 75 74 3b 0a 09 54 63 6c 5f 57 69 64 65 49  eout;..Tcl_WideI
11eb0 6e 74 20 75 6d 61 73 6b 5f 76 61 6c 2c 20 74 69  nt umask_val, ti
11ec0 6d 65 6f 75 74 5f 76 61 6c 2c 20 75 69 64 5f 76  meout_val, uid_v
11ed0 61 6c 2c 20 67 69 64 5f 76 61 6c 3b 0a 09 54 63  al, gid_val;..Tc
11ee0 6c 5f 4f 62 6a 20 2a 66 69 6c 65 6e 61 6d 65 5f  l_Obj *filename_
11ef0 6f 62 6a 2c 20 2a 65 6e 76 5f 6f 62 6a 2c 20 2a  obj, *env_obj, *
11f00 6c 6f 67 66 69 6c 65 5f 6f 62 6a 2c 20 2a 2a 65  logfile_obj, **e
11f10 6e 76 5f 65 6e 74 72 79 5f 6f 62 6a 76 2c 20 2a  nv_entry_objv, *
11f20 63 77 64 5f 6f 62 6a 2c 20 2a 75 6d 61 73 6b 5f  cwd_obj, *umask_
11f30 6f 62 6a 2c 20 2a 75 69 64 5f 6f 62 6a 2c 20 2a  obj, *uid_obj, *
11f40 67 69 64 5f 6f 62 6a 3b 0a 09 54 63 6c 5f 4f 62  gid_obj;..Tcl_Ob
11f50 6a 20 2a 73 72 69 5f 6f 62 6a 2c 20 2a 74 69 6d  j *sri_obj, *tim
11f60 65 6f 75 74 5f 6f 62 6a 3b 0a 09 70 69 64 5f 74  eout_obj;..pid_t
11f70 20 63 68 69 6c 64 2c 20 63 68 69 6c 64 5f 70 67   child, child_pg
11f80 69 64 20 3d 20 2d 31 2c 20 77 61 69 74 70 69 64  id = -1, waitpid
11f90 5f 72 65 74 3b 0a 09 73 73 69 7a 65 5f 74 20 72  _ret;..ssize_t r
11fa0 65 61 64 5f 72 65 74 3b 0a 09 74 69 6d 65 5f 74  ead_ret;..time_t
11fb0 20 63 75 72 72 74 69 6d 65 3b 0a 09 63 68 61 72   currtime;..char
11fc0 20 2a 61 72 67 76 5b 33 5d 2c 20 2a 65 6e 76 76   *argv[3], *envv
11fd0 5b 35 31 32 5d 3b 0a 09 63 68 61 72 20 2a 6c 6f  [512];..char *lo
11fe0 67 66 69 6c 65 2c 20 2a 66 69 6c 65 6e 61 6d 65  gfile, *filename
11ff0 2c 20 2a 63 77 64 3b 0a 09 63 68 61 72 20 6c 6f  , *cwd;..char lo
12000 67 6d 73 67 5b 32 30 34 38 5d 3b 0a 09 66 64 5f  gmsg[2048];..fd_
12010 73 65 74 20 72 65 61 64 5f 66 64 73 65 74 3b 0a  set read_fdset;.
12020 09 69 6e 74 20 70 69 70 65 5f 72 65 74 2c 20 73  .int pipe_ret, s
12030 65 74 73 69 64 5f 72 65 74 2c 20 65 78 65 63 76  etsid_ret, execv
12040 65 5f 72 65 74 2c 20 74 63 6c 5f 72 65 74 2c 20  e_ret, tcl_ret, 
12050 73 65 6c 65 63 74 5f 72 65 74 2c 20 63 68 64 69  select_ret, chdi
12060 72 5f 72 65 74 3b 0a 09 69 6e 74 20 6e 75 6c 6c  r_ret;..int null
12070 5f 66 64 2c 20 6c 6f 67 5f 66 64 2c 20 74 6d 70  _fd, log_fd, tmp
12080 5f 66 64 2c 20 6d 61 78 5f 66 64 3b 0a 09 69 6e  _fd, max_fd;..in
12090 74 20 65 6e 76 5f 65 6e 74 72 79 5f 6f 62 6a 63  t env_entry_objc
120a0 3b 0a 09 69 6e 74 20 66 64 73 5b 32 5d 2c 20 66  ;..int fds[2], f
120b0 64 3b 0a 09 69 6e 74 20 73 74 61 74 75 73 3b 0a  d;..int status;.
120c0 09 69 6e 74 20 69 64 78 3b 0a 0a 09 2f 2a 20 31  .int idx;.../* 1
120d0 2e 20 50 61 72 73 65 20 61 72 67 75 6d 65 6e 74  . Parse argument
120e0 73 20 2a 2f 0a 09 2f 2a 20 31 2e 61 2e 20 45 6e  s */../* 1.a. En
120f0 73 75 72 65 20 74 68 65 20 63 6f 72 72 65 63 74  sure the correct
12100 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   number of argum
12110 65 6e 74 73 20 77 65 72 65 20 70 61 73 73 65 64  ents were passed
12120 20 2a 2f 0a 09 69 66 20 28 6f 62 6a 63 20 21 3d   */..if (objc !=
12130 20 31 30 29 20 7b 0a 09 09 54 63 6c 5f 53 65 74   10) {...Tcl_Set
12140 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70  ObjResult(interp
12150 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f  , Tcl_NewStringO
12160 62 6a 28 22 77 72 6f 6e 67 20 23 20 61 72 67 73  bj("wrong # args
12170 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 3a 3a  : should be \"::
12180 74 75 61 70 69 3a 3a 73 79 73 63 61 6c 6c 3a 3a  tuapi::syscall::
12190 74 73 6d 66 5f 73 74 61 72 74 5f 73 76 63 20 73  tsmf_start_svc s
121a0 72 69 20 66 69 6c 65 6e 61 6d 65 20 6c 6f 67 66  ri filename logf
121b0 69 6c 65 20 65 6e 76 20 63 77 64 20 75 6d 61 73  ile env cwd umas
121c0 6b 20 75 69 64 20 67 69 64 20 74 69 6d 65 6f 75  k uid gid timeou
121d0 74 5c 22 22 2c 20 2d 31 29 29 3b 0a 0a 09 09 72  t\"", -1));....r
121e0 65 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29  eturn(TCL_ERROR)
121f0 3b 0a 09 7d 0a 0a 09 2f 2a 20 31 2e 62 2e 20 49  ;..}.../* 1.b. I
12200 64 65 6e 74 69 66 79 20 54 63 6c 5f 4f 62 6a 73  dentify Tcl_Objs
12210 20 74 6f 20 75 73 65 20 66 6f 72 20 65 61 63 68   to use for each
12220 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 09 73 72   argument */..sr
12230 69 5f 6f 62 6a 20 3d 20 6f 62 6a 76 5b 31 5d 3b  i_obj = objv[1];
12240 0a 09 66 69 6c 65 6e 61 6d 65 5f 6f 62 6a 20 3d  ..filename_obj =
12250 20 6f 62 6a 76 5b 32 5d 3b 0a 09 6c 6f 67 66 69   objv[2];..logfi
12260 6c 65 5f 6f 62 6a 20 3d 20 6f 62 6a 76 5b 33 5d  le_obj = objv[3]
12270 3b 0a 09 65 6e 76 5f 6f 62 6a 20 3d 20 6f 62 6a  ;..env_obj = obj
12280 76 5b 34 5d 3b 0a 09 63 77 64 5f 6f 62 6a 20 3d  v[4];..cwd_obj =
12290 20 6f 62 6a 76 5b 35 5d 3b 0a 09 75 6d 61 73 6b   objv[5];..umask
122a0 5f 6f 62 6a 20 3d 20 6f 62 6a 76 5b 36 5d 3b 0a  _obj = objv[6];.
122b0 09 75 69 64 5f 6f 62 6a 20 3d 20 6f 62 6a 76 5b  .uid_obj = objv[
122c0 37 5d 3b 0a 09 67 69 64 5f 6f 62 6a 20 3d 20 6f  7];..gid_obj = o
122d0 62 6a 76 5b 38 5d 3b 0a 09 74 69 6d 65 6f 75 74  bjv[8];..timeout
122e0 5f 6f 62 6a 20 3d 20 6f 62 6a 76 5b 39 5d 3b 0a  _obj = objv[9];.
122f0 0a 09 2f 2a 20 31 2e 63 2e 20 53 74 6f 72 65 20  ../* 1.c. Store 
12300 73 74 72 69 6e 67 20 61 72 67 75 6d 65 6e 74 73  string arguments
12310 20 2a 2f 0a 09 66 69 6c 65 6e 61 6d 65 20 3d 20   */..filename = 
12320 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 66 69  Tcl_GetString(fi
12330 6c 65 6e 61 6d 65 5f 6f 62 6a 29 3b 0a 09 6c 6f  lename_obj);..lo
12340 67 66 69 6c 65 20 3d 20 54 63 6c 5f 47 65 74 53  gfile = Tcl_GetS
12350 74 72 69 6e 67 28 6c 6f 67 66 69 6c 65 5f 6f 62  tring(logfile_ob
12360 6a 29 3b 0a 09 63 77 64 20 3d 20 54 63 6c 5f 47  j);..cwd = Tcl_G
12370 65 74 53 74 72 69 6e 67 28 63 77 64 5f 6f 62 6a  etString(cwd_obj
12380 29 3b 0a 0a 09 2f 2a 20 31 2e 64 2e 20 49 6e 74  );.../* 1.d. Int
12390 65 67 65 72 20 6f 62 6a 65 63 74 73 20 2a 2f 0a  eger objects */.
123a0 09 74 63 6c 5f 72 65 74 20 3d 20 54 63 6c 5f 47  .tcl_ret = Tcl_G
123b0 65 74 57 69 64 65 49 6e 74 46 72 6f 6d 4f 62 6a  etWideIntFromObj
123c0 28 69 6e 74 65 72 70 2c 20 75 6d 61 73 6b 5f 6f  (interp, umask_o
123d0 62 6a 2c 20 26 75 6d 61 73 6b 5f 76 61 6c 29 3b  bj, &umask_val);
123e0 0a 09 69 66 20 28 74 63 6c 5f 72 65 74 20 21 3d  ..if (tcl_ret !=
123f0 20 54 43 4c 5f 4f 4b 29 20 7b 0a 09 09 72 65 74   TCL_OK) {...ret
12400 75 72 6e 28 74 63 6c 5f 72 65 74 29 3b 0a 09 7d  urn(tcl_ret);..}
12410 0a 0a 09 74 63 6c 5f 72 65 74 20 3d 20 54 63 6c  ...tcl_ret = Tcl
12420 5f 47 65 74 57 69 64 65 49 6e 74 46 72 6f 6d 4f  _GetWideIntFromO
12430 62 6a 28 69 6e 74 65 72 70 2c 20 74 69 6d 65 6f  bj(interp, timeo
12440 75 74 5f 6f 62 6a 2c 20 26 74 69 6d 65 6f 75 74  ut_obj, &timeout
12450 5f 76 61 6c 29 3b 0a 09 69 66 20 28 74 63 6c 5f  _val);..if (tcl_
12460 72 65 74 20 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b  ret != TCL_OK) {
12470 0a 09 09 72 65 74 75 72 6e 28 74 63 6c 5f 72 65  ...return(tcl_re
12480 74 29 3b 0a 09 7d 0a 0a 09 74 63 6c 5f 72 65 74  t);..}...tcl_ret
12490 20 3d 20 54 63 6c 5f 47 65 74 57 69 64 65 49 6e   = Tcl_GetWideIn
124a0 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c  tFromObj(interp,
124b0 20 75 69 64 5f 6f 62 6a 2c 20 26 75 69 64 5f 76   uid_obj, &uid_v
124c0 61 6c 29 3b 0a 09 69 66 20 28 74 63 6c 5f 72 65  al);..if (tcl_re
124d0 74 20 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a 09  t != TCL_OK) {..
124e0 09 72 65 74 75 72 6e 28 74 63 6c 5f 72 65 74 29  .return(tcl_ret)
124f0 3b 0a 09 7d 0a 0a 09 74 63 6c 5f 72 65 74 20 3d  ;..}...tcl_ret =
12500 20 54 63 6c 5f 47 65 74 57 69 64 65 49 6e 74 46   Tcl_GetWideIntF
12510 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 67  romObj(interp, g
12520 69 64 5f 6f 62 6a 2c 20 26 67 69 64 5f 76 61 6c  id_obj, &gid_val
12530 29 3b 0a 09 69 66 20 28 74 63 6c 5f 72 65 74 20  );..if (tcl_ret 
12540 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a 09 09 72  != TCL_OK) {...r
12550 65 74 75 72 6e 28 74 63 6c 5f 72 65 74 29 3b 0a  eturn(tcl_ret);.
12560 09 7d 0a 0a 09 2f 2a 20 31 2e 65 2e 20 50 72 6f  .}.../* 1.e. Pro
12570 63 65 73 73 20 65 6e 76 69 72 6f 6e 6d 65 6e 74  cess environment
12580 20 2a 2f 0a 09 74 63 6c 5f 72 65 74 20 3d 20 54   */..tcl_ret = T
12590 63 6c 5f 4c 69 73 74 4f 62 6a 47 65 74 45 6c 65  cl_ListObjGetEle
125a0 6d 65 6e 74 73 28 69 6e 74 65 72 70 2c 20 65 6e  ments(interp, en
125b0 76 5f 6f 62 6a 2c 20 26 65 6e 76 5f 65 6e 74 72  v_obj, &env_entr
125c0 79 5f 6f 62 6a 63 2c 20 26 65 6e 76 5f 65 6e 74  y_objc, &env_ent
125d0 72 79 5f 6f 62 6a 76 29 3b 0a 09 69 66 20 28 74  ry_objv);..if (t
125e0 63 6c 5f 72 65 74 20 21 3d 20 54 43 4c 5f 4f 4b  cl_ret != TCL_OK
125f0 29 20 7b 0a 09 09 72 65 74 75 72 6e 28 74 63 6c  ) {...return(tcl
12600 5f 72 65 74 29 3b 0a 09 7d 0a 0a 09 66 6f 72 20  _ret);..}...for 
12610 28 69 64 78 20 3d 20 30 3b 20 69 64 78 20 3c 20  (idx = 0; idx < 
12620 4d 49 4e 28 65 6e 76 5f 65 6e 74 72 79 5f 6f 62  MIN(env_entry_ob
12630 6a 63 2c 20 73 69 7a 65 6f 66 28 65 6e 76 76 29  jc, sizeof(envv)
12640 20 2f 20 73 69 7a 65 6f 66 28 65 6e 76 76 5b 30   / sizeof(envv[0
12650 5d 29 20 2d 20 31 29 3b 20 69 64 78 2b 2b 29 20  ]) - 1); idx++) 
12660 7b 0a 09 09 65 6e 76 76 5b 69 64 78 5d 20 3d 20  {...envv[idx] = 
12670 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 65 6e  Tcl_GetString(en
12680 76 5f 65 6e 74 72 79 5f 6f 62 6a 76 5b 69 64 78  v_entry_objv[idx
12690 5d 29 3b 0a 09 7d 0a 09 65 6e 76 76 5b 69 64 78  ]);..}..envv[idx
126a0 5d 20 3d 20 4e 55 4c 4c 3b 0a 0a 09 2f 2a 20 32  ] = NULL;.../* 2
126b0 2e 20 43 72 65 61 74 65 20 61 20 70 69 70 65 20  . Create a pipe 
126c0 66 6f 72 20 63 6f 6d 6d 75 6e 69 63 61 74 69 6f  for communicatio
126d0 6e 20 62 65 74 77 65 65 6e 20 74 68 65 20 70 72  n between the pr
126e0 6f 63 65 73 73 65 73 20 2a 2f 0a 09 70 69 70 65  ocesses */..pipe
126f0 5f 72 65 74 20 3d 20 70 69 70 65 28 66 64 73 29  _ret = pipe(fds)
12700 3b 0a 09 69 66 20 28 70 69 70 65 5f 72 65 74 20  ;..if (pipe_ret 
12710 21 3d 20 30 29 20 7b 0a 09 09 54 63 6c 5f 53 65  != 0) {...Tcl_Se
12720 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72  tObjResult(inter
12730 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67  p, Tcl_NewString
12740 4f 62 6a 28 22 70 69 70 65 20 66 61 69 6c 65 64  Obj("pipe failed
12750 22 2c 20 2d 31 29 29 3b 0a 0a 09 09 72 65 74 75  ", -1));....retu
12760 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 09  rn(TCL_ERROR);..
12770 7d 0a 0a 09 2f 2a 20 33 2e 20 46 6f 72 6b 20 69  }.../* 3. Fork i
12780 6e 74 6f 20 61 20 6e 65 77 20 70 72 6f 63 65 73  nto a new proces
12790 73 20 2a 2f 0a 09 63 68 69 6c 64 20 3d 20 66 6f  s */..child = fo
127a0 72 6b 28 29 3b 0a 09 69 66 20 28 63 68 69 6c 64  rk();..if (child
127b0 20 3d 3d 20 2d 31 29 20 7b 0a 09 09 54 63 6c 5f   == -1) {...Tcl_
127c0 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74  SetObjResult(int
127d0 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69  erp, Tcl_NewStri
127e0 6e 67 4f 62 6a 28 22 66 6f 72 6b 20 66 61 69 6c  ngObj("fork fail
127f0 65 64 22 2c 20 2d 31 29 29 3b 0a 0a 09 09 72 65  ed", -1));....re
12800 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b  turn(TCL_ERROR);
12810 0a 09 7d 0a 0a 09 69 66 20 28 63 68 69 6c 64 20  ..}...if (child 
12820 21 3d 20 30 29 20 7b 0a 09 09 2f 2a 20 34 2e 70  != 0) {.../* 4.p
12830 61 72 65 6e 74 2e 20 47 65 74 20 50 47 49 44 20  arent. Get PGID 
12840 66 72 6f 6d 20 63 68 69 6c 64 20 2a 2f 0a 09 09  from child */...
12850 2f 2a 20 34 2e 70 61 72 65 6e 74 2e 61 2e 20 4f  /* 4.parent.a. O
12860 70 65 6e 20 6c 6f 67 20 66 69 6c 65 20 2a 2f 0a  pen log file */.
12870 09 09 6c 6f 67 5f 66 64 20 3d 20 6f 70 65 6e 28  ..log_fd = open(
12880 6c 6f 67 66 69 6c 65 2c 20 4f 5f 57 52 4f 4e 4c  logfile, O_WRONL
12890 59 20 7c 20 4f 5f 43 52 45 41 54 20 7c 20 4f 5f  Y | O_CREAT | O_
128a0 41 50 50 45 4e 44 2c 20 53 5f 49 52 55 53 52 20  APPEND, S_IRUSR 
128b0 7c 20 53 5f 49 57 55 53 52 20 7c 20 53 5f 49 52  | S_IWUSR | S_IR
128c0 47 52 50 20 7c 20 53 5f 49 52 4f 54 48 29 3b 0a  GRP | S_IROTH);.
128d0 0a 09 09 2f 2a 20 34 2e 70 61 72 65 6e 74 2e 62  .../* 4.parent.b
128e0 2e 20 43 6c 6f 73 65 20 77 72 69 74 65 20 65 6e  . Close write en
128f0 64 20 6f 66 20 70 69 70 65 20 2d 2d 20 77 65 20  d of pipe -- we 
12900 61 72 65 20 72 65 61 64 2d 6f 6e 6c 79 20 2a 2f  are read-only */
12910 0a 09 09 63 6c 6f 73 65 28 66 64 73 5b 31 5d 29  ...close(fds[1])
12920 3b 0a 09 09 66 64 20 3d 20 66 64 73 5b 30 5d 3b  ;...fd = fds[0];
12930 0a 0a 09 09 2f 2a 20 34 2e 70 61 72 65 6e 74 2e  ..../* 4.parent.
12940 63 2e 20 52 65 61 64 20 70 72 6f 63 65 73 73 20  c. Read process 
12950 67 72 6f 75 70 20 49 44 20 6f 66 20 63 68 69 6c  group ID of chil
12960 64 20 66 72 6f 6d 20 70 69 70 65 20 2a 2f 0a 09  d from pipe */..
12970 09 73 65 6c 65 63 74 5f 74 69 6d 65 6f 75 74 2e  .select_timeout.
12980 74 76 5f 73 65 63 20 3d 20 74 69 6d 65 6f 75 74  tv_sec = timeout
12990 5f 76 61 6c 3b 0a 09 09 73 65 6c 65 63 74 5f 74  _val;...select_t
129a0 69 6d 65 6f 75 74 2e 74 76 5f 75 73 65 63 20 3d  imeout.tv_usec =
129b0 20 30 3b 0a 0a 09 09 46 44 5f 5a 45 52 4f 28 26   0;....FD_ZERO(&
129c0 72 65 61 64 5f 66 64 73 65 74 29 3b 0a 09 09 46  read_fdset);...F
129d0 44 5f 53 45 54 28 66 64 2c 20 26 72 65 61 64 5f  D_SET(fd, &read_
129e0 66 64 73 65 74 29 3b 0a 0a 09 09 73 65 6c 65 63  fdset);....selec
129f0 74 5f 72 65 74 20 3d 20 73 65 6c 65 63 74 28 66  t_ret = select(f
12a00 64 20 2b 20 31 2c 20 26 72 65 61 64 5f 66 64 73  d + 1, &read_fds
12a10 65 74 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 2c 20  et, NULL, NULL, 
12a20 26 73 65 6c 65 63 74 5f 74 69 6d 65 6f 75 74 29  &select_timeout)
12a30 3b 0a 09 09 69 66 20 28 73 65 6c 65 63 74 5f 72  ;...if (select_r
12a40 65 74 20 3d 3d 20 30 29 20 7b 0a 09 09 09 2f 2a  et == 0) {..../*
12a50 20 4f 6e 20 74 69 6d 65 6f 75 74 2c 20 74 65 72   On timeout, ter
12a60 6d 69 6e 61 74 65 20 73 74 61 72 74 69 6e 67 20  minate starting 
12a70 70 72 6f 63 65 73 73 20 2a 2f 0a 09 09 09 63 68  process */....ch
12a80 69 6c 64 5f 70 67 69 64 20 3d 20 67 65 74 70 67  ild_pgid = getpg
12a90 69 64 28 63 68 69 6c 64 29 3b 0a 09 09 09 69 66  id(child);....if
12aa0 20 28 63 68 69 6c 64 5f 70 67 69 64 20 21 3d 20   (child_pgid != 
12ab0 2d 31 29 20 7b 0a 09 09 09 09 6b 69 6c 6c 28 2d  -1) {.....kill(-
12ac0 63 68 69 6c 64 5f 70 67 69 64 2c 20 53 49 47 4b  child_pgid, SIGK
12ad0 49 4c 4c 29 3b 0a 09 09 09 7d 0a 0a 09 09 09 54  ILL);....}.....T
12ae0 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28  cl_SetObjResult(
12af0 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53  interp, Tcl_NewS
12b00 74 72 69 6e 67 4f 62 6a 28 22 74 69 6d 65 6f 75  tringObj("timeou
12b10 74 22 2c 20 2d 31 29 29 3b 0a 0a 09 09 09 63 75  t", -1));.....cu
12b20 72 72 74 69 6d 65 20 3d 20 74 69 6d 65 28 4e 55  rrtime = time(NU
12b30 4c 4c 29 3b 0a 09 09 09 73 74 72 66 74 69 6d 65  LL);....strftime
12b40 28 6c 6f 67 6d 73 67 2c 20 73 69 7a 65 6f 66 28  (logmsg, sizeof(
12b50 6c 6f 67 6d 73 67 29 2c 20 22 5b 20 25 62 20 25  logmsg), "[ %b %
12b60 65 20 25 48 3a 25 4d 3a 25 53 20 22 2c 20 6c 6f  e %H:%M:%S ", lo
12b70 63 61 6c 74 69 6d 65 28 26 63 75 72 72 74 69 6d  caltime(&currtim
12b80 65 29 29 3b 0a 09 09 09 77 72 69 74 65 28 6c 6f  e));....write(lo
12b90 67 5f 66 64 2c 20 6c 6f 67 6d 73 67 2c 20 73 74  g_fd, logmsg, st
12ba0 72 6c 65 6e 28 6c 6f 67 6d 73 67 29 29 3b 0a 0a  rlen(logmsg));..
12bb0 09 09 09 73 6e 70 72 69 6e 74 66 28 6c 6f 67 6d  ...snprintf(logm
12bc0 73 67 2c 20 73 69 7a 65 6f 66 28 6c 6f 67 6d 73  sg, sizeof(logms
12bd0 67 29 2c 20 22 4d 65 74 68 6f 64 20 5c 22 73 74  g), "Method \"st
12be0 61 72 74 5c 22 20 74 69 6d 65 64 20 6f 75 74 20  art\" timed out 
12bf0 61 66 74 65 72 20 25 69 20 73 65 63 6f 6e 64 73  after %i seconds
12c00 20 5d 5c 6e 22 2c 20 28 69 6e 74 29 20 74 69 6d   ]\n", (int) tim
12c10 65 6f 75 74 5f 76 61 6c 29 3b 0a 09 09 09 77 72  eout_val);....wr
12c20 69 74 65 28 6c 6f 67 5f 66 64 2c 20 6c 6f 67 6d  ite(log_fd, logm
12c30 73 67 2c 20 73 74 72 6c 65 6e 28 6c 6f 67 6d 73  sg, strlen(logms
12c40 67 29 29 3b 0a 0a 09 09 09 63 6c 6f 73 65 28 6c  g));.....close(l
12c50 6f 67 5f 66 64 29 3b 0a 0a 09 09 09 72 65 74 75  og_fd);.....retu
12c60 72 6e 28 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 09  rn(TCL_ERROR);..
12c70 09 7d 0a 0a 09 09 69 66 20 28 73 65 6c 65 63 74  .}....if (select
12c80 5f 72 65 74 20 3e 20 30 29 20 7b 0a 09 09 09 72  _ret > 0) {....r
12c90 65 61 64 5f 72 65 74 20 3d 20 72 65 61 64 28 66  ead_ret = read(f
12ca0 64 2c 20 26 63 68 69 6c 64 5f 70 67 69 64 2c 20  d, &child_pgid, 
12cb0 73 69 7a 65 6f 66 28 63 68 69 6c 64 5f 70 67 69  sizeof(child_pgi
12cc0 64 29 29 3b 0a 09 09 7d 0a 0a 09 09 2f 2a 20 34  d));...}..../* 4
12cd0 2e 70 61 72 65 6e 74 2e 64 2e 20 43 6c 6f 73 65  .parent.d. Close
12ce0 20 72 65 61 64 20 65 6e 64 20 6f 66 20 70 69 70   read end of pip
12cf0 65 20 2a 2f 0a 09 09 63 6c 6f 73 65 28 66 64 29  e */...close(fd)
12d00 3b 0a 0a 09 09 2f 2a 20 34 2e 70 61 72 65 6e 74  ;..../* 4.parent
12d10 2e 65 2e 20 56 65 72 69 66 79 20 72 65 61 64 20  .e. Verify read 
12d20 77 61 73 20 6d 65 61 6e 69 6e 67 66 75 6c 20 2a  was meaningful *
12d30 2f 0a 09 09 69 66 20 28 72 65 61 64 5f 72 65 74  /...if (read_ret
12d40 20 21 3d 20 73 69 7a 65 6f 66 28 63 68 69 6c 64   != sizeof(child
12d50 5f 70 67 69 64 29 29 20 7b 0a 09 09 09 54 63 6c  _pgid)) {....Tcl
12d60 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e  _SetObjResult(in
12d70 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72  terp, Tcl_NewStr
12d80 69 6e 67 4f 62 6a 28 22 66 61 69 6c 65 64 20 74  ingObj("failed t
12d90 6f 20 63 6f 6d 6d 75 6e 69 63 61 74 65 20 77 69  o communicate wi
12da0 74 68 20 73 74 61 72 74 65 64 20 73 65 72 76 69  th started servi
12db0 63 65 22 2c 20 2d 31 29 29 3b 0a 0a 09 09 09 63  ce", -1));.....c
12dc0 75 72 72 74 69 6d 65 20 3d 20 74 69 6d 65 28 4e  urrtime = time(N
12dd0 55 4c 4c 29 3b 0a 09 09 09 73 74 72 66 74 69 6d  ULL);....strftim
12de0 65 28 6c 6f 67 6d 73 67 2c 20 73 69 7a 65 6f 66  e(logmsg, sizeof
12df0 28 6c 6f 67 6d 73 67 29 2c 20 22 5b 20 25 62 20  (logmsg), "[ %b 
12e00 25 65 20 25 48 3a 25 4d 3a 25 53 20 22 2c 20 6c  %e %H:%M:%S ", l
12e10 6f 63 61 6c 74 69 6d 65 28 26 63 75 72 72 74 69  ocaltime(&currti
12e20 6d 65 29 29 3b 0a 09 09 09 77 72 69 74 65 28 6c  me));....write(l
12e30 6f 67 5f 66 64 2c 20 6c 6f 67 6d 73 67 2c 20 73  og_fd, logmsg, s
12e40 74 72 6c 65 6e 28 6c 6f 67 6d 73 67 29 29 3b 0a  trlen(logmsg));.
12e50 0a 09 09 09 73 6e 70 72 69 6e 74 66 28 6c 6f 67  ....snprintf(log
12e60 6d 73 67 2c 20 73 69 7a 65 6f 66 28 6c 6f 67 6d  msg, sizeof(logm
12e70 73 67 29 2c 20 22 4d 65 74 68 6f 64 20 5c 22 73  sg), "Method \"s
12e80 74 61 72 74 5c 22 20 66 61 69 6c 65 64 3a 20 63  tart\" failed: c
12e90 6f 6d 6d 75 6e 69 63 61 74 69 6f 6e 20 77 69 74  ommunication wit
12ea0 68 20 73 74 61 72 74 65 64 20 73 65 72 76 69 63  h started servic
12eb0 65 20 62 72 6f 6b 65 6e 20 5d 5c 6e 22 29 3b 0a  e broken ]\n");.
12ec0 09 09 09 77 72 69 74 65 28 6c 6f 67 5f 66 64 2c  ...write(log_fd,
12ed0 20 6c 6f 67 6d 73 67 2c 20 73 74 72 6c 65 6e 28   logmsg, strlen(
12ee0 6c 6f 67 6d 73 67 29 29 3b 0a 0a 09 09 09 63 6c  logmsg));.....cl
12ef0 6f 73 65 28 6c 6f 67 5f 66 64 29 3b 0a 0a 09 09  ose(log_fd);....
12f00 09 72 65 74 75 72 6e 28 54 43 4c 5f 45 52 52 4f  .return(TCL_ERRO
12f10 52 29 3b 0a 09 09 7d 0a 0a 09 09 2f 2a 20 34 2e  R);...}..../* 4.
12f20 70 61 72 65 6e 74 2e 66 2e 20 49 66 20 74 68 65  parent.f. If the
12f30 20 50 47 49 44 20 67 69 76 65 6e 20 69 73 20 61   PGID given is a
12f40 63 74 75 61 6c 6c 79 20 61 6e 20 65 72 72 6f 72  ctually an error
12f50 2c 20 72 65 74 75 72 6e 20 65 72 72 6f 72 20 2a  , return error *
12f60 2f 0a 09 09 69 66 20 28 63 68 69 6c 64 5f 70 67  /...if (child_pg
12f70 69 64 20 3d 3d 20 2d 31 29 20 7b 0a 09 09 09 54  id == -1) {....T
12f80 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28  cl_SetObjResult(
12f90 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53  interp, Tcl_NewS
12fa0 74 72 69 6e 67 4f 62 6a 28 22 73 65 72 76 69 63  tringObj("servic
12fb0 65 20 66 61 69 6c 65 64 20 74 6f 20 73 74 61 72  e failed to star
12fc0 74 22 2c 20 2d 31 29 29 3b 0a 0a 09 09 09 63 75  t", -1));.....cu
12fd0 72 72 74 69 6d 65 20 3d 20 74 69 6d 65 28 4e 55  rrtime = time(NU
12fe0 4c 4c 29 3b 0a 09 09 09 73 74 72 66 74 69 6d 65  LL);....strftime
12ff0 28 6c 6f 67 6d 73 67 2c 20 73 69 7a 65 6f 66 28  (logmsg, sizeof(
13000 6c 6f 67 6d 73 67 29 2c 20 22 5b 20 25 62 20 25  logmsg), "[ %b %
13010 65 20 25 48 3a 25 4d 3a 25 53 20 22 2c 20 6c 6f  e %H:%M:%S ", lo
13020 63 61 6c 74 69 6d 65 28 26 63 75 72 72 74 69 6d  caltime(&currtim
13030 65 29 29 3b 0a 09 09 09 77 72 69 74 65 28 6c 6f  e));....write(lo
13040 67 5f 66 64 2c 20 6c 6f 67 6d 73 67 2c 20 73 74  g_fd, logmsg, st
13050 72 6c 65 6e 28 6c 6f 67 6d 73 67 29 29 3b 0a 0a  rlen(logmsg));..
13060 09 09 09 73 6e 70 72 69 6e 74 66 28 6c 6f 67 6d  ...snprintf(logm
13070 73 67 2c 20 73 69 7a 65 6f 66 28 6c 6f 67 6d 73  sg, sizeof(logms
13080 67 29 2c 20 22 4d 65 74 68 6f 64 20 5c 22 73 74  g), "Method \"st
13090 61 72 74 5c 22 20 66 61 69 6c 65 64 20 5d 5c 6e  art\" failed ]\n
130a0 22 29 3b 0a 09 09 09 77 72 69 74 65 28 6c 6f 67  ");....write(log
130b0 5f 66 64 2c 20 6c 6f 67 6d 73 67 2c 20 73 74 72  _fd, logmsg, str
130c0 6c 65 6e 28 6c 6f 67 6d 73 67 29 29 3b 0a 0a 09  len(logmsg));...
130d0 09 09 63 6c 6f 73 65 28 6c 6f 67 5f 66 64 29 3b  ..close(log_fd);
130e0 0a 0a 09 09 09 72 65 74 75 72 6e 28 54 43 4c 5f  .....return(TCL_
130f0 45 52 52 4f 52 29 3b 0a 09 09 7d 0a 0a 09 09 2f  ERROR);...}..../
13100 2a 20 34 2e 70 61 72 65 6e 74 2e 67 2e 20 52 65  * 4.parent.g. Re
13110 74 75 72 6e 20 50 47 49 44 20 74 6f 20 54 63 6c  turn PGID to Tcl
13120 20 2a 2f 0a 09 09 54 63 6c 5f 53 65 74 4f 62 6a   */...Tcl_SetObj
13130 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54  Result(interp, T
13140 63 6c 5f 4e 65 77 57 69 64 65 49 6e 74 4f 62 6a  cl_NewWideIntObj
13150 28 28 54 63 6c 5f 57 69 64 65 49 6e 74 29 20 63  ((Tcl_WideInt) c
13160 68 69 6c 64 5f 70 67 69 64 29 29 3b 0a 0a 09 09  hild_pgid));....
13170 63 75 72 72 74 69 6d 65 20 3d 20 74 69 6d 65 28  currtime = time(
13180 4e 55 4c 4c 29 3b 0a 09 09 73 74 72 66 74 69 6d  NULL);...strftim
13190 65 28 6c 6f 67 6d 73 67 2c 20 73 69 7a 65 6f 66  e(logmsg, sizeof
131a0 28 6c 6f 67 6d 73 67 29 2c 20 22 5b 20 25 62 20  (logmsg), "[ %b 
131b0 25 65 20 25 48 3a 25 4d 3a 25 53 20 22 2c 20 6c  %e %H:%M:%S ", l
131c0 6f 63 61 6c 74 69 6d 65 28 26 63 75 72 72 74 69  ocaltime(&currti
131d0 6d 65 29 29 3b 0a 09 09 77 72 69 74 65 28 6c 6f  me));...write(lo
131e0 67 5f 66 64 2c 20 6c 6f 67 6d 73 67 2c 20 73 74  g_fd, logmsg, st
131f0 72 6c 65 6e 28 6c 6f 67 6d 73 67 29 29 3b 0a 0a  rlen(logmsg));..
13200 09 09 73 6e 70 72 69 6e 74 66 28 6c 6f 67 6d 73  ..snprintf(logms
13210 67 2c 20 73 69 7a 65 6f 66 28 6c 6f 67 6d 73 67  g, sizeof(logmsg
13220 29 2c 20 22 4d 65 74 68 6f 64 20 5c 22 73 74 61  ), "Method \"sta
13230 72 74 5c 22 20 63 6f 6d 70 6c 65 74 65 64 2c 20  rt\" completed, 
13240 70 72 6f 63 65 73 73 20 67 72 6f 75 70 20 3d 20  process group = 
13250 25 6c 75 20 5d 5c 6e 22 2c 20 28 75 6e 73 69 67  %lu ]\n", (unsig
13260 6e 65 64 20 6c 6f 6e 67 29 20 63 68 69 6c 64 5f  ned long) child_
13270 70 67 69 64 29 3b 0a 09 09 77 72 69 74 65 28 6c  pgid);...write(l
13280 6f 67 5f 66 64 2c 20 6c 6f 67 6d 73 67 2c 20 73  og_fd, logmsg, s
13290 74 72 6c 65 6e 28 6c 6f 67 6d 73 67 29 29 3b 0a  trlen(logmsg));.
132a0 0a 09 09 63 6c 6f 73 65 28 6c 6f 67 5f 66 64 29  ...close(log_fd)
132b0 3b 0a 0a 09 09 72 65 74 75 72 6e 28 54 43 4c 5f  ;....return(TCL_
132c0 4f 4b 29 3b 0a 09 7d 0a 0a 09 2f 2a 20 34 2e 63  OK);..}.../* 4.c
132d0 68 69 6c 64 2e 61 2e 20 43 6c 6f 73 65 20 72 65  hild.a. Close re
132e0 61 64 20 65 6e 64 20 6f 66 20 70 69 70 65 20 2d  ad end of pipe -
132f0 2d 20 77 65 20 6f 6e 6c 79 20 77 72 69 74 65 20  - we only write 
13300 74 6f 20 69 74 20 2a 2f 0a 09 63 6c 6f 73 65 28  to it */..close(
13310 66 64 73 5b 30 5d 29 3b 0a 09 66 64 20 3d 20 66  fds[0]);..fd = f
13320 64 73 5b 31 5d 3b 0a 0a 09 2f 2a 20 35 2e 20 43  ds[1];.../* 5. C
13330 72 65 61 74 65 20 61 20 6e 65 77 20 73 65 73 73  reate a new sess
13340 69 6f 6e 20 2a 2f 0a 09 73 65 74 73 69 64 5f 72  ion */..setsid_r
13350 65 74 20 3d 20 73 65 74 73 69 64 28 29 3b 0a 09  et = setsid();..
13360 69 66 20 28 73 65 74 73 69 64 5f 72 65 74 20 3d  if (setsid_ret =
13370 3d 20 2d 31 29 20 7b 0a 09 09 77 72 69 74 65 28  = -1) {...write(
13380 66 64 2c 20 26 63 68 69 6c 64 5f 70 67 69 64 2c  fd, &child_pgid,
13390 20 73 69 7a 65 6f 66 28 63 68 69 6c 64 5f 70 67   sizeof(child_pg
133a0 69 64 29 29 3b 0a 0a 09 09 5f 65 78 69 74 28 30  id));...._exit(0
133b0 29 3b 0a 09 7d 0a 0a 09 2f 2a 20 36 2e 20 53 65  );..}.../* 6. Se
133c0 74 75 70 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20  tup environment 
133d0 2a 2f 0a 09 2f 2a 20 36 2e 61 2e 20 53 65 74 20  */../* 6.a. Set 
133e0 75 6d 61 73 6b 20 2a 2f 0a 09 75 6d 61 73 6b 28  umask */..umask(
133f0 75 6d 61 73 6b 5f 76 61 6c 29 3b 0a 0a 09 2f 2a  umask_val);.../*
13400 20 36 2e 62 2e 20 53 65 74 20 77 6f 72 6b 69 6e   6.b. Set workin
13410 67 20 64 69 72 65 63 74 6f 72 79 20 2a 2f 0a 09  g directory */..
13420 63 68 64 69 72 5f 72 65 74 20 3d 20 63 68 64 69  chdir_ret = chdi
13430 72 28 63 77 64 29 3b 0a 09 69 66 20 28 63 68 64  r(cwd);..if (chd
13440 69 72 5f 72 65 74 20 21 3d 20 30 29 20 7b 0a 09  ir_ret != 0) {..
13450 09 77 72 69 74 65 28 66 64 2c 20 26 63 68 69 6c  .write(fd, &chil
13460 64 5f 70 67 69 64 2c 20 73 69 7a 65 6f 66 28 63  d_pgid, sizeof(c
13470 68 69 6c 64 5f 70 67 69 64 29 29 3b 0a 0a 09 09  hild_pgid));....
13480 5f 65 78 69 74 28 30 29 3b 0a 09 7d 0a 0a 09 2f  _exit(0);..}.../
13490 2a 20 36 2e 63 2e 20 4f 70 65 6e 20 6c 6f 67 20  * 6.c. Open log 
134a0 66 69 6c 65 20 66 6f 72 20 73 74 64 65 72 72 20  file for stderr 
134b0 61 6e 64 20 73 74 64 6f 75 74 20 2a 2f 0a 09 6c  and stdout */..l
134c0 6f 67 5f 66 64 20 3d 20 6f 70 65 6e 28 6c 6f 67  og_fd = open(log
134d0 66 69 6c 65 2c 20 4f 5f 57 52 4f 4e 4c 59 20 7c  file, O_WRONLY |
134e0 20 4f 5f 43 52 45 41 54 20 7c 20 4f 5f 41 50 50   O_CREAT | O_APP
134f0 45 4e 44 2c 20 53 5f 49 52 55 53 52 20 7c 20 53  END, S_IRUSR | S
13500 5f 49 57 55 53 52 20 7c 20 53 5f 49 52 47 52 50  _IWUSR | S_IRGRP
13510 20 7c 20 53 5f 49 52 4f 54 48 29 3b 0a 0a 09 2f   | S_IROTH);.../
13520 2a 20 36 2e 64 2e 20 4f 70 65 6e 20 22 2f 64 65  * 6.d. Open "/de
13530 76 2f 6e 75 6c 6c 22 20 66 6f 72 20 73 74 64 69  v/null" for stdi
13540 6e 20 2a 2f 0a 09 6e 75 6c 6c 5f 66 64 20 3d 20  n */..null_fd = 
13550 6f 70 65 6e 28 22 2f 64 65 76 2f 6e 75 6c 6c 22  open("/dev/null"
13560 2c 20 4f 5f 52 44 4f 4e 4c 59 29 3b 0a 09 69 66  , O_RDONLY);..if
13570 20 28 6e 75 6c 6c 5f 66 64 20 3c 20 30 20 7c 7c   (null_fd < 0 ||
13580 20 6c 6f 67 5f 66 64 20 3c 30 29 20 7b 0a 09 09   log_fd <0) {...
13590 77 72 69 74 65 28 66 64 2c 20 26 63 68 69 6c 64  write(fd, &child
135a0 5f 70 67 69 64 2c 20 73 69 7a 65 6f 66 28 63 68  _pgid, sizeof(ch
135b0 69 6c 64 5f 70 67 69 64 29 29 3b 0a 0a 09 09 5f  ild_pgid));...._
135c0 65 78 69 74 28 30 29 3b 0a 09 7d 0a 0a 09 2f 2a  exit(0);..}.../*
135d0 20 36 2e 65 2e 20 52 65 64 69 72 65 63 74 20 73   6.e. Redirect s
135e0 74 64 69 6e 2c 20 73 74 64 6f 75 74 2c 20 61 6e  tdin, stdout, an
135f0 64 20 73 74 64 65 72 72 20 74 6f 20 6e 75 6c 6c  d stderr to null
13600 2c 20 6c 6f 67 73 20 2a 2f 0a 09 64 75 70 32 28  , logs */..dup2(
13610 6e 75 6c 6c 5f 66 64 2c 20 53 54 44 49 4e 5f 46  null_fd, STDIN_F
13620 49 4c 45 4e 4f 29 3b 0a 09 64 75 70 32 28 6c 6f  ILENO);..dup2(lo
13630 67 5f 66 64 2c 20 53 54 44 4f 55 54 5f 46 49 4c  g_fd, STDOUT_FIL
13640 45 4e 4f 29 3b 0a 09 64 75 70 32 28 6c 6f 67 5f  ENO);..dup2(log_
13650 66 64 2c 20 53 54 44 45 52 52 5f 46 49 4c 45 4e  fd, STDERR_FILEN
13660 4f 29 3b 0a 0a 09 63 6c 6f 73 65 28 6e 75 6c 6c  O);...close(null
13670 5f 66 64 29 3b 0a 09 63 6c 6f 73 65 28 6c 6f 67  _fd);..close(log
13680 5f 66 64 29 3b 0a 0a 09 2f 2a 20 36 2e 66 2e 20  _fd);.../* 6.f. 
13690 43 6c 6f 73 65 20 73 74 72 61 79 20 66 69 6c 65  Close stray file
136a0 20 64 65 73 63 72 69 70 74 6f 72 73 20 2a 2f 0a   descriptors */.
136b0 09 6d 61 78 5f 66 64 20 3d 20 4d 41 58 28 4d 41  .max_fd = MAX(MA
136c0 58 28 4d 41 58 28 31 30 32 34 2c 20 53 54 44 49  X(MAX(1024, STDI
136d0 4e 5f 46 49 4c 45 4e 4f 29 2c 20 53 54 44 4f 55  N_FILENO), STDOU
136e0 54 5f 46 49 4c 45 4e 4f 29 2c 20 53 54 44 45 52  T_FILENO), STDER
136f0 52 5f 46 49 4c 45 4e 4f 29 3b 0a 09 66 6f 72 20  R_FILENO);..for 
13700 28 74 6d 70 5f 66 64 20 3d 20 30 3b 20 74 6d 70  (tmp_fd = 0; tmp
13710 5f 66 64 20 3c 20 6d 61 78 5f 66 64 3b 20 74 6d  _fd < max_fd; tm
13720 70 5f 66 64 2b 2b 29 20 7b 0a 09 09 69 66 20 28  p_fd++) {...if (
13730 74 6d 70 5f 66 64 20 3d 3d 20 53 54 44 49 4e 5f  tmp_fd == STDIN_
13740 46 49 4c 45 4e 4f 20 7c 7c 20 74 6d 70 5f 66 64  FILENO || tmp_fd
13750 20 3d 3d 20 53 54 44 4f 55 54 5f 46 49 4c 45 4e   == STDOUT_FILEN
13760 4f 20 7c 7c 20 74 6d 70 5f 66 64 20 3d 3d 20 53  O || tmp_fd == S
13770 54 44 45 52 52 5f 46 49 4c 45 4e 4f 29 20 7b 0a  TDERR_FILENO) {.
13780 09 09 09 63 6f 6e 74 69 6e 75 65 3b 0a 09 09 7d  ...continue;...}
13790 0a 0a 09 09 69 66 20 28 74 6d 70 5f 66 64 20 3d  ....if (tmp_fd =
137a0 3d 20 66 64 29 20 7b 0a 09 09 09 63 6f 6e 74 69  = fd) {....conti
137b0 6e 75 65 3b 0a 09 09 7d 0a 0a 09 09 63 6c 6f 73  nue;...}....clos
137c0 65 28 74 6d 70 5f 66 64 29 3b 0a 09 7d 0a 0a 09  e(tmp_fd);..}...
137d0 2f 2a 20 36 2e 67 2e 20 53 77 69 74 63 68 20 74  /* 6.g. Switch t
137e0 6f 20 61 70 70 72 6f 70 72 69 61 74 65 20 75 73  o appropriate us
137f0 65 72 2f 67 72 6f 75 70 20 2a 2f 0a 09 2f 2a 20  er/group */../* 
13800 36 2e 67 2e 69 2e 20 47 72 6f 75 70 20 2a 2f 0a  6.g.i. Group */.
13810 09 73 65 74 67 69 64 28 67 69 64 5f 76 61 6c 29  .setgid(gid_val)
13820 3b 0a 0a 09 2f 2a 20 36 2e 67 2e 69 69 2e 20 55  ;.../* 6.g.ii. U
13830 73 65 72 20 2a 2f 0a 09 73 65 74 75 69 64 28 75  ser */..setuid(u
13840 69 64 5f 76 61 6c 29 3b 0a 0a 09 2f 2a 20 37 2e  id_val);.../* 7.
13850 20 43 72 65 61 74 65 20 61 20 6e 65 77 20 70 72   Create a new pr
13860 6f 63 65 73 73 20 74 6f 20 61 63 74 75 61 6c 6c  ocess to actuall
13870 79 20 73 70 61 77 6e 20 74 68 65 20 70 72 6f 63  y spawn the proc
13880 65 73 73 20 2a 2f 0a 09 63 68 69 6c 64 20 3d 20  ess */..child = 
13890 66 6f 72 6b 28 29 3b 0a 09 69 66 20 28 63 68 69  fork();..if (chi
138a0 6c 64 20 3d 3d 20 2d 31 29 20 7b 0a 09 09 77 72  ld == -1) {...wr
138b0 69 74 65 28 66 64 2c 20 26 63 68 69 6c 64 5f 70  ite(fd, &child_p
138c0 67 69 64 2c 20 73 69 7a 65 6f 66 28 63 68 69 6c  gid, sizeof(chil
138d0 64 5f 70 67 69 64 29 29 3b 0a 0a 09 09 5f 65 78  d_pgid));...._ex
138e0 69 74 28 30 29 3b 0a 09 7d 0a 0a 09 69 66 20 28  it(0);..}...if (
138f0 63 68 69 6c 64 20 21 3d 20 30 29 20 7b 0a 09 09  child != 0) {...
13900 2f 2a 20 37 2e 70 61 72 65 6e 74 2e 61 2e 20 57  /* 7.parent.a. W
13910 61 69 74 20 66 6f 72 20 63 68 69 6c 64 20 70 72  ait for child pr
13920 6f 63 65 73 73 20 74 6f 20 74 65 72 6d 69 6e 61  ocess to termina
13930 74 65 20 61 6e 64 20 63 6f 6c 6c 65 63 74 20 73  te and collect s
13940 74 61 74 75 73 20 2a 2f 0a 09 09 77 61 69 74 70  tatus */...waitp
13950 69 64 5f 72 65 74 20 3d 20 77 61 69 74 70 69 64  id_ret = waitpid
13960 28 63 68 69 6c 64 2c 20 26 73 74 61 74 75 73 2c  (child, &status,
13970 20 30 29 3b 0a 09 09 69 66 20 28 77 61 69 74 70   0);...if (waitp
13980 69 64 5f 72 65 74 20 3d 3d 20 2d 31 29 20 7b 0a  id_ret == -1) {.
13990 09 09 09 73 74 61 74 75 73 20 3d 20 2d 31 3b 0a  ...status = -1;.
139a0 09 09 7d 0a 0a 09 09 2f 2a 20 37 2e 70 61 72 65  ..}..../* 7.pare
139b0 6e 74 2e 62 2e 20 53 65 74 20 50 47 49 44 20 28  nt.b. Set PGID (
139c0 69 66 20 73 75 63 63 65 73 73 66 75 6c 2c 20 2d  if successful, -
139d0 31 20 6f 74 68 65 72 77 69 73 65 29 20 74 6f 20  1 otherwise) to 
139e0 70 61 73 73 20 62 61 63 6b 20 74 6f 20 54 53 4d  pass back to TSM
139f0 46 20 2a 2f 0a 09 09 69 66 20 28 73 74 61 74 75  F */...if (statu
13a00 73 20 3d 3d 20 30 29 20 7b 0a 09 09 09 63 68 69  s == 0) {....chi
13a10 6c 64 5f 70 67 69 64 20 3d 20 67 65 74 70 67 69  ld_pgid = getpgi
13a20 64 28 67 65 74 70 69 64 28 29 29 3b 0a 09 09 7d  d(getpid());...}
13a30 0a 09 09 77 72 69 74 65 28 66 64 2c 20 26 63 68  ...write(fd, &ch
13a40 69 6c 64 5f 70 67 69 64 2c 20 73 69 7a 65 6f 66  ild_pgid, sizeof
13a50 28 63 68 69 6c 64 5f 70 67 69 64 29 29 3b 0a 0a  (child_pgid));..
13a60 09 09 63 6c 6f 73 65 28 66 64 29 3b 0a 0a 09 09  ..close(fd);....
13a70 2f 2a 20 37 2e 70 61 72 65 6e 74 2e 63 2e 20 57  /* 7.parent.c. W
13a80 72 69 74 65 20 6c 6f 67 20 6f 66 20 72 65 73 75  rite log of resu
13a90 6c 74 20 2a 2f 0a 09 09 2f 2a 20 4e 6f 74 65 3a  lt */.../* Note:
13aa0 20 57 65 20 61 76 6f 69 64 20 41 4e 53 49 20 49   We avoid ANSI I
13ab0 2f 4f 20 68 65 72 65 20 69 6e 20 63 61 73 65 20  /O here in case 
13ac0 74 68 65 72 65 20 69 73 20 61 6c 72 65 61 64 79  there is already
13ad0 20 73 6f 6d 65 74 68 69 6e 67 20 69 6e 20 74 68   something in th
13ae0 65 20 62 75 66 66 65 72 20 2a 2f 0a 09 09 63 75  e buffer */...cu
13af0 72 72 74 69 6d 65 20 3d 20 74 69 6d 65 28 4e 55  rrtime = time(NU
13b00 4c 4c 29 3b 0a 09 09 73 74 72 66 74 69 6d 65 28  LL);...strftime(
13b10 6c 6f 67 6d 73 67 2c 20 73 69 7a 65 6f 66 28 6c  logmsg, sizeof(l
13b20 6f 67 6d 73 67 29 2c 20 22 5b 20 25 62 20 25 65  ogmsg), "[ %b %e
13b30 20 25 48 3a 25 4d 3a 25 53 20 22 2c 20 6c 6f 63   %H:%M:%S ", loc
13b40 61 6c 74 69 6d 65 28 26 63 75 72 72 74 69 6d 65  altime(&currtime
13b50 29 29 3b 0a 09 09 77 72 69 74 65 28 53 54 44 45  ));...write(STDE
13b60 52 52 5f 46 49 4c 45 4e 4f 2c 20 6c 6f 67 6d 73  RR_FILENO, logms
13b70 67 2c 20 73 74 72 6c 65 6e 28 6c 6f 67 6d 73 67  g, strlen(logmsg
13b80 29 29 3b 0a 0a 09 09 73 6e 70 72 69 6e 74 66 28  ));....snprintf(
13b90 6c 6f 67 6d 73 67 2c 20 73 69 7a 65 6f 66 28 6c  logmsg, sizeof(l
13ba0 6f 67 6d 73 67 29 2c 20 22 4d 65 74 68 6f 64 20  ogmsg), "Method 
13bb0 5c 22 73 74 61 72 74 5c 22 20 65 78 69 74 65 64  \"start\" exited
13bc0 20 77 69 74 68 20 73 74 61 74 75 73 20 25 69 20   with status %i 
13bd0 5d 5c 6e 22 2c 20 57 45 58 49 54 53 54 41 54 55  ]\n", WEXITSTATU
13be0 53 28 73 74 61 74 75 73 29 29 3b 0a 09 09 77 72  S(status));...wr
13bf0 69 74 65 28 53 54 44 45 52 52 5f 46 49 4c 45 4e  ite(STDERR_FILEN
13c00 4f 2c 20 6c 6f 67 6d 73 67 2c 20 73 74 72 6c 65  O, logmsg, strle
13c10 6e 28 6c 6f 67 6d 73 67 29 29 3b 0a 0a 09 09 5f  n(logmsg));...._
13c20 65 78 69 74 28 30 29 3b 0a 09 7d 0a 09 0a 09 2f  exit(0);..}..../
13c30 2a 20 37 2e 63 68 69 6c 64 2e 61 2e 20 43 6c 6f  * 7.child.a. Clo
13c40 73 65 20 63 68 61 6e 6e 65 6c 20 74 6f 20 70 61  se channel to pa
13c50 72 65 6e 74 20 2a 2f 0a 09 63 6c 6f 73 65 28 66  rent */..close(f
13c60 64 29 3b 0a 0a 09 2f 2a 20 38 2e 20 4c 6f 67 20  d);.../* 8. Log 
13c70 61 74 74 65 6d 70 74 20 74 6f 20 72 75 6e 20 73  attempt to run s
13c80 74 61 72 74 20 6d 65 74 68 6f 64 20 2a 2f 0a 09  tart method */..
13c90 63 75 72 72 74 69 6d 65 20 3d 20 74 69 6d 65 28  currtime = time(
13ca0 4e 55 4c 4c 29 3b 0a 09 73 74 72 66 74 69 6d 65  NULL);..strftime
13cb0 28 6c 6f 67 6d 73 67 2c 20 73 69 7a 65 6f 66 28  (logmsg, sizeof(
13cc0 6c 6f 67 6d 73 67 29 2c 20 22 5b 20 25 62 20 25  logmsg), "[ %b %
13cd0 65 20 25 48 3a 25 4d 3a 25 53 20 22 2c 20 6c 6f  e %H:%M:%S ", lo
13ce0 63 61 6c 74 69 6d 65 28 26 63 75 72 72 74 69 6d  caltime(&currtim
13cf0 65 29 29 3b 0a 09 77 72 69 74 65 28 53 54 44 45  e));..write(STDE
13d00 52 52 5f 46 49 4c 45 4e 4f 2c 20 6c 6f 67 6d 73  RR_FILENO, logms
13d10 67 2c 20 73 74 72 6c 65 6e 28 6c 6f 67 6d 73 67  g, strlen(logmsg
13d20 29 29 3b 0a 0a 09 73 6e 70 72 69 6e 74 66 28 6c  ));...snprintf(l
13d30 6f 67 6d 73 67 2c 20 73 69 7a 65 6f 66 28 6c 6f  ogmsg, sizeof(lo
13d40 67 6d 73 67 29 2c 20 22 45 78 65 63 75 74 69 6e  gmsg), "Executin
13d50 67 20 73 74 61 72 74 20 6d 65 74 68 6f 64 20 28  g start method (
13d60 5c 22 25 73 5c 22 29 20 5d 5c 6e 22 2c 20 66 69  \"%s\") ]\n", fi
13d70 6c 65 6e 61 6d 65 29 3b 0a 09 77 72 69 74 65 28  lename);..write(
13d80 53 54 44 45 52 52 5f 46 49 4c 45 4e 4f 2c 20 6c  STDERR_FILENO, l
13d90 6f 67 6d 73 67 2c 20 73 74 72 6c 65 6e 28 6c 6f  ogmsg, strlen(lo
13da0 67 6d 73 67 29 29 3b 0a 0a 09 2f 2a 20 39 2e 20  gmsg));.../* 9. 
13db0 65 78 65 63 76 65 28 29 20 6e 65 77 20 69 6d 61  execve() new ima
13dc0 67 65 20 2a 2f 0a 09 61 72 67 76 5b 30 5d 20 3d  ge */..argv[0] =
13dd0 20 66 69 6c 65 6e 61 6d 65 3b 0a 09 61 72 67 76   filename;..argv
13de0 5b 31 5d 20 3d 20 22 73 74 61 72 74 22 3b 0a 09  [1] = "start";..
13df0 61 72 67 76 5b 32 5d 20 3d 20 4e 55 4c 4c 3b 0a  argv[2] = NULL;.
13e00 09 65 78 65 63 76 65 5f 72 65 74 20 3d 20 65 78  .execve_ret = ex
13e10 65 63 76 65 28 66 69 6c 65 6e 61 6d 65 2c 20 61  ecve(filename, a
13e20 72 67 76 2c 20 65 6e 76 76 29 3b 0a 0a 09 2f 2a  rgv, envv);.../*
13e30 20 31 30 2e 20 41 62 6f 72 74 20 69 66 20 73 6f   10. Abort if so
13e40 6d 65 74 68 69 6e 67 20 68 61 73 20 67 6f 6e 65  mething has gone
13e50 20 77 72 6f 6e 67 20 2a 2f 0a 09 5f 65 78 69 74   wrong */.._exit
13e60 28 65 78 65 63 76 65 5f 72 65 74 29 3b 0a 0a 09  (execve_ret);...
13e70 2f 2a 20 48 61 6e 64 6c 65 20 6c 69 6e 74 2d 6e  /* Handle lint-n
13e80 65 73 73 20 2a 2f 0a 09 72 65 74 75 72 6e 28 54  ess */..return(T
13e90 43 4c 5f 45 52 52 4f 52 29 3b 0a 09 73 72 69 5f  CL_ERROR);..sri_
13ea0 6f 62 6a 20 3d 20 73 72 69 5f 6f 62 6a 3b 0a 7d  obj = sri_obj;.}
13eb0 0a 0a 69 6e 74 20 54 75 61 70 69 5f 49 6e 69 74  ..int Tuapi_Init
13ec0 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74  (Tcl_Interp *int
13ed0 65 72 70 29 20 7b 0a 23 69 66 64 65 66 20 55 53  erp) {.#ifdef US
13ee0 45 5f 54 43 4c 5f 53 54 55 42 53 0a 09 63 6f 6e  E_TCL_STUBS..con
13ef0 73 74 20 63 68 61 72 20 2a 74 63 6c 49 6e 69 74  st char *tclInit
13f00 53 74 75 62 73 5f 72 65 74 3b 0a 0a 09 2f 2a 20  Stubs_ret;.../* 
13f10 49 6e 69 74 69 61 6c 69 7a 65 20 53 74 75 62 73  Initialize Stubs
13f20 20 2a 2f 0a 09 74 63 6c 49 6e 69 74 53 74 75 62   */..tclInitStub
13f30 73 5f 72 65 74 20 3d 20 54 63 6c 5f 49 6e 69 74  s_ret = Tcl_Init
13f40 53 74 75 62 73 28 69 6e 74 65 72 70 2c 20 22 38  Stubs(interp, "8
13f50 2e 34 22 2c 20 30 29 3b 0a 09 69 66 20 28 21 74  .4", 0);..if (!t
13f60 63 6c 49 6e 69 74 53 74 75 62 73 5f 72 65 74 29  clInitStubs_ret)
13f70 20 7b 0a 09 09 72 65 74 75 72 6e 28 54 43 4c 5f   {...return(TCL_
13f80 45 52 52 4f 52 29 3b 0a 09 7d 0a 23 65 6e 64 69  ERROR);..}.#endi
13f90 66 0a 0a 09 2f 2a 20 4b 65 72 6e 65 6c 20 6d 61  f.../* Kernel ma
13fa0 69 6e 74 65 6e 61 6e 63 65 20 72 65 6c 61 74 65  intenance relate
13fb0 64 20 63 6f 6d 6d 61 6e 64 73 20 2a 2f 0a 09 54  d commands */..T
13fc0 63 6c 5f 43 72 65 61 74 65 4f 62 6a 43 6f 6d 6d  cl_CreateObjComm
13fd0 61 6e 64 28 69 6e 74 65 72 70 2c 20 22 3a 3a 74  and(interp, "::t
13fe0 75 61 70 69 3a 3a 73 79 73 63 61 6c 6c 3a 3a 69  uapi::syscall::i
13ff0 6e 73 6d 6f 64 22 2c 20 74 75 61 70 69 5f 69 6e  nsmod", tuapi_in
14000 73 6d 6f 64 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c  smod, NULL, NULL
14010 29 3b 0a 09 54 63 6c 5f 43 72 65 61 74 65 4f 62  );..Tcl_CreateOb
14020 6a 43 6f 6d 6d 61 6e 64 28 69 6e 74 65 72 70 2c  jCommand(interp,
14030 20 22 3a 3a 74 75 61 70 69 3a 3a 73 79 73 63 61   "::tuapi::sysca
14040 6c 6c 3a 3a 72 6d 6d 6f 64 22 2c 20 74 75 61 70  ll::rmmod", tuap
14050 69 5f 72 6d 6d 6f 64 2c 20 4e 55 4c 4c 2c 20 4e  i_rmmod, NULL, N
14060 55 4c 4c 29 3b 0a 09 54 63 6c 5f 43 72 65 61 74  ULL);..Tcl_Creat
14070 65 4f 62 6a 43 6f 6d 6d 61 6e 64 28 69 6e 74 65  eObjCommand(inte
14080 72 70 2c 20 22 3a 3a 74 75 61 70 69 3a 3a 73 79  rp, "::tuapi::sy
14090 73 63 61 6c 6c 3a 3a 6c 73 6d 6f 64 22 2c 20 74  scall::lsmod", t
140a0 75 61 70 69 5f 6c 73 6d 6f 64 2c 20 4e 55 4c 4c  uapi_lsmod, NULL
140b0 2c 20 4e 55 4c 4c 29 3b 0a 09 54 63 6c 5f 43 72  , NULL);..Tcl_Cr
140c0 65 61 74 65 4f 62 6a 43 6f 6d 6d 61 6e 64 28 69  eateObjCommand(i
140d0 6e 74 65 72 70 2c 20 22 3a 3a 74 75 61 70 69 3a  nterp, "::tuapi:
140e0 3a 73 79 73 63 61 6c 6c 3a 3a 68 6f 73 74 6e 61  :syscall::hostna
140f0 6d 65 22 2c 20 74 75 61 70 69 5f 68 6f 73 74 6e  me", tuapi_hostn
14100 61 6d 65 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 29  ame, NULL, NULL)
14110 3b 0a 09 54 63 6c 5f 43 72 65 61 74 65 4f 62 6a  ;..Tcl_CreateObj
14120 43 6f 6d 6d 61 6e 64 28 69 6e 74 65 72 70 2c 20  Command(interp, 
14130 22 3a 3a 74 75 61 70 69 3a 3a 73 79 73 63 61 6c  "::tuapi::syscal
14140 6c 3a 3a 64 6f 6d 61 69 6e 6e 61 6d 65 22 2c 20  l::domainname", 
14150 74 75 61 70 69 5f 64 6f 6d 61 69 6e 6e 61 6d 65  tuapi_domainname
14160 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 29 3b 0a 09  , NULL, NULL);..
14170 54 63 6c 5f 43 72 65 61 74 65 4f 62 6a 43 6f 6d  Tcl_CreateObjCom
14180 6d 61 6e 64 28 69 6e 74 65 72 70 2c 20 22 3a 3a  mand(interp, "::
14190 74 75 61 70 69 3a 3a 73 79 73 63 61 6c 6c 3a 3a  tuapi::syscall::
141a0 6b 6c 6f 67 63 74 6c 22 2c 20 74 75 61 70 69 5f  klogctl", tuapi_
141b0 6b 6c 6f 67 63 74 6c 2c 20 4e 55 4c 4c 2c 20 4e  klogctl, NULL, N
141c0 55 4c 4c 29 3b 0a 09 54 63 6c 5f 43 72 65 61 74  ULL);..Tcl_Creat
141d0 65 4f 62 6a 43 6f 6d 6d 61 6e 64 28 69 6e 74 65  eObjCommand(inte
141e0 72 70 2c 20 22 3a 3a 74 75 61 70 69 3a 3a 73 79  rp, "::tuapi::sy
141f0 73 63 61 6c 6c 3a 3a 73 65 74 74 69 6d 65 6f 66  scall::settimeof
14200 64 61 79 22 2c 20 74 75 61 70 69 5f 73 65 74 74  day", tuapi_sett
14210 69 6d 65 6f 66 64 61 79 2c 20 4e 55 4c 4c 2c 20  imeofday, NULL, 
14220 4e 55 4c 4c 29 3b 0a 09 54 63 6c 5f 43 72 65 61  NULL);..Tcl_Crea
14230 74 65 4f 62 6a 43 6f 6d 6d 61 6e 64 28 69 6e 74  teObjCommand(int
14240 65 72 70 2c 20 22 3a 3a 74 75 61 70 69 3a 3a 73  erp, "::tuapi::s
14250 79 73 63 61 6c 6c 3a 3a 61 64 6a 74 69 6d 65 22  yscall::adjtime"
14260 2c 20 74 75 61 70 69 5f 61 64 6a 74 69 6d 65 2c  , tuapi_adjtime,
14270 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 29 3b 0a 0a 09   NULL, NULL);...
14280 2f 2a 20 42 6c 6f 63 6b 20 6f 72 20 63 68 61 72  /* Block or char
14290 20 64 65 76 69 63 65 20 72 65 6c 61 74 65 64 20   device related 
142a0 63 6f 6d 6d 61 6e 64 73 20 2a 2f 0a 09 54 63 6c  commands */..Tcl
142b0 5f 43 72 65 61 74 65 4f 62 6a 43 6f 6d 6d 61 6e  _CreateObjComman
142c0 64 28 69 6e 74 65 72 70 2c 20 22 3a 3a 74 75 61  d(interp, "::tua
142d0 70 69 3a 3a 73 79 73 63 61 6c 6c 3a 3a 6c 6f 73  pi::syscall::los
142e0 65 74 75 70 22 2c 20 74 75 61 70 69 5f 6c 6f 73  etup", tuapi_los
142f0 65 74 75 70 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c  etup, NULL, NULL
14300 29 3b 0a 09 54 63 6c 5f 43 72 65 61 74 65 4f 62  );..Tcl_CreateOb
14310 6a 43 6f 6d 6d 61 6e 64 28 69 6e 74 65 72 70 2c  jCommand(interp,
14320 20 22 3a 3a 74 75 61 70 69 3a 3a 73 79 73 63 61   "::tuapi::sysca
14330 6c 6c 3a 3a 65 6a 65 63 74 22 2c 20 74 75 61 70  ll::eject", tuap
14340 69 5f 65 6a 65 63 74 2c 20 4e 55 4c 4c 2c 20 4e  i_eject, NULL, N
14350 55 4c 4c 29 3b 0a 0a 09 2f 2a 20 46 69 6c 65 73  ULL);.../* Files
14360 79 73 74 65 6d 20 72 65 6c 61 74 65 64 20 63 6f  ystem related co
14370 6d 6d 61 6e 64 73 20 2a 2f 0a 09 54 63 6c 5f 43  mmands */..Tcl_C
14380 72 65 61 74 65 4f 62 6a 43 6f 6d 6d 61 6e 64 28  reateObjCommand(
14390 69 6e 74 65 72 70 2c 20 22 3a 3a 74 75 61 70 69  interp, "::tuapi
143a0 3a 3a 73 79 73 63 61 6c 6c 3a 3a 6d 6f 75 6e 74  ::syscall::mount
143b0 22 2c 20 74 75 61 70 69 5f 6d 6f 75 6e 74 2c 20  ", tuapi_mount, 
143c0 4e 55 4c 4c 2c 20 4e 55 4c 4c 29 3b 0a 09 54 63  NULL, NULL);..Tc
143d0 6c 5f 43 72 65 61 74 65 4f 62 6a 43 6f 6d 6d 61  l_CreateObjComma
143e0 6e 64 28 69 6e 74 65 72 70 2c 20 22 3a 3a 74 75  nd(interp, "::tu
143f0 61 70 69 3a 3a 73 79 73 63 61 6c 6c 3a 3a 75 6d  api::syscall::um
14400 6f 75 6e 74 22 2c 20 74 75 61 70 69 5f 75 6d 6f  ount", tuapi_umo
14410 75 6e 74 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 29  unt, NULL, NULL)
14420 3b 0a 09 54 63 6c 5f 43 72 65 61 74 65 4f 62 6a  ;..Tcl_CreateObj
14430 43 6f 6d 6d 61 6e 64 28 69 6e 74 65 72 70 2c 20  Command(interp, 
14440 22 3a 3a 74 75 61 70 69 3a 3a 73 79 73 63 61 6c  "::tuapi::syscal
14450 6c 3a 3a 73 77 61 70 6f 6e 22 2c 20 74 75 61 70  l::swapon", tuap
14460 69 5f 73 77 61 70 6f 6e 2c 20 4e 55 4c 4c 2c 20  i_swapon, NULL, 
14470 4e 55 4c 4c 29 3b 0a 09 54 63 6c 5f 43 72 65 61  NULL);..Tcl_Crea
14480 74 65 4f 62 6a 43 6f 6d 6d 61 6e 64 28 69 6e 74  teObjCommand(int
14490 65 72 70 2c 20 22 3a 3a 74 75 61 70 69 3a 3a 73  erp, "::tuapi::s
144a0 79 73 63 61 6c 6c 3a 3a 73 77 61 70 6f 66 66 22  yscall::swapoff"
144b0 2c 20 74 75 61 70 69 5f 73 77 61 70 6f 66 66 2c  , tuapi_swapoff,
144c0 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 29 3b 0a 09 54   NULL, NULL);..T
144d0 63 6c 5f 43 72 65 61 74 65 4f 62 6a 43 6f 6d 6d  cl_CreateObjComm
144e0 61 6e 64 28 69 6e 74 65 72 70 2c 20 22 3a 3a 74  and(interp, "::t
144f0 75 61 70 69 3a 3a 73 79 73 63 61 6c 6c 3a 3a 6d  uapi::syscall::m
14500 6b 6e 6f 64 22 2c 20 74 75 61 70 69 5f 6d 6b 6e  knod", tuapi_mkn
14510 6f 64 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 29 3b  od, NULL, NULL);
14520 0a 0a 09 2f 2a 20 50 72 6f 63 65 73 73 20 72 65  .../* Process re
14530 6c 61 74 65 64 20 63 6f 6d 6d 61 6e 64 73 20 2a  lated commands *
14540 2f 0a 09 54 63 6c 5f 43 72 65 61 74 65 4f 62 6a  /..Tcl_CreateObj
14550 43 6f 6d 6d 61 6e 64 28 69 6e 74 65 72 70 2c 20  Command(interp, 
14560 22 3a 3a 74 75 61 70 69 3a 3a 73 79 73 63 61 6c  "::tuapi::syscal
14570 6c 3a 3a 73 65 74 75 69 64 22 2c 20 74 75 61 70  l::setuid", tuap
14580 69 5f 73 65 74 75 69 64 2c 20 4e 55 4c 4c 2c 20  i_setuid, NULL, 
14590 4e 55 4c 4c 29 3b 0a 09 54 63 6c 5f 43 72 65 61  NULL);..Tcl_Crea
145a0 74 65 4f 62 6a 43 6f 6d 6d 61 6e 64 28 69 6e 74  teObjCommand(int
145b0 65 72 70 2c 20 22 3a 3a 74 75 61 70 69 3a 3a 73  erp, "::tuapi::s
145c0 79 73 63 61 6c 6c 3a 3a 67 65 74 75 69 64 22 2c  yscall::getuid",
145d0 20 74 75 61 70 69 5f 67 65 74 75 69 64 2c 20 4e   tuapi_getuid, N
145e0 55 4c 4c 2c 20 4e 55 4c 4c 29 3b 0a 09 54 63 6c  ULL, NULL);..Tcl
145f0 5f 43 72 65 61 74 65 4f 62 6a 43 6f 6d 6d 61 6e  _CreateObjComman
14600 64 28 69 6e 74 65 72 70 2c 20 22 3a 3a 74 75 61  d(interp, "::tua
14610 70 69 3a 3a 73 79 73 63 61 6c 6c 3a 3a 63 68 72  pi::syscall::chr
14620 6f 6f 74 22 2c 20 74 75 61 70 69 5f 63 68 72 6f  oot", tuapi_chro
14630 6f 74 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 29 3b  ot, NULL, NULL);
14640 0a 09 54 63 6c 5f 43 72 65 61 74 65 4f 62 6a 43  ..Tcl_CreateObjC
14650 6f 6d 6d 61 6e 64 28 69 6e 74 65 72 70 2c 20 22  ommand(interp, "
14660 3a 3a 74 75 61 70 69 3a 3a 73 79 73 63 61 6c 6c  ::tuapi::syscall
14670 3a 3a 70 69 76 6f 74 5f 72 6f 6f 74 22 2c 20 74  ::pivot_root", t
14680 75 61 70 69 5f 70 69 76 6f 74 5f 72 6f 6f 74 2c  uapi_pivot_root,
14690 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 29 3b 0a 09 54   NULL, NULL);..T
146a0 63 6c 5f 43 72 65 61 74 65 4f 62 6a 43 6f 6d 6d  cl_CreateObjComm
146b0 61 6e 64 28 69 6e 74 65 72 70 2c 20 22 3a 3a 74  and(interp, "::t
146c0 75 61 70 69 3a 3a 73 79 73 63 61 6c 6c 3a 3a 6b  uapi::syscall::k
146d0 69 6c 6c 22 2c 20 74 75 61 70 69 5f 6b 69 6c 6c  ill", tuapi_kill
146e0 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 29 3b 0a 09  , NULL, NULL);..
146f0 54 63 6c 5f 43 72 65 61 74 65 4f 62 6a 43 6f 6d  Tcl_CreateObjCom
14700 6d 61 6e 64 28 69 6e 74 65 72 70 2c 20 22 3a 3a  mand(interp, "::
14710 74 75 61 70 69 3a 3a 73 79 73 63 61 6c 6c 3a 3a  tuapi::syscall::
14720 77 61 69 74 70 69 64 22 2c 20 74 75 61 70 69 5f  waitpid", tuapi_
14730 77 61 69 74 70 69 64 2c 20 4e 55 4c 4c 2c 20 4e  waitpid, NULL, N
14740 55 4c 4c 29 3b 0a 09 54 63 6c 5f 43 72 65 61 74  ULL);..Tcl_Creat
14750 65 4f 62 6a 43 6f 6d 6d 61 6e 64 28 69 6e 74 65  eObjCommand(inte
14760 72 70 2c 20 22 3a 3a 74 75 61 70 69 3a 3a 73 79  rp, "::tuapi::sy
14770 73 63 61 6c 6c 3a 3a 70 73 22 2c 20 74 75 61 70  scall::ps", tuap
14780 69 5f 70 73 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c  i_ps, NULL, NULL
14790 29 3b 0a 09 54 63 6c 5f 43 72 65 61 74 65 4f 62  );..Tcl_CreateOb
147a0 6a 43 6f 6d 6d 61 6e 64 28 69 6e 74 65 72 70 2c  jCommand(interp,
147b0 20 22 3a 3a 74 75 61 70 69 3a 3a 73 79 73 63 61   "::tuapi::sysca
147c0 6c 6c 3a 3a 65 78 65 63 76 65 22 2c 20 74 75 61  ll::execve", tua
147d0 70 69 5f 65 78 65 63 76 65 2c 20 4e 55 4c 4c 2c  pi_execve, NULL,
147e0 20 4e 55 4c 4c 29 3b 0a 09 54 63 6c 5f 43 72 65   NULL);..Tcl_Cre
147f0 61 74 65 4f 62 6a 43 6f 6d 6d 61 6e 64 28 69 6e  ateObjCommand(in
14800 74 65 72 70 2c 20 22 3a 3a 74 75 61 70 69 3a 3a  terp, "::tuapi::
14810 73 79 73 63 61 6c 6c 3a 3a 72 6c 69 6d 69 74 22  syscall::rlimit"
14820 2c 20 74 75 61 70 69 5f 72 6c 69 6d 69 74 2c 20  , tuapi_rlimit, 
14830 4e 55 4c 4c 2c 20 4e 55 4c 4c 29 3b 0a 09 54 63  NULL, NULL);..Tc
14840 6c 5f 43 72 65 61 74 65 4f 62 6a 43 6f 6d 6d 61  l_CreateObjComma
14850 6e 64 28 69 6e 74 65 72 70 2c 20 22 3a 3a 74 75  nd(interp, "::tu
14860 61 70 69 3a 3a 73 79 73 63 61 6c 6c 3a 3a 72 65  api::syscall::re
14870 62 6f 6f 74 22 2c 20 74 75 61 70 69 5f 72 65 62  boot", tuapi_reb
14880 6f 6f 74 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 29  oot, NULL, NULL)
14890 3b 0a 09 54 63 6c 5f 43 72 65 61 74 65 4f 62 6a  ;..Tcl_CreateObj
148a0 43 6f 6d 6d 61 6e 64 28 69 6e 74 65 72 70 2c 20  Command(interp, 
148b0 22 3a 3a 74 75 61 70 69 3a 3a 73 79 73 63 61 6c  "::tuapi::syscal
148c0 6c 3a 3a 73 65 74 5f 74 68 72 65 61 64 5f 6e 61  l::set_thread_na
148d0 6d 65 22 2c 20 74 75 61 70 69 5f 73 65 74 5f 74  me", tuapi_set_t
148e0 68 72 65 61 64 5f 6e 61 6d 65 2c 20 4e 55 4c 4c  hread_name, NULL
148f0 2c 20 4e 55 4c 4c 29 3b 0a 0a 09 2f 2a 20 4e 65  , NULL);.../* Ne
14900 74 77 6f 72 6b 20 72 65 6c 61 74 65 64 20 63 6f  twork related co
14910 6d 6d 61 6e 64 73 20 2a 2f 0a 09 54 63 6c 5f 43  mmands */..Tcl_C
14920 72 65 61 74 65 4f 62 6a 43 6f 6d 6d 61 6e 64 28  reateObjCommand(
14930 69 6e 74 65 72 70 2c 20 22 3a 3a 74 75 61 70 69  interp, "::tuapi
14940 3a 3a 73 79 73 63 61 6c 6c 3a 3a 69 66 63 6f 6e  ::syscall::ifcon
14950 66 69 67 22 2c 20 74 75 61 70 69 5f 69 66 63 6f  fig", tuapi_ifco
14960 6e 66 69 67 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c  nfig, NULL, NULL
14970 29 3b 0a 09 54 63 6c 5f 43 72 65 61 74 65 4f 62  );..Tcl_CreateOb
14980 6a 43 6f 6d 6d 61 6e 64 28 69 6e 74 65 72 70 2c  jCommand(interp,
14990 20 22 3a 3a 74 75 61 70 69 3a 3a 73 79 73 63 61   "::tuapi::sysca
149a0 6c 6c 3a 3a 72 6f 75 74 65 22 2c 20 74 75 61 70  ll::route", tuap
149b0 69 5f 72 6f 75 74 65 2c 20 4e 55 4c 4c 2c 20 4e  i_route, NULL, N
149c0 55 4c 4c 29 3b 0a 09 54 63 6c 5f 43 72 65 61 74  ULL);..Tcl_Creat
149d0 65 4f 62 6a 43 6f 6d 6d 61 6e 64 28 69 6e 74 65  eObjCommand(inte
149e0 72 70 2c 20 22 3a 3a 74 75 61 70 69 3a 3a 73 79  rp, "::tuapi::sy
149f0 73 63 61 6c 6c 3a 3a 62 72 63 74 6c 22 2c 20 74  scall::brctl", t
14a00 75 61 70 69 5f 62 72 63 74 6c 2c 20 4e 55 4c 4c  uapi_brctl, NULL
14a10 2c 20 4e 55 4c 4c 29 3b 0a 09 54 63 6c 5f 43 72  , NULL);..Tcl_Cr
14a20 65 61 74 65 4f 62 6a 43 6f 6d 6d 61 6e 64 28 69  eateObjCommand(i
14a30 6e 74 65 72 70 2c 20 22 3a 3a 74 75 61 70 69 3a  nterp, "::tuapi:
14a40 3a 73 79 73 63 61 6c 6c 3a 3a 76 63 6f 6e 66 69  :syscall::vconfi
14a50 67 22 2c 20 74 75 61 70 69 5f 76 63 6f 6e 66 69  g", tuapi_vconfi
14a60 67 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 29 3b 0a  g, NULL, NULL);.
14a70 0a 09 2f 2a 20 54 65 72 6d 69 6e 61 6c 20 72 65  ../* Terminal re
14a80 6c 61 74 65 64 20 63 6f 6d 6d 61 6e 64 73 20 2a  lated commands *
14a90 2f 0a 09 54 63 6c 5f 43 72 65 61 74 65 4f 62 6a  /..Tcl_CreateObj
14aa0 43 6f 6d 6d 61 6e 64 28 69 6e 74 65 72 70 2c 20  Command(interp, 
14ab0 22 3a 3a 74 75 61 70 69 3a 3a 73 79 73 63 61 6c  "::tuapi::syscal
14ac0 6c 3a 3a 73 74 74 79 22 2c 20 74 75 61 70 69 5f  l::stty", tuapi_
14ad0 73 74 74 79 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c  stty, NULL, NULL
14ae0 29 3b 0a 0a 09 2f 2a 20 4e 65 65 64 65 64 20 63  );.../* Needed c
14af0 6f 6d 6d 61 6e 64 73 20 66 6f 72 20 62 61 73 69  ommands for basi
14b00 63 20 73 65 72 76 69 63 65 73 20 54 63 6c 20 6c  c services Tcl l
14b10 61 63 6b 73 20 2a 2f 0a 09 54 63 6c 5f 43 72 65  acks */..Tcl_Cre
14b20 61 74 65 4f 62 6a 43 6f 6d 6d 61 6e 64 28 69 6e  ateObjCommand(in
14b30 74 65 72 70 2c 20 22 3a 3a 74 75 61 70 69 3a 3a  terp, "::tuapi::
14b40 73 79 73 63 61 6c 6c 3a 3a 73 6f 63 6b 65 74 5f  syscall::socket_
14b50 75 6e 69 78 22 2c 20 74 75 61 70 69 5f 73 6f 63  unix", tuapi_soc
14b60 6b 65 74 5f 75 6e 69 78 2c 20 4e 55 4c 4c 2c 20  ket_unix, NULL, 
14b70 4e 55 4c 4c 29 3b 0a 0a 09 2f 2a 20 53 65 72 76  NULL);.../* Serv
14b80 69 63 65 20 28 54 53 4d 46 29 20 72 65 6c 61 74  ice (TSMF) relat
14b90 65 64 20 63 6f 6d 6d 61 6e 64 73 20 2a 2f 0a 09  ed commands */..
14ba0 54 63 6c 5f 43 72 65 61 74 65 4f 62 6a 43 6f 6d  Tcl_CreateObjCom
14bb0 6d 61 6e 64 28 69 6e 74 65 72 70 2c 20 22 3a 3a  mand(interp, "::
14bc0 74 75 61 70 69 3a 3a 73 79 73 63 61 6c 6c 3a 3a  tuapi::syscall::
14bd0 74 73 6d 66 5f 73 74 61 72 74 5f 73 76 63 22 2c  tsmf_start_svc",
14be0 20 74 75 61 70 69 5f 74 73 6d 66 5f 73 74 61 72   tuapi_tsmf_star
14bf0 74 5f 73 76 63 2c 20 4e 55 4c 4c 2c 20 4e 55 4c  t_svc, NULL, NUL
14c00 4c 29 3b 0a 0a 09 2f 2a 20 49 6e 74 65 72 6e 61  L);.../* Interna
14c10 6c 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 09  l functions */..
14c20 54 63 6c 5f 43 72 65 61 74 65 4f 62 6a 43 6f 6d  Tcl_CreateObjCom
14c30 6d 61 6e 64 28 69 6e 74 65 72 70 2c 20 22 3a 3a  mand(interp, "::
14c40 74 75 61 70 69 3a 3a 69 6e 74 65 72 6e 61 6c 3a  tuapi::internal:
14c50 3a 68 61 73 68 22 2c 20 74 75 61 70 69 5f 69 6e  :hash", tuapi_in
14c60 74 65 72 6e 61 6c 70 72 6f 63 5f 73 69 6d 70 6c  ternalproc_simpl
14c70 65 68 61 73 68 2c 20 4e 55 4c 4c 2c 20 4e 55 4c  ehash, NULL, NUL
14c80 4c 29 3b 0a 0a 09 2f 2a 20 44 65 66 69 6e 65 20  L);.../* Define 
14c90 63 6f 6e 73 74 61 6e 74 73 20 2a 2f 0a 09 2f 2a  constants */../*
14ca0 2a 20 43 72 65 61 74 65 20 70 61 72 65 6e 74 20  * Create parent 
14cb0 6e 61 6d 65 73 70 61 63 65 20 2a 2a 2f 0a 09 54  namespace **/..T
14cc0 63 6c 5f 43 72 65 61 74 65 4e 61 6d 65 73 70 61  cl_CreateNamespa
14cd0 63 65 28 69 6e 74 65 72 70 2c 20 22 3a 3a 74 75  ce(interp, "::tu
14ce0 61 70 69 3a 3a 63 6f 6e 73 74 22 2c 20 4e 55 4c  api::const", NUL
14cf0 4c 2c 20 4e 55 4c 4c 29 3b 0a 0a 09 2f 2a 2a 20  L, NULL);.../** 
14d00 44 65 66 69 6e 65 20 63 6f 6e 73 74 61 6e 74 73  Define constants
14d10 2c 20 66 6f 72 20 72 65 61 6c 20 2a 2a 2f 0a 09  , for real **/..
14d20 54 63 6c 5f 4f 62 6a 53 65 74 56 61 72 32 28 69  Tcl_ObjSetVar2(i
14d30 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74  nterp, Tcl_NewSt
14d40 72 69 6e 67 4f 62 6a 28 22 3a 3a 74 75 61 70 69  ringObj("::tuapi
14d50 3a 3a 63 6f 6e 73 74 3a 3a 48 4f 53 54 5f 4e 41  ::const::HOST_NA
14d60 4d 45 5f 4d 41 58 22 2c 20 2d 31 29 2c 20 4e 55  ME_MAX", -1), NU
14d70 4c 4c 2c 20 54 63 6c 5f 4e 65 77 57 69 64 65 49  LL, Tcl_NewWideI
14d80 6e 74 4f 62 6a 28 48 4f 53 54 5f 4e 41 4d 45 5f  ntObj(HOST_NAME_
14d90 4d 41 58 29 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c  MAX), TCL_GLOBAL
14da0 5f 4f 4e 4c 59 29 3b 0a 0a 09 2f 2a 20 43 72 65  _ONLY);.../* Cre
14db0 61 74 65 20 68 69 67 68 2d 6c 65 76 65 6c 20 75  ate high-level u
14dc0 73 65 72 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f  ser functions */
14dd0 0a 09 54 63 6c 5f 45 76 61 6c 28 69 6e 74 65 72  ..Tcl_Eval(inter
14de0 70 2c 0a 23 69 6e 63 6c 75 64 65 20 22 74 75 61  p,.#include "tua
14df0 70 69 2e 74 63 6c 2e 68 22 20 0a 09 29 3b 0a 0a  pi.tcl.h" ..);..
14e00 09 54 63 6c 5f 50 6b 67 50 72 6f 76 69 64 65 28  .Tcl_PkgProvide(
14e10 69 6e 74 65 72 70 2c 20 22 74 75 61 70 69 22 2c  interp, "tuapi",
14e20 20 22 30 2e 31 33 22 29 3b 0a 0a 09 72 65 74 75   "0.13");...retu
14e30 72 6e 28 54 43 4c 5f 4f 4b 29 3b 0a 7d 0a        rn(TCL_OK);.}.