From: Lucas De Marchi Date: Mon, 16 Jan 2012 17:46:01 +0000 (-0200) Subject: libkmod-util: add helper function to write to fd X-Git-Tag: v4~5 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f1cbf3cfe27bb3b76a15ce95a744502f04fac2d6;p=thirdparty%2Fkmod.git libkmod-util: add helper function to write to fd --- diff --git a/libkmod/libkmod-util.c b/libkmod/libkmod-util.c index a681906..7c2611b 100644 --- a/libkmod/libkmod-util.c +++ b/libkmod/libkmod-util.c @@ -230,6 +230,31 @@ ssize_t read_str_safe(int fd, char *buf, size_t buflen) return done; } +ssize_t write_str_safe(int fd, const char *buf, size_t buflen) +{ + size_t todo = buflen; + size_t done = 0; + + do { + ssize_t r = write(fd, buf + done, todo); + + if (r == 0) + break; + else if (r > 0) { + todo -= r; + done += r; + } else { + if (errno == EAGAIN || errno == EWOULDBLOCK || + errno == EINTR) + continue; + else + return -errno; + } + } while (todo > 0); + + return done; +} + int read_str_long(int fd, long *value, int base) { char buf[32], *end; diff --git a/libkmod/libkmod-util.h b/libkmod/libkmod-util.h index e8ed5ad..c9a1a21 100644 --- a/libkmod/libkmod-util.h +++ b/libkmod/libkmod-util.h @@ -15,6 +15,7 @@ char *underscores(struct kmod_ctx *ctx, char *s) __attribute__((nonnull(1, 2))); void *memdup(const void *p, size_t n) __attribute__((nonnull(1))); ssize_t read_str_safe(int fd, char *buf, size_t buflen) __must_check __attribute__((nonnull(2))); +ssize_t write_str_safe(int fd, const char *buf, size_t buflen) __attribute__((nonnull(2))); int read_str_long(int fd, long *value, int base) __must_check __attribute__((nonnull(2))); int read_str_ulong(int fd, unsigned long *value, int base) __must_check __attribute__((nonnull(2))); char *strchr_replace(char *s, int c, char r);