33
44#include <pe_resource_loader.h>
55
6- #define STB_IMAGE_WRITE_IMPLEMENTATION
7- #include "stb_image_write.h"
8-
96int main (int argc , char * * argv ) {
107 if (argc < 2 ) {
118 printf ("No file was defined\n" );
@@ -22,14 +19,19 @@ int main(int argc, char ** argv) {
2219 continue ;
2320 }
2421
25- uint32_t bitmap_count = 0 ;
22+ uint16_t bitmap_count = 0 ;
2623 uint32_t * bitmap_ids = PeResourceLoader_GetResourceIds (loader , PRL_TYPE_BITMAP , & bitmap_count );
27- if (bitmap_count == 0 ) {
24+ uint16_t bitmap_name_count = 0 ;
25+ PRL_ResourceName * bitmap_names = PeResourceLoader_GetResourceNames (loader , PRL_TYPE_BITMAP , & bitmap_name_count );
26+ if (bitmap_count == 0 && bitmap_name_count == 0 ) {
2827 printf ("No bitmaps found in file %s\n" , argv [i ]);
2928 PeResourceLoader_Close (loader );
3029 if (bitmap_ids ) {
3130 free (bitmap_ids );
3231 }
32+ if (bitmap_names ) {
33+ free (bitmap_names );
34+ }
3335 return_value = 3 ;
3436 continue ;
3537 }
@@ -42,6 +44,9 @@ int main(int argc, char ** argv) {
4244 if (bitmap_ids ) {
4345 free (bitmap_ids );
4446 }
47+ if (bitmap_names ) {
48+ free (bitmap_names );
49+ }
4550 if (languages ) {
4651 free (languages );
4752 }
@@ -52,22 +57,39 @@ int main(int argc, char ** argv) {
5257 for (uint16_t li = 0 ; li < language_count ; li ++ ) {
5358 printf ("Language with id %u:\n" , languages [li ]);
5459 for (uint16_t bi = 0 ; bi < bitmap_count ; bi ++ ) {
55- printf ("Found bitmap with id %u\n" , bitmap_ids [bi ]);
56- char * file_name = calloc (34 , sizeof (char ));
57- snprintf (file_name , 34 , "%i_%u_%u.bmp" , i , languages [li ], bitmap_ids [bi ]);
58- FILE * file = fopen (file_name , "wb" );
59- free (file_name );
6060 uint32_t file_size = 0 ;
6161 void * data = PeResourceLoader_GetResource (loader , PRL_TYPE_BITMAP , languages [li ], bitmap_ids [bi ], & file_size );
62- printf ("File size is %u\n" , file_size );
63- fwrite (data , 1 , file_size , file );
64- fclose (file );
65- free (data );
62+ if (file_size > 0 ) {
63+ char * file_name = calloc (32 + 32 + 5 , sizeof (char ));
64+ snprintf (file_name , 32 + 32 + 5 , "%u_%u.bmp" , bitmap_ids [bi ], languages [li ]);
65+ printf ("Exporting file %s\n" , file_name );
66+ FILE * file = fopen (file_name , "wb" );
67+ free (file_name );
68+ fwrite (data , 1 , file_size , file );
69+ fclose (file );
70+ }
71+ if (data != NULL )
72+ free (data );
73+ }
74+ for (uint16_t bi = 0 ; bi < bitmap_name_count ; bi ++ ) {
75+ uint32_t file_size = 0 ;
76+ void * data = PeResourceLoader_GetNamedResource (loader , PRL_TYPE_BITMAP , languages [li ], & bitmap_names [bi ], & file_size );
77+ if (file_size > 0 ) {
78+ char * file_name = calloc (bitmap_names [bi ].name_length + 32 + 4 , sizeof (char ));
79+ snprintf (file_name , bitmap_names [bi ].name_length + 32 + 4 , "%s_%u.bmp" , bitmap_names [bi ].name , languages [li ]);
80+ printf ("Exporting file %s\n" , file_name );
81+ FILE * file = fopen (file_name , "wb" );
82+ free (file_name );
83+ fwrite (data , 1 , file_size , file );
84+ fclose (file );
85+ }
86+ if (data != NULL )
87+ free (data );
6688 }
67- printf ("\n" );
6889 }
6990 free (languages );
7091 free (bitmap_ids );
92+ free (bitmap_names );
7193
7294 PeResourceLoader_Close (loader );
7395 }
0 commit comments