From: Rusty Russell Date: Fri, 14 Nov 2008 06:12:46 +0000 (+1030) Subject: Fix new glibc warnings about warn_unused_result. X-Git-Url: https://git.ozlabs.org/?p=ccan;a=commitdiff_plain;h=d92d6ae709aaed8546fbe5e9eaf2bfa46ff07d85 Fix new glibc warnings about warn_unused_result. --- diff --git a/ccan/antithread/antithread.c b/ccan/antithread/antithread.c index 9297cdac..7382c59e 100644 --- a/ccan/antithread/antithread.c +++ b/ccan/antithread/antithread.c @@ -11,6 +11,7 @@ #include "antithread.h" #include #include +#include #include /* FIXME: Valgrind support should be possible for some cases. Tricky @@ -290,7 +291,7 @@ struct athread *at_spawn(struct at_pool *pool, void *arg, char *cmdline[]) execvp(argv[0], argv); err = errno; - write(pool->parent_wfd, &err, sizeof(err)); + write_all(pool->parent_wfd, &err, sizeof(err)); exit(1); } diff --git a/ccan/read_write_all/_info.c b/ccan/read_write_all/_info.c new file mode 100644 index 00000000..32fccc88 --- /dev/null +++ b/ccan/read_write_all/_info.c @@ -0,0 +1,43 @@ +#include +#include +#include "config.h" + +/** + * read_write_all - read_all and write_all routines. + * + * Successful read and write calls may only partly complete if a + * signal is received or they are not operating on a normal file. + * + * read_all() and write_all() do the looping for you. + * + * Example: + * #include + * #include + * #include + * #include + * + * #define BUFFER_SIZE 10 + * int main(int argc, char *argv[]) + * { + * char buffer[BUFFER_SIZE+1]; + * + * if (!read_all(STDIN_FILENO, buffer, BUFFER_SIZE)) + * err(1, "Could not read %u characters", BUFFER_SIZE); + * buffer[BUFFER_SIZE] = '\0'; + * printf("I read '%.*s'\n", BUFFER_SIZE, buffer); + * return 0; + * } + * + * Licence: LGPL (2 or any later version) + */ +int main(int argc, char *argv[]) +{ + if (argc != 2) + return 1; + + if (strcmp(argv[1], "depends") == 0) { + return 0; + } + + return 1; +} diff --git a/ccan/read_write_all/read_write_all.c b/ccan/read_write_all/read_write_all.c new file mode 100644 index 00000000..406bd453 --- /dev/null +++ b/ccan/read_write_all/read_write_all.c @@ -0,0 +1,38 @@ +#include "read_write_all.h" +#include +#include + +bool write_all(int fd, const void *data, size_t size) +{ + while (size) { + ssize_t done; + + done = write(fd, data, size); + if (done < 0 && errno == EINTR) + continue; + if (done <= 0) + return false; + data += done; + size -= done; + } + + return true; +} + +bool read_all(int fd, void *data, size_t size) +{ + while (size) { + ssize_t done; + + done = read(fd, data, size); + if (done < 0 && errno == EINTR) + continue; + if (done <= 0) + return false; + data += done; + size -= done; + } + + return true; +} + diff --git a/ccan/read_write_all/read_write_all.h b/ccan/read_write_all/read_write_all.h new file mode 100644 index 00000000..05f79852 --- /dev/null +++ b/ccan/read_write_all/read_write_all.h @@ -0,0 +1,9 @@ +#ifndef _CCAN_READ_WRITE_H +#define _CCAN_READ_WRITE_H +#include +#include + +bool write_all(int fd, const void *data, size_t size); +bool read_all(int fd, void *data, size_t size); + +#endif /* _CCAN_READ_WRITE_H */ diff --git a/ccan/tap/tap.c b/ccan/tap/tap.c index 6e268324..6c454a5b 100644 --- a/ccan/tap/tap.c +++ b/ccan/tap/tap.c @@ -105,7 +105,8 @@ _gen_result(int ok, const char *func, char *file, unsigned int line, expansions on it */ if(test_name != NULL) { va_start(ap, test_name); - vasprintf(&local_test_name, test_name, ap); + if (vasprintf(&local_test_name, test_name, ap) < 0) + local_test_name = NULL; va_end(ap); /* Make sure the test name contains more than digits @@ -363,7 +364,8 @@ skip(unsigned int n, char *fmt, ...) LOCK; va_start(ap, fmt); - vasprintf(&skip_msg, fmt, ap); + if (vasprintf(&skip_msg, fmt, ap) < 0) + skip_msg = NULL; va_end(ap); while(n-- > 0) { @@ -386,7 +388,8 @@ todo_start(char *fmt, ...) LOCK; va_start(ap, fmt); - vasprintf(&todo_msg, fmt, ap); + if (vasprintf(&todo_msg, fmt, ap) < 0) + todo_msg = NULL; va_end(ap); todo = 1;