99
1010static int num = 0 ;
1111
12- static int generateScreenshot (const char * path )
12+ static Result generateScreenshot (const char * path )
1313{
1414 int x = 0 , y = 0 ;
1515 Handle handle ;
1616 u32 bytesWritten = 0 ;
1717 u64 offset = 0 ;
1818 size_t size = 0x36 ;
19+ Result ret = 0 ;
1920
2021 // Get top/bottom framebuffers
2122 u8 * gfxBottom = gfxGetFramebuffer (GFX_BOTTOM , GFX_BOTTOM , NULL , NULL );
2223 u8 * gfxTopLeft = gfxGetFramebuffer (GFX_TOP , GFX_LEFT , NULL , NULL );
2324
2425 // Open file for writing screenshot
25- fsOpen (& handle , fsArchive , path , (FS_OPEN_CREATE | FS_OPEN_WRITE ));
26+ if (R_FAILED (ret = fsOpen (& handle , fsArchive , path , (FS_OPEN_CREATE | FS_OPEN_WRITE ))))
27+ return ret ;
2628
2729 // Some
28- u8 * buffer = (u8 * )malloc (size + 576000 );
29- memset (buffer , 0 , size + 576000 );
30- buffer [size + 576000 ] = 0 ;
30+ u8 * buf = (u8 * )malloc (size + 576000 );
31+ memset (buf , 0 , size + 576000 );
32+ buf [size + 576000 ] = 0 ;
3133
32- FSFILE_SetSize (handle , (u16 )(size + 576000 ));
34+ if (R_FAILED (ret = FSFILE_SetSize (handle , (u16 )(size + 576000 ))))
35+ {
36+ free (buf );
37+ return ret ;
38+ }
3339
34- * (u16 * )& buffer [0x0 ] = 0x4D42 ;
35- * (u32 * )& buffer [0x2 ] = size + 576000 ;
36- * (u32 * )& buffer [0xA ] = size ;
37- * (u32 * )& buffer [0xE ] = 0x28 ;
38- * (u32 * )& buffer [0x12 ] = 400 ;
39- * (u32 * )& buffer [0x16 ] = 480 ;
40- * (u32 * )& buffer [0x1A ] = 0x00180001 ;
41- * (u32 * )& buffer [0x22 ] = 576000 ;
40+ * (u16 * )& buf [0x0 ] = 0x4D42 ;
41+ * (u32 * )& buf [0x2 ] = size + 576000 ;
42+ * (u32 * )& buf [0xA ] = size ;
43+ * (u32 * )& buf [0xE ] = 0x28 ;
44+ * (u32 * )& buf [0x12 ] = 400 ;
45+ * (u32 * )& buf [0x16 ] = 480 ;
46+ * (u32 * )& buf [0x1A ] = 0x00180001 ;
47+ * (u32 * )& buf [0x22 ] = 576000 ;
4248
4349 // Generate top left
4450 u8 * framebuf = gfxTopLeft ;
@@ -49,9 +55,9 @@ static int generateScreenshot(const char * path)
4955 {
5056 int si = ((239 - y ) + (x * 240 )) * 3 ;
5157 int di = size + (x + ((479 - y ) * 400 )) * 3 ;
52- buffer [di ++ ] = framebuf [si ++ ];
53- buffer [di ++ ] = framebuf [si ++ ];
54- buffer [di ++ ] = framebuf [si ++ ];
58+ buf [di ++ ] = framebuf [si ++ ];
59+ buf [di ++ ] = framebuf [si ++ ];
60+ buf [di ++ ] = framebuf [si ++ ];
5561 }
5662 }
5763
@@ -64,33 +70,42 @@ static int generateScreenshot(const char * path)
6470 {
6571 int si = ((239 - y ) + (x * 240 )) * 3 ;
6672 int di = size + ((x + 40 ) + ((239 - y ) * 400 )) * 3 ;
67- buffer [di ++ ] = framebuf [si ++ ];
68- buffer [di ++ ] = framebuf [si ++ ];
69- buffer [di ++ ] = framebuf [si ++ ];
73+ buf [di ++ ] = framebuf [si ++ ];
74+ buf [di ++ ] = framebuf [si ++ ];
75+ buf [di ++ ] = framebuf [si ++ ];
7076 }
7177
7278 // Make adjustments for the smaller width
7379 for (x = 0 ; x < 40 ; x ++ )
7480 {
7581 int di = size + (x + ((239 - y ) * 400 )) * 3 ;
76- buffer [di ++ ] = 0 ;
77- buffer [di ++ ] = 0 ;
78- buffer [di ++ ] = 0 ;
82+ buf [di ++ ] = 0 ;
83+ buf [di ++ ] = 0 ;
84+ buf [di ++ ] = 0 ;
7985 }
8086
8187 for (x = 360 ; x < 400 ; x ++ )
8288 {
8389 int di = size + (x + ((239 - y ) * 400 )) * 3 ;
84- buffer [di ++ ] = 0 ;
85- buffer [di ++ ] = 0 ;
86- buffer [di ++ ] = 0 ;
90+ buf [di ++ ] = 0 ;
91+ buf [di ++ ] = 0 ;
92+ buf [di ++ ] = 0 ;
8793 }
8894 }
8995
90- FSFILE_Write (handle , & bytesWritten , offset , (u32 * )buffer , size + 576000 , 0x10001 );
91- FSFILE_Close (handle );
92- free (buffer );
96+ if (R_FAILED (FSFILE_Write (handle , & bytesWritten , offset , (u32 * )buf , size + 576000 , 0x10001 )))
97+ {
98+ free (buf );
99+ return ret ;
100+ }
101+
102+ if (R_FAILED (FSFILE_Close (handle )))
103+ {
104+ free (buf );
105+ return ret ;
106+ }
93107
108+ free (buf );
94109 return 0 ;
95110}
96111
0 commit comments