Skip to content

Commit 8aa122f

Browse files
committed
Give an actual name to MemoryIO on FreeBSD
1 parent 3222fe0 commit 8aa122f

File tree

1 file changed

+18
-1
lines changed

1 file changed

+18
-1
lines changed

dmoj/cptbox/utils.py

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,24 @@
22
import io
33
import mmap
44
import os
5+
from tempfile import NamedTemporaryFile
56
from typing import Optional
67

78
from dmoj.cptbox._cptbox import memory_fd_create, memory_fd_seal
9+
from dmoj.cptbox.tracer import FREEBSD
810

911

1012
class 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:

0 commit comments

Comments
 (0)