summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2014-01-28 18:23:38 -0500
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2014-01-28 19:07:12 -0500
commit87b0284327e34a4b96c22085fa2cdb3219294991 (patch)
tree3dfa856eb4ee93e6e7808f442a7dd14daff00d8e
parent7b36bf82c4deeadef6d914cef750b4a51ff2ed48 (diff)
Get rid of write_safe
Current glibc implementation is safe. Kernel does this atomically, and write is actually implemented through writev. So if write is async-signal-safe, than writev pretty much must be too.
-rw-r--r--src/journal/journal-send.c2
-rw-r--r--src/shared/util.c18
-rw-r--r--src/test/test-util.c12
3 files changed, 7 insertions, 25 deletions
diff --git a/src/journal/journal-send.c b/src/journal/journal-send.c
index 960c5776b0..ca9199f718 100644
--- a/src/journal/journal-send.c
+++ b/src/journal/journal-send.c
@@ -314,7 +314,7 @@ _public_ int sd_journal_sendv(const struct iovec *iov, int n) {
if (buffer_fd < 0)
return buffer_fd;
- n = writev_safe(buffer_fd, w, j);
+ n = writev(buffer_fd, w, j);
if (n < 0) {
close_nointr_nofail(buffer_fd);
return -errno;
diff --git a/src/shared/util.c b/src/shared/util.c
index 2b91ef8a8f..30512d1646 100644
--- a/src/shared/util.c
+++ b/src/shared/util.c
@@ -6093,24 +6093,6 @@ int getpeersec(int fd, char **ret) {
return 0;
}
-int writev_safe(int fd, const struct iovec *w, int j) {
- for (int i = 0; i < j; i++) {
- size_t written = 0;
-
- while (written < w[i].iov_len) {
- ssize_t r;
-
- r = write(fd, (char*) w[i].iov_base + written, w[i].iov_len - written);
- if (r < 0 && errno != -EINTR)
- return -errno;
-
- written += r;
- }
- }
-
- return 0;
-}
-
int mkostemp_safe(char *pattern, int flags) {
unsigned long tries = TMP_MAX;
char *s;
diff --git a/src/test/test-util.c b/src/test/test-util.c
index 43bb0249a2..9d6f4be502 100644
--- a/src/test/test-util.c
+++ b/src/test/test-util.c
@@ -580,8 +580,8 @@ static void test_in_set(void) {
assert_se(!IN_SET(0, 1, 2, 3, 4));
}
-static void test_writev_safe(void) {
- char name[] = "/tmp/test-writev_safe.XXXXXX";
+static void test_writing_tmpfile(void) {
+ char name[] = "/tmp/test-systemd_writing_tmpfile.XXXXXX";
_cleanup_free_ char *contents;
size_t size;
int fd, r;
@@ -592,10 +592,10 @@ static void test_writev_safe(void) {
IOVEC_SET_STRING(iov[2], "");
fd = mkostemp_safe(name, O_RDWR|O_CLOEXEC);
- printf("test_writev_safe: %s", name);
+ printf("tmpfile: %s", name);
- r = writev_safe(fd, iov, 3);
- assert(r == 0);
+ r = writev(fd, iov, 3);
+ assert(r >= 0);
r = read_full_file(name, &contents, &size);
assert(r == 0);
@@ -640,7 +640,7 @@ int main(int argc, char *argv[]) {
test_fstab_node_to_udev_node();
test_get_files_in_directory();
test_in_set();
- test_writev_safe();
+ test_writing_tmpfile();
return 0;
}