diff options
| author | jan.nijtmans <nijtmans@users.sourceforge.net> | 2023-09-28 13:33:38 (GMT) |
|---|---|---|
| committer | jan.nijtmans <nijtmans@users.sourceforge.net> | 2023-09-28 13:33:38 (GMT) |
| commit | 6abc29a3f20a3aeeed99bb70b4e1cdbfef293a4f (patch) | |
| tree | f1eb1ce4c4c632ed76bcef7e3614b1c30500a632 /unix/tclUnixPipe.c | |
| parent | 813a5e93acee11fd4652683370c0c7b781b9b353 (diff) | |
| parent | b815eeaea11da76d03de06dd072020a67df50849 (diff) | |
| download | tcl-6abc29a3f20a3aeeed99bb70b4e1cdbfef293a4f.zip tcl-6abc29a3f20a3aeeed99bb70b4e1cdbfef293a4f.tar.gz tcl-6abc29a3f20a3aeeed99bb70b4e1cdbfef293a4f.tar.bz2 | |
Rebase to 9.0. Error-message improvement
Diffstat (limited to 'unix/tclUnixPipe.c')
| -rw-r--r-- | unix/tclUnixPipe.c | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/unix/tclUnixPipe.c b/unix/tclUnixPipe.c index 4e8a758..8c0b378 100644 --- a/unix/tclUnixPipe.c +++ b/unix/tclUnixPipe.c @@ -152,7 +152,11 @@ TclpOpenFile( const char *native; Tcl_DString ds; - native = Tcl_UtfToExternalDString(NULL, fname, TCL_INDEX_NONE, &ds); + if (Tcl_UtfToExternalDStringEx(NULL, NULL, fname, TCL_INDEX_NONE, 0, &ds, NULL) != TCL_OK) { + Tcl_DStringFree(&ds); + return NULL; + } + native = Tcl_DStringValue(&ds); fd = TclOSopen(native, mode, 0666); /* INTL: Native. */ Tcl_DStringFree(&ds); if (fd != -1) { @@ -209,7 +213,12 @@ TclpCreateTempFile( Tcl_DString dstring; char *native; - native = Tcl_UtfToExternalDString(NULL, contents, TCL_INDEX_NONE, &dstring); + if (Tcl_UtfToExternalDStringEx(NULL, NULL, contents, TCL_INDEX_NONE, 0, &dstring, NULL) != TCL_OK) { + close(fd); + Tcl_DStringFree(&dstring); + return NULL; + } + native = Tcl_DStringValue(&dstring); if (write(fd, native, Tcl_DStringLength(&dstring)) == -1) { close(fd); Tcl_DStringFree(&dstring); @@ -452,7 +461,15 @@ TclpCreateProcess( newArgv = (char **)TclStackAlloc(interp, (argc+1) * sizeof(char *)); newArgv[argc] = NULL; for (i = 0; i < argc; i++) { - newArgv[i] = Tcl_UtfToExternalDString(NULL, argv[i], TCL_INDEX_NONE, &dsArray[i]); + if (Tcl_UtfToExternalDStringEx(interp, NULL, argv[i], TCL_INDEX_NONE, 0, &dsArray[i], NULL) != TCL_OK) { + while (i-- > 0) { + Tcl_DStringFree(&dsArray[i]); + } + TclStackFree(interp, newArgv); + TclStackFree(interp, dsArray); + goto error; + } + newArgv[i] = Tcl_DStringValue(&dsArray[i]); } #if defined(HAVE_VFORK) || defined(HAVE_POSIX_SPAWNP) |
