| #!/bin/sh |
| |
| if [ -d include/mbedtls ]; then :; else |
| echo "$0: must be run from root" >&2 |
| exit 1 |
| fi |
| |
| CERTS="library/certs.c" |
| CERTS_TMP="${CERTS}.tmp" |
| CERTS_NEW="${CERTS}.new" |
| |
| # Remove bodies of BEGIN FILE ... END FILE blocks |
| SED_RM_FILE_BODIES=":o; /BEGIN FILE/!{p;n;bo}; /BEGIN FILE/{p; n; :i; /END FILE/{n; bo}; n; bi}" |
| sed -n "${SED_RM_FILE_BODIES}" $CERTS > ${CERTS_TMP} |
| while IFS= read -r line; do |
| echo "$line" |
| CMD=`echo "$line" | sed -n 's/^\/\* BEGIN FILE \([^ ]*\) \([^ ]*\) \([^ ]*\) \([^ ]*\)*.*$/\1 \2 \3 \4/p'` |
| if [ -n "$CMD" ]; then |
| enc=$(echo "$CMD" | cut -f1 -d' ' ) |
| type=$(echo "$CMD" | cut -f2 -d' ' ) |
| name=$(echo "$CMD" | cut -f3 -d' ' ) |
| file=$(echo "$CMD" | cut -f4 -d' ' ) |
| |
| if [ "$type" != "variable" ] && [ "$type" != "macro" ]; then |
| exit 1 |
| fi |
| |
| if [ "$enc" != "string" ] && [ "$enc" != "binary" ]; then |
| exit 1 |
| fi |
| |
| # Support 'binary' and 'string' encoding |
| # Support 'variable' and 'macro' types |
| |
| if [ "$enc" = "binary" ]; then |
| DATA=`xxd -i "$file" | tail -n +2 | head -n -2 | sed 's/^[ ]*/ /'` |
| elif [ "$enc" = "string" ]; then |
| DATA=`cat "$file" | sed 's/^/ \"/;s/$/\\r\\n\"/'` |
| fi |
| |
| if [ "$type" = "variable" ]; then |
| if [ "$enc" = "binary" ]; then |
| echo "const unsigned char ${name}[] = {" |
| xxd -i "$file" | sed 's/^[ ]*/ /' | tail -n +2 | head -n -2 |
| echo "};" |
| elif [ "$enc" = "string" ]; then |
| echo "const char ${name}[] =" |
| cat "$file" | head -n -1 | sed 's/^/ \"/;s/$/\\r\\n\"/' |
| cat "$file" | tail -n 1 | sed 's/^/ \"/;s/$/\\r\\n\";/' |
| fi |
| elif [ "$type" = "macro" ]; then |
| if [ "$enc" = "binary" ]; then |
| printf '%-77s\\\n' "#define ${name} {" |
| xxd -i "$file" | sed 's/^[ ]*/ /' | tail -n +2 | head -n -2 | |
| xargs -d'\n' printf '%-77s\\\n' |
| echo "}" |
| elif [ "$enc" = "string" ]; then |
| printf '%-75s\\\n' "#define ${name}" |
| cat "$file" | head -n -1 | sed 's/^/ \"/; s/$/\\r\\n\"/' | xargs -d'\n' printf '%-75s\\\n' |
| cat "$file" | tail -n 1 | sed 's/^/ \"/; s/$/\\r\\n\"/' |
| fi |
| fi |
| |
| echo "/* END FILE */" |
| fi |
| done < ${CERTS_TMP} > ${CERTS} |