summaryrefslogtreecommitdiffstats
path: root/util.c
blob: 3907dad90edc74b22eb92f55b0e10ff08235bd20 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <unistd.h>

#include "util.h"

ssize_t loop_write(int fd, const void *b, size_t l) {
    ssize_t t = 0;
    while (l) {
        ssize_t r;

        if ((r = write(fd, b, l)) < 0)
            return t == 0 ? r : t;
        else if (r == 0)
            return t;

        b += r;
        l -= r;
        t += r;
    }

    return t;
}