Public bug reported:

I just upgraded to Trusty, and the following programs fails on x86:

#include <stdio.h>
#include <stdint.h>
#include <sys/uio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

int main()
{
        char *str0 = "hello ";
        char *str1 = "world\n";
        struct iovec iov[2];
        ssize_t nwritten;
        int fd = open("test.txt", O_CREAT | O_WRONLY);

        iov[0].iov_base = str0;
        iov[0].iov_len = strlen(str0);
        iov[1].iov_base = str1;
        iov[1].iov_len = strlen(str1);

        nwritten = pwritev(fd, iov, 2, 0);
        if(nwritten < 0)
                perror("pwritev");

        return 0;
}

Compiled without any flags, I see:

$ ./test
pwritev: File too large

And, from strace, I can see the offset parameter is handled wrongly by
(presumably) libc:

...
pwritev(3, [{"hello ", 6}, {"world\n", 6}], 2, 577730142772658176) = -1 EFBIG 
(File too large)
...

If I compile with -D_FILE_OFFSET_BITS=64, everything is right, but is
not a solution for my problem as I can't use that flag in my program.

I reported this here because it doesn't seem to happen on Debian sid,
but let me know if I have to report it upstream.

$ lsb_release -rd
Description:    Ubuntu 14.04 LTS
Release:        14.04

$ apt-cache policy libc6
libc6:
  Installed: 2.19-0ubuntu6
  Candidate: 2.19-0ubuntu6

** Affects: eglibc (Ubuntu)
     Importance: Undecided
         Status: New

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1309818

Title:
  pwritev() doesn't work anymore on i386

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/eglibc/+bug/1309818/+subscriptions

-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to