summaryrefslogtreecommitdiffstats
path: root/src/args.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/args.rs')
-rw-r--r--src/args.rs22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/args.rs b/src/args.rs
index 29a7fa81..594ece09 100644
--- a/src/args.rs
+++ b/src/args.rs
@@ -62,6 +62,7 @@ pub struct Args {
no_ignore_vcs: bool,
no_messages: bool,
null: bool,
+ path_separator: Option<u8>,
quiet: bool,
quiet_matched: QuietMatched,
replace: Option<Vec<u8>>,
@@ -151,6 +152,7 @@ impl Args {
.heading(self.heading)
.line_per_match(self.line_per_match)
.null(self.null)
+ .path_separator(self.path_separator)
.with_filename(self.with_filename);
if let Some(ref rep) = self.replace {
p = p.replace(rep.clone());
@@ -347,6 +349,7 @@ impl<'a> ArgMatches<'a> {
no_ignore_vcs: self.no_ignore_vcs(),
no_messages: self.is_present("no-messages"),
null: self.is_present("null"),
+ path_separator: try!(self.path_separator()),
quiet: quiet,
quiet_matched: QuietMatched::new(quiet),
replace: self.replace(),
@@ -616,6 +619,25 @@ impl<'a> ArgMatches<'a> {
}
}
+ /// Returns the unescaped path separator in UTF-8 bytes.
+ fn path_separator(&self) -> Result<Option<u8>> {
+ match self.value_of_lossy("path-separator") {
+ None => Ok(None),
+ Some(sep) => {
+ let sep = unescape(&sep);
+ if sep.is_empty() {
+ Ok(None)
+ } else if sep.len() > 1 {
+ Err(From::from(format!(
+ "A path separator must be exactly one byte, but \
+ the given separator is {} bytes.", sep.len())))
+ } else {
+ Ok(Some(sep[0]))
+ }
+ }
+ }
+ }
+
/// Returns the before and after contexts from the command line.
///
/// If a context setting was absent, then `0` is returned.