[augeas-devel] [PATCH 6/6] Don't require backslashes to be escaped in regexps

Michael Chapman mike at very.puzzling.org
Sat Oct 8 11:08:06 UTC 2011


This patch removes \\ from the list of escapes used when handling
regexps.

The effect is that where previously we had to use:

  /\\\\./

to mean "backslash followed by any character", now the more logical:

  /\\./

must be used.

Signed-off-by: Michael Chapman <mike at very.puzzling.org>
---
 lenses/dhcpd.aug                 |    2 +-
 lenses/httpd.aug                 |   10 +++++-----
 lenses/interfaces.aug            |    2 +-
 lenses/iptables.aug              |    2 +-
 lenses/modprobe.aug              |    6 +++---
 lenses/shellvars.aug             |    4 ++--
 lenses/shellvars_list.aug        |    4 ++--
 lenses/sudoers.aug               |    8 ++++----
 lenses/sysconfig.aug             |    2 +-
 lenses/syslog.aug                |    4 ++--
 lenses/wine.aug                  |   10 +++++-----
 src/internal.h                   |    2 +-
 tests/modules/pass_cont_line.aug |    2 +-
 13 files changed, 29 insertions(+), 29 deletions(-)

diff --git a/lenses/dhcpd.aug b/lenses/dhcpd.aug
index 8cbc3db..a6bff16 100644
--- a/lenses/dhcpd.aug
+++ b/lenses/dhcpd.aug
@@ -81,7 +81,7 @@ let ip                = Rx.ipv4
 
 (* borrowed from sysconfig.aug *)
   (* Chars allowed in a bare string *)
-  let bchar = /[^ \t\n"'\\{}#,()]|\\\\./
+  let bchar = /[^ \t\n"'\\{}#,()]|\\./
   let qchar = /["']/  (* " *)
 
   (* We split the handling of right hand sides into a few cases:
diff --git a/lenses/httpd.aug b/lenses/httpd.aug
index 958324f..3389798 100644
--- a/lenses/httpd.aug
+++ b/lenses/httpd.aug
@@ -45,7 +45,7 @@ autoload xfm
 let dels (s:string)     = del s s
 
 (* deal with continuation lines *)
-let sep_spc    =  del /([ \t]+|[ \t]*\\\\\n[ \t]*)/ " "
+let sep_spc    =  del /([ \t]+|[ \t]*\\\n[ \t]*)/ " "
 
 let sep_osp             = Sep.opt_space
 let sep_eq              = del /[ \t]*=[ \t]*/ "="
@@ -59,10 +59,10 @@ let empty               = Util.empty
 let indent              = Util.indent
 
 (* borrowed from shellvars.aug *)
-let char_arg_dir  = /[^ '"\t\n]|\\\\"|\\\\'/
-let char_arg_sec  = /[^ '"\t\n>]|\\\\"|\\\\'/
-let dquot = /"([^"\\\n]|\\\\.)*"/
-let squot = /'([^'\\\n]|\\\\.)*'/
+let char_arg_dir  = /[^ '"\t\n]|\\"|\\'/
+let char_arg_sec  = /[^ '"\t\n>]|\\"|\\'/
+let dquot = /"([^"\\\n]|\\.)*"/
+let squot = /'([^'\\\n]|\\.)*'/
 
 (******************************************************************
  *                            Attributes
diff --git a/lenses/interfaces.aug b/lenses/interfaces.aug
index 4dc280f..66c2da0 100644
--- a/lenses/interfaces.aug
+++ b/lenses/interfaces.aug
@@ -18,7 +18,7 @@ let eol        = Util.eol
 
 (* a line can be extended across multiple lines by making the last  *)
 (*  character a backslash *)
-let sep_spc    =  del /([ \t]+|[ \t]*\\\\\n[ \t]*)/ " "
+let sep_spc    =  del /([ \t]+|[ \t]*\\\n[ \t]*)/ " "
 
 (* Define fields *)
 let sto_to_eol = store /([^\\ \t\n].*[^\\ \t\n]|[^\\ \t\n])/ . eol
diff --git a/lenses/iptables.aug b/lenses/iptables.aug
index 28e6bfe..f794091 100644
--- a/lenses/iptables.aug
+++ b/lenses/iptables.aug
@@ -51,7 +51,7 @@ let tcp_flags =
 let ipt_match =
   let any_key = /[a-zA-Z-][a-zA-Z-]+/ -
     /protocol|source|destination|jump|goto|in-interface|out-interface|fragment|match|tcp-flags/ in
-  let any_val = /([^" \t\n!-][^ \t\n]*)|"([^"\\\n]|\\\\.)*"/ in
+  let any_val = /([^" \t\n!-][^ \t\n]*)|"([^"\\\n]|\\.)*"/ in
   let any_param =
     [ [ spc . dels "!" . label "not" ]? .
       spc . dels "--" . key any_key . (spc . store any_val)? ] in
diff --git a/lenses/modprobe.aug b/lenses/modprobe.aug
index bdecafb..5f5be89 100644
--- a/lenses/modprobe.aug
+++ b/lenses/modprobe.aug
@@ -16,9 +16,9 @@ let eol = Util.eol | Util.comment
 *)
 
 (* A separator is either whitespace or \ followed by newline *)
-let sep_ch = /[ \t]|\\\\\n/
+let sep_ch = /[ \t]|\\\n/
 (* Anything that's not a separator is part of a token *)
-let tok_ch = /[^ \t\n#\\]|\\\\[^ \t\n]/
+let tok_ch = /[^ \t\n#\\]|\\[^ \t\n]/
 
 let spc = del sep_ch+ " "
 let token = store tok_ch+
@@ -26,7 +26,7 @@ let indent = Util.del_opt_ws ""
 
 let cmd (n:regexp) = key n . spc
 let arg (n:string) = [ label n . token ]
-let token_to_eol = store (tok_ch . /([^#\n\\]|\\\\\n)*/ . tok_ch | tok_ch)
+let token_to_eol = store (tok_ch . /([^#\n\\]|\\\n)*/ . tok_ch | tok_ch)
 
 let options =
   let opt_ch = /[A-Za-z0-9_]/ in
diff --git a/lenses/shellvars.aug b/lenses/shellvars.aug
index d419a4b..9c9173d 100644
--- a/lenses/shellvars.aug
+++ b/lenses/shellvars.aug
@@ -13,8 +13,8 @@ module Shellvars =
   let xchgs   = Build.xchgs
   let semicol = del /;?/ ""
 
-  let char  = /[^;#() '"\t\n]|\\\\"/
-  let dquot = /"([^"\\\n]|\\\\.)*"/                    (* " Emacs, relax *)
+  let char  = /[^;#() '"\t\n]|\\"/
+  let dquot = /"([^"\\\n]|\\.)*"/                    (* " Emacs, relax *)
   let squot = /'[^'\n]*'/
   (* For some reason, `` conflicts with comment_or_eol *)
   let bquot = /`[^#`\n]*`/
diff --git a/lenses/shellvars_list.aug b/lenses/shellvars_list.aug
index 7f5fa2c..f585853 100644
--- a/lenses/shellvars_list.aug
+++ b/lenses/shellvars_list.aug
@@ -13,8 +13,8 @@ module Shellvars_list =
   let indent  = Util.indent
 
   let sqword = /[^ '\t\n]+/
-  let dqword = /([^ "\\\t\n]|\\\\.)+/
-  let uqword = /([^ "'\\\t\n]|\\\\.)+/
+  let dqword = /([^ "\\\t\n]|\\.)+/
+  let uqword = /([^ "'\\\t\n]|\\.)+/
 
   (* lists values of the form ...  val1 val2 val3  ... *)
   let list(word:regexp) =
diff --git a/lenses/sudoers.aug b/lenses/sudoers.aug
index 376e590..dea0b3e 100644
--- a/lenses/sudoers.aug
+++ b/lenses/sudoers.aug
@@ -61,10 +61,10 @@ let indent    = del /[ \t]*/ ""
 let sep_spc  = del /[ \t]+/ " "
 
 (* Variable: sep_cont *)
-let sep_cont = del /([ \t]+|[ \t]*\\\\\n[ \t]*)/ " "
+let sep_cont = del /([ \t]+|[ \t]*\\\n[ \t]*)/ " "
 
 (* Variable: sep_cont_opt *)
-let sep_cont_opt = del /([ \t]*|[ \t]*\\\\\n[ \t]*)/ " "
+let sep_cont_opt = del /([ \t]*|[ \t]*\\\n[ \t]*)/ " "
 
 (* Variable: sep_com *)
 let sep_com  = sep_cont_opt . Util.del_str "," . sep_cont_opt
@@ -83,7 +83,7 @@ let sep_dquote   = Util.del_str "\""
 
 (* Variable: sto_to_com_cmnd
 sto_to_com_cmnd does not begin or end with a space *)
-let sto_to_com_cmnd = store /([^,=:#() \t\n\\]([^,=:#()\n\\]|\\\\[=:,\\])*[^,=:#() \t\n\\])|[^,=:#() \t\n\\]/
+let sto_to_com_cmnd = store /([^,=:#() \t\n\\]([^,=:#()\n\\]|\\[=:,\\])*[^,=:#() \t\n\\])|[^,=:#() \t\n\\]/
 
 (* Variable: sto_to_com
 
@@ -96,7 +96,7 @@ let sto_to_com_host = store /[^,=:#() \t\n\\]+/
 
 (* Variable: sto_to_com_user
 Escaped spaces are allowed *)
-let sto_to_com_user = store ( /([^,=:#() \t\n]([^,=:#() \t\n]|(\\\\[ \t]))*[^,=:#() \t\n])|[^,=:#() \t\n]/
+let sto_to_com_user = store ( /([^,=:#() \t\n]([^,=:#() \t\n]|(\\[ \t]))*[^,=:#() \t\n])|[^,=:#() \t\n]/
                               - /(User|Runas|Host|Cmnd)_Alias|Defaults.*/ )
 
 (* Variable: sto_to_com_col *)
diff --git a/lenses/sysconfig.aug b/lenses/sysconfig.aug
index 2c7efaa..b1b7517 100644
--- a/lenses/sysconfig.aug
+++ b/lenses/sysconfig.aug
@@ -16,7 +16,7 @@ module Sysconfig =
   let nothing = del /(""|'')?/ "" . value ""
 
   (* Chars allowed in a bare string *)
-  let bchar = /[^ \t\n"'\\]|\\\\./
+  let bchar = /[^ \t\n"'\\]|\\./
   let qchar = /["']/  (* " *)
 
   (* We split the handling of right hand sides into a few cases:
diff --git a/lenses/syslog.aug b/lenses/syslog.aug
index cda17bb..fe5df3e 100644
--- a/lenses/syslog.aug
+++ b/lenses/syslog.aug
@@ -33,10 +33,10 @@ module Syslog =
 	(* Variable: eol *)
         let eol        = Util.eol
 	(* Variable: sep_tab *)
-        let sep_tab    = del /([ \t]+|[ \t]*\\\\\n[ \t]*)/ "\t"
+        let sep_tab    = del /([ \t]+|[ \t]*\\\n[ \t]*)/ "\t"
 
 	(* Variable: sep_tab_opt *)
-        let sep_tab_opt = del /([ \t]*|[ \t]*\\\\\n[ \t]*)/ ""
+        let sep_tab_opt = del /([ \t]*|[ \t]*\\\n[ \t]*)/ ""
 
 	(* View: comment
 	  Map comments into "#comment" nodes
diff --git a/lenses/wine.aug b/lenses/wine.aug
index bd43a17..21a68f8 100644
--- a/lenses/wine.aug
+++ b/lenses/wine.aug
@@ -21,13 +21,13 @@ let header =
   [ label "version" . store /[0-9.]+/ ] . eol
 
 let qstr =
-  let re = /([^"\n]|\\\\.)*/ - /@|"@"/ in    (* " Relax, emacs *)
+  let re = /([^"\n]|\\.)*/ - /@|"@"/ in    (* " Relax, emacs *)
     dels "\"" . store re . dels "\""
 
 let typed_val =
-  ([ label "type" . store /dword|hex(\\([0-9]+\\))?/ ] . dels ":" .
-    [ label "value" . store /[a-zA-Z0-9,()]+(\\\\\r?\n[ \t]*[a-zA-Z0-9,]+)*/])
-  |([ label "type" . store /str\\([0-9]+\\)/ ] . dels ":" .
+  ([ label "type" . store /dword|hex(\([0-9]+\))?/ ] . dels ":" .
+    [ label "value" . store /[a-zA-Z0-9,()]+(\\\r?\n[ \t]*[a-zA-Z0-9,]+)*/])
+  |([ label "type" . store /str\([0-9]+\)/ ] . dels ":" .
       dels "\"" . [ label "value" . store /[^"\n]*/ ] . dels "\"")   (* " Relax, emacs *)
 
 let entry =
@@ -39,7 +39,7 @@ let entry =
 
 let section =
   let ts = [ label "timestamp" . store Rx.integer ] in
-  [ label "section" . del /[ \t]*\\[/ "[" .
+  [ label "section" . del /[ \t]*\[/ "[" .
     store /[^]\n]+/ . dels "]" . (del_ws . ts)? . eol .
     (entry|empty|comment)* ]
 
diff --git a/src/internal.h b/src/internal.h
index 8c58d37..9cc38ac 100644
--- a/src/internal.h
+++ b/src/internal.h
@@ -260,7 +260,7 @@ char *unescape(const char *s, int len, const char *extra);
 
 /* Extra characters to be escaped in strings and regexps respectively */
 #define STR_ESCAPES "\"\\"
-#define RX_ESCAPES  "/\\"
+#define RX_ESCAPES  "/"
 
 /* Function: print_chars */
 int print_chars(FILE *out, const char *text, int cnt);
diff --git a/tests/modules/pass_cont_line.aug b/tests/modules/pass_cont_line.aug
index a914cc9..9633c09 100644
--- a/tests/modules/pass_cont_line.aug
+++ b/tests/modules/pass_cont_line.aug
@@ -5,7 +5,7 @@ module Pass_cont_line =
 
 let list_elt = [ label "element" . store /[a-z]+/ ]
 
-let ws_cont = /([ \t]+|[ \t]*\\\\\n[ \t]*)/ 
+let ws_cont = /([ \t]+|[ \t]*\\\n[ \t]*)/
 
 let sep = del ws_cont " "
 let eol = del /[ \t]*\n/ "\n"
-- 
1.7.6.4




More information about the augeas-devel mailing list