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

  1. int
  2. sys_exec ( TCL_OBJ_CMD_ARGS ) {
  3. char **argv;
  4. int argvOffset = 0;
  5. int objcOffset = 1;
  6.  
  7. if (objc < 2) {
  8. Tcl_WrongNumArgs (interp, 1, objv, "program ?arg ...?");
  9. return TCL_ERROR;
  10. }
  11.  
  12. argv = (char **) Tcl_Alloc (sizeof (char *) * objc);
  13.  
  14. while (objcOffset < objc) {
  15. argv[argvOffset] = Tcl_GetString (objv[objcOffset]);
  16.  
  17. ++argvOffset;
  18. ++objcOffset;
  19. }
  20.  
  21. argv[argvOffset] = NULL;
  22.  
  23. if (-1 == execvp (argv[0], argv)) {
  24. Tcl_SetResult (interp, (char *)Tcl_PosixError (interp), TCL_VOLATILE);
  25. Tcl_Free ((char *)argv);
  26. return TCL_ERROR;
  27. }
  28.  
  29. Tcl_SetResult (interp, "execv failed with an unknown error. This shouldn't be reached.", TCL_STATIC);
  30. return TCL_ERROR;
  31. }