sandbox: Add a way to find the size of a file

Add a function to return the size of a file. This is useful in situations
where we need to allocate memory for it before reading it.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Marek Behún <marek.behun@nic.cz>
This commit is contained in:
Simon Glass
2021-08-18 21:40:30 -06:00
committed by Tom Rini
parent 79b3f36730
commit b4467fae06
2 changed files with 24 additions and 6 deletions

View File

@@ -133,6 +133,19 @@ int os_write_file(const char *fname, const void *buf, int size)
return 0;
}
int os_filesize(int fd)
{
off_t size;
size = os_lseek(fd, 0, OS_SEEK_END);
if (size < 0)
return -errno;
if (os_lseek(fd, 0, OS_SEEK_SET) < 0)
return -errno;
return size;
}
int os_read_file(const char *fname, void **bufp, int *sizep)
{
off_t size;
@@ -144,15 +157,12 @@ int os_read_file(const char *fname, void **bufp, int *sizep)
printf("Cannot open file '%s'\n", fname);
goto err;
}
size = os_lseek(fd, 0, OS_SEEK_END);
size = os_filesize(fd);
if (size < 0) {
printf("Cannot seek to end of file '%s'\n", fname);
goto err;
}
if (os_lseek(fd, 0, OS_SEEK_SET) < 0) {
printf("Cannot seek to start of file '%s'\n", fname);
printf("Cannot get file size of '%s'\n", fname);
goto err;
}
*bufp = os_malloc(size);
if (!*bufp) {
printf("Not enough memory to read file '%s'\n", fname);

View File

@@ -51,6 +51,14 @@ off_t os_lseek(int fd, off_t offset, int whence);
#define OS_SEEK_CUR 1
#define OS_SEEK_END 2
/**
* os_filesize() - Calculate the size of a file
*
* @fd: File descriptor as returned by os_open()
* Return: file size or negative error code
*/
int os_filesize(int fd);
/**
* Access to the OS open() system call
*