chiark / gitweb /
Get rid of write_safe
[elogind.git] / src / shared / util.c
index f9cbb2073c9a535e3bb41de0f5cd828809b3ae73..30512d16462bf5c528660a66a9ab8e10380ed402 100644 (file)
@@ -3893,7 +3893,7 @@ int fopen_temporary(const char *path, FILE **_f, char **_temp_path) {
         t[k] = '.';
         stpcpy(stpcpy(t+k+1, fn), "XXXXXX");
 
-        fd = mkostemp(t, O_WRONLY|O_CLOEXEC);
+        fd = mkostemp_safe(t, O_WRONLY|O_CLOEXEC);
         if (fd < 0) {
                 free(t);
                 return -errno;
@@ -6093,33 +6093,19 @@ 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;
         int r;
+        _cleanup_umask_ mode_t u;
 
         assert(pattern);
 
+        u = umask(077);
+
         /* This is much like like mkostemp() but avoids using any
-         * static variables, thus is async signal safe */
+         * static variables, thus is async signal safe. Also, it's not
+         * subject to umask(). */
 
         s = endswith(pattern, "XXXXXX");
         if (!s)