static void reliable_write(void *buf, unsigned long size)
 {
        while (size > 0) {
-               long ret = write(1, buf, size);
+               long ret = xwrite(1, buf, size);
                if (ret < 0) {
-                       if (errno == EAGAIN)
-                               continue;
                        if (errno == EPIPE)
                                exit(0);
                        die("git-tar-tree: %s", strerror(errno));
                archive_time = time(NULL);
        if (basedir)
                write_header((unsigned char *)"0", TYPEFLAG_DIR, NULL, NULL,
-                       basedir, 040755, NULL, 0);
+                       basedir, 040777, NULL, 0);
        traverse_tree(buffer, size, NULL);
        free(buffer);
        write_trailer();