msasn1: implement ASN1_CreateModule

Nikolay Sivov bunglehead at
Tue Oct 27 15:29:02 CDT 2015

On 27.10.2015 23:10, Austin English wrote:
> This is based on code from the FreeRDP project, used with permission
> of the author, Marc-André Moreau <marcandre.moreau at>

Do you plan to reuse more from there? Is it clean license-wise? And more 
importantly, how did FreeRDP project came up with that implementation?

> For

> +
> +ASN1module_t WINAPI ASN1_CreateModule(ASN1uint32_t version, ASN1encodingrule_e rule, ASN1uint32_t flags, ASN1uint32_t pdu, const ASN1GenericFun_t encoder[], const ASN1GenericFun_t decoder[], const ASN1FreeFun_t freememory[], const ASN1uint32_t size[], ASN1magic_t modulename)

arg[] notation seems redundant, *arg is cleaner and more common for Wine.

> +    ASN1module_t module = NULL;

No need to init this.

> +    if (!((encoder) && (decoder) && (freememory) && (size)))
> +        return NULL;


> +    module = (ASN1module_t) malloc(sizeof(struct tagASN1module_t));
> +    ZeroMemory(module, sizeof(struct tagASN1module_t));

Heap* API please. And you don't need to zero-init it, or use tag* names.

All structures seem to be documented well, what's a reason to reuse 
simple parts like such structure allocations?

Can this be tested by directly calling ASN1_* functions? If yes, simple 
test would be nice to have.

More information about the wine-devel mailing list