Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-cw
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-cw
Commits
661b01f9
Commit
661b01f9
authored
Jan 30, 2008
by
Rob Shearman
Committed by
Alexandre Julliard
Feb 04, 2008
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
widl: Output code for initialising and freeing full pointer translation tables.
parent
454e489c
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
95 additions
and
0 deletions
+95
-0
client.c
tools/widl/client.c
+7
-0
proxy.c
tools/widl/proxy.c
+12
-0
server.c
tools/widl/server.c
+7
-0
typegen.c
tools/widl/typegen.c
+66
-0
typegen.h
tools/widl/typegen.h
+3
-0
No files found.
tools/widl/client.c
View file @
661b01f9
...
...
@@ -85,6 +85,7 @@ static void write_function_stubs(type_t *iface, unsigned int *proc_offset)
{
const
var_t
*
def
=
func
->
def
;
const
var_t
*
explicit_handle_var
;
int
has_full_pointer
=
is_full_pointer_function
(
func
);
/* check for a defined binding handle */
explicit_handle_var
=
get_explicit_handle_var
(
func
);
...
...
@@ -142,6 +143,9 @@ static void write_function_stubs(type_t *iface, unsigned int *proc_offset)
}
fprintf
(
client
,
"
\n
"
);
if
(
has_full_pointer
)
write_full_pointer_init
(
client
,
indent
,
func
,
FALSE
);
/* check pointers */
check_pointers
(
func
);
...
...
@@ -245,6 +249,9 @@ static void write_function_stubs(type_t *iface, unsigned int *proc_offset)
/* FIXME: emit client finally code */
if
(
has_full_pointer
)
write_full_pointer_free
(
client
,
indent
,
func
);
print_client
(
"NdrFreeBuffer((PMIDL_STUB_MESSAGE)&_StubMsg);
\n
"
);
indent
--
;
...
...
tools/widl/proxy.c
View file @
661b01f9
...
...
@@ -254,6 +254,7 @@ static void gen_proxy(type_t *iface, const func_t *cur, int idx,
{
var_t
*
def
=
cur
->
def
;
int
has_ret
=
!
is_void
(
def
->
type
);
int
has_full_pointer
=
is_full_pointer_function
(
cur
);
indent
=
0
;
write_type_decl_left
(
proxy
,
def
->
type
);
...
...
@@ -279,6 +280,9 @@ static void gen_proxy(type_t *iface, const func_t *cur, int idx,
}
print_proxy
(
"
\n
"
);
if
(
has_full_pointer
)
write_full_pointer_init
(
proxy
,
indent
,
cur
,
FALSE
);
/* FIXME: trace */
clear_output_vars
(
cur
->
args
);
...
...
@@ -325,6 +329,8 @@ static void gen_proxy(type_t *iface, const func_t *cur, int idx,
print_proxy
(
"RpcFinally
\n
"
);
print_proxy
(
"{
\n
"
);
indent
++
;
if
(
has_full_pointer
)
write_full_pointer_free
(
proxy
,
indent
,
cur
);
print_proxy
(
"NdrProxyFreeBuffer(This, &_StubMsg);
\n
"
);
indent
--
;
print_proxy
(
"}
\n
"
);
...
...
@@ -356,6 +362,7 @@ static void gen_stub(type_t *iface, const func_t *cur, const char *cas,
var_t
*
def
=
cur
->
def
;
const
var_t
*
arg
;
int
has_ret
=
!
is_void
(
def
->
type
);
int
has_full_pointer
=
is_full_pointer_function
(
cur
);
indent
=
0
;
print_proxy
(
"void __RPC_STUB %s_"
,
iface
->
name
);
...
...
@@ -384,6 +391,8 @@ static void gen_stub(type_t *iface, const func_t *cur, const char *cas,
print_proxy
(
"RpcTryFinally
\n
"
);
print_proxy
(
"{
\n
"
);
indent
++
;
if
(
has_full_pointer
)
write_full_pointer_init
(
proxy
,
indent
,
cur
,
TRUE
);
print_proxy
(
"if ((_pRpcMessage->DataRepresentation & 0xffff) != NDR_LOCAL_DATA_REPRESENTATION)
\n
"
);
indent
++
;
print_proxy
(
"NdrConvert( &_StubMsg, &__MIDL_ProcFormatString.Format[%u]);
\n
"
,
proc_offset
);
...
...
@@ -439,6 +448,9 @@ static void gen_stub(type_t *iface, const func_t *cur, const char *cas,
write_remoting_arguments
(
proxy
,
indent
+
1
,
cur
,
PASS_OUT
,
PHASE_FREE
);
if
(
has_full_pointer
)
write_full_pointer_free
(
proxy
,
indent
,
cur
);
print_proxy
(
"}
\n
"
);
print_proxy
(
"RpcEndFinally
\n
"
);
...
...
tools/widl/server.c
View file @
661b01f9
...
...
@@ -62,6 +62,7 @@ static void write_function_stubs(type_t *iface, unsigned int *proc_offset)
LIST_FOR_EACH_ENTRY
(
func
,
iface
->
funcs
,
const
func_t
,
entry
)
{
const
var_t
*
def
=
func
->
def
;
int
has_full_pointer
=
is_full_pointer_function
(
func
);
/* check for a defined binding handle */
explicit_handle_var
=
get_explicit_handle_var
(
func
);
...
...
@@ -126,6 +127,9 @@ static void write_function_stubs(type_t *iface, unsigned int *proc_offset)
print_server
(
"{
\n
"
);
indent
++
;
if
(
has_full_pointer
)
write_full_pointer_init
(
server
,
indent
,
func
,
TRUE
);
if
(
func
->
args
)
{
print_server
(
"if ((_pRpcMessage->DataRepresentation & 0x0000FFFFUL) != NDR_LOCAL_DATA_REPRESENTATION)
\n
"
);
...
...
@@ -236,6 +240,9 @@ static void write_function_stubs(type_t *iface, unsigned int *proc_offset)
write_remoting_arguments
(
server
,
indent
,
func
,
PASS_OUT
,
PHASE_FREE
);
if
(
has_full_pointer
)
write_full_pointer_free
(
server
,
indent
,
func
);
indent
--
;
print_server
(
"}
\n
"
);
print_server
(
"RpcEndFinally
\n
"
);
...
...
tools/widl/typegen.c
View file @
661b01f9
...
...
@@ -193,6 +193,46 @@ static int type_has_pointers(const type_t *type)
return
FALSE
;
}
static
int
type_has_full_pointer
(
const
type_t
*
type
)
{
if
(
is_user_type
(
type
))
return
FALSE
;
else
if
(
type
->
type
==
RPC_FC_FP
)
return
TRUE
;
else
if
(
is_ptr
(
type
))
return
FALSE
;
else
if
(
is_array
(
type
))
return
type_has_full_pointer
(
type
->
ref
);
else
if
(
is_struct
(
type
->
type
))
{
const
var_t
*
field
;
if
(
type
->
fields
)
LIST_FOR_EACH_ENTRY
(
field
,
type
->
fields
,
const
var_t
,
entry
)
{
if
(
type_has_full_pointer
(
field
->
type
))
return
TRUE
;
}
}
else
if
(
is_union
(
type
->
type
))
{
var_list_t
*
fields
;
const
var_t
*
field
;
if
(
type
->
type
==
RPC_FC_ENCAPSULATED_UNION
)
{
const
var_t
*
uv
=
LIST_ENTRY
(
list_tail
(
type
->
fields
),
const
var_t
,
entry
);
fields
=
uv
->
type
->
fields
;
}
else
fields
=
type
->
fields
;
if
(
fields
)
LIST_FOR_EACH_ENTRY
(
field
,
fields
,
const
var_t
,
entry
)
{
if
(
field
->
type
&&
type_has_full_pointer
(
field
->
type
))
return
TRUE
;
}
}
return
FALSE
;
}
static
unsigned
short
user_type_offset
(
const
char
*
name
)
{
user_type_t
*
ut
;
...
...
@@ -903,6 +943,32 @@ size_t type_memsize(const type_t *t, unsigned int *align)
return
size
;
}
int
is_full_pointer_function
(
const
func_t
*
func
)
{
const
var_t
*
var
;
if
(
type_has_full_pointer
(
func
->
def
->
type
))
return
TRUE
;
if
(
!
func
->
args
)
return
FALSE
;
LIST_FOR_EACH_ENTRY
(
var
,
func
->
args
,
const
var_t
,
entry
)
if
(
type_has_full_pointer
(
var
->
type
))
return
TRUE
;
return
FALSE
;
}
void
write_full_pointer_init
(
FILE
*
file
,
int
indent
,
const
func_t
*
func
,
int
is_server
)
{
print_file
(
file
,
indent
,
"_StubMsg.FullPtrXlatTables = NdrFullPointerXlatInit(0,%s);
\n
"
,
is_server
?
"XLAT_SERVER"
:
"XLAT_CLIENT"
);
fprintf
(
file
,
"
\n
"
);
}
void
write_full_pointer_free
(
FILE
*
file
,
int
indent
,
const
func_t
*
func
)
{
print_file
(
file
,
indent
,
"NdrFullPointerXlatFree(_StubMsg.FullPtrXlatTables);
\n
"
);
fprintf
(
file
,
"
\n
"
);
}
static
unsigned
int
write_nonsimple_pointer
(
FILE
*
file
,
const
type_t
*
type
,
size_t
offset
)
{
short
absoff
=
type
->
ref
->
typestring_offset
;
...
...
tools/widl/typegen.h
View file @
661b01f9
...
...
@@ -60,3 +60,6 @@ void print(FILE *file, int indent, const char *format, va_list ap);
int
get_padding
(
const
var_list_t
*
fields
);
int
is_user_type
(
const
type_t
*
t
);
expr_t
*
get_size_is_expr
(
const
type_t
*
t
,
const
char
*
name
);
int
is_full_pointer_function
(
const
func_t
*
func
);
void
write_full_pointer_init
(
FILE
*
file
,
int
indent
,
const
func_t
*
func
,
int
is_server
);
void
write_full_pointer_free
(
FILE
*
file
,
int
indent
,
const
func_t
*
func
);
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment