diff mbox series

[bug#70494,09/23] store: Add validate-store-name.

Message ID 803b6bbff7d1cad61eff5b9f8c18007af53de436.1713692561.git.mail@cbaines.net
State New
Headers show
Series Groundwork for the Guile guix-daemon | expand

Commit Message

Christopher Baines April 21, 2024, 9:42 a.m. UTC
* guix/store.scm (validate-store-name): New procedure.

Change-Id: I507d070d1cfdbd433d93830ee2937b1a1dee315a
---
 guix/store.scm | 11 +++++++++++
 1 file changed, 11 insertions(+)
diff mbox series

Patch

diff --git a/guix/store.scm b/guix/store.scm
index b83f205096..096efcd128 100644
--- a/guix/store.scm
+++ b/guix/store.scm
@@ -205,6 +205,7 @@  (define-module (guix store)
             store-path-package-name
             store-path-hash-part
             direct-store-path
+            validate-store-name
             derivation-log-file
             log-file))
 
@@ -2303,6 +2304,16 @@  (define (store-path? path)
   ;; `isStorePath' in Nix does something similar.
   (string-prefix? (%store-prefix) path))
 
+(define (validate-store-name name)
+  (string-for-each
+   (lambda (c)
+     (unless (or (char-alphabetic? c)
+                 (char-numeric? c)
+                 (member c '(#\+ #\- #\. #\_ #\? #\=)))
+       (error (simple-format #f "invalid character ~A" c))))
+   name)
+  #t)
+
 (define (direct-store-path? path)
   "Return #t if PATH is a store path, and not a sub-directory of a store path.
 This predicate is sometimes needed because files *under* a store path are not