public inbox for frysk-cvs@sourceware.org help / color / mirror / Atom feed
From: cagney@sourceware.org To: frysk-cvs@sourceware.org Subject: [SCM] master: Split Glob from ftrace. Date: Fri, 29 Feb 2008 15:19:00 -0000 [thread overview] Message-ID: <20080229151923.2323.qmail@sourceware.org> (raw) The branch, master has been updated via a1f129abe0820ed5a7bd9f34842f4ebded1b9a97 (commit) from 8e6ab5488ff4b517582979b2fa0b8384ac6b0e09 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email. - Log ----------------------------------------------------------------- commit a1f129abe0820ed5a7bd9f34842f4ebded1b9a97 Author: Andrew Cagney <cagney@redhat.com> Date: Fri Feb 29 10:15:29 2008 -0500 Split Glob from ftrace. frysk-core/frysk/bindir/ChangeLog 2008-02-29 Andrew Cagney <cagney@redhat.com> * ftrace.java: Glob moved to frysk.util.Glob. frysk-core/frysk/util/ChangeLog 2008-02-29 Andrew Cagney <cagney@redhat.com> * Glob.java: Extracted from frysk.bindir.ftrace. ----------------------------------------------------------------------- Summary of changes: frysk-core/frysk/bindir/ChangeLog | 4 + frysk-core/frysk/bindir/ftrace.java | 87 +------------- frysk-core/frysk/util/ChangeLog | 4 + .../frysk/{bindir/fcatch.java => util/Glob.java} | 132 +++++++++++--------- 4 files changed, 82 insertions(+), 145 deletions(-) copy frysk-core/frysk/{bindir/fcatch.java => util/Glob.java} (51%) First 500 lines of diff: diff --git a/frysk-core/frysk/bindir/ChangeLog b/frysk-core/frysk/bindir/ChangeLog index 1ba5299..b4b4092 100644 --- a/frysk-core/frysk/bindir/ChangeLog +++ b/frysk-core/frysk/bindir/ChangeLog @@ -1,3 +1,7 @@ +2008-02-29 Andrew Cagney <cagney@redhat.com> + + * ftrace.java: Glob moved to frysk.util.Glob. + 2008-02-29 Sami Wagiaalla <swagiaal@redhat.com> * TestFcatch.java (testFcatchFollowsForks): new test. diff --git a/frysk-core/frysk/bindir/ftrace.java b/frysk-core/frysk/bindir/ftrace.java index 06c7972..da886bb 100644 --- a/frysk-core/frysk/bindir/ftrace.java +++ b/frysk-core/frysk/bindir/ftrace.java @@ -51,8 +51,7 @@ import java.util.Map; import java.util.Set; import frysk.proc.Proc; import java.util.logging.*; -import java.util.regex.*; - +import java.util.regex.Pattern; import java.io.FileNotFoundException; import java.io.FileOutputStream; @@ -69,92 +68,10 @@ import frysk.ftrace.TracePointOrigin; import frysk.ftrace.Symbol; import lib.dwfl.ElfSymbolVersion; - +import frysk.util.Glob; import gnu.classpath.tools.getopt.Option; import gnu.classpath.tools.getopt.OptionException; -class Glob -{ - private static int matchCharacterClass(String glob, int from) - throws PatternSyntaxException - { - int i = from + 2; - while (glob.charAt(++i) != ':' && i < glob.length()) - continue; - if (i >= glob.length() || glob.charAt(++i) != ']') - throw new PatternSyntaxException - ("Unmatched '['.", glob, from); - return i; - } - - private static int matchBrack(String glob, int from) - throws PatternSyntaxException - { - // On first character, both [ and ] are legal. But when [ is - // foolowed with :, it's character class. - int i = from + 1; - if (glob.charAt(i) == '[' && glob.charAt(i + 1) == ':') - i = matchCharacterClass(glob, i) + 1; - else - ++i; // skip any character, including [ or ] - boolean escape = false; - for (; i < glob.length(); ++i) { - char c = glob.charAt(i); - if (escape) { - ++i; - escape = false; - } - else if (c == '[' && glob.charAt(i + 1) == ':') - i = matchCharacterClass(glob, i); - else if (c == ']') - return i; - } - throw new PatternSyntaxException - ("Unmatched '" + glob.charAt(from) + "'.", glob, from); - } - - private static String toRegex(String glob) { - StringBuffer buf = new StringBuffer(); - boolean escape = false; - for(int i = 0; i < glob.length(); ++i) { - char c = glob.charAt(i); - if (escape) { - if (c == '\\') - buf.append("\\\\"); - else if (c == '*') - buf.append("\\*"); - else if (c == '?') - buf.append('?'); - else - buf.append('\\').append(c); - escape = false; - } - else { - if (c == '\\') - escape = true; - else if (c == '[') { - int j = matchBrack(glob, i); - buf.append(glob.substring(i, j+1)); - i = j; - } - else if (c == '*') - buf.append(".*"); - else if (c == '?') - buf.append('.'); - else if (c == '.') - buf.append("\\."); - else - buf.append(c); - } - } - return buf.toString(); - } - - public static Pattern compile(String glob) { - return Pattern.compile(toRegex(glob)); - } -} - abstract class Rule { final public boolean addition; diff --git a/frysk-core/frysk/util/ChangeLog b/frysk-core/frysk/util/ChangeLog index b7ef1d7..a4de4ff 100644 --- a/frysk-core/frysk/util/ChangeLog +++ b/frysk-core/frysk/util/ChangeLog @@ -1,3 +1,7 @@ +2008-02-29 Andrew Cagney <cagney@redhat.com> + + * Glob.java: Extracted from frysk.bindir.ftrace. + 2008-02-28 Sami Wagiaalla <swagiaal@redhat.com> * ProcRunningUtil.java: Framework for all commandline diff --git a/frysk-core/frysk/bindir/fcatch.java b/frysk-core/frysk/util/Glob.java similarity index 51% copy from frysk-core/frysk/bindir/fcatch.java copy to frysk-core/frysk/util/Glob.java index ed5f6cf..8cd8bdc 100644 --- a/frysk-core/frysk/bindir/fcatch.java +++ b/frysk-core/frysk/util/Glob.java @@ -37,77 +37,89 @@ // version and license this file solely under the GPL without // exception. -package frysk.bindir; +package frysk.util; -import frysk.util.Util; -import frysk.util.CommandlineParser; -import frysk.util.FCatch; -import frysk.proc.Proc; -import gnu.classpath.tools.getopt.Option; -import gnu.classpath.tools.getopt.OptionException; +import java.util.regex.Pattern; +import java.util.regex.PatternSyntaxException; -public class fcatch { +public class Glob { - FCatch catcher = new FCatch(); - - private boolean requestedPid = false; - - private static StringBuffer argString; - - private void run(String[] args) { - CommandlineParser parser = new CommandlineParser("fcatch") { - protected void validate() throws OptionException { - if (!requestedPid && argString == null) - throw new OptionException("no command or PID specified"); - } + private static int matchCharacterClass(String glob, int from) + throws PatternSyntaxException + { + int i = from + 2; + while (glob.charAt(++i) != ':' && i < glob.length()) + continue; + if (i >= glob.length() || glob.charAt(++i) != ']') + throw new PatternSyntaxException + ("Unmatched '['.", glob, from); + return i; + } - //@Override - public void parseCommand(Proc command) { - // FIXME: This concatinatin the string is unnecessary. - String[] line = command.getCmdLine(); - argString = new StringBuffer(line[0]); - for (int i = 1; i < line.length; i++) - argString.append(" ").append(line[i]); + private static int matchBrack(String glob, int from) + throws PatternSyntaxException + { + // On first character, both [ and ] are legal. But when [ is + // foolowed with :, it's character class. + int i = from + 1; + if (glob.charAt(i) == '[' && glob.charAt(i + 1) == ':') + i = matchCharacterClass(glob, i) + 1; + else + ++i; // skip any character, including [ or ] + boolean escape = false; + for (; i < glob.length(); ++i) { + char c = glob.charAt(i); + if (escape) { + ++i; + escape = false; } - - }; - addOptions(parser); - parser - .setHeader("Usage: fcatch [OPTIONS] -- PATH ARGS || fcatch [OPTIONS] PID"); - - parser.parse(args); - - if (argString != null) { - String[] cmd = argString.toString().split("\\s"); - - catcher.trace(cmd, requestedPid); + else if (c == '[' && glob.charAt(i + 1) == ':') + i = matchCharacterClass(glob, i); + else if (c == ']') + return i; } + throw new PatternSyntaxException + ("Unmatched '" + glob.charAt(from) + "'.", glob, from); } - public void addOptions(CommandlineParser p) { - p.add(new Option('p', "pid to trace", "PID") { - public void parsed(String arg) throws OptionException { - try { - int pid = Integer.parseInt(arg); - catcher.addProc(Util.getProcFromPid(pid)); - requestedPid = true; - if (argString == null) - argString = new StringBuffer(pid); - else - argString.append(" " + pid); - - } catch (NumberFormatException e) { - OptionException oe = new OptionException( - "couldn't parse pid: " + arg); - oe.initCause(e); - throw oe; + private static String toRegex(String glob) { + StringBuffer buf = new StringBuffer(); + boolean escape = false; + for(int i = 0; i < glob.length(); ++i) { + char c = glob.charAt(i); + if (escape) { + if (c == '\\') + buf.append("\\\\"); + else if (c == '*') + buf.append("\\*"); + else if (c == '?') + buf.append('?'); + else + buf.append('\\').append(c); + escape = false; + } + else { + if (c == '\\') + escape = true; + else if (c == '[') { + int j = matchBrack(glob, i); + buf.append(glob.substring(i, j+1)); + i = j; } + else if (c == '*') + buf.append(".*"); + else if (c == '?') + buf.append('.'); + else if (c == '.') + buf.append("\\."); + else + buf.append(c); } - }); + } + return buf.toString(); } - public static void main(String[] args) { - fcatch fc = new fcatch(); - fc.run(args); + public static Pattern compile(String glob) { + return Pattern.compile(toRegex(glob)); } } hooks/post-receive -- frysk system monitor/debugger
reply other threads:[~2008-02-29 15:19 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=20080229151923.2323.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).