Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
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-winehq
Commits
a2fedc37
Commit
a2fedc37
authored
Sep 27, 2007
by
Rob Shearman
Committed by
Alexandre Julliard
Sep 28, 2007
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
widl: Write prototypes for context handle rundown rountines into generated header files.
parent
71d70f0f
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
39 additions
and
6 deletions
+39
-6
header.c
tools/widl/header.c
+33
-4
header.h
tools/widl/header.h
+1
-0
parser.y
tools/widl/parser.y
+1
-1
widl.c
tools/widl/widl.c
+1
-0
widltypes.h
tools/widl/widltypes.h
+3
-1
No files found.
tools/widl/header.c
View file @
a2fedc37
...
...
@@ -38,6 +38,8 @@
#include "header.h"
static
int
indentation
=
0
;
user_type_list_t
user_type_list
=
LIST_INIT
(
user_type_list
);
static
context_handle_list_t
context_handle_list
=
LIST_INIT
(
context_handle_list
);
static
void
indent
(
FILE
*
h
,
int
delta
)
{
...
...
@@ -286,8 +288,6 @@ void write_type(FILE *h, type_t *t, int is_field, const char *fmt, ...)
write_type_right
(
h
,
t
,
is_field
);
}
user_type_list_t
user_type_list
=
LIST_INIT
(
user_type_list
);
static
int
user_type_registered
(
const
char
*
name
)
{
user_type_t
*
ut
;
...
...
@@ -297,7 +297,16 @@ static int user_type_registered(const char *name)
return
0
;
}
void
check_for_user_types
(
const
var_list_t
*
list
)
static
int
context_handle_registered
(
const
char
*
name
)
{
context_handle_t
*
ch
;
LIST_FOR_EACH_ENTRY
(
ch
,
&
context_handle_list
,
context_handle_t
,
entry
)
if
(
!
strcmp
(
name
,
ch
->
name
))
return
1
;
return
0
;
}
void
check_for_user_types_and_context_handles
(
const
var_list_t
*
list
)
{
const
var_t
*
v
;
...
...
@@ -309,6 +318,16 @@ void check_for_user_types(const var_list_t *list)
const
char
*
name
=
type
->
name
;
if
(
type
->
user_types_registered
)
continue
;
type
->
user_types_registered
=
1
;
if
(
is_attr
(
type
->
attrs
,
ATTR_CONTEXTHANDLE
))
{
if
(
!
context_handle_registered
(
name
))
{
context_handle_t
*
ch
=
xmalloc
(
sizeof
(
*
ch
));
ch
->
name
=
xstrdup
(
name
);
list_add_tail
(
&
context_handle_list
,
&
ch
->
entry
);
}
/* don't carry on parsing fields within this type */
break
;
}
if
(
is_attr
(
type
->
attrs
,
ATTR_WIREMARSHAL
))
{
if
(
!
user_type_registered
(
name
))
{
...
...
@@ -322,7 +341,7 @@ void check_for_user_types(const var_list_t *list)
}
else
{
check_for_user_types
(
type
->
fields
);
check_for_user_types
_and_context_handles
(
type
->
fields
);
}
}
}
...
...
@@ -341,6 +360,16 @@ void write_user_types(void)
}
}
void
write_context_handle_rundowns
(
void
)
{
context_handle_t
*
ch
;
LIST_FOR_EACH_ENTRY
(
ch
,
&
context_handle_list
,
context_handle_t
,
entry
)
{
const
char
*
name
=
ch
->
name
;
fprintf
(
header
,
"void __RPC_USER %s_rundown(%s);
\n
"
,
name
,
name
);
}
}
void
write_typedef
(
type_t
*
type
)
{
fprintf
(
header
,
"typedef "
);
...
...
tools/widl/header.h
View file @
a2fedc37
...
...
@@ -52,6 +52,7 @@ extern void write_constdef(const var_t *v);
extern
void
write_externdef
(
const
var_t
*
v
);
extern
void
write_library
(
const
char
*
name
,
const
attr_list_t
*
attr
);
extern
void
write_user_types
(
void
);
extern
void
write_context_handle_rundowns
(
void
);
extern
const
var_t
*
get_explicit_handle_var
(
const
func_t
*
func
);
extern
int
has_out_arg_or_return
(
const
func_t
*
func
);
extern
void
write_guid
(
FILE
*
f
,
const
char
*
guid_prefix
,
const
char
*
name
,
...
...
tools/widl/parser.y
View file @
a2fedc37
...
...
@@ -2021,6 +2021,6 @@ static void check_all_user_types(ifref_list_t *ifrefs)
{
const func_list_t *fs = ifref->iface->funcs;
if (fs) LIST_FOR_EACH_ENTRY(f, fs, const func_t, entry)
check_for_user_types(f->args);
check_for_user_types
_and_context_handles
(f->args);
}
}
tools/widl/widl.c
View file @
a2fedc37
...
...
@@ -409,6 +409,7 @@ int main(int argc,char *argv[])
fprintf
(
header
,
"/* Begin additional prototypes for all interfaces */
\n
"
);
fprintf
(
header
,
"
\n
"
);
write_user_types
();
write_context_handle_rundowns
();
fprintf
(
header
,
"
\n
"
);
fprintf
(
header
,
"/* End additional prototypes */
\n
"
);
fprintf
(
header
,
"
\n
"
);
...
...
tools/widl/widltypes.h
View file @
a2fedc37
...
...
@@ -47,6 +47,7 @@ typedef struct _importlib_t importlib_t;
typedef
struct
_importinfo_t
importinfo_t
;
typedef
struct
_typelib_t
typelib_t
;
typedef
struct
_user_type_t
user_type_t
;
typedef
struct
_user_type_t
context_handle_t
;
typedef
struct
list
attr_list_t
;
typedef
struct
list
str_list_t
;
...
...
@@ -57,6 +58,7 @@ typedef struct list pident_list_t;
typedef
struct
list
ifref_list_t
;
typedef
struct
list
array_dims_t
;
typedef
struct
list
user_type_list_t
;
typedef
struct
list
context_handle_list_t
;
enum
attr_type
{
...
...
@@ -306,7 +308,7 @@ struct _user_type_t {
};
extern
user_type_list_t
user_type_list
;
void
check_for_user_types
(
const
var_list_t
*
list
);
void
check_for_user_types
_and_context_handles
(
const
var_list_t
*
list
);
void
init_types
(
void
);
...
...
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