mirror of
https://github.com/nim-lang/Nim.git
synced 2026-06-07 04:14:19 +00:00
Add support for mktemps (#14347)
This commit is contained in:
committed by
GitHub
parent
79e85cb0b5
commit
cbfe9325c5
@@ -1036,12 +1036,21 @@ proc mkstemp*(tmpl: cstring): cint {.importc, header: "<stdlib.h>", sideEffect.}
|
||||
## Creates a unique temporary file.
|
||||
##
|
||||
## **Warning**: The `tmpl` argument is written to by `mkstemp` and thus
|
||||
## can't be a string literal. If in doubt copy the string before passing it.
|
||||
## can't be a string literal. If in doubt make a copy of the cstring before
|
||||
## passing it in.
|
||||
|
||||
proc mkstemps*(tmpl: cstring, suffixlen: int): cint {.importc, header: "<stdlib.h>", sideEffect.}
|
||||
## Creates a unique temporary file.
|
||||
##
|
||||
## **Warning**: The `tmpl` argument is written to by `mkstemps` and thus
|
||||
## can't be a string literal. If in doubt make a copy of the cstring before
|
||||
## passing it in.
|
||||
|
||||
proc mkdtemp*(tmpl: cstring): pointer {.importc, header: "<stdlib.h>", sideEffect.}
|
||||
|
||||
when defined(linux) or defined(bsd):
|
||||
when defined(linux) or defined(bsd) or defined(osx):
|
||||
proc mkostemp*(tmpl: cstring, oflags: cint): cint {.importc, header: "<stdlib.h>", sideEffect.}
|
||||
proc mkostemps*(tmpl: cstring, suffixlen: cint, oflags: cint): cint {.importc, header: "<stdlib.h>", sideEffect.}
|
||||
|
||||
proc posix_memalign*(memptr: pointer, alignment: csize_t, size: csize_t): cint {.importc, header: "<stdlib.h>".}
|
||||
|
||||
|
||||
@@ -78,16 +78,23 @@ proc sendSignal*(pid: Pid, signal: int) =
|
||||
if kill(pid, signal.cint) != 0:
|
||||
raise newException(OSError, $strerror(errno))
|
||||
|
||||
proc mkstemp*(prefix: string): (string, File) =
|
||||
## Creates a unique temporary file from a prefix string. Adds a six chars suffix.
|
||||
proc mkstemp*(prefix: string, suffix=""): (string, File) =
|
||||
## Creates a unique temporary file from a prefix string. A six-character string
|
||||
## will be added. If suffix is provided it will be added to the string
|
||||
## The file is created with perms 0600.
|
||||
## Returns the filename and a file opened in r/w mode.
|
||||
var tmpl = cstring(prefix & "XXXXXX")
|
||||
var tmpl = cstring(prefix & "XXXXXX" & suffix)
|
||||
let fd =
|
||||
when declared(mkostemp):
|
||||
mkostemp(tmpl, O_CLOEXEC)
|
||||
if len(suffix)==0:
|
||||
when declared(mkostemp):
|
||||
mkostemp(tmpl, O_CLOEXEC)
|
||||
else:
|
||||
mkstemp(tmpl)
|
||||
else:
|
||||
mkstemp(tmpl)
|
||||
when declared(mkostemps):
|
||||
mkostemps(tmpl, cint(len(suffix)), O_CLOEXEC)
|
||||
else:
|
||||
mkstemps(tmpl, cint(len(suffix)))
|
||||
var f: File
|
||||
if open(f, fd, fmReadWrite):
|
||||
return ($tmpl, f)
|
||||
|
||||
Reference in New Issue
Block a user