Skip to content
Snippets Groups Projects
Commit 8ae2b450 authored by Dirk Loss's avatar Dirk Loss
Browse files

Special do_graph() handling on Windows

Putting do_graph() in arch.windows.__init__.py and
monkey-patching the original version did not work,
so we use "if WINDOWS:" clauses instead.
parent e2c44b99
No related branches found
No related tags found
No related merge requests found
...@@ -17,6 +17,7 @@ from data import MTU ...@@ -17,6 +17,7 @@ from data import MTU
from error import log_runtime,log_loading,log_interactive from error import log_runtime,log_loading,log_interactive
from base_classes import BasePacketList from base_classes import BasePacketList
WINDOWS=sys.platform.startswith("win32")
########### ###########
## Tools ## ## Tools ##
...@@ -277,7 +278,7 @@ def ltoa(x): ...@@ -277,7 +278,7 @@ def ltoa(x):
def itom(x): def itom(x):
return (0xffffffff00000000L>>x)&0xffffffffL return (0xffffffff00000000L>>x)&0xffffffffL
def do_graph(graph,prog=None,format="svg",target=None, type=None,string=None,options=None): def do_graph(graph,prog=None,format=None,target=None,type=None,string=None,options=None):
"""do_graph(graph, prog=conf.prog.dot, format="svg", """do_graph(graph, prog=conf.prog.dot, format="svg",
target="| conf.prog.display", options=None, [string=1]): target="| conf.prog.display", options=None, [string=1]):
string: if not None, simply return the graph string string: if not None, simply return the graph string
...@@ -287,20 +288,43 @@ def do_graph(graph,prog=None,format="svg",target=None, type=None,string=None,opt ...@@ -287,20 +288,43 @@ def do_graph(graph,prog=None,format="svg",target=None, type=None,string=None,opt
prog: which graphviz program to use prog: which graphviz program to use
options: options to be passed to prog""" options: options to be passed to prog"""
if format is None:
if WINDOWS:
format = "png" # use common format to make sure a viewer is installed
else:
format = "svg"
if string: if string:
return graph return graph
if type is not None: if type is not None:
format=type format=type
if prog is None: if prog is None:
prog = conf.prog.dot prog = conf.prog.dot
start_viewer=False
if target is None: if target is None:
target = "| %s" % conf.prog.display if WINDOWS:
tempfile = os.tempnam("", "scapy") + "." + format
target = "> %s" % tempfile
start_viewer = True
else:
target = "| %s" % conf.prog.display
if format is not None: if format is not None:
format = "-T %s" % format format = "-T %s" % format
w,r = os.popen2("%s %s %s %s" % (prog,options or "", format or "", target)) w,r = os.popen2("%s %s %s %s" % (prog,options or "", format or "", target))
w.write(graph) w.write(graph)
w.close() w.close()
if start_viewer:
# Workaround for file not found error: We wait until tempfile is written.
waiting_start = time.time()
while not os.path.exists(tempfile):
time.sleep(0.1)
if time.time() - waiting_start > 3:
warning("Temporary file '%s' could not be written. Graphic will not be displayed." % tempfile)
break
else:
if conf.prog.display == conf.prog._default:
os.startfile(tempfile)
else:
subprocess.Popen([conf.prog.display, tempfile])
_TEX_TR = { _TEX_TR = {
"{":"{\\tt\\char123}", "{":"{\\tt\\char123}",
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment