copyMem(void *dst_v, void const *src_v, size_t len_v)
{
#if 1
+ // Do not use memcpy because this would dirty pages consisting only of
+ // '\0'
int *dst = dst_v;
int const *src = src_v;
size_t len = len_v / sizeof(int);
bool volatile res = false;
if (in_len==-1) return false;
- if (in_len>0 &&
- (lseek(out_fd, in_len-1, SEEK_SET)==-1 ||
- write(out_fd, "\0", 1)!=1)) // create sparse file
+ if (in_len>0 && ftruncate(out_fd, in_len)==-1) // create sparse file
return false;
bus_error = 0;
TESTSUITE_COPY_CODE;
copyMem(out_buf, in_buf, buf_size);
- munmap(const_cast(void *)(in_buf), buf_size); in_buf = 0;
munmap(out_buf, buf_size); out_buf = 0;
+ munmap(const_cast(void *)(in_buf), buf_size); in_buf = 0;
}
res = true;
}
out:
- if (in_buf !=0) munmap(const_cast(void *)(in_buf), buf_size);
if (out_buf!=0) munmap(out_buf, buf_size);
+ if (in_buf !=0) munmap(const_cast(void *)(in_buf), buf_size);
return res;
}
char const *dst)
{
int in_fd = open(src, O_RDONLY|O_NOCTTY|O_NONBLOCK|O_NOFOLLOW|O_LARGEFILE);
- int out_fd = in_fd==-1 ? -1 : open(dst, O_RDWR|O_CREAT|O_EXCL, 0200);
+ int out_fd = in_fd==-1 ? -1 : open(dst, O_RDWR|O_CREAT|O_EXCL|O_NOCTTY, 0200);
bool res = false;
if (in_fd==-1 || out_fd==-1 ||