mirror of
				https://github.com/janet-lang/janet
				synced 2025-10-31 15:43:01 +00:00 
			
		
		
		
	Set the CLOEXEC flag on file/temp files.
This commit is contained in:
		| @@ -30,6 +30,7 @@ | |||||||
| #include <errno.h> | #include <errno.h> | ||||||
|  |  | ||||||
| #ifndef JANET_WINDOWS | #ifndef JANET_WINDOWS | ||||||
|  | #include <fcntl.h> | ||||||
| #include <sys/wait.h> | #include <sys/wait.h> | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| @@ -132,6 +133,21 @@ static Janet cfun_io_temp(int32_t argc, Janet *argv) { | |||||||
|     FILE *tmp = tmpfile(); |     FILE *tmp = tmpfile(); | ||||||
|     if (!tmp) |     if (!tmp) | ||||||
|         janet_panicf("unable to create temporary file - %s", strerror(errno)); |         janet_panicf("unable to create temporary file - %s", strerror(errno)); | ||||||
|  |  | ||||||
|  | #ifndef JANET_WINDOWS | ||||||
|  |     /* It seems highly unlikely a typical janet user wants a tempfile to be inherited and | ||||||
|  |        libc tmpfile does NOT set O_CLOEXEC by default, | ||||||
|  |  | ||||||
|  |        Even though setting this flag after a delay is racy in threaded programs, | ||||||
|  |        It helps in single threaded ones. The fix for threaded programs would be to use mkostemp | ||||||
|  |        which is coming to POSIX at a later time. */ | ||||||
|  |     if (fcntl(fileno(tmp), F_SETFD, FD_CLOEXEC) != 0) { | ||||||
|  |         fclose(tmp); | ||||||
|  |         janet_panic("unable initialize temporary file"); | ||||||
|  |     } | ||||||
|  | /* Do anything for windows? */ | ||||||
|  | #endif | ||||||
|  |  | ||||||
|     return janet_makefile(tmp, JANET_FILE_WRITE | JANET_FILE_READ | JANET_FILE_BINARY); |     return janet_makefile(tmp, JANET_FILE_WRITE | JANET_FILE_READ | JANET_FILE_BINARY); | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Andrew Chambers
					Andrew Chambers