File tree Expand file tree Collapse file tree 1 file changed +18
-1
lines changed
Expand file tree Collapse file tree 1 file changed +18
-1
lines changed Original file line number Diff line number Diff line change 22import io
33import mmap
44import os
5+ from tempfile import NamedTemporaryFile
56from typing import Optional
67
78from dmoj .cptbox ._cptbox import memory_fd_create , memory_fd_seal
9+ from dmoj .cptbox .tracer import FREEBSD
810
911
1012class MemoryIO (io .FileIO ):
13+ _name : Optional [str ] = None
14+
1115 def __init__ (self , prefill : Optional [bytes ] = None , seal = False ) -> None :
12- super ().__init__ (memory_fd_create (), 'r+' )
16+ if FREEBSD :
17+ with NamedTemporaryFile (delete = False ) as f :
18+ self ._name = f .name
19+ super ().__init__ (os .dup (f .fileno ()), 'r+' )
20+ else :
21+ super ().__init__ (memory_fd_create (), 'r+' )
22+
1323 if prefill :
1424 self .write (prefill )
1525 if seal :
@@ -32,7 +42,14 @@ def seal(self) -> None:
3242 finally :
3343 os .close (new_fd )
3444
45+ def close (self ) -> None :
46+ super ().close ()
47+ if self ._name :
48+ os .unlink (self ._name )
49+
3550 def to_path (self ) -> str :
51+ if self ._name :
52+ return self ._name
3653 return f'/proc/{ os .getpid ()} /fd/{ self .fileno ()} '
3754
3855 def to_bytes (self ) -> bytes :
You can’t perform that action at this time.
0 commit comments