]> git.ipfire.org Git - thirdparty/rsync.git/commitdiff
Fix Solaris xattr retry handling master
authorAlphaGlider25 <12aa44edsta@gmail.com>
Fri, 19 Jun 2026 01:30:48 +0000 (03:30 +0200)
committerAndrew Tridgell <andrew@tridgell.net>
Sun, 21 Jun 2026 04:14:40 +0000 (14:14 +1000)
Use the remaining byte count for retry writes and avoid using a
size_t sentinel for write failures.

lib/sysxattrs.c

index 5a6aeaad982992c9c557ab7f49f8dae265c3399d..861af981def485ba43625472eccca8ced4583190 100644 (file)
@@ -227,19 +227,19 @@ int sys_lsetxattr(const char *path, const char *name, const void *value, size_t
                return -1;
 
        for (bufpos = 0; bufpos < size; ) {
                return -1;
 
        for (bufpos = 0; bufpos < size; ) {
-               ssize_t cnt = write(attrfd, (char*)value + bufpos, size);
+               ssize_t cnt = write(attrfd, (char*)value + bufpos, size - bufpos);
                if (cnt <= 0) {
                        if (cnt < 0 && errno == EINTR)
                                continue;
                if (cnt <= 0) {
                        if (cnt < 0 && errno == EINTR)
                                continue;
-                       bufpos = -1;
-                       break;
+                       close(attrfd);
+                       return -1;
                }
                bufpos += cnt;
        }
 
        close(attrfd);
 
                }
                bufpos += cnt;
        }
 
        close(attrfd);
 
-       return bufpos > 0 ? 0 : -1;
+       return 0;
 }
 
 int sys_lremovexattr(const char *path, const char *name)
 }
 
 int sys_lremovexattr(const char *path, const char *name)