(address . guix-patches@gnu.org)(name . antlers)(address . autumnalantlers@gmail.com)
* gnu/packages/linux.scm (config->string): add escape-string
Handles characters within the set
(char-set-intersection char-set:ascii char-set:printing), removing
those which are known to be unsupported.
---
gnu/packages/linux.scm | 20 +++++++++++++++++++-
1 file changed, 19 insertions(+), 1 deletion(-)
Toggle diff (40 lines)
diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm
index b31fe0a580..60ae668fd9 100644
--- a/gnu/packages/linux.scm
+++ b/gnu/packages/linux.scm
@@ -761,6 +761,22 @@ (define %bpf-extra-linux-options
("CONFIG_IKHEADERS" . #t)))
(define (config->string options)
+ (define (escape-string str)
+ "Returns STR with the escapes necessary to be read as a string-type
+ option's value. Handles characters within the set (char-set-intersection
+ char-set:ascii char-set:printing), removing those which are known to be
+ unsupported."
+ (fold (match-lambda* (((match? fmt) str)
+ (transform-string str match?
+ (cut format #f fmt <>))))
+ str
+ `((#\# "") ; No known way to escape # characters.
+ (#\$ "$~a")
+ ("\"\\'`" "\\~a")
+ (";:()#" "\\\\~a")
+ ("|" "\\\\\\~a")
+ ;; No support for tabs, newlines, etc.
+ (,(char-set->string (ucs-range->char-set 9 14)) ""))))
(string-join (map (match-lambda
((option . 'm)
(string-append option "=m"))
@@ -769,7 +785,9 @@ (define (config->string options)
((option . #f)
(string-append option "=n"))
((option . string)
- (string-append option "=\"" string "\"")))
+ (string-append option "=\""
+ (escape-string string)
+ "\"")))
options)
"\n"))
--
2.34.0