PatchworkOS  966e257
A non-POSIX operating system.
Loading...
Searching...
No Matches
sread.c
Go to the documentation of this file.
1#include <stdio.h>
2#include <stdlib.h>
3#include <sys/io.h>
4
5char* sread(fd_t fd)
6{
7 uint64_t size = 128;
8 char* buffer = malloc(size);
9 if (buffer == NULL)
10 {
11 return NULL;
12 }
13
14 uint64_t totalRead = 0;
15 while (1)
16 {
17 if (totalRead == size)
18 {
19 size *= 2;
20 char* newBuffer = realloc(buffer, size);
21 if (newBuffer == NULL)
22 {
23 free(buffer);
24 return NULL;
25 }
26 buffer = newBuffer;
27 }
28
29 uint64_t bytesRead = read(fd, buffer + totalRead, size - totalRead);
30 if (bytesRead == ERR)
31 {
32 free(buffer);
33 return NULL;
34 }
35 if (bytesRead == 0)
36 {
37 break;
38 }
39 totalRead += bytesRead;
40 }
41
42 buffer[totalRead] = '\0';
43 return buffer;
44}
uint64_t read(fd_t fd, void *buffer, uint64_t count)
System call for reading from files.
Definition read.c:9
char * sread(fd_t fd)
Wrapper for reading a file directly into a null-terminated string.
Definition sread.c:5
#define NULL
Pointer error value.
Definition NULL.h:23
#define ERR
Integer error value.
Definition ERR.h:17
__UINT64_TYPE__ fd_t
A file descriptor.
Definition fd_t.h:12
EFI_PHYSICAL_ADDRESS buffer
Definition mem.c:15
__UINT64_TYPE__ uint64_t
Definition stdint.h:17
_PUBLIC void * realloc(void *ptr, size_t size)
Definition realloc.c:13
_PUBLIC void * malloc(size_t size)
Definition malloc.c:5
_PUBLIC void free(void *ptr)
Definition free.c:11