mirror of
git://source.winehq.org/git/wine.git
synced 2024-07-21 11:34:12 +00:00
winebuild: Use .incbin instead of printf for resource data.
This commit is contained in:
parent
69ea31ffb5
commit
0b3f90ab14
|
@ -44,6 +44,8 @@ struct resource
|
||||||
{
|
{
|
||||||
struct string_id type;
|
struct string_id type;
|
||||||
struct string_id name;
|
struct string_id name;
|
||||||
|
const char *input_name;
|
||||||
|
unsigned int input_offset;
|
||||||
const void *data;
|
const void *data;
|
||||||
unsigned int data_size;
|
unsigned int data_size;
|
||||||
unsigned int data_offset;
|
unsigned int data_offset;
|
||||||
|
@ -156,28 +158,6 @@ static void put_string( const struct string_id *str )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void dump_res_data( const struct resource *res )
|
|
||||||
{
|
|
||||||
unsigned int i = 0;
|
|
||||||
unsigned int size = (res->data_size + 3) & ~3;
|
|
||||||
|
|
||||||
if (!size) return;
|
|
||||||
|
|
||||||
input_buffer = res->data;
|
|
||||||
input_buffer_pos = 0;
|
|
||||||
input_buffer_size = size;
|
|
||||||
|
|
||||||
output( "\t.long " );
|
|
||||||
while (size > 4)
|
|
||||||
{
|
|
||||||
if ((i++ % 16) == 15) output( "0x%08x\n\t.long ", get_dword() );
|
|
||||||
else output( "0x%08x,", get_dword() );
|
|
||||||
size -= 4;
|
|
||||||
}
|
|
||||||
output( "0x%08x\n", get_dword() );
|
|
||||||
assert( input_buffer_pos == input_buffer_size );
|
|
||||||
}
|
|
||||||
|
|
||||||
/* check the file header */
|
/* check the file header */
|
||||||
/* all values must be zero except header size */
|
/* all values must be zero except header size */
|
||||||
static int check_header(void)
|
static int check_header(void)
|
||||||
|
@ -199,7 +179,7 @@ static int check_header(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* load the next resource from the current file */
|
/* load the next resource from the current file */
|
||||||
static void load_next_resource( DLLSPEC *spec )
|
static void load_next_resource( DLLSPEC *spec, const char *name )
|
||||||
{
|
{
|
||||||
unsigned int hdr_size;
|
unsigned int hdr_size;
|
||||||
struct resource *res = add_resource( spec );
|
struct resource *res = add_resource( spec );
|
||||||
|
@ -209,6 +189,9 @@ static void load_next_resource( DLLSPEC *spec )
|
||||||
if (hdr_size & 3) fatal_error( "%s header size not aligned\n", input_buffer_filename );
|
if (hdr_size & 3) fatal_error( "%s header size not aligned\n", input_buffer_filename );
|
||||||
if (hdr_size < 32) fatal_error( "%s invalid header size %u\n", input_buffer_filename, hdr_size );
|
if (hdr_size < 32) fatal_error( "%s invalid header size %u\n", input_buffer_filename, hdr_size );
|
||||||
|
|
||||||
|
res->input_name = xstrdup( name );
|
||||||
|
res->input_offset = input_buffer_pos - 2*sizeof(unsigned int) + hdr_size;
|
||||||
|
|
||||||
res->data = input_buffer + input_buffer_pos - 2*sizeof(unsigned int) + hdr_size;
|
res->data = input_buffer + input_buffer_pos - 2*sizeof(unsigned int) + hdr_size;
|
||||||
if ((const unsigned char *)res->data < input_buffer ||
|
if ((const unsigned char *)res->data < input_buffer ||
|
||||||
(const unsigned char *)res->data >= input_buffer + input_buffer_size)
|
(const unsigned char *)res->data >= input_buffer + input_buffer_size)
|
||||||
|
@ -237,7 +220,7 @@ int load_res32_file( const char *name, DLLSPEC *spec )
|
||||||
|
|
||||||
if ((ret = check_header()))
|
if ((ret = check_header()))
|
||||||
{
|
{
|
||||||
while (input_buffer_pos < input_buffer_size) load_next_resource( spec );
|
while (input_buffer_pos < input_buffer_size) load_next_resource( spec, name );
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -490,7 +473,7 @@ void output_resources( DLLSPEC *spec )
|
||||||
{
|
{
|
||||||
output( "\n\t.align %d\n", get_alignment(4) );
|
output( "\n\t.align %d\n", get_alignment(4) );
|
||||||
output( ".L__wine_spec_res_%d:\n", i );
|
output( ".L__wine_spec_res_%d:\n", i );
|
||||||
dump_res_data( res );
|
output( "\t.incbin \"%s\",%d,%d\n", res->input_name, res->input_offset, res->data_size );
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!is_pe())
|
if (!is_pe())
|
||||||
|
|
Loading…
Reference in a new issue