1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3 * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
4 * Copyright (c) 2017 Fujitsu Ltd.
5 */
6
7 #include <stdio.h>
8 #include <string.h>
9 #include <errno.h>
10 #include "tst_test.h"
11
12 static int fd;
13
verify_write(void)14 static void verify_write(void)
15 {
16 int i, badcount = 0;
17 char buf[BUFSIZ];
18
19 memset(buf, 'w', BUFSIZ);
20
21 SAFE_LSEEK(fd, 0, SEEK_SET);
22
23 for (i = BUFSIZ; i > 0; i--) {
24 TEST(write(fd, buf, i));
25 if (TST_RET == -1) {
26 tst_res(TFAIL | TTERRNO, "write failed");
27 return;
28 }
29
30 if (TST_RET != i) {
31 badcount++;
32 tst_res(TINFO, "write() returned %ld, expected %d",
33 TST_RET, i);
34 }
35 }
36
37 if (badcount != 0)
38 tst_res(TFAIL, "write() failed to return proper count");
39 else
40 tst_res(TPASS, "write() passed");
41 }
42
setup(void)43 static void setup(void)
44 {
45 fd = SAFE_OPEN("test_file", O_RDWR | O_CREAT, 0700);
46 }
47
cleanup(void)48 static void cleanup(void)
49 {
50 if (fd > 0)
51 SAFE_CLOSE(fd);
52 }
53
54 static struct tst_test test = {
55 .setup = setup,
56 .cleanup = cleanup,
57 .test_all = verify_write,
58 .needs_tmpdir = 1,
59 };
60