Add support for mktemps (#14347)
This commit is contained in:
parent
79e85cb0b5
commit
cbfe9325c5
2 changed files with 24 additions and 8 deletions
|
|
@ -1036,12 +1036,21 @@ proc mkstemp*(tmpl: cstring): cint {.importc, header: "<stdlib.h>", sideEffect.}
|
||||||
## Creates a unique temporary file.
|
## Creates a unique temporary file.
|
||||||
##
|
##
|
||||||
## **Warning**: The `tmpl` argument is written to by `mkstemp` and thus
|
## **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.}
|
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 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>".}
|
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:
|
if kill(pid, signal.cint) != 0:
|
||||||
raise newException(OSError, $strerror(errno))
|
raise newException(OSError, $strerror(errno))
|
||||||
|
|
||||||
proc mkstemp*(prefix: string): (string, File) =
|
proc mkstemp*(prefix: string, suffix=""): (string, File) =
|
||||||
## Creates a unique temporary file from a prefix string. Adds a six chars suffix.
|
## 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.
|
## The file is created with perms 0600.
|
||||||
## Returns the filename and a file opened in r/w mode.
|
## Returns the filename and a file opened in r/w mode.
|
||||||
var tmpl = cstring(prefix & "XXXXXX")
|
var tmpl = cstring(prefix & "XXXXXX" & suffix)
|
||||||
let fd =
|
let fd =
|
||||||
|
if len(suffix)==0:
|
||||||
when declared(mkostemp):
|
when declared(mkostemp):
|
||||||
mkostemp(tmpl, O_CLOEXEC)
|
mkostemp(tmpl, O_CLOEXEC)
|
||||||
else:
|
else:
|
||||||
mkstemp(tmpl)
|
mkstemp(tmpl)
|
||||||
|
else:
|
||||||
|
when declared(mkostemps):
|
||||||
|
mkostemps(tmpl, cint(len(suffix)), O_CLOEXEC)
|
||||||
|
else:
|
||||||
|
mkstemps(tmpl, cint(len(suffix)))
|
||||||
var f: File
|
var f: File
|
||||||
if open(f, fd, fmReadWrite):
|
if open(f, fd, fmReadWrite):
|
||||||
return ($tmpl, f)
|
return ($tmpl, f)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue