/**
 * WinPR: Windows Portable Runtime
 * Microsoft Remote Procedure Call (MSRPC)
 *
 * Copyright 2012 Marc-Andre Moreau <marcandre.moreau@gmail.com>
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifdef HAVE_CONFIG_H
#include "config.h"
#endif

#include <stdio.h>
#include <stdlib.h>

#include <winpr/rpc.h>

#ifndef _WIN32

#include "ndr_array.h"
#include "ndr_context.h"
#include "ndr_pointer.h"
#include "ndr_simple.h"
#include "ndr_string.h"
#include "ndr_structure.h"
#include "ndr_union.h"

#include "ndr_private.h"

void NdrpAlignLength(ULONG* length, unsigned int alignment)
{
	*length = (*length + alignment - 1) & ~(alignment - 1);
}

void NdrpIncrementLength(ULONG* length, unsigned int size)
{
	*length += size;
}

const char* FC_TYPE_STRINGS[] = {
	"FC_ZERO",
	"FC_BYTE",
	"FC_CHAR",
	"FC_SMALL",
	"FC_USMALL",
	"FC_WCHAR",
	"FC_SHORT",
	"FC_USHORT",
	"FC_LONG",
	"FC_ULONG",
	"FC_FLOAT",
	"FC_HYPER",
	"FC_DOUBLE",
	"FC_ENUM16",
	"FC_ENUM32",
	"FC_IGNORE",
	"FC_ERROR_STATUS_T",
	"FC_RP",
	"FC_UP",
	"FC_OP",
	"FC_FP",
	"FC_STRUCT",
	"FC_PSTRUCT",
	"FC_CSTRUCT",
	"FC_CPSTRUCT",
	"FC_CVSTRUCT",
	"FC_BOGUS_STRUCT",
	"FC_CARRAY",
	"FC_CVARRAY",
	"FC_SMFARRAY",
	"FC_LGFARRAY",
	"FC_SMVARRAY",
	"FC_LGVARRAY",
	"FC_BOGUS_ARRAY",
	"FC_C_CSTRING",
	"FC_C_BSTRING",
	"FC_C_SSTRING",
	"FC_C_WSTRING",
	"FC_CSTRING",
	"FC_BSTRING",
	"FC_SSTRING",
	"FC_WSTRING",
	"FC_ENCAPSULATED_UNION",
	"FC_NON_ENCAPSULATED_UNION",
	"FC_BYTE_COUNT_POINTER",
	"FC_TRANSMIT_AS",
	"FC_REPRESENT_AS",
	"FC_IP",
	"FC_BIND_CONTEXT",
	"FC_BIND_GENERIC",
	"FC_BIND_PRIMITIVE",
	"FC_AUTO_HANDLE",
	"FC_CALLBACK_HANDLE",
	"FC_UNUSED1",
	"FC_POINTER",
	"FC_ALIGNM2",
	"FC_ALIGNM4",
	"FC_ALIGNM8",
	"FC_UNUSED2",
	"FC_UNUSED3",
	"FC_UNUSED4",
	"FC_STRUCTPAD1",
	"FC_STRUCTPAD2",
	"FC_STRUCTPAD3",
	"FC_STRUCTPAD4",
	"FC_STRUCTPAD5",
	"FC_STRUCTPAD6",
	"FC_STRUCTPAD7",
	"FC_STRING_SIZED",
	"FC_UNUSED5",
	"FC_NO_REPEAT",
	"FC_FIXED_REPEAT",
	"FC_VARIABLE_REPEAT",
	"FC_FIXED_OFFSET",
	"FC_VARIABLE_OFFSET",
	"FC_PP",
	"FC_EMBEDDED_COMPLEX",
	"FC_IN_PARAM",
	"FC_IN_PARAM_BASETYPE",
	"FC_IN_PARAM_NO_FREE_INST",
	"FC_IN_OUT_PARAM",
	"FC_OUT_PARAM",
	"FC_RETURN_PARAM",
	"FC_RETURN_PARAM_BASETYPE",
	"FC_DEREFERENCE",
	"FC_DIV_2",
	"FC_MULT_2",
	"FC_ADD_1",
	"FC_SUB_1",
	"FC_CALLBACK",
	"FC_CONSTANT_IID",
	"FC_END",
	"FC_PAD",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"FC_SPLIT_DEREFERENCE",
	"FC_SPLIT_DIV_2",
	"FC_SPLIT_MULT_2",
	"FC_SPLIT_ADD_1",
	"FC_SPLIT_SUB_1",
	"FC_SPLIT_CALLBACK",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"",
	"FC_HARD_STRUCT",
	"FC_TRANSMIT_AS_PTR",
	"FC_REPRESENT_AS_PTR",
	"FC_USER_MARSHAL",
	"FC_PIPE",
	"FC_BLKHOLE",
	"FC_RANGE",
	"FC_INT3264",
	"FC_UINT3264",
	"FC_END_OF_UNIVERSE",
};

const NDR_TYPE_SIZE_ROUTINE pfnSizeRoutines[] = {
	NULL,                                 /* FC_ZERO */
	NdrSimpleTypeBufferSize,              /* FC_BYTE */
	NdrSimpleTypeBufferSize,              /* FC_CHAR */
	NdrSimpleTypeBufferSize,              /* FC_SMALL */
	NdrSimpleTypeBufferSize,              /* FC_USMALL */
	NdrSimpleTypeBufferSize,              /* FC_WCHAR */
	NdrSimpleTypeBufferSize,              /* FC_SHORT */
	NdrSimpleTypeBufferSize,              /* FC_USHORT */
	NdrSimpleTypeBufferSize,              /* FC_LONG */
	NdrSimpleTypeBufferSize,              /* FC_ULONG */
	NdrSimpleTypeBufferSize,              /* FC_FLOAT */
	NdrSimpleTypeBufferSize,              /* FC_HYPER */
	NdrSimpleTypeBufferSize,              /* FC_DOUBLE */
	NdrSimpleTypeBufferSize,              /* FC_ENUM16 */
	NdrSimpleTypeBufferSize,              /* FC_ENUM32 */
	NdrSimpleTypeBufferSize,              /* FC_IGNORE */
	NdrSimpleTypeBufferSize,              /* FC_ERROR_STATUS_T */
	NdrPointerBufferSize,                 /* FC_RP */
	NdrPointerBufferSize,                 /* FC_UP */
	NdrPointerBufferSize,                 /* FC_OP */
	NdrPointerBufferSize,                 /* FC_FP */
	NdrSimpleStructBufferSize,            /* FC_STRUCT */
	NdrSimpleStructBufferSize,            /* FC_PSTRUCT */
	NdrConformantStructBufferSize,        /* FC_CSTRUCT */
	NdrConformantStructBufferSize,        /* FC_CPSTRUCT */
	NdrConformantVaryingStructBufferSize, /* FC_CVSTRUCT */
	NdrComplexStructBufferSize,           /* FC_BOGUS_STRUCT */
	NdrConformantArrayBufferSize,         /* FC_CARRAY */
	NdrConformantVaryingArrayBufferSize,  /* FC_CVARRAY */
	NdrFixedArrayBufferSize,              /* FC_SMFARRAY */
	NdrFixedArrayBufferSize,              /* FC_LGFARRAY */
	NdrVaryingArrayBufferSize,            /* FC_SMVARRAY */
	NdrVaryingArrayBufferSize,            /* FC_LGVARRAY */
	NdrComplexArrayBufferSize,            /* FC_BOGUS_ARRAY */
	NdrConformantStringBufferSize,        /* FC_C_CSTRING */
	NULL,                                 /* FC_C_BSTRING */
	NULL,                                 /* FC_C_SSTRING */
	NdrConformantStringBufferSize,        /* FC_C_WSTRING */
	NdrNonConformantStringBufferSize,     /* FC_CSTRING */
	NULL,                                 /* FC_BSTRING */
	NULL,                                 /* FC_SSTRING */
	NULL,                                 /* FC_WSTRING */
	NdrEncapsulatedUnionBufferSize,       /* FC_ENCAPSULATED_UNION */
	NdrNonEncapsulatedUnionBufferSize,    /* FC_NON_ENCAPSULATED_UNION */
	NdrByteCountPointerBufferSize,        /* FC_BYTE_COUNT_POINTER */
	NULL,                                 /* FC_TRANSMIT_AS */
	NULL,                                 /* FC_REPRESENT_AS */
	NULL,                                 /* FC_IP */
	NdrContextHandleBufferSize,           /* FC_BIND_CONTEXT */
	NULL,                                 /* FC_BIND_GENERIC */
	NULL,                                 /* FC_BIND_PRIMITIVE */
	NULL,                                 /* FC_AUTO_HANDLE */
	NULL,                                 /* FC_CALLBACK_HANDLE */
	NULL,                                 /* FC_UNUSED1 */
	NULL,                                 /* FC_POINTER */
	NULL,                                 /* FC_ALIGNM2 */
	NULL,                                 /* FC_ALIGNM4 */
	NULL,                                 /* FC_ALIGNM8 */
	NULL,                                 /* FC_UNUSED2 */
	NULL,                                 /* FC_UNUSED3 */
	NULL,                                 /* FC_UNUSED4 */
	NULL,                                 /* FC_STRUCTPAD1 */
	NULL,                                 /* FC_STRUCTPAD2 */
	NULL,                                 /* FC_STRUCTPAD3 */
	NULL,                                 /* FC_STRUCTPAD4 */
	NULL,                                 /* FC_STRUCTPAD5 */
	NULL,                                 /* FC_STRUCTPAD6 */
	NULL,                                 /* FC_STRUCTPAD7 */
	NULL,                                 /* FC_STRING_SIZED */
	NULL,                                 /* FC_UNUSED5 */
	NULL,                                 /* FC_NO_REPEAT */
	NULL,                                 /* FC_FIXED_REPEAT */
	NULL,                                 /* FC_VARIABLE_REPEAT */
	NULL,                                 /* FC_FIXED_OFFSET */
	NULL,                                 /* FC_VARIABLE_OFFSET */
	NULL,                                 /* FC_PP */
	NULL,                                 /* FC_EMBEDDED_COMPLEX */
	NULL,                                 /* FC_IN_PARAM */
	NULL,                                 /* FC_IN_PARAM_BASETYPE */
	NULL,                                 /* FC_IN_PARAM_NO_FREE_INST */
	NULL,                                 /* FC_IN_OUT_PARAM */
	NULL,                                 /* FC_OUT_PARAM */
	NULL,                                 /* FC_RETURN_PARAM */
	NULL,                                 /* FC_RETURN_PARAM_BASETYPE */
	NULL,                                 /* FC_DEREFERENCE */
	NULL,                                 /* FC_DIV_2 */
	NULL,                                 /* FC_MULT_2 */
	NULL,                                 /* FC_ADD_1 */
	NULL,                                 /* FC_SUB_1 */
	NULL,                                 /* FC_CALLBACK */
	NULL,                                 /* FC_CONSTANT_IID */
	NULL,                                 /* FC_END */
	NULL,                                 /* FC_PAD */
};

const NDR_TYPE_MARSHALL_ROUTINE pfnMarshallRoutines[] = {
	NULL,                  /* FC_ZERO */
	NdrSimpleTypeMarshall, /* FC_BYTE */
	NdrSimpleTypeMarshall, /* FC_CHAR */
	NdrSimpleTypeMarshall, /* FC_SMALL */
	NdrSimpleTypeMarshall, /* FC_USMALL */
	NdrSimpleTypeMarshall, /* FC_WCHAR */
	NdrSimpleTypeMarshall, /* FC_SHORT */
	NdrSimpleTypeMarshall, /* FC_USHORT */
	NdrSimpleTypeMarshall, /* FC_LONG */
	NdrSimpleTypeMarshall, /* FC_ULONG */
	NdrSimpleTypeMarshall, /* FC_FLOAT */
	NdrSimpleTypeMarshall, /* FC_HYPER */
	NdrSimpleTypeMarshall, /* FC_DOUBLE */
	NdrSimpleTypeMarshall, /* FC_ENUM16 */
	NdrSimpleTypeMarshall, /* FC_ENUM32 */
	NdrSimpleTypeMarshall, /* FC_IGNORE */
	NULL,                  /* FC_ERROR_STATUS_T */
	NULL,                  /* FC_RP */
	NULL,                  /* FC_UP */
	NULL,                  /* FC_OP */
	NULL,                  /* FC_FP */
	NULL,                  /* FC_STRUCT */
	NULL,                  /* FC_PSTRUCT */
	NULL,                  /* FC_CSTRUCT */
	NULL,                  /* FC_CPSTRUCT */
	NULL,                  /* FC_CVSTRUCT */
	NULL,                  /* FC_BOGUS_STRUCT */
	NULL,                  /* FC_CARRAY */
	NULL,                  /* FC_CVARRAY */
	NULL,                  /* FC_SMFARRAY */
	NULL,                  /* FC_LGFARRAY */
	NULL,                  /* FC_SMVARRAY */
	NULL,                  /* FC_LGVARRAY */
	NULL,                  /* FC_BOGUS_ARRAY */
	NULL,                  /* FC_C_CSTRING */
	NULL,                  /* FC_C_BSTRING */
	NULL,                  /* FC_C_SSTRING */
	NULL,                  /* FC_C_WSTRING */
	NULL,                  /* FC_CSTRING */
	NULL,                  /* FC_BSTRING */
	NULL,                  /* FC_SSTRING */
	NULL,                  /* FC_WSTRING */
	NULL,                  /* FC_ENCAPSULATED_UNION */
	NULL,                  /* FC_NON_ENCAPSULATED_UNION */
	NULL,                  /* FC_BYTE_COUNT_POINTER */
	NULL,                  /* FC_TRANSMIT_AS */
	NULL,                  /* FC_REPRESENT_AS */
	NULL,                  /* FC_IP */
	NULL,                  /* FC_BIND_CONTEXT */
	NULL,                  /* FC_BIND_GENERIC */
	NULL,                  /* FC_BIND_PRIMITIVE */
	NULL,                  /* FC_AUTO_HANDLE */
	NULL,                  /* FC_CALLBACK_HANDLE */
	NULL,                  /* FC_UNUSED1 */
	NULL,                  /* FC_POINTER */
	NULL,                  /* FC_ALIGNM2 */
	NULL,                  /* FC_ALIGNM4 */
	NULL,                  /* FC_ALIGNM8 */
	NULL,                  /* FC_UNUSED2 */
	NULL,                  /* FC_UNUSED3 */
	NULL,                  /* FC_UNUSED4 */
	NULL,                  /* FC_STRUCTPAD1 */
	NULL,                  /* FC_STRUCTPAD2 */
	NULL,                  /* FC_STRUCTPAD3 */
	NULL,                  /* FC_STRUCTPAD4 */
	NULL,                  /* FC_STRUCTPAD5 */
	NULL,                  /* FC_STRUCTPAD6 */
	NULL,                  /* FC_STRUCTPAD7 */
	NULL,                  /* FC_STRING_SIZED */
	NULL,                  /* FC_UNUSED5 */
	NULL,                  /* FC_NO_REPEAT */
	NULL,                  /* FC_FIXED_REPEAT */
	NULL,                  /* FC_VARIABLE_REPEAT */
	NULL,                  /* FC_FIXED_OFFSET */
	NULL,                  /* FC_VARIABLE_OFFSET */
	NULL,                  /* FC_PP */
	NULL,                  /* FC_EMBEDDED_COMPLEX */
	NULL,                  /* FC_IN_PARAM */
	NULL,                  /* FC_IN_PARAM_BASETYPE */
	NULL,                  /* FC_IN_PARAM_NO_FREE_INST */
	NULL,                  /* FC_IN_OUT_PARAM */
	NULL,                  /* FC_OUT_PARAM */
	NULL,                  /* FC_RETURN_PARAM */
	NULL,                  /* FC_RETURN_PARAM_BASETYPE */
	NULL,                  /* FC_DEREFERENCE */
	NULL,                  /* FC_DIV_2 */
	NULL,                  /* FC_MULT_2 */
	NULL,                  /* FC_ADD_1 */
	NULL,                  /* FC_SUB_1 */
	NULL,                  /* FC_CALLBACK */
	NULL,                  /* FC_CONSTANT_IID */
	NULL,                  /* FC_END */
	NULL,                  /* FC_PAD */
};

const NDR_TYPE_UNMARSHALL_ROUTINE pfnUnmarshallRoutines[] = {
	NULL,                    /* FC_ZERO */
	NdrSimpleTypeUnmarshall, /* FC_BYTE */
	NdrSimpleTypeUnmarshall, /* FC_CHAR */
	NdrSimpleTypeUnmarshall, /* FC_SMALL */
	NdrSimpleTypeUnmarshall, /* FC_USMALL */
	NdrSimpleTypeUnmarshall, /* FC_WCHAR */
	NdrSimpleTypeUnmarshall, /* FC_SHORT */
	NdrSimpleTypeUnmarshall, /* FC_USHORT */
	NdrSimpleTypeUnmarshall, /* FC_LONG */
	NdrSimpleTypeUnmarshall, /* FC_ULONG */
	NdrSimpleTypeUnmarshall, /* FC_FLOAT */
	NdrSimpleTypeUnmarshall, /* FC_HYPER */
	NdrSimpleTypeUnmarshall, /* FC_DOUBLE */
	NdrSimpleTypeUnmarshall, /* FC_ENUM16 */
	NdrSimpleTypeUnmarshall, /* FC_ENUM32 */
	NdrSimpleTypeUnmarshall, /* FC_IGNORE */
	NULL,                    /* FC_ERROR_STATUS_T */
	NULL,                    /* FC_RP */
	NULL,                    /* FC_UP */
	NULL,                    /* FC_OP */
	NULL,                    /* FC_FP */
	NULL,                    /* FC_STRUCT */
	NULL,                    /* FC_PSTRUCT */
	NULL,                    /* FC_CSTRUCT */
	NULL,                    /* FC_CPSTRUCT */
	NULL,                    /* FC_CVSTRUCT */
	NULL,                    /* FC_BOGUS_STRUCT */
	NULL,                    /* FC_CARRAY */
	NULL,                    /* FC_CVARRAY */
	NULL,                    /* FC_SMFARRAY */
	NULL,                    /* FC_LGFARRAY */
	NULL,                    /* FC_SMVARRAY */
	NULL,                    /* FC_LGVARRAY */
	NULL,                    /* FC_BOGUS_ARRAY */
	NULL,                    /* FC_C_CSTRING */
	NULL,                    /* FC_C_BSTRING */
	NULL,                    /* FC_C_SSTRING */
	NULL,                    /* FC_C_WSTRING */
	NULL,                    /* FC_CSTRING */
	NULL,                    /* FC_BSTRING */
	NULL,                    /* FC_SSTRING */
	NULL,                    /* FC_WSTRING */
	NULL,                    /* FC_ENCAPSULATED_UNION */
	NULL,                    /* FC_NON_ENCAPSULATED_UNION */
	NULL,                    /* FC_BYTE_COUNT_POINTER */
	NULL,                    /* FC_TRANSMIT_AS */
	NULL,                    /* FC_REPRESENT_AS */
	NULL,                    /* FC_IP */
	NULL,                    /* FC_BIND_CONTEXT */
	NULL,                    /* FC_BIND_GENERIC */
	NULL,                    /* FC_BIND_PRIMITIVE */
	NULL,                    /* FC_AUTO_HANDLE */
	NULL,                    /* FC_CALLBACK_HANDLE */
	NULL,                    /* FC_UNUSED1 */
	NULL,                    /* FC_POINTER */
	NULL,                    /* FC_ALIGNM2 */
	NULL,                    /* FC_ALIGNM4 */
	NULL,                    /* FC_ALIGNM8 */
	NULL,                    /* FC_UNUSED2 */
	NULL,                    /* FC_UNUSED3 */
	NULL,                    /* FC_UNUSED4 */
	NULL,                    /* FC_STRUCTPAD1 */
	NULL,                    /* FC_STRUCTPAD2 */
	NULL,                    /* FC_STRUCTPAD3 */
	NULL,                    /* FC_STRUCTPAD4 */
	NULL,                    /* FC_STRUCTPAD5 */
	NULL,                    /* FC_STRUCTPAD6 */
	NULL,                    /* FC_STRUCTPAD7 */
	NULL,                    /* FC_STRING_SIZED */
	NULL,                    /* FC_UNUSED5 */
	NULL,                    /* FC_NO_REPEAT */
	NULL,                    /* FC_FIXED_REPEAT */
	NULL,                    /* FC_VARIABLE_REPEAT */
	NULL,                    /* FC_FIXED_OFFSET */
	NULL,                    /* FC_VARIABLE_OFFSET */
	NULL,                    /* FC_PP */
	NULL,                    /* FC_EMBEDDED_COMPLEX */
	NULL,                    /* FC_IN_PARAM */
	NULL,                    /* FC_IN_PARAM_BASETYPE */
	NULL,                    /* FC_IN_PARAM_NO_FREE_INST */
	NULL,                    /* FC_IN_OUT_PARAM */
	NULL,                    /* FC_OUT_PARAM */
	NULL,                    /* FC_RETURN_PARAM */
	NULL,                    /* FC_RETURN_PARAM_BASETYPE */
	NULL,                    /* FC_DEREFERENCE */
	NULL,                    /* FC_DIV_2 */
	NULL,                    /* FC_MULT_2 */
	NULL,                    /* FC_ADD_1 */
	NULL,                    /* FC_SUB_1 */
	NULL,                    /* FC_CALLBACK */
	NULL,                    /* FC_CONSTANT_IID */
	NULL,                    /* FC_END */
	NULL,                    /* FC_PAD */
};

const NDR_TYPE_FREE_ROUTINE pfnFreeRoutines[] = {
	NULL,              /* FC_ZERO */
	NdrSimpleTypeFree, /* FC_BYTE */
	NdrSimpleTypeFree, /* FC_CHAR */
	NdrSimpleTypeFree, /* FC_SMALL */
	NdrSimpleTypeFree, /* FC_USMALL */
	NdrSimpleTypeFree, /* FC_WCHAR */
	NdrSimpleTypeFree, /* FC_SHORT */
	NdrSimpleTypeFree, /* FC_USHORT */
	NdrSimpleTypeFree, /* FC_LONG */
	NdrSimpleTypeFree, /* FC_ULONG */
	NdrSimpleTypeFree, /* FC_FLOAT */
	NdrSimpleTypeFree, /* FC_HYPER */
	NdrSimpleTypeFree, /* FC_DOUBLE */
	NdrSimpleTypeFree, /* FC_ENUM16 */
	NdrSimpleTypeFree, /* FC_ENUM32 */
	NdrSimpleTypeFree, /* FC_IGNORE */
	NULL,              /* FC_ERROR_STATUS_T */
	NULL,              /* FC_RP */
	NULL,              /* FC_UP */
	NULL,              /* FC_OP */
	NULL,              /* FC_FP */
	NULL,              /* FC_STRUCT */
	NULL,              /* FC_PSTRUCT */
	NULL,              /* FC_CSTRUCT */
	NULL,              /* FC_CPSTRUCT */
	NULL,              /* FC_CVSTRUCT */
	NULL,              /* FC_BOGUS_STRUCT */
	NULL,              /* FC_CARRAY */
	NULL,              /* FC_CVARRAY */
	NULL,              /* FC_SMFARRAY */
	NULL,              /* FC_LGFARRAY */
	NULL,              /* FC_SMVARRAY */
	NULL,              /* FC_LGVARRAY */
	NULL,              /* FC_BOGUS_ARRAY */
	NULL,              /* FC_C_CSTRING */
	NULL,              /* FC_C_BSTRING */
	NULL,              /* FC_C_SSTRING */
	NULL,              /* FC_C_WSTRING */
	NULL,              /* FC_CSTRING */
	NULL,              /* FC_BSTRING */
	NULL,              /* FC_SSTRING */
	NULL,              /* FC_WSTRING */
	NULL,              /* FC_ENCAPSULATED_UNION */
	NULL,              /* FC_NON_ENCAPSULATED_UNION */
	NULL,              /* FC_BYTE_COUNT_POINTER */
	NULL,              /* FC_TRANSMIT_AS */
	NULL,              /* FC_REPRESENT_AS */
	NULL,              /* FC_IP */
	NULL,              /* FC_BIND_CONTEXT */
	NULL,              /* FC_BIND_GENERIC */
	NULL,              /* FC_BIND_PRIMITIVE */
	NULL,              /* FC_AUTO_HANDLE */
	NULL,              /* FC_CALLBACK_HANDLE */
	NULL,              /* FC_UNUSED1 */
	NULL,              /* FC_POINTER */
	NULL,              /* FC_ALIGNM2 */
	NULL,              /* FC_ALIGNM4 */
	NULL,              /* FC_ALIGNM8 */
	NULL,              /* FC_UNUSED2 */
	NULL,              /* FC_UNUSED3 */
	NULL,              /* FC_UNUSED4 */
	NULL,              /* FC_STRUCTPAD1 */
	NULL,              /* FC_STRUCTPAD2 */
	NULL,              /* FC_STRUCTPAD3 */
	NULL,              /* FC_STRUCTPAD4 */
	NULL,              /* FC_STRUCTPAD5 */
	NULL,              /* FC_STRUCTPAD6 */
	NULL,              /* FC_STRUCTPAD7 */
	NULL,              /* FC_STRING_SIZED */
	NULL,              /* FC_UNUSED5 */
	NULL,              /* FC_NO_REPEAT */
	NULL,              /* FC_FIXED_REPEAT */
	NULL,              /* FC_VARIABLE_REPEAT */
	NULL,              /* FC_FIXED_OFFSET */
	NULL,              /* FC_VARIABLE_OFFSET */
	NULL,              /* FC_PP */
	NULL,              /* FC_EMBEDDED_COMPLEX */
	NULL,              /* FC_IN_PARAM */
	NULL,              /* FC_IN_PARAM_BASETYPE */
	NULL,              /* FC_IN_PARAM_NO_FREE_INST */
	NULL,              /* FC_IN_OUT_PARAM */
	NULL,              /* FC_OUT_PARAM */
	NULL,              /* FC_RETURN_PARAM */
	NULL,              /* FC_RETURN_PARAM_BASETYPE */
	NULL,              /* FC_DEREFERENCE */
	NULL,              /* FC_DIV_2 */
	NULL,              /* FC_MULT_2 */
	NULL,              /* FC_ADD_1 */
	NULL,              /* FC_SUB_1 */
	NULL,              /* FC_CALLBACK */
	NULL,              /* FC_CONSTANT_IID */
	NULL,              /* FC_END */
	NULL,              /* FC_PAD */
};

#endif
