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
b53773cf
Commit
b53773cf
authored
Dec 10, 2021
by
Alexandre Julliard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
tools: Move the output buffer functions to the common header.
Signed-off-by:
Alexandre Julliard
<
julliard@winehq.org
>
parent
7f0943dd
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
86 additions
and
321 deletions
+86
-321
tools.h
tools/tools.h
+80
-0
utils.c
tools/widl/utils.c
+0
-71
utils.h
tools/widl/utils.h
+0
-12
build.h
tools/winebuild/build.h
+0
-11
res32.c
tools/winebuild/res32.c
+1
-1
spec32.c
tools/winebuild/spec32.c
+1
-1
utils.c
tools/winebuild/utils.c
+0
-75
utils.c
tools/wmc/utils.c
+0
-64
utils.h
tools/wmc/utils.h
+0
-13
genres.c
tools/wrc/genres.c
+4
-73
No files found.
tools/tools.h
View file @
b53773cf
...
...
@@ -561,6 +561,86 @@ static inline struct target init_argv0_target( const char *argv0 )
}
/* output buffer management */
extern
unsigned
char
*
output_buffer
;
extern
size_t
output_buffer_pos
;
extern
size_t
output_buffer_size
;
static
inline
void
check_output_buffer_space
(
size_t
size
)
{
if
(
output_buffer_pos
+
size
>=
output_buffer_size
)
{
output_buffer_size
=
max
(
output_buffer_size
*
2
,
output_buffer_pos
+
size
);
output_buffer
=
xrealloc
(
output_buffer
,
output_buffer_size
);
}
}
static
inline
void
init_output_buffer
(
void
)
{
output_buffer_size
=
1024
;
output_buffer_pos
=
0
;
output_buffer
=
xmalloc
(
output_buffer_size
);
}
static
inline
void
put_data
(
const
void
*
data
,
size_t
size
)
{
check_output_buffer_space
(
size
);
memcpy
(
output_buffer
+
output_buffer_pos
,
data
,
size
);
output_buffer_pos
+=
size
;
}
static
inline
void
put_byte
(
unsigned
char
val
)
{
check_output_buffer_space
(
1
);
output_buffer
[
output_buffer_pos
++
]
=
val
;
}
static
inline
void
put_word
(
unsigned
short
val
)
{
check_output_buffer_space
(
2
);
output_buffer
[
output_buffer_pos
++
]
=
val
;
output_buffer
[
output_buffer_pos
++
]
=
val
>>
8
;
}
static
inline
void
put_dword
(
unsigned
int
val
)
{
check_output_buffer_space
(
4
);
output_buffer
[
output_buffer_pos
++
]
=
val
;
output_buffer
[
output_buffer_pos
++
]
=
val
>>
8
;
output_buffer
[
output_buffer_pos
++
]
=
val
>>
16
;
output_buffer
[
output_buffer_pos
++
]
=
val
>>
24
;
}
static
inline
void
put_qword
(
unsigned
int
val
)
{
put_dword
(
val
);
put_dword
(
0
);
}
static
inline
void
align_output
(
unsigned
int
align
)
{
size_t
size
=
align
-
(
output_buffer_pos
%
align
);
if
(
size
==
align
)
return
;
check_output_buffer_space
(
size
);
memset
(
output_buffer
+
output_buffer_pos
,
0
,
size
);
output_buffer_pos
+=
size
;
}
static
inline
void
flush_output_buffer
(
const
char
*
name
)
{
int
fd
=
open
(
name
,
O_WRONLY
|
O_CREAT
|
O_TRUNC
|
O_BINARY
,
0666
);
if
(
fd
==
-
1
||
write
(
fd
,
output_buffer
,
output_buffer_pos
)
!=
output_buffer_pos
)
{
perror
(
name
);
exit
(
1
);
}
close
(
fd
);
free
(
output_buffer
);
}
/* command-line option parsing */
/* partly based on the Glibc getopt() implementation */
...
...
tools/widl/utils.c
View file @
b53773cf
...
...
@@ -222,32 +222,6 @@ static struct resource
}
resources
[
16
];
static
unsigned
int
nb_resources
;
static
void
check_output_buffer_space
(
size_t
size
)
{
if
(
output_buffer_pos
+
size
>=
output_buffer_size
)
{
output_buffer_size
=
max
(
output_buffer_size
*
2
,
output_buffer_pos
+
size
);
output_buffer
=
xrealloc
(
output_buffer
,
output_buffer_size
);
}
}
void
init_output_buffer
(
void
)
{
output_buffer_size
=
1024
;
output_buffer_pos
=
0
;
output_buffer
=
xmalloc
(
output_buffer_size
);
}
void
flush_output_buffer
(
const
char
*
name
)
{
int
fd
=
open
(
name
,
O_WRONLY
|
O_CREAT
|
O_TRUNC
|
O_BINARY
,
0666
);
if
(
fd
==
-
1
)
error
(
"Error creating %s
\n
"
,
name
);
if
(
write
(
fd
,
output_buffer
,
output_buffer_pos
)
!=
output_buffer_pos
)
error
(
"Error writing to %s
\n
"
,
name
);
close
(
fd
);
free
(
output_buffer
);
}
static
inline
void
put_resource_id
(
const
char
*
str
)
{
if
(
str
[
0
]
!=
'#'
)
...
...
@@ -335,41 +309,6 @@ void flush_output_resources( const char *name )
free
(
output_buffer
);
}
void
put_data
(
const
void
*
data
,
size_t
size
)
{
check_output_buffer_space
(
size
);
memcpy
(
output_buffer
+
output_buffer_pos
,
data
,
size
);
output_buffer_pos
+=
size
;
}
void
put_byte
(
unsigned
char
val
)
{
check_output_buffer_space
(
1
);
output_buffer
[
output_buffer_pos
++
]
=
val
;
}
void
put_word
(
unsigned
short
val
)
{
check_output_buffer_space
(
2
);
output_buffer
[
output_buffer_pos
++
]
=
val
;
output_buffer
[
output_buffer_pos
++
]
=
val
>>
8
;
}
void
put_dword
(
unsigned
int
val
)
{
check_output_buffer_space
(
4
);
output_buffer
[
output_buffer_pos
++
]
=
val
;
output_buffer
[
output_buffer_pos
++
]
=
val
>>
8
;
output_buffer
[
output_buffer_pos
++
]
=
val
>>
16
;
output_buffer
[
output_buffer_pos
++
]
=
val
>>
24
;
}
void
put_qword
(
unsigned
int
val
)
{
put_dword
(
val
);
put_dword
(
0
);
}
/* pointer-sized word */
void
put_pword
(
unsigned
int
val
)
{
...
...
@@ -402,13 +341,3 @@ void put_str( int indent, const char *format, ... )
check_output_buffer_space
(
size
);
}
}
void
align_output
(
unsigned
int
align
)
{
size_t
size
=
align
-
(
output_buffer_pos
%
align
);
if
(
size
==
align
)
return
;
check_output_buffer_space
(
size
);
memset
(
output_buffer
+
output_buffer_pos
,
0
,
size
);
output_buffer_pos
+=
size
;
}
tools/widl/utils.h
View file @
b53773cf
...
...
@@ -40,22 +40,10 @@ int is_valid_uuid(const char *s);
/* buffer management */
extern
unsigned
char
*
output_buffer
;
extern
size_t
output_buffer_pos
;
extern
size_t
output_buffer_size
;
extern
void
init_output_buffer
(
void
);
extern
void
flush_output_buffer
(
const
char
*
name
);
extern
void
add_output_to_resources
(
const
char
*
type
,
const
char
*
name
);
extern
void
flush_output_resources
(
const
char
*
name
);
extern
void
put_data
(
const
void
*
data
,
size_t
size
);
extern
void
put_byte
(
unsigned
char
val
);
extern
void
put_word
(
unsigned
short
val
);
extern
void
put_dword
(
unsigned
int
val
);
extern
void
put_qword
(
unsigned
int
val
);
extern
void
put_pword
(
unsigned
int
val
);
extern
void
put_str
(
int
indent
,
const
char
*
format
,
...
)
__attribute__
((
format
(
printf
,
2
,
3
)));
extern
void
align_output
(
unsigned
int
align
);
/* typelibs expect the minor version to be stored in the higher bits and
* major to be stored in the lower bits */
...
...
tools/winebuild/build.h
View file @
b53773cf
...
...
@@ -307,23 +307,12 @@ extern const char *input_buffer_filename;
extern
const
unsigned
char
*
input_buffer
;
extern
size_t
input_buffer_pos
;
extern
size_t
input_buffer_size
;
extern
unsigned
char
*
output_buffer
;
extern
size_t
output_buffer_pos
;
extern
size_t
output_buffer_size
;
extern
void
init_input_buffer
(
const
char
*
file
);
extern
void
init_output_buffer
(
void
);
extern
void
flush_output_buffer
(
void
);
extern
unsigned
char
get_byte
(
void
);
extern
unsigned
short
get_word
(
void
);
extern
unsigned
int
get_dword
(
void
);
extern
void
put_data
(
const
void
*
data
,
size_t
size
);
extern
void
put_byte
(
unsigned
char
val
);
extern
void
put_word
(
unsigned
short
val
);
extern
void
put_dword
(
unsigned
int
val
);
extern
void
put_qword
(
unsigned
int
val
);
extern
void
put_pword
(
unsigned
int
val
);
extern
void
align_output
(
unsigned
int
align
);
/* global variables */
...
...
tools/winebuild/res32.c
View file @
b53773cf
...
...
@@ -668,7 +668,7 @@ void output_res_o_file( DLLSPEC *spec )
/* if the output file name is a .res too, don't run the results through windres */
if
(
strendswith
(
output_file_name
,
".res"
))
{
flush_output_buffer
();
flush_output_buffer
(
output_file_name
);
return
;
}
...
...
tools/winebuild/spec32.c
View file @
b53773cf
...
...
@@ -1041,7 +1041,7 @@ void output_fake_module( DLLSPEC *spec )
put_data
(
pe
.
sec
[
i
].
ptr
,
pe
.
sec
[
i
].
size
);
}
flush_output_buffer
();
flush_output_buffer
(
output_file_name
?
output_file_name
:
spec
->
file_name
);
}
...
...
tools/winebuild/utils.c
View file @
b53773cf
...
...
@@ -415,15 +415,6 @@ unsigned char *output_buffer;
size_t
output_buffer_pos
;
size_t
output_buffer_size
;
static
void
check_output_buffer_space
(
size_t
size
)
{
if
(
output_buffer_pos
+
size
>=
output_buffer_size
)
{
output_buffer_size
=
max
(
output_buffer_size
*
2
,
output_buffer_pos
+
size
);
output_buffer
=
xrealloc
(
output_buffer
,
output_buffer_size
);
}
}
void
init_input_buffer
(
const
char
*
file
)
{
int
fd
;
...
...
@@ -442,22 +433,6 @@ void init_input_buffer( const char *file )
byte_swapped
=
0
;
}
void
init_output_buffer
(
void
)
{
output_buffer_size
=
1024
;
output_buffer_pos
=
0
;
output_buffer
=
xmalloc
(
output_buffer_size
);
}
void
flush_output_buffer
(
void
)
{
open_output_file
();
if
(
fwrite
(
output_buffer
,
1
,
output_buffer_pos
,
output_file
)
!=
output_buffer_pos
)
fatal_error
(
"Error writing to %s
\n
"
,
output_file_name
);
close_output_file
();
free
(
output_buffer
);
}
unsigned
char
get_byte
(
void
)
{
if
(
input_buffer_pos
>=
input_buffer_size
)
...
...
@@ -490,46 +465,6 @@ unsigned int get_dword(void)
return
ret
;
}
void
put_data
(
const
void
*
data
,
size_t
size
)
{
check_output_buffer_space
(
size
);
memcpy
(
output_buffer
+
output_buffer_pos
,
data
,
size
);
output_buffer_pos
+=
size
;
}
void
put_byte
(
unsigned
char
val
)
{
check_output_buffer_space
(
1
);
output_buffer
[
output_buffer_pos
++
]
=
val
;
}
void
put_word
(
unsigned
short
val
)
{
if
(
byte_swapped
)
val
=
(
val
<<
8
)
|
(
val
>>
8
);
put_data
(
&
val
,
sizeof
(
val
)
);
}
void
put_dword
(
unsigned
int
val
)
{
if
(
byte_swapped
)
val
=
((
val
<<
24
)
|
((
val
<<
8
)
&
0x00ff0000
)
|
((
val
>>
8
)
&
0x0000ff00
)
|
(
val
>>
24
));
put_data
(
&
val
,
sizeof
(
val
)
);
}
void
put_qword
(
unsigned
int
val
)
{
if
(
byte_swapped
)
{
put_dword
(
0
);
put_dword
(
val
);
}
else
{
put_dword
(
val
);
put_dword
(
0
);
}
}
/* pointer-sized word */
void
put_pword
(
unsigned
int
val
)
{
...
...
@@ -537,16 +472,6 @@ void put_pword( unsigned int val )
else
put_dword
(
val
);
}
void
align_output
(
unsigned
int
align
)
{
size_t
size
=
align
-
(
output_buffer_pos
%
align
);
if
(
size
==
align
)
return
;
check_output_buffer_space
(
size
);
memset
(
output_buffer
+
output_buffer_pos
,
0
,
size
);
output_buffer_pos
+=
size
;
}
/* output a standard header for generated files */
void
output_standard_file_header
(
void
)
{
...
...
tools/wmc/utils.c
View file @
b53773cf
...
...
@@ -433,70 +433,6 @@ WCHAR *codepage_to_unicode( int codepage, const char *src, int srclen, int *dstl
#endif
/* _WIN32 */
/*******************************************************************
* buffer management
*
* Function for writing to a memory buffer.
*/
unsigned
char
*
output_buffer
;
size_t
output_buffer_pos
;
size_t
output_buffer_size
;
static
void
check_output_buffer_space
(
size_t
size
)
{
if
(
output_buffer_pos
+
size
>=
output_buffer_size
)
{
output_buffer_size
=
max
(
output_buffer_size
*
2
,
output_buffer_pos
+
size
);
output_buffer
=
xrealloc
(
output_buffer
,
output_buffer_size
);
}
}
void
init_output_buffer
(
void
)
{
output_buffer_size
=
1024
;
output_buffer_pos
=
0
;
output_buffer
=
xmalloc
(
output_buffer_size
);
}
void
flush_output_buffer
(
const
char
*
name
)
{
int
fd
=
open
(
name
,
O_WRONLY
|
O_CREAT
|
O_TRUNC
|
O_BINARY
,
0666
);
if
(
fd
==
-
1
)
error
(
"Error creating %s
\n
"
,
name
);
if
(
write
(
fd
,
output_buffer
,
output_buffer_pos
)
!=
output_buffer_pos
)
error
(
"Error writing to %s
\n
"
,
name
);
close
(
fd
);
free
(
output_buffer
);
}
void
put_byte
(
unsigned
char
val
)
{
check_output_buffer_space
(
1
);
output_buffer
[
output_buffer_pos
++
]
=
val
;
}
void
put_word
(
unsigned
short
val
)
{
check_output_buffer_space
(
2
);
output_buffer
[
output_buffer_pos
++
]
=
val
;
output_buffer
[
output_buffer_pos
++
]
=
val
>>
8
;
}
void
put_dword
(
unsigned
int
val
)
{
check_output_buffer_space
(
4
);
output_buffer
[
output_buffer_pos
++
]
=
val
;
output_buffer
[
output_buffer_pos
++
]
=
val
>>
8
;
output_buffer
[
output_buffer_pos
++
]
=
val
>>
16
;
output_buffer
[
output_buffer_pos
++
]
=
val
>>
24
;
}
void
align_output
(
unsigned
int
align
)
{
size_t
size
=
align
-
(
output_buffer_pos
%
align
);
if
(
size
==
align
)
return
;
check_output_buffer_space
(
size
);
memset
(
output_buffer
+
output_buffer_pos
,
0
,
size
);
output_buffer_pos
+=
size
;
}
tools/wmc/utils.h
View file @
b53773cf
...
...
@@ -41,17 +41,4 @@ char *unicode_to_utf8( const WCHAR *src, int srclen, int *dstlen );
int
is_valid_codepage
(
int
id
);
WCHAR
*
codepage_to_unicode
(
int
codepage
,
const
char
*
src
,
int
srclen
,
int
*
dstlen
);
/* buffer management */
extern
unsigned
char
*
output_buffer
;
extern
size_t
output_buffer_pos
;
extern
size_t
output_buffer_size
;
extern
void
init_output_buffer
(
void
);
extern
void
flush_output_buffer
(
const
char
*
name
);
extern
void
put_byte
(
unsigned
char
val
);
extern
void
put_word
(
unsigned
short
val
);
extern
void
put_dword
(
unsigned
int
val
);
extern
void
align_output
(
unsigned
int
align
);
#endif
tools/wrc/genres.c
View file @
b53773cf
...
...
@@ -42,64 +42,9 @@
#include "wingdi.h"
#include "winuser.h"
static
unsigned
char
*
output_buffer
;
static
size_t
output_buffer_pos
;
static
size_t
output_buffer_size
;
static
void
check_output_buffer_space
(
size_t
size
)
{
if
(
output_buffer_pos
+
size
>=
output_buffer_size
)
{
output_buffer_size
=
max
(
output_buffer_size
*
2
,
output_buffer_pos
+
size
);
output_buffer
=
xrealloc
(
output_buffer
,
output_buffer_size
);
}
}
static
void
init_output_buffer
(
void
)
{
output_buffer_size
=
1024
;
output_buffer_pos
=
0
;
output_buffer
=
xmalloc
(
output_buffer_size
);
}
static
void
put_data
(
const
void
*
data
,
size_t
size
)
{
check_output_buffer_space
(
size
);
memcpy
(
output_buffer
+
output_buffer_pos
,
data
,
size
);
output_buffer_pos
+=
size
;
}
static
void
put_byte
(
unsigned
char
val
)
{
check_output_buffer_space
(
1
);
output_buffer
[
output_buffer_pos
++
]
=
val
;
}
static
void
put_word
(
unsigned
short
val
)
{
check_output_buffer_space
(
2
);
output_buffer
[
output_buffer_pos
++
]
=
val
;
output_buffer
[
output_buffer_pos
++
]
=
val
>>
8
;
}
static
void
put_dword
(
unsigned
int
val
)
{
check_output_buffer_space
(
4
);
output_buffer
[
output_buffer_pos
++
]
=
val
;
output_buffer
[
output_buffer_pos
++
]
=
val
>>
8
;
output_buffer
[
output_buffer_pos
++
]
=
val
>>
16
;
output_buffer
[
output_buffer_pos
++
]
=
val
>>
24
;
}
static
void
align_output
(
unsigned
int
align
)
{
size_t
size
=
align
-
(
output_buffer_pos
%
align
);
if
(
size
==
align
)
return
;
check_output_buffer_space
(
size
);
memset
(
output_buffer
+
output_buffer_pos
,
0
,
size
);
output_buffer_pos
+=
size
;
}
unsigned
char
*
output_buffer
=
NULL
;
size_t
output_buffer_pos
=
0
;
size_t
output_buffer_size
=
0
;
static
void
set_word
(
int
ofs
,
unsigned
int
w
)
{
...
...
@@ -1202,13 +1147,6 @@ static void dlginit2res(name_id_t *name, dlginit_t *dit)
*/
void
write_resfile
(
char
*
outname
,
resource_t
*
top
)
{
FILE
*
fo
;
unsigned
int
ret
;
fo
=
fopen
(
outname
,
"wb"
);
if
(
!
fo
)
fatal_perror
(
"Could not open %s"
,
outname
);
init_output_buffer
();
if
(
win32
)
...
...
@@ -1256,12 +1194,5 @@ void write_resfile(char *outname, resource_t *top)
if
(
win32
)
align_output
(
4
);
}
ret
=
fwrite
(
output_buffer
,
1
,
output_buffer_pos
,
fo
);
if
(
ret
!=
output_buffer_pos
)
{
fclose
(
fo
);
error
(
"Error writing %s
\n
"
,
outname
);
}
if
(
fclose
(
fo
))
fatal_perror
(
"Error writing %s"
,
outname
);
flush_output_buffer
(
outname
);
}
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