repo/extra/nss/files/certdata.sh
2022-09-03 15:31:42 +05:30

134 lines
3.0 KiB
Bash
Executable File

#!/bin/sh -eu
# Run `sed -e 's|}$|},|' -e 's|,.*[A-Z]$|&,|' -e 's|, |, |g'` on the perl
# output for an accurate diff
exec > "$2"
cat << EOF
/* THIS IS A GENERATED FILE */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef BUILTINS_H
#include "builtins.h"
#endif /* BUILTINS_H */
EOF
tolower()
{
tr '[:upper:]' '[:lower:]' << EOF
$1
EOF
}
count()
{
tr -dc "$2" << EOF | wc -m
$1
EOF
}
while read -r attr typ val; do
case $attr in
''|\#*|BEGINDATA) continue
esac
case $typ in
CK_*) printf 'static const %s %s = %s;\n' "$typ" "$(tolower "$val")" "$val";
esac
done < "$1" | sort -u
cnt=0
while read -r attr typ val; do
case $attr in
''|\#*|BEGINDATA) continue ;;
CKA_CLASS)
[ "$cnt" -eq 0 ] || printf '\n};\n'
printf 'static const CK_ATTRIBUTE_TYPE nss_builtins_types_%d [] = {\n' \
"$((cnt += 1))"
;;
esac
case $attr in CKA_*)
printf ' %s,' "$attr"
esac
done < "$1"
printf '\n};\n'
cnt=0
is_multiline_octal=0
datasz=0
while read -r attr typ val; do
case $attr in
''|\#*|BEGINDATA) continue ;;
CKA_CLASS)
[ "$cnt" -eq 0 ] || printf '};\n'
printf 'static const NSSItem nss_builtins_items_%d [] = {\n' \
"$((cnt += 1))"
;;
esac
if [ "$is_multiline_octal" = 1 ]; then
case $attr in
END)
printf ', (PRUint32)%d },\n' "$datasz"
is_multiline_octal=0
datasz=0
;;
*)
printf '"%s"\n' "$attr"
: $((datasz += $(count "$attr" '\')))
;;
esac
continue
fi
case $typ in
UTF8)
strsz="$(printf '%s' "$val" | wc -c)"
: $((strsz -= 2)) # ""
: $((strsz += 1)) # \0
printf ' { (void *)%s, (PRUint32)%d },\n' \
"$val" "$strsz"
;;
MULTILINE_OCTAL)
is_multiline_octal=1
datasz=0
printf ' { (void *)'
;;
*)
printf ' { (void *)&%s, (PRUint32)sizeof(%s) },\n' \
"$(tolower "$val")" "$typ"
;;
esac
done < "$1"
printf '};\n'
printf "\nbuiltinsInternalObject\nnss_builtins_data[] = {\n";
cnt=0
objsize=0
while read -r attr typ val; do
case $attr in
''|\#*|BEGINDATA) continue ;;
CKA_CLASS)
[ "$cnt" = 0 ] || printf " { %d, nss_builtins_types_%d, nss_builtins_items_%d, {NULL} },\n" \
"$objsize" "$cnt" "$cnt"
objsize=0
: $((cnt += 1))
;;
esac
case $attr in CKA_*)
: $((objsize += 1))
esac
done < "$1"
printf " { %d, nss_builtins_types_%d, nss_builtins_items_%d, {NULL} },\n" \
"$objsize" "$cnt" "$cnt"
printf '};\n'
printf 'const PRUint32\nnss_builtins_nObjects = %d;\n' "$cnt"