diff options
Diffstat (limited to 'TOOLS/file2string.pl')
-rwxr-xr-x | TOOLS/file2string.pl | 24 |
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; +} |