Make Linux write(2) work with Files (#289)
* Add is_full() so sys_write can be generic * Refactor Linux.sys_write to use File/Socket.write Previously it used .transmit, which does not exist on Files. Remove .transmit from Linux.Socket as that's a Decree artifact and it is more linuxy to use write * Support list arguments in File.write * Revert accidental decree change
This commit is contained in:
@@ -60,10 +60,10 @@ def makeLinux(program, argv, env, symbolic_files, concrete_start = ''):
|
||||
if any(issymbolic(x) for val in argv + env for x in val):
|
||||
platform.setup_stack([program] + argv, env)
|
||||
|
||||
platform.input.transmit(concrete_start)
|
||||
platform.input.write(concrete_start)
|
||||
|
||||
#set stdin input...
|
||||
platform.input.transmit(initial_state.symbolicate_buffer('+'*256, label='STDIN'))
|
||||
platform.input.write(initial_state.symbolicate_buffer('+'*256, label='STDIN'))
|
||||
|
||||
return initial_state
|
||||
|
||||
|
||||
@@ -51,8 +51,9 @@ class File(object):
|
||||
return self.file.tell(*args)
|
||||
def seek(self, *args):
|
||||
return self.file.seek(*args)
|
||||
def write(self, *args):
|
||||
return self.file.write(*args)
|
||||
def write(self, buf):
|
||||
for c in buf:
|
||||
self.file.write(c)
|
||||
def read(self, *args):
|
||||
return self.file.read(*args)
|
||||
def close(self, *args):
|
||||
@@ -60,6 +61,9 @@ class File(object):
|
||||
def fileno(self, *args):
|
||||
return self.file.fileno(*args)
|
||||
|
||||
def is_full(self):
|
||||
return False
|
||||
|
||||
def __getstate__(self):
|
||||
state = {}
|
||||
state['name'] = self.name
|
||||
@@ -238,9 +242,6 @@ class Socket(object):
|
||||
return ret
|
||||
|
||||
def write(self, buf):
|
||||
return self.transmit(buf)
|
||||
|
||||
def transmit(self, buf):
|
||||
assert self.is_connected()
|
||||
return self.peer._transmit(buf)
|
||||
|
||||
@@ -1059,7 +1060,7 @@ class Linux(Platform):
|
||||
raise RestartSyscall()
|
||||
|
||||
data = cpu.read_bytes(buf, count)
|
||||
self.files[fd].transmit(data)
|
||||
self.files[fd].write(data)
|
||||
|
||||
for line in ''.join([str(x) for x in data]).split('\n'):
|
||||
logger.debug("WRITE(%d, 0x%08x, %d) -> <%.48r>"%(fd, buf, count, line))
|
||||
|
||||
Reference in New Issue
Block a user