]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
efi: modernize file_read() a bit
authorLennart Poettering <lennart@poettering.net>
Thu, 18 Jul 2019 18:59:05 +0000 (20:59 +0200)
committerLennart Poettering <lennart@poettering.net>
Thu, 25 Jul 2019 15:10:51 +0000 (17:10 +0200)
src/boot/efi/util.c

index 4134e2200a9c87d4e7adf73e0b3c424529150aea..6d2ad3d50bddd51fd7ce30c52bfa70ad40618d23 100644 (file)
@@ -309,8 +309,8 @@ CHAR8 *strchra(CHAR8 *s, CHAR8 c) {
         return NULL;
 }
 
-EFI_STATUS file_read(EFI_FILE_HANDLE dir, const CHAR16 *name, UINTN off, UINTN size, CHAR8 **content, UINTN *content_size) {
-        EFI_FILE_HANDLE handle;
+EFI_STATUS file_read(EFI_FILE_HANDLE dir, const CHAR16 *name, UINTN off, UINTN size, CHAR8 **ret, UINTN *ret_size) {
+        _cleanup_(FileHandleClosep) EFI_FILE_HANDLE handle = NULL;
         _cleanup_freepool_ CHAR8 *buf = NULL;
         EFI_STATUS err;
 
@@ -322,6 +322,9 @@ EFI_STATUS file_read(EFI_FILE_HANDLE dir, const CHAR16 *name, UINTN off, UINTN s
                 _cleanup_freepool_ EFI_FILE_INFO *info;
 
                 info = LibFileInfo(handle);
+                if (!info)
+                        return EFI_OUT_OF_RESOURCES;
+
                 size = info->FileSize+1;
         }
 
@@ -332,15 +335,18 @@ EFI_STATUS file_read(EFI_FILE_HANDLE dir, const CHAR16 *name, UINTN off, UINTN s
         }
 
         buf = AllocatePool(size + 1);
+        if (!buf)
+                return EFI_OUT_OF_RESOURCES;
+
         err = uefi_call_wrapper(handle->Read, 3, handle, &size, buf);
-        if (!EFI_ERROR(err)) {
-                buf[size] = '\0';
-                *content = buf;
-                buf = NULL;
-                if (content_size)
-                        *content_size = size;
-        }
-        uefi_call_wrapper(handle->Close, 1, handle);
+        if (EFI_ERROR(err))
+                return err;
+
+        buf[size] = '\0';
+
+        *ret = TAKE_PTR(buf);
+        if (ret_size)
+                *ret_size = size;
 
         return err;
 }