]> code.delx.au - refind/blobdiff - libeg/screen.c
Properly initialise variable to fix detection of non-Arch kernel versions
[refind] / libeg / screen.c
index 9049d85ba224914a862264da5daa470261c895bf..506355e0e73b92773fe5d7b26ec8c452b40d2582 100644 (file)
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 /*
- * Modifications copyright (c) 2012 Roderick W. Smith
+ * Modifications copyright (c) 2012-2014 Roderick W. Smith
  *
  * Modifications distributed under the terms of the GNU General Public
- * License (GPL) version 3 (GPLv3), a copy of which must be distributed
- * with this source code or binaries made from it.
+ * License (GPL) version 3 (GPLv3), or (at your option) any later version.
  *
  */
+/*
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
 
 #include "libegint.h"
 #include "../refind/screen.h"
 #include "../refind/lib.h"
+#include "../refind/mystrings.h"
 #include "../include/refit_call_wrapper.h"
+#include "libeg.h"
+#include "../include/Handle.h"
 
 #include <efiUgaDraw.h>
 #include <efiConsoleControl.h>
@@ -477,6 +493,9 @@ VOID egScreenShot(VOID)
     UINT8           *FileData;
     UINTN           FileDataLength;
     UINTN           Index;
+    UINTN           ssNum;
+    CHAR16          Filename[80];
+    EFI_FILE*       BaseDir;
 
     Image = egCopyScreen();
     if (Image == NULL) {
@@ -492,11 +511,20 @@ VOID egScreenShot(VOID)
         goto bailout_wait;
     }
 
+    Status = egFindESP(&BaseDir);
+    if (EFI_ERROR(Status))
+        return;
+
+    // Search for existing screen shot files; increment number to an unused value...
+    ssNum = 001;
+    do {
+       SPrint(Filename, 80, L"screenshot_%03d.bmp", ssNum++);
+    } while (FileExists(BaseDir, Filename));
+
     // save to file on the ESP
-    Status = egSaveFile(NULL, L"screenshot.bmp", FileData, FileDataLength);
+    Status = egSaveFile(BaseDir, Filename, FileData, FileDataLength);
     FreePool(FileData);
-    if (EFI_ERROR(Status)) {
-        Print(L"Error egSaveFile: %x\n", Status);
+    if (CheckError(Status, L"in egSaveFile()")) {
         goto bailout_wait;
     }