mirror of
https://github.com/mpv-player/mpv
synced 2024-12-16 11:55:42 +00:00
3f73d63523
Escaping all question marks as well, they can be used to form trigraph characters which are effective even within string literal.
25 lines
769 B
Perl
Executable File
25 lines
769 B
Perl
Executable File
#! /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 punctuations (excluding " and ?) 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;
|
|
}
|