Commit e3e19052 authored by Willy Tarreau's avatar Willy Tarreau Committed by Paul E. McKenney

tools/nolibc/stdio: add fwrite() to stdio

We'll use it to write substrings. It relies on a simpler _fwrite() that
only takes one size. fputs() was also modified to rely on it.
Signed-off-by: default avatarWilly Tarreau <w@1wt.eu>
Signed-off-by: default avatarPaul E. McKenney <paulmck@kernel.org>
parent 99b037cb
......@@ -84,12 +84,14 @@ int putchar(int c)
}
/* puts(), fputs(). Note that puts() emits '\n' but not fputs(). */
/* fwrite(), 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.
*/
static __attribute__((unused))
int fputs(const char *s, FILE *stream)
int _fwrite(const void *buf, size_t size, FILE *stream)
{
size_t len = strlen(s);
ssize_t ret;
int fd;
......@@ -98,16 +100,35 @@ int fputs(const char *s, FILE *stream)
fd = 3 + (long)stream;
while (len > 0) {
ret = write(fd, s, len);
while (size) {
ret = write(fd, buf, size);
if (ret <= 0)
return EOF;
s += ret;
len -= ret;
size -= ret;
buf += ret;
}
return 0;
}
static __attribute__((unused))
size_t fwrite(const void *s, size_t size, size_t nmemb, FILE *stream)
{
size_t written;
for (written = 0; written < nmemb; written++) {
if (_fwrite(s, size, stream) != 0)
break;
s += size;
}
return written;
}
static __attribute__((unused))
int fputs(const char *s, FILE *stream)
{
return _fwrite(s, strlen(s), stream);
}
static __attribute__((unused))
int puts(const char *s)
{
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment