public inbox for frysk-cvs@sourceware.org help / color / mirror / Atom feed
From: cagney@sourceware.org To: frysk-cvs@sourceware.org Subject: [SCM] master: Parser for #!. Date: Sat, 15 Mar 2008 15:49:00 -0000 [thread overview] Message-ID: <20080315154950.26140.qmail@sourceware.org> (raw) The branch, master has been updated via 903d1a983673aaae8ec74df389194c23d374648a (commit) from c8c4519bd07e78dbf250681cf3d76a536cea69cc (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email. - Log ----------------------------------------------------------------- commit 903d1a983673aaae8ec74df389194c23d374648a Author: Andrew Cagney <cagney@redhat.com> Date: Fri Mar 14 19:28:13 2008 -0400 Parser for #!. frysk-core/frysk/proc/dead/ChangeLog 2008-03-14 Andrew Cagney <cagney@redhat.com> * InterpreterFactory.java: New. * TestInterpreter.java: New. frysk-sys/frysk/rsl/ChangeLog 2008-03-14 Andrew Cagney <cagney@redhat.com> * Log.java (log(String,String,String,String)): New. * Log.java (log(String,Object,String,int)): New. ----------------------------------------------------------------------- Summary of changes: frysk-core/frysk/proc/dead/ChangeLog | 5 ++ .../{DeadProc.java => InterpreterFactory.java} | 68 +++++++++--------- .../frysk/proc/dead/TestInterpreter.java | 77 +++++++++++--------- frysk-sys/frysk/rsl/ChangeLog | 3 + frysk-sys/frysk/rsl/Log.java | 13 +++- 5 files changed, 97 insertions(+), 69 deletions(-) copy frysk-core/frysk/proc/dead/{DeadProc.java => InterpreterFactory.java} (63%) copy frysk-sys/frysk/sys/ptrace/TestRegisterSet.java => frysk-core/frysk/proc/dead/TestInterpreter.java (62%) First 500 lines of diff: diff --git a/frysk-core/frysk/proc/dead/ChangeLog b/frysk-core/frysk/proc/dead/ChangeLog index edab625..da6e811 100644 --- a/frysk-core/frysk/proc/dead/ChangeLog +++ b/frysk-core/frysk/proc/dead/ChangeLog @@ -1,3 +1,8 @@ +2008-03-14 Andrew Cagney <cagney@redhat.com> + + * InterpreterFactory.java: New. + * TestInterpreter.java: New. + 2008-03-13 Stan Cox <scox@redhat.com> * LinuxExeFactory.java (findExe): Move to SysRoot.findExe. diff --git a/frysk-core/frysk/proc/dead/DeadProc.java b/frysk-core/frysk/proc/dead/InterpreterFactory.java similarity index 63% copy from frysk-core/frysk/proc/dead/DeadProc.java copy to frysk-core/frysk/proc/dead/InterpreterFactory.java index 727cd15..9514f2f 100644 --- a/frysk-core/frysk/proc/dead/DeadProc.java +++ b/frysk-core/frysk/proc/dead/InterpreterFactory.java @@ -1,6 +1,6 @@ // This file is part of the program FRYSK. // -// Copyright 2007, 2008 Red Hat Inc. +// Copyright 2008 Red Hat Inc. // // FRYSK is free software; you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by @@ -40,44 +40,44 @@ package frysk.proc.dead; import frysk.rsl.Log; -import frysk.proc.Proc; -import frysk.proc.Host; /** - * A dead Host/Proc/Task is characterised by its lack of state, and an - * in ability to respond to stateful requests such as add/remove - * observers. + * Given a String lifted from the start of a file and an ARGV, + * transform it into an ARGV suitable for invoking a #! interpreter. */ - -public abstract class DeadProc extends Proc { - private static final Log fine = Log.fine(DeadProc.class); - - DeadProc(Host host, Proc parent, int pid) { - super(host, parent, pid); - } +class InterpreterFactory { + private static final Log fine = Log.fine(InterpreterFactory.class); /** - * Return the current state as a string. + * Parse FILE (taken from the head of a shell file) and args + * transforming them into a script invocation. */ - protected String getStateFIXME() { - return "dead"; - } - - /** - * Request that the Proc's task list be refreshed using system - * tables. - */ - public void requestRefresh() { - fine.log(this, "requestRefresh"); - } - public void sendRefresh() { - fine.log(this, "sendRefresh"); - } - - protected void performDetach() { - fine.log(this, "performDetach"); - // XXX: Fake out for now. What kind of observers would you put - // on a core file? Might need a brain dead attached state in - // this scenario for compataibility. + static String[] parse(String file, String[] args) { + fine.log("file", file); + if (!file.startsWith("#!")) + return null; + String[] fields = file.replaceFirst("#! *", "").split(" +"); + fine.log("fields", fields); + String[] interpreter; + int start; + if (fields.length == 1) { + // #!interpreter + interpreter = new String[args.length + 1]; + interpreter[0] = fields[0]; + fine.log("interpreter", interpreter[0]); + start = 1; + } else { + // #!interpreter option + interpreter = new String[args.length + 2]; + interpreter[0] = fields[0]; + interpreter[1] = fields[1]; + fine.log("interpreter", interpreter[0], "options", interpreter[1]); + start = 2; + } + for (int i = 0; i < args.length; i++) { + interpreter[i + start] = args[i]; + fine.log("interpreter", i, "is", interpreter[i]); + } + return interpreter; } } diff --git a/frysk-sys/frysk/sys/ptrace/TestRegisterSet.java b/frysk-core/frysk/proc/dead/TestInterpreter.java similarity index 62% copy from frysk-sys/frysk/sys/ptrace/TestRegisterSet.java copy to frysk-core/frysk/proc/dead/TestInterpreter.java index 4d6b3d4..b90966c 100644 --- a/frysk-sys/frysk/sys/ptrace/TestRegisterSet.java +++ b/frysk-core/frysk/proc/dead/TestInterpreter.java @@ -1,11 +1,11 @@ // This file is part of the program FRYSK. -// -// Copyright 2008, Red Hat Inc. -// +// +// Copyright 2008 Red Hat Inc. +// // FRYSK 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; version 2 of the License. -// +// // FRYSK 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 @@ -37,46 +37,57 @@ // version and license this file solely under the GPL without // exception. -package frysk.sys.ptrace; +package frysk.proc.dead; -import frysk.sys.ProcessIdentifier; import frysk.junit.TestCase; -import frysk.testbed.TearDownProcess; -import frysk.testbed.ForkFactory; /** - * Trace a process. + * Test the interpreter parser. */ +public class TestInterpreter extends TestCase { -public class TestRegisterSet extends TestCase { - /** - * Rip down everything related to PID. - */ - public void tearDown() { - TearDownProcess.tearDown (); + public void testFileScript() { + assertEquals("args", + new String[] { "program", "script" }, + InterpreterFactory.parse("#!program", + new String[] { + "script" + })); } - private void verifyTransfer(String what, RegisterSet regs) { - if (unsupported(what, regs == null)) - return; - ProcessIdentifier pid = ForkFactory.attachedDaemon(); - // Read, write, read. - byte[] bytes = new byte[regs.length()]; - regs.transfer(pid, bytes, false); // read - byte old = bytes[0]; - bytes[0] = (byte) ~old; - regs.transfer(pid, bytes, true); // write - regs.transfer(pid, bytes, false); // read - assertEquals("modified", (byte)~old, bytes[0]); + public void testFileArgScript() { + assertEquals("args", + new String[] { "program", "arg", "script" }, + InterpreterFactory.parse("#!program arg", + new String[] { + "script" + })); } - public void testREGS() { - verifyTransfer("REGS", RegisterSet.REGS); + public void testFileScriptParam() { + assertEquals("args", + new String[] { "program", "script", "param" }, + InterpreterFactory.parse("#!program", + new String[] { + "script", "param" + })); } - public void testFPREGS() { - verifyTransfer("FPREGS", RegisterSet.FPREGS); + + public void testFileArgScriptParam() { + assertEquals("args", + new String[] { "program", "arg", "script", "param" }, + InterpreterFactory.parse("#!program arg", + new String[] { + "script", "param" + })); } - public void testFPXREGS() { - verifyTransfer("FPXREGS", RegisterSet.FPXREGS); + + public void testSpaces() { + assertEquals("args", + new String[] { "program", "arg", "script", "param" }, + InterpreterFactory.parse("#! program arg ", + new String[] { + "script", "param" + })); } } diff --git a/frysk-sys/frysk/rsl/ChangeLog b/frysk-sys/frysk/rsl/ChangeLog index 948af70..71c9b4e 100644 --- a/frysk-sys/frysk/rsl/ChangeLog +++ b/frysk-sys/frysk/rsl/ChangeLog @@ -1,5 +1,8 @@ 2008-03-14 Andrew Cagney <cagney@redhat.com> + * Log.java (log(String,String,String,String)): New. + * Log.java (log(String,Object,String,int)): New. + * TestLog.java (testDefault()): New. 2008-03-13 Andrew Cagney <cagney@redhat.com> diff --git a/frysk-sys/frysk/rsl/Log.java b/frysk-sys/frysk/rsl/Log.java index ed3cae0..a522ad8 100644 --- a/frysk-sys/frysk/rsl/Log.java +++ b/frysk-sys/frysk/rsl/Log.java @@ -382,9 +382,9 @@ public final class Log { return; prefix().print(p1).print(p2).suffix(); } + // Disambiguate log(String,String) which could be either + // log(Object,String) or log(String,Object). public void log(String p1, String p2) { - // Needed to disambiguate log(String,String) which could be - // either log(Object,String) or log(String,Object). log(p1, (Object)p2); } @@ -416,11 +416,20 @@ public final class Log { return; prefix().print(p1).print(p2).print(p3).print(p4).suffix(); } + public void log(String p1, Object p2, String p3, int p4) { + if (!logging) + return; + prefix().print(p1).print(p2).print(p3).print(p4).suffix(); + } public void log(String p1, Object p2, String p3, Object p4) { if (!logging) return; prefix().print(p1).print(p2).print(p3).print(p4).suffix(); } + // Disambiguate log(String,String,String,String). + public void log(String p1, String p2, String p3, String p4) { + log(p1, (Object)p2, p3, (Object)p4); + } // static 6 parameters public void log(String p1, int p2, String p3, Object p4, String p5, int p6) { hooks/post-receive -- frysk system monitor/debugger
reply other threads:[~2008-03-15 15:49 UTC|newest] Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20080315154950.26140.qmail@sourceware.org \ --to=cagney@sourceware.org \ --cc=frysk-cvs@sourceware.org \ --cc=frysk@sourceware.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).