1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
-
+
|
/*
* tclUnixTest.c --
*
* Contains platform specific test commands for the Unix platform.
*
* Copyright (c) 1996-1997 Sun Microsystems, Inc.
* Copyright (c) 1998 by Scriptics Corporation.
*
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
* RCS: @(#) $Id: tclUnixTest.c,v 1.11 1999/10/13 00:32:50 hobbs Exp $
* RCS: @(#) $Id: tclUnixTest.c,v 1.11.18.1 2002/08/20 20:25:30 das Exp $
*/
#include "tclInt.h"
#include "tclPort.h"
/*
* The headers are needed for the testalarm command that verifies the
|
| ︙ | | |
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
|
/*
* Forward declarations of procedures defined later in this file:
*/
static void TestFileHandlerProc _ANSI_ARGS_((ClientData clientData,
int mask));
static int TestfilehandlerCmd _ANSI_ARGS_((ClientData dummy,
Tcl_Interp *interp, int argc, char **argv));
Tcl_Interp *interp, int argc, CONST char **argv));
static int TestfilewaitCmd _ANSI_ARGS_((ClientData dummy,
Tcl_Interp *interp, int argc, char **argv));
Tcl_Interp *interp, int argc, CONST char **argv));
static int TestfindexecutableCmd _ANSI_ARGS_((ClientData dummy,
Tcl_Interp *interp, int argc, char **argv));
Tcl_Interp *interp, int argc, CONST char **argv));
static int TestgetopenfileCmd _ANSI_ARGS_((ClientData dummy,
Tcl_Interp *interp, int argc, char **argv));
Tcl_Interp *interp, int argc, CONST char **argv));
static int TestgetdefencdirCmd _ANSI_ARGS_((ClientData dummy,
Tcl_Interp *interp, int argc, char **argv));
Tcl_Interp *interp, int argc, CONST char **argv));
static int TestsetdefencdirCmd _ANSI_ARGS_((ClientData dummy,
Tcl_Interp *interp, int argc, char **argv));
Tcl_Interp *interp, int argc, CONST char **argv));
int TclplatformtestInit _ANSI_ARGS_((Tcl_Interp *interp));
static int TestalarmCmd _ANSI_ARGS_((ClientData dummy,
Tcl_Interp *interp, int argc, char **argv));
Tcl_Interp *interp, int argc, CONST char **argv));
static int TestgotsigCmd _ANSI_ARGS_((ClientData dummy,
Tcl_Interp *interp, int argc, char **argv));
Tcl_Interp *interp, int argc, CONST char **argv));
static void AlarmHandler _ANSI_ARGS_(());
/*
*----------------------------------------------------------------------
*
* TclplatformtestInit --
*
|
| ︙ | | |
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
|
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
|
-
+
|
*/
static int
TestfilehandlerCmd(clientData, interp, argc, argv)
ClientData clientData; /* Not used. */
Tcl_Interp *interp; /* Current interpreter. */
int argc; /* Number of arguments. */
char **argv; /* Argument strings. */
CONST char **argv; /* Argument strings. */
{
Pipe *pipePtr;
int i, mask, timeout;
static int initialized = 0;
char buffer[4000];
TclFile file;
|
| ︙ | | |
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
|
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
|
-
+
|
TclFormatInt(buf, write(GetFd(pipePtr->writeFile), buffer, 10));
Tcl_SetResult(interp, buf, TCL_VOLATILE);
} else if (strcmp(argv[1], "oneevent") == 0) {
Tcl_DoOneEvent(TCL_FILE_EVENTS|TCL_DONT_WAIT);
} else if (strcmp(argv[1], "wait") == 0) {
if (argc != 5) {
Tcl_AppendResult(interp, "wrong # arguments: should be \"",
argv[0], " wait index readable/writable timeout\"",
argv[0], " wait index readable|writable timeout\"",
(char *) NULL);
return TCL_ERROR;
}
if (pipePtr->readFile == NULL) {
Tcl_AppendResult(interp, "pipe ", argv[2], " doesn't exist",
(char *) NULL);
return TCL_ERROR;
|
| ︙ | | |
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
|
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
|
-
+
|
*/
static int
TestfilewaitCmd(clientData, interp, argc, argv)
ClientData clientData; /* Not used. */
Tcl_Interp *interp; /* Current interpreter. */
int argc; /* Number of arguments. */
char **argv; /* Argument strings. */
CONST char **argv; /* Argument strings. */
{
int mask, result, timeout;
Tcl_Channel channel;
int fd;
ClientData data;
if (argc != 4) {
|
| ︙ | | |
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
|
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
|
-
+
|
*/
static int
TestfindexecutableCmd(clientData, interp, argc, argv)
ClientData clientData; /* Not used. */
Tcl_Interp *interp; /* Current interpreter. */
int argc; /* Number of arguments. */
char **argv; /* Argument strings. */
CONST char **argv; /* Argument strings. */
{
char *oldName;
char *oldNativeName;
if (argc != 2) {
Tcl_AppendResult(interp, "wrong # arguments: should be \"", argv[0],
" argv0\"", (char *) NULL);
|
| ︙ | | |
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
|
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
|
-
+
|
*/
static int
TestgetopenfileCmd(clientData, interp, argc, argv)
ClientData clientData; /* Not used. */
Tcl_Interp *interp; /* Current interpreter. */
int argc; /* Number of arguments. */
char **argv; /* Argument strings. */
CONST char **argv; /* Argument strings. */
{
ClientData filePtr;
if (argc != 3) {
Tcl_AppendResult(interp,
"wrong # args: should be \"", argv[0],
" channelName forWriting\"",
|
| ︙ | | |
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
|
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
|
-
+
|
*/
static int
TestsetdefencdirCmd(clientData, interp, argc, argv)
ClientData clientData; /* Not used. */
Tcl_Interp *interp; /* Current interpreter. */
int argc; /* Number of arguments. */
char **argv; /* Argument strings. */
CONST char **argv; /* Argument strings. */
{
if (argc != 2) {
Tcl_AppendResult(interp,
"wrong # args: should be \"", argv[0],
" defaultDir\"",
(char *) NULL);
return TCL_ERROR;
|
| ︙ | | |
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
|
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
|
-
+
|
*/
static int
TestgetdefencdirCmd(clientData, interp, argc, argv)
ClientData clientData; /* Not used. */
Tcl_Interp *interp; /* Current interpreter. */
int argc; /* Number of arguments. */
char **argv; /* Argument strings. */
CONST char **argv; /* Argument strings. */
{
if (argc != 1) {
Tcl_AppendResult(interp,
"wrong # args: should be \"", argv[0],
(char *) NULL);
return TCL_ERROR;
}
|
| ︙ | | |
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
|
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
|
-
+
|
*/
static int
TestalarmCmd(clientData, interp, argc, argv)
ClientData clientData; /* Not used. */
Tcl_Interp *interp; /* Current interpreter. */
int argc; /* Number of arguments. */
char **argv; /* Argument strings. */
CONST char **argv; /* Argument strings. */
{
#ifdef SA_RESTART
unsigned int sec;
struct sigaction action;
if (argc > 1) {
Tcl_GetInt(interp, argv[1], (int *)&sec);
|
| ︙ | | |
696
697
698
699
700
701
702
703
704
705
706
707
708
|
696
697
698
699
700
701
702
703
704
705
706
707
708
|
-
+
|
*/
static int
TestgotsigCmd(clientData, interp, argc, argv)
ClientData clientData; /* Not used. */
Tcl_Interp *interp; /* Current interpreter. */
int argc; /* Number of arguments. */
char **argv; /* Argument strings. */
CONST char **argv; /* Argument strings. */
{
Tcl_AppendResult(interp, gotsig, (char *) NULL);
gotsig = "0";
return TCL_OK;
}
|