Posted to tcl by GPS at Sat Jun 16 12:02:17 GMT 2007view pretty

int
sys_exec ( TCL_OBJ_CMD_ARGS ) {
 char **argv;
 int argvOffset = 0;
 int objcOffset = 1;
 
 if (objc < 2) {
  Tcl_WrongNumArgs (interp, 1, objv, "program ?arg ...?");
  return TCL_ERROR;
 }
  
 argv = (char **) Tcl_Alloc (sizeof (char *) * objc);
  
 while (objcOffset < objc) {
  argv[argvOffset] = Tcl_GetString (objv[objcOffset]);
  
  ++argvOffset;
  ++objcOffset;
 }
 
 argv[argvOffset] = NULL;
 
 if (-1 == execvp (argv[0], argv)) {
  Tcl_SetResult (interp, (char *)Tcl_PosixError (interp), TCL_VOLATILE);
  Tcl_Free ((char *)argv);
  return TCL_ERROR;
 }
 
 Tcl_SetResult (interp, "execv failed with an unknown error.  This shouldn't be reached.", TCL_STATIC);
 return TCL_ERROR;
}