mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git
synced 2026-04-18 03:23:53 -04:00
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:
committed by
Thomas Weißschuh
parent
6fe8360b16
commit
edaf307431
@@ -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)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user