#!/usr/bin/python3
+# This file is part of chiark-utils, a collection of useful programs
+# used on chiark.greenend.org.uk.
+#
+# This file is:
+# Copyright 2018 Citrix Systems Ltd
+#
+# This is free software; you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the Free Software
+# Foundation; either version 3, or (at your option) any later version.
+#
+# This is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+# details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, consult the Free Software Foundation's
+# website at www.fsf.org, or the GNU Project website at www.gnu.org.
+
import sys
import fishdescriptor.fish
import optparse
usage = '''fishdescriptor [-p|--pid] <pid> <action>... [-p|--pid <pid> <action>...]
<action>s
- [<here-0fd>=]<there-fd>
+ [<here-fd>=]<there-fd>
fish the openfile referenced by descriptor <there-fd> in
(the most recent) <pid> and keep a descriptor onto it;
and, optionally, give it the number <here-fd> for exec
for (nominal, there), actual in zip(pending, actuals):
overwriting_info = fdmap.get(nominal)
if overwriting_info is not None: os.close(overwriting_info[0])
- fdmap[nominal] = (actual, donor, there)
+ fdmap[nominal] = [actual, donor, there]
def implement_sockinfo(nominal):
(actual, tdonor, there) = fdmap[nominal]
if inway_intended is not None:
inway_moved = os.dup(intended)
actual2intended[inway_moved] = inway_intended
- fdmap[inway_intented][0] = inway_moved
+ fdmap[inway_intended][0] = inway_moved
os.dup2(actual, intended)
os.close(actual)
+ del actual2intended[actual]
def implement_exec(argl):
if donor is not None: donor.detach()