parent
00c31e8766
commit
f30da2f266
2 changed files with 23 additions and 3 deletions
|
|
@ -118,6 +118,8 @@ proc c_setvbuf(f: File, buf: pointer, mode: cint, size: int): cint {.
|
||||||
|
|
||||||
proc c_fprintf(f: File, frmt: cstring): cint {.
|
proc c_fprintf(f: File, frmt: cstring): cint {.
|
||||||
importc: "fprintf", header: "<stdio.h>", varargs, discardable.}
|
importc: "fprintf", header: "<stdio.h>", varargs, discardable.}
|
||||||
|
proc c_fputc(c: char, f: File): cint {.
|
||||||
|
importc: "fputc", header: "<stdio.h>".}
|
||||||
|
|
||||||
## When running nim in android app stdout goes no where, so echo gets ignored
|
## When running nim in android app stdout goes no where, so echo gets ignored
|
||||||
## To redreict echo to the android logcat use -d:androidNDK
|
## To redreict echo to the android logcat use -d:androidNDK
|
||||||
|
|
@ -218,6 +220,10 @@ when defined(windows):
|
||||||
var i = c_fprintf(f, "%s", s)
|
var i = c_fprintf(f, "%s", s)
|
||||||
while i < s.len:
|
while i < s.len:
|
||||||
if s[i] == '\0':
|
if s[i] == '\0':
|
||||||
|
let w = c_fputc('\0', f)
|
||||||
|
if w != 0:
|
||||||
|
if doRaise: raiseEIO("cannot write string to file")
|
||||||
|
break
|
||||||
inc i
|
inc i
|
||||||
else:
|
else:
|
||||||
let w = c_fprintf(f, "%s", unsafeAddr s[i])
|
let w = c_fprintf(f, "%s", unsafeAddr s[i])
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ abasdfdsmÄhmaИ
|
||||||
Иnastystring
|
Иnastystring
|
||||||
A你好
|
A你好
|
||||||
ИnastystringA你好
|
ИnastystringA你好
|
||||||
ÖÜhmabasdfdsmÄhmaИ'''
|
ÖÜhmabasdfdsmÄhmaИOK'''
|
||||||
disabled: "posix"
|
disabled: "posix"
|
||||||
joinable: "false"
|
joinable: "false"
|
||||||
"""
|
"""
|
||||||
|
|
@ -13,10 +13,10 @@ import winlean
|
||||||
|
|
||||||
echo "ÄhmÖÜ"
|
echo "ÄhmÖÜ"
|
||||||
echo "abasdfdsmÄhmaИ"
|
echo "abasdfdsmÄhmaИ"
|
||||||
echo "И\0nasty\0\0\0\0string\0"
|
echo "Иnastystring"
|
||||||
echo "A你好"
|
echo "A你好"
|
||||||
|
|
||||||
write stdout, "И\0nasty\0\0\0\0string\0"
|
write stdout, "Иnastystring"
|
||||||
writeLine stdout, "A你好"
|
writeLine stdout, "A你好"
|
||||||
stdout.flushFile()
|
stdout.flushFile()
|
||||||
|
|
||||||
|
|
@ -25,3 +25,17 @@ var a = "ÖÜhmabasdfdsmÄhmaИ"
|
||||||
var ac = 0'i32
|
var ac = 0'i32
|
||||||
discard writeFile(handle, addr a[0], int32(len(a)), addr ac, nil)
|
discard writeFile(handle, addr a[0], int32(len(a)), addr ac, nil)
|
||||||
stdout.flushFile()
|
stdout.flushFile()
|
||||||
|
|
||||||
|
import os
|
||||||
|
|
||||||
|
let str = "some nulls: \0\0\0 (three of them)"
|
||||||
|
|
||||||
|
let fpath = getTempDir() / "file_with_nulls.bin"
|
||||||
|
|
||||||
|
writeFile(fpath, str)
|
||||||
|
|
||||||
|
doAssert(getFileSize(fpath) == 31)
|
||||||
|
doAssert(readFile(fpath) == str)
|
||||||
|
removeFile(fpath)
|
||||||
|
|
||||||
|
echo "OK"
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue