Ejemplo n.º 1
0
 def read_full(engine: Engine):
     try:
         fd = engine.read_int()
         len_ = engine.read_int()
         buf = os_.read(fd, len_)
         engine.write_int(0)
         engine.write_memory(buf)
     except OSError as e:
         engine.write_int(map_errno(int(str(e)), errno, Flags))
Ejemplo n.º 2
0
    def read_buffered(engine: Engine):
        try:
            fd = engine.read_int()
            len_ = engine.read_int()

            cur = os_.lseek(fd, 0, os_.SEEK_CUR)
            end = os_.lseek(fd, 0, os_.SEEK_END)

            available = end - cur
            read_len = min(available, len_)

            buf = os_.read(fd, read_len)
            engine.write_int(0)
            engine.write_memory(buf)
        except OSError as e:
            engine.write_int(map_errno(int(str(e)), errno, Flags))
Ejemplo n.º 3
0
    def invoke(self, engine: Engine, macro_expansion: MacroExpansion):

        engine.write_int(len(self.argv))
        data = b'\0'.join(arg.encode() for arg in self.argv) + b'\0'
        res = engine.write_memory(data)
        if res != len(data):
            print(
                "***metal.serial***: Couldn't write all of argv, buffer size was {}"
                .format(res),
                file=sys.stderr)
Ejemplo n.º 4
0
engine = Engine(input=p.stdout, output=p.stdin, serial_info=serial_info)

assert engine.init_marker.file.endswith('write.c')
assert engine.init_marker.line == 25

engine.write_byte(b'0')
assert engine.read_byte() == b'9'

engine.write_int(22)
assert engine.read_int() == 44

assert engine.write_string("str") == 3
assert engine.read_string() == "tr"

engine.write_int(11)
assert engine.read_int() == 33

assert engine.write_string("overflow") == 6
assert engine.read_string() == "erfl"

engine.write_int(4)
assert engine.read_int() == 16

assert engine.write_memory(b'\x00\x01\x02\x03\x04') == 4
assert engine.read_memory() == b'\x03\x02\x01\x00'

assert engine.write_memory(b'1234567890') == 4
assert engine.read_memory() == b'1234'

assert engine.run() == 123