import pwd
def _shuffle_fd3():
- os.dup(1,3)
- os.dup(2,1)
+ os.dup2(1,3)
+ os.dup2(2,1)
class Donor():
def __init__(d, pid):
d._pid = pid
d._sp = subprocess.Popen(
- preexec_fn = _suffle_fd3,
+ preexec_fn = _shuffle_fd3,
stdin = subprocess.PIPE,
stdout = subprocess.PIPE,
close_fds = False,
- args = ['gdb', '-p', pid, '-batch', '-ex'
+ args = ['gdb', '-p', str(pid), '-batch', '-ex',
'python import fishdescriptor.indonor as id;'+
' id.DonorImplementation().eval_loop()'
]
)
def _eval_integer(d, expr):
- l = d._sp.stdin.readline()
- if l != '!\n': raise RuntimeError("indonor said %s" % repr(l))
- d._sp.stdout.write(expr + '\n')
- d._sp.stdout.flush()
- l = d._sp.stdin.readline().rstrip('\n')
+ l = d._sp.stdout.readline()
+ if l != b'!\n': raise RuntimeError("indonor said %s" % repr(l))
+ d._sp.stdin.write(expr.encode('utf-8') + b'\n')
+ d._sp.stdin.flush()
+ l = d._sp.stdout.readline().rstrip(b'\n')
return int(l)
def _eval_success(d, expr):