vmbase,libfdt: Make cstr! safe & const-compatible

Test: m libvmbase
Test: m libpvmfw.bootargs.test
Test: m liblibfdt.integration_test
Change-Id: Ie6376fabf757b85a75c44ae4f0c04479c1a2c6d9
diff --git a/vmbase/src/util.rs b/vmbase/src/util.rs
index 7fe6015..25586bc 100644
--- a/vmbase/src/util.rs
+++ b/vmbase/src/util.rs
@@ -20,7 +20,12 @@
 #[macro_export]
 macro_rules! cstr {
     ($str:literal) => {{
-        core::ffi::CStr::from_bytes_with_nul(concat!($str, "\0").as_bytes()).unwrap()
+        const S: &str = concat!($str, "\0");
+        const C: &::core::ffi::CStr = match ::core::ffi::CStr::from_bytes_with_nul(S.as_bytes()) {
+            Ok(v) => v,
+            Err(_) => panic!("string contains interior NUL"),
+        };
+        C
     }};
 }