mirror of
https://github.com/reactos/reactos.git
synced 2025-04-19 12:08:55 +00:00
Support remaining basic types (float, double, small, wchar_t and handle_t).
svn path=/trunk/; revision=13733
This commit is contained in:
parent
b0588e3ebf
commit
a6d6b56960
10 changed files with 971 additions and 855 deletions
|
@ -21,7 +21,7 @@
|
|||
#define RPC_FC_DOUBLE 0x0c
|
||||
#define RPC_FC_ENUM16 0x0d
|
||||
#define RPC_FC_ENUM32 0x0e
|
||||
|
||||
#define RPC_FC_IGNORE 0x0f /* handle_t */
|
||||
#define RPC_FC_ERROR_STATUS_T 0x10
|
||||
|
||||
/* other stuff */
|
||||
|
|
11
reactos/tools/widl/ChangeLog
Normal file
11
reactos/tools/widl/ChangeLog
Normal file
|
@ -0,0 +1,11 @@
|
|||
ChangeLog
|
||||
|
||||
2005-02-24 ekohl
|
||||
include/wine/rpcfc.h
|
||||
tools/widl/client.c
|
||||
tools/widl/header.c
|
||||
tools/widl/parser.l
|
||||
tools/widl/parser.y
|
||||
tools/widl/server.c
|
||||
|
||||
Support remaining basic types (float, double, small, wchar_t and handle_t).
|
|
@ -82,38 +82,49 @@ static void write_procformatstring(type_t *iface)
|
|||
{
|
||||
case RPC_FC_BYTE:
|
||||
print_client("0x4e, /* FC_IN_PARAM_BASETYPE */\n");
|
||||
print_client("0x%02x, /* RPC_FC_BYTE */\n", var->type->type);
|
||||
print_client("0x%02x, /* FC_BYTE */\n", RPC_FC_BYTE);
|
||||
break;
|
||||
case RPC_FC_CHAR:
|
||||
print_client("0x4e, /* FC_IN_PARAM_BASETYPE */\n");
|
||||
print_client("0x%02x, /* RPC_FC_CHAR */\n", var->type->type);
|
||||
print_client("0x%02x, /* FC_CHAR */\n", RPC_FC_CHAR);
|
||||
break;
|
||||
case RPC_FC_WCHAR:
|
||||
print_client("0x4e, /* FC_IN_PARAM_BASETYPE */\n");
|
||||
print_client("0x%02x, /* RPC_FC_WCHAR */\n", var->type->type);
|
||||
print_client("0x%02x, /* FC_WCHAR */\n", RPC_FC_WCHAR);
|
||||
break;
|
||||
case RPC_FC_USHORT:
|
||||
print_client("0x4e, /* FC_IN_PARAM_BASETYPE */\n");
|
||||
print_client("0x%02x, /* RPC_FC_USHORT */\n", var->type->type);
|
||||
break;
|
||||
case RPC_FC_SHORT:
|
||||
print_client("0x4e, /* FC_IN_PARAM_BASETYPE */\n");
|
||||
print_client("0x%02x, /* RPC_FC_SHORT */\n", var->type->type);
|
||||
print_client("0x%02x, /* FC_USHORT */\n", RPC_FC_SHORT);
|
||||
break;
|
||||
case RPC_FC_ULONG:
|
||||
print_client("0x4e, /* FC_IN_PARAM_BASETYPE */\n");
|
||||
print_client("0x%02x, /* RPC_FC_ULONG */\n", var->type->type);
|
||||
break;
|
||||
case RPC_FC_LONG:
|
||||
print_client("0x4e, /* FC_IN_PARAM_BASETYPE */\n");
|
||||
print_client("0x%02x, /* RPC_FC_LONG */\n", var->type->type);
|
||||
print_client("0x%02x, /* FC_LONG */\n", RPC_FC_LONG);
|
||||
break;
|
||||
case RPC_FC_HYPER:
|
||||
print_client("0x4e, /* FC_IN_PARAM_BASETYPE */\n");
|
||||
print_client("0x%02x, /* RPC_FC_HYPER */\n", var->type->type);
|
||||
print_client("0x%02x, /* FC_HYPER */\n", RPC_FC_HYPER);
|
||||
break;
|
||||
case RPC_FC_IGNORE:
|
||||
print_client("0x4e, /* FC_IN_PARAM_BASETYPE */\n");
|
||||
print_client("0x%02x, /* FC_IGNORE */\n", RPC_FC_IGNORE);
|
||||
break;
|
||||
case RPC_FC_SMALL:
|
||||
print_client("0x4e, /* FC_IN_PARAM_BASETYPE */\n");
|
||||
print_client("0x%02x, /* FC_SMALL */\n", RPC_FC_SMALL);
|
||||
break;
|
||||
case RPC_FC_FLOAT:
|
||||
print_client("0x4e, /* FC_IN_PARAM_BASETYPE */\n");
|
||||
print_client("0x%02x, /* FC_FLOAT */\n", RPC_FC_FLOAT);
|
||||
break;
|
||||
case RPC_FC_DOUBLE:
|
||||
print_client("0x4e, /* FC_IN_PARAM_BASETYPE */\n");
|
||||
print_client("0x%02x, /* FC_DOUBLE */\n", RPC_FC_DOUBLE);
|
||||
break;
|
||||
default:
|
||||
error("Unknown/unsupported type\n");
|
||||
return;
|
||||
}
|
||||
|
||||
var = PREV_LINK(var);
|
||||
|
@ -133,38 +144,51 @@ static void write_procformatstring(type_t *iface)
|
|||
{
|
||||
case RPC_FC_BYTE:
|
||||
print_client("0x53, /* FC_RETURN_PARAM_BASETYPE */\n");
|
||||
print_client("0x%02x, /* RPC_FC_BYTE */\n", var->type->type);
|
||||
print_client("0x%02x, /* FC_BYTE */\n", var->type->type);
|
||||
break;
|
||||
case RPC_FC_CHAR:
|
||||
print_client("0x53, /* FC_RETURN_PARAM_BASETYPE */\n");
|
||||
print_client("0x%02x, /* RPC_FC_CHAR */\n", var->type->type);
|
||||
print_client("0x%02x, /* FC_CHAR */\n", var->type->type);
|
||||
break;
|
||||
case RPC_FC_WCHAR:
|
||||
print_client("0x53, /* FC_RETURN_PARAM_BASETYPE */\n");
|
||||
print_client("0x%02x, /* RPC_FC_WCHAR */\n", var->type->type);
|
||||
print_client("0x%02x, /* FC_WCHAR */\n", var->type->type);
|
||||
break;
|
||||
case RPC_FC_USHORT:
|
||||
print_client("0x53, /* FC_RETURN_PARAM_BASETYPE */\n");
|
||||
print_client("0x%02x, /* RPC_FC_USHORT */\n", var->type->type);
|
||||
print_client("0x%02x, /* FC_USHORT */\n", var->type->type);
|
||||
break;
|
||||
case RPC_FC_SHORT:
|
||||
print_client("0x53, /* FC_RETURN_PARAM_BASETYPE */\n");
|
||||
print_client("0x%02x, /* RPC_FC_SHORT */\n", var->type->type);
|
||||
print_client("0x%02x, /* FC_SHORT */\n", var->type->type);
|
||||
break;
|
||||
case RPC_FC_ULONG:
|
||||
print_client("0x53, /* FC_RETURN_PARAM_BASETYPE */\n");
|
||||
print_client("0x%02x, /* RPC_FC_ULONG */\n", var->type->type);
|
||||
print_client("0x%02x, /* FC_ULONG */\n", var->type->type);
|
||||
break;
|
||||
case RPC_FC_LONG:
|
||||
print_client("0x53, /* FC_RETURN_PARAM_BASETYPE */\n");
|
||||
print_client("0x%02x, /* RPC_FC_LONG */\n", var->type->type);
|
||||
print_client("0x%02x, /* FC_LONG */\n", var->type->type);
|
||||
break;
|
||||
case RPC_FC_HYPER:
|
||||
print_client("0x53, /* FC_RETURN_PARAM_BASETYPE */\n");
|
||||
print_client("0x%02x, /* RPC_FC_HYPER */\n", var->type->type);
|
||||
print_client("0x%02x, /* FC_HYPER */\n", var->type->type);
|
||||
break;
|
||||
case RPC_FC_SMALL:
|
||||
print_client("0x53, /* FC_RETURN_PARAM_BASETYPE */\n");
|
||||
print_client("0x%02x, /* FC_SMALL */\n", RPC_FC_SMALL);
|
||||
break;
|
||||
case RPC_FC_FLOAT:
|
||||
print_client("0x53, /* FC_RETURN_PARAM_BASETYPE */\n");
|
||||
print_client("0x%02x, /* FC_FLOAT */\n", RPC_FC_FLOAT);
|
||||
break;
|
||||
case RPC_FC_DOUBLE:
|
||||
print_client("0x53, /* FC_RETURN_PARAM_BASETYPE */\n");
|
||||
print_client("0x%02x, /* FC_DOUBLE */\n", RPC_FC_DOUBLE);
|
||||
break;
|
||||
default:
|
||||
error("Unknown/unsupported type\n");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -220,6 +244,7 @@ static void print_message_buffer_size(func_t *func)
|
|||
{
|
||||
case RPC_FC_BYTE:
|
||||
case RPC_FC_CHAR:
|
||||
case RPC_FC_SMALL:
|
||||
size = 1;
|
||||
alignment = 0;
|
||||
break;
|
||||
|
@ -234,26 +259,42 @@ static void print_message_buffer_size(func_t *func)
|
|||
|
||||
case RPC_FC_ULONG:
|
||||
case RPC_FC_LONG:
|
||||
case RPC_FC_FLOAT:
|
||||
size = 4;
|
||||
if (last_size != 0 && last_size < 4)
|
||||
alignment += (4 - last_size);
|
||||
break;
|
||||
|
||||
case RPC_FC_HYPER:
|
||||
case RPC_FC_DOUBLE:
|
||||
size = 8;
|
||||
if (last_size != 0 && last_size < 4)
|
||||
alignment += (4 - last_size);
|
||||
break;
|
||||
|
||||
case RPC_FC_IGNORE:
|
||||
size = 0;
|
||||
break;
|
||||
|
||||
default:
|
||||
error("Unknown/unsupported type!");
|
||||
}
|
||||
|
||||
if (last_size != 0)
|
||||
fprintf(client, " +");
|
||||
fprintf(client, " %uU", size + alignment);
|
||||
if (size == 0)
|
||||
{
|
||||
if (last_size != 0)
|
||||
fprintf(client, " +");
|
||||
fprintf(client, " 0U");
|
||||
}
|
||||
else
|
||||
{
|
||||
if (last_size != 0)
|
||||
fprintf(client, " +");
|
||||
fprintf(client, " %uU", size + alignment);
|
||||
|
||||
last_size = size;
|
||||
}
|
||||
|
||||
last_size = size;
|
||||
|
||||
var = PREV_LINK(var);
|
||||
}
|
||||
|
@ -279,6 +320,7 @@ static void marshall_arguments(func_t *func)
|
|||
{
|
||||
case RPC_FC_BYTE:
|
||||
case RPC_FC_CHAR:
|
||||
case RPC_FC_SMALL:
|
||||
size = 1;
|
||||
alignment = 0;
|
||||
break;
|
||||
|
@ -293,32 +335,41 @@ static void marshall_arguments(func_t *func)
|
|||
|
||||
case RPC_FC_ULONG:
|
||||
case RPC_FC_LONG:
|
||||
case RPC_FC_FLOAT:
|
||||
size = 4;
|
||||
if (last_size != 0 && last_size < 4)
|
||||
alignment = (4 - last_size);
|
||||
break;
|
||||
|
||||
case RPC_FC_HYPER:
|
||||
case RPC_FC_DOUBLE:
|
||||
size = 8;
|
||||
if (last_size != 0 && last_size < 4)
|
||||
alignment = (4 - last_size);
|
||||
break;
|
||||
|
||||
case RPC_FC_IGNORE:
|
||||
size = 0;
|
||||
break;
|
||||
|
||||
default:
|
||||
error("Unknown/unsupported type!");
|
||||
}
|
||||
|
||||
if (alignment != 0)
|
||||
print_client("_StubMsg.Buffer += %u;\n", alignment);
|
||||
if (size != 0)
|
||||
{
|
||||
if (alignment != 0)
|
||||
print_client("_StubMsg.Buffer += %u;\n", alignment);
|
||||
|
||||
print_client("*((");
|
||||
write_type(client, var->type, var, var->tname);
|
||||
fprintf(client, " __RPC_FAR*)_StubMsg.Buffer)++ = ");
|
||||
write_name(client, var);
|
||||
fprintf(client, ";\n");
|
||||
fprintf(client, "\n");
|
||||
print_client("*((");
|
||||
write_type(client, var->type, var, var->tname);
|
||||
fprintf(client, " __RPC_FAR*)_StubMsg.Buffer)++ = ");
|
||||
write_name(client, var);
|
||||
fprintf(client, ";\n");
|
||||
fprintf(client, "\n");
|
||||
|
||||
last_size = size;
|
||||
last_size = size;
|
||||
}
|
||||
|
||||
var = PREV_LINK(var);
|
||||
}
|
||||
|
@ -328,6 +379,7 @@ static void marshall_arguments(func_t *func)
|
|||
static void write_function_stubs(type_t *iface)
|
||||
{
|
||||
char *implicit_handle = get_attrp(iface->attrs, ATTR_IMPLICIT_HANDLE);
|
||||
int explitit_handle = is_attr(iface->attrs, ATTR_IMPLICIT_HANDLE);
|
||||
func_t *func = iface->funcs;
|
||||
var_t* var;
|
||||
int method_count = 0;
|
||||
|
@ -343,10 +395,7 @@ static void write_function_stubs(type_t *iface)
|
|||
write_name(client, def);
|
||||
fprintf(client, "(\n");
|
||||
indent++;
|
||||
if (func->args)
|
||||
write_args(client, func->args, iface->name, 0, TRUE);
|
||||
else
|
||||
print_client("void");
|
||||
write_args(client, func->args, iface->name, 0, TRUE);
|
||||
fprintf(client, ")\n");
|
||||
indent--;
|
||||
|
||||
|
|
|
@ -245,7 +245,7 @@ void write_type(FILE *h, type_t *t, var_t *v, char *n)
|
|||
if (t->ref) fprintf(h, t->ref->name);
|
||||
else fprintf(h, "error_status_t");
|
||||
break;
|
||||
case RPC_FC_BIND_PRIMITIVE:
|
||||
case RPC_FC_IGNORE:
|
||||
if (t->ref) fprintf(h, t->ref->name);
|
||||
else fprintf(h, "handle_t");
|
||||
break;
|
||||
|
@ -511,6 +511,10 @@ void write_args(FILE *h, var_t *arg, char *name, int method, int do_indent)
|
|||
fprintf(h, "%s* This", name);
|
||||
count++;
|
||||
}
|
||||
if (arg == NULL && method == 0) {
|
||||
fprintf(h, "void");
|
||||
return;
|
||||
}
|
||||
while (arg) {
|
||||
if (count) {
|
||||
if (do_indent)
|
||||
|
@ -668,10 +672,7 @@ static void write_function_proto(type_t *iface)
|
|||
fprintf(header, " ");
|
||||
write_name(header, def);
|
||||
fprintf(header, "(\n");
|
||||
if (cur->args)
|
||||
write_args(header, cur->args, iface->name, 0, TRUE);
|
||||
else
|
||||
fprintf(header, " void");
|
||||
write_args(header, cur->args, iface->name, 0, TRUE);
|
||||
fprintf(header, ");\n");
|
||||
|
||||
cur = PREV_LINK(cur);
|
||||
|
|
|
@ -4568,6 +4568,7 @@ static struct keyword {
|
|||
{"size_is", tSIZEIS},
|
||||
{"sizeof", tSIZEOF},
|
||||
/* ... */
|
||||
{"small", tSMALL},
|
||||
{"source", tSOURCE},
|
||||
/* ... */
|
||||
{"string", tSTRING},
|
||||
|
|
|
@ -288,6 +288,7 @@ static struct keyword {
|
|||
{"size_is", tSIZEIS},
|
||||
{"sizeof", tSIZEOF},
|
||||
/* ... */
|
||||
{"small", tSMALL},
|
||||
{"source", tSOURCE},
|
||||
/* ... */
|
||||
{"string", tSTRING},
|
||||
|
|
|
@ -172,6 +172,7 @@ static type_t std_uhyper = { "MIDL_uhyper" };
|
|||
%token tSHORT
|
||||
%token tSIGNED
|
||||
%token tSIZEIS tSIZEOF
|
||||
%token tSMALL
|
||||
%token tSOURCE
|
||||
%token tSTDCALL
|
||||
%token tSTRING tSTRUCT
|
||||
|
@ -553,7 +554,7 @@ base_type: tBYTE { $$ = make_type(RPC_FC_BYTE, NULL); }
|
|||
| tSIGNED int_std { $$ = $2; $$->sign = 1; }
|
||||
| tUNSIGNED int_std { $$ = $2; $$->sign = -1;
|
||||
switch ($$->type) {
|
||||
case RPC_FC_CHAR: $$->type = RPC_FC_BYTE; $$->sign = 0; break;
|
||||
case RPC_FC_CHAR: break;
|
||||
case RPC_FC_SMALL: $$->type = RPC_FC_USMALL; break;
|
||||
case RPC_FC_SHORT: $$->type = RPC_FC_USHORT; break;
|
||||
case RPC_FC_LONG: $$->type = RPC_FC_ULONG; break;
|
||||
|
@ -565,9 +566,9 @@ base_type: tBYTE { $$ = make_type(RPC_FC_BYTE, NULL); }
|
|||
}
|
||||
| tFLOAT { $$ = make_type(RPC_FC_FLOAT, NULL); }
|
||||
| tDOUBLE { $$ = make_type(RPC_FC_DOUBLE, NULL); }
|
||||
| tBOOLEAN { $$ = make_type(RPC_FC_BYTE, &std_bool); /* ? */ }
|
||||
| tBOOLEAN { $$ = make_type(RPC_FC_SMALL, &std_bool); }
|
||||
| tERRORSTATUST { $$ = make_type(RPC_FC_ERROR_STATUS_T, NULL); }
|
||||
| tHANDLET { $$ = make_type(RPC_FC_BIND_PRIMITIVE, NULL); /* ? */ }
|
||||
| tHANDLET { $$ = make_type(RPC_FC_IGNORE, NULL); }
|
||||
;
|
||||
|
||||
m_int:
|
||||
|
@ -575,6 +576,7 @@ m_int:
|
|||
;
|
||||
|
||||
int_std: tINT { $$ = make_type(RPC_FC_LONG, &std_int); } /* win32 only */
|
||||
| tSMALL m_int { $$ = make_type(RPC_FC_SMALL, NULL); }
|
||||
| tSHORT m_int { $$ = make_type(RPC_FC_SHORT, NULL); }
|
||||
| tLONG m_int { $$ = make_type(RPC_FC_LONG, NULL); }
|
||||
| tHYPER m_int { $$ = make_type(RPC_FC_HYPER, NULL); }
|
||||
|
|
|
@ -87,35 +87,51 @@ static void write_procformatstring(type_t *iface)
|
|||
{
|
||||
case RPC_FC_BYTE:
|
||||
print_server("0x4e, /* FC_IN_PARAM_BASETYPE */\n");
|
||||
print_server("0x%02x, /* RPC_FC_BYTE */\n", var->type->type);
|
||||
print_server("0x%02x, /* FC_BYTE */\n", var->type->type);
|
||||
break;
|
||||
case RPC_FC_CHAR:
|
||||
print_server("0x4e, /* FC_IN_PARAM_BASETYPE */\n");
|
||||
print_server("0x%02x, /* RPC_FC_CHAR */\n", var->type->type);
|
||||
print_server("0x%02x, /* FC_CHAR */\n", var->type->type);
|
||||
break;
|
||||
case RPC_FC_WCHAR:
|
||||
print_server("0x4e, /* FC_IN_PARAM_BASETYPE */\n");
|
||||
print_server("0x%02x, /* RPC_FC_WCHAR */\n", var->type->type);
|
||||
print_server("0x%02x, /* FC_WCHAR */\n", var->type->type);
|
||||
break;
|
||||
case RPC_FC_USHORT:
|
||||
print_server("0x4e, /* FC_IN_PARAM_BASETYPE */\n");
|
||||
print_server("0x%02x, /* RPC_FC_USHORT */\n", var->type->type);
|
||||
print_server("0x%02x, /* FC_USHORT */\n", var->type->type);
|
||||
break;
|
||||
case RPC_FC_SHORT:
|
||||
print_server("0x4e, /* FC_IN_PARAM_BASETYPE */\n");
|
||||
print_server("0x%02x, /* RPC_FC_SHORT */\n", var->type->type);
|
||||
print_server("0x%02x, /* FC_SHORT */\n", var->type->type);
|
||||
break;
|
||||
case RPC_FC_ULONG:
|
||||
print_server("0x4e, /* FC_IN_PARAM_BASETYPE */\n");
|
||||
print_server("0x%02x, /* RPC_FC_ULONG */\n", var->type->type);
|
||||
print_server("0x%02x, /* FC_ULONG */\n", var->type->type);
|
||||
break;
|
||||
case RPC_FC_LONG:
|
||||
print_server("0x4e, /* FC_IN_PARAM_BASETYPE */\n");
|
||||
print_server("0x%02x, /* RPC_FC_LONG */\n", var->type->type);
|
||||
print_server("0x%02x, /* FC_LONG */\n", var->type->type);
|
||||
break;
|
||||
case RPC_FC_HYPER:
|
||||
print_server("0x4e, /* FC_IN_PARAM_BASETYPE */\n");
|
||||
print_server("0x%02x, /* RPC_FC_HYPER */\n", var->type->type);
|
||||
print_server("0x%02x, /* FC_HYPER */\n", var->type->type);
|
||||
break;
|
||||
case RPC_FC_IGNORE:
|
||||
print_server("0x4e, /* FC_IN_PARAM_BASETYPE */\n");
|
||||
print_server("0x%02x, /* FC_IGNORE */\n", var->type->type);
|
||||
break;
|
||||
case RPC_FC_SMALL:
|
||||
print_server("0x4e, /* FC_IN_PARAM_BASETYPE */\n");
|
||||
print_server("0x%02x, /* FC_SMALL */\n", RPC_FC_SMALL);
|
||||
break;
|
||||
case RPC_FC_FLOAT:
|
||||
print_server("0x4e, /* FC_IN_PARAM_BASETYPE */\n");
|
||||
print_server("0x%02x, /* FC_FLOAT */\n", RPC_FC_FLOAT);
|
||||
break;
|
||||
case RPC_FC_DOUBLE:
|
||||
print_server("0x4e, /* FC_IN_PARAM_BASETYPE */\n");
|
||||
print_server("0x%02x, /* FC_DOUBLE */\n", RPC_FC_DOUBLE);
|
||||
break;
|
||||
default:
|
||||
error("Unknown/unsupported type\n");
|
||||
|
@ -138,35 +154,47 @@ static void write_procformatstring(type_t *iface)
|
|||
{
|
||||
case RPC_FC_BYTE:
|
||||
print_server("0x53, /* FC_RETURN_PARAM_BASETYPE */\n");
|
||||
print_server("0x%02x, /* RPC_FC_BYTE */\n", var->type->type);
|
||||
print_server("0x%02x, /* FC_BYTE */\n", var->type->type);
|
||||
break;
|
||||
case RPC_FC_CHAR:
|
||||
print_server("0x53, /* FC_RETURN_PARAM_BASETYPE */\n");
|
||||
print_server("0x%02x, /* RPC_FC_CHAR */\n", var->type->type);
|
||||
print_server("0x%02x, /* FC_CHAR */\n", var->type->type);
|
||||
break;
|
||||
case RPC_FC_WCHAR:
|
||||
print_server("0x53, /* FC_RETURN_PARAM_BASETYPE */\n");
|
||||
print_server("0x%02x, /* RPC_FC_WCHAR */\n", var->type->type);
|
||||
print_server("0x%02x, /* FC_WCHAR */\n", var->type->type);
|
||||
break;
|
||||
case RPC_FC_USHORT:
|
||||
print_server("0x53, /* FC_RETURN_PARAM_BASETYPE */\n");
|
||||
print_server("0x%02x, /* RPC_FC_USHORT */\n", var->type->type);
|
||||
print_server("0x%02x, /* FC_USHORT */\n", var->type->type);
|
||||
break;
|
||||
case RPC_FC_SHORT:
|
||||
print_server("0x53, /* FC_RETURN_PARAM_BASETYPE */\n");
|
||||
print_server("0x%02x, /* RPC_FC_SHORT */\n", var->type->type);
|
||||
print_server("0x%02x, /* FC_SHORT */\n", var->type->type);
|
||||
break;
|
||||
case RPC_FC_ULONG:
|
||||
print_server("0x53, /* FC_RETURN_PARAM_BASETYPE */\n");
|
||||
print_server("0x%02x, /* RPC_FC_ULONG */\n", var->type->type);
|
||||
print_server("0x%02x, /* FC_ULONG */\n", var->type->type);
|
||||
break;
|
||||
case RPC_FC_LONG:
|
||||
print_server("0x53, /* FC_RETURN_PARAM_BASETYPE */\n");
|
||||
print_server("0x%02x, /* RPC_FC_LONG */\n", var->type->type);
|
||||
print_server("0x%02x, /* FC_LONG */\n", var->type->type);
|
||||
break;
|
||||
case RPC_FC_HYPER:
|
||||
print_server("0x53, /* FC_RETURN_PARAM_BASETYPE */\n");
|
||||
print_server("0x%02x, /* RPC_FC_HYPER */\n", var->type->type);
|
||||
print_server("0x%02x, /* FC_HYPER */\n", var->type->type);
|
||||
break;
|
||||
case RPC_FC_SMALL:
|
||||
print_server("0x53, /* FC_RETURN_PARAM_BASETYPE */\n");
|
||||
print_server("0x%02x, /* FC_SMALL */\n", RPC_FC_SMALL);
|
||||
break;
|
||||
case RPC_FC_FLOAT:
|
||||
print_server("0x53, /* FC_RETURN_PARAM_BASETYPE */\n");
|
||||
print_server("0x%02x, /* FC_FLOAT */\n", RPC_FC_FLOAT);
|
||||
break;
|
||||
case RPC_FC_DOUBLE:
|
||||
print_server("0x53, /* FC_RETURN_PARAM_BASETYPE */\n");
|
||||
print_server("0x%02x, /* FC_DOUBLE */\n", RPC_FC_DOUBLE);
|
||||
break;
|
||||
default:
|
||||
error("Unknown/unsupported type\n");
|
||||
|
@ -208,17 +236,23 @@ unsigned int get_required_buffer_size(type_t *type)
|
|||
switch(type->type)
|
||||
{
|
||||
case RPC_FC_BYTE:
|
||||
case RPC_FC_SMALL:
|
||||
case RPC_FC_CHAR:
|
||||
case RPC_FC_WCHAR:
|
||||
case RPC_FC_USHORT:
|
||||
case RPC_FC_SHORT:
|
||||
case RPC_FC_ULONG:
|
||||
case RPC_FC_LONG:
|
||||
case RPC_FC_FLOAT:
|
||||
return 4;
|
||||
|
||||
case RPC_FC_HYPER:
|
||||
case RPC_FC_HYPER:
|
||||
case RPC_FC_DOUBLE:
|
||||
return 8;
|
||||
|
||||
case RPC_FC_IGNORE:
|
||||
return 0;
|
||||
|
||||
default:
|
||||
error("Unknown/unsupported type: %s\n", type->name);
|
||||
}
|
||||
|
@ -244,6 +278,7 @@ static void unmarshall_arguments(func_t *func)
|
|||
{
|
||||
case RPC_FC_BYTE:
|
||||
case RPC_FC_CHAR:
|
||||
case RPC_FC_SMALL:
|
||||
size = 1;
|
||||
alignment = 0;
|
||||
break;
|
||||
|
@ -258,32 +293,41 @@ static void unmarshall_arguments(func_t *func)
|
|||
|
||||
case RPC_FC_ULONG:
|
||||
case RPC_FC_LONG:
|
||||
case RPC_FC_FLOAT:
|
||||
size = 4;
|
||||
if (last_size != 0 && last_size < 4)
|
||||
alignment = (4 - last_size);
|
||||
break;
|
||||
|
||||
case RPC_FC_HYPER:
|
||||
case RPC_FC_DOUBLE:
|
||||
size = 8;
|
||||
if (last_size != 0 && last_size < 4)
|
||||
alignment = (4 - last_size);
|
||||
break;
|
||||
|
||||
case RPC_FC_IGNORE:
|
||||
size = 0;
|
||||
break;
|
||||
|
||||
default:
|
||||
error("Unknown/unsupported type!");
|
||||
}
|
||||
|
||||
if (alignment != 0)
|
||||
print_server("_StubMsg.Buffer += %u;\n", alignment);
|
||||
if (size != 0)
|
||||
{
|
||||
if (alignment != 0)
|
||||
print_server("_StubMsg.Buffer += %u;\n", alignment);
|
||||
|
||||
print_server("");
|
||||
write_name(server, var);
|
||||
fprintf(server, " = *((");
|
||||
write_type(server, var->type, var, var->tname);
|
||||
fprintf(server, " __RPC_FAR*)_StubMsg.Buffer)++;\n");
|
||||
fprintf(server, "\n");
|
||||
print_server("");
|
||||
write_name(server, var);
|
||||
fprintf(server, " = *((");
|
||||
write_type(server, var->type, var, var->tname);
|
||||
fprintf(server, " __RPC_FAR*)_StubMsg.Buffer)++;\n");
|
||||
fprintf(server, "\n");
|
||||
|
||||
last_size = size;
|
||||
last_size = size;
|
||||
}
|
||||
|
||||
var = PREV_LINK(var);
|
||||
}
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -107,30 +107,31 @@ typedef union {
|
|||
#define tSIGNED 350
|
||||
#define tSIZEIS 351
|
||||
#define tSIZEOF 352
|
||||
#define tSOURCE 353
|
||||
#define tSTDCALL 354
|
||||
#define tSTRING 355
|
||||
#define tSTRUCT 356
|
||||
#define tSWITCH 357
|
||||
#define tSWITCHIS 358
|
||||
#define tSWITCHTYPE 359
|
||||
#define tTRANSMITAS 360
|
||||
#define tTYPEDEF 361
|
||||
#define tUNION 362
|
||||
#define tUNIQUE 363
|
||||
#define tUNSIGNED 364
|
||||
#define tUUID 365
|
||||
#define tV1ENUM 366
|
||||
#define tVARARG 367
|
||||
#define tVERSION 368
|
||||
#define tVOID 369
|
||||
#define tWCHAR 370
|
||||
#define tWIREMARSHAL 371
|
||||
#define tPOINTERTYPE 372
|
||||
#define COND 373
|
||||
#define CAST 374
|
||||
#define PPTR 375
|
||||
#define NEG 376
|
||||
#define tSMALL 353
|
||||
#define tSOURCE 354
|
||||
#define tSTDCALL 355
|
||||
#define tSTRING 356
|
||||
#define tSTRUCT 357
|
||||
#define tSWITCH 358
|
||||
#define tSWITCHIS 359
|
||||
#define tSWITCHTYPE 360
|
||||
#define tTRANSMITAS 361
|
||||
#define tTYPEDEF 362
|
||||
#define tUNION 363
|
||||
#define tUNIQUE 364
|
||||
#define tUNSIGNED 365
|
||||
#define tUUID 366
|
||||
#define tV1ENUM 367
|
||||
#define tVARARG 368
|
||||
#define tVERSION 369
|
||||
#define tVOID 370
|
||||
#define tWCHAR 371
|
||||
#define tWIREMARSHAL 372
|
||||
#define tPOINTERTYPE 373
|
||||
#define COND 374
|
||||
#define CAST 375
|
||||
#define PPTR 376
|
||||
#define NEG 377
|
||||
|
||||
|
||||
extern YYSTYPE yylval;
|
||||
|
|
Loading…
Reference in a new issue