mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-04-29 19:30:36 +02:00
MINGW: fix tmpnam giving filenames in the root directory
Window's tmpnam expects that you will prepend it with the temporary directory. Using _tempnam gives a path that is already prepended with a temporary directory. * NEWS: updated * libguile/posix.c [_WIN32](scm_tmpnam): use _tempnam to create a temporary filename * test-suite/tests/posix.test ("tmpnam"): new test
This commit is contained in:
parent
12861e2bc2
commit
59f3e1a881
3 changed files with 39 additions and 1 deletions
11
NEWS
11
NEWS
|
@ -54,7 +54,7 @@ by libtool, such as libfoo-1.dll.
|
|||
|
||||
Also, it has been updated to do library renaming for MSYS. On Cygwin,
|
||||
when the #:rename-on-cygwin? option is #t, it already had the capability
|
||||
to search for "libfoo" as "cygfoo.dll". It has been updated to add the
|
||||
to search for "libfo[[Oo" as "cygfoo.dll". It has been updated to add the
|
||||
capability to search for "libfoo" as "msys-foo.dll" on MSYS.
|
||||
|
||||
The load-foreign-library option #:rename-on-cygwin? has been changed to
|
||||
|
@ -171,6 +171,7 @@ text files.
|
|||
GC-related closes to produce spurious "log" events in other tests.
|
||||
** getsockopt no longer risks a buffer overrun with timestamps
|
||||
(<https://bugs.gnu.org/76907>)
|
||||
** In MinGW, fix tmpnam returning names in root directory
|
||||
|
||||
|
||||
Changes in 3.0.10 (since 3.0.9)
|
||||
|
@ -399,6 +400,14 @@ have them. Send any bug reports to bug-guile@gnu.org.
|
|||
** Hashing of UTF-8 symbols with non-ASCII characters avoids corruption
|
||||
(<https://bugs.gnu.org/56413>)
|
||||
|
||||
This issue could cause `scm_from_utf8_symbol' and
|
||||
`scm_from_utf8_symboln` to incorrectly conclude that the symbol hadn't
|
||||
already been interned, and then create a new one, which of course
|
||||
wouldn't be `eq?' to the other(s). The incorrect hash was the result of
|
||||
a buffer overrun, and so might vary. This problem affected a number of
|
||||
other operations, given the internal use of those functions.
|
||||
|
||||
|
||||
Hearty thanks to Arne Babenhauserheide, Arsen Arsenović, Bruno Victal,
|
||||
Christopher Baines, Daniel Llorens, Denis 'GNUtoo' Carikli, Ekaitz
|
||||
Zarraga, Jonas Hahnfeld, Jorge Gomez, Josselin Poiret, Juliana Sims,
|
||||
|
|
|
@ -1799,11 +1799,24 @@ SCM_DEFINE (scm_tmpnam, "tmpnam", 0, 0, 0,
|
|||
scm_c_issue_deprecation_warning
|
||||
("Use of tmpnam is deprecated. Use mkstemp instead.");
|
||||
|
||||
#ifndef _WIN32
|
||||
SCM_SYSCALL (rv = tmpnam (name));
|
||||
#else
|
||||
/* _tempnam properly prepends the temp directory path. */
|
||||
SCM_SYSCALL (rv = _tempnam (NULL, ""));
|
||||
#endif
|
||||
|
||||
if (rv == NULL)
|
||||
/* not SCM_SYSERROR since errno probably not set. */
|
||||
SCM_MISC_ERROR ("tmpnam failed", SCM_EOL);
|
||||
|
||||
#ifndef _WIN32
|
||||
return scm_from_locale_string (name);
|
||||
#else
|
||||
SCM ret = scm_from_locale_string (rv);
|
||||
free (rv);
|
||||
return ret;
|
||||
#endif
|
||||
}
|
||||
#undef FUNC_NAME
|
||||
|
||||
|
|
|
@ -58,6 +58,22 @@
|
|||
;; (pass-if-exception "./nosuchprog" '(system-error . ".*")
|
||||
;; (execle "./nosuchprog" '("FOO=1" "BAR=2") "./nosuchprog" "some arg")))
|
||||
|
||||
;;
|
||||
;; tmpnam
|
||||
;;
|
||||
|
||||
(with-test-prefix "tmpnam"
|
||||
(pass-if "returns usable location"
|
||||
(unless (defined? 'tmpnam)
|
||||
;; tmpnam is deprecated
|
||||
(throw 'unsupported))
|
||||
(let* ((filename (tmpnam))
|
||||
(outport (open-output-file filename)))
|
||||
(display "\n" outport)
|
||||
(close-port outport)
|
||||
(let ((result (access? filename R_OK)))
|
||||
(delete-file filename)
|
||||
result))))
|
||||
|
||||
;;
|
||||
;; mkstemp
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue