PatchworkOS  19e446b
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/fs.h>
4
5char* reads(fd_t fd)
6{
7 uint64_t size = 4096;
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
36 if (bytesRead == 0)
37 {
38 break;
39 }
40 totalRead += bytesRead;
41 }
42
43 if (totalRead + 1 < size)
44 {
45 char* newBuffer = realloc(buffer, totalRead + 1);
46 if (newBuffer != NULL)
47 {
48 buffer = newBuffer;
49 }
50 }
51
52 buffer[totalRead] = '\0';
53 return buffer;
54}
EFI_PHYSICAL_ADDRESS buffer
Definition main.c:237
char * reads(fd_t fd)
Wrapper for reading a file directly into a null-terminated string.
Definition sread.c:5
size_t read(fd_t fd, void *buffer, size_t count)
System call for reading from files.
Definition read.c:8
#define NULL
Pointer error value.
Definition NULL.h:25
#define ERR
Integer error value.
Definition ERR.h:17
__UINT64_TYPE__ fd_t
File descriptor type.
Definition fd_t.h:10
__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