ok fixed i had to call NimMain(); this fixed everything
PyMODINIT_FUNC
PyInit_fib(void)
{
NimMain();
return PyModule_Create(_module);
}
thx this got the $fpx working now getting a segfault when i do open(), ill
investigate further i guess its something related it works perfectly fine when
not calling it from c.
Ok, so the problem is likely that Nim runtime is not initialized. Try
setupForeignThreadGc() at the beginning of your proc. TBH, i don't remember
exactly how this is done...
yes i tried that but if i do $fpx i get a segfault on the $fpx valgrind segfult
line the compiled code is at fp = cstrToNimstr(fpx);
What's your C code then? Are you calling this proc from C program or from Nim
program? If C program, Nim's GC might not be initialized.
if it helps this is the valgrind output
==9355== Process terminating with default action of signal 11 (SIGSEGV)
==9355== Access not within mapped region at address 0x0
==9355==at 0x665CA1B: lowGauge_3mwQtFaBTgevFrybZdgUNw
(stdlib_system.c:1380)
==9355==by
First way is correct, except conversion from cstring to string should be made
with $.
proc read_csv(fpx: cstring): void {.exportc.} =
let fp = $fpx
var s = newFileStream(fp, fmRead)
if s == nil:
echo "file not found"
return
How can you pass a char * to nim, ive been trying for a while but i keep
getting segfault.
if i use:
proc read_csv(fpx: cstring): void {.exportc.} =
let fp: string = cast[string](fpx)
var s = newFileStream(fp, fmRead)
if s == nil:
echo "file not