xxd reads standard input when given no file operand, so the - is redundant. It also breaks builds that provide xxd through a partial reimplementation such as OpenWrt's scripts/xxdi.pl, which treats - as a file name and exits with xxdi.pl: Unable to open -: No such file or directory xml_plist_codegen.sh does not check for that failure, so the generated plists/get_info_response.c ends up with an empty byte array and AirPlay 2 answers GET /info with nothing.
29 lines
1.4 KiB
Bash
29 lines
1.4 KiB
Bash
# args: first is the source (XML) file, second is the destination directory
|
|
|
|
# converts the xml file to a plist file and converts that into a byte
|
|
# array defined in a .h and .c file
|
|
# for compilation
|
|
|
|
INPUT_FILE_NAME=`basename $1`
|
|
BASE_FILENAME=`echo ${INPUT_FILE_NAME%.*}`
|
|
LABEL=`echo _${BASE_FILENAME}_PLIST | tr '[:lower:]' '[:upper:]' | tr '.' '_'`
|
|
|
|
mkdir -p $2
|
|
|
|
printf "// Please do not edit this file!\n" > $2/$BASE_FILENAME.h
|
|
printf "// This file was automatically generated from $INPUT_FILE_NAME.\n\n" >> $2/$BASE_FILENAME.h
|
|
printf "#ifndef $LABEL\n" >> $2/$BASE_FILENAME.h
|
|
printf "#define $LABEL\n\n" >> $2/$BASE_FILENAME.h
|
|
printf "#include <stddef.h>\n\n" >> $2/$BASE_FILENAME.h
|
|
printf "extern unsigned char ${BASE_FILENAME}_plist[];\n" >> $2/$BASE_FILENAME.h
|
|
printf "extern size_t ${BASE_FILENAME}_plist_len;\n\n" >> $2/$BASE_FILENAME.h
|
|
printf "#endif // $LABEL\n" >> $2/$BASE_FILENAME.h
|
|
|
|
printf "// Please do not edit this file!\n" > $2/$BASE_FILENAME.c
|
|
printf "// This file was automatically generated from $INPUT_FILE_NAME.\n\n" >> $2/$BASE_FILENAME.c
|
|
printf "#include \"$BASE_FILENAME.h\"\n\n" >> $2/$BASE_FILENAME.c
|
|
printf "unsigned char ${BASE_FILENAME}_plist[] = {\n" >> $2/$BASE_FILENAME.c
|
|
plistutil -i $1 | xxd -i >> $2/$BASE_FILENAME.c
|
|
printf " };\n\n" >> $2/$BASE_FILENAME.c
|
|
printf "size_t ${BASE_FILENAME}_plist_len = sizeof(${BASE_FILENAME}_plist);\n" >> $2/$BASE_FILENAME.c
|