]>
git.ipfire.org Git - thirdparty/systemd.git/blob - src/test/test-io-util.c
1 /* SPDX-License-Identifier: LGPL-2.1+ */
7 #include "alloc-util.h"
12 static void test_sparse_write_one(int fd
, const char *buffer
, size_t n
) {
15 assert_se(lseek(fd
, 0, SEEK_SET
) == 0);
16 assert_se(ftruncate(fd
, 0) >= 0);
17 assert_se(sparse_write(fd
, buffer
, n
, 4) == (ssize_t
) n
);
19 assert_se(lseek(fd
, 0, SEEK_CUR
) == (off_t
) n
);
20 assert_se(ftruncate(fd
, n
) >= 0);
22 assert_se(lseek(fd
, 0, SEEK_SET
) == 0);
23 assert_se(read(fd
, check
, n
) == (ssize_t
) n
);
25 assert_se(memcmp(buffer
, check
, n
) == 0);
28 static void test_sparse_write(void) {
29 const char test_a
[] = "test";
30 const char test_b
[] = "\0\0\0\0test\0\0\0\0";
31 const char test_c
[] = "\0\0test\0\0\0\0";
32 const char test_d
[] = "\0\0test\0\0\0test\0\0\0\0test\0\0\0\0\0test\0\0\0test\0\0\0\0test\0\0\0\0\0\0\0\0";
33 const char test_e
[] = "test\0\0\0\0test";
34 _cleanup_close_
int fd
= -1;
35 char fn
[] = "/tmp/sparseXXXXXX";
37 fd
= mkostemp(fn
, O_CLOEXEC
);
41 test_sparse_write_one(fd
, test_a
, sizeof(test_a
));
42 test_sparse_write_one(fd
, test_b
, sizeof(test_b
));
43 test_sparse_write_one(fd
, test_c
, sizeof(test_c
));
44 test_sparse_write_one(fd
, test_d
, sizeof(test_d
));
45 test_sparse_write_one(fd
, test_e
, sizeof(test_e
));