diff --git a/.github/workflows/clang-format.yml b/.github/workflows/clang-format.yml index cca2eb7c..36388d68 100644 --- a/.github/workflows/clang-format.yml +++ b/.github/workflows/clang-format.yml @@ -5,14 +5,12 @@ on: [push] jobs: clang-format: - runs-on: ubuntu-20.04 # latest + runs-on: ubuntu-24.04 # latest steps: - name: Checkout Sources - uses: actions/checkout@v1 + uses: actions/checkout@v4 - name: clang-format lint - uses: DoozyX/clang-format-lint-action@v0.3.1 - with: - # List of extensions to check - extensions: c,h + run: | + ./format-check.py diff --git a/format-check.py b/format-check.py new file mode 100755 index 00000000..b9e3520c --- /dev/null +++ b/format-check.py @@ -0,0 +1,47 @@ +#!/usr/bin/env python3 +import argparse +import os +from pathlib import Path +import re +from subprocess import list2cmdline, run +from tempfile import NamedTemporaryFile + +CLANG_FORMAT_VERSION = '18.1.6' + +INCLUDE_REGEX = re.compile( + r'^(include|source|tests|verification)/.*\.(c|h|inl)$') +EXCLUDE_REGEX = re.compile(r'^$') + +arg_parser = argparse.ArgumentParser(description="Check with clang-format") +arg_parser.add_argument('-i', '--inplace-edit', action='store_true', + help="Edit files inplace") +args = arg_parser.parse_args() + +os.chdir(Path(__file__).parent) + +# create file containing list of all files to format +filepaths_file = NamedTemporaryFile(delete=False) +for dirpath, dirnames, filenames in os.walk('.'): + for filename in filenames: + # our regexes expect filepath to use forward slash + filepath = Path(dirpath, filename).as_posix() + if not INCLUDE_REGEX.match(filepath): + continue + if EXCLUDE_REGEX.match(filepath): + continue + + filepaths_file.write(f"{filepath}\n".encode()) +filepaths_file.close() + +# use pipx to run clang-format from PyPI +# this is a simple way to run the same clang-format version regardless of OS +cmd = ['pipx', 'run', f'clang-format=={CLANG_FORMAT_VERSION}', + f'--files={filepaths_file.name}'] +if args.inplace_edit: + cmd += ['-i'] +else: + cmd += ['--Werror', '--dry-run'] + +print(f"{Path.cwd()}$ {list2cmdline(cmd)}") +if run(cmd).returncode: + exit(1) diff --git a/format-check.sh b/format-check.sh deleted file mode 100755 index 117dd52b..00000000 --- a/format-check.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/usr/bin/env bash - -if [[ -z $CLANG_FORMAT ]] ; then - CLANG_FORMAT=clang-format -fi - -if NOT type $CLANG_FORMAT 2> /dev/null ; then - echo "No appropriate clang-format found." - exit 1 -fi - -FAIL=0 -SOURCE_FILES=`find bin source include tests -type f \( -name '*.h' -o -name '*.c' \)` -for i in $SOURCE_FILES -do - $CLANG_FORMAT -output-replacements-xml $i | grep -c " /dev/null - if [ $? -ne 1 ] - then - echo "$i failed clang-format check." - FAIL=1 - fi -done - -exit $FAIL - diff --git a/include/aws/cal/symmetric_cipher.h b/include/aws/cal/symmetric_cipher.h index 0de7db85..57612737 100644 --- a/include/aws/cal/symmetric_cipher.h +++ b/include/aws/cal/symmetric_cipher.h @@ -15,25 +15,22 @@ AWS_PUSH_SANE_WARNING_LEVEL struct aws_symmetric_cipher; -typedef struct aws_symmetric_cipher *(aws_aes_cbc_256_new_fn)( - struct aws_allocator *allocator, - const struct aws_byte_cursor *key, - const struct aws_byte_cursor *iv); - -typedef struct aws_symmetric_cipher *(aws_aes_ctr_256_new_fn)( - struct aws_allocator *allocator, - const struct aws_byte_cursor *key, - const struct aws_byte_cursor *iv); - -typedef struct aws_symmetric_cipher *(aws_aes_gcm_256_new_fn)( - struct aws_allocator *allocator, - const struct aws_byte_cursor *key, - const struct aws_byte_cursor *iv, - const struct aws_byte_cursor *aad, - const struct aws_byte_cursor *decryption_tag); - -typedef struct aws_symmetric_cipher *( - aws_aes_keywrap_256_new_fn)(struct aws_allocator *allocator, const struct aws_byte_cursor *key); +typedef struct aws_symmetric_cipher *(aws_aes_cbc_256_new_fn)(struct aws_allocator *allocator, + const struct aws_byte_cursor *key, + const struct aws_byte_cursor *iv); + +typedef struct aws_symmetric_cipher *(aws_aes_ctr_256_new_fn)(struct aws_allocator *allocator, + const struct aws_byte_cursor *key, + const struct aws_byte_cursor *iv); + +typedef struct aws_symmetric_cipher *(aws_aes_gcm_256_new_fn)(struct aws_allocator *allocator, + const struct aws_byte_cursor *key, + const struct aws_byte_cursor *iv, + const struct aws_byte_cursor *aad, + const struct aws_byte_cursor *decryption_tag); + +typedef struct aws_symmetric_cipher *(aws_aes_keywrap_256_new_fn)(struct aws_allocator *allocator, + const struct aws_byte_cursor *key); enum aws_symmetric_cipher_state { AWS_SYMMETRIC_CIPHER_READY, diff --git a/source/cal.c b/source/cal.c index 5b0f8ba1..8f6f19cc 100644 --- a/source/cal.c +++ b/source/cal.c @@ -6,7 +6,7 @@ #include #include -#define AWS_DEFINE_ERROR_INFO_CAL(CODE, STR) [(CODE)-0x1C00] = AWS_DEFINE_ERROR_INFO(CODE, STR, "aws-c-cal") +#define AWS_DEFINE_ERROR_INFO_CAL(CODE, STR) [(CODE) - 0x1C00] = AWS_DEFINE_ERROR_INFO(CODE, STR, "aws-c-cal") static struct aws_error_info s_errors[] = { AWS_DEFINE_ERROR_INFO_CAL(AWS_ERROR_CAL_SIGNATURE_VALIDATION_FAILED, "Verify on a cryptographic signature failed."), diff --git a/source/ecc.c b/source/ecc.c index ca944e07..07bc22e5 100644 --- a/source/ecc.c +++ b/source/ecc.c @@ -62,16 +62,14 @@ int aws_ecc_oid_from_curve_name(enum aws_ecc_curve_name curve_name, struct aws_b return AWS_OP_SUCCESS; } -typedef struct aws_ecc_key_pair *(aws_ecc_key_pair_new_from_public_key_fn)( - struct aws_allocator *allocator, - enum aws_ecc_curve_name curve_name, - const struct aws_byte_cursor *public_key_x, - const struct aws_byte_cursor *public_key_y); - -typedef struct aws_ecc_key_pair *(aws_ecc_key_pair_new_from_private_key_fn)( - struct aws_allocator *allocator, - enum aws_ecc_curve_name curve_name, - const struct aws_byte_cursor *priv_key); +typedef struct aws_ecc_key_pair *(aws_ecc_key_pair_new_from_public_key_fn)(struct aws_allocator *allocator, + enum aws_ecc_curve_name curve_name, + const struct aws_byte_cursor *public_key_x, + const struct aws_byte_cursor *public_key_y); + +typedef struct aws_ecc_key_pair *(aws_ecc_key_pair_new_from_private_key_fn)(struct aws_allocator *allocator, + enum aws_ecc_curve_name curve_name, + const struct aws_byte_cursor *priv_key); #ifndef BYO_CRYPTO diff --git a/source/rsa.c b/source/rsa.c index a8133cc4..483d08f2 100644 --- a/source/rsa.c +++ b/source/rsa.c @@ -8,11 +8,11 @@ #include #include -typedef struct aws_rsa_key_pair *( - aws_rsa_key_pair_new_from_public_pkcs1_fn)(struct aws_allocator *allocator, struct aws_byte_cursor public_key); +typedef struct aws_rsa_key_pair *(aws_rsa_key_pair_new_from_public_pkcs1_fn)(struct aws_allocator *allocator, + struct aws_byte_cursor public_key); -typedef struct aws_rsa_key_pair *( - aws_rsa_key_pair_new_from_private_pkcs1_fn)(struct aws_allocator *allocator, struct aws_byte_cursor private_key); +typedef struct aws_rsa_key_pair *(aws_rsa_key_pair_new_from_private_pkcs1_fn)(struct aws_allocator *allocator, + struct aws_byte_cursor private_key); #ifndef BYO_CRYPTO