diff options
author | Martin Wilke <miwi@FreeBSD.org> | 2009-05-16 22:36:57 +0000 |
---|---|---|
committer | Martin Wilke <miwi@FreeBSD.org> | 2009-05-16 22:36:57 +0000 |
commit | 448a00f1dc0d290be873e79a333906cddf3e0b4d (patch) | |
tree | 51c9ad54fda7bc95efef9e745d805bb40fb9be71 /sysutils/e2fsprogs | |
parent | c424711199ee3e5bdaf98e7f9a4e1cb16f90070b (diff) | |
download | ports-448a00f1dc0d290be873e79a333906cddf3e0b4d.tar.gz ports-448a00f1dc0d290be873e79a333906cddf3e0b4d.zip |
Notes
Diffstat (limited to 'sysutils/e2fsprogs')
-rw-r--r-- | sysutils/e2fsprogs/files/patch-uuid-loop | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/sysutils/e2fsprogs/files/patch-uuid-loop b/sysutils/e2fsprogs/files/patch-uuid-loop new file mode 100644 index 000000000000..2c5c7b4c7afe --- /dev/null +++ b/sysutils/e2fsprogs/files/patch-uuid-loop @@ -0,0 +1,109 @@ +--- /dev/null ++++ b/lib/read_all.h +@@ -0,0 +1,32 @@ ++/* ++ * read_all - a read variant that masks EAGAIN and EINTR. ++ * This function tries hard to make sure to read the complete requested ++ * length, and if it hits EOF while reading, it returns 0. ++ * ++ * Originally written by Theodore Y. Ts'o. ++ * Factored out from misc/uuidd.c and lib/uuid/gen_uuid.c ++ * and bugfixed by Matthias Andree, 2009. ++ */ ++ ++ssize_t read_all(int fd, char *buf, size_t count) ++{ ++ ssize_t ret; ++ ssize_t c = 0; ++ ++ memset(buf, 0, count); ++ while (count > 0) { ++ ret = read(fd, buf, count); ++ if (ret == -1) { ++ if ((errno == EAGAIN) || (errno == EINTR)) ++ continue; ++ return -1; ++ } ++ if (ret == 0) { ++ return c; ++ } ++ count -= ret; ++ buf += ret; ++ c += ret; ++ } ++ return c; ++} +--- a/lib/uuid/Makefile.in ++++ b/lib/uuid/Makefile.in +@@ -190,7 +190,7 @@ clear.o: $(srcdir)/clear.c $(srcdir)/uuidP.h $(srcdir)/uuid.h + compare.o: $(srcdir)/compare.c $(srcdir)/uuidP.h $(srcdir)/uuid.h + copy.o: $(srcdir)/copy.c $(srcdir)/uuidP.h $(srcdir)/uuid.h + gen_uuid.o: $(srcdir)/gen_uuid.c $(srcdir)/uuidP.h $(srcdir)/uuid.h \ +- $(srcdir)/uuidd.h ++ $(srcdir)/uuidd.h $(top_srcdir)/lib/read_all.h + isnull.o: $(srcdir)/isnull.c $(srcdir)/uuidP.h $(srcdir)/uuid.h + pack.o: $(srcdir)/pack.c $(srcdir)/uuidP.h $(srcdir)/uuid.h + parse.o: $(srcdir)/parse.c $(srcdir)/uuidP.h $(srcdir)/uuid.h +--- a/lib/uuid/gen_uuid.c ++++ b/lib/uuid/gen_uuid.c +@@ -415,25 +415,11 @@ try_again: + return 0; + } + +-static ssize_t read_all(int fd, char *buf, size_t count) +-{ +- ssize_t ret; +- ssize_t c = 0; +- +- memset(buf, 0, count); +- while (count > 0) { +- ret = read(fd, buf, count); +- if (ret < 0) { +- if ((errno == EAGAIN) || (errno == EINTR)) +- continue; +- return -1; +- } +- count -= ret; +- buf += ret; +- c += ret; +- } +- return c; +-} ++/* ++ * Import read_all function and make it static. ++ */ ++static ++#include "read_all.h" + + /* + * Close all file descriptors +--- a/misc/uuidd.c ++++ b/misc/uuidd.c +@@ -85,25 +85,8 @@ static void create_daemon(void) + die("setreuid"); + } + +-static int read_all(int fd, char *buf, size_t count) +-{ +- ssize_t ret; +- int c = 0; +- +- memset(buf, 0, count); +- while (count > 0) { +- ret = read(fd, buf, count); +- if (ret < 0) { +- if ((errno == EAGAIN) || (errno == EINTR)) +- continue; +- return -1; +- } +- count -= ret; +- buf += ret; +- c += ret; +- } +- return c; +-} ++static ++#include "read_all.h" + + static int write_all(int fd, char *buf, size_t count) + { |