mirror of
https://github.com/reactos/reactos.git
synced 2025-04-21 04:37:15 +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_DOUBLE 0x0c
|
||||||
#define RPC_FC_ENUM16 0x0d
|
#define RPC_FC_ENUM16 0x0d
|
||||||
#define RPC_FC_ENUM32 0x0e
|
#define RPC_FC_ENUM32 0x0e
|
||||||
|
#define RPC_FC_IGNORE 0x0f /* handle_t */
|
||||||
#define RPC_FC_ERROR_STATUS_T 0x10
|
#define RPC_FC_ERROR_STATUS_T 0x10
|
||||||
|
|
||||||
/* other stuff */
|
/* 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:
|
case RPC_FC_BYTE:
|
||||||
print_client("0x4e, /* FC_IN_PARAM_BASETYPE */\n");
|
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;
|
break;
|
||||||
case RPC_FC_CHAR:
|
case RPC_FC_CHAR:
|
||||||
print_client("0x4e, /* FC_IN_PARAM_BASETYPE */\n");
|
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;
|
break;
|
||||||
case RPC_FC_WCHAR:
|
case RPC_FC_WCHAR:
|
||||||
print_client("0x4e, /* FC_IN_PARAM_BASETYPE */\n");
|
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;
|
break;
|
||||||
case RPC_FC_USHORT:
|
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:
|
case RPC_FC_SHORT:
|
||||||
print_client("0x4e, /* FC_IN_PARAM_BASETYPE */\n");
|
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;
|
break;
|
||||||
case RPC_FC_ULONG:
|
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:
|
case RPC_FC_LONG:
|
||||||
print_client("0x4e, /* FC_IN_PARAM_BASETYPE */\n");
|
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;
|
break;
|
||||||
case RPC_FC_HYPER:
|
case RPC_FC_HYPER:
|
||||||
print_client("0x4e, /* FC_IN_PARAM_BASETYPE */\n");
|
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;
|
break;
|
||||||
default:
|
default:
|
||||||
error("Unknown/unsupported type\n");
|
error("Unknown/unsupported type\n");
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var = PREV_LINK(var);
|
var = PREV_LINK(var);
|
||||||
|
@ -133,38 +144,51 @@ static void write_procformatstring(type_t *iface)
|
||||||
{
|
{
|
||||||
case RPC_FC_BYTE:
|
case RPC_FC_BYTE:
|
||||||
print_client("0x53, /* FC_RETURN_PARAM_BASETYPE */\n");
|
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;
|
break;
|
||||||
case RPC_FC_CHAR:
|
case RPC_FC_CHAR:
|
||||||
print_client("0x53, /* FC_RETURN_PARAM_BASETYPE */\n");
|
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;
|
break;
|
||||||
case RPC_FC_WCHAR:
|
case RPC_FC_WCHAR:
|
||||||
print_client("0x53, /* FC_RETURN_PARAM_BASETYPE */\n");
|
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;
|
break;
|
||||||
case RPC_FC_USHORT:
|
case RPC_FC_USHORT:
|
||||||
print_client("0x53, /* FC_RETURN_PARAM_BASETYPE */\n");
|
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;
|
break;
|
||||||
case RPC_FC_SHORT:
|
case RPC_FC_SHORT:
|
||||||
print_client("0x53, /* FC_RETURN_PARAM_BASETYPE */\n");
|
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;
|
break;
|
||||||
case RPC_FC_ULONG:
|
case RPC_FC_ULONG:
|
||||||
print_client("0x53, /* FC_RETURN_PARAM_BASETYPE */\n");
|
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;
|
break;
|
||||||
case RPC_FC_LONG:
|
case RPC_FC_LONG:
|
||||||
print_client("0x53, /* FC_RETURN_PARAM_BASETYPE */\n");
|
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;
|
break;
|
||||||
case RPC_FC_HYPER:
|
case RPC_FC_HYPER:
|
||||||
print_client("0x53, /* FC_RETURN_PARAM_BASETYPE */\n");
|
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;
|
break;
|
||||||
default:
|
default:
|
||||||
error("Unknown/unsupported type\n");
|
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_BYTE:
|
||||||
case RPC_FC_CHAR:
|
case RPC_FC_CHAR:
|
||||||
|
case RPC_FC_SMALL:
|
||||||
size = 1;
|
size = 1;
|
||||||
alignment = 0;
|
alignment = 0;
|
||||||
break;
|
break;
|
||||||
|
@ -234,26 +259,42 @@ static void print_message_buffer_size(func_t *func)
|
||||||
|
|
||||||
case RPC_FC_ULONG:
|
case RPC_FC_ULONG:
|
||||||
case RPC_FC_LONG:
|
case RPC_FC_LONG:
|
||||||
|
case RPC_FC_FLOAT:
|
||||||
size = 4;
|
size = 4;
|
||||||
if (last_size != 0 && last_size < 4)
|
if (last_size != 0 && last_size < 4)
|
||||||
alignment += (4 - last_size);
|
alignment += (4 - last_size);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case RPC_FC_HYPER:
|
case RPC_FC_HYPER:
|
||||||
|
case RPC_FC_DOUBLE:
|
||||||
size = 8;
|
size = 8;
|
||||||
if (last_size != 0 && last_size < 4)
|
if (last_size != 0 && last_size < 4)
|
||||||
alignment += (4 - last_size);
|
alignment += (4 - last_size);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case RPC_FC_IGNORE:
|
||||||
|
size = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
error("Unknown/unsupported type!");
|
error("Unknown/unsupported type!");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (size == 0)
|
||||||
|
{
|
||||||
|
if (last_size != 0)
|
||||||
|
fprintf(client, " +");
|
||||||
|
fprintf(client, " 0U");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
if (last_size != 0)
|
if (last_size != 0)
|
||||||
fprintf(client, " +");
|
fprintf(client, " +");
|
||||||
fprintf(client, " %uU", size + alignment);
|
fprintf(client, " %uU", size + alignment);
|
||||||
|
|
||||||
last_size = size;
|
last_size = size;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
var = PREV_LINK(var);
|
var = PREV_LINK(var);
|
||||||
}
|
}
|
||||||
|
@ -279,6 +320,7 @@ static void marshall_arguments(func_t *func)
|
||||||
{
|
{
|
||||||
case RPC_FC_BYTE:
|
case RPC_FC_BYTE:
|
||||||
case RPC_FC_CHAR:
|
case RPC_FC_CHAR:
|
||||||
|
case RPC_FC_SMALL:
|
||||||
size = 1;
|
size = 1;
|
||||||
alignment = 0;
|
alignment = 0;
|
||||||
break;
|
break;
|
||||||
|
@ -293,21 +335,29 @@ static void marshall_arguments(func_t *func)
|
||||||
|
|
||||||
case RPC_FC_ULONG:
|
case RPC_FC_ULONG:
|
||||||
case RPC_FC_LONG:
|
case RPC_FC_LONG:
|
||||||
|
case RPC_FC_FLOAT:
|
||||||
size = 4;
|
size = 4;
|
||||||
if (last_size != 0 && last_size < 4)
|
if (last_size != 0 && last_size < 4)
|
||||||
alignment = (4 - last_size);
|
alignment = (4 - last_size);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case RPC_FC_HYPER:
|
case RPC_FC_HYPER:
|
||||||
|
case RPC_FC_DOUBLE:
|
||||||
size = 8;
|
size = 8;
|
||||||
if (last_size != 0 && last_size < 4)
|
if (last_size != 0 && last_size < 4)
|
||||||
alignment = (4 - last_size);
|
alignment = (4 - last_size);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case RPC_FC_IGNORE:
|
||||||
|
size = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
error("Unknown/unsupported type!");
|
error("Unknown/unsupported type!");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (size != 0)
|
||||||
|
{
|
||||||
if (alignment != 0)
|
if (alignment != 0)
|
||||||
print_client("_StubMsg.Buffer += %u;\n", alignment);
|
print_client("_StubMsg.Buffer += %u;\n", alignment);
|
||||||
|
|
||||||
|
@ -319,6 +369,7 @@ static void marshall_arguments(func_t *func)
|
||||||
fprintf(client, "\n");
|
fprintf(client, "\n");
|
||||||
|
|
||||||
last_size = size;
|
last_size = size;
|
||||||
|
}
|
||||||
|
|
||||||
var = PREV_LINK(var);
|
var = PREV_LINK(var);
|
||||||
}
|
}
|
||||||
|
@ -328,6 +379,7 @@ static void marshall_arguments(func_t *func)
|
||||||
static void write_function_stubs(type_t *iface)
|
static void write_function_stubs(type_t *iface)
|
||||||
{
|
{
|
||||||
char *implicit_handle = get_attrp(iface->attrs, ATTR_IMPLICIT_HANDLE);
|
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;
|
func_t *func = iface->funcs;
|
||||||
var_t* var;
|
var_t* var;
|
||||||
int method_count = 0;
|
int method_count = 0;
|
||||||
|
@ -343,10 +395,7 @@ static void write_function_stubs(type_t *iface)
|
||||||
write_name(client, def);
|
write_name(client, def);
|
||||||
fprintf(client, "(\n");
|
fprintf(client, "(\n");
|
||||||
indent++;
|
indent++;
|
||||||
if (func->args)
|
|
||||||
write_args(client, func->args, iface->name, 0, TRUE);
|
write_args(client, func->args, iface->name, 0, TRUE);
|
||||||
else
|
|
||||||
print_client("void");
|
|
||||||
fprintf(client, ")\n");
|
fprintf(client, ")\n");
|
||||||
indent--;
|
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);
|
if (t->ref) fprintf(h, t->ref->name);
|
||||||
else fprintf(h, "error_status_t");
|
else fprintf(h, "error_status_t");
|
||||||
break;
|
break;
|
||||||
case RPC_FC_BIND_PRIMITIVE:
|
case RPC_FC_IGNORE:
|
||||||
if (t->ref) fprintf(h, t->ref->name);
|
if (t->ref) fprintf(h, t->ref->name);
|
||||||
else fprintf(h, "handle_t");
|
else fprintf(h, "handle_t");
|
||||||
break;
|
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);
|
fprintf(h, "%s* This", name);
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
|
if (arg == NULL && method == 0) {
|
||||||
|
fprintf(h, "void");
|
||||||
|
return;
|
||||||
|
}
|
||||||
while (arg) {
|
while (arg) {
|
||||||
if (count) {
|
if (count) {
|
||||||
if (do_indent)
|
if (do_indent)
|
||||||
|
@ -668,10 +672,7 @@ static void write_function_proto(type_t *iface)
|
||||||
fprintf(header, " ");
|
fprintf(header, " ");
|
||||||
write_name(header, def);
|
write_name(header, def);
|
||||||
fprintf(header, "(\n");
|
fprintf(header, "(\n");
|
||||||
if (cur->args)
|
|
||||||
write_args(header, cur->args, iface->name, 0, TRUE);
|
write_args(header, cur->args, iface->name, 0, TRUE);
|
||||||
else
|
|
||||||
fprintf(header, " void");
|
|
||||||
fprintf(header, ");\n");
|
fprintf(header, ");\n");
|
||||||
|
|
||||||
cur = PREV_LINK(cur);
|
cur = PREV_LINK(cur);
|
||||||
|
|
|
@ -4568,6 +4568,7 @@ static struct keyword {
|
||||||
{"size_is", tSIZEIS},
|
{"size_is", tSIZEIS},
|
||||||
{"sizeof", tSIZEOF},
|
{"sizeof", tSIZEOF},
|
||||||
/* ... */
|
/* ... */
|
||||||
|
{"small", tSMALL},
|
||||||
{"source", tSOURCE},
|
{"source", tSOURCE},
|
||||||
/* ... */
|
/* ... */
|
||||||
{"string", tSTRING},
|
{"string", tSTRING},
|
||||||
|
|
|
@ -288,6 +288,7 @@ static struct keyword {
|
||||||
{"size_is", tSIZEIS},
|
{"size_is", tSIZEIS},
|
||||||
{"sizeof", tSIZEOF},
|
{"sizeof", tSIZEOF},
|
||||||
/* ... */
|
/* ... */
|
||||||
|
{"small", tSMALL},
|
||||||
{"source", tSOURCE},
|
{"source", tSOURCE},
|
||||||
/* ... */
|
/* ... */
|
||||||
{"string", tSTRING},
|
{"string", tSTRING},
|
||||||
|
|
|
@ -172,6 +172,7 @@ static type_t std_uhyper = { "MIDL_uhyper" };
|
||||||
%token tSHORT
|
%token tSHORT
|
||||||
%token tSIGNED
|
%token tSIGNED
|
||||||
%token tSIZEIS tSIZEOF
|
%token tSIZEIS tSIZEOF
|
||||||
|
%token tSMALL
|
||||||
%token tSOURCE
|
%token tSOURCE
|
||||||
%token tSTDCALL
|
%token tSTDCALL
|
||||||
%token tSTRING tSTRUCT
|
%token tSTRING tSTRUCT
|
||||||
|
@ -553,7 +554,7 @@ base_type: tBYTE { $$ = make_type(RPC_FC_BYTE, NULL); }
|
||||||
| tSIGNED int_std { $$ = $2; $$->sign = 1; }
|
| tSIGNED int_std { $$ = $2; $$->sign = 1; }
|
||||||
| tUNSIGNED int_std { $$ = $2; $$->sign = -1;
|
| tUNSIGNED int_std { $$ = $2; $$->sign = -1;
|
||||||
switch ($$->type) {
|
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_SMALL: $$->type = RPC_FC_USMALL; break;
|
||||||
case RPC_FC_SHORT: $$->type = RPC_FC_USHORT; break;
|
case RPC_FC_SHORT: $$->type = RPC_FC_USHORT; break;
|
||||||
case RPC_FC_LONG: $$->type = RPC_FC_ULONG; 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); }
|
| tFLOAT { $$ = make_type(RPC_FC_FLOAT, NULL); }
|
||||||
| tDOUBLE { $$ = make_type(RPC_FC_DOUBLE, 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); }
|
| 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:
|
m_int:
|
||||||
|
@ -575,6 +576,7 @@ m_int:
|
||||||
;
|
;
|
||||||
|
|
||||||
int_std: tINT { $$ = make_type(RPC_FC_LONG, &std_int); } /* win32 only */
|
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); }
|
| tSHORT m_int { $$ = make_type(RPC_FC_SHORT, NULL); }
|
||||||
| tLONG m_int { $$ = make_type(RPC_FC_LONG, NULL); }
|
| tLONG m_int { $$ = make_type(RPC_FC_LONG, NULL); }
|
||||||
| tHYPER m_int { $$ = make_type(RPC_FC_HYPER, 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:
|
case RPC_FC_BYTE:
|
||||||
print_server("0x4e, /* FC_IN_PARAM_BASETYPE */\n");
|
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;
|
break;
|
||||||
case RPC_FC_CHAR:
|
case RPC_FC_CHAR:
|
||||||
print_server("0x4e, /* FC_IN_PARAM_BASETYPE */\n");
|
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;
|
break;
|
||||||
case RPC_FC_WCHAR:
|
case RPC_FC_WCHAR:
|
||||||
print_server("0x4e, /* FC_IN_PARAM_BASETYPE */\n");
|
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;
|
break;
|
||||||
case RPC_FC_USHORT:
|
case RPC_FC_USHORT:
|
||||||
print_server("0x4e, /* FC_IN_PARAM_BASETYPE */\n");
|
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;
|
break;
|
||||||
case RPC_FC_SHORT:
|
case RPC_FC_SHORT:
|
||||||
print_server("0x4e, /* FC_IN_PARAM_BASETYPE */\n");
|
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;
|
break;
|
||||||
case RPC_FC_ULONG:
|
case RPC_FC_ULONG:
|
||||||
print_server("0x4e, /* FC_IN_PARAM_BASETYPE */\n");
|
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;
|
break;
|
||||||
case RPC_FC_LONG:
|
case RPC_FC_LONG:
|
||||||
print_server("0x4e, /* FC_IN_PARAM_BASETYPE */\n");
|
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;
|
break;
|
||||||
case RPC_FC_HYPER:
|
case RPC_FC_HYPER:
|
||||||
print_server("0x4e, /* FC_IN_PARAM_BASETYPE */\n");
|
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;
|
break;
|
||||||
default:
|
default:
|
||||||
error("Unknown/unsupported type\n");
|
error("Unknown/unsupported type\n");
|
||||||
|
@ -138,35 +154,47 @@ static void write_procformatstring(type_t *iface)
|
||||||
{
|
{
|
||||||
case RPC_FC_BYTE:
|
case RPC_FC_BYTE:
|
||||||
print_server("0x53, /* FC_RETURN_PARAM_BASETYPE */\n");
|
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;
|
break;
|
||||||
case RPC_FC_CHAR:
|
case RPC_FC_CHAR:
|
||||||
print_server("0x53, /* FC_RETURN_PARAM_BASETYPE */\n");
|
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;
|
break;
|
||||||
case RPC_FC_WCHAR:
|
case RPC_FC_WCHAR:
|
||||||
print_server("0x53, /* FC_RETURN_PARAM_BASETYPE */\n");
|
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;
|
break;
|
||||||
case RPC_FC_USHORT:
|
case RPC_FC_USHORT:
|
||||||
print_server("0x53, /* FC_RETURN_PARAM_BASETYPE */\n");
|
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;
|
break;
|
||||||
case RPC_FC_SHORT:
|
case RPC_FC_SHORT:
|
||||||
print_server("0x53, /* FC_RETURN_PARAM_BASETYPE */\n");
|
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;
|
break;
|
||||||
case RPC_FC_ULONG:
|
case RPC_FC_ULONG:
|
||||||
print_server("0x53, /* FC_RETURN_PARAM_BASETYPE */\n");
|
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;
|
break;
|
||||||
case RPC_FC_LONG:
|
case RPC_FC_LONG:
|
||||||
print_server("0x53, /* FC_RETURN_PARAM_BASETYPE */\n");
|
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;
|
break;
|
||||||
case RPC_FC_HYPER:
|
case RPC_FC_HYPER:
|
||||||
print_server("0x53, /* FC_RETURN_PARAM_BASETYPE */\n");
|
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;
|
break;
|
||||||
default:
|
default:
|
||||||
error("Unknown/unsupported type\n");
|
error("Unknown/unsupported type\n");
|
||||||
|
@ -208,17 +236,23 @@ unsigned int get_required_buffer_size(type_t *type)
|
||||||
switch(type->type)
|
switch(type->type)
|
||||||
{
|
{
|
||||||
case RPC_FC_BYTE:
|
case RPC_FC_BYTE:
|
||||||
|
case RPC_FC_SMALL:
|
||||||
case RPC_FC_CHAR:
|
case RPC_FC_CHAR:
|
||||||
case RPC_FC_WCHAR:
|
case RPC_FC_WCHAR:
|
||||||
case RPC_FC_USHORT:
|
case RPC_FC_USHORT:
|
||||||
case RPC_FC_SHORT:
|
case RPC_FC_SHORT:
|
||||||
case RPC_FC_ULONG:
|
case RPC_FC_ULONG:
|
||||||
case RPC_FC_LONG:
|
case RPC_FC_LONG:
|
||||||
|
case RPC_FC_FLOAT:
|
||||||
return 4;
|
return 4;
|
||||||
|
|
||||||
case RPC_FC_HYPER:
|
case RPC_FC_HYPER:
|
||||||
|
case RPC_FC_DOUBLE:
|
||||||
return 8;
|
return 8;
|
||||||
|
|
||||||
|
case RPC_FC_IGNORE:
|
||||||
|
return 0;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
error("Unknown/unsupported type: %s\n", type->name);
|
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_BYTE:
|
||||||
case RPC_FC_CHAR:
|
case RPC_FC_CHAR:
|
||||||
|
case RPC_FC_SMALL:
|
||||||
size = 1;
|
size = 1;
|
||||||
alignment = 0;
|
alignment = 0;
|
||||||
break;
|
break;
|
||||||
|
@ -258,21 +293,29 @@ static void unmarshall_arguments(func_t *func)
|
||||||
|
|
||||||
case RPC_FC_ULONG:
|
case RPC_FC_ULONG:
|
||||||
case RPC_FC_LONG:
|
case RPC_FC_LONG:
|
||||||
|
case RPC_FC_FLOAT:
|
||||||
size = 4;
|
size = 4;
|
||||||
if (last_size != 0 && last_size < 4)
|
if (last_size != 0 && last_size < 4)
|
||||||
alignment = (4 - last_size);
|
alignment = (4 - last_size);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case RPC_FC_HYPER:
|
case RPC_FC_HYPER:
|
||||||
|
case RPC_FC_DOUBLE:
|
||||||
size = 8;
|
size = 8;
|
||||||
if (last_size != 0 && last_size < 4)
|
if (last_size != 0 && last_size < 4)
|
||||||
alignment = (4 - last_size);
|
alignment = (4 - last_size);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case RPC_FC_IGNORE:
|
||||||
|
size = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
error("Unknown/unsupported type!");
|
error("Unknown/unsupported type!");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (size != 0)
|
||||||
|
{
|
||||||
if (alignment != 0)
|
if (alignment != 0)
|
||||||
print_server("_StubMsg.Buffer += %u;\n", alignment);
|
print_server("_StubMsg.Buffer += %u;\n", alignment);
|
||||||
|
|
||||||
|
@ -284,6 +327,7 @@ static void unmarshall_arguments(func_t *func)
|
||||||
fprintf(server, "\n");
|
fprintf(server, "\n");
|
||||||
|
|
||||||
last_size = size;
|
last_size = size;
|
||||||
|
}
|
||||||
|
|
||||||
var = PREV_LINK(var);
|
var = PREV_LINK(var);
|
||||||
}
|
}
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -107,30 +107,31 @@ typedef union {
|
||||||
#define tSIGNED 350
|
#define tSIGNED 350
|
||||||
#define tSIZEIS 351
|
#define tSIZEIS 351
|
||||||
#define tSIZEOF 352
|
#define tSIZEOF 352
|
||||||
#define tSOURCE 353
|
#define tSMALL 353
|
||||||
#define tSTDCALL 354
|
#define tSOURCE 354
|
||||||
#define tSTRING 355
|
#define tSTDCALL 355
|
||||||
#define tSTRUCT 356
|
#define tSTRING 356
|
||||||
#define tSWITCH 357
|
#define tSTRUCT 357
|
||||||
#define tSWITCHIS 358
|
#define tSWITCH 358
|
||||||
#define tSWITCHTYPE 359
|
#define tSWITCHIS 359
|
||||||
#define tTRANSMITAS 360
|
#define tSWITCHTYPE 360
|
||||||
#define tTYPEDEF 361
|
#define tTRANSMITAS 361
|
||||||
#define tUNION 362
|
#define tTYPEDEF 362
|
||||||
#define tUNIQUE 363
|
#define tUNION 363
|
||||||
#define tUNSIGNED 364
|
#define tUNIQUE 364
|
||||||
#define tUUID 365
|
#define tUNSIGNED 365
|
||||||
#define tV1ENUM 366
|
#define tUUID 366
|
||||||
#define tVARARG 367
|
#define tV1ENUM 367
|
||||||
#define tVERSION 368
|
#define tVARARG 368
|
||||||
#define tVOID 369
|
#define tVERSION 369
|
||||||
#define tWCHAR 370
|
#define tVOID 370
|
||||||
#define tWIREMARSHAL 371
|
#define tWCHAR 371
|
||||||
#define tPOINTERTYPE 372
|
#define tWIREMARSHAL 372
|
||||||
#define COND 373
|
#define tPOINTERTYPE 373
|
||||||
#define CAST 374
|
#define COND 374
|
||||||
#define PPTR 375
|
#define CAST 375
|
||||||
#define NEG 376
|
#define PPTR 376
|
||||||
|
#define NEG 377
|
||||||
|
|
||||||
|
|
||||||
extern YYSTYPE yylval;
|
extern YYSTYPE yylval;
|
||||||
|
|
Loading…
Reference in a new issue