X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=e2sm%2Flib%2Fasn_SEQUENCE_OF.c;fp=e2sm%2Flib%2Fasn_SEQUENCE_OF.c;h=ec952fc99936ab1464d76ac75821fc19e47995cb;hb=21b61dd76570beb43afc74289296e831914d9060;hp=0000000000000000000000000000000000000000;hpb=73cdf410d29f46c3047686694e828de4aee6633c;p=ric-app%2Frc.git diff --git a/e2sm/lib/asn_SEQUENCE_OF.c b/e2sm/lib/asn_SEQUENCE_OF.c new file mode 100644 index 0000000..ec952fc --- /dev/null +++ b/e2sm/lib/asn_SEQUENCE_OF.c @@ -0,0 +1,41 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include + +typedef A_SEQUENCE_OF(void) asn_sequence; + +void +asn_sequence_del(void *asn_sequence_of_x, int number, int _do_free) { + asn_sequence *as = (asn_sequence *)asn_sequence_of_x; + + if(as) { + void *ptr; + int n; + + if(number < 0 || number >= as->count) + return; /* Nothing to delete */ + + if(_do_free && as->free) { + ptr = as->array[number]; + } else { + ptr = 0; + } + + /* + * Shift all elements to the left to hide the gap. + */ + --as->count; + for(n = number; n < as->count; n++) + as->array[n] = as->array[n+1]; + + /* + * Invoke the third-party function only when the state + * of the parent structure is consistent. + */ + if(ptr) as->free(ptr); + } +} +