vg_assert(buf);
for(;;) {
+ Int oflags = VKI_O_CREAT|VKI_O_WRONLY|VKI_O_EXCL|VKI_O_TRUNC;
SysRes sres;
if (seq == 0)
basename, coreext, VG_(getpid)(), seq);
seq++;
- sres = VG_(open)(buf,
- VKI_O_CREAT|VKI_O_WRONLY|VKI_O_EXCL|VKI_O_TRUNC,
- VKI_S_IRUSR|VKI_S_IWUSR);
+# if defined(VKI_O_LARGEFILE)
+ oflags |= VKI_O_LARGEFILE;
+# endif
+
+ sres = VG_(open)(buf, oflags, VKI_S_IRUSR|VKI_S_IWUSR);
if (!sr_isError(sres)) {
core_fd = sr_Res(sres);
break;
# endif
}
-OffT VG_(lseek) ( Int fd, OffT offset, Int whence )
+Off64T VG_(lseek) ( Int fd, Off64T offset, Int whence )
{
# if defined(VGO_linux) || defined(VGP_amd64_darwin)
+# if defined(__NR__llseek)
+ Off64T result;
+ SysRes res = VG_(do_syscall5)(__NR__llseek, fd,
+ offset >> 32, offset & 0xffffffff,
+ &result, whence);
+ return sr_isError(res) ? (-1) : result;
+# else
SysRes res = VG_(do_syscall3)(__NR_lseek, fd, offset, whence);
- vg_assert(sizeof(OffT) == sizeof(Word));
+ vg_assert(sizeof(Off64T) == sizeof(Word));
+ return sr_isError(res) ? (-1) : sr_Res(res);
+# endif
# elif defined(VGP_x86_darwin)
SysRes res = VG_(do_syscall4)(__NR_lseek, fd,
offset & 0xffffffff, offset >> 32, whence);
+ return sr_isError(res) ? (-1) : sr_Res(res);
# else
# error "Unknown plat"
# endif
- return sr_isError(res) ? (-1) : sr_Res(res);
/* if you change the error-reporting conventions of this, also
change VG_(pread) and all other usage points. */
}
extern Int VG_(read) ( Int fd, void* buf, Int count);
extern Int VG_(write) ( Int fd, const void* buf, Int count);
extern Int VG_(pipe) ( Int fd[2] );
-extern OffT VG_(lseek) ( Int fd, OffT offset, Int whence );
+extern Off64T VG_(lseek) ( Int fd, Off64T offset, Int whence );
extern SysRes VG_(stat) ( const Char* file_name, struct vg_stat* buf );
extern Int VG_(fstat) ( Int fd, struct vg_stat* buf );