summaryrefslogtreecommitdiffstats
path: root/TOOLS/file2string.pl
diff options
context:
space:
mode:
Diffstat (limited to 'TOOLS/file2string.pl')
-rwxr-xr-xTOOLS/file2string.pl24
1 files changed, 24 insertions, 0 deletions
diff --git a/TOOLS/file2string.pl b/TOOLS/file2string.pl
new file mode 100755
index 0000000000..d9ad215d6d
--- /dev/null
+++ b/TOOLS/file2string.pl
@@ -0,0 +1,24 @@
+#! /usr/bin/env perl
+
+use strict;
+use warnings;
+
+# Convert the contents of a file into a C string constant.
+# Note that the compiler will implicitly add an extra 0 byte at the end
+# of every string, so code using the string may need to remove that to get
+# the exact contents of the original file.
+# FIXME: why not a char array?
+
+# treat only alphanumeric and not-" punctuation as safe
+my $unsafe_chars = qr{[^][A-Za-z0-9!#%&'()*+,./:;<=>?^_{|}~ -]};
+
+for my $file (@ARGV) {
+ open my $fh, '<:raw', $file or next;
+ print "/* Generated from $file */\n";
+ while (<$fh>) {
+ # replace unsafe chars with their equivalent octal escapes
+ s/($unsafe_chars)/\\@{[sprintf '%03o', ord($1)]}/gos;
+ print "\"$_\"\n"
+ }
+ close $fh;
+}