123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- From 2aff8adc1dcd1315877fdb4ac4ef5e649c5b7d11 Mon Sep 17 00:00:00 2001
- From: Riku Viitanen <riku.viitanen@protonmail.com>
- Date: Sat, 10 Feb 2024 21:23:33 +0200
- Subject: [PATCH 1/2] romfile: implement a generic loader
- romfile_loadfile_g:
- Based on romfile_loadfile but more flexible. User has to supply pointer
- to a malloc function and the number of trailing padding bytes. Thus, any
- memory region may be used.
- romfile_loadfile:
- It is now a wrapper around romfile_loadfile_g. Functionality is the same.
- Signed-off-by: Riku Viitanen <riku.viitanen@protonmail.com>
- ---
- src/romfile.c | 25 ++++++++++++++++++++-----
- src/romfile.h | 2 ++
- 2 files changed, 22 insertions(+), 5 deletions(-)
- diff --git a/src/romfile.c b/src/romfile.c
- index b598274e..8bf95713 100644
- --- a/src/romfile.c
- +++ b/src/romfile.c
- @@ -47,10 +47,12 @@ romfile_find(const char *name)
- return __romfile_findprefix(name, strlen(name) + 1, NULL);
- }
-
- -// Helper function to find, malloc_tmphigh, and copy a romfile. This
- -// function adds a trailing zero to the malloc'd copy.
- +// Generic function to find romfile, malloc (using provided function
- +// pointer), and copy a romfile. add_len specifies how many additional
- +// trailing bytes to reserve. The extra bytes will not be initialised.
- void *
- -romfile_loadfile(const char *name, int *psize)
- +romfile_loadfile_g(const char *name, int *psize,
- + void *(*malloc_fn)(), int add_len)
- {
- struct romfile_s *file = romfile_find(name);
- if (!file)
- @@ -60,7 +62,7 @@ romfile_loadfile(const char *name, int *psize)
- if (!filesize)
- return NULL;
-
- - char *data = malloc_tmphigh(filesize+1);
- + char *data = malloc_fn(filesize+add_len);
- if (!data) {
- warn_noalloc();
- return NULL;
- @@ -74,7 +76,20 @@ romfile_loadfile(const char *name, int *psize)
- }
- if (psize)
- *psize = filesize;
- - data[filesize] = '\0';
- +
- + return data;
- +}
- +
- +// Helper function to find, malloc_tmphigh, and copy a romfile. This
- +// function adds a trailing zero to the malloc'd copy.
- +void *
- +romfile_loadfile(const char *name, int *psize)
- +{
- + char *data = romfile_loadfile_g(name, psize, &malloc_tmphigh, 1);
- + if (!data)
- + return NULL;
- +
- + data[*psize] = '\0';
- return data;
- }
-
- diff --git a/src/romfile.h b/src/romfile.h
- index 3e0f8200..a320a5bc 100644
- --- a/src/romfile.h
- +++ b/src/romfile.h
- @@ -13,6 +13,8 @@ struct romfile_s {
- void romfile_add(struct romfile_s *file);
- struct romfile_s *romfile_findprefix(const char *prefix, struct romfile_s *prev);
- struct romfile_s *romfile_find(const char *name);
- +void *romfile_loadfile_g(const char *name, int *psize,
- + void *(*malloc_fn)(), int add_len);
- void *romfile_loadfile(const char *name, int *psize);
- u64 romfile_loadint(const char *name, u64 defval);
-
- --
- 2.43.0
|