diff options
| author | jan.nijtmans <nijtmans@users.sourceforge.net> | 2013-07-23 09:07:21 (GMT) | 
|---|---|---|
| committer | jan.nijtmans <nijtmans@users.sourceforge.net> | 2013-07-23 09:07:21 (GMT) | 
| commit | c81da08d4a5ddf07bf70bab9be966473b2520644 (patch) | |
| tree | 4cce922c87672dd9b4a335d407d481a402dbd278 /unix/tclUnixTest.c | |
| parent | ae8d32e17d3ddc932def49dc45643928d7fe97ea (diff) | |
| download | tcl-c81da08d4a5ddf07bf70bab9be966473b2520644.zip tcl-c81da08d4a5ddf07bf70bab9be966473b2520644.tar.gz tcl-c81da08d4a5ddf07bf70bab9be966473b2520644.tar.bz2 | |
Add "testfork" test command. Not used in any test-case yet
Diffstat (limited to 'unix/tclUnixTest.c')
| -rw-r--r-- | unix/tclUnixTest.c | 50 | 
1 files changed, 50 insertions, 0 deletions
| diff --git a/unix/tclUnixTest.c b/unix/tclUnixTest.c index b6529c2..2fc1647 100644 --- a/unix/tclUnixTest.c +++ b/unix/tclUnixTest.c @@ -66,6 +66,8 @@ static int		TestfilewaitCmd(ClientData dummy,  			    Tcl_Interp *interp, int argc, CONST char **argv);  static int		TestfindexecutableCmd(ClientData dummy,  			    Tcl_Interp *interp, int argc, CONST char **argv); +static int		TestforkObjCmd(ClientData dummy, +			    Tcl_Interp *interp, int objc, Tcl_Obj *CONST *argv);  static int		TestgetopenfileCmd(ClientData dummy,  			    Tcl_Interp *interp, int argc, CONST char **argv);  static int		TestgetdefencdirCmd(ClientData dummy, @@ -110,6 +112,8 @@ TclplatformtestInit(              (ClientData) 0, NULL);      Tcl_CreateCommand(interp, "testfindexecutable", TestfindexecutableCmd,              (ClientData) 0, NULL); +    Tcl_CreateObjCommand(interp, "testfork", TestforkObjCmd, +            (ClientData) 0, NULL);      Tcl_CreateCommand(interp, "testgetopenfile", TestgetopenfileCmd,              (ClientData) 0, NULL);      Tcl_CreateCommand(interp, "testgetdefenc", TestgetdefencdirCmd, @@ -533,6 +537,52 @@ TestsetdefencdirCmd(      Tcl_SetDefaultEncodingDir(argv[1]);      return TCL_OK;  } + +/* + *---------------------------------------------------------------------- + * + * TestforkObjCmd -- + * + *	This function implements the "testfork" command. It is used to + *	fork the Tcl process for specific test cases. + * + * Results: + *	A standard Tcl result. + * + * Side effects: + *	None. + * + *---------------------------------------------------------------------- + */ + +static int +TestforkObjCmd( +    ClientData clientData,	/* Not used. */ +    Tcl_Interp *interp,		/* Current interpreter. */ +    int objc,			/* Number of arguments. */ +    Tcl_Obj *CONST *objv)		/* Argument strings. */ +{ +    pid_t pid; + +    if (objc != 1) { +        Tcl_WrongNumArgs(interp, 1, objv, ""); +        return TCL_ERROR; +    } +    pid = fork(); +    if (pid == -1) { +        Tcl_AppendResult(interp, +                "Cannot fork", NULL); +        return TCL_ERROR; +    } +#ifndef HAVE_PTHREAD_ATFORK +    /* Only needed when pthread_atfork is not present. */ +    if (pid==0) { +	Tcl_InitNotifier(); +    } +#endif +    Tcl_SetObjResult(interp, Tcl_NewIntObj(pid)); +    return TCL_OK; +}  /*   *---------------------------------------------------------------------- | 
