tools/nolibc: Add fread() to stdio.h

Add a very basic version of fread() like we already have for fwrite().

Signed-off-by: Daniel Palmer <daniel@thingy.jp>
Link: https://patch.msgid.link/20260105023629.1502801-2-daniel@thingy.jp
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net>
This commit is contained in:
Daniel Palmer
2026-01-05 11:36:27 +09:00
committed by Thomas Weißschuh
parent 6fe8360b16
commit edaf307431

View File

@@ -170,7 +170,7 @@ int putchar(int c)
}
/* fwrite(), puts(), fputs(). Note that puts() emits '\n' but not fputs(). */
/* fwrite(), fread(), puts(), fputs(). Note that puts() emits '\n' but not fputs(). */
/* internal fwrite()-like function which only takes a size and returns 0 on
* success or EOF on error. It automatically retries on short writes.
@@ -204,6 +204,38 @@ size_t fwrite(const void *s, size_t size, size_t nmemb, FILE *stream)
return written;
}
/* internal fread()-like function which only takes a size and returns 0 on
* success or EOF on error. It automatically retries on short reads.
*/
static __attribute__((unused))
int _fread(void *buf, size_t size, FILE *stream)
{
int fd = fileno(stream);
ssize_t ret;
while (size) {
ret = read(fd, buf, size);
if (ret <= 0)
return EOF;
size -= ret;
buf += ret;
}
return 0;
}
static __attribute__((unused))
size_t fread(void *s, size_t size, size_t nmemb, FILE *stream)
{
size_t nread;
for (nread = 0; nread < nmemb; nread++) {
if (_fread(s, size, stream) != 0)
break;
s += size;
}
return nread;
}
static __attribute__((unused))
int fputs(const char *s, FILE *stream)
{