git: fe429e6794d3 - main - stand/efi: Changes to efichar to allow it to be used in the kernel
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Thu, 28 Mar 2024 18:09:50 UTC
The branch main has been updated by stevek:
URL: https://cgit.FreeBSD.org/src/commit/?id=fe429e6794d322636e7c1e520d50ec0cb711dd14
commit fe429e6794d322636e7c1e520d50ec0cb711dd14
Author: Stephen J. Kiernan <stevek@FreeBSD.org>
AuthorDate: 2024-03-27 22:37:48 +0000
Commit: Stephen J. Kiernan <stevek@FreeBSD.org>
CommitDate: 2024-03-28 18:09:37 +0000
stand/efi: Changes to efichar to allow it to be used in the kernel
Replace malloc/free with EFICHAR_MALLOC and EFICHAR_FREEE macros.
Obtained from: Juniper Networks, Inc.
Reviewed by: imp
Differential Revision: https://reviews.freebsd.org/D44541
---
stand/efi/include/efichar.h | 8 ++++++++
stand/efi/libefi/efichar.c | 17 ++++++++++++-----
2 files changed, 20 insertions(+), 5 deletions(-)
diff --git a/stand/efi/include/efichar.h b/stand/efi/include/efichar.h
index 4460f5efdcef..0a40906aeedf 100644
--- a/stand/efi/include/efichar.h
+++ b/stand/efi/include/efichar.h
@@ -37,4 +37,12 @@ int ucs2_to_utf8(const efi_char *, char **);
int utf8_to_ucs2(const char *, efi_char **, size_t *);
int ucs2len(const efi_char *);
+#ifdef _KERNEL
+#define EFICHAR_MALLOC(sz) malloc((sz), M_TEMP, M_WAITOK | M_ZERO)
+#define EFICHAR_FREE(sz) free((sz), M_TEMP)
+#else
+#define EFICHAR_MALLOC(sz) malloc(sz)
+#define EFICHAR_FREE(sz) free(sz)
+#endif
+
#endif /* _BOOT_EFI_EFICHAR_H_ */
diff --git a/stand/efi/libefi/efichar.c b/stand/efi/libefi/efichar.c
index 86642d325754..659212799b6a 100644
--- a/stand/efi/libefi/efichar.c
+++ b/stand/efi/libefi/efichar.c
@@ -25,14 +25,21 @@
*/
#include <sys/types.h>
+#ifndef _KERNEL
#include <errno.h>
+#endif
#ifdef _STANDALONE
#include <stand.h>
#else
+#ifdef _KERNEL
+#include <sys/malloc.h>
+#include <sys/systm.h>
+#else
#include <stddef.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
+#endif
#include <sys/efi.h>
#include <machine/efi.h>
#endif
@@ -87,7 +94,7 @@ ucs2_to_utf8(const efi_char *nm, char **name)
if (*name != NULL)
cp = *name;
else
- cp = *name = malloc(sz);
+ cp = *name = EFICHAR_MALLOC(sz);
if (*name == NULL)
return (ENOMEM);
@@ -114,7 +121,7 @@ ucs2_to_utf8(const efi_char *nm, char **name)
if (len >= sz) {
/* Absent bugs, we'll never return EOVERFLOW */
if (freeit) {
- free(*name);
+ EFICHAR_FREE(*name);
*name = NULL;
}
return (EOVERFLOW);
@@ -135,7 +142,7 @@ utf8_to_ucs2(const char *name, efi_char **nmp, size_t *len)
sz = strlen(name) * 2 + 2;
if (*nmp == NULL)
- *nmp = malloc(sz);
+ *nmp = EFICHAR_MALLOC(sz);
if (*nmp == NULL)
return (ENOMEM);
nm = *nmp;
@@ -183,7 +190,7 @@ utf8_to_ucs2(const char *name, efi_char **nmp, size_t *len)
}
if (sz < 2) {
if (freeit) {
- free(nm);
+ EFICHAR_FREE(nm);
*nmp = NULL;
}
return (EDOOFUS);
@@ -194,7 +201,7 @@ utf8_to_ucs2(const char *name, efi_char **nmp, size_t *len)
return (0);
ilseq:
if (freeit) {
- free(nm);
+ EFICHAR_FREE(nm);
*nmp = NULL;
}
return (EILSEQ);