195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#!/bin/sh 295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 36f2600199c82330240de9a7f65a801b6f606b7b3David Benjamininclude_dir=../../include/openssl 46f2600199c82330240de9a7f65a801b6f606b7b3David Benjamin 56f2600199c82330240de9a7f65a801b6f606b7b3David Benjamincat > "${include_dir}/stack_macros.h" << EOF 695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley/* Copyright (c) 2014, Google Inc. 795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * 895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * Permission to use, copy, modify, and/or distribute this software for any 995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * purpose with or without fee is hereby granted, provided that the above 1095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * copyright notice and this permission notice appear in all copies. 1195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * 1295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 1395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 1495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY 1595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 1695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION 1795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN 1895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ 1995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 2095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#if !defined(IN_STACK_H) 2195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#error "Don't include this file directly. Include stack.h." 2295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#endif 2395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 2495c29f3cd1f6c08c6c0927868683392eea727ccAdam LangleyEOF 2595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 2695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleyoutput_stack () { 2795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley type=$1 286f2600199c82330240de9a7f65a801b6f606b7b3David Benjamin ptrtype=$2 2995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 306f2600199c82330240de9a7f65a801b6f606b7b3David Benjamin cat >> "${include_dir}/stack_macros.h" << EOF 3195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley/* ${type} */ 3295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#define sk_${type}_new(comp)\\ 336f2600199c82330240de9a7f65a801b6f606b7b3David Benjamin ((STACK_OF(${type})*) sk_new(CHECKED_CAST(stack_cmp_func, int (*) (const ${ptrtype} *a, const ${ptrtype} *b), comp))) 3495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 3595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#define sk_${type}_new_null()\\ 3695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ((STACK_OF(${type})*) sk_new_null()) 3795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 3895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#define sk_${type}_num(sk)\\ 3995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley sk_num(CHECKED_CAST(_STACK*, STACK_OF(${type})*, sk)) 4095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 4195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#define sk_${type}_zero(sk)\\ 4295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley sk_zero(CHECKED_CAST(_STACK*, STACK_OF(${type})*, sk)); 4395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 4495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#define sk_${type}_value(sk, i)\\ 456f2600199c82330240de9a7f65a801b6f606b7b3David Benjamin ((${ptrtype}) sk_value(CHECKED_CAST(_STACK*, const STACK_OF(${type})*, sk), (i))) 4695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 4795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#define sk_${type}_set(sk, i, p)\\ 486f2600199c82330240de9a7f65a801b6f606b7b3David Benjamin ((${ptrtype}) sk_set(CHECKED_CAST(_STACK*, STACK_OF(${type})*, sk), (i), CHECKED_CAST(void*, ${ptrtype}, p))) 4995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 5095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#define sk_${type}_free(sk)\\ 5195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley sk_free(CHECKED_CAST(_STACK*, STACK_OF(${type})*, sk)) 5295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 5395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#define sk_${type}_pop_free(sk, free_func)\\ 546f2600199c82330240de9a7f65a801b6f606b7b3David Benjamin sk_pop_free(CHECKED_CAST(_STACK*, STACK_OF(${type})*, sk), CHECKED_CAST(void (*) (void*), void (*) (${ptrtype}), free_func)) 5595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 5695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#define sk_${type}_insert(sk, p, where)\\ 576f2600199c82330240de9a7f65a801b6f606b7b3David Benjamin sk_insert(CHECKED_CAST(_STACK*, STACK_OF(${type})*, sk), CHECKED_CAST(void*, ${ptrtype}, p), (where)) 5895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 5995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#define sk_${type}_delete(sk, where)\\ 606f2600199c82330240de9a7f65a801b6f606b7b3David Benjamin ((${ptrtype}) sk_delete(CHECKED_CAST(_STACK*, STACK_OF(${type})*, sk), (where))) 6195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 6295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#define sk_${type}_delete_ptr(sk, p)\\ 636f2600199c82330240de9a7f65a801b6f606b7b3David Benjamin ((${ptrtype}) sk_delete_ptr(CHECKED_CAST(_STACK*, STACK_OF(${type})*, sk), CHECKED_CAST(void*, ${ptrtype}, p))) 6495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 6595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#define sk_${type}_find(sk, out_index, p)\\ 666f2600199c82330240de9a7f65a801b6f606b7b3David Benjamin sk_find(CHECKED_CAST(_STACK*, STACK_OF(${type})*, sk), (out_index), CHECKED_CAST(void*, ${ptrtype}, p)) 6795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 6895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#define sk_${type}_shift(sk)\\ 696f2600199c82330240de9a7f65a801b6f606b7b3David Benjamin ((${ptrtype}) sk_shift(CHECKED_CAST(_STACK*, STACK_OF(${type})*, sk))) 7095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 7195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#define sk_${type}_push(sk, p)\\ 726f2600199c82330240de9a7f65a801b6f606b7b3David Benjamin sk_push(CHECKED_CAST(_STACK*, STACK_OF(${type})*, sk), CHECKED_CAST(void*, ${ptrtype}, p)) 7395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 7495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#define sk_${type}_pop(sk)\\ 756f2600199c82330240de9a7f65a801b6f606b7b3David Benjamin ((${ptrtype}) sk_pop(CHECKED_CAST(_STACK*, STACK_OF(${type})*, sk))) 7695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 7795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#define sk_${type}_dup(sk)\\ 7895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ((STACK_OF(${type})*) sk_dup(CHECKED_CAST(_STACK*, const STACK_OF(${type})*, sk))) 7995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 8095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#define sk_${type}_sort(sk)\\ 8195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley sk_sort(CHECKED_CAST(_STACK*, STACK_OF(${type})*, sk)) 8295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 8395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#define sk_${type}_is_sorted(sk)\\ 8495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley sk_is_sorted(CHECKED_CAST(_STACK*, const STACK_OF(${type})*, sk)) 8595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 8695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#define sk_${type}_set_cmp_func(sk, comp)\\ 8795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ((int (*) (const ${type} **a, const ${type} **b)) sk_set_cmp_func(CHECKED_CAST(_STACK*, STACK_OF(${type})*, sk), CHECKED_CAST(stack_cmp_func, int (*) (const ${type} **a, const ${type} **b), comp))) 8895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 8995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 9095c29f3cd1f6c08c6c0927868683392eea727ccAdam LangleyEOF 9195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley} 9295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 936f2600199c82330240de9a7f65a801b6f606b7b3David Benjaminstack_types=$(cat "${include_dir}/stack.h" | grep '^ \* STACK_OF:' | sed -e 's/.*STACK_OF://' -e 's/ .*//') 946f2600199c82330240de9a7f65a801b6f606b7b3David Benjaminconst_stack_types=$(cat "${include_dir}/stack.h" | grep '^ \* CONST_STACK_OF:' | sed -e 's/.*CONST_STACK_OF://' -e 's/ .*//') 956f2600199c82330240de9a7f65a801b6f606b7b3David Benjaminspecial_stack_types=$(cat "${include_dir}/stack.h" | grep '^ \* SPECIAL_STACK_OF:' | sed -e 's/.*SPECIAL_STACK_OF://' -e 's/ .*//') 9695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 9795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleyfor type in $stack_types; do 9895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley echo Stack of ${type} 996f2600199c82330240de9a7f65a801b6f606b7b3David Benjamin output_stack "${type}" "${type} *" 1006f2600199c82330240de9a7f65a801b6f606b7b3David Benjamindone 1016f2600199c82330240de9a7f65a801b6f606b7b3David Benjamin 1026f2600199c82330240de9a7f65a801b6f606b7b3David Benjaminfor type in $const_stack_types; do 1036f2600199c82330240de9a7f65a801b6f606b7b3David Benjamin echo Stack of ${type} 1046f2600199c82330240de9a7f65a801b6f606b7b3David Benjamin output_stack "${type}" "const ${type} *" 10595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleydone 10695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 10795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleyfor type in $special_stack_types; do 10895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley echo Stack of ${type} 1096f2600199c82330240de9a7f65a801b6f606b7b3David Benjamin output_stack "${type}" "${type}" 11095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleydone 11195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 1126f2600199c82330240de9a7f65a801b6f606b7b3David Benjaminclang-format -i "${include_dir}/stack_macros.h" 113